From 003f83e28a48ef4b9b519bc6f97e6066655b8fc6 Mon Sep 17 00:00:00 2001 From: Aleksey Belouosv Date: Thu, 28 Mar 2019 17:57:26 +0300 Subject: [iOS] replace carthage with cocoapods, update facebook login sdk to v4.42.0 --- iphone/Maps/3party/Cartfile | 4 - iphone/Maps/3party/Cartfile.resolved | 6 - .../Build/Mac/Alamofire.framework/Alamofire | 1 - .../Carthage/Build/Mac/Alamofire.framework/Headers | 1 - .../Carthage/Build/Mac/Alamofire.framework/Modules | 1 - .../Build/Mac/Alamofire.framework/Resources | 1 - .../Mac/Alamofire.framework/Versions/A/Alamofire | Bin 1313548 -> 0 bytes .../Versions/A/Headers/Alamofire-Swift.h | 468 ---- .../Versions/A/Headers/Alamofire.h | 28 - .../Modules/Alamofire.swiftmodule/x86_64.swiftdoc | Bin 195692 -> 0 bytes .../Alamofire.swiftmodule/x86_64.swiftmodule | Bin 428984 -> 0 bytes .../Versions/A/Modules/module.modulemap | 11 - .../Versions/A/Resources/Info.plist | 49 - .../Build/Mac/Alamofire.framework/Versions/Current | 1 - .../Mac/AlamofireImage.framework/AlamofireImage | 1 - .../Build/Mac/AlamofireImage.framework/Headers | 1 - .../Build/Mac/AlamofireImage.framework/Modules | 1 - .../Build/Mac/AlamofireImage.framework/Resources | 1 - .../Versions/A/AlamofireImage | Bin 380556 -> 0 bytes .../Versions/A/Headers/AlamofireImage-Swift.h | 186 -- .../Versions/A/Headers/AlamofireImage.h | 28 - .../AlamofireImage.swiftmodule/x86_64.swiftdoc | Bin 34672 -> 0 bytes .../AlamofireImage.swiftmodule/x86_64.swiftmodule | Bin 79452 -> 0 bytes .../Versions/A/Modules/module.modulemap | 11 - .../Versions/A/Resources/Info.plist | 49 - .../Mac/AlamofireImage.framework/Versions/Current | 1 - .../Carthage/Build/Mac/Bolts.framework/Bolts | 1 - .../Carthage/Build/Mac/Bolts.framework/Headers | 1 - .../Carthage/Build/Mac/Bolts.framework/Modules | 1 - .../Carthage/Build/Mac/Bolts.framework/Resources | 1 - .../Build/Mac/Bolts.framework/Versions/A/Bolts | Bin 119964 -> 0 bytes .../Versions/A/Headers/BFCancellationToken.h | 42 - .../A/Headers/BFCancellationTokenRegistration.h | 29 - .../Versions/A/Headers/BFCancellationTokenSource.h | 60 - .../Versions/A/Headers/BFExecutor.h | 62 - .../Bolts.framework/Versions/A/Headers/BFGeneric.h | 25 - .../Bolts.framework/Versions/A/Headers/BFTask.h | 266 -- .../Versions/A/Headers/BFTaskCompletionSource.h | 75 - .../Mac/Bolts.framework/Versions/A/Headers/Bolts.h | 39 - .../Versions/A/Modules/module.modulemap | 6 - .../Versions/A/Resources/Info.plist | 44 - .../Build/Mac/Bolts.framework/Versions/Current | 1 - .../Carthage/Build/Mac/Pushwoosh.framework/Headers | 1 - .../Carthage/Build/Mac/Pushwoosh.framework/Modules | 1 - .../Build/Mac/Pushwoosh.framework/Pushwoosh | 1 - .../Build/Mac/Pushwoosh.framework/Resources | 1 - .../Versions/A/Headers/PWGDPRManager.h | 42 - .../Versions/A/Headers/PWInAppManager.h | 140 - .../Pushwoosh.framework/Versions/A/Headers/PWLog.h | 23 - .../Versions/A/Headers/PushNotificationManager.h | 521 ---- .../Versions/A/Headers/Pushwoosh.h | 14 - .../Versions/A/Modules/module.modulemap | 6 - .../Mac/Pushwoosh.framework/Versions/A/Pushwoosh | Bin 455948 -> 0 bytes .../Versions/A/Resources/Info.plist | 44 - .../Build/Mac/Pushwoosh.framework/Versions/Current | 1 - .../Carthage/Build/Mac/Timepiece.framework/Headers | 1 - .../Carthage/Build/Mac/Timepiece.framework/Modules | 1 - .../Build/Mac/Timepiece.framework/Resources | 1 - .../Build/Mac/Timepiece.framework/Timepiece | 1 - .../Versions/A/Headers/Timepiece-Swift.h | 187 -- .../Modules/Timepiece.swiftmodule/x86_64.swiftdoc | Bin 12452 -> 0 bytes .../Timepiece.swiftmodule/x86_64.swiftmodule | Bin 31900 -> 0 bytes .../Versions/A/Modules/module.modulemap | 4 - .../Versions/A/Resources/Info.plist | 49 - .../Mac/Timepiece.framework/Versions/A/Timepiece | Bin 69644 -> 0 bytes .../Build/Mac/Timepiece.framework/Versions/Current | 1 - .../AppsFlyerTracker.framework/AppsFlyerTracker | Bin 2190840 -> 0 bytes .../Headers/AppsFlyerCrossPromotionHelper.h | 25 - .../Headers/AppsFlyerLib-Prefix.pch | 10 - .../Headers/AppsFlyerLinkGenerator.h | 40 - .../Headers/AppsFlyerShareInviteHelper.h | 33 - .../Headers/AppsFlyerTracker.h | 349 --- .../iOS/AppsFlyerTracker.framework/Info.plist | Bin 741 -> 0 bytes .../Modules/module.modulemap | 6 - .../Carthage/Build/iOS/Bolts.framework/Bolts | Bin 2035924 -> 0 bytes .../Build/iOS/Bolts.framework/Headers/BFAppLink.h | 49 - .../Bolts.framework/Headers/BFAppLinkNavigation.h | 114 - .../Bolts.framework/Headers/BFAppLinkResolving.h | 30 - .../Headers/BFAppLinkReturnToRefererController.h | 88 - .../Headers/BFAppLinkReturnToRefererView.h | 78 - .../iOS/Bolts.framework/Headers/BFAppLinkTarget.h | 33 - .../Bolts.framework/Headers/BFCancellationToken.h | 42 - .../Headers/BFCancellationTokenRegistration.h | 29 - .../Headers/BFCancellationTokenSource.h | 60 - .../Build/iOS/Bolts.framework/Headers/BFExecutor.h | 62 - .../Build/iOS/Bolts.framework/Headers/BFGeneric.h | 25 - .../Bolts.framework/Headers/BFMeasurementEvent.h | 45 - .../Build/iOS/Bolts.framework/Headers/BFTask.h | 266 -- .../Headers/BFTaskCompletionSource.h | 75 - .../Build/iOS/Bolts.framework/Headers/BFURL.h | 75 - .../Headers/BFWebViewAppLinkResolver.h | 26 - .../Build/iOS/Bolts.framework/Headers/Bolts.h | 39 - .../Carthage/Build/iOS/Bolts.framework/Info.plist | Bin 721 -> 0 bytes .../iOS/Bolts.framework/Modules/module.modulemap | 15 - .../CoreActionSheetPicker | Bin 2264188 -> 0 bytes .../Headers/AbstractActionSheetPicker.h | 126 - .../Headers/ActionSheetCustomPicker.h | 37 - .../Headers/ActionSheetCustomPickerDelegate.h | 39 - .../Headers/ActionSheetDatePicker.h | 95 - .../Headers/ActionSheetDistancePicker.h | 39 - .../Headers/ActionSheetLocalePicker.h | 63 - .../Headers/ActionSheetMultipleStringPicker.h | 65 - .../Headers/ActionSheetPicker.h | 35 - .../Headers/ActionSheetStringPicker.h | 62 - .../Headers/CoreActionSheetPicker.h | 28 - .../Headers/DistancePickerView.h | 21 - .../iOS/CoreActionSheetPicker.framework/Info.plist | Bin 754 -> 0 bytes .../Modules/module.modulemap | 6 - .../Build/iOS/FBSDKCoreKit.framework/FBSDKCoreKit | Bin 11204196 -> 0 bytes .../Headers/FBSDKAccessToken.h | 190 -- .../Headers/FBSDKAppEvents.h | 694 ----- .../Headers/FBSDKAppLinkResolver.h | 82 - .../Headers/FBSDKAppLinkUtility.h | 89 - .../Headers/FBSDKApplicationDelegate.h | 92 - .../FBSDKCoreKit.framework/Headers/FBSDKButton.h | 26 - .../Headers/FBSDKConstants.h | 225 -- .../FBSDKCoreKit.framework/Headers/FBSDKCopying.h | 34 - .../FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h | 48 - .../Headers/FBSDKGraphErrorRecoveryProcessor.h | 99 - .../Headers/FBSDKGraphRequest.h | 123 - .../Headers/FBSDKGraphRequestConnection.h | 323 --- .../Headers/FBSDKGraphRequestDataAttachment.h | 52 - .../FBSDKCoreKit.framework/Headers/FBSDKMacros.h | 39 - .../Headers/FBSDKMutableCopying.h | 36 - .../FBSDKCoreKit.framework/Headers/FBSDKProfile.h | 166 -- .../Headers/FBSDKProfilePictureView.h | 60 - .../FBSDKCoreKit.framework/Headers/FBSDKSettings.h | 256 -- .../Headers/FBSDKTestUsersManager.h | 101 - .../FBSDKCoreKit.framework/Headers/FBSDKUtility.h | 76 - .../Build/iOS/FBSDKCoreKit.framework/Info.plist | Bin 753 -> 0 bytes .../Modules/module.modulemap | 6 - .../iOS/FBSDKLoginKit.framework/FBSDKLoginKit | Bin 2625452 -> 0 bytes .../Headers/FBSDKDeviceLoginCodeInfo.h | 62 - .../Headers/FBSDKDeviceLoginManager.h | 105 - .../Headers/FBSDKDeviceLoginManagerResult.h | 50 - .../Headers/FBSDKLoginButton.h | 131 - .../Headers/FBSDKLoginConstants.h | 99 - .../Headers/FBSDKLoginKit.h | 35 - .../Headers/FBSDKLoginManager.h | 212 -- .../Headers/FBSDKLoginManagerLoginResult.h | 64 - .../Headers/FBSDKLoginTooltipView.h | 90 - .../Headers/FBSDKTooltipView.h | 136 - .../Build/iOS/FBSDKLoginKit.framework/Info.plist | Bin 755 -> 0 bytes .../Modules/module.modulemap | 6 - .../iOS/FBSDKPlacesKit.framework/FBSDKPlacesKit | Bin 926392 -> 0 bytes .../Headers/FBSDKPlacesKit.h | 21 - .../Headers/FBSDKPlacesKitConstants.h | 296 --- .../Headers/FBSDKPlacesManager.h | 199 -- .../Build/iOS/FBSDKPlacesKit.framework/Info.plist | Bin 757 -> 0 bytes .../Modules/module.modulemap | 6 - .../iOS/FBSDKShareKit.framework/FBSDKShareKit | Bin 8627068 -> 0 bytes .../Headers/FBSDKAppGroupAddDialog.h | 96 - .../Headers/FBSDKAppGroupContent.h | 68 - .../Headers/FBSDKAppGroupJoinDialog.h | 92 - .../Headers/FBSDKAppInviteContent.h | 96 - .../Headers/FBSDKAppInviteDialog.h | 118 - .../Headers/FBSDKCameraEffectArguments.h | 57 - .../Headers/FBSDKCameraEffectTextures.h | 43 - .../Headers/FBSDKGameRequestContent.h | 140 - .../Headers/FBSDKGameRequestDialog.h | 108 - .../FBSDKShareKit.framework/Headers/FBSDKHashtag.h | 61 - .../Headers/FBSDKLikeButton.h | 45 - .../Headers/FBSDKLikeControl.h | 144 - .../Headers/FBSDKLikeObjectType.h | 40 - .../FBSDKShareKit.framework/Headers/FBSDKLiking.h | 49 - .../Headers/FBSDKMessageDialog.h | 47 - .../Headers/FBSDKSendButton.h | 33 - .../Headers/FBSDKShareAPI.h | 94 - .../Headers/FBSDKShareButton.h | 33 - .../Headers/FBSDKShareCameraEffectContent.h | 53 - .../Headers/FBSDKShareConstants.h | 57 - .../Headers/FBSDKShareDialog.h | 54 - .../Headers/FBSDKShareDialogMode.h | 65 - .../Headers/FBSDKShareKit.h | 62 - .../Headers/FBSDKShareLinkContent.h | 78 - .../Headers/FBSDKShareMediaContent.h | 41 - .../Headers/FBSDKShareMessengerActionButton.h | 34 - .../FBSDKShareMessengerGenericTemplateContent.h | 55 - .../FBSDKShareMessengerGenericTemplateElement.h | 56 - .../FBSDKShareMessengerMediaTemplateContent.h | 69 - ...DKShareMessengerOpenGraphMusicTemplateContent.h | 41 - .../Headers/FBSDKShareMessengerURLActionButton.h | 62 - .../Headers/FBSDKShareOpenGraphAction.h | 70 - .../Headers/FBSDKShareOpenGraphContent.h | 50 - .../Headers/FBSDKShareOpenGraphObject.h | 59 - .../Headers/FBSDKShareOpenGraphValueContainer.h | 162 -- .../Headers/FBSDKSharePhoto.h | 98 - .../Headers/FBSDKSharePhotoContent.h | 41 - .../Headers/FBSDKShareVideo.h | 102 - .../Headers/FBSDKShareVideoContent.h | 49 - .../FBSDKShareKit.framework/Headers/FBSDKSharing.h | 117 - .../Headers/FBSDKSharingButton.h | 37 - .../Headers/FBSDKSharingContent.h | 85 - .../Headers/FBSDKSharingScheme.h | 33 - .../Headers/FBSDKSharingValidation.h | 46 - .../Build/iOS/FBSDKShareKit.framework/Info.plist | Bin 755 -> 0 bytes .../Modules/module.modulemap | 6 - .../Build/iOS/FacebookCore.framework/FacebookCore | Bin 4727528 -> 0 bytes .../Headers/FacebookCore-Swift.h | 192 -- .../Build/iOS/FacebookCore.framework/Info.plist | Bin 740 -> 0 bytes .../Modules/FacebookCore.swiftmodule/arm.swiftdoc | Bin 92464 -> 0 bytes .../FacebookCore.swiftmodule/arm.swiftmodule | Bin 299328 -> 0 bytes .../FacebookCore.swiftmodule/arm64.swiftdoc | Bin 92464 -> 0 bytes .../FacebookCore.swiftmodule/arm64.swiftmodule | Bin 287040 -> 0 bytes .../Modules/FacebookCore.swiftmodule/i386.swiftdoc | Bin 92472 -> 0 bytes .../FacebookCore.swiftmodule/i386.swiftmodule | Bin 298736 -> 0 bytes .../FacebookCore.swiftmodule/x86_64.swiftdoc | Bin 92476 -> 0 bytes .../FacebookCore.swiftmodule/x86_64.swiftmodule | Bin 286456 -> 0 bytes .../Modules/module.modulemap | 4 - .../iOS/FacebookLogin.framework/FacebookLogin | Bin 1263884 -> 0 bytes .../Headers/FacebookLogin-Swift.h | 214 -- .../Build/iOS/FacebookLogin.framework/Info.plist | Bin 742 -> 0 bytes .../Modules/FacebookLogin.swiftmodule/arm.swiftdoc | Bin 14292 -> 0 bytes .../FacebookLogin.swiftmodule/arm.swiftmodule | Bin 58596 -> 0 bytes .../FacebookLogin.swiftmodule/arm64.swiftdoc | Bin 14292 -> 0 bytes .../FacebookLogin.swiftmodule/arm64.swiftmodule | Bin 58596 -> 0 bytes .../FacebookLogin.swiftmodule/i386.swiftdoc | Bin 14300 -> 0 bytes .../FacebookLogin.swiftmodule/i386.swiftmodule | Bin 57992 -> 0 bytes .../FacebookLogin.swiftmodule/x86_64.swiftdoc | Bin 14304 -> 0 bytes .../FacebookLogin.swiftmodule/x86_64.swiftmodule | Bin 57996 -> 0 bytes .../Modules/module.modulemap | 4 - .../iOS/FacebookShare.framework/FacebookShare | Bin 5248608 -> 0 bytes .../Headers/FacebookShare-Swift.h | 254 -- .../Build/iOS/FacebookShare.framework/Info.plist | Bin 742 -> 0 bytes .../Modules/FacebookShare.swiftmodule/arm.swiftdoc | Bin 73572 -> 0 bytes .../FacebookShare.swiftmodule/arm.swiftmodule | Bin 297104 -> 0 bytes .../FacebookShare.swiftmodule/arm64.swiftdoc | Bin 73572 -> 0 bytes .../FacebookShare.swiftmodule/arm64.swiftmodule | Bin 296808 -> 0 bytes .../FacebookShare.swiftmodule/i386.swiftdoc | Bin 73580 -> 0 bytes .../FacebookShare.swiftmodule/i386.swiftmodule | Bin 296500 -> 0 bytes .../FacebookShare.swiftmodule/x86_64.swiftdoc | Bin 73584 -> 0 bytes .../FacebookShare.swiftmodule/x86_64.swiftmodule | Bin 296208 -> 0 bytes .../Modules/module.modulemap | 4 - .../Pushwoosh.framework/Headers/PWAppDelegate.h | 16 - .../Pushwoosh.framework/Headers/PWGDPRManager.h | 42 - .../Pushwoosh.framework/Headers/PWInAppManager.h | 140 - .../iOS/Pushwoosh.framework/Headers/PWInbox.h | 127 - .../Build/iOS/Pushwoosh.framework/Headers/PWLog.h | 23 - .../Headers/PWRichMediaManager.h | 98 - .../Headers/PushNotificationManager.h | 521 ---- .../iOS/Pushwoosh.framework/Headers/Pushwoosh.h | 14 - .../Build/iOS/Pushwoosh.framework/Info.plist | Bin 842 -> 0 bytes .../Pushwoosh.framework/Modules/module.modulemap | 6 - .../Build/iOS/Pushwoosh.framework/Pushwoosh | Bin 9409700 -> 0 bytes .../Build/iOS/Static/Bolts.framework/Bolts | Bin 2663792 -> 0 bytes .../iOS/Static/Bolts.framework/Headers/BFAppLink.h | 49 - .../Bolts.framework/Headers/BFAppLinkNavigation.h | 114 - .../Bolts.framework/Headers/BFAppLinkResolving.h | 30 - .../Headers/BFAppLinkReturnToRefererController.h | 88 - .../Headers/BFAppLinkReturnToRefererView.h | 78 - .../Bolts.framework/Headers/BFAppLinkTarget.h | 33 - .../Bolts.framework/Headers/BFCancellationToken.h | 42 - .../Headers/BFCancellationTokenRegistration.h | 29 - .../Headers/BFCancellationTokenSource.h | 60 - .../Static/Bolts.framework/Headers/BFExecutor.h | 62 - .../iOS/Static/Bolts.framework/Headers/BFGeneric.h | 25 - .../Bolts.framework/Headers/BFMeasurementEvent.h | 45 - .../iOS/Static/Bolts.framework/Headers/BFTask.h | 266 -- .../Headers/BFTaskCompletionSource.h | 75 - .../iOS/Static/Bolts.framework/Headers/BFURL.h | 75 - .../Headers/BFWebViewAppLinkResolver.h | 26 - .../iOS/Static/Bolts.framework/Headers/Bolts.h | 39 - .../Build/iOS/Static/Bolts.framework/Info.plist | Bin 721 -> 0 bytes .../Bolts.framework/Modules/module.modulemap | 15 - iphone/Maps/Maps.xcodeproj/project.pbxproj | 136 +- iphone/Maps/Podfile | 16 + iphone/Maps/Podfile.lock | 41 + iphone/Maps/Pods/ActionSheetPicker-3.0/LICENSE | 24 + .../Pickers/AbstractActionSheetPicker.h | 126 + .../Pickers/AbstractActionSheetPicker.m | 804 ++++++ .../Pickers/ActionSheetCustomPicker.h | 37 + .../Pickers/ActionSheetCustomPicker.m | 125 + .../Pickers/ActionSheetCustomPickerDelegate.h | 39 + .../Pickers/ActionSheetDatePicker.h | 95 + .../Pickers/ActionSheetDatePicker.m | 272 ++ .../Pickers/ActionSheetDistancePicker.h | 39 + .../Pickers/ActionSheetDistancePicker.m | 207 ++ .../Pickers/ActionSheetLocalePicker.h | 63 + .../Pickers/ActionSheetLocalePicker.m | 408 +++ .../Pickers/ActionSheetMultipleStringPicker.h | 65 + .../Pickers/ActionSheetMultipleStringPicker.m | 225 ++ .../Pickers/ActionSheetPicker.h | 35 + .../Pickers/ActionSheetStringPicker.h | 62 + .../Pickers/ActionSheetStringPicker.m | 195 ++ .../Pickers/DistancePickerView.h | 21 + .../Pickers/DistancePickerView.m | 208 ++ .../ActionSheetPicker-3.0/Pickers/SWActionSheet.h | 19 + .../ActionSheetPicker-3.0/Pickers/SWActionSheet.m | 223 ++ iphone/Maps/Pods/ActionSheetPicker-3.0/README.md | 230 ++ .../AppsFlyerLib.framework/AppsFlyerLib | 1 + .../AppsFlyerLib.framework/Headers | 1 + .../Modules/module.modulemap | 6 + .../AppsFlyerLib.framework/Versions/A/AppsFlyerLib | Bin 0 -> 3403440 bytes .../A/Headers/AppsFlyerCrossPromotionHelper.h | 25 + .../Versions/A/Headers/AppsFlyerLinkGenerator.h | 40 + .../A/Headers/AppsFlyerShareInviteHelper.h | 33 + .../Versions/A/Headers/AppsFlyerTracker.h | 349 +++ .../AppsFlyerLib.framework/Versions/Current | 1 + iphone/Maps/Pods/AppsFlyerFramework/README.md | 68 + .../Pods/Bolts/Bolts/Common/BFCancellationToken.h | 42 + .../Pods/Bolts/Bolts/Common/BFCancellationToken.m | 144 + .../Bolts/Common/BFCancellationTokenRegistration.h | 29 + .../Bolts/Common/BFCancellationTokenRegistration.m | 79 + .../Bolts/Bolts/Common/BFCancellationTokenSource.h | 60 + .../Bolts/Bolts/Common/BFCancellationTokenSource.m | 64 + iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h | 62 + iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m | 136 + iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h | 25 + iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h | 266 ++ iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m | 465 ++++ .../Bolts/Bolts/Common/BFTaskCompletionSource.h | 75 + .../Bolts/Bolts/Common/BFTaskCompletionSource.m | 79 + iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h | 39 + iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m | 17 + iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h | 49 + iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m | 62 + .../Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h | 114 + .../Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m | 284 ++ .../Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h | 30 + .../Bolts/iOS/BFAppLinkReturnToRefererController.h | 88 + .../Bolts/iOS/BFAppLinkReturnToRefererController.m | 230 ++ .../Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h | 78 + .../Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m | 268 ++ iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h | 33 + iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m | 33 + .../Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h | 45 + .../Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m | 62 + iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h | 75 + iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m | 142 + .../Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h | 26 + .../Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m | 296 +++ .../BFAppLinkReturnToRefererView_Internal.h | 17 + .../Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h | 32 + .../iOS/Internal/BFMeasurementEvent_Internal.h | 19 + .../Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h | 15 + iphone/Maps/Pods/Bolts/LICENSE | 30 + iphone/Maps/Pods/Bolts/README.md | 683 +++++ .../FBSDKCoreKit/AppEvents/FBSDKAppEvents.h | 822 ++++++ .../FBSDKCoreKit/AppEvents/FBSDKAppEvents.m | 1336 ++++++++++ .../Internal/Codeless/FBSDKCodelessIndexer.h | 27 + .../Internal/Codeless/FBSDKCodelessIndexer.m | 404 +++ .../Internal/Codeless/FBSDKCodelessMacros.h | 92 + .../Codeless/FBSDKCodelessParameterComponent.h | 30 + .../Codeless/FBSDKCodelessParameterComponent.m | 44 + .../Internal/Codeless/FBSDKCodelessPathComponent.h | 44 + .../Internal/Codeless/FBSDKCodelessPathComponent.m | 58 + .../Internal/Codeless/FBSDKEventBinding.h | 37 + .../Internal/Codeless/FBSDKEventBinding.m | 274 ++ .../Internal/Codeless/FBSDKEventBindingManager.h | 28 + .../Internal/Codeless/FBSDKEventBindingManager.m | 390 +++ .../Internal/Codeless/FBSDKViewHierarchy.h | 40 + .../Internal/Codeless/FBSDKViewHierarchy.m | 628 +++++ .../AppEvents/Internal/FBSDKAppEvents+Internal.h | 211 ++ .../AppEvents/Internal/FBSDKAppEventsDeviceInfo.h | 25 + .../AppEvents/Internal/FBSDKAppEventsDeviceInfo.m | 278 ++ .../AppEvents/Internal/FBSDKAppEventsState.h | 41 + .../AppEvents/Internal/FBSDKAppEventsState.m | 181 ++ .../Internal/FBSDKAppEventsStateManager.h | 34 + .../Internal/FBSDKAppEventsStateManager.m | 78 + .../AppEvents/Internal/FBSDKAppEventsUtility.h | 64 + .../AppEvents/Internal/FBSDKAppEventsUtility.m | 474 ++++ .../FBSDKHybridAppEventsScriptMessageHandler.h | 26 + .../FBSDKHybridAppEventsScriptMessageHandler.m | 62 + .../AppEvents/Internal/FBSDKPaymentObserver.h | 25 + .../AppEvents/Internal/FBSDKPaymentObserver.m | 358 +++ .../AppEvents/Internal/FBSDKTimeSpentData.h | 34 + .../AppEvents/Internal/FBSDKTimeSpentData.m | 319 +++ .../AppEvents/Internal/FBSDKUserDataStore.h | 44 + .../AppEvents/Internal/FBSDKUserDataStore.m | 204 ++ .../FBSDKCoreKit/AppLink/FBSDKAppLink.h | 63 + .../FBSDKCoreKit/AppLink/FBSDKAppLink.m | 70 + .../FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h | 137 + .../FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m | 294 ++ .../FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h | 107 + .../FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m | 299 +++ .../FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h | 60 + .../FBSDKAppLinkReturnToRefererController.h | 100 + .../FBSDKAppLinkReturnToRefererController.m | 238 ++ .../AppLink/FBSDKAppLinkReturnToRefererView.h | 90 + .../AppLink/FBSDKAppLinkReturnToRefererView.m | 271 ++ .../FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h | 45 + .../FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m | 41 + .../FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h | 89 + .../FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m | 108 + .../AppLink/FBSDKWebViewAppLinkResolver.h | 38 + .../AppLink/FBSDKWebViewAppLinkResolver.m | 304 +++ .../Internal/FBSDKBoltsMeasurementEventListener.h | 23 + .../Internal/FBSDKBoltsMeasurementEventListener.m | 87 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h | 247 ++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m | 252 ++ .../FBSDKCoreKit/FBSDKApplicationDelegate.h | 92 + .../FBSDKCoreKit/FBSDKApplicationDelegate.m | 330 +++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h | 26 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m | 457 ++++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h | 383 +++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m | 68 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h | 34 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h | 57 + .../FBSDKGraphErrorRecoveryProcessor.h | 99 + .../FBSDKGraphErrorRecoveryProcessor.m | 172 ++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h | 126 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m | 212 ++ .../FBSDKCoreKit/FBSDKGraphRequestConnection.h | 332 +++ .../FBSDKCoreKit/FBSDKGraphRequestConnection.m | 1084 ++++++++ .../FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h | 55 + .../FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m | 33 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h | 19 + .../FBSDKCoreKit/FBSDKMeasurementEvent.h | 69 + .../FBSDKCoreKit/FBSDKMeasurementEvent.m | 78 + .../FBSDKCoreKit/FBSDKMutableCopying.h | 36 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h | 183 ++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m | 295 +++ .../FBSDKCoreKit/FBSDKProfilePictureView.h | 60 + .../FBSDKCoreKit/FBSDKProfilePictureView.m | 380 +++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h | 272 ++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m | 306 +++ .../FBSDKCoreKit/FBSDKTestUsersManager.h | 104 + .../FBSDKCoreKit/FBSDKTestUsersManager.m | 328 +++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h | 87 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m | 152 ++ .../FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h | 79 + .../FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m | 135 + .../FBSDKCoreKit/Internal/Base64/FBSDKBase64.h | 51 + .../FBSDKCoreKit/Internal/Base64/FBSDKBase64.m | 99 + .../Internal/BridgeAPI/FBSDKBridgeAPI.h | 58 + .../Internal/BridgeAPI/FBSDKBridgeAPI.m | 414 +++ .../Internal/BridgeAPI/FBSDKBridgeAPICrypto.h | 34 + .../Internal/BridgeAPI/FBSDKBridgeAPICrypto.m | 130 + .../Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h | 42 + .../BridgeAPI/FBSDKBridgeAPIProtocolType.h | 25 + .../BridgeAPI/FBSDKBridgeAPIRequest+Private.h | 35 + .../Internal/BridgeAPI/FBSDKBridgeAPIRequest.h | 46 + .../Internal/BridgeAPI/FBSDKBridgeAPIRequest.m | 154 ++ .../Internal/BridgeAPI/FBSDKBridgeAPIResponse.h | 42 + .../Internal/BridgeAPI/FBSDKBridgeAPIResponse.m | 128 + .../Internal/BridgeAPI/FBSDKURLOpening.h | 41 + .../FBSDKBridgeAPIProtocolNativeV1.h | 71 + .../FBSDKBridgeAPIProtocolNativeV1.m | 335 +++ .../ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h | 25 + .../ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m | 115 + .../ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h | 25 + .../ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m | 130 + .../Internal/Cryptography/FBSDKCrypto.h | 67 + .../Internal/Cryptography/FBSDKCrypto.m | 287 ++ .../ErrorRecovery/FBSDKErrorRecoveryAttempter.h | 34 + .../ErrorRecovery/FBSDKErrorRecoveryAttempter.m | 56 + .../_FBSDKTemporaryErrorRecoveryAttempter.h | 23 + .../_FBSDKTemporaryErrorRecoveryAttempter.m | 28 + .../FBSDKAppLinkReturnToRefererView_Internal.h | 25 + .../FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h | 40 + .../Internal/FBSDKApplicationDelegate+Internal.h | 40 + .../Internal/FBSDKApplicationObserving.h | 38 + .../Internal/FBSDKAudioResourceLoader.h | 36 + .../Internal/FBSDKAudioResourceLoader.m | 151 ++ .../Internal/FBSDKContainerViewController.h | 35 + .../Internal/FBSDKContainerViewController.m | 78 + .../FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h | 81 + .../Internal/FBSDKDeviceRequestsHelper.h | 58 + .../Internal/FBSDKDeviceRequestsHelper.m | 124 + .../Internal/FBSDKDynamicFrameworkLoader.h | 239 ++ .../FBSDKCoreKit/Internal/FBSDKError.h | 93 + .../FBSDKCoreKit/Internal/FBSDKError.m | 205 ++ .../FBSDKCoreKit/Internal/FBSDKImageDownloader.h | 41 + .../FBSDKCoreKit/Internal/FBSDKImageDownloader.m | 93 + .../FBSDKCoreKit/Internal/FBSDKInternalUtility.h | 374 +++ .../FBSDKCoreKit/Internal/FBSDKInternalUtility.m | 789 ++++++ .../FBSDKCoreKit/Internal/FBSDKLogger.h | 86 + .../FBSDKCoreKit/Internal/FBSDKLogger.m | 218 ++ .../FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h | 41 + .../FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m | 149 ++ .../Internal/FBSDKMeasurementEvent_Internal.h | 33 + .../FBSDKCoreKit/Internal/FBSDKMonotonicTime.h | 67 + .../FBSDKCoreKit/Internal/FBSDKMonotonicTime.m | 86 + .../FBSDKCoreKit/Internal/FBSDKProfile+Internal.h | 26 + .../FBSDKCoreKit/Internal/FBSDKSettings+Internal.h | 37 + .../FBSDKCoreKit/Internal/FBSDKSwizzler.h | 38 + .../FBSDKCoreKit/Internal/FBSDKSwizzler.m | 321 +++ .../Internal/FBSDKSystemAccountStoreAdapter.h | 76 + .../Internal/FBSDKSystemAccountStoreAdapter.m | 278 ++ .../FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h | 30 + .../FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m | 43 + .../FBSDKCoreKit/Internal/FBSDKTypeUtility.h | 36 + .../FBSDKCoreKit/Internal/FBSDKTypeUtility.m | 121 + .../FBSDKCoreKit/Internal/FBSDKURL_Internal.h | 23 + .../Internal/Network/FBSDKGraphRequest+Internal.h | 58 + .../Internal/Network/FBSDKGraphRequestBody.h | 47 + .../Internal/Network/FBSDKGraphRequestBody.m | 155 ++ .../Network/FBSDKGraphRequestConnection+Internal.h | 25 + .../Internal/Network/FBSDKGraphRequestMetadata.h | 43 + .../Internal/Network/FBSDKGraphRequestMetadata.m | 55 + .../Network/FBSDKGraphRequestPiggybackManager.h | 30 + .../Network/FBSDKGraphRequestPiggybackManager.m | 151 ++ .../Internal/Network/FBSDKURLSessionTask.h | 38 + .../Internal/Network/FBSDKURLSessionTask.m | 150 ++ .../ServerConfiguration/FBSDKDialogConfiguration.h | 37 + .../ServerConfiguration/FBSDKDialogConfiguration.m | 70 + .../ServerConfiguration/FBSDKErrorConfiguration.h | 39 + .../ServerConfiguration/FBSDKErrorConfiguration.m | 171 ++ .../FBSDKErrorRecoveryConfiguration.h | 38 + .../FBSDKErrorRecoveryConfiguration.m | 77 + .../ServerConfiguration/FBSDKGateKeeperManager.h | 43 + .../ServerConfiguration/FBSDKGateKeeperManager.m | 176 ++ .../FBSDKServerConfiguration+Internal.h | 25 + .../ServerConfiguration/FBSDKServerConfiguration.h | 105 + .../ServerConfiguration/FBSDKServerConfiguration.m | 283 ++ .../FBSDKServerConfigurationManager+Internal.h | 33 + .../FBSDKServerConfigurationManager.h | 43 + .../FBSDKServerConfigurationManager.m | 456 ++++ .../Internal/TokenCaching/FBSDKAccessTokenCache.h | 27 + .../Internal/TokenCaching/FBSDKAccessTokenCache.m | 82 + .../TokenCaching/FBSDKAccessTokenCacheV3.h | 29 + .../TokenCaching/FBSDKAccessTokenCacheV3.m | 80 + .../TokenCaching/FBSDKAccessTokenCacheV3_17.h | 25 + .../TokenCaching/FBSDKAccessTokenCacheV3_17.m | 63 + .../TokenCaching/FBSDKAccessTokenCacheV3_21.h | 25 + .../TokenCaching/FBSDKAccessTokenCacheV3_21.m | 66 + .../TokenCaching/FBSDKAccessTokenCacheV4.h | 26 + .../TokenCaching/FBSDKAccessTokenCacheV4.m | 99 + .../TokenCaching/FBSDKAccessTokenCaching.h | 29 + .../TokenCaching/FBSDKAccessTokenExpirer.h | 23 + .../TokenCaching/FBSDKAccessTokenExpirer.m | 71 + .../Internal/TokenCaching/FBSDKKeychainStore.h | 42 + .../Internal/TokenCaching/FBSDKKeychainStore.m | 168 ++ .../TokenCaching/FBSDKKeychainStoreViaBundleID.h | 29 + .../TokenCaching/FBSDKKeychainStoreViaBundleID.m | 50 + .../Internal/UI/FBSDKButton+Subclass.h | 61 + .../FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h | 25 + .../FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m | 87 + .../FBSDKCoreKit/Internal/UI/FBSDKColor.h | 22 + .../FBSDKCoreKit/Internal/UI/FBSDKColor.m | 31 + .../FBSDKCoreKit/Internal/UI/FBSDKIcon.h | 31 + .../FBSDKCoreKit/Internal/UI/FBSDKIcon.m | 62 + .../FBSDKCoreKit/Internal/UI/FBSDKLogo.h | 25 + .../FBSDKCoreKit/Internal/UI/FBSDKLogo.m | 59 + .../Internal/UI/FBSDKMaleSilhouetteIcon.h | 25 + .../Internal/UI/FBSDKMaleSilhouetteIcon.m | 51 + .../FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h | 79 + .../Internal/UI/FBSDKViewImpressionTracker.h | 29 + .../Internal/UI/FBSDKViewImpressionTracker.m | 97 + .../Internal/WebDialog/FBSDKWebDialog.h | 44 + .../Internal/WebDialog/FBSDKWebDialog.m | 342 +++ .../Internal/WebDialog/FBSDKWebDialogView.h | 39 + .../Internal/WebDialog/FBSDKWebDialogView.m | 193 ++ .../Internal_NoARC/FBSDKDynamicFrameworkLoader.m | 589 ++++ .../Resources/af.lproj/FacebookSDK.strings | 92 + .../Resources/ar.lproj/FacebookSDK.strings | 92 + .../Resources/bn.lproj/FacebookSDK.strings | 92 + .../Resources/cs.lproj/FacebookSDK.strings | 92 + .../Resources/da.lproj/FacebookSDK.strings | 92 + .../Resources/de.lproj/FacebookSDK.strings | 92 + .../Resources/el.lproj/FacebookSDK.strings | 92 + .../Resources/en.lproj/FacebookSDK.strings | Bin 0 -> 9104 bytes .../Resources/en_GB.lproj/FacebookSDK.strings | 92 + .../Resources/es.lproj/FacebookSDK.strings | 92 + .../Resources/es_ES.lproj/FacebookSDK.strings | 92 + .../Resources/fi.lproj/FacebookSDK.strings | 92 + .../Resources/fil.lproj/FacebookSDK.strings | 92 + .../Resources/fr.lproj/FacebookSDK.strings | 92 + .../Resources/gu.lproj/FacebookSDK.strings | 92 + .../Resources/he.lproj/FacebookSDK.strings | 92 + .../Resources/hi.lproj/FacebookSDK.strings | 92 + .../Resources/hr.lproj/FacebookSDK.strings | 92 + .../Resources/hu.lproj/FacebookSDK.strings | 92 + .../Resources/id.lproj/FacebookSDK.strings | 92 + .../Resources/it.lproj/FacebookSDK.strings | 92 + .../Resources/ja.lproj/FacebookSDK.strings | 92 + .../Resources/kn.lproj/FacebookSDK.strings | 77 + .../Resources/ko.lproj/FacebookSDK.strings | 92 + .../Resources/ml.lproj/FacebookSDK.strings | 92 + .../Resources/mr.lproj/FacebookSDK.strings | 92 + .../Resources/ms.lproj/FacebookSDK.strings | 92 + .../Resources/nb.lproj/FacebookSDK.strings | 92 + .../Resources/nl.lproj/FacebookSDK.strings | 92 + .../Resources/pa.lproj/FacebookSDK.strings | 92 + .../Resources/pl.lproj/FacebookSDK.strings | 92 + .../Resources/pt.lproj/FacebookSDK.strings | 92 + .../Resources/pt_PT.lproj/FacebookSDK.strings | 92 + .../Resources/ru.lproj/FacebookSDK.strings | 92 + .../Resources/sk.lproj/FacebookSDK.strings | 92 + .../Resources/sv.lproj/FacebookSDK.strings | 92 + .../Resources/ta.lproj/FacebookSDK.strings | 92 + .../Resources/te.lproj/FacebookSDK.strings | 92 + .../Resources/th.lproj/FacebookSDK.strings | 92 + .../Resources/tr.lproj/FacebookSDK.strings | 92 + .../Resources/vi.lproj/FacebookSDK.strings | 92 + .../Resources/zh.lproj/FacebookSDK.strings | 92 + .../Resources/zh_Hant_HK.lproj/FacebookSDK.strings | 92 + .../Resources/zh_Hant_TW.lproj/FacebookSDK.strings | 92 + iphone/Maps/Pods/FBSDKCoreKit/LICENSE | 17 + iphone/Maps/Pods/FBSDKCoreKit/README.md | 60 + .../FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h | 62 + .../FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m | 38 + .../FBSDKLoginKit/FBSDKDeviceLoginManager.h | 105 + .../FBSDKLoginKit/FBSDKDeviceLoginManager.m | 235 ++ .../FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h | 50 + .../FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m | 33 + .../FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h | 131 + .../FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m | 333 +++ .../FBSDKLoginKit/FBSDKLoginConstants.h | 142 + .../FBSDKLoginKit/FBSDKLoginConstants.m | 29 + .../FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h | 31 + .../FBSDKLoginKit/FBSDKLoginManager.h | 227 ++ .../FBSDKLoginKit/FBSDKLoginManager.m | 885 +++++++ .../FBSDKLoginKit/FBSDKLoginManagerLoginResult.h | 67 + .../FBSDKLoginKit/FBSDKLoginManagerLoginResult.m | 51 + .../FBSDKLoginKit/FBSDKLoginTooltipView.h | 90 + .../FBSDKLoginKit/FBSDKLoginTooltipView.m | 62 + .../FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h | 136 + .../FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m | 603 +++++ .../Internal/FBSDKDeviceLoginCodeInfo+Internal.h | 43 + .../FBSDKDeviceLoginManagerResult+Internal.h | 39 + .../Internal/FBSDKLoginCompletion+Internal.h | 39 + .../FBSDKLoginKit/Internal/FBSDKLoginCompletion.h | 104 + .../FBSDKLoginKit/Internal/FBSDKLoginCompletion.m | 317 +++ .../FBSDKLoginKit/Internal/FBSDKLoginError.h | 36 + .../FBSDKLoginKit/Internal/FBSDKLoginError.m | 248 ++ .../Internal/FBSDKLoginKit+Internal.h | 24 + .../Internal/FBSDKLoginManager+Internal.h | 81 + .../Internal/FBSDKLoginManagerLogger.h | 48 + .../Internal/FBSDKLoginManagerLogger.m | 309 +++ .../FBSDKLoginManagerLoginResult+Internal.h | 32 + .../FBSDKLoginKit/Internal/FBSDKLoginUtility.h | 33 + .../FBSDKLoginKit/Internal/FBSDKLoginUtility.m | 80 + .../Internal/_FBSDKLoginRecoveryAttempter.h | 23 + .../Internal/_FBSDKLoginRecoveryAttempter.m | 47 + iphone/Maps/Pods/FBSDKLoginKit/LICENSE | 17 + iphone/Maps/Pods/FBSDKLoginKit/README.md | 60 + iphone/Maps/Pods/Manifest.lock | 41 + iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj | 2800 ++++++++++++++++++++ .../Framework/Pushwoosh.framework/Headers | 1 + .../Pushwoosh.framework/Modules/module.modulemap | 6 + .../Framework/Pushwoosh.framework/Pushwoosh | 1 + .../Versions/A/Headers/PWAppDelegate.h | 16 + .../Versions/A/Headers/PWGDPRManager.h | 42 + .../Versions/A/Headers/PWInAppManager.h | 140 + .../Versions/A/Headers/PWInbox.h | 127 + .../Pushwoosh.framework/Versions/A/Headers/PWLog.h | 23 + .../Versions/A/Headers/PWRichMediaManager.h | 98 + .../Versions/A/Headers/PushNotificationManager.h | 521 ++++ .../Versions/A/Headers/Pushwoosh.h | 14 + .../Pushwoosh.framework/Versions/A/Pushwoosh | Bin 0 -> 15839232 bytes .../Framework/Pushwoosh.framework/Versions/Current | 1 + iphone/Maps/Pods/Pushwoosh/LICENSE | 22 + iphone/Maps/Pods/Pushwoosh/README.md | 21 + .../ActionSheetPicker-3.0-Info.plist | 26 + .../ActionSheetPicker-3.0-dummy.m | 5 + .../ActionSheetPicker-3.0-prefix.pch | 12 + .../ActionSheetPicker-3.0-umbrella.h | 27 + .../ActionSheetPicker-3.0.modulemap | 6 + .../ActionSheetPicker-3.0.xcconfig | 9 + .../AppsFlyerFramework/AppsFlyerFramework.xcconfig | 10 + .../Target Support Files/Bolts/Bolts-Info.plist | 26 + .../Pods/Target Support Files/Bolts/Bolts-dummy.m | 5 + .../Target Support Files/Bolts/Bolts-prefix.pch | 12 + .../Target Support Files/Bolts/Bolts-umbrella.h | 33 + .../Target Support Files/Bolts/Bolts.modulemap | 6 + .../Pods/Target Support Files/Bolts/Bolts.xcconfig | 8 + .../FBSDKCoreKit/FBSDKCoreKit-Info.plist | 26 + .../FBSDKCoreKit/FBSDKCoreKit-dummy.m | 5 + .../FBSDKCoreKit/FBSDKCoreKit-prefix.pch | 12 + .../FBSDKCoreKit/FBSDKCoreKit-umbrella.h | 45 + .../FBSDKCoreKit/FBSDKCoreKit.modulemap | 6 + .../FBSDKCoreKit/FBSDKCoreKit.xcconfig | 10 + .../FBSDKLoginKit/FBSDKLoginKit-Info.plist | 26 + .../FBSDKLoginKit/FBSDKLoginKit-dummy.m | 5 + .../FBSDKLoginKit/FBSDKLoginKit-prefix.pch | 12 + .../FBSDKLoginKit/FBSDKLoginKit-umbrella.h | 26 + .../FBSDKLoginKit/FBSDKLoginKit.modulemap | 6 + .../FBSDKLoginKit/FBSDKLoginKit.xcconfig | 11 + .../Pods-MAPS.ME/Pods-MAPS.ME-Info.plist | 26 + .../Pods-MAPS.ME-acknowledgements.markdown | 135 + .../Pods-MAPS.ME-acknowledgements.plist | 197 ++ .../Pods-MAPS.ME/Pods-MAPS.ME-dummy.m | 5 + .../Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh | 175 ++ .../Pods-MAPS.ME/Pods-MAPS.ME-umbrella.h | 16 + .../Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig | 9 + .../Pods-MAPS.ME/Pods-MAPS.ME.modulemap | 6 + .../Pods-MAPS.ME.production full.xcconfig | 9 + .../Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig | 9 + .../Pushwoosh/Pushwoosh.xcconfig | 10 + .../Filters/MWMSearchHotelsFilterViewController.mm | 2 +- 681 files changed, 49955 insertions(+), 15026 deletions(-) delete mode 100644 iphone/Maps/3party/Cartfile delete mode 100644 iphone/Maps/3party/Cartfile.resolved delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Alamofire delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Headers delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Modules delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Resources delete mode 100755 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Alamofire delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire-Swift.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/module.modulemap delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Resources/Info.plist delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/Current delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/AlamofireImage delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Headers delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Modules delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Resources delete mode 100755 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/AlamofireImage delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage-Swift.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/module.modulemap delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Resources/Info.plist delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/Current delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Bolts delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Headers delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Modules delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Resources delete mode 100755 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Bolts delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationToken.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenRegistration.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenSource.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFExecutor.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFGeneric.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTask.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTaskCompletionSource.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/Bolts.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Modules/module.modulemap delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Resources/Info.plist delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/Current delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Headers delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Modules delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Pushwoosh delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Resources delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWLog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Pushwoosh delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Resources/Info.plist delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/Current delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Headers delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Modules delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Resources delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Timepiece delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Headers/Timepiece-Swift.h delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/module.modulemap delete mode 100644 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Resources/Info.plist delete mode 100755 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Timepiece delete mode 120000 iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/Current delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/AppsFlyerTracker delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerCrossPromotionHelper.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLib-Prefix.pch delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLinkGenerator.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerShareInviteHelper.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerTracker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Bolts delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLink.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkNavigation.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkResolving.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkTarget.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationToken.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenRegistration.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenSource.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFExecutor.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFGeneric.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFMeasurementEvent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTask.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTaskCompletionSource.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFURL.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFWebViewAppLinkResolver.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/Bolts.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/CoreActionSheetPicker delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/AbstractActionSheetPicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPickerDelegate.h delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDatePicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDistancePicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetLocalePicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetMultipleStringPicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetPicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetStringPicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/CoreActionSheetPicker.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/DistancePickerView.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/FBSDKCoreKit delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAccessToken.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppEvents.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkUtility.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKApplicationDelegate.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKConstants.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCopying.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphErrorRecoveryProcessor.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequest.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestConnection.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestDataAttachment.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMacros.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMutableCopying.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfile.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfilePictureView.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKSettings.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKTestUsersManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKUtility.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/FBSDKLoginKit delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginCodeInfo.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManagerResult.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginConstants.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginKit.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManagerLoginResult.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginTooltipView.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKTooltipView.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/FBSDKPlacesKit delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKit.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKitConstants.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/FBSDKShareKit delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupAddDialog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupJoinDialog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteDialog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectArguments.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectTextures.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestDialog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKHashtag.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeControl.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeObjectType.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLiking.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKMessageDialog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSendButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareAPI.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareCameraEffectContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareConstants.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialogMode.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareKit.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareLinkContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMediaContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerActionButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateElement.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerMediaTemplateContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerOpenGraphMusicTemplateContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerURLActionButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphAction.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphObject.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphValueContainer.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhoto.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhotoContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideo.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideoContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharing.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingButton.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingContent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingScheme.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingValidation.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/FacebookCore delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Headers/FacebookCore-Swift.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/FacebookLogin delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Headers/FacebookLogin-Swift.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/FacebookShare delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Headers/FacebookShare-Swift.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftdoc delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftmodule delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/module.modulemap delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWAppDelegate.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWGDPRManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInAppManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInbox.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWLog.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWRichMediaManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PushNotificationManager.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/Pushwoosh.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Modules/module.modulemap delete mode 100755 iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Pushwoosh delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Bolts delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLink.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkNavigation.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkResolving.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkTarget.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationToken.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenRegistration.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenSource.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFExecutor.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFGeneric.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFMeasurementEvent.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTask.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTaskCompletionSource.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFURL.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFWebViewAppLinkResolver.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/Bolts.h delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Info.plist delete mode 100644 iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Modules/module.modulemap create mode 100644 iphone/Maps/Podfile create mode 100644 iphone/Maps/Podfile.lock create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/LICENSE create mode 100755 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.h create mode 100755 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPickerDelegate.h create mode 100755 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.h create mode 100755 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetPicker.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.h create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.m create mode 100644 iphone/Maps/Pods/ActionSheetPicker-3.0/README.md create mode 120000 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/AppsFlyerLib create mode 120000 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Headers create mode 100644 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Modules/module.modulemap create mode 100644 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/AppsFlyerLib create mode 100644 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerCrossPromotionHelper.h create mode 100644 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerLinkGenerator.h create mode 100644 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerShareInviteHelper.h create mode 100644 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerTracker.h create mode 120000 iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/Current create mode 100644 iphone/Maps/Pods/AppsFlyerFramework/README.md create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFMeasurementEvent_Internal.h create mode 100644 iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h create mode 100644 iphone/Maps/Pods/Bolts/LICENSE create mode 100644 iphone/Maps/Pods/Bolts/README.md create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/af.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ar.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/bn.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/cs.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/da.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/de.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/el.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en_GB.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es_ES.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fi.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fil.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fr.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/gu.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/he.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hi.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hr.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hu.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/id.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/it.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ja.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/kn.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ko.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ml.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/mr.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ms.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nb.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nl.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pa.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pl.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt_PT.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ru.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sk.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sv.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ta.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/te.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/th.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/tr.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/vi.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_HK.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_TW.lproj/FacebookSDK.strings create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/LICENSE create mode 100644 iphone/Maps/Pods/FBSDKCoreKit/README.md create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/LICENSE create mode 100644 iphone/Maps/Pods/FBSDKLoginKit/README.md create mode 100644 iphone/Maps/Pods/Manifest.lock create mode 100644 iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj create mode 120000 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Headers create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Modules/module.modulemap create mode 120000 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Pushwoosh create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWAppDelegate.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInbox.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWLog.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaManager.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h create mode 100644 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Pushwoosh create mode 120000 iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/Current create mode 100644 iphone/Maps/Pods/Pushwoosh/LICENSE create mode 100644 iphone/Maps/Pods/Pushwoosh/README.md create mode 100644 iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist create mode 100644 iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-dummy.m create mode 100644 iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch create mode 100644 iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-umbrella.h create mode 100644 iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap create mode 100644 iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/Bolts/Bolts-Info.plist create mode 100644 iphone/Maps/Pods/Target Support Files/Bolts/Bolts-dummy.m create mode 100644 iphone/Maps/Pods/Target Support Files/Bolts/Bolts-prefix.pch create mode 100644 iphone/Maps/Pods/Target Support Files/Bolts/Bolts-umbrella.h create mode 100644 iphone/Maps/Pods/Target Support Files/Bolts/Bolts.modulemap create mode 100644 iphone/Maps/Pods/Target Support Files/Bolts/Bolts.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-dummy.m create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-dummy.m create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-umbrella.h create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap create mode 100644 iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-dummy.m create mode 100755 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-umbrella.h create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig create mode 100644 iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.xcconfig (limited to 'iphone') diff --git a/iphone/Maps/3party/Cartfile b/iphone/Maps/3party/Cartfile deleted file mode 100644 index 8dc6f0d6ec..0000000000 --- a/iphone/Maps/3party/Cartfile +++ /dev/null @@ -1,4 +0,0 @@ -github "AppsFlyerSDK/AppsFlyerFramework" == 4.8.9 -github "facebook/Facebook-SDK-Swift" == 0.4.0 -github "Pushwoosh/pushwoosh-ios-sdk" == 5.9.0 -github "skywinder/ActionSheetPicker-3.0" == 2.3.0 diff --git a/iphone/Maps/3party/Cartfile.resolved b/iphone/Maps/3party/Cartfile.resolved deleted file mode 100644 index 2d849c237d..0000000000 --- a/iphone/Maps/3party/Cartfile.resolved +++ /dev/null @@ -1,6 +0,0 @@ -github "AppsFlyerSDK/AppsFlyerFramework" "4.8.9" -github "BoltsFramework/Bolts-ObjC" "1.9.0" -github "Pushwoosh/pushwoosh-ios-sdk" "5.9.0" -github "facebook/Facebook-SDK-Swift" "0.4.0" -github "facebook/facebook-objc-sdk" "sdk-version-4.36.0" -github "skywinder/ActionSheetPicker-3.0" "2.3.0" diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Alamofire b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Alamofire deleted file mode 120000 index f70a4e44b5..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Alamofire +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Alamofire \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Headers b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Modules b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Modules deleted file mode 120000 index 5736f3186e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Modules +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Modules \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Resources b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Resources deleted file mode 120000 index 953ee36f3b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Alamofire b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Alamofire deleted file mode 100755 index 289b8ceca0..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Alamofire and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire-Swift.h b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire-Swift.h deleted file mode 100644 index 3ea83dacb1..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire-Swift.h +++ /dev/null @@ -1,468 +0,0 @@ -// Generated by Apple Swift version 4.2 effective-3.4 (swiftlang-1000.11.37.1 clang-1000.11.45.1) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if __has_feature(modules) -@import Foundation; -@import ObjectiveC; -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="Alamofire",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - -@class NSURLSession; -@class NSURLSessionTask; -@class NSHTTPURLResponse; -@class NSURLAuthenticationChallenge; -@class NSURLCredential; -@class NSInputStream; - -/// The task delegate is responsible for handling all delegate callbacks for the underlying task as well as -/// executing all operations attached to the serial operation queue upon task completion. -SWIFT_CLASS("_TtC9Alamofire12TaskDelegate") -@interface TaskDelegate : NSObject -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task willPerformHTTPRedirection:(NSHTTPURLResponse * _Nonnull)response newRequest:(NSURLRequest * _Nonnull)request completionHandler:(void (^ _Nonnull)(NSURLRequest * _Nullable))completionHandler; -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task didReceiveChallenge:(NSURLAuthenticationChallenge * _Nonnull)challenge completionHandler:(void (^ _Nonnull)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler; -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task needNewBodyStream:(void (^ _Nonnull)(NSInputStream * _Nullable))completionHandler; -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task didCompleteWithError:(NSError * _Nullable)error; -- (nonnull instancetype)init SWIFT_UNAVAILABLE; -+ (nonnull instancetype)new SWIFT_DEPRECATED_MSG("-init is unavailable"); -@end - -@class NSURLSessionDataTask; -@class NSURLResponse; -@class NSURLSessionDownloadTask; -@class NSCachedURLResponse; - -SWIFT_CLASS("_TtC9Alamofire16DataTaskDelegate") -@interface DataTaskDelegate : TaskDelegate -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask didReceiveResponse:(NSURLResponse * _Nonnull)response completionHandler:(void (^ _Nonnull)(NSURLSessionResponseDisposition))completionHandler; -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask; -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask didReceiveData:(NSData * _Nonnull)data; -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask willCacheResponse:(NSCachedURLResponse * _Nonnull)proposedResponse completionHandler:(void (^ _Nonnull)(NSCachedURLResponse * _Nullable))completionHandler; -@end - - -SWIFT_CLASS("_TtC9Alamofire20DownloadTaskDelegate") -@interface DownloadTaskDelegate : TaskDelegate -- (void)URLSession:(NSURLSession * _Nonnull)session downloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask didFinishDownloadingToURL:(NSURL * _Nonnull)location; -- (void)URLSession:(NSURLSession * _Nonnull)session downloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite; -- (void)URLSession:(NSURLSession * _Nonnull)session downloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes; -@end - - - - -/// Responsible for handling all delegate callbacks for the underlying session. -SWIFT_CLASS("_TtC9Alamofire15SessionDelegate") -@interface SessionDelegate : NSObject -/// Initializes the SessionDelegate instance. -/// -/// returns: -/// The new SessionDelegate instance. -- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; -/// Returns a Bool indicating whether the SessionDelegate implements or inherits a method that can respond -/// to a specified message. -/// \param selector A selector that identifies a message. -/// -/// -/// returns: -/// true if the receiver implements or inherits a method that can respond to selector, otherwise false. -- (BOOL)respondsToSelector:(SEL _Nonnull)selector SWIFT_WARN_UNUSED_RESULT; -@end - - -@interface SessionDelegate (SWIFT_EXTENSION(Alamofire)) -/// Tells the delegate that the session has been invalidated. -/// \param session The session object that was invalidated. -/// -/// \param error The error that caused invalidation, or nil if the invalidation was explicit. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session didBecomeInvalidWithError:(NSError * _Nullable)error; -/// Requests credentials from the delegate in response to a session-level authentication request from the -/// remote server. -/// \param session The session containing the task that requested authentication. -/// -/// \param challenge An object that contains the request for authentication. -/// -/// \param completionHandler A handler that your delegate method must call providing the disposition -/// and credential. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session didReceiveChallenge:(NSURLAuthenticationChallenge * _Nonnull)challenge completionHandler:(void (^ _Nonnull)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler; -@end - - -@interface SessionDelegate (SWIFT_EXTENSION(Alamofire)) -/// Tells the delegate that a download task has finished downloading. -/// \param session The session containing the download task that finished. -/// -/// \param downloadTask The download task that finished. -/// -/// \param location A file URL for the temporary file. Because the file is temporary, you must either -/// open the file for reading or move it to a permanent location in your app’s sandbox -/// container directory before returning from this delegate method. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session downloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask didFinishDownloadingToURL:(NSURL * _Nonnull)location; -/// Periodically informs the delegate about the download’s progress. -/// \param session The session containing the download task. -/// -/// \param downloadTask The download task. -/// -/// \param bytesWritten The number of bytes transferred since the last time this delegate -/// method was called. -/// -/// \param totalBytesWritten The total number of bytes transferred so far. -/// -/// \param totalBytesExpectedToWrite The expected length of the file, as provided by the Content-Length -/// header. If this header was not provided, the value is -/// NSURLSessionTransferSizeUnknown. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session downloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite; -/// Tells the delegate that the download task has resumed downloading. -/// \param session The session containing the download task that finished. -/// -/// \param downloadTask The download task that resumed. See explanation in the discussion. -/// -/// \param fileOffset If the file’s cache policy or last modified date prevents reuse of the -/// existing content, then this value is zero. Otherwise, this value is an -/// integer representing the number of bytes on disk that do not need to be -/// retrieved again. -/// -/// \param expectedTotalBytes The expected length of the file, as provided by the Content-Length header. -/// If this header was not provided, the value is NSURLSessionTransferSizeUnknown. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session downloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes; -@end - -@class NSURLSessionStreamTask; -@class NSOutputStream; - -SWIFT_AVAILABILITY(tvos,introduced=9.0) SWIFT_AVAILABILITY(macos,introduced=10.11) SWIFT_AVAILABILITY(ios,introduced=9.0) -@interface SessionDelegate (SWIFT_EXTENSION(Alamofire)) -/// Tells the delegate that the read side of the connection has been closed. -/// \param session The session. -/// -/// \param streamTask The stream task. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session readClosedForStreamTask:(NSURLSessionStreamTask * _Nonnull)streamTask; -/// Tells the delegate that the write side of the connection has been closed. -/// \param session The session. -/// -/// \param streamTask The stream task. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session writeClosedForStreamTask:(NSURLSessionStreamTask * _Nonnull)streamTask; -/// Tells the delegate that the system has determined that a better route to the host is available. -/// \param session The session. -/// -/// \param streamTask The stream task. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session betterRouteDiscoveredForStreamTask:(NSURLSessionStreamTask * _Nonnull)streamTask; -/// Tells the delegate that the stream task has been completed and provides the unopened stream objects. -/// \param session The session. -/// -/// \param streamTask The stream task. -/// -/// \param inputStream The new input stream. -/// -/// \param outputStream The new output stream. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session streamTask:(NSURLSessionStreamTask * _Nonnull)streamTask didBecomeInputStream:(NSInputStream * _Nonnull)inputStream outputStream:(NSOutputStream * _Nonnull)outputStream; -@end - - -@interface SessionDelegate (SWIFT_EXTENSION(Alamofire)) -/// Tells the delegate that the data task received the initial reply (headers) from the server. -/// \param session The session containing the data task that received an initial reply. -/// -/// \param dataTask The data task that received an initial reply. -/// -/// \param response A URL response object populated with headers. -/// -/// \param completionHandler A completion handler that your code calls to continue the transfer, passing a -/// constant to indicate whether the transfer should continue as a data task or -/// should become a download task. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask didReceiveResponse:(NSURLResponse * _Nonnull)response completionHandler:(void (^ _Nonnull)(NSURLSessionResponseDisposition))completionHandler; -/// Tells the delegate that the data task was changed to a download task. -/// \param session The session containing the task that was replaced by a download task. -/// -/// \param dataTask The data task that was replaced by a download task. -/// -/// \param downloadTask The new download task that replaced the data task. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask * _Nonnull)downloadTask; -/// Tells the delegate that the data task has received some of the expected data. -/// \param session The session containing the data task that provided data. -/// -/// \param dataTask The data task that provided data. -/// -/// \param data A data object containing the transferred data. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask didReceiveData:(NSData * _Nonnull)data; -/// Asks the delegate whether the data (or upload) task should store the response in the cache. -/// \param session The session containing the data (or upload) task. -/// -/// \param dataTask The data (or upload) task. -/// -/// \param proposedResponse The default caching behavior. This behavior is determined based on the current -/// caching policy and the values of certain received headers, such as the Pragma -/// and Cache-Control headers. -/// -/// \param completionHandler A block that your handler must call, providing either the original proposed -/// response, a modified version of that response, or NULL to prevent caching the -/// response. If your delegate implements this method, it must call this completion -/// handler; otherwise, your app leaks memory. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session dataTask:(NSURLSessionDataTask * _Nonnull)dataTask willCacheResponse:(NSCachedURLResponse * _Nonnull)proposedResponse completionHandler:(void (^ _Nonnull)(NSCachedURLResponse * _Nullable))completionHandler; -@end - -@class NSURLSessionTaskMetrics; - -@interface SessionDelegate (SWIFT_EXTENSION(Alamofire)) -/// Tells the delegate that the remote server requested an HTTP redirect. -/// \param session The session containing the task whose request resulted in a redirect. -/// -/// \param task The task whose request resulted in a redirect. -/// -/// \param response An object containing the server’s response to the original request. -/// -/// \param request A URL request object filled out with the new location. -/// -/// \param completionHandler A closure that your handler should call with either the value of the request -/// parameter, a modified URL request object, or NULL to refuse the redirect and -/// return the body of the redirect response. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task willPerformHTTPRedirection:(NSHTTPURLResponse * _Nonnull)response newRequest:(NSURLRequest * _Nonnull)request completionHandler:(void (^ _Nonnull)(NSURLRequest * _Nullable))completionHandler; -/// Requests credentials from the delegate in response to an authentication request from the remote server. -/// \param session The session containing the task whose request requires authentication. -/// -/// \param task The task whose request requires authentication. -/// -/// \param challenge An object that contains the request for authentication. -/// -/// \param completionHandler A handler that your delegate method must call providing the disposition -/// and credential. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task didReceiveChallenge:(NSURLAuthenticationChallenge * _Nonnull)challenge completionHandler:(void (^ _Nonnull)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler; -/// Tells the delegate when a task requires a new request body stream to send to the remote server. -/// \param session The session containing the task that needs a new body stream. -/// -/// \param task The task that needs a new body stream. -/// -/// \param completionHandler A completion handler that your delegate method should call with the new body stream. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task needNewBodyStream:(void (^ _Nonnull)(NSInputStream * _Nullable))completionHandler; -/// Periodically informs the delegate of the progress of sending body content to the server. -/// \param session The session containing the data task. -/// -/// \param task The data task. -/// -/// \param bytesSent The number of bytes sent since the last time this delegate method was called. -/// -/// \param totalBytesSent The total number of bytes sent so far. -/// -/// \param totalBytesExpectedToSend The expected length of the body data. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend; -/// Tells the delegate that the session finished collecting metrics for the task. -/// \param session The session collecting the metrics. -/// -/// \param task The task whose metrics have been collected. -/// -/// \param metrics The collected metrics. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics * _Nonnull)metrics SWIFT_AVAILABILITY(tvos,introduced=10.0) SWIFT_AVAILABILITY(macos,introduced=10.12) SWIFT_AVAILABILITY(ios,introduced=10.0); -/// Tells the delegate that the task finished transferring data. -/// \param session The session containing the task whose request finished transferring data. -/// -/// \param task The task whose request finished transferring data. -/// -/// \param error If an error occurred, an error object indicating how the transfer failed, otherwise nil. -/// -- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task didCompleteWithError:(NSError * _Nullable)error; -@end - - - - - -SWIFT_CLASS("_TtC9Alamofire18UploadTaskDelegate") -@interface UploadTaskDelegate : DataTaskDelegate -@end - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire.h b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire.h deleted file mode 100644 index 5d7609aaa9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Headers/Alamofire.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Alamofire.h -// -// Copyright (c) 2014-2018 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 Foundation; - -FOUNDATION_EXPORT double AlamofireVersionNumber; -FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftdoc b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftdoc deleted file mode 100644 index 5209c1be07..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftmodule b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftmodule deleted file mode 100644 index 8654d8201c..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/Alamofire.swiftmodule/x86_64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/module.modulemap deleted file mode 100644 index 6148f67b8d..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Modules/module.modulemap +++ /dev/null @@ -1,11 +0,0 @@ -framework module Alamofire { - umbrella header "Alamofire.h" - - export * - module * { export * } -} - -module Alamofire.Swift { - header "Alamofire-Swift.h" - requires objc -} diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Resources/Info.plist b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index fa044f5e9c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - BuildMachineOSBuild - 18A391 - CFBundleDevelopmentRegion - en - CFBundleExecutable - Alamofire - CFBundleIdentifier - org.alamofire.Alamofire - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Alamofire - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.7.3 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 10A255 - DTPlatformVersion - GM - DTSDKBuild - 18A384 - DTSDKName - macosx10.14 - DTXcode - 1000 - DTXcodeBuild - 10A255 - UIDeviceFamily - - 1 - 2 - - - diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/Current b/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/AlamofireImage b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/AlamofireImage deleted file mode 120000 index 6988baca28..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/AlamofireImage +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/AlamofireImage \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Headers b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Modules b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Modules deleted file mode 120000 index 5736f3186e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Modules +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Modules \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Resources b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Resources deleted file mode 120000 index 953ee36f3b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/AlamofireImage b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/AlamofireImage deleted file mode 100755 index 7f0a2b235e..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/AlamofireImage and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage-Swift.h b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage-Swift.h deleted file mode 100644 index 3f50e84787..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage-Swift.h +++ /dev/null @@ -1,186 +0,0 @@ -// Generated by Apple Swift version 4.2 effective-3.4 (swiftlang-1000.11.37.1 clang-1000.11.45.1) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if __has_feature(modules) -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="AlamofireImage",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage.h b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage.h deleted file mode 100644 index d77ffc4cf7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Headers/AlamofireImage.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// AlamofireImage.h -// -// Copyright (c) 2015-2018 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 Foundation; - -FOUNDATION_EXPORT double AlamofireImageVersionNumber; -FOUNDATION_EXPORT const unsigned char AlamofireImageVersionString[]; diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftdoc b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftdoc deleted file mode 100644 index f5959395f8..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftmodule b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftmodule deleted file mode 100644 index ce5fd8410b..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/AlamofireImage.swiftmodule/x86_64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/module.modulemap deleted file mode 100644 index 5d454b7b79..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Modules/module.modulemap +++ /dev/null @@ -1,11 +0,0 @@ -framework module AlamofireImage { - umbrella header "AlamofireImage.h" - - export * - module * { export * } -} - -module AlamofireImage.Swift { - header "AlamofireImage-Swift.h" - requires objc -} diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Resources/Info.plist b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 314e84f272..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - BuildMachineOSBuild - 18A391 - CFBundleDevelopmentRegion - en - CFBundleExecutable - AlamofireImage - CFBundleIdentifier - org.alamofire.AlamofireImage - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - AlamofireImage - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.4.1 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 10A255 - DTPlatformVersion - GM - DTSDKBuild - 18A384 - DTSDKName - macosx10.14 - DTXcode - 1000 - DTXcodeBuild - 10A255 - UIDeviceFamily - - 1 - 2 - - - diff --git a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/Current b/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/AlamofireImage.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Bolts b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Bolts deleted file mode 120000 index 6aa9f3f8ae..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Bolts +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Bolts \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Headers b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Modules b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Modules deleted file mode 120000 index 5736f3186e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Modules +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Modules \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Resources b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Resources deleted file mode 120000 index 953ee36f3b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Bolts b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Bolts deleted file mode 100755 index 48a57f641b..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Bolts and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationToken.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationToken.h deleted file mode 100644 index bda32ee800..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationToken.h +++ /dev/null @@ -1,42 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - A block that will be called when a token is cancelled. - */ -typedef void(^BFCancellationBlock)(void); - -/*! - 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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenRegistration.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenRegistration.h deleted file mode 100644 index fa6090f667..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenRegistration.h +++ /dev/null @@ -1,29 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - 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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenSource.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenSource.h deleted file mode 100644 index 4627e9958f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFCancellationTokenSource.h +++ /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 - -NS_ASSUME_NONNULL_BEGIN - -@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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFExecutor.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFExecutor.h deleted file mode 100644 index 694c8a5fc2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFExecutor.h +++ /dev/null @@ -1,62 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - 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)(void)))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(^)(void))block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFGeneric.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFGeneric.h deleted file mode 100644 index 99b2cf7de7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFGeneric.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 - -#pragma once - -/** - This exists to use along with `BFTask` and `BFTaskCompletionSource`. - - 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 'BFVoid', which will always have a value of `nil`. - - This allows you to provide a more enforced API contract to the caller, - as sending any message to `BFVoid` will result in a compile time error. - */ -@class _BFVoid_Nonexistant; -typedef _BFVoid_Nonexistant *BFVoid; diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTask.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTask.h deleted file mode 100644 index 074c182de7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTask.h +++ /dev/null @@ -1,266 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - Error domain used if there was multiple errors on . - */ -extern NSString *const BFTaskErrorDomain; - -/*! - An error code used for , if there were multiple errors. - */ -extern NSInteger const kBFMultipleErrorsError; - -/*! - An error userInfo key used if there were multiple errors on . - Value type is `NSArray *`. - */ -extern NSString *const BFTaskMultipleErrorsUserInfoKey; - -@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<__covariant ResultType> : NSObject - -/*! - A block that can act as a continuation for a task. - */ -typedef __nullable id(^BFContinuationBlock)(BFTask *t); - -/*! - Creates a task that is already completed with the given result. - @param result The result for the task. - */ -+ (instancetype)taskWithResult:(nullable ResultType)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 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:(nullable 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:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once there is at least one successful task. - The first task to successuly complete will set the result, all other tasks results are - ignored. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAnyTask:(nullable 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). - */ -+ (BFTask *)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). - */ -+ (BFTask *)taskWithDelay:(int)millis cancellationToken:(nullable 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:(nullable id (^)(void))block; - -// Properties that will be set on the task once it is completed. - -/*! - The result of a successful task. - */ -@property (nullable, nonatomic, strong, readonly) ResultType result; - -/*! - The error of a failed task. - */ -@property (nullable, nonatomic, strong, readonly) NSError *error; - -/*! - Whether this task has been cancelled. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -/*! - Whether this task has completed due to an error. - */ -@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. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(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. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken NS_SWIFT_NAME(continueWith(block: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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(executor: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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueWith(executor:block:cancellationToken:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(block:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(block:cancellationToken:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or an error. - 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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(executor:block:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(executor:block: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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTaskCompletionSource.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTaskCompletionSource.h deleted file mode 100644 index f94c18fdb5..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/BFTaskCompletionSource.h +++ /dev/null @@ -1,75 +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 - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask<__covariant ResultType>; - -/*! - 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<__covariant ResultType> : NSObject - -/*! - Creates a new unfinished task. - */ -+ (instancetype)taskCompletionSource; - -/*! - The task associated with this TaskCompletionSource. - */ -@property (nonatomic, strong, readonly) BFTask *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:(nullable ResultType)result NS_SWIFT_NAME(set(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 NS_SWIFT_NAME(set(error:)); - -/*! - 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:(nullable ResultType)result NS_SWIFT_NAME(trySet(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 NS_SWIFT_NAME(trySet(error:)); - -/*! - Sets the cancellation state of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetCancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/Bolts.h b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/Bolts.h deleted file mode 100644 index a3f2bd6f29..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Headers/Bolts.h +++ /dev/null @@ -1,39 +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 - -#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#endif - - -NS_ASSUME_NONNULL_BEGIN - -/** - A string containing the version of the Bolts Framework used by the current application. - */ -extern NSString *const BoltsFrameworkVersionString; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Modules/module.modulemap deleted file mode 100644 index 1da9155e1c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Resources/Info.plist b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 280ae2b819..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - BuildMachineOSBuild - 18A391 - CFBundleDevelopmentRegion - en - CFBundleExecutable - Bolts - CFBundleIdentifier - com.bolts.macos - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Bolts - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.9.0 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 1.9.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 10A255 - DTPlatformVersion - GM - DTSDKBuild - 18A384 - DTSDKName - macosx10.14 - DTXcode - 1000 - DTXcodeBuild - 10A255 - - diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/Current b/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Bolts.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Headers b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Modules b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Modules deleted file mode 120000 index 5736f3186e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Modules +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Modules \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Pushwoosh b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Pushwoosh deleted file mode 120000 index b002d72473..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Pushwoosh +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Pushwoosh \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Resources b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Resources deleted file mode 120000 index 953ee36f3b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h deleted file mode 100644 index c9210b24d7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// PWGDPRManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#import - -/* - `PWGDPRManager` class offers access to the singleton-instance of the manager responsible for channels management required by GDPR. - */ - -FOUNDATION_EXPORT NSString * const PWGDPRStatusDidChangeNotification; - -@interface PWGDPRManager : NSObject - -/** -Indicates availability of the GDPR compliance solution. -*/ -@property (nonatomic, readonly, getter=isAvailable) BOOL available; - -@property (nonatomic, readonly, getter=isCommunicationEnabled) BOOL communicationEnabled; - -@property (nonatomic, readonly, getter=isDeviceDataRemoved) BOOL deviceDataRemoved; - -+ (instancetype)sharedManager; - -/** - Enable/disable all communication with Pushwoosh. Enabled by default. - */ -- (void)setCommunicationEnabled:(BOOL)enabled completion:(void (^)(NSError *error))completion; - -/** - Removes all device data from Pushwoosh and stops all interactions and communication permanently. - */ -- (void)removeAllDeviceDataWithCompletion:(void (^)(NSError *error))completion; - -- (void)showGDPRConsentUI; - -- (void)showGDPRDeletionUI; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h deleted file mode 100644 index dfaf01c2f2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h +++ /dev/null @@ -1,140 +0,0 @@ -// -// PWInAppManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2017 -// - -#import - -#if TARGET_OS_IPHONE - -/** - `PWJavaScriptInterface` protocol is a representation of Javascript object that can be added at runtime into In-App Message HTML page - to provide native calls and callbacks to Objective-C/Swift. - - Example: - - ```ObjC - @implementation JavaScriptInterface - - - (void)nativeCall:(NSString*)str :(PWJavaScriptCallback*)callback { - [callback executeWithParam:str]; - } - - @end - - ... - - [[PWInAppManager sharedManager] addJavascriptInterface:[JavaScriptInterface new] withName:@"ObjC"]; - ``` - - ```javascript - ObjC.nativeCall("exampleString", function(str) { - console.log(str); - }); - ``` - */ -@protocol PWJavaScriptInterface - -@optional - -/** - Tells the delegate that In-App Message load stated - */ -- (void)onWebViewStartLoad:(UIWebView*)webView; - -/** - Tells the delegate that In-App Message load finished - */ -- (void)onWebViewFinishLoad:(UIWebView*)webView; - -/** - Tells the delegate that In-App Message is closing - */ -- (void)onWebViewStartClose:(UIWebView*)webView; - -@end - -/** - `PWJavaScriptCallback` is a representation of Javascript function - */ -@interface PWJavaScriptCallback : NSObject - -/** - Invokes callback with no arguments - */ -- (NSString*) execute; - -/** - Invokes callback with one argument - */ -- (NSString*) executeWithParam: (NSString*) param; - -/** - Invokes callback with multiple arguments - */ -- (NSString*) executeWithParams: (NSArray*) params; - -@end - -#endif - - -/* - `PWInAppManager` class offers access to the singleton-instance of the inapp messages manager responsible for sending events and managing inapp message notifications. - */ -@interface PWInAppManager : NSObject - - -+ (instancetype)sharedManager; - -/** - Resets capping of the Pushwoosh out-of-the-box In-App solutions. - */ -- (void)resetBusinessCasesFrequencyCapping; - -/** - Set User indentifier. This could be Facebook ID, username or email, or any other user ID. - This allows data and events to be matched across multiple user devices. - */ -- (void)setUserId:(NSString *)userId; - -/** - Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. - - @param oldUserId source user - @param newUserId destination user - @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId - @param completion callback - */ -- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion; - -/** - Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. - - Example: - - [[PWInAppManager sharedManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; - [[PWInAppManager sharedManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; - - @param event name of the event - @param attributes NSDictionary of event attributes - @param completion function to call after posting event - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion; - -/** - See `postEvent:withAttributes:completion:` - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes; - -#if TARGET_OS_IPHONE - -/** - Adds javascript interface for In-App Messages. Interface will be accessible from javascript as object with specified `name` and functions defined in `interface` class. - */ -- (void)addJavascriptInterface:(NSObject*)interface withName:(NSString*)name; - -#endif - -@end diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWLog.h b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWLog.h deleted file mode 100644 index 7d83acfa70..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PWLog.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// PWLog.h -// Pushwoosh SDK -// (c) Pushwoosh 2016 -// - -#import - -typedef NSString *PWLogLevel NS_EXTENSIBLE_STRING_ENUM; - -extern PWLogLevel const PWLogLevelNone; -extern PWLogLevel const PWLogLevelError; -extern PWLogLevel const PWLogLevelWarning; -extern PWLogLevel const PWLogLevelInfo; -extern PWLogLevel const PWLogLevelDebug; -extern PWLogLevel const PWLogLevelVerbose; - -@interface PWLog : NSObject - -+ (void)setLogsHandler:(void(^)(PWLogLevel level, NSString *description))logsHandler; -+ (void)removeLogsHandler; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h deleted file mode 100644 index 8874332c1e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h +++ /dev/null @@ -1,521 +0,0 @@ -// -// PushNotificationManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2014 -// - -#import - -#if TARGET_OS_IPHONE -#import -#import -#import -#endif - -#define PUSHWOOSH_VERSION @"5.9.0" - - -@class PushNotificationManager; - -#if TARGET_OS_IPHONE -@class CLLocation; -#endif - -typedef void (^PushwooshGetTagsHandler)(NSDictionary *tags); -typedef void (^PushwooshErrorHandler)(NSError *error); - -/** - `PushNotificationDelegate` protocol defines the methods that can be implemented in the delegate of the `PushNotificationManager` class' singleton object. - These methods provide information about the key events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. - These methods implementation allows to react on these events properly. - */ -@protocol PushNotificationDelegate - -@optional -/** - Tells the delegate that the application has registered with Apple Push Service (APS) successfully. - - @param token A token used for identifying the device with APS. - */ -- (void)onDidRegisterForRemoteNotificationsWithDeviceToken:(NSString *)token; - -/** - Sent to the delegate when Apple Push Service (APS) could not complete the registration process successfully. - - @param error An NSError object encapsulating the information about the reason of the registration failure. Within this method you can define application's behaviour in case of registration failure. - */ -- (void)onDidFailToRegisterForRemoteNotificationsWithError:(NSError *)error; - -/** - Tells the delegate that the push manager has received a remote notification. - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. -@param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. - */ -- (void)onPushReceived:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; - -/** - Tells the delegate that the user has pressed OK on the push notification. - IMPORTANT: This method is used for backwards compatibility and is deprecated. Please use the `onPushAccepted:withNotification:onStart:` method instead - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. - Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - */ -- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification DEPRECATED_ATTRIBUTE; - -/** - Tells the delegate that the user has pressed on the push notification banner. - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information about the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. - Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - @param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. - */ -- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; - -/** - Tells the delegate that the push manager has received tags from the server. - - @param tags Dictionary representation of received tags. - Dictionary example: - - { - Country = ru; - Language = ru; - } - - */ -- (void)onTagsReceived:(NSDictionary *)tags; - -/** - Sent to the delegate when push manager could not complete the tags receiving process successfully. - - @param error An NSError object that encapsulates information why receiving tags did not succeed. - */ -- (void)onTagsFailedToReceive:(NSError *)error; - -/** - Tells the delegate that In-App with specified code has been closed - - @param code In-App code - */ -- (void)onInAppClosed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); - -/** - Tells the delegate that In-App with specified code has been displayed - - @param code In-App code - */ -- (void)onInAppDisplayed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); - - -#if TARGET_OS_IPHONE -/** - The method will be called on the delegate when the application is launched in response to the user's request to view in-app notification settings. - Add UNAuthorizationOptionProvidesAppNotificationSettings as an option in [PushNotificationManager pushManager].additionalAuthorizationOptions to add a button to inline notification settings view and the notification settings view in Settings. - The notification will be nil when opened from Settings. - - @param pushManager PushNotificationManager instance - @param notification Source notification - */ -- (void)pushManager:(PushNotificationManager *)pushManager openSettingsForNotification:(UNNotification *)notification __IOS_AVAILABLE(12.0); - -#endif - -@end - -/** - `PWTags` class encapsulates the methods for creating tags parameters for sending them to the server. - */ -@interface PWTags : NSObject - -/** - Creates a dictionary for incrementing/decrementing a numeric tag on the server. - - Example: - - NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: - aliasField.text, @"Alias", - [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", - [PWTags incrementalTagWithInteger:5], @"price", - nil]; - - [[PushNotificationManager pushManager] setTags:tags]; - - @param delta Difference that needs to be applied to the tag's counter. - - @return Dictionary, that needs to be sent as the value for the tag - */ -+ (NSDictionary *)incrementalTagWithInteger:(NSInteger)delta; - -@end - -/** - `PushNotificationManager` class offers access to the singleton-instance of the push manager responsible for registering the device with the APS servers, receiving and processing push notifications. - */ -@interface PushNotificationManager : NSObject { -} - -/** - Pushwoosh Application ID. Usually retrieved automatically from Info.plist parameter `Pushwoosh_APPID` - */ -@property (nonatomic, copy, readonly) NSString *appCode; - -/** - Application name. Usually retrieved automatically from Info.plist bundle name (CFBundleDisplayName). Could be used to override bundle name. In addition could be set in Info.plist as `Pushwoosh_APPNAME` parameter. - */ -@property (nonatomic, copy, readonly) NSString *appName; - -/** - `PushNotificationDelegate` protocol delegate that would receive the information about events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. - Pushwoosh Runtime sets it to ApplicationDelegate by default - */ -@property (nonatomic, weak) NSObject *delegate; - -#if TARGET_OS_IPHONE - -/** - Show push notifications alert when push notification is received while the app is running, default is `YES` - */ -@property (nonatomic, assign) BOOL showPushnotificationAlert; - -/** - Authorization options in addition to UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay. - */ -@property (nonatomic) UNAuthorizationOptions additionalAuthorizationOptions __IOS_AVAILABLE(12.0); - -#endif - -/** - Returns push notification payload if the app was started in response to push notification or null otherwise - */ -@property (nonatomic, copy, readonly) NSDictionary *launchNotification; - -#if TARGET_OS_IPHONE - -/** - Returns UNUserNotificationCenterDelegate that handles foreground push notifications on iOS10 - */ -@property (nonatomic, strong, readonly) id notificationCenterDelegate; - -#else - -@property (nonatomic, strong, readonly) id notificationCenterDelegate; - -#endif - -/** - Initializes PushNotificationManager. Usually called by Pushwoosh Runtime internally. - @param appCode Pushwoosh App ID. - @param appName Application name. - */ -+ (void)initializeWithAppCode:(NSString *)appCode appName:(NSString *)appName; - -/** - Returns an object representing the current push manager. - - @return A singleton object that represents the push manager. - */ -+ (PushNotificationManager *)pushManager; - -/** - Registers for push notifications. By default registeres for "UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert" flags. - Automatically detects if you have "newsstand-content" in "UIBackgroundModes" and adds "UIRemoteNotificationTypeNewsstandContentAvailability" flag. - */ -- (void)registerForPushNotifications; - -/** - Unregisters from push notifications. - */ -- (void)unregisterForPushNotificationsWithCompletion:(void (^)(NSError *error))completion; - -/** - Deprecated. Use unregisterForPushNotificationsWithCompletion: method instead - */ -- (void)unregisterForPushNotifications __attribute__((deprecated)); - -/** - Deprecated. Use initializeWithAppCode:appName: method instead - */ -- (instancetype)initWithApplicationCode:(NSString *)appCode appName:(NSString *)appName __attribute__((deprecated)); - -#if TARGET_OS_IPHONE - -/** - Deprecated. Use initializeWithAppCode:appName: method instead - */ -- (id)initWithApplicationCode:(NSString *)appCode navController:(UIViewController *)navController appName:(NSString *)appName __attribute__((deprecated)); - -/** - Sends geolocation to the server for GeoFencing push technology. Called internally, please use `startLocationTracking` and `stopLocationTracking` functions. - - @param location Location to be sent. - */ -- (void)sendLocation:(CLLocation *)location; - -/** - Start location tracking. - */ -- (void)startLocationTracking; - -/** - Stops location tracking - */ -- (void)stopLocationTracking; - -#endif - -/** - Send tags to server. Tag names have to be created in the Pushwoosh Control Panel. Possible tag types: Integer, String, Incremental (integer only), List tags (array of values). - - Example: - - NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: - aliasField.text, @"Alias", - [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", - [PWTags incrementalTagWithInteger:5], @"price", - [NSArray arrayWithObjects:@"Item1", @"Item2", @"Item3", nil], @"List", - nil]; - - [[PushNotificationManager pushManager] setTags:tags]; - - @param tags Dictionary representation of tags to send. - */ -- (void)setTags:(NSDictionary *)tags; - -/** - Send tags to server with completion block. If setTags succeeds competion is called with nil argument. If setTags fails completion is called with error. - */ -- (void)setTags:(NSDictionary *)tags withCompletion:(void (^)(NSError *error))completion; - -/** - Get tags from the server. Calls delegate method `onTagsReceived:` or `onTagsFailedToReceive:` depending on the results. - */ -- (void)loadTags; - -/** - Get tags from server. Calls delegate method if exists and handler (block). - - @param successHandler The block is executed on the successful completion of the request. This block has no return value and takes one argument: the dictionary representation of the recieved tags. - Example of the dictionary representation of the received tags: - - { - Country = ru; - Language = ru; - } - - @param errorHandler The block is executed on the unsuccessful completion of the request. This block has no return value and takes one argument: the error that occurred during the request. - */ -- (void)loadTags:(PushwooshGetTagsHandler)successHandler error:(PushwooshErrorHandler)errorHandler; - -/** - Informs the Pushwoosh about the app being launched. Usually called internally by SDK Runtime. - */ -- (void)sendAppOpen; - -/** - Sends current badge value to server. Called internally by SDK Runtime when `UIApplication` `setApplicationBadgeNumber:` is set. This function is used for "auto-incremeting" badges to work. - This way Pushwoosh server can know what current badge value is set for the application. - - @param badge Current badge value. - */ -- (void)sendBadges:(NSInteger)badge; - -+ (NSString *)pushwooshVersion; - -#if TARGET_OS_IPHONE -/** - Sends in-app purchases to Pushwoosh. Use in paymentQueue:updatedTransactions: payment queue method (see example). - - Example: - - - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { - [[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions]; - } - - @param transactions Array of SKPaymentTransaction items as received in the payment queue. - */ -- (void)sendSKPaymentTransactions:(NSArray *)transactions; -#endif - -/** - Tracks individual in-app purchase. See recommended `sendSKPaymentTransactions:` method. - - @param productIdentifier purchased product ID - @param price price for the product - @param currencyCode currency of the price (ex: @"USD") - @param date time of the purchase (ex: [NSDate now]) - */ -- (void)sendPurchase:(NSString *)productIdentifier withPrice:(NSDecimalNumber *)price currencyCode:(NSString *)currencyCode andDate:(NSDate *)date; - -/** - Gets current push token. - - @return Current push token. May be nil if no push token is available yet. - */ -- (NSString *)getPushToken; - -/** - Gets HWID. Unique device identifier that used in all API calls with Pushwoosh. - This is identifierForVendor for iOS >= 7. - - @return Unique device identifier. - */ -- (NSString *)getHWID; - -- (void)handlePushRegistration:(NSData *)devToken; -- (void)handlePushRegistrationString:(NSString *)deviceID; - -- (void)handlePushRegistrationFailure:(NSError *)error; - -//If the push is received while the app is running. Call it only for iOS version < 10. For iOS 10 and higher use notificationCenterDelegate. -- (BOOL)handlePushReceived:(NSDictionary *)userInfo; - -/** - Gets APN payload from push notifications dictionary. - - Example: - - - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { - NSDictionary * apnPayload = [[PushNotificationsManager pushManager] getApnPayload:pushNotification]; - NSLog(@"%@", apnPayload); - } - - For Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - Result is: - - { - alert = "Some text."; - sound = default; - }; - - @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` - */ -- (NSDictionary *)getApnPayload:(NSDictionary *)pushNotification; - -/** - Gets custom JSON string data from push notifications dictionary as specified in Pushwoosh Control Panel. - - Example: - - - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { - NSString * customData = [[PushNotificationsManager pushManager] getCustomPushData:pushNotification]; - NSLog(@"%@", customData); - } - - @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` - */ -- (NSString *)getCustomPushData:(NSDictionary *)pushNotification; - -/** - The same as getCustomPushData but returns NSDictionary rather than JSON string (converts JSON string into NSDictionary). - */ -- (NSDictionary *)getCustomPushDataAsNSDict:(NSDictionary *)pushNotification; - -/** - Returns dictionary with enabled remove notificaton types. - Example enabled push: - { - enabled = 1; - pushAlert = 1; - pushBadge = 1; - pushSound = 1; - type = 7; - } - - where "type" field is UIUserNotificationType - - Disabled push: - { - enabled = 1; - pushAlert = 0; - pushBadge = 0; - pushSound = 0; - type = 0; - } - - Note: In the latter example "enabled" field means that device can receive push notification but could not display alerts (ex: silent push) - */ -+ (NSMutableDictionary *)getRemoteNotificationStatus; - -/** - Clears the notifications from the notification center. - */ -+ (void)clearNotificationCenter; - -/** - Set User indentifier. This could be Facebook ID, username or email, or any other user ID. - This allows data and events to be matched across multiple user devices. - - Deprecated. Use PWInAppManager setUserId method instead - */ -- (void)setUserId:(NSString *)userId __attribute__ ((deprecated));; - -/** - Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. - - @param oldUserId source user - @param newUserId destination user - @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId - @param completion callback - - Deprecated. Use PWInAppManager mergeUserId method instead - */ -- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); - -/** - Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. - - Example: - - [[PushNotificationManager pushManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; - [[PushNotificationManager pushManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; - - @param event name of the event - @param attributes NSDictionary of event attributes - @param completion function to call after posting event - - Deprecated. Use PWInAppManager postEvent method instead - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); - -/** - See `postEvent:withAttributes:completion:` - - Deprecated. Use PWInAppManager postEvent method instead - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes __attribute__ ((deprecated)); - -@end diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h deleted file mode 100644 index 88d10edd58..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// Pushwoosh.h -// Pushwoosh SDK -// (c) Pushwoosh 2016 -// - -#import "PushNotificationManager.h" -#import "PWInAppManager.h" -#import "PWLog.h" -#import "PWGDPRManager.h" - -#if TARGET_OS_IPHONE - #import "PWInbox.h" -#endif diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Modules/module.modulemap deleted file mode 100644 index a31d09abdb..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pushwoosh { - umbrella header "Pushwoosh.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Pushwoosh b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Pushwoosh deleted file mode 100755 index c0e65f9093..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Pushwoosh and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Resources/Info.plist b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index ad80a2ae1c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - BuildMachineOSBuild - 17G65 - CFBundleDevelopmentRegion - en - CFBundleExecutable - Pushwoosh - CFBundleIdentifier - com.pushwoosh.PushwooshMac - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Pushwoosh - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 10A255 - DTPlatformVersion - GM - DTSDKBuild - 18A384 - DTSDKName - macosx10.14 - DTXcode - 1000 - DTXcodeBuild - 10A255 - NSHumanReadableCopyright - Copyright © 2017 Pushwoosh. All rights reserved. - - diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/Current b/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Pushwoosh.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Headers b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Modules b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Modules deleted file mode 120000 index 5736f3186e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Modules +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Modules \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Resources b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Resources deleted file mode 120000 index 953ee36f3b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Timepiece b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Timepiece deleted file mode 120000 index 1e4b3a9ab9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Timepiece +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Timepiece \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Headers/Timepiece-Swift.h b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Headers/Timepiece-Swift.h deleted file mode 100644 index 8fd1747cf1..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Headers/Timepiece-Swift.h +++ /dev/null @@ -1,187 +0,0 @@ -// Generated by Apple Swift version 4.0.2 effective-3.2.2 (swiftlang-900.0.69.2 clang-900.0.38) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_attribute(external_source_symbol) -# define SWIFT_STRINGIFY(str) #str -# define SWIFT_MODULE_NAMESPACE_PUSH(module_name) _Pragma(SWIFT_STRINGIFY(clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in=module_name, generated_declaration))), apply_to=any(function, enum, objc_interface, objc_category, objc_protocol)))) -# define SWIFT_MODULE_NAMESPACE_POP _Pragma("clang attribute pop") -#else -# define SWIFT_MODULE_NAMESPACE_PUSH(module_name) -# define SWIFT_MODULE_NAMESPACE_POP -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) || __cplusplus < 201103L -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR __attribute__((enum_extensibility(open))) -# else -# define SWIFT_ENUM_ATTR -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_ATTR SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) SWIFT_ENUM(_type, _name) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if __has_feature(modules) -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -SWIFT_MODULE_NAMESPACE_PUSH("Timepiece") -SWIFT_MODULE_NAMESPACE_POP -#pragma clang diagnostic pop diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftdoc b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftdoc deleted file mode 100644 index b657c60656..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftmodule b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftmodule deleted file mode 100644 index 358718771c..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/Timepiece.swiftmodule/x86_64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/module.modulemap deleted file mode 100644 index 6531eeb5a6..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Modules/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -framework module Timepiece { - header "Timepiece-Swift.h" - requires objc -} diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Resources/Info.plist b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 389189ae52..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - BuildMachineOSBuild - 17B48 - CFBundleDevelopmentRegion - en - CFBundleExecutable - Timepiece - CFBundleIdentifier - naoty.Timepiece - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Timepiece - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 9B55 - DTPlatformVersion - GM - DTSDKBuild - 17B41 - DTSDKName - macosx10.13 - DTXcode - 0910 - DTXcodeBuild - 9B55 - UIDeviceFamily - - 1 - 2 - - - diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Timepiece b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Timepiece deleted file mode 100755 index f46c84ec56..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/A/Timepiece and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/Current b/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/Mac/Timepiece.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/AppsFlyerTracker b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/AppsFlyerTracker deleted file mode 100755 index 67cc1ca5af..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/AppsFlyerTracker and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerCrossPromotionHelper.h b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerCrossPromotionHelper.h deleted file mode 100644 index 7588f820f4..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerCrossPromotionHelper.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// CrossPromotionHelper.h -// AppsFlyerLib -// -// Created by Gil Meroz on 27/01/2017. -// -// - -#import -#import - - -NS_ASSUME_NONNULL_BEGIN - -@interface AppsFlyerCrossPromotionHelper : NSObject -+ (void) trackCrossPromoteImpression:(nonnull NSString*) appID - campaign:(nullable NSString*) campaign; - -+ (void) trackAndOpenStore:(nonnull NSString*) appID - campaign:(nullable NSString *) campaign - paramters:(nullable NSDictionary*) parameters - openStore:(void (^)(NSURLSession *urlSession,NSURL *clickURL))openStoreBlock; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLib-Prefix.pch b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLib-Prefix.pch deleted file mode 100644 index 9d4f5d9b03..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLib-Prefix.pch +++ /dev/null @@ -1,10 +0,0 @@ -// -// Prefix header for all source files of the 'AppsFlyerLib' target in the 'AppsFlyerLib' project -// - -#ifdef __OBJC__ - #import -#endif - -#define kAppsFlyerSDKBuildNumber @"4.8.9" -#define kJenkinsBuildNumber @"728" diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLinkGenerator.h b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLinkGenerator.h deleted file mode 100644 index 9ed4178c3f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerLinkGenerator.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// LinkGenerator.h -// AppsFlyerLib -// -// Created by Gil Meroz on 27/01/2017. -// -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - * Payload container for the `generateInviteUrlWithLinkGenerator:completionHandler:` from `AppsFlyerShareInviteHelper` - */ -@interface AppsFlyerLinkGenerator: NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/// The channel through which the invite was sent (e.g. Facebook/Gmail/etc.). Usage: Recommended -- (void)setChannel :(nonnull NSString *)channel; -- (void)setReferrerCustomerId:(nonnull NSString *)referrerCustomerId; -/// A campaign name. Usage: Optional -- (void)setCampaign :(nonnull NSString *)campaign; -- (void)setReferrerUID :(nonnull NSString *)referrerUID; -- (void)setReferrerName :(nonnull NSString *)referrerName; -/// The URL to referrer user avatar. Usage: Optional -- (void)setReferrerImageURL :(nonnull NSString *)referrerImageURL; -- (void)setAppleAppID :(nonnull NSString *)appleAppID; -- (void)setDeeplinkPath :(nonnull NSString *)deeplinkPath; -- (void)setBaseDeeplink :(nonnull NSString *)baseDeeplink; -/// A single key value custom parameter. Usage: Optional -- (void)addParameterValue :(nonnull NSString *)value forKey:(NSString*)key; -/// Multiple key value custom parameters. Usage: Optional -- (void)addParameters :(nonnull NSDictionary *)parameters; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerShareInviteHelper.h b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerShareInviteHelper.h deleted file mode 100644 index 6ab745e00c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerShareInviteHelper.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// ShareInviteHelper.h -// AppsFlyerLib -// -// Created by Gil Meroz on 27/01/2017. -// -// - -#import -#import "AppsFlyerLinkGenerator.h" - -@interface AppsFlyerShareInviteHelper : NSObject - -NS_ASSUME_NONNULL_BEGIN - -/*! - * The AppsFlyerShareInviteHelper class builds the invite URL according to various setter methods - * which allow passing on additional information on the click. - * This information is available through `onConversionDataReceived:` when the user accepts the invite and installs the app. - * In addition, campaign and channel parameters are visible within the AppsFlyer Dashboard. - */ -+ (void) generateInviteUrlWithLinkGenerator:(AppsFlyerLinkGenerator * (^)(AppsFlyerLinkGenerator *generator))generatorCreator - completionHandler:(void (^)(NSURL * _Nullable url))completionHandler; - -/*! - * It is recommended to generate an in-app event after the invite is sent to track the invites from the senders' perspective. - * This enables you to find the users that tend most to invite friends, and the media sources that get you these users. - */ -+ (void) trackInvite:(nullable NSString *)channel parameters:(nullable NSDictionary *)parameters; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerTracker.h b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerTracker.h deleted file mode 100644 index c33cae3aa2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Headers/AppsFlyerTracker.h +++ /dev/null @@ -1,349 +0,0 @@ -// -// AppsFlyerTracker.h -// AppsFlyerLib -// -// AppsFlyer iOS SDK 4.8.9 (728) -// Copyright (c) 2013 AppsFlyer Ltd. All rights reserved. -// - -#import -#import "AppsFlyerCrossPromotionHelper.h" -#import "AppsFlyerShareInviteHelper.h" - - - -// In app event names constants -#define AFEventLevelAchieved @"af_level_achieved" -#define AFEventAddPaymentInfo @"af_add_payment_info" -#define AFEventAddToCart @"af_add_to_cart" -#define AFEventAddToWishlist @"af_add_to_wishlist" -#define AFEventCompleteRegistration @"af_complete_registration" -#define AFEventTutorial_completion @"af_tutorial_completion" -#define AFEventInitiatedCheckout @"af_initiated_checkout" -#define AFEventPurchase @"af_purchase" -#define AFEventRate @"af_rate" -#define AFEventSearch @"af_search" -#define AFEventSpentCredits @"af_spent_credits" -#define AFEventAchievementUnlocked @"af_achievement_unlocked" -#define AFEventContentView @"af_content_view" -#define AFEventListView @"af_list_view" -#define AFEventTravelBooking @"af_travel_booking" -#define AFEventShare @"af_share" -#define AFEventInvite @"af_invite" -#define AFEventLogin @"af_login" -#define AFEventReEngage @"af_re_engage" -#define AFEventUpdate @"af_update" -#define AFEventOpenedFromPushNotification @"af_opened_from_push_notification" -#define AFEventLocation @"af_location_coordinates" -#define AFEventCustomerSegment @"af_customer_segment" - -#define AFEventSubscribe @"af_subscribe" -#define AFEventStartTrial @"af_start_trial" -#define AFEventAdClick @"af_ad_click" -#define AFEventAdView @"af_ad_view" - -// In app event parameter names -#define AFEventParamContent @"af_content" -#define AFEventParamAchievenmentId @"af_achievement_id" -#define AFEventParamLevel @"af_level" -#define AFEventParamScore @"af_score" -#define AFEventParamSuccess @"af_success" -#define AFEventParamPrice @"af_price" -#define AFEventParamContentType @"af_content_type" -#define AFEventParamContentId @"af_content_id" -#define AFEventParamContentList @"af_content_list" -#define AFEventParamCurrency @"af_currency" -#define AFEventParamQuantity @"af_quantity" -#define AFEventParamRegistrationMethod @"af_registration_method" -#define AFEventParamPaymentInfoAvailable @"af_payment_info_available" -#define AFEventParamMaxRatingValue @"af_max_rating_value" -#define AFEventParamRatingValue @"af_rating_value" -#define AFEventParamSearchString @"af_search_string" -#define AFEventParamDateA @"af_date_a" -#define AFEventParamDateB @"af_date_b" -#define AFEventParamDestinationA @"af_destination_a" -#define AFEventParamDestinationB @"af_destination_b" -#define AFEventParamDescription @"af_description" -#define AFEventParamClass @"af_class" -#define AFEventParamEventStart @"af_event_start" -#define AFEventParamEventEnd @"af_event_end" -#define AFEventParamLat @"af_lat" -#define AFEventParamLong @"af_long" -#define AFEventParamCustomerUserId @"af_customer_user_id" -#define AFEventParamValidated @"af_validated" -#define AFEventParamRevenue @"af_revenue" -#define AFEventProjectedParamRevenue @"af_projected_revenue" -#define AFEventParamReceiptId @"af_receipt_id" -#define AFEventParamTutorialId @"af_tutorial_id" -#define AFEventParamAchievenmentId @"af_achievement_id" -#define AFEventParamVirtualCurrencyName @"af_virtual_currency_name" -#define AFEventParamDeepLink @"af_deep_link" -#define AFEventParamOldVersion @"af_old_version" -#define AFEventParamNewVersion @"af_new_version" -#define AFEventParamReviewText @"af_review_text" -#define AFEventParamCouponCode @"af_coupon_code" -#define AFEventParamOrderId @"af_order_id" -#define AFEventParam1 @"af_param_1" -#define AFEventParam2 @"af_param_2" -#define AFEventParam3 @"af_param_3" -#define AFEventParam4 @"af_param_4" -#define AFEventParam5 @"af_param_5" -#define AFEventParam6 @"af_param_6" -#define AFEventParam7 @"af_param_7" -#define AFEventParam8 @"af_param_8" -#define AFEventParam9 @"af_param_9" -#define AFEventParam10 @"af_param_10" - -#define AFEventParamDepartingDepartureDate @"af_departing_departure_date" -#define AFEventParamReturningDepartureDate @"af_returning_departure_date" -#define AFEventParamDestinationList @"af_destination_list" //array of string -#define AFEventParamCity @"af_city" -#define AFEventParamRegion @"af_region" -#define AFEventParamCountry @"af_country" - - -#define AFEventParamDepartingArrivalDate @"af_departing_arrival_date" -#define AFEventParamReturningArrivalDate @"af_returning_arrival_date" -#define AFEventParamSuggestedDestinations @"af_suggested_destinations" //array of string -#define AFEventParamTravelStart @"af_travel_start" -#define AFEventParamTravelEnd @"af_travel_end" -#define AFEventParamNumAdults @"af_num_adults" -#define AFEventParamNumChildren @"af_num_children" -#define AFEventParamNumInfants @"af_num_infants" -#define AFEventParamSuggestedHotels @"af_suggested_hotels" //array of string - -#define AFEventParamUserScore @"af_user_score" -#define AFEventParamHotelScore @"af_hotel_score" -#define AFEventParamPurchaseCurrency @"af_purchase_currency" - -#define AFEventParamPreferredStarRatings @"af_preferred_star_ratings" //array of int (basically a tupple (min,max) but we'll use array of int and instruct the developer to use two values) - -#define AFEventParamPreferredPriceRange @"af_preferred_price_range" //array of int (basically a tupple (min,max) but we'll use array of int and instruct the developer to use two values) -#define AFEventParamPreferredNeighborhoods @"af_preferred_neighborhoods" //array of string -#define AFEventParamPreferredNumStops @"af_preferred_num_stops" - -#define AFEventParamAdRevenueAdType @"af_adrev_ad_type" -#define AFEventParamAdRevenueNetworkName @"af_adrev_network_name" -#define AFEventParamAdRevenuePlacementId @"af_adrev_placement_id" -#define AFEventParamAdRevenueAdSize @"af_adrev_ad_size" -#define AFEventParamAdRevenueMediatedNetworkName @"af_adrev_mediated_network_name" - -#define kAppsFlyerOneLinkVersion @"oneLinkVersion" -#define kAppsFlyerOneLinkScheme @"oneLinkScheme" -#define kAppsFlyerOneLinkDomain @"oneLinkDomain" -#define kDefaultOneLink @"go.onelink.me" -#define kNoOneLinkFallback @"https://app.appsflyer.com" -#define kINviteAppleAppID @"af_siteid" - - - - -typedef enum { - EmailCryptTypeNone = 0, - EmailCryptTypeSHA1 = 1, - EmailCryptTypeMD5 = 2, - EmailCryptTypeSHA256 = 3 -} EmailCryptType; - -/* - * This delegate should be use if you want to use AppsFlyer conversion data. See AppsFlyer iOS - */ -@protocol AppsFlyerTrackerDelegate - -@optional -- (void) onConversionDataReceived:(NSDictionary*) installData; -- (void) onConversionDataRequestFailure:(NSError *)error; -- (void) onAppOpenAttribution:(NSDictionary*) attributionData; -- (void) onAppOpenAttributionFailure:(NSError *)error; - -@end - -@interface AppsFlyerTracker : NSObject - -+(AppsFlyerTracker*) sharedTracker; - -/* In case you use your own user ID in your app, you can set this property to that ID. */ -@property (nonatomic, strong, setter=setCustomerUserID:) NSString *customerUserID; - - -/* In case you use Custom data and you want to receive it in the raw reports.*/ -@property (nonatomic, strong, setter=setAdditionalData:) NSDictionary *customData; - -/* Use this property to set your AppsFlyer's dev key. */ -@property (nonatomic, strong, setter=setAppsFlyerDevKey:) NSString *appsFlyerDevKey; - -/* Use this property to set your app's Apple ID (taken from the app's page on iTunes Connect) */ -@property (nonatomic, strong, setter=setAppleAppID:) NSString *appleAppID; - -/* - * In case of in app purchase events, you can set the currency code your user has purchased with. - * The currency code is a 3 letter code according to ISO standards. Example: "USD" - */ -@property (nonatomic, strong) NSString *currencyCode; - -/* - * AppsFLyer SDK collect Apple's advertisingIdentifier if the AdSupport framework included in the SDK. - * You can disable this behavior by setting the following property to YES. - */ -@property BOOL disableAppleAdSupportTracking; - -/* - * Prints our messages to the log. This property should only be used in DEBUG mode. The default value - * is NO. - */ -@property (nonatomic, setter = setIsDebug:) BOOL isDebug; - - -/*! - * Set this flag to `YES`, to collect the current device name. Default value is `NO` - */ -@property (nonatomic, setter = setShouldCollectDeviceName:) BOOL shouldCollectDeviceName; - - -@property (nonatomic, setter = setAppInviteOneLink:) NSString* appInviteOneLinkID; - -/* - * Opt-out tracking for specific user - */ -@property BOOL deviceTrackingDisabled; - -/* - * Opt-out tracking for iAd attributions - */ -@property BOOL disableIAdTracking; - -/* - * AppsFlyer delegate. See AppsFlyerTrackerDelegate abvoe - */ -@property (weak, nonatomic) id delegate; - -/* - * In app purchase receipt validation Apple environment (production or sandbox). The default value - * is NO. - */ -@property (nonatomic, setter = setUseReceiptValidationSandbox:) BOOL useReceiptValidationSandbox; - - -/* - * Set this flag to test uninstall on Apple environment (production or sandbox). The default value - * is NO. - */ -@property (nonatomic, setter = setUseUninstallSandbox:) BOOL useUninstallSandbox; - -/* - * Advertising Id (exposed for RemoteDebug) - */ -@property (nonatomic, strong) NSString *advertiserId; - -/* - * Use this to send the User's emails - */ --(void) setUserEmails:(NSArray *) userEmails withCryptType:(EmailCryptType) type; - - -/* Track application launch*/ -- (void) trackAppLaunch; - -/* - * Use this method to track events in your app like purchases or user actions. - * Example : - * [[AppsFlyer sharedTracker] trackEvent:@"hotel-booked" withValue:"200"]; - */ -- (void) trackEvent:(NSString*)eventName withValue:(NSString*)value __attribute__((deprecated)); - -/* - * Use this method to track an events with mulitple values. See AppsFlyer's documentation for details. - * - */ -- (void) trackEvent:(NSString *)eventName withValues:(NSDictionary*)values; - -/* - * To track in app purchases you can call this method from the completeTransaction: method on - * your SKPaymentTransactionObserver. - */ -- (void) validateAndTrackInAppPurchase:(NSString *)productIdentifier - price:(NSString *)price - currency:(NSString *)currency - transactionId:(NSString *) tranactionId - additionalParameters:(NSDictionary *)params - success:(void (^)(NSDictionary *response))successBlock - failure:(void (^)(NSError *error, id reponse)) failedBlock NS_AVAILABLE(10_7, 7_0); - - - -/* -* To Track location for geo-fencing. -*/ -- (void) trackLocation:(double) longitude latitude:(double) latitude; - -/* - * This method returns AppsFLyer's internal user ID (unique for your app) - */ -- (NSString *) getAppsFlyerUID; - -/* - * In case you want to use AppsFlyer tracking data in your app you can use the following method set a - * delegate with callback buttons for the tracking data. See AppsFlyerTrackerDelegate above. - */ -- (void) loadConversionDataWithDelegate:(id) delegate __attribute__((deprecated)); - -/* - * In case you want to track deep linking, call this method from your delegate's openURL method. - */ -- (void) handleOpenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; - -/* - * In case you want to track deep linking, call this method from your delegate's openURL method with refferer. - */ -- (void) handleOpenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication withAnnotation:(id) annotation; - - -- (void) handleOpenUrl:(NSURL *) url options:(NSDictionary *)options; -/* - * For Universal links iOS 9 - */ - -- (BOOL) continueUserActivity:(NSUserActivity *) userActivity restorationHandler:(void (^)(NSArray *))restorationHandler NS_AVAILABLE_IOS(9_0); -- (void) didUpdateUserActivity:(NSUserActivity *)userActivity NS_AVAILABLE_IOS(9_0); -- (void) handlePushNotification:(NSDictionary *) pushPayload; - - -/* - Register uninstall - you should register for remote notification and provide Appsflyer the push device token. -*/ -- (void) registerUninstall:(NSData *) deviceToken; - -/* - Get SDK version. -*/ -- (NSString *) getSDKVersion; - - - -- (void) remoteDebuggingCallWithData:(NSString *) data; - -/*! - * @brief This property accepts a string value representing the host name for all enpoints. - * @warning To use `default` SDK endpoint – set value to `nil`. - * @code - * Objective-C: - * [[AppsFlyerTracker sharedTracker] setHost:@"example.com"]; - * Swift: - * AppsFlyerTracker.shared().host = "example.com" - * @endcode - */ - -@property (nonatomic, strong) NSString *host; - -/*! - * This property is responsible for timeout between sessions in seconds. - * Default value is 5 seconds. - */ -@property (atomic) NSUInteger minTimeBetweenSessions; - -/*! - * WARNING! This will disable all requests from AppsFlyer SDK - */ -@property (atomic) BOOL isStopTracking; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Info.plist deleted file mode 100644 index 446c9e888f..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Modules/module.modulemap deleted file mode 100644 index 3a8afb7486..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/AppsFlyerTracker.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module AppsFlyerTracker { - umbrella header "AppsFlyerTracker.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Bolts b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Bolts deleted file mode 100755 index 8002b83cb7..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Bolts and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLink.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLink.h deleted file mode 100644 index aa89efc2b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLink.h +++ /dev/null @@ -1,49 +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 - -/*! The version of the App Link protocol that this library supports */ -FOUNDATION_EXPORT NSString *const BFAppLinkVersion; - -/*! - Contains App Link metadata relevant for navigation on this device - derived from the HTML at a given URL. - */ -@interface BFAppLink : NSObject - -/*! - Creates a BFAppLink with the given list of BFAppLinkTargets and target URL. - - Generally, this will only be used by implementers of the BFAppLinkResolving protocol, - as these implementers will produce App Link metadata for a given URL. - - @param sourceURL the URL from which this App Link is derived - @param targets an ordered list of BFAppLinkTargets for this platform derived - from App Link metadata. - @param webURL the fallback web URL, if any, for the app link. - */ -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(NSURL *)webURL; - -/*! The URL from which this BFAppLink was derived */ -@property (nonatomic, strong, readonly) NSURL *sourceURL; - -/*! - The ordered list of targets applicable to this platform that will be used - for navigation. - */ -@property (nonatomic, copy, readonly) NSArray *targets; - -/*! The fallback web URL to use if no targets are installed on this device. */ -@property (nonatomic, strong, readonly) NSURL *webURL; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkNavigation.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkNavigation.h deleted file mode 100644 index 4b8a71e02f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkNavigation.h +++ /dev/null @@ -1,114 +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 - -/*! - The result of calling navigate on a BFAppLinkNavigation - */ -typedef NS_ENUM(NSInteger, BFAppLinkNavigationType) { - /*! Indicates that the navigation failed and no app was opened */ - BFAppLinkNavigationTypeFailure, - /*! Indicates that the navigation succeeded by opening the URL in the browser */ - BFAppLinkNavigationTypeBrowser, - /*! Indicates that the navigation succeeded by opening the URL in an app on the device */ - BFAppLinkNavigationTypeApp -}; - -@protocol BFAppLinkResolving; -@class BFTask; - -/*! - Represents a pending request to navigate to an App Link. Most developers will - simply use navigateToURLInBackground: to open a URL, but developers can build - custom requests with additional navigation and app data attached to them by - creating BFAppLinkNavigations themselves. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkNavigation : NSObject - -/*! - The extras for the AppLinkNavigation. This will generally contain application-specific - data that should be passed along with the request, such as advertiser or affiliate IDs or - other such metadata relevant on this device. - */ -@property (nonatomic, copy, readonly) NSDictionary *extras; - -/*! - The al_applink_data for the AppLinkNavigation. This will generally contain data common to - navigation attempts such as back-links, user agents, and other information that may be used - in routing and handling an App Link request. - */ -@property (nonatomic, copy, readonly) NSDictionary *appLinkData; - -/*! The AppLink to navigate to */ -@property (nonatomic, strong, readonly) BFAppLink *appLink; - -/*! Creates an AppLinkNavigation with the given link, extras, and App Link data */ -+ (instancetype)navigationWithAppLink:(BFAppLink *)appLink - extras:(NSDictionary *)extras - appLinkData:(NSDictionary *)appLinkData; - -/*! - Creates an NSDictionary with the correct format for iOS callback URLs, - to be used as 'appLinkData' argument in the call to navigationWithAppLink:extras:appLinkData: - */ -+ (NSDictionary *)callbackAppLinkDataForAppWithName:(NSString *)appName url:(NSString *)url; - -/*! Performs the navigation */ -- (BFAppLinkNavigationType)navigate:(NSError **)error; - -/*! Returns a BFAppLink for the given URL */ -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination; - -/*! Returns a BFAppLink for the given URL using the given App Link resolution strategy */ -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination resolver:(id)resolver; - -/*! Navigates to a BFAppLink and returns whether it opened in-app or in-browser */ -+ (BFAppLinkNavigationType)navigateToAppLink:(BFAppLink *)link error:(NSError **)error; - -/*! - Returns a BFAppLinkNavigationType based on a BFAppLink. - It's essentially a no-side-effect version of navigateToAppLink:error:, - allowing apps to determine flow based on the link type (e.g. open an - internal web view instead of going straight to the browser for regular links.) - */ -+ (BFAppLinkNavigationType)navigationTypeForLink:(BFAppLink *)link; - -/*! - Return navigation type for current instance. - No-side-effect version of navigate: - */ -- (BFAppLinkNavigationType)navigationType; - -/*! Navigates to a URL (an asynchronous action) and returns a BFNavigationType */ -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination; - -/*! - Navigates to a URL (an asynchronous action) using the given App Link resolution - strategy and returns a BFNavigationType - */ -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination resolver:(id)resolver; - -/*! - Gets the default resolver to be used for App Link resolution. If the developer has not set one explicitly, - a basic, built-in resolver will be used. - */ -+ (id)defaultResolver; - -/*! - Sets the default resolver to be used for App Link resolution. Setting this to nil will revert the - default resolver to the basic, built-in resolver provided by Bolts. - */ -+ (void)setDefaultResolver:(id)resolver; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkResolving.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkResolving.h deleted file mode 100644 index 5c78bff458..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkResolving.h +++ /dev/null @@ -1,30 +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 BFTask; - -/*! - Implement this protocol to provide an alternate strategy for resolving - App Links that may include pre-fetching, caching, or querying for App Link - data from an index provided by a service provider. - */ -@protocol BFAppLinkResolving - -/*! - Asynchronously resolves App Link data for a given URL. - - @param url The URL to resolve into an App Link. - @returns A BFTask that will return a BFAppLink for the given URL. - */ -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h deleted file mode 100644 index 436c528068..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h +++ /dev/null @@ -1,88 +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 - -@class BFAppLink; -@class BFAppLinkReturnToRefererController; - -/*! - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -@protocol BFAppLinkReturnToRefererControllerDelegate - -@optional - -/*! Called when the user has tapped to navigate, but before the navigation has been performed. */ -- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller - willNavigateToAppLink:(BFAppLink *)appLink; - -/*! Called after the navigation has been attempted, with an indication of whether the referer - app link was successfully opened. */ -- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller - didNavigateToAppLink:(BFAppLink *)url - type:(BFAppLinkNavigationType)type; - -@end - -/*! - A controller class that implements default behavior for a BFAppLinkReturnToRefererView, including - the ability to display the view above the navigation bar for navigation-based apps. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkReturnToRefererController : NSObject - -/*! - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak) id delegate; - -/*! - The BFAppLinkReturnToRefererView this controller is controlling. - */ -@property (nonatomic, strong) BFAppLinkReturnToRefererView *view; - -/*! - Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed - contained within another UIView (i.e., not displayed above the navigation bar). - */ -- (instancetype)init; - -/*! - Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed - displayed above the navigation bar. - */ -- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController; - -/*! - Removes the view entirely from the navigation controller it is currently displayed in. - */ -- (void)removeFromNavController; - -/*! - Shows the BFAppLinkReturnToRefererView with the specified referer information. If nil or missing data, - the view will not be displayed. */ -- (void)showViewForRefererAppLink:(BFAppLink *)refererAppLink; - -/*! - Shows the BFAppLinkReturnToRefererView with referer information extracted from the specified URL. - If nil or missing referer App Link data, the view will not be displayed. */ -- (void)showViewForRefererURL:(NSURL *)url; - -/*! - Closes the view, possibly animating it. - */ -- (void)closeViewAnimated:(BOOL)animated; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h deleted file mode 100644 index f62bc66f6c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h +++ /dev/null @@ -1,78 +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 - -@class BFAppLinkReturnToRefererView; -@class BFURL; - -typedef NS_ENUM(NSUInteger, BFIncludeStatusBarInSize) { - BFIncludeStatusBarInSizeNever, - BFIncludeStatusBarInSizeIOS7AndLater, - BFIncludeStatusBarInSizeAlways, -}; - -/*! - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -@protocol BFAppLinkReturnToRefererViewDelegate - -/*! - Called when the user has tapped inside the close button. - */ -- (void)returnToRefererViewDidTapInsideCloseButton:(BFAppLinkReturnToRefererView *)view; - -/*! - Called when the user has tapped inside the App Link portion of the view. - */ -- (void)returnToRefererViewDidTapInsideLink:(BFAppLinkReturnToRefererView *)view - link:(BFAppLink *)link; - -@end - -/*! - Provides a UIView that displays a button allowing users to navigate back to the - application that launched the App Link currently being handled, if the App Link - contained referer data. The user can also close the view by clicking a close button - rather than navigating away. If the view is provided an App Link that does not contain - referer data, it will have zero size and no UI will be displayed. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkReturnToRefererView : UIView - -/*! - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak) id delegate; - -/*! - The color of the text label and close button. - */ -@property (nonatomic, strong) UIColor *textColor; - -@property (nonatomic, strong) BFAppLink *refererAppLink; - -/*! - Indicates whether to extend the size of the view to include the current status bar - size, for use in scenarios where the view might extend under the status bar on iOS 7 and - above; this property has no effect on earlier versions of iOS. - */ -@property (nonatomic, assign) BFIncludeStatusBarInSize includeStatusBarInSize; - -/*! - Indicates whether the user has closed the view by clicking the close button. - */ -@property (nonatomic, assign) BOOL closed; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkTarget.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkTarget.h deleted file mode 100644 index 61721269d5..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFAppLinkTarget.h +++ /dev/null @@ -1,33 +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 a target defined in App Link metadata, consisting of at least - a URL, and optionally an App Store ID and name. - */ -@interface BFAppLinkTarget : NSObject - -/*! Creates a BFAppLinkTarget with the given app site and target URL. */ -+ (instancetype)appLinkTargetWithURL:(NSURL *)url - appStoreId:(NSString *)appStoreId - appName:(NSString *)appName; - -/*! The URL prefix for this app link target */ -@property (nonatomic, strong, readonly) NSURL *URL; - -/*! The app ID for the app store */ -@property (nonatomic, copy, readonly) NSString *appStoreId; - -/*! The name of the app */ -@property (nonatomic, copy, readonly) NSString *appName; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationToken.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationToken.h deleted file mode 100644 index bda32ee800..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationToken.h +++ /dev/null @@ -1,42 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - A block that will be called when a token is cancelled. - */ -typedef void(^BFCancellationBlock)(void); - -/*! - 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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenRegistration.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenRegistration.h deleted file mode 100644 index fa6090f667..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenRegistration.h +++ /dev/null @@ -1,29 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - 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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenSource.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenSource.h deleted file mode 100644 index 4627e9958f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFCancellationTokenSource.h +++ /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 - -NS_ASSUME_NONNULL_BEGIN - -@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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFExecutor.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFExecutor.h deleted file mode 100644 index 694c8a5fc2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFExecutor.h +++ /dev/null @@ -1,62 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - 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)(void)))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(^)(void))block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFGeneric.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFGeneric.h deleted file mode 100644 index 99b2cf7de7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFGeneric.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 - -#pragma once - -/** - This exists to use along with `BFTask` and `BFTaskCompletionSource`. - - 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 'BFVoid', which will always have a value of `nil`. - - This allows you to provide a more enforced API contract to the caller, - as sending any message to `BFVoid` will result in a compile time error. - */ -@class _BFVoid_Nonexistant; -typedef _BFVoid_Nonexistant *BFVoid; diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFMeasurementEvent.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFMeasurementEvent.h deleted file mode 100644 index b3173fc23c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFMeasurementEvent.h +++ /dev/null @@ -1,45 +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 - -/*! The name of the notification posted by BFMeasurementEvent */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventNotificationName; - -/*! Defines keys in the userInfo object for the notification named BFMeasurementEventNotificationName */ -/*! The string field for the name of the event */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventNameKey; -/*! The dictionary field for the arguments of the event */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventArgsKey; - -/*! Bolts Events raised by BFMeasurementEvent for Applink */ -/*! - The name of the event posted when [BFURL URLWithURL:] is called successfully. This represents the successful parsing of an app link URL. - */ -FOUNDATION_EXPORT NSString *const BFAppLinkParseEventName; - -/*! - The name of the event posted when [BFURL URLWithInboundURL:] is called successfully. - This represents parsing an inbound app link URL from a different application - */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateInEventName; - -/*! The event raised when the user navigates from your app to other apps */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateOutEventName; - -/*! - The event raised when the user navigates out from your app and back to the referrer app. - e.g when the user leaves your app after tapping the back-to-referrer navigation bar - */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateBackToReferrerEventName; - -@interface BFMeasurementEvent : NSObject - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTask.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTask.h deleted file mode 100644 index 074c182de7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTask.h +++ /dev/null @@ -1,266 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - Error domain used if there was multiple errors on . - */ -extern NSString *const BFTaskErrorDomain; - -/*! - An error code used for , if there were multiple errors. - */ -extern NSInteger const kBFMultipleErrorsError; - -/*! - An error userInfo key used if there were multiple errors on . - Value type is `NSArray *`. - */ -extern NSString *const BFTaskMultipleErrorsUserInfoKey; - -@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<__covariant ResultType> : NSObject - -/*! - A block that can act as a continuation for a task. - */ -typedef __nullable id(^BFContinuationBlock)(BFTask *t); - -/*! - Creates a task that is already completed with the given result. - @param result The result for the task. - */ -+ (instancetype)taskWithResult:(nullable ResultType)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 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:(nullable 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:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once there is at least one successful task. - The first task to successuly complete will set the result, all other tasks results are - ignored. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAnyTask:(nullable 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). - */ -+ (BFTask *)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). - */ -+ (BFTask *)taskWithDelay:(int)millis cancellationToken:(nullable 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:(nullable id (^)(void))block; - -// Properties that will be set on the task once it is completed. - -/*! - The result of a successful task. - */ -@property (nullable, nonatomic, strong, readonly) ResultType result; - -/*! - The error of a failed task. - */ -@property (nullable, nonatomic, strong, readonly) NSError *error; - -/*! - Whether this task has been cancelled. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -/*! - Whether this task has completed due to an error. - */ -@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. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(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. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken NS_SWIFT_NAME(continueWith(block: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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(executor: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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueWith(executor:block:cancellationToken:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(block:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(block:cancellationToken:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or an error. - 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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(executor:block:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(executor:block: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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTaskCompletionSource.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTaskCompletionSource.h deleted file mode 100644 index f94c18fdb5..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFTaskCompletionSource.h +++ /dev/null @@ -1,75 +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 - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask<__covariant ResultType>; - -/*! - 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<__covariant ResultType> : NSObject - -/*! - Creates a new unfinished task. - */ -+ (instancetype)taskCompletionSource; - -/*! - The task associated with this TaskCompletionSource. - */ -@property (nonatomic, strong, readonly) BFTask *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:(nullable ResultType)result NS_SWIFT_NAME(set(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 NS_SWIFT_NAME(set(error:)); - -/*! - 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:(nullable ResultType)result NS_SWIFT_NAME(trySet(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 NS_SWIFT_NAME(trySet(error:)); - -/*! - Sets the cancellation state of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetCancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFURL.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFURL.h deleted file mode 100644 index 924c91d480..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFURL.h +++ /dev/null @@ -1,75 +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 BFAppLink; - -/*! - Provides a set of utilities for working with NSURLs, such as parsing of query parameters - and handling for App Link requests. - */ -@interface BFURL : NSObject - -/*! - Creates a link target from a raw URL. - On success, this posts the BFAppLinkParseEventName measurement event. If you are constructing the BFURL within your application delegate's - application:openURL:sourceApplication:annotation:, you should instead use URLWithInboundURL:sourceApplication: - to support better BFMeasurementEvent notifications - @param url The instance of `NSURL` to create BFURL from. - */ -+ (BFURL *)URLWithURL:(NSURL *)url; - -/*! - Creates a link target from a raw URL received from an external application. This is typically called from the app delegate's - application:openURL:sourceApplication:annotation: and will post the BFAppLinkNavigateInEventName measurement event. - @param url The instance of `NSURL` to create BFURL from. - @param sourceApplication the bundle ID of the app that is requesting your app to open the URL. The same sourceApplication in application:openURL:sourceApplication:annotation: - */ -+ (BFURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; - -/*! - Gets the target URL. If the link is an App Link, this is the target of the App Link. - Otherwise, it is the url that created the target. - */ -@property (nonatomic, strong, readonly) NSURL *targetURL; - -/*! - Gets the query parameters for the target, parsed into an NSDictionary. - */ -@property (nonatomic, strong, readonly) NSDictionary *targetQueryParameters; - -/*! - If this link target is an App Link, this is the data found in al_applink_data. - Otherwise, it is nil. - */ -@property (nonatomic, strong, readonly) NSDictionary *appLinkData; - -/*! - If this link target is an App Link, this is the data found in extras. - */ -@property (nonatomic, strong, readonly) NSDictionary *appLinkExtras; - -/*! - The App Link indicating how to navigate back to the referer app, if any. - */ -@property (nonatomic, strong, readonly) BFAppLink *appLinkReferer; - -/*! - The URL that was used to create this BFURL. - */ -@property (nonatomic, strong, readonly) NSURL *inputURL; - -/*! - The query parameters of the inputURL, parsed into an NSDictionary. - */ -@property (nonatomic, strong, readonly) NSDictionary *inputQueryParameters; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFWebViewAppLinkResolver.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFWebViewAppLinkResolver.h deleted file mode 100644 index 3782ae2cb9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/BFWebViewAppLinkResolver.h +++ /dev/null @@ -1,26 +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 reference implementation for an App Link resolver that uses a hidden UIWebView - to parse the HTML containing App Link metadata. - */ -@interface BFWebViewAppLinkResolver : NSObject - -/*! - Gets the instance of a BFWebViewAppLinkResolver. - */ -+ (instancetype)sharedInstance; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/Bolts.h b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/Bolts.h deleted file mode 100644 index a3f2bd6f29..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Headers/Bolts.h +++ /dev/null @@ -1,39 +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 - -#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#endif - - -NS_ASSUME_NONNULL_BEGIN - -/** - A string containing the version of the Bolts Framework used by the current application. - */ -extern NSString *const BoltsFrameworkVersionString; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Info.plist deleted file mode 100644 index af7756dacc..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Modules/module.modulemap deleted file mode 100644 index 3c92a170fd..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Bolts.framework/Modules/module.modulemap +++ /dev/null @@ -1,15 +0,0 @@ -framework module Bolts { - umbrella header "Bolts.h" - - export * - module * { export * } - - explicit module BFAppLinkResolving { - header "BFAppLinkResolving.h" - export * - } - explicit module BFWebViewAppLinkResolver { - header "BFWebViewAppLinkResolver.h" - export * - } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/CoreActionSheetPicker b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/CoreActionSheetPicker deleted file mode 100755 index 21ce1845d9..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/CoreActionSheetPicker and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/AbstractActionSheetPicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/AbstractActionSheetPicker.h deleted file mode 100755 index bd03ae9eed..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/AbstractActionSheetPicker.h +++ /dev/null @@ -1,126 +0,0 @@ -// -//Copyright (c) 2011, Tim Cinel -//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 of the 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 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. -// - -#import -#import - -@class SWActionSheet; - -#define SuppressPerformSelectorLeakWarning(Stuff) \ -do { \ -_Pragma("clang diagnostic push") \ -_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \ -Stuff; \ -_Pragma("clang diagnostic pop") \ -} while (0) - -typedef NS_ENUM(NSInteger, ActionType) { - ActionTypeValue, - ActionTypeSelector, - ActionTypeBlock -}; - -typedef NS_ENUM(NSInteger, TapAction) { - TapActionNone, - TapActionSuccess, - TapActionCancel -}; - -typedef void (^ActionBlock)(void); - -static NSString *const kButtonValue = @"buttonValue"; - -static NSString *const kButtonTitle = @"buttonTitle"; - -static NSString *const kActionType = @"buttonAction"; - -static NSString *const kActionTarget = @"buttonActionTarget"; - -@interface AbstractActionSheetPicker : NSObject -@property(nonatomic, strong) SWActionSheet *actionSheet; -@property (nonatomic) UIWindowLevel windowLevel; -@property(nonatomic, assign) NSInteger tag; -@property(nonatomic, assign) int borderWidth; -@property(nonatomic, strong) UIToolbar *toolbar; -@property(nonatomic, copy) NSString *title; -@property(nonatomic, strong) UIView *pickerView; -@property(nonatomic, readonly) CGSize viewSize; -@property(nonatomic, strong) NSMutableArray *customButtons; -@property(nonatomic, assign) BOOL hideCancel; // show or hide cancel button. -@property(nonatomic, assign) CGRect presentFromRect; -@property(nonatomic) NSDictionary *titleTextAttributes; // default is nil. Used to specify Title Label attributes. -@property(nonatomic) NSAttributedString *attributedTitle; // default is nil. If titleTextAttributes not nil this value ignored. -@property(nonatomic) NSMutableDictionary *pickerTextAttributes; // default with a NSMutableParagraphStyle to set label align center. Used to specify Picker Label attributes. -@property(nonatomic) UIColor *pickerBackgroundColor; -@property(nonatomic) UIColor *toolbarBackgroundColor; -@property(nonatomic, strong) UIColor *toolbarButtonsColor; -@property(nonatomic) NSNumber *pickerBlurRadius; -@property(nonatomic, retain) Class popoverBackgroundViewClass; //allow popover customization on iPad -@property(nonatomic) UIInterfaceOrientationMask supportedInterfaceOrientations; // You can set your own supportedInterfaceOrientations value to prevent dismissing picker in some special cases. -@property(nonatomic) TapAction tapDismissAction; // Specify, which action should be fired in case of tapping outside of the picker (on top darkened side). Default is TapActionNone. -@property(nonatomic) BOOL popoverDisabled; // Disable popover behavior on iPad - - -- (void)setTextColor:(UIColor *)textColor; - -// For subclasses. -- (instancetype)initWithTarget:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; - -// Present the ActionSheetPicker -- (void)showActionSheetPicker; - -// For subclasses. This is used to send a message to the target upon a successful selection and dismissal of the picker (i.e. not canceled). -- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)successAction origin:(id)origin; - -// For subclasses. This is an optional message upon cancelation of the picker. -- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin; - -// For subclasses. This returns a configured picker view. Subclasses should autorelease. -- (UIView *)configuredPickerView; - -// Adds custom buttons to the left of the UIToolbar that select specified values -- (void)addCustomButtonWithTitle:(NSString *)title value:(id)value; - -// Adds custom buttons to the left of the UIToolbar that implement specified block -- (void)addCustomButtonWithTitle:(NSString *)title actionBlock:(ActionBlock)block; - -// Adds custom buttons to the left of the UIToolbar that implement specified selector -- (void)addCustomButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector; - -//For subclasses. This responds to a custom button being pressed. -- (IBAction)customButtonPressed:(id)sender; - -// Allow the user to specify a custom cancel button -- (void)setCancelButton:(UIBarButtonItem *)button; - -// Allow the user to specify a custom done button -- (void)setDoneButton:(UIBarButtonItem *)button; - -// Hide picker programmatically -- (void)hidePickerWithCancelAction; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPicker.h deleted file mode 100644 index 9b177f363b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPicker.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// ActionSheetPicker.h -// ActionSheetPicker -// -// Created by on 13/03/2012. -// Copyright (c) 2012 Club 15CC. All rights reserved. -// -#import -#import "AbstractActionSheetPicker.h" -#import "ActionSheetCustomPickerDelegate.h" - -@interface ActionSheetCustomPicker : AbstractActionSheetPicker -{ -} - -///////////////////////////////////////////////////////////////////////// -#pragma mark - Properties -///////////////////////////////////////////////////////////////////////// -@property(nonatomic, strong) id delegate; - - -///////////////////////////////////////////////////////////////////////// -#pragma mark - Init Methods -///////////////////////////////////////////////////////////////////////// - -/** Designated init */ -- (instancetype)initWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin; - -- (instancetype)initWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin initialSelections:(NSArray *)initialSelections; - -/** Convenience class method for creating an launched */ -+ (instancetype)showPickerWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin; - -+ (instancetype)showPickerWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin initialSelections:(NSArray *)initialSelections; - - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPickerDelegate.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPickerDelegate.h deleted file mode 100644 index bb257cd0c6..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetCustomPickerDelegate.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// ActionSheetPickerDelegate.h -// ActionSheetPicker -// -// Created by on 13/03/2012. -// Copyright (c) 2012 Club 15CC. All rights reserved. -// - -#import -#import "AbstractActionSheetPicker.h" - -@protocol ActionSheetCustomPickerDelegate - -@optional - -/** - Allow the delegate to override default settings for the picker - - Allows for instance, ability to set separate delegates and data sources as well as GUI settings on the UIPickerView - If not defined and explicily overridden then this class will be the delegate and dataSource. - */ -- (void)configurePickerView:(UIPickerView *)pickerView DEPRECATED_MSG_ATTRIBUTE("use -actionSheetPicker:configurePickerView: instead."); -- (void)actionSheetPicker:(AbstractActionSheetPicker *)actionSheetPicker configurePickerView:(UIPickerView *)pickerView; - -/** - Success callback - - \param actionSheetPicker .pickerView property accesses the picker. Requires a cast to UIView subclass for the picker - \param origin The entity which launched the ActionSheetPicker - */ -- (void)actionSheetPickerDidSucceed:(AbstractActionSheetPicker *)actionSheetPicker origin:(id)origin; - -/** Cancel callback. See actionSheetPickerDidSuccess:origin: */ -- (void)actionSheetPickerDidCancel:(AbstractActionSheetPicker *)actionSheetPicker origin:(id)origin; - - -@required - -@end \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDatePicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDatePicker.h deleted file mode 100755 index d64a69a2e4..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDatePicker.h +++ /dev/null @@ -1,95 +0,0 @@ -// -//Copyright (c) 2011, Tim Cinel -//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 of the 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 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. -// - -#import "AbstractActionSheetPicker.h" - -@class ActionSheetDatePicker; - -typedef void(^ActionDateDoneBlock)(ActionSheetDatePicker *picker, id selectedDate, id origin); //selectedDate is NSDate or NSNumber for "UIDatePickerModeCountDownTimer" -typedef void(^ActionDateCancelBlock)(ActionSheetDatePicker *picker); - -@interface ActionSheetDatePicker : AbstractActionSheetPicker - -@property (nonatomic, retain) NSDate *minimumDate; // specify min/max date range. default is nil. When min > max, the values are ignored. Ignored in countdown timer mode -@property (nonatomic, retain) NSDate *maximumDate; // default is nil - -@property (nonatomic) NSInteger minuteInterval; // display minutes wheel with interval. interval must be evenly divided into 60. default is 1. min is 1, max is 30 - -@property (nonatomic, retain) NSLocale *locale; // default is [NSLocale currentLocale]. setting nil returns to default -@property (nonatomic, copy) NSCalendar *calendar; // default is [NSCalendar currentCalendar]. setting nil returns to default -@property (nonatomic, retain) NSTimeZone *timeZone; // default is nil. use current time zone or time zone from calendar - -@property (nonatomic, assign) NSTimeInterval countDownDuration; // for UIDatePickerModeCountDownTimer, ignored otherwise. default is 0.0. limit is 23:59 (86,399 seconds). value being set is div 60 (drops remaining seconds). - -@property (nonatomic, copy) ActionDateDoneBlock onActionSheetDone; -@property (nonatomic, copy) ActionDateCancelBlock onActionSheetCancel; - -+ (instancetype)showPickerWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin; - -+ (instancetype)showPickerWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; - -+ (instancetype)showPickerWithTitle:(NSString *)title - datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate - minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate - target:(id)target action:(SEL)action origin:(id)origin; - -+ (instancetype)showPickerWithTitle:(NSString *)title - datePickerMode:(UIDatePickerMode)datePickerMode - selectedDate:(NSDate *)selectedDate - doneBlock:(ActionDateDoneBlock)doneBlock - cancelBlock:(ActionDateCancelBlock)cancelBlock - origin:(UIView*)view; - -+ (instancetype)showPickerWithTitle:(NSString *)title - datePickerMode:(UIDatePickerMode)datePickerMode - selectedDate:(NSDate *)selectedDate - minimumDate:(NSDate *)minimumDate - maximumDate:(NSDate *)maximumDate - doneBlock:(ActionDateDoneBlock)doneBlock - cancelBlock:(ActionDateCancelBlock)cancelBlock - origin:(UIView*)view; - - -- (id)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin; - -- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action origin:(id)origin; - -- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; - -- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action cancelAction:(SEL)cancelAction origin:(id)origin; - - -- (instancetype)initWithTitle:(NSString *)title - datePickerMode:(UIDatePickerMode)datePickerMode - selectedDate:(NSDate *)selectedDate - doneBlock:(ActionDateDoneBlock)doneBlock - cancelBlock:(ActionDateCancelBlock)cancelBlock - origin:(UIView*)view; - -- (void)eventForDatePicker:(id)sender; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDistancePicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDistancePicker.h deleted file mode 100644 index f8f74e4ed0..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetDistancePicker.h +++ /dev/null @@ -1,39 +0,0 @@ -// -//Copyright (c) 2011, Tim Cinel -//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 of the 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 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. -// - -#import "AbstractActionSheetPicker.h" -#import "DistancePickerView.h" -@interface ActionSheetDistancePicker : AbstractActionSheetPicker - -+ (instancetype)showPickerWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin; - -- (instancetype)initWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin; - -+ (instancetype)showPickerWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; - -- (instancetype)initWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetLocalePicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetLocalePicker.h deleted file mode 100644 index 0ba50a6bb8..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetLocalePicker.h +++ /dev/null @@ -1,63 +0,0 @@ -// -//Copyright (c) 2011, Tim Cinel -//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 of the 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 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. -// - -#import "AbstractActionSheetPicker.h" - -@class ActionSheetLocalePicker; -typedef void(^ActionLocaleDoneBlock)(ActionSheetLocalePicker *picker, NSTimeZone * selectedValue); -typedef void(^ActionLocaleCancelBlock)(ActionSheetLocalePicker *picker); - -static const float firstColumnWidth = 100.0f; -static const float secondColumnWidth = 160.0f; - -@interface ActionSheetLocalePicker : AbstractActionSheetPicker - -/** - * Create and display an action sheet picker. - * - * @param title Title label for picker - * @param index is used to establish the initially selected row; - * @param target must not be empty. It should respond to "onSuccess" actions. - * @param successAction successAction - * @param cancelActionOrNil cancelAction - * @param origin must not be empty. It can be either an originating container view or a UIBarButtonItem to use with a popover arrow. - * - * @return return instance of picker - */ -+ (instancetype)showPickerWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; - -// Create an action sheet picker, but don't display until a subsequent call to "showActionPicker". Receiver must release the picker when ready. */ -- (instancetype)initWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; - -+ (instancetype)showPickerWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index doneBlock:(ActionLocaleDoneBlock)doneBlock cancelBlock:(ActionLocaleCancelBlock)cancelBlock origin:(id)origin; - -- (instancetype)initWithTitle:(NSString *)title initialSelection:(NSTimeZone *)timeZone doneBlock:(ActionLocaleDoneBlock)doneBlock cancelBlock:(ActionLocaleCancelBlock)cancelBlockOrNil origin:(id)origin; - -@property (nonatomic, copy) ActionLocaleDoneBlock onActionSheetDone; -@property (nonatomic, copy) ActionLocaleCancelBlock onActionSheetCancel; - -@end \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetMultipleStringPicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetMultipleStringPicker.h deleted file mode 100644 index 5145f285da..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetMultipleStringPicker.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// ActionSheetMultipleStringPicker.h -// CoreActionSheetPicker -// -// Created by Alejandro on 21/07/15. -// Copyright (c) 2015 Petr Korolev. 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 of the 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 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. -// - -#import "AbstractActionSheetPicker.h" - -@class ActionSheetMultipleStringPicker; -typedef void(^ActionMultipleStringDoneBlock)(ActionSheetMultipleStringPicker *picker, NSArray *selectedIndexes, id selectedValues); -typedef void(^ActionMultipleStringCancelBlock)(ActionSheetMultipleStringPicker *picker); - -@interface ActionSheetMultipleStringPicker : AbstractActionSheetPicker -/** - * Create and display an action sheet picker. - * - * @param title Title label for picker - * @param data is an array of strings to use for the picker's available selection choices - * @param indexes is used to establish the initially selected row; - * @param target must not be empty. It should respond to "onSuccess" actions. - * @param successAction successAction - * @param cancelActionOrNil cancelAction - * @param origin must not be empty. It can be either an originating container view or a UIBarButtonItem to use with a popover arrow. - * - * @return return instance of picker - */ -+ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSArray *)indexes target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; - -// Create an action sheet picker, but don't display until a subsequent call to "showActionPicker". Receiver must release the picker when ready. */ -- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSArray *)indexes target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; - - - -+ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSArray *)indexes doneBlock:(ActionMultipleStringDoneBlock)doneBlock cancelBlock:(ActionMultipleStringCancelBlock)cancelBlock origin:(id)origin; - -- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSArray *)indexes doneBlock:(ActionMultipleStringDoneBlock)doneBlock cancelBlock:(ActionMultipleStringCancelBlock)cancelBlockOrNil origin:(id)origin; - -@property (nonatomic, copy) ActionMultipleStringDoneBlock onActionSheetDone; -@property (nonatomic, copy) ActionMultipleStringCancelBlock onActionSheetCancel; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetPicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetPicker.h deleted file mode 100644 index 69c67ee7ec..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetPicker.h +++ /dev/null @@ -1,35 +0,0 @@ -// -//Copyright (c) 2011, Tim Cinel -//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 of the 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 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. -// - -#import "ActionSheetCustomPickerDelegate.h" -#import "AbstractActionSheetPicker.h" -#import "ActionSheetCustomPicker.h" -#import "ActionSheetDatePicker.h" -#import "ActionSheetDistancePicker.h" -#import "ActionSheetLocalePicker.h" -#import "ActionSheetStringPicker.h" -#import "ActionSheetMultipleStringPicker.h" \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetStringPicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetStringPicker.h deleted file mode 100644 index 7ba0c842c2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/ActionSheetStringPicker.h +++ /dev/null @@ -1,62 +0,0 @@ -// -//Copyright (c) 2011, Tim Cinel -//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 of the 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 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. -// - -#import "AbstractActionSheetPicker.h" - -@class ActionSheetStringPicker; -typedef void(^ActionStringDoneBlock)(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue); -typedef void(^ActionStringCancelBlock)(ActionSheetStringPicker *picker); - -@interface ActionSheetStringPicker : AbstractActionSheetPicker -/** - * Create and display an action sheet picker. - * - * @param title Title label for picker - * @param data is an array of strings to use for the picker's available selection choices - * @param index is used to establish the initially selected row; - * @param target must not be empty. It should respond to "onSuccess" actions. - * @param successAction successAction - * @param cancelActionOrNil cancelAction - * @param origin must not be empty. It can be either an originating container view or a UIBarButtonItem to use with a popover arrow. - * - * @return return instance of picker - */ -+ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSInteger)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; - - // Create an action sheet picker, but don't display until a subsequent call to "showActionPicker". Receiver must release the picker when ready. */ -- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSInteger)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; - - - -+ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSInteger)index doneBlock:(ActionStringDoneBlock)doneBlock cancelBlock:(ActionStringCancelBlock)cancelBlock origin:(id)origin; - -- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSInteger)index doneBlock:(ActionStringDoneBlock)doneBlock cancelBlock:(ActionStringCancelBlock)cancelBlockOrNil origin:(id)origin; - -@property (nonatomic, copy) ActionStringDoneBlock onActionSheetDone; -@property (nonatomic, copy) ActionStringCancelBlock onActionSheetCancel; - -@end \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/CoreActionSheetPicker.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/CoreActionSheetPicker.h deleted file mode 100644 index c333d53b2b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/CoreActionSheetPicker.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// CoreActionSheetPicker.h -// CoreActionSheetPicker -// -// Created by Petr Korolev on 17/04/15. -// Copyright (c) 2015 Petr Korolev. All rights reserved. -// - -#import - -//! Project version number for CoreActionSheetPicker. -FOUNDATION_EXPORT double CoreActionSheetPickerVersionNumber; - -//! Project version string for CoreActionSheetPicker. -FOUNDATION_EXPORT const unsigned char CoreActionSheetPickerVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - -#import -#import -#import -#import -#import -#import -#import -#import -#import \ No newline at end of file diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/DistancePickerView.h b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/DistancePickerView.h deleted file mode 100644 index c6921b135a..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Headers/DistancePickerView.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DistancePickerView.h -// -// Created by Evan on 12/27/10. -// Copyright 2010 NCPTT. All rights reserved. -// -// Adapted from LabeledPickerView by Kåre Morstøl (NotTooBad Software). -// This file only Copyright (c) 2009 Kåre Morstøl (NotTooBad Software). -// This file only under the Eclipse public license v1.0 -// http://www.eclipse.org/legal/epl-v10.html - -#import - - -@interface DistancePickerView : UIPickerView { - NSMutableDictionary *labels; -} - -- (void) addLabel:(NSString *)labeltext forComponent:(NSUInteger)component forLongestString:(NSString *)longestString; -- (void) updateLabel:(NSString *)labeltext forComponent:(NSUInteger)component; -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Info.plist deleted file mode 100644 index 55a2a089a4..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Modules/module.modulemap deleted file mode 100644 index 0af50b8b63..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module CoreActionSheetPicker { - umbrella header "CoreActionSheetPicker.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/FBSDKCoreKit b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/FBSDKCoreKit deleted file mode 100755 index 465a4172dc..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/FBSDKCoreKit and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAccessToken.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAccessToken.h deleted file mode 100644 index 7bf9088316..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAccessToken.h +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Notification indicating that the `currentAccessToken` has changed. - - the userInfo dictionary of the notification will contain keys - `FBSDKAccessTokenChangeOldKey` and - `FBSDKAccessTokenChangeNewKey`. - */ -FBSDK_EXTERN NSString *const FBSDKAccessTokenDidChangeNotification; - -/** - A key in the notification's userInfo that will be set - if and only if the user ID changed between the old and new tokens. - - Token refreshes can occur automatically with the SDK - which do not change the user. If you're only interested in user - changes (such as logging out), you should check for the existence - of this key. The value is a NSNumber with a boolValue. - - On a fresh start of the app where the SDK reads in the cached value - of an access token, this key will also exist since the access token - is moving from a null state (no user) to a non-null state (user). - */ -FBSDK_EXTERN NSString *const FBSDKAccessTokenDidChangeUserID; - -/* - key in notification's userInfo object for getting the old token. - - If there was no old token, the key will not be present. - */ -FBSDK_EXTERN NSString *const FBSDKAccessTokenChangeOldKey; - -/* - key in notification's userInfo object for getting the new token. - - If there is no new token, the key will not be present. - */ -FBSDK_EXTERN NSString *const FBSDKAccessTokenChangeNewKey; - -/* - A key in the notification's userInfo that will be set - if and only if the token has expired. - */ -FBSDK_EXTERN NSString *const FBSDKAccessTokenDidExpire; - - -/** - Represents an immutable access token for using Facebook services. - */ -@interface FBSDKAccessToken : NSObject - -/** - Returns the app ID. - */ -@property (readonly, copy, nonatomic) NSString *appID; - -/** - Returns the known declined permissions. - */ -@property (readonly, copy, nonatomic) NSSet *declinedPermissions; - -/** - Returns the expiration date. - */ -@property (readonly, copy, nonatomic) NSDate *expirationDate; - -/** - Returns the known granted permissions. - */ -@property (readonly, copy, nonatomic) NSSet *permissions; - -/** - Returns the date the token was last refreshed. -*/ -@property (readonly, copy, nonatomic) NSDate *refreshDate; - -/** - Returns the opaque token string. - */ -@property (readonly, copy, nonatomic) NSString *tokenString; - -/** - Returns the user ID. - */ -@property (readonly, copy, nonatomic) NSString *userID; - -/** - Returns whether the access token is expired by checking its expirationDate property - */ -@property (readonly, assign, nonatomic, getter = isExpired) BOOL expired; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Initializes a new instance. - @param tokenString the opaque token string. - @param permissions the granted permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param declinedPermissions the declined permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param appID the app ID. - @param userID the user ID. - @param expirationDate the optional expiration date (defaults to distantFuture). - @param refreshDate the optional date the token was last refreshed (defaults to today). - - This initializer should only be used for advanced apps that - manage tokens explicitly. Typical login flows only need to use `FBSDKLoginManager` - along with `+currentAccessToken`. - */ -- (instancetype)initWithTokenString:(NSString *)tokenString - permissions:(NSArray *)permissions - declinedPermissions:(NSArray *)declinedPermissions - appID:(NSString *)appID - userID:(NSString *)userID - expirationDate:(NSDate *)expirationDate - refreshDate:(NSDate *)refreshDate -NS_DESIGNATED_INITIALIZER; - -/** - Convenience getter to determine if a permission has been granted - @param permission The permission to check. - */ -- (BOOL)hasGranted:(NSString *)permission; - -/** - Compares the receiver to another FBSDKAccessToken - @param token The other token - @return YES if the receiver's values are equal to the other token's values; otherwise NO - */ -- (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token; - -/** - Returns the "global" access token that represents the currently logged in user. - - The `currentAccessToken` is a convenient representation of the token of the - current user and is used by other SDK components (like `FBSDKLoginManager`). - */ -+ (FBSDKAccessToken *)currentAccessToken; - -/** - Returns YES if currentAccessToken is not nil AND currentAccessToken is not expired - - */ -+ (BOOL)currentAccessTokenIsActive; - -/** - Sets the "global" access token that represents the currently logged in user. - @param token The access token to set. - - This will broadcast a notification and save the token to the app keychain. - */ -+ (void)setCurrentAccessToken:(FBSDKAccessToken *)token; - -/** - Refresh the current access token's permission state and extend the token's expiration date, - if possible. - @param completionHandler an optional callback handler that can surface any errors related to permission refreshing. - - On a successful refresh, the currentAccessToken will be updated so you typically only need to - observe the `FBSDKAccessTokenDidChangeNotification` notification. - - If a token is already expired, it cannot be refreshed. - */ -+ (void)refreshCurrentAccessToken:(FBSDKGraphRequestHandler)completionHandler; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppEvents.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppEvents.h deleted file mode 100644 index 69b844b759..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppEvents.h +++ /dev/null @@ -1,694 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright notice shall be -// included in all copies or substantial portions of the software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -#import - -#if !TARGET_OS_TV -#import -#endif - -#import - -#import "FBSDKMacros.h" - -@class FBSDKAccessToken; -@class FBSDKGraphRequest; - -/** NSNotificationCenter name indicating a result of a failed log flush attempt. The posted object will be an NSError instance. */ -FBSDK_EXTERN NSString *const FBSDKAppEventsLoggingResultNotification; - -/** optional plist key ("FacebookLoggingOverrideAppID") for setting `loggingOverrideAppID` */ -FBSDK_EXTERN NSString *const FBSDKAppEventsOverrideAppIDBundleKey; - -/** - - NS_ENUM (NSUInteger, FBSDKAppEventsFlushBehavior) - - Specifies when `FBSDKAppEvents` sends log events to the server. - - */ -typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushBehavior) -{ - - /** Flush automatically: periodically (once a minute or every 100 logged events) and always at app reactivation. */ - FBSDKAppEventsFlushBehaviorAuto = 0, - - /** Only flush when the `flush` method is called. When an app is moved to background/terminated, the - events are persisted and re-established at activation, but they will only be written with an - explicit call to `flush`. */ - FBSDKAppEventsFlushBehaviorExplicitOnly, - -}; - -/** - NS_ENUM(NSUInteger, FBSDKProductAvailability) - Specifies product availability for Product Catalog product item update - */ -typedef NS_ENUM(NSUInteger, FBSDKProductAvailability) -{ - /** - * Item ships immediately - */ - FBSDKProductAvailabilityInStock = 0, - /** - * No plan to restock - */ - FBSDKProductAvailabilityOutOfStock, - /** - * Available in future - */ - FBSDKProductAvailabilityPreOrder, - /** - * Ships in 1-2 weeks - */ - FBSDKProductAvailabilityAvailableForOrder, - /** - * Discontinued - */ - FBSDKProductAvailabilityDiscontinued, -}; - -/** - NS_ENUM(NSUInteger, FBSDKProductCondition) - Specifies product condition for Product Catalog product item update - */ -typedef NS_ENUM(NSUInteger, FBSDKProductCondition) -{ - FBSDKProductConditionNew = 0, - FBSDKProductConditionRefurbished, - FBSDKProductConditionUsed, -}; - -/** - @methodgroup Predefined event names for logging events common to many apps. Logging occurs through the `logEvent` family of methods on `FBSDKAppEvents`. - Common event parameters are provided in the `FBSDKAppEventsParameterNames*` constants. - */ - -/** Log this event when the user has achieved a level in the app. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameAchievedLevel; - -/** Log this event when the user has entered their payment info. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameAddedPaymentInfo; - -/** Log this event when the user has added an item to their cart. The valueToSum passed to logEvent should be the item's price. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameAddedToCart; - -/** Log this event when the user has added an item to their wishlist. The valueToSum passed to logEvent should be the item's price. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameAddedToWishlist; - -/** Log this event when a user has completed registration with the app. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameCompletedRegistration; - -/** Log this event when the user has completed a tutorial in the app. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameCompletedTutorial; - -/** Log this event when the user has entered the checkout process. The valueToSum passed to logEvent should be the total price in the cart. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameInitiatedCheckout; - -/** Log this event when the user has rated an item in the app. The valueToSum passed to logEvent should be the numeric rating. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameRated; - -/** Log this event when a user has performed a search within the app. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameSearched; - -/** Log this event when the user has spent app credits. The valueToSum passed to logEvent should be the number of credits spent. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameSpentCredits; - -/** Log this event when the user has unlocked an achievement in the app. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameUnlockedAchievement; - -/** Log this event when a user has viewed a form of content in the app. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameViewedContent; - -/** A telephone/SMS, email, chat or other type of contact between a customer and your business. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameContact; - -/** The customization of products through a configuration tool or other application your business owns. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameCustomizeProduct; - -/** The donation of funds to your organization or cause. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameDonate; - -/** When a person finds one of your locations via web or application, with an intention to visit (example: find product at a local store). */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameFindLocation; - -/** The booking of an appointment to visit one of your locations. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameSchedule; - -/** The start of a free trial of a product or service you offer (example: trial subscription). */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameStartTrial; - -/** The submission of an application for a product, service or program you offer (example: credit card, educational program or job).. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameSubmitApplication; - -/** The start of a paid subscription for a product or service you offer. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameSubscribe; - -/** Log this event when the user views an ad. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameAdImpression; - -/** Log this event when the user clicks an ad. */ -FBSDK_EXTERN NSString *const FBSDKAppEventNameAdClick; - -/** - @methodgroup Predefined event name parameters for common additional information to accompany events logged through the `logEvent` family - of methods on `FBSDKAppEvents`. Common event names are provided in the `FBAppEventName*` constants. - */ - - /** - * Parameter key used to specify data for the one or more pieces of content being logged about. - * Data should be a JSON encoded string. - * Example: - * "[{\"id\": \"1234\", \"quantity\": 2, \"item_price\": 5.99}, {\"id\": \"5678\", \"quantity\": 1, \"item_price\": 9.99}]" - */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameContent; - -/** Parameter key used to specify an ID for the specific piece of content being logged about. Could be an EAN, article identifier, etc., depending on the nature of the app. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameContentID; - -/** Parameter key used to specify a generic content type/family for the logged event, e.g. "music", "photo", "video". Options to use will vary based upon what the app is all about. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameContentType; - -/** Parameter key used to specify currency used with logged event. E.g. "USD", "EUR", "GBP". See ISO-4217 for specific values. One reference for these is . */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameCurrency; - -/** Parameter key used to specify a description appropriate to the event being logged. E.g., the name of the achievement unlocked in the `FBAppEventNameAchievementUnlocked` event. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameDescription; - -/** Parameter key used to specify the level achieved in a `FBAppEventNameAchieved` event. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameLevel; - -/** Parameter key used to specify the maximum rating available for the `FBAppEventNameRate` event. E.g., "5" or "10". */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameMaxRatingValue; - -/** Parameter key used to specify how many items are being processed for an `FBAppEventNameInitiatedCheckout` or `FBAppEventNamePurchased` event. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameNumItems; - -/** Parameter key used to specify whether payment info is available for the `FBAppEventNameInitiatedCheckout` event. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNamePaymentInfoAvailable; - -/** Parameter key used to specify method user has used to register for the app, e.g., "Facebook", "email", "Twitter", etc */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameRegistrationMethod; - -/** Parameter key used to specify the string provided by the user for a search operation. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameSearchString; - -/** Parameter key used to specify whether the activity being logged about was successful or not. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameSuccess; - -/* - @methodgroup Predefined values to assign to event parameters that accompany events logged through the `logEvent` family - of methods on `FBSDKAppEvents`. Common event parameters are provided in the `FBSDKAppEventParameterName*` constants. - */ - -/** Yes-valued parameter value to be used with parameter keys that need a Yes/No value */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterValueYes; - -/** No-valued parameter value to be used with parameter keys that need a Yes/No value */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterValueNo; - -/** Parameter key used to specify the type of ad in an FBSDKAppEventNameAdImpression - * or FBSDKAppEventNameAdClick event. - * E.g. "banner", "interstitial", "rewarded_video", "native" */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameAdType; - -/** Parameter key used to specify the unique ID for all events within a subscription - * in an FBSDKAppEventNameSubscribe or FBSDKAppEventNameStartTrial event. */ -FBSDK_EXTERN NSString *const FBSDKAppEventParameterNameOrderID; - -/** - - - Client-side event logging for specialized application analytics available through Facebook App Insights - and for use with Facebook Ads conversion tracking and optimization. - - - - The `FBSDKAppEvents` static class has a few related roles: - - + Logging predefined and application-defined events to Facebook App Insights with a - numeric value to sum across a large number of events, and an optional set of key/value - parameters that define "segments" for this event (e.g., 'purchaserStatus' : 'frequent', or - 'gamerLevel' : 'intermediate') - - + Logging events to later be used for ads optimization around lifetime value. - - + Methods that control the way in which events are flushed out to the Facebook servers. - - Here are some important characteristics of the logging mechanism provided by `FBSDKAppEvents`: - - + Events are not sent immediately when logged. They're cached and flushed out to the Facebook servers - in a number of situations: - - when an event count threshold is passed (currently 100 logged events). - - when a time threshold is passed (currently 15 seconds). - - when an app has gone to background and is then brought back to the foreground. - - + Events will be accumulated when the app is in a disconnected state, and sent when the connection is - restored and one of the above 'flush' conditions are met. - - + The `FBSDKAppEvents` class is thread-safe in that events may be logged from any of the app's threads. - - + The developer can set the `flushBehavior` on `FBSDKAppEvents` to force the flushing of events to only - occur on an explicit call to the `flush` method. - - + The developer can turn on console debug output for event logging and flushing to the server by using - the `FBSDKLoggingBehaviorAppEvents` value in `[FBSettings setLoggingBehavior:]`. - - Some things to note when logging events: - - + There is a limit on the number of unique event names an app can use, on the order of 1000. - + There is a limit to the number of unique parameter names in the provided parameters that can - be used per event, on the order of 25. This is not just for an individual call, but for all - invocations for that eventName. - + Event names and parameter names (the keys in the NSDictionary) must be between 2 and 40 characters, and - must consist of alphanumeric characters, _, -, or spaces. - + The length of each parameter value can be no more than on the order of 100 characters. - - */ -@interface FBSDKAppEvents : NSObject - -/* - * Basic event logging - */ - -/** - - Log an event with just an eventName. - - @param eventName The name of the event to record. Limitations on number of events and name length - are given in the `FBSDKAppEvents` documentation. - - */ -+ (void)logEvent:(NSString *)eventName; - -/** - - Log an event with an eventName and a numeric value to be aggregated with other events of this name. - - @param eventName The name of the event to record. Limitations on number of events and name length - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report - the cumulative and average value of this amount. - */ -+ (void)logEvent:(NSString *)eventName - valueToSum:(double)valueToSum; - - -/** - - Log an event with an eventName and a set of key/value pairs in the parameters dictionary. - Parameter limitations are described above. - - @param eventName The name of the event to record. Limitations on number of events and name construction - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - */ -+ (void)logEvent:(NSString *)eventName - parameters:(NSDictionary *)parameters; - -/** - - Log an event with an eventName, a numeric value to be aggregated with other events of this name, - and a set of key/value pairs in the parameters dictionary. - - @param eventName The name of the event to record. Limitations on number of events and name construction - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report - the cumulative and average value of this amount. - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - */ -+ (void)logEvent:(NSString *)eventName - valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters; - - -/** - - Log an event with an eventName, a numeric value to be aggregated with other events of this name, - and a set of key/value pairs in the parameters dictionary. Providing session lets the developer - target a particular . If nil is provided, then `[FBSession activeSession]` will be used. - - @param eventName The name of the event to record. Limitations on number of events and name construction - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report - the cumulative and average value of this amount. Note that this is an NSNumber, and a value of `nil` denotes - that this event doesn't have a value associated with it for summation. - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - @param accessToken The optional access token to log the event as. - */ -+ (void)logEvent:(NSString *)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken; - -/* - * Purchase logging - */ - -/** - - Log a purchase of the specified amount, in the specified currency. - - @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency. This value - will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). - - @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for - specific values. One reference for these is . - - - This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set - to `FBSDKAppEventsFlushBehaviorExplicitOnly`. - - */ -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency; - -/** - - Log a purchase of the specified amount, in the specified currency, also providing a set of - additional characteristics describing the purchase. - - @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value - will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). - - @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for - specific values. One reference for these is . - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - - This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set - to `FBSDKAppEventsFlushBehaviorExplicitOnly`. - - */ -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency - parameters:(NSDictionary *)parameters; - -/** - - Log a purchase of the specified amount, in the specified currency, also providing a set of - additional characteristics describing the purchase, as well as an to log to. - - @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value - will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). - - @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for - specific values. One reference for these is . - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - @param accessToken The optional access token to log the event as. - - - This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set - to `FBSDKAppEventsFlushBehaviorExplicitOnly`. - - */ -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken; - - -/* - * Push Notifications Logging - */ - -/** - Log an app event that tracks that the application was open via Push Notification. - - @param payload Notification payload received via `UIApplicationDelegate`. - */ -+ (void)logPushNotificationOpen:(NSDictionary *)payload; - -/** - Log an app event that tracks that a custom action was taken from a push notification. - - @param payload Notification payload received via `UIApplicationDelegate`. - @param action Name of the action that was taken. - */ -+ (void)logPushNotificationOpen:(NSDictionary *)payload action:(NSString *)action; - -/** - Uploads product catalog product item as an app event - @param itemID Unique ID for the item. Can be a variant for a product. - Max size is 100. - @param availability If item is in stock. Accepted values are: - in stock - Item ships immediately - out of stock - No plan to restock - preorder - Available in future - available for order - Ships in 1-2 weeks - discontinued - Discontinued - @param condition Product condition: new, refurbished or used. - @param description Short text describing product. Max size is 5000. - @param imageLink Link to item image used in ad. - @param link Link to merchant's site where someone can buy the item. - @param title Title of item. - @param priceAmount Amount of purchase, in the currency specified by the 'currency' - parameter. This value will be rounded to the thousandths place - (e.g., 12.34567 becomes 12.346). - @param currency Currency used to specify the amount. - E.g. "USD", "EUR", "GBP". See ISO-4217 for specific values. One reference for these is - @param gtin Global Trade Item Number including UPC, EAN, JAN and ISBN - @param mpn Unique manufacture ID for product - @param brand Name of the brand - Note: Either gtin, mpn or brand is required. - @param parameters Optional fields for deep link specification. - */ -+ (void)logProductItem:(NSString *)itemID - availability:(FBSDKProductAvailability)availability - condition:(FBSDKProductCondition)condition - description:(NSString *)description - imageLink:(NSString *)imageLink - link:(NSString *)link - title:(NSString *)title - priceAmount:(double)priceAmount - currency:(NSString *)currency - gtin:(NSString *)gtin - mpn:(NSString *)mpn - brand:(NSString *)brand - parameters:(NSDictionary *)parameters; - -/** - - Notifies the events system that the app has launched and, when appropriate, logs an "activated app" event. - This function is called automatically from FBSDKApplicationDelegate applicationDidBecomeActive, unless - one overrides 'FacebookAutoLogAppEventsEnabled' key to false in the project info plist file. - In case 'FacebookAutoLogAppEventsEnabled' is set to false, then it should typically be placed in the - app delegates' `applicationDidBecomeActive:` method. - - This method also takes care of logging the event indicating the first time this app has been launched, which, among other things, is used to - track user acquisition and app install ads conversions. - - - - `activateApp` will not log an event on every app launch, since launches happen every time the app is backgrounded and then foregrounded. - "activated app" events will be logged when the app has not been active for more than 60 seconds. This method also causes a "deactivated app" - event to be logged when sessions are "completed", and these events are logged with the session length, with an indication of how much - time has elapsed between sessions, and with the number of background/foreground interruptions that session had. This data - is all visible in your app's App Events Insights. - */ -+ (void)activateApp; - -/* - * Push Notifications Registration - */ - -/** - Sets and sends device token to register the current application for push notifications. - - - - Sets and sends a device token from `NSData` representation that you get from `UIApplicationDelegate.-application:didRegisterForRemoteNotificationsWithDeviceToken:`. - - @param deviceToken Device token data. - */ -+ (void)setPushNotificationsDeviceToken:(NSData *)deviceToken; - -/* - * Control over event batching/flushing - */ - -/** - - Get the current event flushing behavior specifying when events are sent back to Facebook servers. - */ -+ (FBSDKAppEventsFlushBehavior)flushBehavior; - -/** - - Set the current event flushing behavior specifying when events are sent back to Facebook servers. - - @param flushBehavior The desired `FBSDKAppEventsFlushBehavior` to be used. - */ -+ (void)setFlushBehavior:(FBSDKAppEventsFlushBehavior)flushBehavior; - -/** - Set the 'override' App ID for App Event logging. - - - - In some cases, apps want to use one Facebook App ID for login and social presence and another - for App Event logging. (An example is if multiple apps from the same company share an app ID for login, but - want distinct logging.) By default, this value is `nil`, and defers to the `FBSDKAppEventsOverrideAppIDBundleKey` - plist value. If that's not set, it defaults to `[FBSDKSettings appID]`. - - This should be set before any other calls are made to `FBSDKAppEvents`. Thus, you should set it in your application - delegate's `application:didFinishLaunchingWithOptions:` delegate. - - @param appID The Facebook App ID to be used for App Event logging. - */ -+ (void)setLoggingOverrideAppID:(NSString *)appID; - -/** - Get the 'override' App ID for App Event logging. - - -@see setLoggingOverrideAppID: - - */ -+ (NSString *)loggingOverrideAppID; - - -/** - Explicitly kick off flushing of events to Facebook. This is an asynchronous method, but it does initiate an immediate - kick off. Server failures will be reported through the NotificationCenter with notification ID `FBSDKAppEventsLoggingResultNotification`. - */ -+ (void)flush; - -/** - Creates a request representing the Graph API call to retrieve a Custom Audience "third party ID" for the app's Facebook user. - Callers will send this ID back to their own servers, collect up a set to create a Facebook Custom Audience with, - and then use the resultant Custom Audience to target ads. - - @param accessToken The access token to use to establish the user's identity for users logged into Facebook through this app. - If `nil`, then the `[FBSDKAccessToken currentAccessToken]` is used. - - - - The JSON in the request's response will include an "custom_audience_third_party_id" key/value pair, with the value being the ID retrieved. - This ID is an encrypted encoding of the Facebook user's ID and the invoking Facebook app ID. - Multiple calls with the same user will return different IDs, thus these IDs cannot be used to correlate behavior - across devices or applications, and are only meaningful when sent back to Facebook for creating Custom Audiences. - - The ID retrieved represents the Facebook user identified in the following way: if the specified access token is valid, - the ID will represent the user associated with that token; otherwise the ID will represent the user logged into the - native Facebook app on the device. If there is no native Facebook app, no one is logged into it, or the user has opted out - at the iOS level from ad tracking, then a `nil` ID will be returned. - - This method returns `nil` if either the user has opted-out (via iOS) from Ad Tracking, the app itself has limited event usage - via the `[FBSDKSettings limitEventAndDataUsage]` flag, or a specific Facebook user cannot be identified. - */ -+ (FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(FBSDKAccessToken *)accessToken; - -/* - Sets a custom user ID to associate with all app events. - - The userID is persisted until it is cleared by passing nil. - */ -+ (void)setUserID:(NSString *)userID; - -/* - Clears the custom user ID to associate with all app events. - */ -+ (void)clearUserID; - -/* - Returns the set custom user ID. - */ -+ (NSString *)userID; - -/* - Sets custom user data to associate with all app events. All user data are hashed - and used to match Facebook user from this instance of an application. - - The user data will be persisted between application instances. - - @param userData user data to identify the user. User data should be formated as - a NSDictionary of data type name and value. - Supported data types and names are: - Email: em - First Name: fn - Last Name: ln - Phone: ph - Date of Birth: db - Gender: ge - City: ct - State: st - Zip: zp - Country: country - */ -+ (void) setUserData:(NSDictionary*)userData; - -/* - Returns the set user data else nil -*/ -+ (NSString*) getUserData; - -/* - Clears the current user data -*/ -+ (void) clearUserData; - -/* - Sends a request to update the properties for the current user, set by `setUserID:` - - You must call `FBSDKAppEvents setUserID:` before making this call. - @param properties the custom user properties - @param handler the optional completion handler - */ -+ (void)updateUserProperties:(NSDictionary *)properties handler:(FBSDKGraphRequestHandler)handler; - -#if !TARGET_OS_TV -/* - Intended to be used as part of a hybrid webapp. - If you call this method, the FB SDK will inject a new JavaScript object into your webview. - If the FB Pixel is used within the webview, and references the app ID of this app, - then it will detect the presence of this injected JavaScript object - and pass Pixel events back to the FB SDK for logging using the AppEvents framework. - - @param webView The webview to augment with the additional JavaScript behaviour - */ -+ (void)augmentHybridWKWebView:(WKWebView *)webView; -#endif - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h deleted file mode 100644 index eee2f5815b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class BFTask; - -// Check if Bolts.framework is available for import -#if __has_include() -// Import it if it's available -# import -#else -// Otherwise - redeclare BFAppLinkResolving protocol to resolve the problem of missing symbols -// Please note: Bolts.framework is still required for AppLink resolving to work, -// but this allows FBSDKCoreKit to weakly link Bolts.framework as well as this enables clang modulemaps to work. - -/** - Implement this protocol to provide an alternate strategy for resolving - App Links that may include pre-fetching, caching, or querying for App Link - data from an index provided by a service provider. - */ -@protocol BFAppLinkResolving - -/** - Asynchronously resolves App Link data for a given URL. - - @param url The URL to resolve into an App Link. - @return A BFTask that will return a BFAppLink for the given URL. - */ -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url; - -@end - -#endif - -/** - - Provides an implementation of the BFAppLinkResolving protocol that uses the Facebook App Link - Index API to resolve App Links given a URL. It also provides an additional helper method that can resolve - multiple App Links in a single call. - - - - Usage of this type requires a client token. See `[FBSDKSettings setClientToken:]` and linking - Bolts.framework - */ -@interface FBSDKAppLinkResolver : NSObject - -/** - Asynchronously resolves App Link data for multiple URLs. - - @param urls An array of NSURLs to resolve into App Links. - @return A BFTask that will return dictionary mapping input NSURLs to their - corresponding BFAppLink. - - - - You should set the client token before making this call. See `[FBSDKSettings setClientToken:]` - */ -- (BFTask *)appLinksFromURLsInBackground:(NSArray *)urls; - -/** - Allocates and initializes a new instance of FBSDKAppLinkResolver. - */ -+ (instancetype)resolver; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkUtility.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkUtility.h deleted file mode 100644 index c242f290de..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKAppLinkUtility.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Describes the callback for fetchDeferredAppLink. - @param url the url representing the deferred App Link - @param error the error during the request, if any - - - The url may also have a fb_click_time_utc query parameter that - represents when the click occurred that caused the deferred App Link to be created. - */ -typedef void (^FBSDKDeferredAppLinkHandler)(NSURL *url, NSError *error); - - -/** - Describes the callback for fetchOrganicDeferredAppLink. - @param url the url representing the deferred App Link - */ -typedef void (^FBSDKDeferredAppInviteHandler)(NSURL *url); - - -/** - Class containing App Links related utility methods. - */ -@interface FBSDKAppLinkUtility : NSObject - -/** - Call this method from the main thread to fetch deferred applink data if you use Mobile App - Engagement Ads (https://developers.facebook.com/docs/ads-for-apps/mobile-app-ads-engagement). - This may require a network round trip. If successful, the handler is invoked with the link - data (this will only return a valid URL once, and future calls will result in a nil URL - value in the callback). - - @param handler the handler to be invoked if there is deferred App Link data - - - The handler may contain an NSError instance to capture any errors. In the - common case where there simply was no app link data, the NSError instance will be nil. - - This method should only be called from a location that occurs after any launching URL has - been processed (e.g., you should call this method from your application delegate's - applicationDidBecomeActive:). - */ -+ (void)fetchDeferredAppLink:(FBSDKDeferredAppLinkHandler)handler; - -/** - -@warning This method is no longer available and will always return NO. - */ -+ (BOOL)fetchDeferredAppInvite:(FBSDKDeferredAppInviteHandler)handler -__attribute__((deprecated("This method is no longer available.")));; - -/* - Call this method to fetch promotion code from the url, if it's present. This function - requires Bolts framework. - - Note: This throws an exception if Bolts.framework is not linked. Add '[BFURL class]' in intialize method - of your AppDelegate. - - @param url App Link url that was passed to the app. - - @return Promotion code string. - - - Call this method to fetch App Invite Promotion Code from applink if present. - This can be used to fetch the promotion code that was associated with the invite when it - was created. This method should be called with the url from the openURL method. -*/ -+ (NSString*)appInvitePromotionCodeFromURL:(NSURL*)url; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKApplicationDelegate.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKApplicationDelegate.h deleted file mode 100644 index c1eca10f70..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKApplicationDelegate.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 FBSDKApplicationDelegate is designed to post process the results from Facebook Login - or Facebook Dialogs (or any action that requires switching over to the native Facebook - app or Safari). - - - - The methods in this class are designed to mirror those in UIApplicationDelegate, and you - should call them in the respective methods in your AppDelegate implementation. - */ -@interface FBSDKApplicationDelegate : NSObject - -/** - Gets the singleton instance. - */ -+ (instancetype)sharedInstance; - -/** - Call this method from the [UIApplicationDelegate application:openURL:sourceApplication:annotation:] method - of the AppDelegate for your app. It should be invoked for the proper processing of responses during interaction - with the native Facebook app or Safari as part of SSO authorization flow or Facebook dialogs. - - @param application The application as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @param url The URL as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @param sourceApplication The sourceApplication as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @param annotation The annotation as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @return YES if the url was intended for the Facebook SDK, NO if not. - */ -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_0 -/** - Call this method from the [UIApplicationDelegate application:openURL:options:] method - of the AppDelegate for your app. It should be invoked for the proper processing of responses during interaction - with the native Facebook app or Safari as part of SSO authorization flow or Facebook dialogs. - - @param application The application as passed to [UIApplicationDelegate application:openURL:options:]. - - @param url The URL as passed to [UIApplicationDelegate application:openURL:options:]. - - @param options The options dictionary as passed to [UIApplicationDelegate application:openURL:options:]. - - @return YES if the url was intended for the Facebook SDK, NO if not. - */ -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - options:(NSDictionary *)options; -#endif - -/** - Call this method from the [UIApplicationDelegate application:didFinishLaunchingWithOptions:] method - of the AppDelegate for your app. It should be invoked for the proper use of the Facebook SDK. - As part of SDK initialization basic auto logging of app events will occur, this can be -controlled via 'FacebookAutoLogAppEventsEnabled' key in the project info plist file. - - @param application The application as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - - @param launchOptions The launchOptions as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - - @return YES if the url was intended for the Facebook SDK, NO if not. - */ -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKButton.h deleted file mode 100644 index ca539660c4..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKButton.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 base class for common SDK buttons. - */ -@interface FBSDKButton : UIButton - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKConstants.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKConstants.h deleted file mode 100644 index fc2779f95d..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKConstants.h +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 error domain for all errors from FBSDKCoreKit. - - Error codes from the SDK in the range 0-99 are reserved for this domain. - */ -FBSDK_EXTERN NSString *const FBSDKErrorDomain; - -/** - NS_ENUM(NSInteger, FBSDKErrorCode) - Error codes for FBSDKErrorDomain. - */ -typedef NS_ENUM(NSInteger, FBSDKErrorCode) -{ - /** - Reserved. - */ - FBSDKReservedErrorCode = 0, - - /** - The error code for errors from invalid encryption on incoming encryption URLs. - */ - FBSDKEncryptionErrorCode, - - /** - The error code for errors from invalid arguments to SDK methods. - */ - FBSDKInvalidArgumentErrorCode, - - /** - The error code for unknown errors. - */ - FBSDKUnknownErrorCode, - - /** - A request failed due to a network error. Use NSUnderlyingErrorKey to retrieve - the error object from the NSURLConnection for more information. - */ - FBSDKNetworkErrorCode, - - /** - The error code for errors encountered during an App Events flush. - */ - FBSDKAppEventsFlushErrorCode, - - /** - An endpoint that returns a binary response was used with FBSDKGraphRequestConnection. - - Endpoints that return image/jpg, etc. should be accessed using NSURLRequest - */ - FBSDKGraphRequestNonTextMimeTypeReturnedErrorCode, - - /** - The operation failed because the server returned an unexpected response. - - You can get this error if you are not using the most recent SDK, or you are accessing a version of the - Graph API incompatible with the current SDK. - */ - FBSDKGraphRequestProtocolMismatchErrorCode, - - /** - The Graph API returned an error. - - See below for useful userInfo keys (beginning with FBSDKGraphRequestError*) - */ - FBSDKGraphRequestGraphAPIErrorCode, - - /** - The specified dialog configuration is not available. - - This error may signify that the configuration for the dialogs has not yet been downloaded from the server - or that the dialog is unavailable. Subsequent attempts to use the dialog may succeed as the configuration is loaded. - */ - FBSDKDialogUnavailableErrorCode, - - /** - Indicates an operation failed because a required access token was not found. - */ - FBSDKAccessTokenRequiredErrorCode, - - /** - Indicates an app switch (typically for a dialog) failed because the destination app is out of date. - */ - FBSDKAppVersionUnsupportedErrorCode, - - /** - Indicates an app switch to the browser (typically for a dialog) failed. - */ - FBSDKBrowserUnavailableErrorCode, - - /** - -@warning use FBSDKBrowserUnavailableErrorCode instead - */ - FBSDKBrowswerUnavailableErrorCode __attribute__ ((deprecated("use FBSDKBrowserUnavailableErrorCode instead"))) = FBSDKBrowserUnavailableErrorCode, -}; - -/** - NS_ENUM(NSUInteger, FBSDKGraphRequestErrorCategory) - Describes the category of Facebook error. See `FBSDKGraphRequestErrorCategoryKey`. - */ -typedef NS_ENUM(NSUInteger, FBSDKGraphRequestErrorCategory) -{ - /** The default error category that is not known to be recoverable. Check `FBSDKLocalizedErrorDescriptionKey` for a user facing message. */ - FBSDKGraphRequestErrorCategoryOther = 0, - /** Indicates the error is temporary (such as server throttling). While a recoveryAttempter will be provided with the error instance, the attempt is guaranteed to succeed so you can simply retry the operation if you do not want to present an alert. */ - FBSDKGraphRequestErrorCategoryTransient = 1, - /** Indicates the error can be recovered (such as requiring a login). A recoveryAttempter will be provided with the error instance that can take UI action. */ - FBSDKGraphRequestErrorCategoryRecoverable = 2 -}; - -/* - @methodgroup error userInfo keys - */ - -/** - The userInfo key for the invalid collection for errors with FBSDKInvalidArgumentErrorCode. - - If the invalid argument is a collection, the collection can be found with this key and the individual - invalid item can be found with FBSDKErrorArgumentValueKey. - */ -FBSDK_EXTERN NSString *const FBSDKErrorArgumentCollectionKey; - -/** - The userInfo key for the invalid argument name for errors with FBSDKInvalidArgumentErrorCode. - */ -FBSDK_EXTERN NSString *const FBSDKErrorArgumentNameKey; - -/** - The userInfo key for the invalid argument value for errors with FBSDKInvalidArgumentErrorCode. - */ -FBSDK_EXTERN NSString *const FBSDKErrorArgumentValueKey; - -/** - The userInfo key for the message for developers in NSErrors that originate from the SDK. - - The developer message will not be localized and is not intended to be presented within the app. - */ -FBSDK_EXTERN NSString *const FBSDKErrorDeveloperMessageKey; - -/** - The userInfo key describing a localized description that can be presented to the user. - */ -FBSDK_EXTERN NSString *const FBSDKErrorLocalizedDescriptionKey; - -/** - The userInfo key describing a localized title that can be presented to the user, used with `FBSDKLocalizedErrorDescriptionKey`. - */ -FBSDK_EXTERN NSString *const FBSDKErrorLocalizedTitleKey; - -/* - @methodgroup FBSDKGraphRequest error userInfo keys - */ - -/** - The userInfo key describing the error category, for error recovery purposes. - - See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. - */ -FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorCategoryKey; - -/* - The userInfo key for the Graph API error code. - */ -FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorGraphErrorCode; - -/* - The userInfo key for the Graph API error subcode. - */ -FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorGraphErrorSubcode; - -/* - The userInfo key for the HTTP status code. - */ -FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey; - -/* - The userInfo key for the raw JSON response. - */ -FBSDK_EXTERN NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey; - -/** - a formal protocol very similar to the informal protocol NSErrorRecoveryAttempting - */ -@protocol FBSDKErrorRecoveryAttempting - -/** - attempt the recovery - @param error the error - @param recoveryOptionIndex the selected option index - @param delegate the delegate - @param didRecoverSelector the callback selector, see discussion. - @param contextInfo context info to pass back to callback selector, see discussion. - - - Given that an error alert has been presented document-modally to the user, and the user has chosen one of the error's recovery options, attempt recovery from the error, and send the selected message to the specified delegate. The option index is an index into the error's array of localized recovery options. The method selected by didRecoverSelector must have the same signature as: - - - (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo; - - The value passed for didRecover must be YES if error recovery was completely successful, NO otherwise. - */ -- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCopying.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCopying.h deleted file mode 100644 index 039302bcc5..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCopying.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Extension protocol for NSCopying that adds the copy method, which is implemented on NSObject. - - NSObject implicitly conforms to this protocol. - */ -@protocol FBSDKCopying - -/** - Implemented by NSObject as a convenience to copyWithZone:. - @return A copy of the receiver. - */ -- (id)copy; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h deleted file mode 100644 index 449a541bd8..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKCoreKit.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 -#import - -#if !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#else -#import -#import -#endif - -#define FBSDK_VERSION_STRING @"4.36.0" -#define FBSDK_TARGET_PLATFORM_VERSION @"v3.1" diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphErrorRecoveryProcessor.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphErrorRecoveryProcessor.h deleted file mode 100644 index 1fb560e838..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphErrorRecoveryProcessor.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 "FBSDKConstants.h" - -@class FBSDKGraphErrorRecoveryProcessor; -@class FBSDKGraphRequest; - -/** - Defines a delegate for `FBSDKGraphErrorRecoveryProcessor`. - */ -@protocol FBSDKGraphErrorRecoveryProcessorDelegate - -/** - Indicates the error recovery has been attempted. - @param processor the processor instance. - @param didRecover YES if the recovery was successful. - @param error the error that that was attempted to be recovered from. - */ -- (void)processorDidAttemptRecovery:(FBSDKGraphErrorRecoveryProcessor *)processor didRecover:(BOOL)didRecover error:(NSError *)error; - -@optional -/** - Indicates the processor is about to process the error. - @param processor the processor instance. - @param error the error is about to be processed. - - return NO if the processor should not process the error. For example, - if you want to prevent alerts of localized messages but otherwise perform retries and recoveries, - you could return NO for errors where userInfo[FBSDKGraphRequestErrorCategoryKey] equal to FBSDKGraphRequestErrorCategoryOther - */ -- (BOOL)processorWillProcessError:(FBSDKGraphErrorRecoveryProcessor *)processor error:(NSError *)error; - -@end - -/** - Defines a type that can process Facebook NSErrors with best practices. - - Facebook NSErrors can contain FBSDKErrorRecoveryAttempting instances to recover from errors, or - localized messages to present to the user. This class will process the instances as follows: - - 1. If the error is temporary as indicated by FBSDKGraphRequestErrorCategoryKey, assume the recovery succeeded and - notify the delegate. - 2. If a FBSDKErrorRecoveryAttempting instance is available, display an alert (dispatched to main thread) - with the recovery options and call the instance's [ attemptRecoveryFromError:optionIndex:...]. - 3. If a FBSDKErrorRecoveryAttempting is not available, check the userInfo for FBSDKLocalizedErrorDescriptionKey - and present that in an alert (dispatched to main thread). - - By default, FBSDKGraphRequests use this type to process errors and retry the request upon a successful - recovery. - - Note that Facebook recovery attempters can present UI or even cause app switches (such as to login). Any such - work is dispatched to the main thread (therefore your request handlers may then run on the main thread). - - Login recovery requires FBSDKLoginKit. Login will use FBSDKLoginBehaviorNative and will prompt the user - for all permissions last granted. If any are declined on the new request, the recovery is not successful but - the `[FBSDKAccessToken currentAccessToken]` might still have been updated. - . - */ -@interface FBSDKGraphErrorRecoveryProcessor : NSObject - -/** - Gets the delegate. Note this is a strong reference, and is nil'ed out after recovery is complete. - */ -@property (nonatomic, strong, readonly) iddelegate; - -/** - Attempts to process the error, return YES if the error can be processed. - @param error the error to process. - @param request the related request that may be reissued. - @param delegate the delegate that will be retained until recovery is complete. - */ -- (BOOL)processError:(NSError *)error request:(FBSDKGraphRequest *)request delegate:(id) delegate; - -/** - The callback for FBSDKErrorRecoveryAttempting - @param didRecover if the recovery succeeded - @param contextInfo unused - */ -- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequest.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequest.h deleted file mode 100644 index 99b1de3843..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequest.h +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKAccessToken; - -/** - Represents a request to the Facebook Graph API. - - - `FBSDKGraphRequest` encapsulates the components of a request (the - Graph API path, the parameters, error recovery behavior) and should be - used in conjunction with `FBSDKGraphRequestConnection` to issue the request. - - Nearly all Graph APIs require an access token. Unless specified, the - `[FBSDKAccessToken currentAccessToken]` is used. Therefore, most requests - will require login first (see `FBSDKLoginManager` in FBSDKLoginKit.framework). - - A `- start` method is provided for convenience for single requests. - - By default, FBSDKGraphRequest will attempt to recover any errors returned from - Facebook. You can disable this via `disableErrorRecovery:`. - - @see FBSDKGraphErrorRecoveryProcessor - */ -@interface FBSDKGraphRequest : NSObject - -/** - Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. - @param graphPath the graph path (e.g., @"me"). - @param parameters the optional parameters dictionary. - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters; - -/** - Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. - @param graphPath the graph path (e.g., @"me"). - @param parameters the optional parameters dictionary. - @param HTTPMethod the optional HTTP method. nil defaults to @"GET". - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - HTTPMethod:(NSString *)HTTPMethod; - -/** - Initializes a new instance. - @param graphPath the graph path (e.g., @"me"). - @param parameters the optional parameters dictionary. - @param tokenString the token string to use. Specifying nil will cause no token to be used. - @param version the optional Graph API version (e.g., @"v2.0"). nil defaults to `[FBSDKSettings graphAPIVersion]`. - @param HTTPMethod the optional HTTP method (e.g., @"POST"). nil defaults to @"GET". - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - tokenString:(NSString *)tokenString - version:(NSString *)version - HTTPMethod:(NSString *)HTTPMethod -NS_DESIGNATED_INITIALIZER; - -/** - The request parameters. - */ -@property (nonatomic, strong, readonly) NSMutableDictionary *parameters; - -/** - The access token string used by the request. - */ -@property (nonatomic, copy, readonly) NSString *tokenString; - -/** - The Graph API endpoint to use for the request, for example "me". - */ -@property (nonatomic, copy, readonly) NSString *graphPath; - -/** - The HTTPMethod to use for the request, for example "GET" or "POST". - */ -@property (nonatomic, copy, readonly) NSString *HTTPMethod; - -/** - The Graph API version to use (e.g., "v2.0") - */ -@property (nonatomic, copy, readonly) NSString *version; - -/** - If set, disables the automatic error recovery mechanism. - @param disable whether to disable the automatic error recovery mechanism - - By default, non-batched FBSDKGraphRequest instances will automatically try to recover - from errors by constructing a `FBSDKGraphErrorRecoveryProcessor` instance that - re-issues the request on successful recoveries. The re-issued request will call the same - handler as the receiver but may occur with a different `FBSDKGraphRequestConnection` instance. - - This will override [FBSDKSettings setGraphErrorRecoveryDisabled:]. - */ -- (void)setGraphErrorRecoveryDisabled:(BOOL)disable; - -/** - Starts a connection to the Graph API. - @param handler The handler block to call when the request completes. - */ -- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestHandler)handler; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestConnection.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestConnection.h deleted file mode 100644 index b8cc0f3b7c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestConnection.h +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKGraphRequest; -@class FBSDKGraphRequestConnection; - -/** - FBSDKGraphRequestHandler - - A block that is passed to addRequest to register for a callback with the results of that - request once the connection completes. - - - - Pass a block of this type when calling addRequest. This will be called once - the request completes. The call occurs on the UI thread. - - @param connection The `FBSDKGraphRequestConnection` that sent the request. - - @param result The result of the request. This is a translation of - JSON data to `NSDictionary` and `NSArray` objects. This - is nil if there was an error. - - @param error The `NSError` representing any error that occurred. - - */ -typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection, - id result, - NSError *error); - -/** - @protocol - - The `FBSDKGraphRequestConnectionDelegate` protocol defines the methods used to receive network - activity progress information from a . - */ -@protocol FBSDKGraphRequestConnectionDelegate - -@optional - -/** - @method - - Tells the delegate the request connection will begin loading - - - - If the is created using one of the convenience factory methods prefixed with - start, the object returned from the convenience method has already begun loading and this method - will not be called when the delegate is set. - - @param connection The request connection that is starting a network request - */ -- (void)requestConnectionWillBeginLoading:(FBSDKGraphRequestConnection *)connection; - -/** - @method - - Tells the delegate the request connection finished loading - - - - If the request connection completes without a network error occurring then this method is called. - Invocation of this method does not indicate success of every made, only that the - request connection has no further activity. Use the error argument passed to the FBSDKGraphRequestHandler - block to determine success or failure of each . - - This method is invoked after the completion handler for each . - - @param connection The request connection that successfully completed a network request - */ -- (void)requestConnectionDidFinishLoading:(FBSDKGraphRequestConnection *)connection; - -/** - @method - - Tells the delegate the request connection failed with an error - - - - If the request connection fails with a network error then this method is called. The `error` - argument specifies why the network connection failed. The `NSError` object passed to the - FBSDKGraphRequestHandler block may contain additional information. - - @param connection The request connection that successfully completed a network request - @param error The `NSError` representing the network error that occurred, if any. May be nil - in some circumstances. Consult the `NSError` for the for reliable - failure information. - */ -- (void)requestConnection:(FBSDKGraphRequestConnection *)connection - didFailWithError:(NSError *)error; - -/** - @method - - Tells the delegate how much data has been sent and is planned to send to the remote host - - - - The byte count arguments refer to the aggregated objects, not a particular . - - Like `NSURLConnection`, the values may change in unexpected ways if data needs to be resent. - - @param connection The request connection transmitting data to a remote host - @param bytesWritten The number of bytes sent in the last transmission - @param totalBytesWritten The total number of bytes sent to the remote host - @param totalBytesExpectedToWrite The total number of bytes expected to send to the remote host - */ -- (void)requestConnection:(FBSDKGraphRequestConnection *)connection - didSendBodyData:(NSInteger)bytesWritten - totalBytesWritten:(NSInteger)totalBytesWritten -totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; - -@end - -/** - - The `FBSDKGraphRequestConnection` represents a single connection to Facebook to service a request. - - - - The request settings are encapsulated in a reusable object. The - `FBSDKGraphRequestConnection` object encapsulates the concerns of a single communication - e.g. starting a connection, canceling a connection, or batching requests. - - */ -@interface FBSDKGraphRequestConnection : NSObject - -/** - The delegate object that receives updates. - */ -@property (nonatomic, weak) id delegate; - -/** - Gets or sets the timeout interval to wait for a response before giving up. - */ -@property (nonatomic) NSTimeInterval timeout; - -/** - The raw response that was returned from the server. (readonly) - - - - This property can be used to inspect HTTP headers that were returned from - the server. - - The property is nil until the request completes. If there was a response - then this property will be non-nil during the FBSDKGraphRequestHandler callback. - */ -@property (nonatomic, retain, readonly) NSHTTPURLResponse *URLResponse; - -/** - @methodgroup Class methods - */ - -/** - @method - - This method sets the default timeout on all FBSDKGraphRequestConnection instances. Defaults to 60 seconds. - - @param defaultConnectionTimeout The timeout interval. - */ -+ (void)setDefaultConnectionTimeout:(NSTimeInterval)defaultConnectionTimeout; - -/** - @methodgroup Adding requests - */ - -/** - @method - - This method adds an object to this connection. - - @param request A request to be included in the round-trip when start is called. - @param handler A handler to call back when the round-trip completes or times out. - - - - The completion handler is retained until the block is called upon the - completion or cancellation of the connection. - */ -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler; - -/** - @method - - This method adds an object to this connection. - - @param request A request to be included in the round-trip when start is called. - - @param handler A handler to call back when the round-trip completes or times out. - The handler will be invoked on the main thread. - - @param name An optional name for this request. This can be used to feed - the results of one request to the input of another in the same - `FBSDKGraphRequestConnection` as described in - [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). - - - - The completion handler is retained until the block is called upon the - completion or cancellation of the connection. This request can be named - to allow for using the request's response in a subsequent request. - */ -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler - batchEntryName:(NSString *)name; - -/** - @method - - This method adds an object to this connection. - - @param request A request to be included in the round-trip when start is called. - - @param handler A handler to call back when the round-trip completes or times out. - - @param batchParameters The optional dictionary of parameters to include for this request - as described in [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). - Examples include "depends_on", "name", or "omit_response_on_success". - - - - The completion handler is retained until the block is called upon the - completion or cancellation of the connection. This request can be named - to allow for using the request's response in a subsequent request. - */ -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler - batchParameters:(NSDictionary *)batchParameters; - -/** - @methodgroup Instance methods - */ - -/** - @method - - Signals that a connection should be logically terminated as the - application is no longer interested in a response. - - - - Synchronously calls any handlers indicating the request was cancelled. Cancel - does not guarantee that the request-related processing will cease. It - does promise that all handlers will complete before the cancel returns. A call to - cancel prior to a start implies a cancellation of all requests associated - with the connection. - */ -- (void)cancel; - -/** - @method - - This method starts a connection with the server and is capable of handling all of the - requests that were added to the connection. - - - By default, a connection is scheduled on the current thread in the default mode when it is created. - See `setDelegateQueue:` for other options. - - This method cannot be called twice for an `FBSDKGraphRequestConnection` instance. - */ -- (void)start; - -/** - Determines the operation queue that is used to call methods on the connection's delegate. - @param queue The operation queue to use when calling delegate methods. - - By default, a connection is scheduled on the current thread in the default mode when it is created. - You cannot reschedule a connection after it has started. - - This is very similar to `[NSURLConnection setDelegateQueue:]`. - */ -- (void)setDelegateQueue:(NSOperationQueue *)queue; - -/** - @method - - Overrides the default version for a batch request - - - - The SDK automatically prepends a version part, such as "v2.0" to API paths in order to simplify API versioning - for applications. If you want to override the version part while using batch requests on the connection, call - this method to set the version for the batch request. - - @param version This is a string in the form @"v2.0" which will be used for the version part of an API path - */ -- (void)overrideVersionPartWith:(NSString *)version; - -@end - -/** - The key in the result dictionary for requests to old versions of the Graph API - whose response is not a JSON object. - - - When a request returns a non-JSON response (such as a "true" literal), that response - will be wrapped into a dictionary using this const as the key. This only applies for very few Graph API - prior to v2.1. - */ -FBSDK_EXTERN NSString *const FBSDKNonJSONResponseProperty; diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestDataAttachment.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestDataAttachment.h deleted file mode 100644 index 17a10dfff3..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKGraphRequestDataAttachment.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 container class for data attachments so that additional metadata can be provided about the attachment. - */ -@interface FBSDKGraphRequestDataAttachment : NSObject - -/** - Initializes the receiver with the attachment data and metadata. - @param data The attachment data (retained, not copied) - @param filename The filename for the attachment - @param contentType The content type for the attachment - */ -- (instancetype)initWithData:(NSData *)data - filename:(NSString *)filename - contentType:(NSString *)contentType -NS_DESIGNATED_INITIALIZER; - -/** - The content type for the attachment. - */ -@property (nonatomic, copy, readonly) NSString *contentType; - -/** - The attachment data. - */ -@property (nonatomic, strong, readonly) NSData *data; - -/** - The filename for the attachment. - */ -@property (nonatomic, copy, readonly) NSString *filename; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMacros.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMacros.h deleted file mode 100644 index fd2e2fff38..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMacros.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -#ifdef __cplusplus -#define FBSDK_EXTERN extern "C" __attribute__((visibility ("default"))) -#else -#define FBSDK_EXTERN extern __attribute__((visibility ("default"))) -#endif - -#define FBSDK_STATIC_INLINE static inline - -#define FBSDK_NO_DESIGNATED_INITIALIZER() \ -@throw [NSException exceptionWithName:NSInvalidArgumentException \ - reason:[NSString stringWithFormat:@"unrecognized selector sent to instance %p", self] \ - userInfo:nil] - -#define FBSDK_NOT_DESIGNATED_INITIALIZER(DESIGNATED_INITIALIZER) \ -@throw [NSException exceptionWithName:NSInvalidArgumentException \ - reason:[NSString stringWithFormat:@"Please use the designated initializer [%p %@]", \ - self, \ - NSStringFromSelector(@selector(DESIGNATED_INITIALIZER))] \ - userInfo:nil] diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMutableCopying.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMutableCopying.h deleted file mode 100644 index 3fada941d2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKMutableCopying.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Extension protocol for NSMutableCopying that adds the mutableCopy method, which is implemented on NSObject. - - NSObject implicitly conforms to this protocol. - */ -@protocol FBSDKMutableCopying - -/** - Implemented by NSObject as a convenience to mutableCopyWithZone:. - @return A mutable copy of the receiver. - */ -- (id)mutableCopy; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfile.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfile.h deleted file mode 100644 index 2c1ec263ff..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfile.h +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 "FBSDKMacros.h" -#import "FBSDKProfilePictureView.h" - -/** - Notification indicating that the `currentProfile` has changed. - - the userInfo dictionary of the notification will contain keys - `FBSDKProfileChangeOldKey` and - `FBSDKProfileChangeNewKey`. - */ -FBSDK_EXTERN NSString *const FBSDKProfileDidChangeNotification; - -/* key in notification's userInfo object for getting the old profile. - - If there was no old profile, the key will not be present. - */ -FBSDK_EXTERN NSString *const FBSDKProfileChangeOldKey; - -/* key in notification's userInfo object for getting the new profile. - - If there is no new profile, the key will not be present. - */ -FBSDK_EXTERN NSString *const FBSDKProfileChangeNewKey; - -/** - Represents an immutable Facebook profile - - This class provides a global "currentProfile" instance to more easily - add social context to your application. When the profile changes, a notification is - posted so that you can update relevant parts of your UI and is persisted to NSUserDefaults. - - Typically, you will want to call `enableUpdatesOnAccessTokenChange:YES` so that - it automatically observes changes to the `[FBSDKAccessToken currentAccessToken]`. - - You can use this class to build your own `FBSDKProfilePictureView` or in place of typical requests to "/me". - */ -@interface FBSDKProfile : NSObject - -/** - initializes a new instance. - @param userID the user ID - @param firstName the user's first name - @param middleName the user's middle name - @param lastName the user's last name - @param name the user's complete name - @param linkURL the link for this profile - @param refreshDate the optional date this profile was fetched. Defaults to [NSDate date]. - */ -- (instancetype)initWithUserID:(NSString *)userID - firstName:(NSString *)firstName - middleName:(NSString *)middleName - lastName:(NSString *)lastName - name:(NSString *)name - linkURL:(NSURL *)linkURL - refreshDate:(NSDate *)refreshDate NS_DESIGNATED_INITIALIZER; -/** - The user id - */ -@property (nonatomic, copy, readonly) NSString *userID; -/** - The user's first name - */ -@property (nonatomic, copy, readonly) NSString *firstName; -/** - The user's middle name - */ -@property (nonatomic, copy, readonly) NSString *middleName; -/** - The user's last name - */ -@property (nonatomic, copy, readonly) NSString *lastName; -/** - The user's complete name - */ -@property (nonatomic, copy, readonly) NSString *name; -/** - A URL to the user's profile. - - Consider using Bolts and `FBSDKAppLinkResolver` to resolve this - to an app link to link directly to the user's profile in the Facebook app. - */ -@property (nonatomic, readonly) NSURL *linkURL; - -/** - The last time the profile data was fetched. - */ -@property (nonatomic, readonly) NSDate *refreshDate; - -/** - Gets the current FBSDKProfile instance. - */ -+ (FBSDKProfile *)currentProfile; - -/** - Sets the current instance and posts the appropriate notification if the profile parameter is different - than the receiver. - @param profile the profile to set - - This persists the profile to NSUserDefaults. - */ -+ (void)setCurrentProfile:(FBSDKProfile *)profile; - -/** - Indicates if `currentProfile` will automatically observe `FBSDKAccessTokenDidChangeNotification` notifications - @param enable YES is observing - - If observing, this class will issue a graph request for public profile data when the current token's userID - differs from the current profile. You can observe `FBSDKProfileDidChangeNotification` for when the profile is updated. - - Note that if `[FBSDKAccessToken currentAccessToken]` is unset, the `currentProfile` instance remains. It's also possible - for `currentProfile` to return nil until the data is fetched. - */ -+ (void)enableUpdatesOnAccessTokenChange:(BOOL)enable; - -/** - Loads the current profile and passes it to the completion block. - @param completion The block to be executed once the profile is loaded - - If the profile is already loaded, this method will call the completion block synchronously, otherwise it - will begin a graph request to update `currentProfile` and then call the completion block when finished. - */ -+ (void)loadCurrentProfileWithCompletion:(void(^)(FBSDKProfile *profile, NSError *error))completion; - -/** - A convenience method for returning a complete `NSURL` for retrieving the user's profile image. - @param mode The picture mode - @param size The height and width. This will be rounded to integer precision. - */ -- (NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size; - -/** - A convenience method for returning a Graph API path for retrieving the user's profile image. - -@warning use `imageURLForPictureMode:size:` instead - - You can pass this to a `FBSDKGraphRequest` instance to download the image. - @param mode The picture mode - @param size The height and width. This will be rounded to integer precision. - */ -- (NSString *)imagePathForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size -__attribute__ ((deprecated("use imageURLForPictureMode:size: instead"))); - -/** - Returns YES if the profile is equivalent to the receiver. - @param profile the profile to compare to. - */ -- (BOOL)isEqualToProfile:(FBSDKProfile *)profile; -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfilePictureView.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfilePictureView.h deleted file mode 100644 index aaf9bcaa78..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKProfilePictureView.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - FBSDKProfilePictureMode enum - Defines the aspect ratio mode for the source image of the profile picture. - */ -typedef NS_ENUM(NSUInteger, FBSDKProfilePictureMode) -{ - /** - A square cropped version of the image will be included in the view. - */ - FBSDKProfilePictureModeSquare, - /** - The original picture's aspect ratio will be used for the source image in the view. - */ - FBSDKProfilePictureModeNormal, -}; - -/** - A view to display a profile picture. - */ -@interface FBSDKProfilePictureView : UIView - -/** - The mode for the receiver to determine the aspect ratio of the source image. - */ -@property (nonatomic, assign) FBSDKProfilePictureMode pictureMode; - -/** - The profile ID to show the picture for. - */ -@property (nonatomic, copy) NSString *profileID; - -/** - Explicitly marks the receiver as needing to update the image. - - This method is called whenever any properties that affect the source image are modified, but this can also - be used to trigger a manual update of the image if it needs to be re-downloaded. - */ -- (void)setNeedsImageUpdate; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKSettings.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKSettings.h deleted file mode 100644 index f854710b79..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKSettings.h +++ /dev/null @@ -1,256 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/* - * Constants defining logging behavior. Use with <[FBSDKSettings setLoggingBehavior]>. - */ - -/** Include access token in logging. */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorAccessTokens; - -/** Log performance characteristics */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorPerformanceCharacteristics; - -/** Log FBSDKAppEvents interactions */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorAppEvents; - -/** Log Informational occurrences */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorInformational; - -/** Log cache errors. */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorCacheErrors; - -/** Log errors from SDK UI controls */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorUIControlErrors; - -/** Log debug warnings from API response, i.e. when friends fields requested, but user_friends permission isn't granted. */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorGraphAPIDebugWarning; - -/** Log warnings from API response, i.e. when requested feature will be deprecated in next version of API. - Info is the lowest level of severity, using it will result in logging all previously mentioned levels. - */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorGraphAPIDebugInfo; - -/** Log errors from SDK network requests */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorNetworkRequests; - -/** Log errors likely to be preventable by the developer. This is in the default set of enabled logging behaviors. */ -FBSDK_EXTERN NSString *const FBSDKLoggingBehaviorDeveloperErrors; - -@interface FBSDKSettings : NSObject - -/** - Get the Facebook App ID used by the SDK. - - If not explicitly set, the default will be read from the application's plist (FacebookAppID). - */ -+ (NSString *)appID; - -/** - Set the Facebook App ID to be used by the SDK. - @param appID The Facebook App ID to be used by the SDK. - */ -+ (void)setAppID:(NSString *)appID; - -/** - Get the default url scheme suffix used for sessions. - - If not explicitly set, the default will be read from the application's plist (FacebookUrlSchemeSuffix). - */ -+ (NSString *)appURLSchemeSuffix; - -/** - Set the app url scheme suffix used by the SDK. - @param appURLSchemeSuffix The url scheme suffix to be used by the SDK. - */ -+ (void)setAppURLSchemeSuffix:(NSString *)appURLSchemeSuffix; - -/** - Retrieve the Client Token that has been set via [FBSDKSettings setClientToken]. - - If not explicitly set, the default will be read from the application's plist (FacebookClientToken). - */ -+ (NSString *)clientToken; - -/** - Sets the Client Token for the Facebook App. - - This is needed for certain API calls when made anonymously, without a user-based access token. - @param clientToken The Facebook App's "client token", which, for a given appid can be found in the Security - section of the Advanced tab of the Facebook App settings found at - */ -+ (void)setClientToken:(NSString *)clientToken; - -/** - A convenient way to toggle error recovery for all FBSDKGraphRequest instances created after this is set. - @param disableGraphErrorRecovery YES or NO. - */ -+ (void)setGraphErrorRecoveryDisabled:(BOOL)disableGraphErrorRecovery; - -/** - Get the Facebook Display Name used by the SDK. - - If not explicitly set, the default will be read from the application's plist (FacebookDisplayName). - */ -+ (NSString *)displayName; - -/** - Set the default Facebook Display Name to be used by the SDK. - - This should match the Display Name that has been set for the app with the corresponding Facebook App ID, - in the Facebook App Dashboard. - @param displayName The Facebook Display Name to be used by the SDK. - */ -+ (void)setDisplayName:(NSString *)displayName; - -/** - Get the Facebook domain part. - - If not explicitly set, the default will be read from the application's plist (FacebookDomainPart). - */ -+ (NSString *)facebookDomainPart; - -/** - Set the subpart of the Facebook domain. - - This can be used to change the Facebook domain (e.g. @"beta") so that requests will be sent to - graph.beta.facebook.com - @param facebookDomainPart The domain part to be inserted into facebook.com. - */ -+ (void)setFacebookDomainPart:(NSString *)facebookDomainPart; - -/** - The quality of JPEG images sent to Facebook from the SDK. - - If not explicitly set, the default is 0.9. - - @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ -+ (CGFloat)JPEGCompressionQuality; - -/** - Set the quality of JPEG images sent to Facebook from the SDK. - @param JPEGCompressionQuality The quality for JPEG images, expressed as a value from 0.0 to 1.0. - - @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ -+ (void)setJPEGCompressionQuality:(CGFloat)JPEGCompressionQuality; - -/** - Flag which controls the auto logging of basic app events, such as activateApp and deactivateApp. - If not explicitly set, the default is 1 - true - */ -+ (NSNumber *)autoLogAppEventsEnabled; - -/** - Set the flag which controls the auto logging of basic app events, such as activateApp and deactivateApp. - @param AutoLogAppEventsEnabled Flag value, expressed as a value from 0 - false or 1 - true. - */ -+ (void)setAutoLogAppEventsEnabled:(NSNumber *)AutoLogAppEventsEnabled; - -/** - Flag which controls the fb_codeless_debug logging event - If not explicitly set, the default is 1 - true - */ -+ (NSNumber *)codelessDebugLogEnabled; - -/** - Set the flag which controls the fb_codeless_debug logging event - @param CodelessDebugLogEnabled Flag value, expressed as a value from 0 - false or 1 - true. - */ -+ (void)setCodelessDebugLogEnabled:(NSNumber *)CodelessDebugLogEnabled; - -/** - Gets whether data such as that generated through FBSDKAppEvents and sent to Facebook should be restricted from being used for other than analytics and conversions. Defaults to NO. This value is stored on the device and persists across app launches. - */ -+ (BOOL)limitEventAndDataUsage; - -/** - Sets whether data such as that generated through FBSDKAppEvents and sent to Facebook should be restricted from being used for other than analytics and conversions. Defaults to NO. This value is stored on the device and persists across app launches. - - @param limitEventAndDataUsage The desired value. - */ -+ (void)setLimitEventAndDataUsage:(BOOL)limitEventAndDataUsage; - -/** - Retrieve the current iOS SDK version. - */ -+ (NSString *)sdkVersion; - -/** - Retrieve the current Facebook SDK logging behavior. - */ -+ (NSSet *)loggingBehavior; - -/** - Set the current Facebook SDK logging behavior. This should consist of strings defined as - constants with FBSDKLoggingBehavior*. - - @param loggingBehavior A set of strings indicating what information should be logged. If nil is provided, the logging - behavior is reset to the default set of enabled behaviors. Set to an empty set in order to disable all logging. - - - You can also define this via an array in your app plist with key "FacebookLoggingBehavior" or add and remove individual values via enableLoggingBehavior: or disableLogginBehavior: - */ -+ (void)setLoggingBehavior:(NSSet *)loggingBehavior; - -/** - Enable a particular Facebook SDK logging behavior. - - @param loggingBehavior The LoggingBehavior to enable. This should be a string defined as a constant with FBSDKLoggingBehavior*. - */ -+ (void)enableLoggingBehavior:(NSString *)loggingBehavior; - -/** - Disable a particular Facebook SDK logging behavior. - - @param loggingBehavior The LoggingBehavior to disable. This should be a string defined as a constant with FBSDKLoggingBehavior*. - */ -+ (void)disableLoggingBehavior:(NSString *)loggingBehavior; - -/** - Set the user defaults key used by legacy token caches. - - @param tokenInformationKeyName the key used by legacy token caches. - - - Use this only if you customized FBSessionTokenCachingStrategy in v3.x of - the Facebook SDK for iOS. -*/ -+ (void)setLegacyUserDefaultTokenInformationKeyName:(NSString *)tokenInformationKeyName; - -/** - Get the user defaults key used by legacy token caches. -*/ -+ (NSString *)legacyUserDefaultTokenInformationKeyName; - -/** - Overrides the default Graph API version to use with `FBSDKGraphRequests`. This overrides `FBSDK_TARGET_PLATFORM_VERSION`. - - The string should be of the form `@"v2.7"`. -*/ -+ (void)setGraphAPIVersion:(NSString *)version; - -/** - Returns the default Graph API version. Defaults to `FBSDK_TARGET_PLATFORM_VERSION` -*/ -+ (NSString *)graphAPIVersion; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKTestUsersManager.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKTestUsersManager.h deleted file mode 100644 index 17a5ea538e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKTestUsersManager.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKAccessToken; - -/** - - Callback block for returning an array of FBSDKAccessToken instances (and possibly `NSNull` instances); or an error. - */ -typedef void (^FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)(NSArray *tokens, NSError *error) ; - -/** - - Callback block for removing a test user. - */ -typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; - - -/** - Provides methods for managing test accounts for testing Facebook integration. - - - Facebook allows developers to create test accounts for testing their applications' - Facebook integration (see https://developers.facebook.com/docs/test_users/). This class - simplifies use of these accounts for writing tests. It is not designed for use in - production application code. - - This class will make Graph API calls on behalf of your app to manage test accounts and requires - an app id and app secret. You will typically use this class to write unit or integration tests. - Make sure you NEVER include your app secret in your production app. - */ -@interface FBSDKTestUsersManager : NSObject - -/** - construct or return the shared instance - @param appID the Facebook app id - @param appSecret the Facebook app secret - */ -+ (instancetype)sharedInstanceForAppID:(NSString *)appID appSecret:(NSString *)appSecret; - -/** - retrieve FBSDKAccessToken instances for test accounts with the specific permissions. - @param arraysOfPermissions an array of permissions sets, such as @[ [NSSet setWithObject:@"email"], [NSSet setWithObject:@"user_birthday"]] - if you needed two test accounts with email and birthday permissions, respectively. You can pass in empty nested sets - if you need two arbitrary test accounts. For convenience, passing nil is treated as @[ [NSSet set] ] - for fetching a single test user. - @param createIfNotFound if YES, new test accounts are created if no test accounts existed that fit the permissions - requirement - @param handler the callback to invoke which will return an array of `FBAccessTokenData` instances or an `NSError`. - If param `createIfNotFound` is NO, the array may contain `[NSNull null]` instances. - - - If you are requesting test accounts with differing number of permissions, try to order - `arrayOfPermissionsArrays` so that the most number of permissions come first to minimize creation of new - test accounts. - */ -- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *)arraysOfPermissions - createIfNotFound:(BOOL)createIfNotFound - completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler; - -/** - add a test account with the specified permissions - @param permissions the set of permissions, e.g., [NSSet setWithObjects:@"email", @"user_friends"] - @param handler the callback handler - */ -- (void)addTestAccountWithPermissions:(NSSet *)permissions - completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler; - -/** - remove a test account for the given user id - @param userId the user id - @param handler the callback handler - */ -- (void)removeTestAccount:(NSString *)userId completionHandler:(FBSDKTestUsersManagerRemoveTestAccountHandler)handler; - -/** - Make two test users friends with each other. - @param first the token of the first user - @param second the token of the second user - @param callback the callback handler - */ -- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(void (^)(NSError *))callback; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKUtility.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKUtility.h deleted file mode 100644 index 5a7fdff61e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Headers/FBSDKUtility.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Class to contain common utility methods. - */ -@interface FBSDKUtility : NSObject - -/** - Parses a query string into a dictionary. - @param queryString The query string value. - @return A dictionary with the key/value pairs. - */ -+ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString; - -/** - Constructs a query string from a dictionary. - @param dictionary The dictionary with key/value pairs for the query string. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return Query string representation of the parameters. - */ -+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary error:(NSError *__autoreleasing *)errorRef; - -/** - Decodes a value from an URL. - @param value The value to decode. - @return The decoded value. - */ -+ (NSString *)URLDecode:(NSString *)value; - -/** - Encodes a value for an URL. - @param value The value to encode. - @return The encoded value. - */ -+ (NSString *)URLEncode:(NSString *)value; - -/** - Creates a timer using Grand Central Dispatch. - @param interval The interval to fire the timer, in seconds. - @param block The code block to execute when timer is fired. - @return The dispatch handle. - */ -+ (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block; - -/** - Stop a timer that was started by startGCDTimerWithInterval. - @param timer The dispatch handle received from startGCDTimerWithInterval. - */ -+ (void)stopGCDTimer:(dispatch_source_t)timer; - -/** - Get SHA256 hased string of NSString/NSData - - @param input The data that needs to be hashed, it could be NSString or NSData. - */ -+ (NSString *)SHA256Hash:(NSObject *)input; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Info.plist deleted file mode 100644 index 74eadf2e0b..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Modules/module.modulemap deleted file mode 100644 index bc59c1a822..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKCoreKit.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBSDKCoreKit { - umbrella header "FBSDKCoreKit.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/FBSDKLoginKit b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/FBSDKLoginKit deleted file mode 100755 index 47d2bcecad..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/FBSDKLoginKit and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginCodeInfo.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginCodeInfo.h deleted file mode 100644 index 52c1de7600..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginCodeInfo.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/*! - @abstract Describes the initial response when starting the device login flow. - @discussion This is used by `FBSDKDeviceLoginManager`. - */ -@interface FBSDKDeviceLoginCodeInfo : NSObject - -/*! - @abstract There is no public initializer. - */ -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/*! - @abstract the unique id for this login flow. -*/ -@property (nonatomic, copy, readonly) NSString *identifier; - -/*! - @abstract the short "user_code" that should be presented to the user. -*/ -@property (nonatomic, copy, readonly) NSString *loginCode; - -/*! - @abstract the verification URL. -*/ -@property (nonatomic, copy, readonly) NSURL *verificationURL; - -/*! - @abstract the expiration date. -*/ -@property (nonatomic, copy, readonly) NSDate *expirationDate; - -/*! - @abstract the polling interval -*/ -@property (nonatomic, assign, readonly) NSUInteger pollingInterval; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManager.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManager.h deleted file mode 100644 index 3f6f0360b2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManager.h +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 FBSDKDeviceLoginManager; - -/*! - @abstract A delegate for `FBSDKDeviceLoginManager`. - */ -@protocol FBSDKDeviceLoginManagerDelegate - -/*! - @abstract Indicates the device login flow has started. You should parse `codeInfo` to - present the code to the user to enter. - @param loginManager the login manager instance. - @param codeInfo the code info data. - */ -- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager startedWithCodeInfo:(FBSDKDeviceLoginCodeInfo *)codeInfo; - -/*! - @abstract Indicates the device login flow has finished. - @param loginManager the login manager instance. - @param result the results of the login flow. - @param error the error, if available. - @discussion The flow can be finished if the user completed the flow, cancelled, or if the code has expired. - */ -- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager - completedWithResult:(nullable FBSDKDeviceLoginManagerResult *)result - error:(nullable NSError *)error; - -@end - -/*! - @abstract Use this class to perform a device login flow. - @discussion The device login flow starts by requesting a code from the device login API. - This class informs the delegate when this code is received. You should then present the - code to the user to enter. In the meantime, this class polls the device login API - periodically and informs the delegate of the results. - - See [Facebook Device Login](https://developers.facebook.com/docs/facebook-login/for-devices). - */ -@interface FBSDKDeviceLoginManager : NSObject - -/*! - @abstract Initializes a new instance. - @param permissions permissions to request. - */ -- (instancetype)initWithPermissions:(nullable NSArray *)permissions - enableSmartLogin:(BOOL)enableSmartLogin -NS_DESIGNATED_INITIALIZER; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/*! - @abstract the delegate. - */ -@property (nonatomic, weak) id delegate; - -/*! - @abstract the requested permissions. - */ -@property (nullable, nonatomic, copy, readonly) NSArray *permissions; - -/*! - @abstract the optional URL to redirect the user to after they complete the login. - @discussion the URL must be configured in your App Settings -> Advanced -> OAuth Redirect URIs - */ -@property (nullable, nonatomic, copy) NSURL *redirectURL; - -/*! - @abstract Starts the device login flow - @discussion This instance will retain self until the flow is finished or cancelled. - */ -- (void)start; - -/*! - @abstract Attempts to cancel the device login flow. - */ -- (void)cancel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManagerResult.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManagerResult.h deleted file mode 100644 index ccce552328..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKDeviceLoginManagerResult.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/*! - @abstract Represents the results of the a device login flow. - @discussion This is used by `FBSDKDeviceLoginManager`. - */ -@interface FBSDKDeviceLoginManagerResult : NSObject - -/*! - @abstract There is no public initializer. - */ -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/*! - @abstract The token. - */ -@property (nullable, nonatomic, strong, readonly) FBSDKAccessToken *accessToken; - -/*! - @abstract Indicates if the login was cancelled by the user, or if the device - login code has expired. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginButton.h deleted file mode 100644 index 1b8ed2985d..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginButton.h +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 "FBSDKTooltipView.h" - -@protocol FBSDKLoginButtonDelegate; - -/** - NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) - Indicates the desired login tooltip behavior. - */ -typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) -{ - /** The default behavior. The tooltip will only be displayed if - the app is eligible (determined by possible server round trip) */ - FBSDKLoginButtonTooltipBehaviorAutomatic = 0, - /** Force display of the tooltip (typically for UI testing) */ - FBSDKLoginButtonTooltipBehaviorForceDisplay = 1, - /** Force disable. In this case you can still exert more refined - control by manually constructing a `FBSDKLoginTooltipView` instance. */ - FBSDKLoginButtonTooltipBehaviorDisable = 2 -}; - -/** - A button that initiates a log in or log out flow upon tapping. - - `FBSDKLoginButton` works with `[FBSDKAccessToken currentAccessToken]` to - determine what to display, and automatically starts authentication when tapped (i.e., - you do not need to manually subscribe action targets). - - Like `FBSDKLoginManager`, you should make sure your app delegate is connected to - `FBSDKApplicationDelegate` in order for the button's delegate to receive messages. - - `FBSDKLoginButton` has a fixed height of @c 30 pixels, but you may change the width. `initWithFrame:CGRectZero` - will size the button to its minimum frame. -*/ -@interface FBSDKLoginButton : FBSDKButton - -/** - The default audience to use, if publish permissions are requested at login time. - */ -@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; -/** - Gets or sets the delegate. - */ -@property (weak, nonatomic) IBOutlet id delegate; -/** - Gets or sets the login behavior to use - */ -@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; -/** - The publish permissions to request. - - - Use `defaultAudience` to specify the default audience to publish to. - Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - */ -@property (copy, nonatomic) NSArray *publishPermissions; -/** - The read permissions to request. - - - Note, that if read permissions are specified, then publish permissions should not be specified. This is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - */ -@property (copy, nonatomic) NSArray *readPermissions; -/** - Gets or sets the desired tooltip behavior. - */ -@property (assign, nonatomic) FBSDKLoginButtonTooltipBehavior tooltipBehavior; -/** - Gets or sets the desired tooltip color style. - */ -@property (assign, nonatomic) FBSDKTooltipColorStyle tooltipColorStyle; - -@end - -/** - @protocol - A delegate for `FBSDKLoginButton` - */ -@protocol FBSDKLoginButtonDelegate - -@required -/** - Sent to the delegate when the button was used to login. - @param loginButton the sender - @param result The results of the login - @param error The error (if any) from the login - */ -- (void)loginButton:(FBSDKLoginButton *)loginButton -didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result - error:(NSError *)error; - -/** - Sent to the delegate when the button was used to logout. - @param loginButton The button that was clicked. -*/ -- (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton; - -@optional -/** - Sent to the delegate when the button is about to login. - @param loginButton the sender - @return YES if the login should be allowed to proceed, NO otherwise - */ -- (BOOL) loginButtonWillLogin:(FBSDKLoginButton *)loginButton; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginConstants.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginConstants.h deleted file mode 100644 index dcb1930e8a..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginConstants.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 error domain for all errors from FBSDKLoginKit - - Error codes from the SDK in the range 300-399 are reserved for this domain. - */ -FBSDK_EXTERN NSString *const FBSDKLoginErrorDomain; - -/** - NS_ENUM(NSInteger, FBSDKLoginErrorCode) - Error codes for FBSDKLoginErrorDomain. - */ -typedef NS_ENUM(NSInteger, FBSDKLoginErrorCode) -{ - /** - Reserved. - */ - FBSDKLoginReservedErrorCode = 300, - /** - The error code for unknown errors. - */ - FBSDKLoginUnknownErrorCode, - - /** - The user's password has changed and must log in again - */ - FBSDKLoginPasswordChangedErrorCode, - /** - The user must log in to their account on www.facebook.com to restore access - */ - FBSDKLoginUserCheckpointedErrorCode, - /** - Indicates a failure to request new permissions because the user has changed. - */ - FBSDKLoginUserMismatchErrorCode, - /** - The user must confirm their account with Facebook before logging in - */ - FBSDKLoginUnconfirmedUserErrorCode, - - /** - The Accounts framework failed without returning an error, indicating the - app's slider in the iOS Facebook Settings (device Settings -> Facebook -> App Name) has - been disabled. - */ - FBSDKLoginSystemAccountAppDisabledErrorCode, - /** - An error occurred related to Facebook system Account store - */ - FBSDKLoginSystemAccountUnavailableErrorCode, - /** - The login response was missing a valid challenge string. - */ - FBSDKLoginBadChallengeString, -}; - -/** - NS_ENUM(NSInteger, FBSDKDeviceLoginErrorCode) - Error codes for FBSDKDeviceLoginErrorDomain. - */ -typedef NS_ENUM(NSUInteger, FBSDKDeviceLoginErrorSubcode) { - /** - Your device is polling too frequently. - */ - FBSDKDeviceLoginExcessivePollingErrorSubcode = 1349172, - /** - User has declined to authorize your application. - */ - FBSDKDeviceLoginAuthorizationDeclinedErrorSubcode = 1349173, - /** - User has not yet authorized your application. Continue polling. - */ - FBSDKDeviceLoginAuthorizationPendingErrorSubcode = 1349174, - /** - The code you entered has expired. - */ - FBSDKDeviceLoginCodeExpiredErrorSubcode = 1349152 -}; diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginKit.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginKit.h deleted file mode 100644 index c29f13bcb0..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginKit.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright notice shall be -// included in all copies or substantial portions of the software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -#import - -#if !TARGET_TV_OS -#import -#import -#import -#import -#import -#import -#import -#import -#else -#import -#import -#import -#import -#endif diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManager.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManager.h deleted file mode 100644 index c33ffcb0e6..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManager.h +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKLoginManagerLoginResult; - -/** - Describes the call back to the FBSDKLoginManager - @param result the result of the authorization - @param error the authorization error, if any. - */ -typedef void (^FBSDKLoginManagerRequestTokenHandler)(FBSDKLoginManagerLoginResult *result, NSError *error); - - -/** - FBSDKDefaultAudience enum - - Passed to open to indicate which default audience to use for sessions that post data to Facebook. - - - - Certain operations such as publishing a status or publishing a photo require an audience. When the user - grants an application permission to perform a publish operation, a default audience is selected as the - publication ceiling for the application. This enumerated value allows the application to select which - audience to ask the user to grant publish permission for. - */ -typedef NS_ENUM(NSUInteger, FBSDKDefaultAudience) -{ - /** Indicates that the user's friends are able to see posts made by the application */ - FBSDKDefaultAudienceFriends = 0, - /** Indicates that only the user is able to see posts made by the application */ - FBSDKDefaultAudienceOnlyMe, - /** Indicates that all Facebook users are able to see posts made by the application */ - FBSDKDefaultAudienceEveryone, -}; - -/** - FBSDKLoginBehavior enum - - Passed to the \c FBSDKLoginManager to indicate how Facebook Login should be attempted. - - - - Facebook Login authorizes the application to act on behalf of the user, using the user's - Facebook account. Usually a Facebook Login will rely on an account maintained outside of - the application, by the native Facebook application, the browser, or perhaps the device - itself. This avoids the need for a user to enter their username and password directly, and - provides the most secure and lowest friction way for a user to authorize the application to - interact with Facebook. - - The \c FBSDKLoginBehavior enum specifies which log-in methods may be used. The SDK - will determine the best behavior based on the current device (such as iOS version). - */ -typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior) -{ - /** - This is the default behavior, and indicates logging in through the native - Facebook app may be used. The SDK may still use Safari instead. - */ - FBSDKLoginBehaviorNative = 0, - /** - Attempts log in through the Safari or SFSafariViewController, if available. - */ - FBSDKLoginBehaviorBrowser, - /** - Attempts log in through the Facebook account currently signed in through - the device Settings. - @note If the account is not available to the app (either not configured by user or - as determined by the SDK) this behavior falls back to \c FBSDKLoginBehaviorNative. - */ - FBSDKLoginBehaviorSystemAccount, - /** - Attempts log in through a modal \c UIWebView pop up - - @note This behavior is only available to certain types of apps. Please check the Facebook - Platform Policy to verify your app meets the restrictions. - */ - FBSDKLoginBehaviorWeb, -}; - -/** - `FBSDKLoginManager` provides methods for logging the user in and out. - - `FBSDKLoginManager` works directly with `[FBSDKAccessToken currentAccessToken]` and - sets the "currentAccessToken" upon successful authorizations (or sets `nil` in case of `logOut`). - - You should check `[FBSDKAccessToken currentAccessToken]` before calling logIn* to see if there is - a cached token available (typically in your viewDidLoad). - - If you are managing your own token instances outside of "currentAccessToken", you will need to set - "currentAccessToken" before calling logIn* to authorize further permissions on your tokens. - */ -@interface FBSDKLoginManager : NSObject - -/** - Auth type - */ -@property (strong, nonatomic) NSString *authType; -/** - the default audience. - - you should set this if you intend to ask for publish permissions. - */ -@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; - -/** - the login behavior - */ -@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; - -/** - -@warning use logInWithReadPermissions:fromViewController:handler: instead - */ -- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler -__attribute__ ((deprecated("use logInWithReadPermissions:fromViewController:handler: instead"))); - -/** - -@warning use logInWithPublishPermissions:fromViewController:handler: instead - */ -- (void)logInWithPublishPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler -__attribute__ ((deprecated("use logInWithPublishPermissions:fromViewController:handler: instead"))); - -/** - Logs the user in or authorizes additional permissions. - @param permissions the optional array of permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param fromViewController the view controller to present from. If nil, the topmost view controller will be - automatically determined as best as possible. - @param handler the callback. - - Use this method when asking for read permissions. You should only ask for permissions when they - are needed and explain the value to the user. You can inspect the result.declinedPermissions to also - provide more information to the user if they decline permissions. - - This method will present UI the user. You typically should check if `[FBSDKAccessToken currentAccessToken]` - already contains the permissions you need before asking to reduce unnecessary app switching. For example, - you could make that check at viewDidLoad. - You can only do one login call at a time. Calling a login method before the completion handler is called - on a previous login will return an error. - */ -- (void)logInWithReadPermissions:(NSArray *)permissions - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerRequestTokenHandler)handler; - -/** - Logs the user in or authorizes additional permissions. - @param permissions the optional array of permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param fromViewController the view controller to present from. If nil, the topmost view controller will be - automatically determined as best as possible. - @param handler the callback. - - Use this method when asking for publish permissions. You should only ask for permissions when they - are needed and explain the value to the user. You can inspect the result.declinedPermissions to also - provide more information to the user if they decline permissions. - - This method will present UI the user. You typically should check if `[FBSDKAccessToken currentAccessToken]` - already contains the permissions you need before asking to reduce unnecessary app switching. For example, - you could make that check at viewDidLoad. - You can only do one login call at a time. Calling a login method before the completion handler is called - on a previous login will return an error. - */ -- (void)logInWithPublishPermissions:(NSArray *)permissions - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerRequestTokenHandler)handler; - -/** - Logs the user out - - This calls [FBSDKAccessToken setCurrentAccessToken:nil] and [FBSDKProfile setCurrentProfile:nil]. - */ -- (void)logOut; - -/** - @method - - Issues an asynchronous renewCredentialsForAccount call to the device's Facebook account store. - - @param handler The completion handler to call when the renewal is completed. This can be invoked on an arbitrary thread. - - - This can be used to explicitly renew account credentials and is provided as a convenience wrapper around - `[ACAccountStore renewCredentialsForAccount:completion]`. Note the method will not issue the renewal call if the the - Facebook account has not been set on the device, or if access had not been granted to the account (though the handler - wil receive an error). - - If the `[FBSDKAccessToken currentAccessToken]` was from the account store, a succesful renewal will also set - a new "currentAccessToken". - */ -+ (void)renewSystemCredentials:(void (^)(ACAccountCredentialRenewResult result, NSError *error))handler; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManagerLoginResult.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManagerLoginResult.h deleted file mode 100644 index edd7be6e42..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginManagerLoginResult.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKAccessToken; - -/** - Describes the result of a login attempt. - */ -@interface FBSDKLoginManagerLoginResult : NSObject - -/** - the access token. - */ -@property (copy, nonatomic) FBSDKAccessToken *token; - -/** - whether the login was cancelled by the user. - */ -@property (readonly, nonatomic) BOOL isCancelled; - -/** - the set of permissions granted by the user in the associated request. - - inspect the token's permissions set for a complete list. - */ -@property (copy, nonatomic) NSSet *grantedPermissions; - -/** - the set of permissions declined by the user in the associated request. - - inspect the token's permissions set for a complete list. - */ -@property (copy, nonatomic) NSSet *declinedPermissions; - -/** - Initializes a new instance. - @param token the access token - @param isCancelled whether the login was cancelled by the user - @param grantedPermissions the set of granted permissions - @param declinedPermissions the set of declined permissions - */ -- (instancetype)initWithToken:(FBSDKAccessToken *)token - isCancelled:(BOOL)isCancelled - grantedPermissions:(NSSet *)grantedPermissions - declinedPermissions:(NSSet *)declinedPermissions -NS_DESIGNATED_INITIALIZER; -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginTooltipView.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginTooltipView.h deleted file mode 100644 index 179219710d..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKLoginTooltipView.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@protocol FBSDKLoginTooltipViewDelegate; - -/** - - Represents a tooltip to be displayed next to a Facebook login button - to highlight features for new users. - - - The `FBSDKLoginButton` may display this view automatically. If you do - not use the `FBSDKLoginButton`, you can manually call one of the `present*` methods - as appropriate and customize behavior via `FBSDKLoginTooltipViewDelegate` delegate. - - By default, the `FBSDKLoginTooltipView` is not added to the superview until it is - determined the app has migrated to the new login experience. You can override this - (e.g., to test the UI layout) by implementing the delegate or setting `forceDisplay` to YES. - - */ -@interface FBSDKLoginTooltipView : FBSDKTooltipView - -/** the delegate */ -@property (nonatomic, weak) id delegate; - -/** if set to YES, the view will always be displayed and the delegate's - `loginTooltipView:shouldAppear:` will NOT be called. */ -@property (nonatomic, assign) BOOL forceDisplay; - -@end - -/** - @protocol - - The `FBSDKLoginTooltipViewDelegate` protocol defines the methods used to receive event - notifications from `FBSDKLoginTooltipView` objects. - */ -@protocol FBSDKLoginTooltipViewDelegate - -@optional - -/** - Asks the delegate if the tooltip view should appear - - @param view The tooltip view. - @param appIsEligible The value fetched from the server identifying if the app - is eligible for the new login experience. - - - Use this method to customize display behavior. - */ -- (BOOL)loginTooltipView:(FBSDKLoginTooltipView *)view shouldAppear:(BOOL)appIsEligible; - -/** - Tells the delegate the tooltip view will appear, specifically after it's been - added to the super view but before the fade in animation. - - @param view The tooltip view. - */ -- (void)loginTooltipViewWillAppear:(FBSDKLoginTooltipView *)view; - -/** - Tells the delegate the tooltip view will not appear (i.e., was not - added to the super view). - - @param view The tooltip view. - */ -- (void)loginTooltipViewWillNotAppear:(FBSDKLoginTooltipView *)view; - - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKTooltipView.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKTooltipView.h deleted file mode 100644 index d77392cfd1..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Headers/FBSDKTooltipView.h +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - FBSDKTooltipViewArrowDirection enum - - Passed on construction to determine arrow orientation. - */ -typedef NS_ENUM(NSUInteger, FBSDKTooltipViewArrowDirection) -{ - /** View is located above given point, arrow is pointing down. */ - FBSDKTooltipViewArrowDirectionDown = 0, - /** View is located below given point, arrow is pointing up. */ - FBSDKTooltipViewArrowDirectionUp = 1, -}; - -/** - FBSDKTooltipColorStyle enum - - Passed on construction to determine color styling. - */ -typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) -{ - /** Light blue background, white text, faded blue close button. */ - FBSDKTooltipColorStyleFriendlyBlue = 0, - /** Dark gray background, white text, light gray close button. */ - FBSDKTooltipColorStyleNeutralGray = 1, -}; - -/** - - Tooltip bubble with text in it used to display tips for UI elements, - with a pointed arrow (to refer to the UI element). - - - - The tooltip fades in and will automatically fade out. See `displayDuration`. - */ -@interface FBSDKTooltipView : UIView - -/** - Gets or sets the amount of time in seconds the tooltip should be displayed. - Set this to zero to make the display permanent until explicitly dismissed. - Defaults to six seconds. - */ -@property (nonatomic, assign) CFTimeInterval displayDuration; - -/** - Gets or sets the color style after initialization. - Defaults to value passed to -initWithTagline:message:colorStyle:. - */ -@property (nonatomic, assign) FBSDKTooltipColorStyle colorStyle; - -/** - Gets or sets the message. - */ -@property (nonatomic, copy) NSString *message; - -/** - Gets or sets the optional phrase that comprises the first part of the label (and is highlighted differently). - */ -@property (nonatomic, copy) NSString *tagline; - -/** - Designated initializer. - - @param tagline First part of the label, that will be highlighted with different color. Can be nil. - - @param message Main message to display. - - @param colorStyle Color style to use for tooltip. - - - - If you need to show a tooltip for login, consider using the `FBSDKLoginTooltipView` view. - - - @see FBSDKLoginTooltipView - */ -- (instancetype)initWithTagline:(NSString *)tagline message:(NSString *)message colorStyle:(FBSDKTooltipColorStyle)colorStyle; - -/** - Show tooltip at the top or at the bottom of given view. - Tooltip will be added to anchorView.window.rootViewController.view - - @param anchorView view to show at, must be already added to window view hierarchy, in order to decide - where tooltip will be shown. (If there's not enough space at the top of the anchorView in window bounds - - tooltip will be shown at the bottom of it) - - - - Use this method to present the tooltip with automatic positioning or - use -presentInView:withArrowPosition:direction: for manual positioning - If anchorView is nil or has no window - this method does nothing. - */ -- (void)presentFromView:(UIView *)anchorView; - -/** - Adds tooltip to given view, with given position and arrow direction. - - @param view View to be used as superview. - - @param arrowPosition Point in view's cordinates, where arrow will be pointing - - @param arrowDirection whenever arrow should be pointing up (message bubble is below the arrow) or - down (message bubble is above the arrow). - */ -- (void)presentInView:(UIView *)view withArrowPosition:(CGPoint)arrowPosition direction:(FBSDKTooltipViewArrowDirection)arrowDirection; - -/** - Remove tooltip manually. - - - - Calling this method isn't necessary - tooltip will dismiss itself automatically after the `displayDuration`. - */ -- (void)dismiss; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Info.plist deleted file mode 100644 index 8c557fd44b..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Modules/module.modulemap deleted file mode 100644 index 4b1d57bd38..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKLoginKit.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBSDKLoginKit { - umbrella header "FBSDKLoginKit.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/FBSDKPlacesKit b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/FBSDKPlacesKit deleted file mode 100755 index 66d476491e..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/FBSDKPlacesKit and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKit.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKit.h deleted file mode 100644 index bdf7646ce8..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKit.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKitConstants.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKitConstants.h deleted file mode 100644 index 62b04f77ff..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesKitConstants.h +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - These are the fields currently exposed by FBSDKPlacesKit. They map to the fields on - Place objects returned by the Graph API, which can be found here: - https://developers.facebook.com/docs/places. Should fields be added to the Graph API in - the future, you can use strings found in the online documenation in addition to - these string constants. - */ - -/** - Field Key for information about the Place. - */ -extern NSString *const FBSDKPlacesFieldKeyAbout; - -/** - Field Key for AppLinks for the Place. - */ -extern NSString *const FBSDKPlacesFieldKeyAppLinks; - -/** - Field Key for the Place's categories. - */ -extern NSString *const FBSDKPlacesFieldKeyCategories; - -/** - Field Key for the number of checkins at the Place. - */ -extern NSString *const FBSDKPlacesFieldKeyCheckins; - -/** - Field Key for the confidence level for a current place estimate candidate. - */ -extern NSString *const FBSDKPlacesFieldKeyConfidence; - -/** - Field Key for the Place's cover photo. Note that this is not the actual photo data, - but rather URLs and other metadata. - */ -extern NSString *const FBSDKPlacesFieldKeyCoverPhoto; - -/** - Field Key for the description of the Place. - */ -extern NSString *const FBSDKPlacesFieldKeyDescription; - -/** - Field Key for the social sentence and like count information for this place. This is - the same information used for the Like button. - */ -extern NSString *const FBSDKPlacesFieldKeyEngagement; - -/** - Field Key for hour ranges for when the Place is open. Each day can have two different - hours ranges. The keys in the dictionary are in the form of {day}_{number}_{status}. - {day} should be the first 3 characters of the day of the week, {number} should be - either 1 or 2 to allow for the two different hours ranges per day. {status} should be - either open or close, to delineate the start or end of a time range. An example would - be mon_1_open with value 17:00 and mon_1_close with value 21:15 which would represent - a single opening range of 5 PM to 9:15 PM on Mondays. You can find an example of hours - being parsed out in the Sample App. - */ -extern NSString *const FBSDKPlacesFieldKeyHours; - -/** - Field Key for a value indicating whether this place is always open. - */ -extern NSString *const FBSDKPlacesFieldKeyIsAlwaysOpen; - -/** - Field Key for a value indicating whether this place is permanently closed. - */ -extern NSString *const FBSDKPlacesFieldKeyIsPermanentlyClosed; - -/** - Pages with a large number of followers can be manually verified by Facebook as having an - authentic identity. This field indicates whether the page is verified by this process. - */ -extern NSString *const FBSDKPlacesFieldKeyIsVerified; - -/** - Field Key for address and latitude/longitude information for the place. - */ -extern NSString *const FBSDKPlacesFieldKeyLocation; - -/** - Field Key for a link to Place's Facebook page. - */ -extern NSString *const FBSDKPlacesFieldKeyLink; - -/** - Field Key for the name of the place. - */ -extern NSString *const FBSDKPlacesFieldKeyName; - -/** - Field Key for the overall page rating based on rating surveys from users on a scale - from 1-5. This value is normalized, and is not guaranteed to be a strict average of - user ratings. - */ -extern NSString *const FBSDKPlacesFieldKeyOverallStarRating; - -/** - Field Key for the Facebook Page information. - */ -extern NSString *const FBSDKPlacesFieldKeyPage; - -/** - Field Key for PageParking information for the Place. - */ -extern NSString *const FBSDKPlacesFieldKeyParking; - -/** - Field Key for available payment options. - */ -extern NSString *const FBSDKPlacesFieldKeyPaymentOptions; - -/** - Field Key for the unique Facebook ID of the place. - */ -extern NSString *const FBSDKPlacesFieldKeyPlaceID; - -/** - Field Key for the Place's phone number. - */ -extern NSString *const FBSDKPlacesFieldKeyPhone; - -/** - Field Key for the Place's photos. Note that this is not the actual photo data, but - rather URLs and other metadata. - */ -extern NSString *const FBSDKPlacesFieldKeyPhotos; - -/** - Field Key for the price range of the business, expressed as a string. Applicable to - Restaurants or Nightlife. Can be one of $ (0-10), $$ (10-30), $$$ (30-50), $$$$ (50+), - or Unspecified. - */ -extern NSString *const FBSDKPlacesFieldKeyPriceRange; - -/** - Field Key for the Place's profile photo. Note that this is not the actual photo data, - but rather URLs and other metadata. - */ -extern NSString *const FBSDKPlacesFieldKeyProfilePhoto; - -/** - Field Key for the number of ratings for the place. - */ -extern NSString *const FBSDKPlacesFieldKeyRatingCount; - -/** - Field Key for restaurant services e.g: delivery, takeout. - */ -extern NSString *const FBSDKPlacesFieldKeyRestaurantServices; - -/** - Field Key for restaurant specialties. - */ -extern NSString *const FBSDKPlacesFieldKeyRestaurantSpecialties; - -/** - Field Key for the address in a single line. - */ -extern NSString *const FBSDKPlacesFieldKeySingleLineAddress; - -/** - Field Key for the string of the Place's website URL. - */ -extern NSString *const FBSDKPlacesFieldKeyWebsite; - -/** - Field Key for the Workflows. - */ -extern NSString *const FBSDKPlacesFieldKeyWorkflows; - -/** - Response Key for the place's city field. - */ -extern NSString *const FBSDKPlacesResponseKeyCity; - -/** - Response Key for the place's city ID field. - */ -extern NSString *const FBSDKPlacesResponseKeyCityID; - -/** - Response Key for the place's country field. - */ -extern NSString *const FBSDKPlacesResponseKeyCountry; - -/** - Response Key for the place's country code field. - */ -extern NSString *const FBSDKPlacesResponseKeyCountryCode; - -/** - Response Key for the place's latitude field. - */ -extern NSString *const FBSDKPlacesResponseKeyLatitude; - -/** - Response Key for the place's longitude field. - */ -extern NSString *const FBSDKPlacesResponseKeyLongitude; - -/** - Response Key for the place's region field. - */ -extern NSString *const FBSDKPlacesResponseKeyRegion; - -/** - Response Key for the place's region ID field. - */ -extern NSString *const FBSDKPlacesResponseKeyRegionID; - -/** - Response Key for the place's state field. - */ -extern NSString *const FBSDKPlacesResponseKeyState; - -/** - Response Key for the place's street field. - */ -extern NSString *const FBSDKPlacesResponseKeyStreet; - -/** - Response Key for the place's zip code field. - */ -extern NSString *const FBSDKPlacesResponseKeyZip; - -/** - Response Key for the categories that this place matched. - To be used on the search request if the categories parameter is specified. - */ -extern NSString *const FBSDKPlacesResponseKeyMatchedCategories; - -/** - Response Key for the photo source dictionary. - */ -extern NSString *const FBSDKPlacesResponseKeyPhotoSource; - -/** - Response Key for response data. - */ -extern NSString *const FBSDKPlacesResponseKeyData; - -/** - Response Key for a URL. - */ -extern NSString *const FBSDKPlacesResponseKeyUrl; - -/** - Parameter Key for the current place summary. - */ -extern NSString *const FBSDKPlacesParameterKeySummary; - -/** - Summary Key for the current place tracking ID. - */ -extern NSString *const FBSDKPlacesSummaryKeyTracking; - -/** - The level of confidence the Facebook SDK has that a Place is the correct one for the - user's current location. - - - FBSDKPlaceLocationConfidenceNotApplicable: Used to indicate that any level is - acceptable as a minimum threshold - - FBSDKPlaceLocationConfidenceLow: Low confidence level. - - FBSDKPlaceLocationConfidenceMedium: Medium confidence level. - - FBSDKPlaceLocationConfidenceHigh: High confidence level. - */ -typedef NS_ENUM(NSInteger) { - FBSDKPlaceLocationConfidenceNotApplicable, - FBSDKPlaceLocationConfidenceLow, - FBSDKPlaceLocationConfidenceMedium, - FBSDKPlaceLocationConfidenceHigh -} FBSDKPlaceLocationConfidence; diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesManager.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesManager.h deleted file mode 100644 index 7e67f1d127..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Headers/FBSDKPlacesManager.h +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 "FBSDKPlacesKitConstants.h" - -/** - Completion block for aysnchronous place request generation. - - @param graphRequest An `FBSDKGraphRequest` with the parameters supplied to the - original method call. - - @param location A CLLocation representing the current location of the device at the time - of the method call, which you can cache for later use. - - @param error An error indicating a failure in a location services request. - */ -typedef void (^FBSDKPlaceGraphRequestCompletion)(FBSDKGraphRequest *_Nullable graphRequest, CLLocation *_Nullable location, NSError *_Nullable error); - -/** - Completion block for aysnchronous current place request generation. - - @param graphRequest An `FBSDKGraphRequest` with the parameters supplied to the - original method call. - - @param error An error indicating a failure in a location services request. - */ -typedef void (^FBSDKCurrentPlaceGraphRequestCompletion)(FBSDKGraphRequest *_Nullable graphRequest, NSError *_Nullable error); - -/** - `FBSDKPlacesManager` provides methods for searching for nearby places, as well as for - determining the current place where a person might be. - - To use some features of the `FBSDKPlacesManager`, your app must be configured to allow - either the `CoreLocation` permission for `kCLAuthorizationStatusAuthorizedWhenInUse`, - or for `kCLAuthorizationStatusAuthorizedAlways`. For information about enabling these - for your app, see: - https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html. - */ -@interface FBSDKPlacesManager : NSObject - - -/** - Method for generating a graph request for searching the Places Graph using the device's - current location. This is an asynchronous call, due to the need to fetch the current - location from the device. - - @param searchTerm The term to search for in the Places Graph. - - @param categories The categories for the place. Each string in this array must be a - category recognized by the SDK. See `FBSDKPlacesKitConstants.h` for the categories - exposed by the SDK, and see https://developers.facebook.com/docs/places/web/search#categories - for the most up to date list. - - @param fields A list of fields that you might want the request to return. See - `FBSDKPlacesKitConstants.h` for the fields exposed by the SDK, and see - https://developers.facebook.com/docs/places/fields" for the most up to date list. - - @param distance The search radius. For an unlimited radius, use 0. - - @param cursor A pagination cursor. - - @param completion An `FBSDKPlaceGraphRequestCompletion` block. Note that this block will - return the location, which you can choose to cache and use on calls to the synchronous - `placesGraphRequestForLocation` method. - */ -- (void)generatePlaceSearchRequestForSearchTerm:(nullable NSString *)searchTerm - categories:(nullable NSArray *)categories - fields:(nullable NSArray *)fields - distance:(CLLocationDistance)distance - cursor:(nullable NSString *)cursor - completion:(nonnull FBSDKPlaceGraphRequestCompletion)completion; - -/** - Method for generating a graph request for searching the Places API. - - @param location The location for the search. If you do not wish to provide a location, - you must provide a search term. - - @param searchTerm The term to search the Places Graph for. - - @param categories The categories of the place. Each string in this array must be a - category recognized by the SDK. See `FBSDKPlacesKitConstants.h` for the categories - exposed by the SDK, and see https://developers.facebook.com/docs/places/web/search#categories - for the most up to date list. - - @param fields A list of fields that you might want the request to return. See - `FBSDKPlacesKitConstants.h` for the fields exposed by the SDK, and see https://developers.facebook.com/docs/places/fields - for the most up to date list. - - @param distance The search radius. For an unlimited radius, use 0. - - @param cursor A pagination cursor - - @return An `FBSDKGraphRequest` for the given parameters. - */ -- (nullable FBSDKGraphRequest *)placeSearchRequestForLocation:(nullable CLLocation *)location - searchTerm:(nullable NSString *)searchTerm - categories:(nullable NSArray *)categories - fields:(nullable NSArray *)fields - distance:(CLLocationDistance)distance - cursor:(nullable NSString *)cursor; - -/** - Method for generating a graph request to query for places the device is likely - located in. This is an asynchronous call, due to the need to fetch the current location - from the device. Note that the results of the graph request are improved if the user has - both Wi-Fi and Bluetooth enabled. - - @param minimumConfidence The Minimum Confidence level place estimate candidates must meet. - - @param fields A list of fields that you might want the request to return. See - `FBSDKPlacesKitConstants.h` for the fields exposed by the SDK, and see https://developers.facebook.com/docs/places/fields - for the most up to date list. - - @param completion A `FBSDKCurrentPlaceGraphRequestCompletion` block, that contains the graph request. - */ -- (void)generateCurrentPlaceRequestWithMinimumConfidenceLevel:(FBSDKPlaceLocationConfidence)minimumConfidence - fields:(nullable NSArray *)fields - completion:(nonnull FBSDKCurrentPlaceGraphRequestCompletion)completion; - -/** - Method for generating a graph request to query for places the device is likely - located in. This method allows the user to pass in a CLLocation, as the above method - can be real-world slow at obtaining a location from device (on the order of multiple - seconds). This is still an asynchronous call, as the bluetooth scan still needs to - happen, however it is relatively fast (0.5 seconds). Note that the results of the - graph request are improved if the user has both Wi-Fi and Bluetooth enabled. - - @param currentLocation The current location of the device. If the location passed in here - isn't actually the current location, accuracy of results will be diminished. - - @param minimumConfidence The Minimum Confidence level place estimate candidates must meet. - - @param fields A list of fields that you might want the request to return. See - `FBSDKPlacesKitConstants.h` for the fields exposed by the SDK, and see https://developers.facebook.com/docs/places/fields - for the most up to date list. - - @param completion A `FBSDKCurrentPlaceGraphRequestCompletion` block, that contains the graph request. - */ -- (void)generateCurrentPlaceRequestForCurrentLocation:(nonnull CLLocation *)currentLocation - withMinimumConfidenceLevel:(FBSDKPlaceLocationConfidence)minimumConfidence - fields:(nullable NSArray *)fields - completion:(nonnull FBSDKCurrentPlaceGraphRequestCompletion)completion; - -/** - Method for generating a graph request to provide feedback to the Places Graph about - the accuracy of current place estimate candidates. We'd very much appreciate it if - you'd give us feedback about our current place results. If a user indicates that a place - returned by a current place estimate either is, or is not where they currently are, - then this method generates a graph request to allow you to pass that feedback back to us. - - @param placeID The place ID returned by the current place request. - - @param tracking The tracking value returned by the current place request. - - @param wasHere A boolean value indicating whether the user is actually at the place. - - @return An `FBSDKGraphRequest` for the given parameters. - */ -- (nonnull FBSDKGraphRequest *)currentPlaceFeedbackRequestForPlaceID:(nonnull NSString *)placeID - tracking:(nonnull NSString *)tracking - wasHere:(BOOL)wasHere; - -/** - Method for generating a graph request to fetch additional information for a given place. - - @param placeID The ID of the place. - - @param fields A list of fields that you might want the request to return. See - `FBSDKPlacesKitConstants.h` for the fields exposed by the SDK, and see https://developers.facebook.com/docs/places/fields - for the most up to date list. - - @return An `FBSDKGraphRequest` for the given parameters. - */ -- (nonnull FBSDKGraphRequest *)placeInfoRequestForPlaceID:(nonnull NSString *)placeID - fields:(nullable NSArray *)fields; - - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Info.plist deleted file mode 100644 index 487c5162be..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Modules/module.modulemap deleted file mode 100644 index 095ee38ca8..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKPlacesKit.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBSDKPlacesKit { - umbrella header "FBSDKPlacesKit.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/FBSDKShareKit b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/FBSDKShareKit deleted file mode 100755 index 3050170af1..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/FBSDKShareKit and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupAddDialog.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupAddDialog.h deleted file mode 100644 index a0ee6341ca..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupAddDialog.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@protocol FBSDKAppGroupAddDialogDelegate; - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -__attribute__ ((deprecated)) -@interface FBSDKAppGroupAddDialog : NSObject - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -+ (instancetype)showWithContent:(FBSDKAppGroupContent *)content - delegate:(id)delegate __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -@property (nonatomic, weak) id delegate __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -@property (nonatomic, copy) FBSDKAppGroupContent *content __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (BOOL)canShow __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (BOOL)show __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef __attribute__ ((deprecated)); - -@end - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -__attribute__ ((deprecated)) -@protocol FBSDKAppGroupAddDialogDelegate - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (void)appGroupAddDialog:(FBSDKAppGroupAddDialog *)appGroupAddDialog didCompleteWithResults:(NSDictionary *)results __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (void)appGroupAddDialog:(FBSDKAppGroupAddDialog *)appGroupAddDialog didFailWithError:(NSError *)error __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (void)appGroupAddDialogDidCancel:(FBSDKAppGroupAddDialog *)appGroupAddDialog __attribute__ ((deprecated)); - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupContent.h deleted file mode 100644 index abf91aa72f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupContent.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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_ENUM(NSUInteger, FBSDKAppGroupPrivacy) - Specifies the privacy of a group. - */ -typedef NS_ENUM(NSUInteger, FBSDKAppGroupPrivacy) -{ - /** Anyone can see the group, who's in it and what members post. */ - FBSDKAppGroupPrivacyOpen = 0, - /** Anyone can see the group and who's in it, but only members can see posts. */ - FBSDKAppGroupPrivacyClosed, -}; - -/** - Converts an FBSDKAppGroupPrivacy to an NSString. - */ -FBSDK_EXTERN NSString *NSStringFromFBSDKAppGroupPrivacy(FBSDKAppGroupPrivacy privacy); - -/** - A model for creating an app group. - */ -@interface FBSDKAppGroupContent : NSObject - -/** - The description of the group. - */ -@property (nonatomic, copy) NSString *groupDescription; - -/** - The name of the group. - */ -@property (nonatomic, copy) NSString *name; - -/** - The privacy for the group. - */ -@property (nonatomic, assign) FBSDKAppGroupPrivacy privacy; - -/** - Compares the receiver to another app group content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToAppGroupContent:(FBSDKAppGroupContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupJoinDialog.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupJoinDialog.h deleted file mode 100644 index ecb6d046ed..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppGroupJoinDialog.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@protocol FBSDKAppGroupJoinDialogDelegate; - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -__attribute__ ((deprecated)) -@interface FBSDKAppGroupJoinDialog : NSObject - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -+ (instancetype)showWithGroupID:(NSString *)groupID - delegate:(id)delegate __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. */ -@property (nonatomic, weak) id delegate __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. */ -@property (nonatomic, copy) NSString *groupID __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (BOOL)canShow __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (BOOL)show __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef __attribute__ ((deprecated)); - -@end - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -__attribute__ ((deprecated)) -@protocol FBSDKAppGroupJoinDialogDelegate - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (void)appGroupJoinDialog:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog didCompleteWithResults:(NSDictionary *)results __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (void)appGroupJoinDialog:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog didFailWithError:(NSError *)error __attribute__ ((deprecated)); - -/** - -@warning App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. - */ -- (void)appGroupJoinDialogDidCancel:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog __attribute__ ((deprecated)); - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteContent.h deleted file mode 100644 index b57d923d51..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteContent.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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_ENUM(NSUInteger, FBSDKAppInviteDestination) - Specifies the privacy of a group. - */ -typedef NS_ENUM(NSUInteger, FBSDKAppInviteDestination) -{ - /** Deliver to Facebook. */ - FBSDKAppInviteDestinationFacebook = 0, - /** Deliver to Messenger. */ - FBSDKAppInviteDestinationMessenger, -}; - -/** - A model for app invite. - */ -@interface FBSDKAppInviteContent : NSObject - -/** - A URL to a preview image that will be displayed with the app invite - - - This is optional. If you don't include it a fallback image will be used. -*/ -@property (nonatomic, copy) NSURL *appInvitePreviewImageURL; - -/** - An app link target that will be used as a target when the user accept the invite. - - - This is a requirement. - */ -@property (nonatomic, copy) NSURL *appLinkURL; - -/** - -@warning Use `appInvitePreviewImageURL` instead. - */ -@property (nonatomic, copy) NSURL *previewImageURL __attribute__ ((deprecated("use appInvitePreviewImageURL instead"))); - -/** - Promotional code to be displayed while sending and receiving the invite. - - - This is optional. This can be between 0 and 10 characters long and can contain - alphanumeric characters only. To set a promo code, you need to set promo text. - */ -@property (nonatomic, copy) NSString *promotionCode; - -/** - Promotional text to be displayed while sending and receiving the invite. - - - This is optional. This can be between 0 and 80 characters long and can contain - alphanumeric and spaces only. - */ -@property (nonatomic, copy) NSString *promotionText; - -/** - Destination for the app invite. - - - This is optional and for declaring destination of the invite. - */ -@property FBSDKAppInviteDestination destination; - -/** - Compares the receiver to another app invite content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToAppInviteContent:(FBSDKAppInviteContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteDialog.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteDialog.h deleted file mode 100644 index c340ec8b92..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKAppInviteDialog.h +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@protocol FBSDKAppInviteDialogDelegate; - -/** - A dialog for sending App Invites. - */ -@interface FBSDKAppInviteDialog : NSObject - -/** - Convenience method to show a FBSDKAppInviteDialog - @param viewController A UIViewController to present the dialog from. - @param content The content for the app invite. - @param delegate The receiver's delegate. - @warning This method is deprecated. - */ -+ (instancetype)showFromViewController:(UIViewController *)viewController - withContent:(FBSDKAppInviteContent *)content - delegate:(id)delegate -__attribute__ ((deprecated("App Invites no longer supported"))); - - -/** - - @warning use showFromViewController:withContent:delegate: instead - */ -+ (instancetype)showWithContent:(FBSDKAppInviteContent *)content delegate:(id)delegate -__attribute__ ((deprecated("use showFromViewController:withContent:delegate: instead"))); - -/** - A UIViewController to present the dialog from. - - If not specified, the top most view controller will be automatically determined as best as possible. - */ -@property (nonatomic, weak) UIViewController *fromViewController; - -/** - The receiver's delegate or nil if it doesn't have a delegate. - */ -@property (nonatomic, weak) id delegate; - -/** - The content for app invite. - */ -@property (nonatomic, copy) FBSDKAppInviteContent *content; - -/** - A Boolean value that indicates whether the receiver can initiate an app invite. - - May return NO if the appropriate Facebook app is not installed and is required or an access token is - required but not available. This method does not validate the content on the receiver, so this can be checked before - building up the content. - - @see validateWithError: - @return YES if the receiver can show the dialog, otherwise NO. - */ -- (BOOL)canShow; - -/** - Begins the app invite from the receiver. - @return YES if the receiver was able to show the dialog, otherwise NO. - */ -- (BOOL)show; - -/** - Validates the content on the receiver. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return YES if the content is valid, otherwise NO. - */ -- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef; - -@end - -/** - A delegate for FBSDKAppInviteDialog. - - The delegate is notified with the results of the app invite as long as the application has permissions to - receive the information. For example, if the person is not signed into the containing app, the shower may not be able - to distinguish between completion of an app invite and cancellation. - */ -@protocol FBSDKAppInviteDialogDelegate - -/** - Sent to the delegate when the app invite completes without error. - @param appInviteDialog The FBSDKAppInviteDialog that completed. - @param results The results from the dialog. This may be nil or empty. - */ -- (void)appInviteDialog:(FBSDKAppInviteDialog *)appInviteDialog didCompleteWithResults:(NSDictionary *)results; - -/** - Sent to the delegate when the app invite encounters an error. - @param appInviteDialog The FBSDKAppInviteDialog that completed. - @param error The error. - */ -- (void)appInviteDialog:(FBSDKAppInviteDialog *)appInviteDialog didFailWithError:(NSError *)error; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectArguments.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectArguments.h deleted file mode 100644 index 6306f47fe1..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectArguments.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - * A container of arguments for a camera effect. - * An argument is a NSString identified by a NSString key. - */ -@interface FBSDKCameraEffectArguments : NSObject - -/** - Sets a string argument in the container. - @param string The argument - @param key The key for the argument - */ -- (void)setString:(NSString *)string forKey:(NSString *)key; - -/** - Gets a string argument from the container. - @param key The key for the argument - @return The string value or nil - */ -- (NSString *)stringForKey:(NSString *)key; - -/** - Sets a string array argument in the container. - @param array The array argument - @param key The key for the argument - */ -- (void)setArray:(NSArray *)array forKey:(NSString *)key; - -/** - Gets an array argument from the container. - @param key The key for the argument - @return The array argument - */ -- (NSArray *)arrayForKey:(NSString *)key; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectTextures.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectTextures.h deleted file mode 100644 index 9639b5094c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKCameraEffectTextures.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - * A container of textures for a camera effect. - * A texture for a camera effect is an UIImages identified by a NSString key. - */ -@interface FBSDKCameraEffectTextures : NSObject - -/** - Sets the image for a texture key. - @param image The UIImage for the texture - @param key The key for the texture - */ -- (void)setImage:(UIImage *)image forKey:(NSString *)key; - -/** - Gets the image for a texture key. - @param key The key for the texture - @return The texture UIImage or nil - */ -- (UIImage *)imageForKey:(NSString *)key; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestContent.h deleted file mode 100644 index 01d9480080..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestContent.h +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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_ENUM(NSUInteger, FBSDKGameRequestActionType) - Additional context about the nature of the request. - */ -typedef NS_ENUM(NSUInteger, FBSDKGameRequestActionType) -{ - /** No action type */ - FBSDKGameRequestActionTypeNone = 0, - /** Send action type: The user is sending an object to the friends. */ - FBSDKGameRequestActionTypeSend, - /** Ask For action type: The user is asking for an object from friends. */ - FBSDKGameRequestActionTypeAskFor, - /** Turn action type: It is the turn of the friends to play against the user in a match. (no object) */ - FBSDKGameRequestActionTypeTurn, -}; - -/** - NS_ENUM(NSUInteger, FBSDKGameRequestFilters) - Filter for who can be displayed in the multi-friend selector. - */ -typedef NS_ENUM(NSUInteger, FBSDKGameRequestFilter) -{ - /** No filter, all friends can be displayed. */ - FBSDKGameRequestFilterNone = 0, - /** Friends using the app can be displayed. */ - FBSDKGameRequestFilterAppUsers, - /** Friends not using the app can be displayed. */ - FBSDKGameRequestFilterAppNonUsers, -}; - -/** - A model for a game request. - */ -@interface FBSDKGameRequestContent : NSObject - -/** - Used when defining additional context about the nature of the request. - - The parameter 'objectID' is required if the action type is either - 'FBSDKGameRequestSendActionType' or 'FBSDKGameRequestAskForActionType'. - -- SeeAlso:objectID - */ -@property (nonatomic, assign) FBSDKGameRequestActionType actionType; - -/** - Compares the receiver to another game request content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToGameRequestContent:(FBSDKGameRequestContent *)content; - -/** - Additional freeform data you may pass for tracking. This will be stored as part of - the request objects created. The maximum length is 255 characters. - */ -@property (nonatomic, copy) NSString *data; - -/** - This controls the set of friends someone sees if a multi-friend selector is shown. - It is FBSDKGameRequestNoFilter by default, meaning that all friends can be shown. - If specify as FBSDKGameRequestAppUsersFilter, only friends who use the app will be shown. - On the other hands, use FBSDKGameRequestAppNonUsersFilter to filter only friends who do not use the app. - - The parameter name is preserved to be consistent with the counter part on desktop. - */ -@property (nonatomic, assign) FBSDKGameRequestFilter filters; - -/** - A plain-text message to be sent as part of the request. This text will surface in the App Center view - of the request, but not on the notification jewel. Required parameter. - */ -@property (nonatomic, copy) NSString *message; - -/** - The Open Graph object ID of the object being sent. - -- SeeAlso:actionType - */ -@property (nonatomic, copy) NSString *objectID; - -/** - An array of user IDs, usernames or invite tokens (NSString) of people to send request. - - These may or may not be a friend of the sender. If this is specified by the app, - the sender will not have a choice of recipients. If not, the sender will see a multi-friend selector - - This is equivalent to the "to" parameter when using the web game request dialog. - */ -@property (nonatomic, copy) NSArray *recipients; - -/** - An array of user IDs that will be included in the dialog as the first suggested friends. - Cannot be used together with filters. - - This is equivalent to the "suggestions" parameter when using the web game request dialog. -*/ -@property (nonatomic, copy) NSArray *recipientSuggestions; - -/** - -@warning Use `recipientSuggestions` instead. -*/ -@property (nonatomic, copy) NSArray *suggestions __attribute__ ((deprecated("use recipientSuggestions instead"))); - -/** - The title for the dialog. - */ -@property (nonatomic, copy) NSString *title; - -/** - -@warning Use `recipients` instead. - */ -@property (nonatomic, copy) NSArray *to __attribute__ ((deprecated("use recipients instead"))); - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestDialog.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestDialog.h deleted file mode 100644 index 0a48afa47b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKGameRequestDialog.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@protocol FBSDKGameRequestDialogDelegate; - -/** - A dialog for sending game requests. - */ -@interface FBSDKGameRequestDialog : NSObject - -/** - Convenience method to build up a game request with content and a delegate. - @param content The content for the game request. - @param delegate The receiver's delegate. - */ -+ (instancetype)showWithContent:(FBSDKGameRequestContent *)content delegate:(id)delegate; - -/** - The receiver's delegate or nil if it doesn't have a delegate. - */ -@property (nonatomic, weak) id delegate; - -/** - The content for game request. - */ -@property (nonatomic, copy) FBSDKGameRequestContent *content; - -/** - Specifies whether frictionless requests are enabled. - */ -@property (nonatomic, assign) BOOL frictionlessRequestsEnabled; - -/** - A Boolean value that indicates whether the receiver can initiate a game request. - - May return NO if the appropriate Facebook app is not installed and is required or an access token is - required but not available. This method does not validate the content on the receiver, so this can be checked before - building up the content. - - @see validateWithError: - @return YES if the receiver can share, otherwise NO. - */ -- (BOOL)canShow; - -/** - Begins the game request from the receiver. - @return YES if the receiver was able to show the dialog, otherwise NO. - */ -- (BOOL)show; - -/** - Validates the content on the receiver. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return YES if the content is valid, otherwise NO. - */ -- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef; - -@end - -/** - A delegate for FBSDKGameRequestDialog. - - The delegate is notified with the results of the game request as long as the application has permissions to - receive the information. For example, if the person is not signed into the containing app, the shower may not be able - to distinguish between completion of a game request and cancellation. - */ -@protocol FBSDKGameRequestDialogDelegate - -/** - Sent to the delegate when the game request completes without error. - @param gameRequestDialog The FBSDKGameRequestDialog that completed. - @param results The results from the dialog. This may be nil or empty. - */ -- (void)gameRequestDialog:(FBSDKGameRequestDialog *)gameRequestDialog didCompleteWithResults:(NSDictionary *)results; - -/** - Sent to the delegate when the game request encounters an error. - @param gameRequestDialog The FBSDKGameRequestDialog that completed. - @param error The error. - */ -- (void)gameRequestDialog:(FBSDKGameRequestDialog *)gameRequestDialog didFailWithError:(NSError *)error; - -/** - Sent to the delegate when the game request dialog is cancelled. - @param gameRequestDialog The FBSDKGameRequestDialog that completed. - */ -- (void)gameRequestDialogDidCancel:(FBSDKGameRequestDialog *)gameRequestDialog; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKHashtag.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKHashtag.h deleted file mode 100644 index 552880cb3e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKHashtag.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Represents a single hashtag that can be used with the share dialog. - */ -@interface FBSDKHashtag : NSObject - -/** - Convenience method to build a new hashtag with a string identifier. Equivalent to setting the - `stringRepresentation` property. - @param hashtagString The hashtag string. - */ -+ (instancetype)hashtagWithString:(NSString *)hashtagString; - -/** - The hashtag string. - - You are responsible for making sure that `stringRepresentation` is a valid hashtag (a single '#' followed - by one or more word characters). Invalid hashtags are ignored when sharing content. You can check validity with the - `valid` property. - @return The hashtag string. - */ -@property (nonatomic, readwrite, copy) NSString *stringRepresentation; - -/** - Tests if a hashtag is valid. - - A valid hashtag matches the regular expression "#\w+": A single '#' followed by one or more - word characters. - @return YES if the hashtag is valid, NO otherwise. - */ -@property (nonatomic, readonly, assign, getter=isValid) BOOL valid; - -/** - Compares the receiver to another hashtag. - @param hashtag The other hashtag - @return YES if the receiver is equal to the other hashtag; otherwise NO - */ -- (BOOL)isEqualToHashtag:(FBSDKHashtag *)hashtag; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeButton.h deleted file mode 100644 index 191c033658..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeButton.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Warning: This class is deprecated. - A button to like an object. - - Tapping the receiver will invoke an API call to the Facebook app through a fast-app-switch that allows - the object to be liked. Upon return to the calling app, the view will update with the new state. If the - currentAccessToken has "publish_actions" permission and the object is an Open Graph object, then the like can happen - seamlessly without the fast-app-switch. - */ -__attribute__ ((deprecated)) -@interface FBSDKLikeButton : FBSDKButton - -/** - If YES, a sound is played when the receiver is toggled. - - @default YES - */ -@property (nonatomic, assign, getter = isSoundEnabled) BOOL soundEnabled; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeControl.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeControl.h deleted file mode 100644 index ea942e86d9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeControl.h +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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_ENUM (NSUInteger, FBSDKLikeControlAuxiliaryPosition) - - Specifies the position of the auxiliary view relative to the like button. - */ -typedef NS_ENUM(NSUInteger, FBSDKLikeControlAuxiliaryPosition) -{ - /** The auxiliary view is inline with the like button. */ - FBSDKLikeControlAuxiliaryPositionInline, - /** The auxiliary view is above the like button. */ - FBSDKLikeControlAuxiliaryPositionTop, - /** The auxiliary view is below the like button. */ - FBSDKLikeControlAuxiliaryPositionBottom, -}; - -/** - Converts an FBSDKLikeControlAuxiliaryPosition to an NSString. - */ -FBSDK_EXTERN NSString *NSStringFromFBSDKLikeControlAuxiliaryPosition(FBSDKLikeControlAuxiliaryPosition auxiliaryPosition); - -/** - NS_ENUM(NSUInteger, FBSDKLikeControlHorizontalAlignment) - - Specifies the horizontal alignment for FBSDKLikeControlStyleStandard with - FBSDKLikeControlAuxiliaryPositionTop or FBSDKLikeControlAuxiliaryPositionBottom. - */ -typedef NS_ENUM(NSUInteger, FBSDKLikeControlHorizontalAlignment) -{ - /** The subviews are left aligned. */ - FBSDKLikeControlHorizontalAlignmentLeft, - /** The subviews are center aligned. */ - FBSDKLikeControlHorizontalAlignmentCenter, - /** The subviews are right aligned. */ - FBSDKLikeControlHorizontalAlignmentRight, -}; - -/** - Converts an FBSDKLikeControlHorizontalAlignment to an NSString. - */ -FBSDK_EXTERN NSString *NSStringFromFBSDKLikeControlHorizontalAlignment(FBSDKLikeControlHorizontalAlignment horizontalAlignment); - -/** - NS_ENUM (NSUInteger, FBSDKLikeControlStyle) - - Specifies the style of a like control. - */ -typedef NS_ENUM(NSUInteger, FBSDKLikeControlStyle) -{ - /** Displays the button and the social sentence. */ - FBSDKLikeControlStyleStandard = 0, - /** Displays the button and a box that contains the like count. */ - FBSDKLikeControlStyleBoxCount, -}; - -/** - Converts an FBSDKLikeControlStyle to an NSString. - */ -FBSDK_EXTERN NSString *NSStringFromFBSDKLikeControlStyle(FBSDKLikeControlStyle style); - -/** - Warning: This class is deprecated. - UI control to like an object in the Facebook graph. - - - Taps on the like button within this control will invoke an API call to the Facebook app through a - fast-app-switch that allows the user to like the object. Upon return to the calling app, the view will update - with the new state and send actions for the UIControlEventValueChanged event. - */ -__attribute__ ((deprecated)) -@interface FBSDKLikeControl : UIControl - -/** - The foreground color to use for the content of the receiver. - */ -@property (nonatomic, strong) UIColor *foregroundColor; - -/** - The position for the auxiliary view for the receiver. - - - @see FBSDKLikeControlAuxiliaryPosition - */ -@property (nonatomic, assign) FBSDKLikeControlAuxiliaryPosition likeControlAuxiliaryPosition; - -/** - The text alignment of the social sentence. - - - This value is only valid for FBSDKLikeControlStyleStandard with - FBSDKLikeControlAuxiliaryPositionTop|Bottom. - */ -@property (nonatomic, assign) FBSDKLikeControlHorizontalAlignment likeControlHorizontalAlignment; - -/** - The style to use for the receiver. - - - @see FBSDKLikeControlStyle - */ -@property (nonatomic, assign) FBSDKLikeControlStyle likeControlStyle; - -/** - The preferred maximum width (in points) for autolayout. - - - This property affects the size of the receiver when layout constraints are applied to it. During layout, - if the text extends beyond the width specified by this property, the additional text is flowed to one or more new - lines, thereby increasing the height of the receiver. - */ -@property (nonatomic, assign) CGFloat preferredMaxLayoutWidth; - -/** - If YES, a sound is played when the receiver is toggled. - - @default YES - */ -@property (nonatomic, assign, getter = isSoundEnabled) BOOL soundEnabled; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeObjectType.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeObjectType.h deleted file mode 100644 index c52f3022c7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLikeObjectType.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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_ENUM (NSUInteger, FBSDKLikeObjectType) - Specifies the type of object referenced by the objectID for likes. - */ -typedef NS_ENUM(NSUInteger, FBSDKLikeObjectType) -{ - /** The objectID refers to an unknown object type. */ - FBSDKLikeObjectTypeUnknown = 0, - /** The objectID refers to an Open Graph object. */ - FBSDKLikeObjectTypeOpenGraph, - /** The objectID refers to an Page object. */ - FBSDKLikeObjectTypePage, -}; - -/** - Converts an FBLikeControlObjectType to an NSString. - */ -FBSDK_EXTERN NSString *NSStringFromFBSDKLikeObjectType(FBSDKLikeObjectType objectType); diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLiking.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLiking.h deleted file mode 100644 index 57fbd22a77..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKLiking.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 common interface for components that initiate liking. - - @see FBSDKLikeButton - - @see FBSDKLikeControl - */ -@protocol FBSDKLiking - -/** - The objectID for the object to like. - - - This value may be an Open Graph object ID or a string representation of an URL that describes an - Open Graph object. The objects may be public objects, like pages, or objects that are defined by your application. - */ -@property (nonatomic, copy) NSString *objectID; - -/** - The type of object referenced by the objectID. - - - If the objectType is unknown, the control will determine the objectType by querying the server with the - objectID. Specifying a value for the objectType is an optimization that should be used if the type is known by the - consumer. Consider setting the objectType if it is known when setting the objectID. - */ -@property (nonatomic, assign) FBSDKLikeObjectType objectType; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKMessageDialog.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKMessageDialog.h deleted file mode 100644 index 1604f80e8a..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKMessageDialog.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A dialog for sharing content through Messenger. - - SUPPORTED SHARE TYPES - - FBSDKShareLinkContent - - FBSDKShareMessengerOpenGraphMusicTemplateContent - - FBSDKShareMessengerMediaTemplateContent - - FBSDKShareMessengerGenericTemplateContent - - UNSUPPORTED SHARE TYPES (DEPRECATED AUGUST 2018) - - FBSDKShareOpenGraphContent - - FBSDKSharePhotoContent - - FBSDKShareVideoContent - - Any other types that are not one of the four supported types listed above - */ -@interface FBSDKMessageDialog : NSObject - -/** - Convenience method to show a Message Share Dialog with content and a delegate. - @param content The content to be shared. - @param delegate The receiver's delegate. - */ -+ (instancetype)showWithContent:(id)content delegate:(id)delegate; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSendButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSendButton.h deleted file mode 100644 index 8dc40ac8bc..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSendButton.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A button to send content through Messenger. - - Tapping the receiver will invoke the FBSDKShareDialog with the attached shareContent. If the dialog cannot - be shown, the button will be disable. - */ -@interface FBSDKSendButton : FBSDKButton - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareAPI.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareAPI.h deleted file mode 100644 index 5886fdb58b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareAPI.h +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A utility class for sharing through the graph API. Using this class requires an access token that - has been granted the "publish_actions" permission. - - FBSDKShareAPI network requests are scheduled on the current run loop in the default run loop mode - (like NSURLConnection). If you want to use FBSDKShareAPI in a background thread, you must manage the run loop - yourself. - */ -@interface FBSDKShareAPI : NSObject - -/** - Convenience method to build up a share API with content and a delegate. - @param content The content to be shared. - @param delegate The receiver's delegate. - */ -+ (instancetype)shareWithContent:(id)content delegate:(id)delegate; - -/** - The message the person has provided through the custom dialog that will accompany the share content. - */ -@property (nonatomic, copy) NSString *message; - -/** - The graph node to which content should be shared. - */ -@property (nonatomic, copy) NSString *graphNode; - -/** - The access token used when performing a share. The access token must have the "publish_actions" - permission granted. - - Defaults to [FBSDKAccessToken currentAccessToken]. Setting this to nil will revert the access token to - [FBSDKAccessToken currentAccessToken]. - */ -@property (nonatomic, strong) FBSDKAccessToken *accessToken; - -/** - A Boolean value that indicates whether the receiver can send the share. - - May return NO if the appropriate Facebook app is not installed and is required or an access token is - required but not available. This method does not validate the content on the receiver, so this can be checked before - building up the content. - - @see [FBSDKSharing validateWithError:] - @return YES if the receiver can send, otherwise NO. - */ -- (BOOL)canShare; - -/** - Creates an User Owned Open Graph object without an action. - @param openGraphObject The open graph object to create. - - Use this method to create an object alone, when an action is not going to be posted with the object. If - the object will be used within an action, just put the object in the action and share that as the shareContent and the - object will be created in the process. The delegate will be messaged with the results. - - Also see https://developers.facebook.com/docs/sharing/opengraph/object-api#objectapi-creatinguser - - @return YES if the receiver was able to send the request to create the object, otherwise NO. - */ -- (BOOL)createOpenGraphObject:(FBSDKShareOpenGraphObject *)openGraphObject; - -/** - Begins the send from the receiver. - @return YES if the receiver was able to send the share, otherwise NO. - */ -- (BOOL)share; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareButton.h deleted file mode 100644 index c2565db376..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareButton.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A button to share content. - - Tapping the receiver will invoke the FBSDKShareDialog with the attached shareContent. If the dialog cannot - be shown, the button will be disabled. - */ -@interface FBSDKShareButton : FBSDKButton - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareCameraEffectContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareCameraEffectContent.h deleted file mode 100644 index 1309c8df6c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareCameraEffectContent.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A model for content to share with a Facebook camera effect. - */ -@interface FBSDKShareCameraEffectContent : NSObject - -/** - ID of the camera effect to use. - */ -@property (nonatomic, copy) NSString *effectID; - -/** - Arguments for the effect. - */ -@property (nonatomic, copy) FBSDKCameraEffectArguments *effectArguments; - -/** - Textures for the effect. - */ -@property (nonatomic, copy) FBSDKCameraEffectTextures *effectTextures; - -/** - Compares the receiver to another camera effect content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToShareCameraEffectContent:(FBSDKShareCameraEffectContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareConstants.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareConstants.h deleted file mode 100644 index 1d73ecf45e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareConstants.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 error domain for all errors from FBSDKShareKit. - - Error codes from the SDK in the range 200-299 are reserved for this domain. - */ -FBSDK_EXTERN NSString *const FBSDKShareErrorDomain; - -/** - NS_ENUM(NSInteger, FBSDKShareErrorCode) - Error codes for FBSDKShareErrorDomain. - */ -typedef NS_ENUM(NSInteger, FBSDKShareErrorCode) -{ - /** - Reserved. - */ - FBSDKShareReservedErrorCode = 200, - - /** - The error code for errors from uploading open graph objects. - */ - FBSDKShareOpenGraphErrorCode, - - /** - The error code for when a sharing dialog is not available. - - Use the canShare methods to check for this case before calling show. - */ - FBSDKShareDialogNotAvailableErrorCode, - - /** - @The error code for unknown errors. - */ - FBSDKShareUnknownErrorCode, -}; diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialog.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialog.h deleted file mode 100644 index 18c4d3ea2c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialog.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A dialog for sharing content on Facebook. - */ -@interface FBSDKShareDialog : NSObject - -/** - Convenience method to show an FBSDKShareDialog with a fromViewController, content and a delegate. - @param viewController A UIViewController to present the dialog from, if appropriate. - @param content The content to be shared. - @param delegate The receiver's delegate. - */ -+ (instancetype)showFromViewController:(UIViewController *)viewController - withContent:(id)content - delegate:(id)delegate; - -/** - A UIViewController to present the dialog from. - - If not specified, the top most view controller will be automatically determined as best as possible. - */ -@property (nonatomic, weak) UIViewController *fromViewController; - -/** - The mode with which to display the dialog. - - Defaults to FBSDKShareDialogModeAutomatic, which will automatically choose the best available mode. - */ -@property (nonatomic, assign) FBSDKShareDialogMode mode; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialogMode.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialogMode.h deleted file mode 100644 index e7dfabcf9f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareDialogMode.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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_ENUM(NSUInteger, FBSDKShareDialogMode) - Modes for the FBSDKShareDialog. - - The automatic mode will progressively check the availability of different modes and open the most - appropriate mode for the dialog that is available. - */ -typedef NS_ENUM(NSUInteger, FBSDKShareDialogMode) -{ - /** - Acts with the most appropriate mode that is available. - */ - FBSDKShareDialogModeAutomatic = 0, - /** - @Displays the dialog in the main native Facebook app. - */ - FBSDKShareDialogModeNative, - /** - @Displays the dialog in the iOS integrated share sheet. - */ - FBSDKShareDialogModeShareSheet, - /** - @Displays the dialog in Safari. - */ - FBSDKShareDialogModeBrowser, - /** - @Displays the dialog in a UIWebView within the app. - */ - FBSDKShareDialogModeWeb, - /** - @Displays the feed dialog in Safari. - */ - FBSDKShareDialogModeFeedBrowser, - /** - @Displays the feed dialog in a UIWebView within the app. - */ - FBSDKShareDialogModeFeedWeb, -}; - -/** - Converts an FBSDKShareDialogMode to an NSString. - */ -FBSDK_EXTERN NSString *NSStringFromFBSDKShareDialogMode(FBSDKShareDialogMode dialogMode); diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareKit.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareKit.h deleted file mode 100644 index 30e36aa4c2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareKit.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 -#import -#import -#import -#import -#import -#import -#import -#import - -#if !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#else -#import -#import -#endif diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareLinkContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareLinkContent.h deleted file mode 100644 index 0a283775cc..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareLinkContent.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A model for status and link content to be shared. - */ -@interface FBSDKShareLinkContent : NSObject - -/** - The description of the link. - - If not specified, this field is automatically populated by information scraped from the contentURL, - typically the title of the page. This value may be discarded for specially handled links (ex: iTunes URLs). - @return The description of the link - - @deprecated `contentDescription` is deprecated from Graph API 2.9. - For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations. - */ -@property (nonatomic, readonly) NSString *contentDescription - DEPRECATED_MSG_ATTRIBUTE("`contentDescription` is deprecated from Graph API 2.9"); - -/** - The title to display for this link. - - This value may be discarded for specially handled links (ex: iTunes URLs). - @return The link title - - @deprecated `contentTitle` is deprecated from Graph API 2.9. - For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations - */ -@property (nonatomic, readonly) NSString *contentTitle - DEPRECATED_MSG_ATTRIBUTE("`contentTitle` is deprecated from Graph API 2.9"); - -/** - The URL of a picture to attach to this content. - @return The network URL of an image - - @deprecated `imageURL` is deprecated from Graph API 2.9. - For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations - */ -@property (nonatomic, readonly) NSURL *imageURL - DEPRECATED_MSG_ATTRIBUTE("`imageURL` is deprecated from Graph API 2.9"); - -/** - Some quote text of the link. - - If specified, the quote text will render with custom styling on top of the link. - @return The quote text of a link - */ -@property (nonatomic, copy) NSString *quote; - -/** - Compares the receiver to another link content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToShareLinkContent:(FBSDKShareLinkContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMediaContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMediaContent.h deleted file mode 100644 index ab9d895d58..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMediaContent.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A model for media content (photo or video) to be shared. - */ -@interface FBSDKShareMediaContent : NSObject - -/** - Media to be shared. - @return Array of the media (FBSDKSharePhoto or FBSDKShareVideo) - */ -@property (nonatomic, copy) NSArray *media; - -/** - Compares the receiver to another media content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToShareMediaContent:(FBSDKShareMediaContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerActionButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerActionButton.h deleted file mode 100644 index 8b18d07c53..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerActionButton.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A base interface for Messenger share action buttons. - */ -@protocol FBSDKShareMessengerActionButton - -/** - The title displayed to the user for the button. - @return The title for the button. - */ -@property (nonatomic, copy) NSString *title; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateContent.h deleted file mode 100644 index ffc1b7f9fa..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateContent.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKShareMessengerGenericTemplateElement; - -typedef NS_ENUM(NSUInteger, FBSDKShareMessengerGenericTemplateImageAspectRatio) { - FBSDKShareMessengerGenericTemplateImageAspectRatioHorizontal = 0, - FBSDKShareMessengerGenericTemplateImageAspectRatioSquare -}; - -/** - A model for sharing a generic template element to Messenger. This wrapper element allows - specifying whether or not the bubble is sharable and what aspect to render the images. - See https://developers.facebook.com/docs/messenger-platform/send-messages/template/generic - for more details. - */ -@interface FBSDKShareMessengerGenericTemplateContent : NSObject - -/** - This specifies whether or not this generic template message can be shared again after the - initial share. Defaults to false. - */ -@property (nonatomic, assign) BOOL isSharable; - -/** - The aspect ratio for when the image is rendered in the generic template bubble after being - shared. Defaults to horizontal. - */ -@property (nonatomic, assign) FBSDKShareMessengerGenericTemplateImageAspectRatio imageAspectRatio; - -/** - A generic template element with a title, optional subtitle, optional image, etc. Required. - */ -@property (nonatomic, copy) FBSDKShareMessengerGenericTemplateElement *element; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateElement.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateElement.h deleted file mode 100644 index d70dd9631d..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerGenericTemplateElement.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A model for sharing a generic template element to Messenger. This allows specifying title, subtitle, - image, default action, and any other buttons. Title is required. See - https://developers.facebook.com/docs/messenger-platform/send-messages/template/generic for more details. - */ -@interface FBSDKShareMessengerGenericTemplateElement : NSObject - -/** - The rendered title for the shared generic template element. Required. - */ -@property (nonatomic, copy) NSString *title; - -/** - The rendered subtitle for the shared generic template element. Optional. - */ -@property (nonatomic, copy) NSString *subtitle; - -/** - The image url that will be downloaded and rendered at the top of the generic template. Optional. - */ -@property (nonatomic, copy) NSURL *imageURL; - -/** - The default action executed when this shared generic tempate is tapped. Title for this button is ignored. Optional. - */ -@property (nonatomic, copy) id defaultAction; - -/** - This specifies what action button to show below the generic template. Optional. - */ -@property (nonatomic, copy) id button; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerMediaTemplateContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerMediaTemplateContent.h deleted file mode 100644 index 142702d06d..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerMediaTemplateContent.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -typedef NS_ENUM(NSUInteger, FBSDKShareMessengerMediaTemplateMediaType) { - FBSDKShareMessengerMediaTemplateMediaTypeImage = 0, - FBSDKShareMessengerMediaTemplateMediaTypeVideo -}; - -/** - A model for sharing media template content. See - https://developers.facebook.com/docs/messenger-platform/send-messages/template/media for details. - */ -@interface FBSDKShareMessengerMediaTemplateContent : NSObject - -/** - The media type (image or video) for this content. This must match the media type specified in the - attachmentID/mediaURL to avoid an error when sharing. Defaults to image. - */ -@property (nonatomic, assign) FBSDKShareMessengerMediaTemplateMediaType mediaType; - -/** - The attachmentID of the item to share. Optional, but either attachmentID or mediaURL must be specified. - */ -@property (nonatomic, copy, readonly) NSString *attachmentID; - -/** - The Facebook url for this piece of media. External urls will not work; this must be a Facebook url. - See https://developers.facebook.com/docs/messenger-platform/send-messages/template/media for details. - Optional, but either attachmentID or mediaURL must be specified. - */ -@property (nonatomic, copy, readonly) NSURL *mediaURL; - -/** - This specifies what action button to show below the media. Optional. - */ -@property (nonatomic, copy) id button; - -/** - Custom initializer to create media template share with attachment id. - */ -- (instancetype)initWithAttachmentID:(NSString *)attachmentID; - -/** - Custom initializer to create media template share with media url. This must be a Facebook url - and cannot be an external url. - */ -- (instancetype)initWithMediaURL:(NSURL *)mediaURL; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerOpenGraphMusicTemplateContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerOpenGraphMusicTemplateContent.h deleted file mode 100644 index f68f51c4d6..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerOpenGraphMusicTemplateContent.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - This share content allows sharing a bubble that plays songs with Open Graph music. - See https://developers.facebook.com/docs/messenger-platform/send-messages/template/open-graph - for details. Passing property pageID is required for this type of share. - */ -@interface FBSDKShareMessengerOpenGraphMusicTemplateContent : NSObject - -/** - This must be an Open Graph music url. Required. - */ -@property (nonatomic, copy) NSURL *url; - -/** - This specifies what action button to show below the open graph music bubble. Optional. - */ -@property (nonatomic, copy) id button; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerURLActionButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerURLActionButton.h deleted file mode 100644 index 79feadd169..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareMessengerURLActionButton.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -typedef NS_ENUM(NSUInteger, FBSDKShareMessengerURLActionButtonWebviewHeightRatio) { - FBSDKShareMessengerURLActionButtonWebviewHeightRatioFull = 0, - FBSDKShareMessengerURLActionButtonWebviewHeightRatioTall, - FBSDKShareMessengerURLActionButtonWebviewHeightRatioCompact -}; - -/** - A model for a Messenger share URL action button. - */ -@interface FBSDKShareMessengerURLActionButton : NSObject - -/** - The url that this button should open when tapped. Required. - */ -@property (nonatomic, copy) NSURL *url; - -/** - This controls the display height of the webview when shown in the Messenger app. Defaults to Full. - */ -@property (nonatomic, assign) FBSDKShareMessengerURLActionButtonWebviewHeightRatio webviewHeightRatio; - -/** - This must be true if the url is a Messenger Extensions url. Defaults to NO. - */ -@property (nonatomic, assign) BOOL isMessengerExtensionURL; - -/** - This is a fallback url for a Messenger Extensions enabled button. It is used on clients that do not support - Messenger Extensions. If this is not defined, the url will be used as a fallback. Optional, but ignored - unless isMessengerExtensionURL == YES. - */ -@property (nonatomic, copy) NSURL *fallbackURL; - -/** - This controls whether we want to hide the share button in the webview or not. It is useful to hide the share - button when the webview is user-specific and contains sensitive information. Defaults to NO. - */ -@property (nonatomic, assign) BOOL shouldHideWebviewShareButton; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphAction.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphAction.h deleted file mode 100644 index 83e888315f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphAction.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - An Open Graph Action for sharing. - - The property keys MUST have namespaces specified on them, such as `og:image`. - */ -@interface FBSDKShareOpenGraphAction : FBSDKShareOpenGraphValueContainer - -/** - Convenience method to build a new action and set the object for the specified key. - @param actionType The action type of the receiver - @param object The Open Graph object represented by this action - @param key The key for the object - */ -+ (instancetype)actionWithType:(NSString *)actionType object:(FBSDKShareOpenGraphObject *)object key:(NSString *)key; - -/** - Convenience method to build a new action and set the object for the specified key. - @param actionType The action type of the receiver - @param objectID The ID of an existing Open Graph object - @param key The key for the object - */ -+ (instancetype)actionWithType:(NSString *)actionType objectID:(NSString *)objectID key:(NSString *)key; - -/** - Convenience method to build a new action and set the object for the specified key. - @param actionType The action type of the receiver - @param objectURL The URL to a page that defines the Open Graph object with meta tags - @param key The key for the object - */ -+ (instancetype)actionWithType:(NSString *)actionType objectURL:(NSURL *)objectURL key:(NSString *)key; - -/** - Gets the action type. - @return The action type - */ -@property (nonatomic, copy) NSString *actionType; - -/** - Compares the receiver to another Open Graph Action. - @param action The other action - @return YES if the receiver's values are equal to the other action's values; otherwise NO - */ -- (BOOL)isEqualToShareOpenGraphAction:(FBSDKShareOpenGraphAction *)action; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphContent.h deleted file mode 100644 index faed0ba440..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphContent.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A model for Open Graph content to be shared. - */ -@interface FBSDKShareOpenGraphContent : NSObject - -/** - Open Graph Action to be shared. - @return The action - */ -@property (nonatomic, copy) FBSDKShareOpenGraphAction *action; - -/** - Property name that points to the primary Open Graph Object in the action. - - The value that this action points to will be use for rendering the preview for the share. - @return The property name for the Open Graph Object in the action - */ -@property (nonatomic, copy) NSString *previewPropertyName; - -/** - Compares the receiver to another Open Graph content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToShareOpenGraphContent:(FBSDKShareOpenGraphContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphObject.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphObject.h deleted file mode 100644 index ef34e2805c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphObject.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - An Open Graph Object for sharing. - - The property keys MUST have namespaces specified on them, such as `og:image`, - and `og:type` is required. - - See https://developers.facebook.com/docs/sharing/opengraph/object-properties for other properties. - - You can specify nested namespaces inline to define complex properties. For example, the following - code will generate a fitness.course object with a location: - - FBSDKShareOpenGraphObject *course = [FBSDKShareOpenGraphObject objectWithProperties: - @{ - @"og:type": @"fitness.course", - @"og:title": @"Sample course", - @"fitness:metrics:location:latitude": @"41.40338", - @"fitness:metrics:location:longitude": @"2.17403", - }]; - */ -@interface FBSDKShareOpenGraphObject : FBSDKShareOpenGraphValueContainer - -/** - Convenience method to build a new action and set the object for the specified key. - @param properties Properties for the Open Graph object, which will be parsed into the proper models - */ -+ (instancetype)objectWithProperties:(NSDictionary *)properties; - -/** - Compares the receiver to another Open Graph Object. - @param object The other object - @return YES if the receiver's values are equal to the other object's values; otherwise NO - */ -- (BOOL)isEqualToShareOpenGraphObject:(FBSDKShareOpenGraphObject *)object; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphValueContainer.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphValueContainer.h deleted file mode 100644 index 59b16994cc..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareOpenGraphValueContainer.h +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKShareOpenGraphObject; -@class FBSDKSharePhoto; - -/** - Protocol defining operations on open graph actions and objects. - - The property keys MUST have namespaces specified on them, such as `og:image`. - */ -@protocol FBSDKShareOpenGraphValueContaining - -/** - Gets an NSArray out of the receiver. - @param key The key for the value - @return The NSArray value or nil - */ -- (NSArray *)arrayForKey:(NSString *)key; - -/** - Applies a given block object to the entries of the receiver. - @param block A block object to operate on entries in the receiver - */ -- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, id object, BOOL *stop))block; - -/** - Returns an enumerator object that lets you access each key in the receiver. - @return An enumerator object that lets you access each key in the receiver - */ -- (NSEnumerator *)keyEnumerator; - -/** - Gets an NSNumber out of the receiver. - @param key The key for the value - @return The NSNumber value or nil - */ -- (NSNumber *)numberForKey:(NSString *)key; - -/** - Returns an enumerator object that lets you access each value in the receiver. - @return An enumerator object that lets you access each value in the receiver - */ -- (NSEnumerator *)objectEnumerator; - -/** - Gets an FBSDKShareOpenGraphObject out of the receiver. - @param key The key for the value - @return The FBSDKShareOpenGraphObject value or nil - */ -- (FBSDKShareOpenGraphObject *)objectForKey:(NSString *)key; - -/** - Enables subscript access to the values in the receiver. - @param key The key for the value - @return The value - */ -- (id)objectForKeyedSubscript:(NSString *)key; - -/** - Parses properties out of a dictionary into the receiver. - @param properties The properties to parse. - */ -- (void)parseProperties:(NSDictionary *)properties; - -/** - Gets an FBSDKSharePhoto out of the receiver. - @param key The key for the value - @return The FBSDKSharePhoto value or nil - */ -- (FBSDKSharePhoto *)photoForKey:(NSString *)key; - -/** - Removes a value from the receiver for the specified key. - @param key The key for the value - */ -- (void)removeObjectForKey:(NSString *)key; - -/** - Sets an NSArray on the receiver. - - This method will throw if the array contains any values that is not an NSNumber, NSString, NSURL, - FBSDKSharePhoto or FBSDKShareOpenGraphObject. - @param array The NSArray value - @param key The key for the value - */ -- (void)setArray:(NSArray *)array forKey:(NSString *)key; - -/** - Sets an NSNumber on the receiver. - @param number The NSNumber value - @param key The key for the value - */ -- (void)setNumber:(NSNumber *)number forKey:(NSString *)key; - -/** - Sets an FBSDKShareOpenGraphObject on the receiver. - @param object The FBSDKShareOpenGraphObject value - @param key The key for the value - */ -- (void)setObject:(FBSDKShareOpenGraphObject *)object forKey:(NSString *)key; - -/** - Sets an FBSDKSharePhoto on the receiver. - @param photo The FBSDKSharePhoto value - @param key The key for the value - */ -- (void)setPhoto:(FBSDKSharePhoto *)photo forKey:(NSString *)key; - -/** - Sets an NSString on the receiver. - @param string The NSString value - @param key The key for the value - */ -- (void)setString:(NSString *)string forKey:(NSString *)key; - -/** - Sets an NSURL on the receiver. - @param URL The NSURL value - @param key The key for the value - */ -- (void)setURL:(NSURL *)URL forKey:(NSString *)key; - -/** - Gets an NSString out of the receiver. - @param key The key for the value - @return The NSString value or nil - */ -- (NSString *)stringForKey:(NSString *)key; - -/** - Gets an NSURL out of the receiver. - @param key The key for the value - @return The NSURL value or nil - */ -- (NSURL *)URLForKey:(NSString *)key; - -@end - -/** - A base class to container Open Graph values. - */ -@interface FBSDKShareOpenGraphValueContainer : NSObject - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhoto.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhoto.h deleted file mode 100644 index 7f8c2e4190..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhoto.h +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class PHAsset; - -/** - A photo for sharing. - */ -@interface FBSDKSharePhoto : NSObject - -/** - Convenience method to build a new photo object with an image. - @param image If the photo is resident in memory, this method supplies the data - @param userGenerated Specifies whether the photo represented by the receiver was generated by the user or by the - application - */ -+ (instancetype)photoWithImage:(UIImage *)image userGenerated:(BOOL)userGenerated; - -/** - Convenience method to build a new photo object with an imageURL. - @param imageURL The URL to the photo - @param userGenerated Specifies whether the photo represented by the receiver was generated by the user or by the - application - - This method should only be used when adding photo content to open graph stories. - For example, if you're trying to share a photo from the web by itself, download the image and use - `photoWithImage:userGenerated:` instead. - */ -+ (instancetype)photoWithImageURL:(NSURL *)imageURL userGenerated:(BOOL)userGenerated; - -/** - Convenience method to build a new photo object with a PHAsset. - - Parameter photoAsset: The PHAsset that represents the photo in the Photos library. - - Parameter userGenerated: Specifies whether the photo represented by the receiver was generated by the user or by the - application - */ -+ (instancetype)photoWithPhotoAsset:(PHAsset *)photoAsset userGenerated:(BOOL)userGenerated; - -/** - If the photo is resident in memory, this method supplies the data. - @return UIImage representation of the photo - */ -@property (nonatomic, strong) UIImage *image; - -/** - The URL to the photo. - @return URL that points to a network location or the location of the photo on disk - */ -@property (nonatomic, copy) NSURL *imageURL; - -/** - The representation of the photo in the Photos library. - - Returns: PHAsset that represents the photo in the Photos library. - */ -@property (nonatomic, copy) PHAsset *photoAsset; - -/** - Specifies whether the photo represented by the receiver was generated by the user or by the application. - @return YES if the photo is user-generated, otherwise NO - */ -@property (nonatomic, assign, getter=isUserGenerated) BOOL userGenerated; - -/** - Compares the receiver to another photo. - @param photo The other photo - @return YES if the receiver's values are equal to the other photo's values; otherwise NO - */ -- (BOOL)isEqualToSharePhoto:(FBSDKSharePhoto *)photo; - -/** - The user generated caption for the photo. Note that the 'caption' must come from - * the user, as pre-filled content is forbidden by the Platform Policies (2.3). - @return the Photo's caption if exists else returns null. - */ -@property (nonatomic, copy) NSString *caption; - - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhotoContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhotoContent.h deleted file mode 100644 index 427c31572e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharePhotoContent.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A model for photo content to be shared. - */ -@interface FBSDKSharePhotoContent : NSObject - -/** - Photos to be shared. - @return Array of the photos (FBSDKSharePhoto) - */ -@property (nonatomic, copy) NSArray *photos; - -/** - Compares the receiver to another photo content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToSharePhotoContent:(FBSDKSharePhotoContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideo.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideo.h deleted file mode 100644 index a609860fe0..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideo.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKSharePhoto; -@class PHAsset; - -/** - A video for sharing. - */ -@interface FBSDKShareVideo : NSObject - -/** - Convenience method to build a new video object from raw data. - - Parameter data: The NSData object that holds the raw video data. - */ -+ (instancetype)videoWithData:(NSData *)data; - -/** - Convenience method to build a new video object with NSData and a previewPhoto. - - Parameter data: The NSData object that holds the raw video data. - - Parameter previewPhoto: The photo that represents the video. - */ -+ (instancetype)videoWithData:(NSData *)data previewPhoto:(FBSDKSharePhoto *)previewPhoto; - -/** - Convenience method to build a new video object with a PHAsset. - @param videoAsset The PHAsset that represents the video in the Photos library. - */ -+ (instancetype)videoWithVideoAsset:(PHAsset *)videoAsset; - -/** - Convenience method to build a new video object with a PHAsset and a previewPhoto. - @param videoAsset The PHAsset that represents the video in the Photos library. - @param previewPhoto The photo that represents the video. - */ -+ (instancetype)videoWithVideoAsset:(PHAsset *)videoAsset previewPhoto:(FBSDKSharePhoto *)previewPhoto; - -/** - Convenience method to build a new video object with a videoURL. - @param videoURL The URL to the video. - */ -+ (instancetype)videoWithVideoURL:(NSURL *)videoURL; - -/** - Convenience method to build a new video object with a videoURL and a previewPhoto. - @param videoURL The URL to the video. - @param previewPhoto The photo that represents the video. - */ -+ (instancetype)videoWithVideoURL:(NSURL *)videoURL previewPhoto:(FBSDKSharePhoto *)previewPhoto; - -/** - The raw video data. - - Returns: The video data. - */ -@property (nonatomic, strong) NSData *data; - -/** - The representation of the video in the Photos library. - @return PHAsset that represents the video in the Photos library. - */ -@property (nonatomic, copy) PHAsset *videoAsset; - -/** - The file URL to the video. - @return URL that points to the location of the video on disk - */ -@property (nonatomic, copy) NSURL *videoURL; - -/** - The photo that represents the video. - @return The photo - */ -@property (nonatomic, copy) FBSDKSharePhoto *previewPhoto; - -/** - Compares the receiver to another video. - @param video The other video - @return YES if the receiver's values are equal to the other video's values; otherwise NO - */ -- (BOOL)isEqualToShareVideo:(FBSDKShareVideo *)video; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideoContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideoContent.h deleted file mode 100644 index cfbc9cbcca..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKShareVideoContent.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - A model for video content to be shared. - */ -@interface FBSDKShareVideoContent : NSObject - -/** - The photo that represents the video. - @return The photo - */ -@property (nonatomic, copy) FBSDKSharePhoto *previewPhoto; - -/** - The video to be shared. - @return The video - */ -@property (nonatomic, copy) FBSDKShareVideo *video; - -/** - Compares the receiver to another video content. - @param content The other content - @return YES if the receiver's values are equal to the other content's values; otherwise NO - */ -- (BOOL)isEqualToShareVideoContent:(FBSDKShareVideoContent *)content; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharing.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharing.h deleted file mode 100644 index 6174b928b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharing.h +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@protocol FBSDKSharingDelegate; - -/** - The common interface for components that initiate sharing. - - @see FBSDKShareDialog - - @see FBSDKMessageDialog - - @see FBSDKShareAPI - */ -@protocol FBSDKSharing - -/** - The receiver's delegate or nil if it doesn't have a delegate. - */ -@property (nonatomic, weak) id delegate; - -/** - The content to be shared. - */ -@property (nonatomic, copy) id shareContent; - -/** - A Boolean value that indicates whether the receiver should fail if it finds an error with the share content. - - If NO, the sharer will still be displayed without the data that was mis-configured. For example, an - invalid placeID specified on the shareContent would produce a data error. - */ -@property (nonatomic, assign) BOOL shouldFailOnDataError; - -/** - Validates the content on the receiver. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return YES if the content is valid, otherwise NO. - */ -- (BOOL)validateWithError:(NSError **)errorRef; - -@end - -/** - The common interface for dialogs that initiate sharing. - */ -@protocol FBSDKSharingDialog - -/** - A Boolean value that indicates whether the receiver can initiate a share. - - May return NO if the appropriate Facebook app is not installed and is required or an access token is - required but not available. This method does not validate the content on the receiver, so this can be checked before - building up the content. - - @see [FBSDKSharing validateWithError:] - @return YES if the receiver can share, otherwise NO. - */ -- (BOOL)canShow; - -/** - Shows the dialog. - @return YES if the receiver was able to begin sharing, otherwise NO. - */ -- (BOOL)show; - -@end - -/** - A delegate for FBSDKSharing. - - The delegate is notified with the results of the sharer as long as the application has permissions to - receive the information. For example, if the person is not signed into the containing app, the sharer may not be able - to distinguish between completion of a share and cancellation. - */ -@protocol FBSDKSharingDelegate - -/** - Sent to the delegate when the share completes without error or cancellation. - @param sharer The FBSDKSharing that completed. - @param results The results from the sharer. This may be nil or empty. - */ -- (void)sharer:(id)sharer didCompleteWithResults:(NSDictionary *)results; - -/** - Sent to the delegate when the sharer encounters an error. - @param sharer The FBSDKSharing that completed. - @param error The error. - */ -- (void)sharer:(id)sharer didFailWithError:(NSError *)error; - -/** - Sent to the delegate when the sharer is cancelled. - @param sharer The FBSDKSharing that completed. - */ -- (void)sharerDidCancel:(id)sharer; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingButton.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingButton.h deleted file mode 100644 index 13cfc1f503..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingButton.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 common interface for sharing buttons. - - @see FBSDKSendButton - - @see FBSDKShareButton - */ -@protocol FBSDKSharingButton - -/** - The content to be shared. - */ -@property (nonatomic, copy) id shareContent; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingContent.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingContent.h deleted file mode 100644 index 7806f27cd6..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingContent.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -@class FBSDKHashtag; - -/** - A base interface for content to be shared. - */ -@protocol FBSDKSharingContent - -/** - URL for the content being shared. - - This URL will be checked for all link meta tags for linking in platform specific ways. See documentation - for App Links (https://developers.facebook.com/docs/applinks/) - @return URL representation of the content link - */ -@property (nonatomic, copy) NSURL *contentURL; - -/** - Hashtag for the content being shared. - @return The hashtag for the content being shared. - */ -@property (nonatomic, copy) FBSDKHashtag *hashtag; - -/** - List of IDs for taggable people to tag with this content. - See documentation for Taggable Friends - (https://developers.facebook.com/docs/graph-api/reference/user/taggable_friends) - @return Array of IDs for people to tag (NSString) - */ -@property (nonatomic, copy) NSArray *peopleIDs; - -/** - The ID for a place to tag with this content. - @return The ID for the place to tag - */ -@property (nonatomic, copy) NSString *placeID; - -/** - A value to be added to the referrer URL when a person follows a link from this shared content on feed. - @return The ref for the content. - */ -@property (nonatomic, copy) NSString *ref; - -/** - For shares into Messenger, this pageID will be used to map the app to page and attach attribution to the share. - @return The ID of the Facebok page this share is associated with. - */ -@property (nonatomic, copy) NSString *pageID; - -/** - A unique identifier for a share involving this content, useful for tracking purposes. - @return A unique string identifying this share data. - */ -@property (nonatomic, copy, readonly) NSString *shareUUID; - -/** - Adds content to a dictionary as key/value pairs. - - Parameter parameters: A mutable dictionary that may be appended with key/value pairs of content. - */ -- (void)addToParameters:(NSMutableDictionary *)parameters - bridgeOptions:(FBSDKShareBridgeOptions)bridgeOptions; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingScheme.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingScheme.h deleted file mode 100644 index 1d81771d1b..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingScheme.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 "FBSDKShareDialogMode.h" - -/** - A base interface for indicating a custom URL scheme - */ -@protocol FBSDKSharingScheme - -/** - Asks the receiver to provide a custom scheme. - - Parameter mode: The intended dialog mode for sharing the content. - - Returns: A custom URL scheme to use for the specified mode, or nil. - */ -- (nullable NSString *)schemeForMode:(FBSDKShareDialogMode)mode; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingValidation.h b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingValidation.h deleted file mode 100644 index b16454a358..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Headers/FBSDKSharingValidation.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. 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 - -/** - Flags to indicate support for newer bridge options beyond the initial 20130410 implementation. - */ -typedef NS_OPTIONS(NSUInteger, FBSDKShareBridgeOptions) -{ - FBSDKShareBridgeOptionsDefault = 0, - FBSDKShareBridgeOptionsPhotoAsset = 1 << 0, - FBSDKShareBridgeOptionsPhotoImageURL = 1 << 1, // if set, a web-based URL is required; asset, image, and imageURL.isFileURL not allowed - FBSDKShareBridgeOptionsVideoAsset = 1 << 2, - FBSDKShareBridgeOptionsVideoData = 1 << 3, - FBSDKShareBridgeOptionsWebHashtag = 1 << 4, // if set, pass the hashtag as a string value, not an array of one string -}; - -/** - A base interface for validation of content and media. - */ -@protocol FBSDKSharingValidation - -/** - Asks the receiver to validate that its content or media values are valid. - - Parameter errorRef: Optional, will receive an FBSDKShareError if the values are not valid. - - Returns: YES if the receiver's values are valid; otherwise NO - */ -- (BOOL)validateWithOptions:(FBSDKShareBridgeOptions)bridgeOptions error:(NSError *__autoreleasing *)errorRef; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Info.plist deleted file mode 100644 index 81b673c7bc..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Modules/module.modulemap deleted file mode 100644 index faa8711cf9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FBSDKShareKit.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBSDKShareKit { - umbrella header "FBSDKShareKit.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/FacebookCore b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/FacebookCore deleted file mode 100755 index 53d0ea947f..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/FacebookCore and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Headers/FacebookCore-Swift.h b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Headers/FacebookCore-Swift.h deleted file mode 100644 index 73db0e7e71..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Headers/FacebookCore-Swift.h +++ /dev/null @@ -1,192 +0,0 @@ -// Generated by Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if __has_feature(modules) -@import FBSDKCoreKit; -@import Foundation; -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="FacebookCore",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - - - - - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Info.plist deleted file mode 100644 index 8f98d00dd6..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftdoc deleted file mode 100644 index ae8d721bb4..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftmodule deleted file mode 100644 index 2a6a6e4f77..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftdoc deleted file mode 100644 index acd274ccab..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftmodule deleted file mode 100644 index 9bf7825f0b..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/arm64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftdoc deleted file mode 100644 index 643167bdbd..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftmodule deleted file mode 100644 index ac6ee11fbc..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/i386.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftdoc deleted file mode 100644 index d0034b4481..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftmodule deleted file mode 100644 index 1178a10478..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/FacebookCore.swiftmodule/x86_64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/module.modulemap deleted file mode 100644 index 13dcb7ae97..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FacebookCore.framework/Modules/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -framework module FacebookCore { - header "FacebookCore-Swift.h" - requires objc -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/FacebookLogin b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/FacebookLogin deleted file mode 100755 index 831934f7a6..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/FacebookLogin and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Headers/FacebookLogin-Swift.h b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Headers/FacebookLogin-Swift.h deleted file mode 100644 index 853d12221a..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Headers/FacebookLogin-Swift.h +++ /dev/null @@ -1,214 +0,0 @@ -// Generated by Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if __has_feature(modules) -@import CoreGraphics; -@import UIKit; -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="FacebookLogin",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - -@class NSCoder; - -/// A button that initiates a log in or log out flow upon tapping. -/// LoginButton works with AccessToken.current to determine what to display, -/// and automatically starts authentication when tapped (i.e., you do not need to manually subscribe action targets). -/// Like LoginManager, you should make sure your app delegate is connected to ApplicationDelegate -/// in order for the button’s delegate to receive messages. -/// LoginButton has a fixed height of @c 30 pixels, but you may change the width. -/// Initializing the button with nil frame will size the button to its minimum frame. -SWIFT_CLASS("_TtC13FacebookLogin11LoginButton") -@interface LoginButton : UIView -/// Create a new LoginButton from an encoded interface file. -/// \param decoder The coder to initialize from. -/// -- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)decoder OBJC_DESIGNATED_INITIALIZER; -- (void)layoutSubviews; -- (void)sizeToFit; -- (CGSize)sizeThatFits:(CGSize)size SWIFT_WARN_UNUSED_RESULT; -@property (nonatomic, readonly) CGSize intrinsicContentSize; -- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; -@end - - - - - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Info.plist deleted file mode 100644 index 5eaf4038f1..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftdoc deleted file mode 100644 index 203a80d81a..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftmodule deleted file mode 100644 index 3d96d8525c..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftdoc deleted file mode 100644 index 0a47dffb18..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftmodule deleted file mode 100644 index 85bbe0c9cd..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/arm64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftdoc deleted file mode 100644 index 03b64c71a8..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftmodule deleted file mode 100644 index 06f614b8ed..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/i386.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftdoc deleted file mode 100644 index b69a01c80e..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftmodule deleted file mode 100644 index 4e68092cd0..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/FacebookLogin.swiftmodule/x86_64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/module.modulemap deleted file mode 100644 index 5600456333..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FacebookLogin.framework/Modules/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -framework module FacebookLogin { - header "FacebookLogin-Swift.h" - requires objc -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/FacebookShare b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/FacebookShare deleted file mode 100755 index 4e617ae3ee..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/FacebookShare and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Headers/FacebookShare-Swift.h b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Headers/FacebookShare-Swift.h deleted file mode 100644 index 1f11722808..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Headers/FacebookShare-Swift.h +++ /dev/null @@ -1,254 +0,0 @@ -// Generated by Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if __has_feature(modules) -@import CoreGraphics; -@import Foundation; -@import UIKit; -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="FacebookShare",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - -@class NSCoder; - -/// A button to like an object. -/// Tapping the receiver will invoke an API call to the Facebook app through a fast-app-switch that allows -/// the object to be liked. Upon return to the calling app, the view will update with the new state. If the -/// currentAccessToken has “publish_actions” permission and the object is an Open Graph object, then the like can happen -/// seamlessly without the fast-app-switch. -SWIFT_CLASS("_TtC13FacebookShare10LikeButton") SWIFT_DEPRECATED_MSG("FBSDKLikeButton is deprecated") -@interface LikeButton : UIView -/// Create a new LikeButton from an encoded interface file. -/// \param aDecoder The coder to initialize from. -/// -- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER; -/// Performs logic for laying out subviews. -- (void)layoutSubviews; -/// Resizes and moves the receiver view so it just encloses its subviews. -- (void)sizeToFit; -/// Asks the view to calculate and return the size that best fits the specified size. -/// \param size A new size that fits the receiver’s subviews. -/// -/// -/// returns: -/// A new size that fits the receiver’s subviews. -- (CGSize)sizeThatFits:(CGSize)size SWIFT_WARN_UNUSED_RESULT; -/// Returns the natural size for the receiving view, considering only properties of the view itself. -/// -/// returns: -/// A size indicating the natural size for the receiving view based on its intrinsic properties. -@property (nonatomic, readonly) CGSize intrinsicContentSize; -- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; -@end - - -/// UI control to like an object in the Facebook graph. -/// Taps on the like button within this control will invoke an API call to the Facebook app through a fast-app-switch -/// that allows the user to like the object. Upon return to the calling app, the view will update with the new state. -SWIFT_CLASS("_TtC13FacebookShare11LikeControl") SWIFT_DEPRECATED_MSG("FBSDKLikeControl is deprecated") -@interface LikeControl : UIView -/// Create a new LikeControl from an encoded interface file. -/// \param coder The coder to initialize from. -/// -- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER; -/// Performs logic for laying out subviews. -- (void)layoutSubviews; -/// Resizes and moves the receiver view so it just encloses its subviews. -- (void)sizeToFit; -/// Asks the view to calculate and return the size that best fits the specified size. -/// \param size A new size that fits the receiver’s subviews. -/// -/// -/// returns: -/// A new size that fits the receiver’s subviews. -- (CGSize)sizeThatFits:(CGSize)size SWIFT_WARN_UNUSED_RESULT; -/// Returns the natural size for the receiving view, considering only properties of the view itself. -/// -/// returns: -/// A size indicating the natural size for the receiving view based on its intrinsic properties. -@property (nonatomic, readonly) CGSize intrinsicContentSize; -- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; -@end - - - - - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Info.plist deleted file mode 100644 index 609085a363..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftdoc deleted file mode 100644 index 3e8055669e..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftmodule deleted file mode 100644 index f806684676..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftdoc deleted file mode 100644 index 616c04afc5..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftmodule deleted file mode 100644 index a6a61c94c7..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/arm64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftdoc deleted file mode 100644 index 46ade64ccf..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftmodule deleted file mode 100644 index 60d948c9fd..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/i386.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftdoc b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftdoc deleted file mode 100644 index b939610209..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftdoc and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftmodule b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftmodule deleted file mode 100644 index 78deec57f3..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/FacebookShare.swiftmodule/x86_64.swiftmodule and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/module.modulemap deleted file mode 100644 index 173526b67a..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/FacebookShare.framework/Modules/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -framework module FacebookShare { - header "FacebookShare-Swift.h" - requires objc -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWAppDelegate.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWAppDelegate.h deleted file mode 100644 index 82c86a1990..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWAppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// PWAppDelegate.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#import - -/* - Base AppDelegate class for easier integration. - */ -@interface PWAppDelegate : UIResponder - -@property (nonatomic, strong) UIWindow *window; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWGDPRManager.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWGDPRManager.h deleted file mode 100644 index c9210b24d7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWGDPRManager.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// PWGDPRManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#import - -/* - `PWGDPRManager` class offers access to the singleton-instance of the manager responsible for channels management required by GDPR. - */ - -FOUNDATION_EXPORT NSString * const PWGDPRStatusDidChangeNotification; - -@interface PWGDPRManager : NSObject - -/** -Indicates availability of the GDPR compliance solution. -*/ -@property (nonatomic, readonly, getter=isAvailable) BOOL available; - -@property (nonatomic, readonly, getter=isCommunicationEnabled) BOOL communicationEnabled; - -@property (nonatomic, readonly, getter=isDeviceDataRemoved) BOOL deviceDataRemoved; - -+ (instancetype)sharedManager; - -/** - Enable/disable all communication with Pushwoosh. Enabled by default. - */ -- (void)setCommunicationEnabled:(BOOL)enabled completion:(void (^)(NSError *error))completion; - -/** - Removes all device data from Pushwoosh and stops all interactions and communication permanently. - */ -- (void)removeAllDeviceDataWithCompletion:(void (^)(NSError *error))completion; - -- (void)showGDPRConsentUI; - -- (void)showGDPRDeletionUI; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInAppManager.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInAppManager.h deleted file mode 100644 index dfaf01c2f2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInAppManager.h +++ /dev/null @@ -1,140 +0,0 @@ -// -// PWInAppManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2017 -// - -#import - -#if TARGET_OS_IPHONE - -/** - `PWJavaScriptInterface` protocol is a representation of Javascript object that can be added at runtime into In-App Message HTML page - to provide native calls and callbacks to Objective-C/Swift. - - Example: - - ```ObjC - @implementation JavaScriptInterface - - - (void)nativeCall:(NSString*)str :(PWJavaScriptCallback*)callback { - [callback executeWithParam:str]; - } - - @end - - ... - - [[PWInAppManager sharedManager] addJavascriptInterface:[JavaScriptInterface new] withName:@"ObjC"]; - ``` - - ```javascript - ObjC.nativeCall("exampleString", function(str) { - console.log(str); - }); - ``` - */ -@protocol PWJavaScriptInterface - -@optional - -/** - Tells the delegate that In-App Message load stated - */ -- (void)onWebViewStartLoad:(UIWebView*)webView; - -/** - Tells the delegate that In-App Message load finished - */ -- (void)onWebViewFinishLoad:(UIWebView*)webView; - -/** - Tells the delegate that In-App Message is closing - */ -- (void)onWebViewStartClose:(UIWebView*)webView; - -@end - -/** - `PWJavaScriptCallback` is a representation of Javascript function - */ -@interface PWJavaScriptCallback : NSObject - -/** - Invokes callback with no arguments - */ -- (NSString*) execute; - -/** - Invokes callback with one argument - */ -- (NSString*) executeWithParam: (NSString*) param; - -/** - Invokes callback with multiple arguments - */ -- (NSString*) executeWithParams: (NSArray*) params; - -@end - -#endif - - -/* - `PWInAppManager` class offers access to the singleton-instance of the inapp messages manager responsible for sending events and managing inapp message notifications. - */ -@interface PWInAppManager : NSObject - - -+ (instancetype)sharedManager; - -/** - Resets capping of the Pushwoosh out-of-the-box In-App solutions. - */ -- (void)resetBusinessCasesFrequencyCapping; - -/** - Set User indentifier. This could be Facebook ID, username or email, or any other user ID. - This allows data and events to be matched across multiple user devices. - */ -- (void)setUserId:(NSString *)userId; - -/** - Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. - - @param oldUserId source user - @param newUserId destination user - @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId - @param completion callback - */ -- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion; - -/** - Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. - - Example: - - [[PWInAppManager sharedManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; - [[PWInAppManager sharedManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; - - @param event name of the event - @param attributes NSDictionary of event attributes - @param completion function to call after posting event - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion; - -/** - See `postEvent:withAttributes:completion:` - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes; - -#if TARGET_OS_IPHONE - -/** - Adds javascript interface for In-App Messages. Interface will be accessible from javascript as object with specified `name` and functions defined in `interface` class. - */ -- (void)addJavascriptInterface:(NSObject*)interface withName:(NSString*)name; - -#endif - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInbox.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInbox.h deleted file mode 100644 index 8cc23f37aa..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWInbox.h +++ /dev/null @@ -1,127 +0,0 @@ -// -// PWInbox.h -// Pushwoosh SDK -// (c) Pushwoosh 2017 -// - -#import - - -/** - The notification arriving on the Inbox messages renewal - */ -FOUNDATION_EXPORT NSString * const PWInboxMessagesDidUpdateNotification; - -/** - The notification arriving when a push message is added to Inbox - */ -FOUNDATION_EXPORT NSString * const PWInboxMessagesDidReceiveInPushNotification; - -/** - The Inbox message type. Plain = without any action, Richmedia = contains a Rich media page, URL = contains remote URL, Deeplink = contains Deeplink - */ -typedef NS_ENUM(NSInteger, PWInboxMessageType) { - PWInboxMessageTypePlain = 0, - PWInboxMessageTypeRichmedia = 1, - PWInboxMessageTypeURL = 2, - PWInboxMessageTypeDeeplink = 3 -}; - - -/** - `PWInboxMessageProtocol` The protocol describing the Inbox message. - */ -@protocol PWInboxMessageProtocol - -@required - -@property (readonly, nonatomic) NSString *code; -@property (readonly, nonatomic) NSString *title; -@property (readonly, nonatomic) NSString *imageUrl; -@property (readonly, nonatomic) NSString *message; -@property (readonly, nonatomic) NSDate *sendDate; -@property (readonly, nonatomic) PWInboxMessageType type; -//! Inbox Message which is read, see + (void)readMessagesWithCodes:(NSArray *)codes -@property (readonly, nonatomic) BOOL isRead; -//! Action of the Inbox Message is performed (if true, an action was performed in the Inbox see + (void)performActionForMessageWithCode:(NSString *)code or an action was performed on the push tap ) -@property (readonly, nonatomic) BOOL isActionPerformed; - -@end - -@interface PWInbox : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/** - Get the number of the PWInboxMessageProtocol with no action performed - - @param completion - if successful, return the number of the InboxMessages with no action performed. Otherwise, return error - */ -+ (void)messagesWithNoActionPerformedCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; - -/** - Get the number of the unread PWInboxMessageProtocol - - @param completion - if successful, return the number of the unread InboxMessages. Otherwise, return error - */ -+ (void)unreadMessagesCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; - -/** - Get the total number of the PWInboxMessageProtocol - - @param completion - if successful, return the total number of the InboxMessages. Otherwise, return error - */ -+ (void)messagesCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; - -/** - Get the collection of the PWInboxMessageProtocol that the user received - - @param completion - if successful, return the collection of the InboxMessages. Otherwise, return error - */ -+ (void)loadMessagesWithCompletion:(void (^)(NSArray *> *messages, NSError *error))completion; - -/** - Call this method to mark the list of InboxMessageProtocol as read - - @param codes of the inboxMessages - */ -+ (void)readMessagesWithCodes:(NSArray *)codes; - -/** - Call this method, when the user clicks on the InboxMessageProtocol and the message’s action is performed - - @param code of the inboxMessage that the user tapped - */ -+ (void)performActionForMessageWithCode:(NSString *)code; - -/** - Call this method, when the user deletes the list of InboxMessageProtocol manually - - @param codes of the list of InboxMessageProtocol.code that the user deleted - */ -+ (void)deleteMessagesWithCodes:(NSArray *)codes; - -/** - Subscribe for messages arriving with push notifications. @warning You need to unsubscribe by calling the removeObserver method, if you don't want to receive notifications - - @param completion - return the collection of the InboxMessages. - */ -+ (id)addObserverForDidReceiveInPushNotificationCompletion:(void (^)(NSArray *> *messagesAdded))completion; - -/** - Subscribe for messages arriving when a message is deleted, added, or updated. @warning You need to unsubscribe by calling the removeObserver method, if you don't want to receive notifications - - @param completion - return the collection of the InboxMessages. - */ -+ (id)addObserverForUpdateInboxMessagesCompletion:(void (^)(NSArray *messagesDeleted, - NSArray *> *messagesAdded, - NSArray *> *messagesUpdated))completion; - -/** - Unsubscribes from notifications - - @param observer - Unsubscribes observer - */ -+ (void)removeObserver:(id)observer; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWLog.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWLog.h deleted file mode 100644 index 7d83acfa70..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWLog.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// PWLog.h -// Pushwoosh SDK -// (c) Pushwoosh 2016 -// - -#import - -typedef NSString *PWLogLevel NS_EXTENSIBLE_STRING_ENUM; - -extern PWLogLevel const PWLogLevelNone; -extern PWLogLevel const PWLogLevelError; -extern PWLogLevel const PWLogLevelWarning; -extern PWLogLevel const PWLogLevelInfo; -extern PWLogLevel const PWLogLevelDebug; -extern PWLogLevel const PWLogLevelVerbose; - -@interface PWLog : NSObject - -+ (void)setLogsHandler:(void(^)(PWLogLevel level, NSString *description))logsHandler; -+ (void)removeLogsHandler; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWRichMediaManager.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWRichMediaManager.h deleted file mode 100644 index 18e3290466..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PWRichMediaManager.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// PWRichMediaManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#import - -typedef NS_ENUM(NSUInteger, PWRichMediaSource) { - /** - RichMedia is presented from push notification. - */ - PWRichMediaSourcePush, - - /** - RichMedia is presented from In-App. - */ - PWRichMediaSourceInApp -}; - - -/* - `PWRichMedia` class represents Rich Media page object. - */ -@interface PWRichMedia: NSObject - -/** - Rich Media presenter type. - */ -@property (nonatomic, readonly) PWRichMediaSource source; - -/** - Content of the Rich Media. For PWRichMediaSourceInApp it's equal to In-App code, for PWRichMediaSourcePush it's equal to Rich Media code. - */ -@property (nonatomic, readonly) NSString *content; - -/** - Checks if PWRichMediaSourceInApp is a required In-App. Always returns YES for PWRichMediaSourcePush. - */ -@property (nonatomic, readonly, getter=isRequired) BOOL required; - -@end - - -@class PWRichMediaManager; - -/** - Interface for Rich Media presentation managing. - */ -@protocol PWRichMediaPresentingDelegate - -@optional - -/** - Checks the delegate whether the Rich Media should be displayed. - */ -- (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia; - -/** - Tells the delegate that Rich Media has been displayed. - */ -- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia; - -/** - Tells the delegate that Rich Media has been closed. - */ -- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia; - -/** - Tells the delegate that error during Rich Media presenting has been occured. - */ -- (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error; - -@end - - -/* - `PWRichMediaManager` class offers access to the singleton-instance of the manager responsible for Rich Media presentation. - */ -@interface PWRichMediaManager : NSObject - -/** - Delegate for Rich Media presentation managing. - */ -@property (nonatomic) id delegate; - -/** - A singleton object that represents the rich media manager. - */ -+ (instancetype)sharedManager; - -/** - Presents the rich media object. - */ -- (void)presentRichMedia:(PWRichMedia *)richMedia; - -@end - diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PushNotificationManager.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PushNotificationManager.h deleted file mode 100644 index 8874332c1e..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/PushNotificationManager.h +++ /dev/null @@ -1,521 +0,0 @@ -// -// PushNotificationManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2014 -// - -#import - -#if TARGET_OS_IPHONE -#import -#import -#import -#endif - -#define PUSHWOOSH_VERSION @"5.9.0" - - -@class PushNotificationManager; - -#if TARGET_OS_IPHONE -@class CLLocation; -#endif - -typedef void (^PushwooshGetTagsHandler)(NSDictionary *tags); -typedef void (^PushwooshErrorHandler)(NSError *error); - -/** - `PushNotificationDelegate` protocol defines the methods that can be implemented in the delegate of the `PushNotificationManager` class' singleton object. - These methods provide information about the key events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. - These methods implementation allows to react on these events properly. - */ -@protocol PushNotificationDelegate - -@optional -/** - Tells the delegate that the application has registered with Apple Push Service (APS) successfully. - - @param token A token used for identifying the device with APS. - */ -- (void)onDidRegisterForRemoteNotificationsWithDeviceToken:(NSString *)token; - -/** - Sent to the delegate when Apple Push Service (APS) could not complete the registration process successfully. - - @param error An NSError object encapsulating the information about the reason of the registration failure. Within this method you can define application's behaviour in case of registration failure. - */ -- (void)onDidFailToRegisterForRemoteNotificationsWithError:(NSError *)error; - -/** - Tells the delegate that the push manager has received a remote notification. - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. -@param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. - */ -- (void)onPushReceived:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; - -/** - Tells the delegate that the user has pressed OK on the push notification. - IMPORTANT: This method is used for backwards compatibility and is deprecated. Please use the `onPushAccepted:withNotification:onStart:` method instead - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. - Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - */ -- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification DEPRECATED_ATTRIBUTE; - -/** - Tells the delegate that the user has pressed on the push notification banner. - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information about the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. - Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - @param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. - */ -- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; - -/** - Tells the delegate that the push manager has received tags from the server. - - @param tags Dictionary representation of received tags. - Dictionary example: - - { - Country = ru; - Language = ru; - } - - */ -- (void)onTagsReceived:(NSDictionary *)tags; - -/** - Sent to the delegate when push manager could not complete the tags receiving process successfully. - - @param error An NSError object that encapsulates information why receiving tags did not succeed. - */ -- (void)onTagsFailedToReceive:(NSError *)error; - -/** - Tells the delegate that In-App with specified code has been closed - - @param code In-App code - */ -- (void)onInAppClosed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); - -/** - Tells the delegate that In-App with specified code has been displayed - - @param code In-App code - */ -- (void)onInAppDisplayed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); - - -#if TARGET_OS_IPHONE -/** - The method will be called on the delegate when the application is launched in response to the user's request to view in-app notification settings. - Add UNAuthorizationOptionProvidesAppNotificationSettings as an option in [PushNotificationManager pushManager].additionalAuthorizationOptions to add a button to inline notification settings view and the notification settings view in Settings. - The notification will be nil when opened from Settings. - - @param pushManager PushNotificationManager instance - @param notification Source notification - */ -- (void)pushManager:(PushNotificationManager *)pushManager openSettingsForNotification:(UNNotification *)notification __IOS_AVAILABLE(12.0); - -#endif - -@end - -/** - `PWTags` class encapsulates the methods for creating tags parameters for sending them to the server. - */ -@interface PWTags : NSObject - -/** - Creates a dictionary for incrementing/decrementing a numeric tag on the server. - - Example: - - NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: - aliasField.text, @"Alias", - [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", - [PWTags incrementalTagWithInteger:5], @"price", - nil]; - - [[PushNotificationManager pushManager] setTags:tags]; - - @param delta Difference that needs to be applied to the tag's counter. - - @return Dictionary, that needs to be sent as the value for the tag - */ -+ (NSDictionary *)incrementalTagWithInteger:(NSInteger)delta; - -@end - -/** - `PushNotificationManager` class offers access to the singleton-instance of the push manager responsible for registering the device with the APS servers, receiving and processing push notifications. - */ -@interface PushNotificationManager : NSObject { -} - -/** - Pushwoosh Application ID. Usually retrieved automatically from Info.plist parameter `Pushwoosh_APPID` - */ -@property (nonatomic, copy, readonly) NSString *appCode; - -/** - Application name. Usually retrieved automatically from Info.plist bundle name (CFBundleDisplayName). Could be used to override bundle name. In addition could be set in Info.plist as `Pushwoosh_APPNAME` parameter. - */ -@property (nonatomic, copy, readonly) NSString *appName; - -/** - `PushNotificationDelegate` protocol delegate that would receive the information about events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. - Pushwoosh Runtime sets it to ApplicationDelegate by default - */ -@property (nonatomic, weak) NSObject *delegate; - -#if TARGET_OS_IPHONE - -/** - Show push notifications alert when push notification is received while the app is running, default is `YES` - */ -@property (nonatomic, assign) BOOL showPushnotificationAlert; - -/** - Authorization options in addition to UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay. - */ -@property (nonatomic) UNAuthorizationOptions additionalAuthorizationOptions __IOS_AVAILABLE(12.0); - -#endif - -/** - Returns push notification payload if the app was started in response to push notification or null otherwise - */ -@property (nonatomic, copy, readonly) NSDictionary *launchNotification; - -#if TARGET_OS_IPHONE - -/** - Returns UNUserNotificationCenterDelegate that handles foreground push notifications on iOS10 - */ -@property (nonatomic, strong, readonly) id notificationCenterDelegate; - -#else - -@property (nonatomic, strong, readonly) id notificationCenterDelegate; - -#endif - -/** - Initializes PushNotificationManager. Usually called by Pushwoosh Runtime internally. - @param appCode Pushwoosh App ID. - @param appName Application name. - */ -+ (void)initializeWithAppCode:(NSString *)appCode appName:(NSString *)appName; - -/** - Returns an object representing the current push manager. - - @return A singleton object that represents the push manager. - */ -+ (PushNotificationManager *)pushManager; - -/** - Registers for push notifications. By default registeres for "UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert" flags. - Automatically detects if you have "newsstand-content" in "UIBackgroundModes" and adds "UIRemoteNotificationTypeNewsstandContentAvailability" flag. - */ -- (void)registerForPushNotifications; - -/** - Unregisters from push notifications. - */ -- (void)unregisterForPushNotificationsWithCompletion:(void (^)(NSError *error))completion; - -/** - Deprecated. Use unregisterForPushNotificationsWithCompletion: method instead - */ -- (void)unregisterForPushNotifications __attribute__((deprecated)); - -/** - Deprecated. Use initializeWithAppCode:appName: method instead - */ -- (instancetype)initWithApplicationCode:(NSString *)appCode appName:(NSString *)appName __attribute__((deprecated)); - -#if TARGET_OS_IPHONE - -/** - Deprecated. Use initializeWithAppCode:appName: method instead - */ -- (id)initWithApplicationCode:(NSString *)appCode navController:(UIViewController *)navController appName:(NSString *)appName __attribute__((deprecated)); - -/** - Sends geolocation to the server for GeoFencing push technology. Called internally, please use `startLocationTracking` and `stopLocationTracking` functions. - - @param location Location to be sent. - */ -- (void)sendLocation:(CLLocation *)location; - -/** - Start location tracking. - */ -- (void)startLocationTracking; - -/** - Stops location tracking - */ -- (void)stopLocationTracking; - -#endif - -/** - Send tags to server. Tag names have to be created in the Pushwoosh Control Panel. Possible tag types: Integer, String, Incremental (integer only), List tags (array of values). - - Example: - - NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: - aliasField.text, @"Alias", - [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", - [PWTags incrementalTagWithInteger:5], @"price", - [NSArray arrayWithObjects:@"Item1", @"Item2", @"Item3", nil], @"List", - nil]; - - [[PushNotificationManager pushManager] setTags:tags]; - - @param tags Dictionary representation of tags to send. - */ -- (void)setTags:(NSDictionary *)tags; - -/** - Send tags to server with completion block. If setTags succeeds competion is called with nil argument. If setTags fails completion is called with error. - */ -- (void)setTags:(NSDictionary *)tags withCompletion:(void (^)(NSError *error))completion; - -/** - Get tags from the server. Calls delegate method `onTagsReceived:` or `onTagsFailedToReceive:` depending on the results. - */ -- (void)loadTags; - -/** - Get tags from server. Calls delegate method if exists and handler (block). - - @param successHandler The block is executed on the successful completion of the request. This block has no return value and takes one argument: the dictionary representation of the recieved tags. - Example of the dictionary representation of the received tags: - - { - Country = ru; - Language = ru; - } - - @param errorHandler The block is executed on the unsuccessful completion of the request. This block has no return value and takes one argument: the error that occurred during the request. - */ -- (void)loadTags:(PushwooshGetTagsHandler)successHandler error:(PushwooshErrorHandler)errorHandler; - -/** - Informs the Pushwoosh about the app being launched. Usually called internally by SDK Runtime. - */ -- (void)sendAppOpen; - -/** - Sends current badge value to server. Called internally by SDK Runtime when `UIApplication` `setApplicationBadgeNumber:` is set. This function is used for "auto-incremeting" badges to work. - This way Pushwoosh server can know what current badge value is set for the application. - - @param badge Current badge value. - */ -- (void)sendBadges:(NSInteger)badge; - -+ (NSString *)pushwooshVersion; - -#if TARGET_OS_IPHONE -/** - Sends in-app purchases to Pushwoosh. Use in paymentQueue:updatedTransactions: payment queue method (see example). - - Example: - - - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { - [[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions]; - } - - @param transactions Array of SKPaymentTransaction items as received in the payment queue. - */ -- (void)sendSKPaymentTransactions:(NSArray *)transactions; -#endif - -/** - Tracks individual in-app purchase. See recommended `sendSKPaymentTransactions:` method. - - @param productIdentifier purchased product ID - @param price price for the product - @param currencyCode currency of the price (ex: @"USD") - @param date time of the purchase (ex: [NSDate now]) - */ -- (void)sendPurchase:(NSString *)productIdentifier withPrice:(NSDecimalNumber *)price currencyCode:(NSString *)currencyCode andDate:(NSDate *)date; - -/** - Gets current push token. - - @return Current push token. May be nil if no push token is available yet. - */ -- (NSString *)getPushToken; - -/** - Gets HWID. Unique device identifier that used in all API calls with Pushwoosh. - This is identifierForVendor for iOS >= 7. - - @return Unique device identifier. - */ -- (NSString *)getHWID; - -- (void)handlePushRegistration:(NSData *)devToken; -- (void)handlePushRegistrationString:(NSString *)deviceID; - -- (void)handlePushRegistrationFailure:(NSError *)error; - -//If the push is received while the app is running. Call it only for iOS version < 10. For iOS 10 and higher use notificationCenterDelegate. -- (BOOL)handlePushReceived:(NSDictionary *)userInfo; - -/** - Gets APN payload from push notifications dictionary. - - Example: - - - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { - NSDictionary * apnPayload = [[PushNotificationsManager pushManager] getApnPayload:pushNotification]; - NSLog(@"%@", apnPayload); - } - - For Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - Result is: - - { - alert = "Some text."; - sound = default; - }; - - @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` - */ -- (NSDictionary *)getApnPayload:(NSDictionary *)pushNotification; - -/** - Gets custom JSON string data from push notifications dictionary as specified in Pushwoosh Control Panel. - - Example: - - - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { - NSString * customData = [[PushNotificationsManager pushManager] getCustomPushData:pushNotification]; - NSLog(@"%@", customData); - } - - @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` - */ -- (NSString *)getCustomPushData:(NSDictionary *)pushNotification; - -/** - The same as getCustomPushData but returns NSDictionary rather than JSON string (converts JSON string into NSDictionary). - */ -- (NSDictionary *)getCustomPushDataAsNSDict:(NSDictionary *)pushNotification; - -/** - Returns dictionary with enabled remove notificaton types. - Example enabled push: - { - enabled = 1; - pushAlert = 1; - pushBadge = 1; - pushSound = 1; - type = 7; - } - - where "type" field is UIUserNotificationType - - Disabled push: - { - enabled = 1; - pushAlert = 0; - pushBadge = 0; - pushSound = 0; - type = 0; - } - - Note: In the latter example "enabled" field means that device can receive push notification but could not display alerts (ex: silent push) - */ -+ (NSMutableDictionary *)getRemoteNotificationStatus; - -/** - Clears the notifications from the notification center. - */ -+ (void)clearNotificationCenter; - -/** - Set User indentifier. This could be Facebook ID, username or email, or any other user ID. - This allows data and events to be matched across multiple user devices. - - Deprecated. Use PWInAppManager setUserId method instead - */ -- (void)setUserId:(NSString *)userId __attribute__ ((deprecated));; - -/** - Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. - - @param oldUserId source user - @param newUserId destination user - @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId - @param completion callback - - Deprecated. Use PWInAppManager mergeUserId method instead - */ -- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); - -/** - Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. - - Example: - - [[PushNotificationManager pushManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; - [[PushNotificationManager pushManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; - - @param event name of the event - @param attributes NSDictionary of event attributes - @param completion function to call after posting event - - Deprecated. Use PWInAppManager postEvent method instead - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); - -/** - See `postEvent:withAttributes:completion:` - - Deprecated. Use PWInAppManager postEvent method instead - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes __attribute__ ((deprecated)); - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/Pushwoosh.h b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/Pushwoosh.h deleted file mode 100644 index 88d10edd58..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Headers/Pushwoosh.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// Pushwoosh.h -// Pushwoosh SDK -// (c) Pushwoosh 2016 -// - -#import "PushNotificationManager.h" -#import "PWInAppManager.h" -#import "PWLog.h" -#import "PWGDPRManager.h" - -#if TARGET_OS_IPHONE - #import "PWInbox.h" -#endif diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Info.plist deleted file mode 100644 index 74f4810565..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Modules/module.modulemap deleted file mode 100644 index a31d09abdb..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pushwoosh { - umbrella header "Pushwoosh.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Pushwoosh b/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Pushwoosh deleted file mode 100755 index 8f3e816044..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/Pushwoosh.framework/Pushwoosh and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Bolts b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Bolts deleted file mode 100644 index fc0d4f2c4a..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Bolts and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLink.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLink.h deleted file mode 100644 index aa89efc2b9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLink.h +++ /dev/null @@ -1,49 +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 - -/*! The version of the App Link protocol that this library supports */ -FOUNDATION_EXPORT NSString *const BFAppLinkVersion; - -/*! - Contains App Link metadata relevant for navigation on this device - derived from the HTML at a given URL. - */ -@interface BFAppLink : NSObject - -/*! - Creates a BFAppLink with the given list of BFAppLinkTargets and target URL. - - Generally, this will only be used by implementers of the BFAppLinkResolving protocol, - as these implementers will produce App Link metadata for a given URL. - - @param sourceURL the URL from which this App Link is derived - @param targets an ordered list of BFAppLinkTargets for this platform derived - from App Link metadata. - @param webURL the fallback web URL, if any, for the app link. - */ -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(NSURL *)webURL; - -/*! The URL from which this BFAppLink was derived */ -@property (nonatomic, strong, readonly) NSURL *sourceURL; - -/*! - The ordered list of targets applicable to this platform that will be used - for navigation. - */ -@property (nonatomic, copy, readonly) NSArray *targets; - -/*! The fallback web URL to use if no targets are installed on this device. */ -@property (nonatomic, strong, readonly) NSURL *webURL; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkNavigation.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkNavigation.h deleted file mode 100644 index 4b8a71e02f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkNavigation.h +++ /dev/null @@ -1,114 +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 - -/*! - The result of calling navigate on a BFAppLinkNavigation - */ -typedef NS_ENUM(NSInteger, BFAppLinkNavigationType) { - /*! Indicates that the navigation failed and no app was opened */ - BFAppLinkNavigationTypeFailure, - /*! Indicates that the navigation succeeded by opening the URL in the browser */ - BFAppLinkNavigationTypeBrowser, - /*! Indicates that the navigation succeeded by opening the URL in an app on the device */ - BFAppLinkNavigationTypeApp -}; - -@protocol BFAppLinkResolving; -@class BFTask; - -/*! - Represents a pending request to navigate to an App Link. Most developers will - simply use navigateToURLInBackground: to open a URL, but developers can build - custom requests with additional navigation and app data attached to them by - creating BFAppLinkNavigations themselves. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkNavigation : NSObject - -/*! - The extras for the AppLinkNavigation. This will generally contain application-specific - data that should be passed along with the request, such as advertiser or affiliate IDs or - other such metadata relevant on this device. - */ -@property (nonatomic, copy, readonly) NSDictionary *extras; - -/*! - The al_applink_data for the AppLinkNavigation. This will generally contain data common to - navigation attempts such as back-links, user agents, and other information that may be used - in routing and handling an App Link request. - */ -@property (nonatomic, copy, readonly) NSDictionary *appLinkData; - -/*! The AppLink to navigate to */ -@property (nonatomic, strong, readonly) BFAppLink *appLink; - -/*! Creates an AppLinkNavigation with the given link, extras, and App Link data */ -+ (instancetype)navigationWithAppLink:(BFAppLink *)appLink - extras:(NSDictionary *)extras - appLinkData:(NSDictionary *)appLinkData; - -/*! - Creates an NSDictionary with the correct format for iOS callback URLs, - to be used as 'appLinkData' argument in the call to navigationWithAppLink:extras:appLinkData: - */ -+ (NSDictionary *)callbackAppLinkDataForAppWithName:(NSString *)appName url:(NSString *)url; - -/*! Performs the navigation */ -- (BFAppLinkNavigationType)navigate:(NSError **)error; - -/*! Returns a BFAppLink for the given URL */ -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination; - -/*! Returns a BFAppLink for the given URL using the given App Link resolution strategy */ -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination resolver:(id)resolver; - -/*! Navigates to a BFAppLink and returns whether it opened in-app or in-browser */ -+ (BFAppLinkNavigationType)navigateToAppLink:(BFAppLink *)link error:(NSError **)error; - -/*! - Returns a BFAppLinkNavigationType based on a BFAppLink. - It's essentially a no-side-effect version of navigateToAppLink:error:, - allowing apps to determine flow based on the link type (e.g. open an - internal web view instead of going straight to the browser for regular links.) - */ -+ (BFAppLinkNavigationType)navigationTypeForLink:(BFAppLink *)link; - -/*! - Return navigation type for current instance. - No-side-effect version of navigate: - */ -- (BFAppLinkNavigationType)navigationType; - -/*! Navigates to a URL (an asynchronous action) and returns a BFNavigationType */ -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination; - -/*! - Navigates to a URL (an asynchronous action) using the given App Link resolution - strategy and returns a BFNavigationType - */ -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination resolver:(id)resolver; - -/*! - Gets the default resolver to be used for App Link resolution. If the developer has not set one explicitly, - a basic, built-in resolver will be used. - */ -+ (id)defaultResolver; - -/*! - Sets the default resolver to be used for App Link resolution. Setting this to nil will revert the - default resolver to the basic, built-in resolver provided by Bolts. - */ -+ (void)setDefaultResolver:(id)resolver; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkResolving.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkResolving.h deleted file mode 100644 index 5c78bff458..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkResolving.h +++ /dev/null @@ -1,30 +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 BFTask; - -/*! - Implement this protocol to provide an alternate strategy for resolving - App Links that may include pre-fetching, caching, or querying for App Link - data from an index provided by a service provider. - */ -@protocol BFAppLinkResolving - -/*! - Asynchronously resolves App Link data for a given URL. - - @param url The URL to resolve into an App Link. - @returns A BFTask that will return a BFAppLink for the given URL. - */ -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h deleted file mode 100644 index 436c528068..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererController.h +++ /dev/null @@ -1,88 +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 - -@class BFAppLink; -@class BFAppLinkReturnToRefererController; - -/*! - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -@protocol BFAppLinkReturnToRefererControllerDelegate - -@optional - -/*! Called when the user has tapped to navigate, but before the navigation has been performed. */ -- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller - willNavigateToAppLink:(BFAppLink *)appLink; - -/*! Called after the navigation has been attempted, with an indication of whether the referer - app link was successfully opened. */ -- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller - didNavigateToAppLink:(BFAppLink *)url - type:(BFAppLinkNavigationType)type; - -@end - -/*! - A controller class that implements default behavior for a BFAppLinkReturnToRefererView, including - the ability to display the view above the navigation bar for navigation-based apps. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkReturnToRefererController : NSObject - -/*! - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak) id delegate; - -/*! - The BFAppLinkReturnToRefererView this controller is controlling. - */ -@property (nonatomic, strong) BFAppLinkReturnToRefererView *view; - -/*! - Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed - contained within another UIView (i.e., not displayed above the navigation bar). - */ -- (instancetype)init; - -/*! - Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed - displayed above the navigation bar. - */ -- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController; - -/*! - Removes the view entirely from the navigation controller it is currently displayed in. - */ -- (void)removeFromNavController; - -/*! - Shows the BFAppLinkReturnToRefererView with the specified referer information. If nil or missing data, - the view will not be displayed. */ -- (void)showViewForRefererAppLink:(BFAppLink *)refererAppLink; - -/*! - Shows the BFAppLinkReturnToRefererView with referer information extracted from the specified URL. - If nil or missing referer App Link data, the view will not be displayed. */ -- (void)showViewForRefererURL:(NSURL *)url; - -/*! - Closes the view, possibly animating it. - */ -- (void)closeViewAnimated:(BOOL)animated; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h deleted file mode 100644 index f62bc66f6c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkReturnToRefererView.h +++ /dev/null @@ -1,78 +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 - -@class BFAppLinkReturnToRefererView; -@class BFURL; - -typedef NS_ENUM(NSUInteger, BFIncludeStatusBarInSize) { - BFIncludeStatusBarInSizeNever, - BFIncludeStatusBarInSizeIOS7AndLater, - BFIncludeStatusBarInSizeAlways, -}; - -/*! - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -@protocol BFAppLinkReturnToRefererViewDelegate - -/*! - Called when the user has tapped inside the close button. - */ -- (void)returnToRefererViewDidTapInsideCloseButton:(BFAppLinkReturnToRefererView *)view; - -/*! - Called when the user has tapped inside the App Link portion of the view. - */ -- (void)returnToRefererViewDidTapInsideLink:(BFAppLinkReturnToRefererView *)view - link:(BFAppLink *)link; - -@end - -/*! - Provides a UIView that displays a button allowing users to navigate back to the - application that launched the App Link currently being handled, if the App Link - contained referer data. The user can also close the view by clicking a close button - rather than navigating away. If the view is provided an App Link that does not contain - referer data, it will have zero size and no UI will be displayed. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkReturnToRefererView : UIView - -/*! - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak) id delegate; - -/*! - The color of the text label and close button. - */ -@property (nonatomic, strong) UIColor *textColor; - -@property (nonatomic, strong) BFAppLink *refererAppLink; - -/*! - Indicates whether to extend the size of the view to include the current status bar - size, for use in scenarios where the view might extend under the status bar on iOS 7 and - above; this property has no effect on earlier versions of iOS. - */ -@property (nonatomic, assign) BFIncludeStatusBarInSize includeStatusBarInSize; - -/*! - Indicates whether the user has closed the view by clicking the close button. - */ -@property (nonatomic, assign) BOOL closed; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkTarget.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkTarget.h deleted file mode 100644 index 61721269d5..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFAppLinkTarget.h +++ /dev/null @@ -1,33 +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 a target defined in App Link metadata, consisting of at least - a URL, and optionally an App Store ID and name. - */ -@interface BFAppLinkTarget : NSObject - -/*! Creates a BFAppLinkTarget with the given app site and target URL. */ -+ (instancetype)appLinkTargetWithURL:(NSURL *)url - appStoreId:(NSString *)appStoreId - appName:(NSString *)appName; - -/*! The URL prefix for this app link target */ -@property (nonatomic, strong, readonly) NSURL *URL; - -/*! The app ID for the app store */ -@property (nonatomic, copy, readonly) NSString *appStoreId; - -/*! The name of the app */ -@property (nonatomic, copy, readonly) NSString *appName; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationToken.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationToken.h deleted file mode 100644 index bda32ee800..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationToken.h +++ /dev/null @@ -1,42 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - A block that will be called when a token is cancelled. - */ -typedef void(^BFCancellationBlock)(void); - -/*! - 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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenRegistration.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenRegistration.h deleted file mode 100644 index fa6090f667..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenRegistration.h +++ /dev/null @@ -1,29 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - 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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenSource.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenSource.h deleted file mode 100644 index 4627e9958f..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFCancellationTokenSource.h +++ /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 - -NS_ASSUME_NONNULL_BEGIN - -@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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFExecutor.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFExecutor.h deleted file mode 100644 index 694c8a5fc2..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFExecutor.h +++ /dev/null @@ -1,62 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - 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)(void)))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(^)(void))block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFGeneric.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFGeneric.h deleted file mode 100644 index 99b2cf7de7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFGeneric.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 - -#pragma once - -/** - This exists to use along with `BFTask` and `BFTaskCompletionSource`. - - 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 'BFVoid', which will always have a value of `nil`. - - This allows you to provide a more enforced API contract to the caller, - as sending any message to `BFVoid` will result in a compile time error. - */ -@class _BFVoid_Nonexistant; -typedef _BFVoid_Nonexistant *BFVoid; diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFMeasurementEvent.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFMeasurementEvent.h deleted file mode 100644 index b3173fc23c..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFMeasurementEvent.h +++ /dev/null @@ -1,45 +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 - -/*! The name of the notification posted by BFMeasurementEvent */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventNotificationName; - -/*! Defines keys in the userInfo object for the notification named BFMeasurementEventNotificationName */ -/*! The string field for the name of the event */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventNameKey; -/*! The dictionary field for the arguments of the event */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventArgsKey; - -/*! Bolts Events raised by BFMeasurementEvent for Applink */ -/*! - The name of the event posted when [BFURL URLWithURL:] is called successfully. This represents the successful parsing of an app link URL. - */ -FOUNDATION_EXPORT NSString *const BFAppLinkParseEventName; - -/*! - The name of the event posted when [BFURL URLWithInboundURL:] is called successfully. - This represents parsing an inbound app link URL from a different application - */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateInEventName; - -/*! The event raised when the user navigates from your app to other apps */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateOutEventName; - -/*! - The event raised when the user navigates out from your app and back to the referrer app. - e.g when the user leaves your app after tapping the back-to-referrer navigation bar - */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateBackToReferrerEventName; - -@interface BFMeasurementEvent : NSObject - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTask.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTask.h deleted file mode 100644 index 074c182de7..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTask.h +++ /dev/null @@ -1,266 +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 - -NS_ASSUME_NONNULL_BEGIN - -/*! - Error domain used if there was multiple errors on . - */ -extern NSString *const BFTaskErrorDomain; - -/*! - An error code used for , if there were multiple errors. - */ -extern NSInteger const kBFMultipleErrorsError; - -/*! - An error userInfo key used if there were multiple errors on . - Value type is `NSArray *`. - */ -extern NSString *const BFTaskMultipleErrorsUserInfoKey; - -@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<__covariant ResultType> : NSObject - -/*! - A block that can act as a continuation for a task. - */ -typedef __nullable id(^BFContinuationBlock)(BFTask *t); - -/*! - Creates a task that is already completed with the given result. - @param result The result for the task. - */ -+ (instancetype)taskWithResult:(nullable ResultType)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 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:(nullable 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:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once there is at least one successful task. - The first task to successuly complete will set the result, all other tasks results are - ignored. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAnyTask:(nullable 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). - */ -+ (BFTask *)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). - */ -+ (BFTask *)taskWithDelay:(int)millis cancellationToken:(nullable 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:(nullable id (^)(void))block; - -// Properties that will be set on the task once it is completed. - -/*! - The result of a successful task. - */ -@property (nullable, nonatomic, strong, readonly) ResultType result; - -/*! - The error of a failed task. - */ -@property (nullable, nonatomic, strong, readonly) NSError *error; - -/*! - Whether this task has been cancelled. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -/*! - Whether this task has completed due to an error. - */ -@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. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(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. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken NS_SWIFT_NAME(continueWith(block: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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(executor: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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueWith(executor:block:cancellationToken:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(block:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(block:cancellationToken:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or an error. - 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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(executor:block:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation or an error. - 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. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(executor:block: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 - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTaskCompletionSource.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTaskCompletionSource.h deleted file mode 100644 index f94c18fdb5..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFTaskCompletionSource.h +++ /dev/null @@ -1,75 +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 - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask<__covariant ResultType>; - -/*! - 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<__covariant ResultType> : NSObject - -/*! - Creates a new unfinished task. - */ -+ (instancetype)taskCompletionSource; - -/*! - The task associated with this TaskCompletionSource. - */ -@property (nonatomic, strong, readonly) BFTask *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:(nullable ResultType)result NS_SWIFT_NAME(set(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 NS_SWIFT_NAME(set(error:)); - -/*! - 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:(nullable ResultType)result NS_SWIFT_NAME(trySet(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 NS_SWIFT_NAME(trySet(error:)); - -/*! - Sets the cancellation state of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetCancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFURL.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFURL.h deleted file mode 100644 index 924c91d480..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFURL.h +++ /dev/null @@ -1,75 +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 BFAppLink; - -/*! - Provides a set of utilities for working with NSURLs, such as parsing of query parameters - and handling for App Link requests. - */ -@interface BFURL : NSObject - -/*! - Creates a link target from a raw URL. - On success, this posts the BFAppLinkParseEventName measurement event. If you are constructing the BFURL within your application delegate's - application:openURL:sourceApplication:annotation:, you should instead use URLWithInboundURL:sourceApplication: - to support better BFMeasurementEvent notifications - @param url The instance of `NSURL` to create BFURL from. - */ -+ (BFURL *)URLWithURL:(NSURL *)url; - -/*! - Creates a link target from a raw URL received from an external application. This is typically called from the app delegate's - application:openURL:sourceApplication:annotation: and will post the BFAppLinkNavigateInEventName measurement event. - @param url The instance of `NSURL` to create BFURL from. - @param sourceApplication the bundle ID of the app that is requesting your app to open the URL. The same sourceApplication in application:openURL:sourceApplication:annotation: - */ -+ (BFURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; - -/*! - Gets the target URL. If the link is an App Link, this is the target of the App Link. - Otherwise, it is the url that created the target. - */ -@property (nonatomic, strong, readonly) NSURL *targetURL; - -/*! - Gets the query parameters for the target, parsed into an NSDictionary. - */ -@property (nonatomic, strong, readonly) NSDictionary *targetQueryParameters; - -/*! - If this link target is an App Link, this is the data found in al_applink_data. - Otherwise, it is nil. - */ -@property (nonatomic, strong, readonly) NSDictionary *appLinkData; - -/*! - If this link target is an App Link, this is the data found in extras. - */ -@property (nonatomic, strong, readonly) NSDictionary *appLinkExtras; - -/*! - The App Link indicating how to navigate back to the referer app, if any. - */ -@property (nonatomic, strong, readonly) BFAppLink *appLinkReferer; - -/*! - The URL that was used to create this BFURL. - */ -@property (nonatomic, strong, readonly) NSURL *inputURL; - -/*! - The query parameters of the inputURL, parsed into an NSDictionary. - */ -@property (nonatomic, strong, readonly) NSDictionary *inputQueryParameters; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFWebViewAppLinkResolver.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFWebViewAppLinkResolver.h deleted file mode 100644 index 3782ae2cb9..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/BFWebViewAppLinkResolver.h +++ /dev/null @@ -1,26 +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 reference implementation for an App Link resolver that uses a hidden UIWebView - to parse the HTML containing App Link metadata. - */ -@interface BFWebViewAppLinkResolver : NSObject - -/*! - Gets the instance of a BFWebViewAppLinkResolver. - */ -+ (instancetype)sharedInstance; - -@end diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/Bolts.h b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/Bolts.h deleted file mode 100644 index a3f2bd6f29..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Headers/Bolts.h +++ /dev/null @@ -1,39 +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 - -#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#endif - - -NS_ASSUME_NONNULL_BEGIN - -/** - A string containing the version of the Bolts Framework used by the current application. - */ -extern NSString *const BoltsFrameworkVersionString; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Info.plist b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Info.plist deleted file mode 100644 index af7756dacc..0000000000 Binary files a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Modules/module.modulemap b/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Modules/module.modulemap deleted file mode 100644 index 3c92a170fd..0000000000 --- a/iphone/Maps/3party/Carthage/Build/iOS/Static/Bolts.framework/Modules/module.modulemap +++ /dev/null @@ -1,15 +0,0 @@ -framework module Bolts { - umbrella header "Bolts.h" - - export * - module * { export * } - - explicit module BFAppLinkResolving { - header "BFAppLinkResolving.h" - export * - } - explicit module BFWebViewAppLinkResolver { - header "BFWebViewAppLinkResolver.h" - export * - } -} diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index cc3c1a5c00..7ad52ded72 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -142,14 +142,6 @@ 346225921DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 346225901DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib */; }; 3463BA671DE81DB90082417F /* MWMTrafficButtonViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3463BA641DE81DB90082417F /* MWMTrafficButtonViewController.mm */; }; 3463BA691DE81DB90082417F /* MWMTrafficButtonViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3463BA651DE81DB90082417F /* MWMTrafficButtonViewController.xib */; }; - 3466A2C11FB1C734005494D3 /* AppsFlyerTracker.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2BF1FB1C733005494D3 /* AppsFlyerTracker.framework */; }; - 3466A2CB1FB1C83B005494D3 /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2C31FB1C83A005494D3 /* FBSDKCoreKit.framework */; }; - 3466A2CE1FB1C83B005494D3 /* FBSDKLoginKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2C41FB1C83A005494D3 /* FBSDKLoginKit.framework */; }; - 3466A2D11FB1C83B005494D3 /* FBSDKShareKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2C51FB1C83A005494D3 /* FBSDKShareKit.framework */; }; - 3466A2D41FB1C83C005494D3 /* FacebookShare.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2C61FB1C83A005494D3 /* FacebookShare.framework */; }; - 3466A2D71FB1C83C005494D3 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2C71FB1C83B005494D3 /* Bolts.framework */; }; - 3466A2DA1FB1C83C005494D3 /* FacebookCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2C81FB1C83B005494D3 /* FacebookCore.framework */; }; - 3466A2DD1FB1C83C005494D3 /* FacebookLogin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3466A2C91FB1C83B005494D3 /* FacebookLogin.framework */; }; 3467CEB2202C6EEE00D3C670 /* BMCNotificationsHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3467CEB1202C6EEE00D3C670 /* BMCNotificationsHeader.swift */; }; 3467CEB6202C6FA900D3C670 /* BMCNotificationsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3467CEB4202C6FA900D3C670 /* BMCNotificationsCell.swift */; }; 3467CEB7202C6FA900D3C670 /* BMCNotificationsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3467CEB5202C6FA900D3C670 /* BMCNotificationsCell.xib */; }; @@ -271,7 +263,6 @@ 34ABA62D1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA62B1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm */; }; 34AC8FD11EFC02C000E7F910 /* MWMRoutePoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AC8FC71EFC01F500E7F910 /* MWMRoutePoint.mm */; }; 34AC8FDB1EFC07FE00E7F910 /* UILabel+NumberOfVisibleLines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34AC8FD91EFC062400E7F910 /* UILabel+NumberOfVisibleLines.swift */; }; - 34B1104C1FC8474D0010F76F /* CoreActionSheetPicker.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34B1104A1FC843420010F76F /* CoreActionSheetPicker.framework */; }; 34B127EA1FBDD410008713D9 /* MWMRouterTransitStepInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34B127E81FBDD410008713D9 /* MWMRouterTransitStepInfo.mm */; }; 34B6FD5F2015E6BF00C18E97 /* DiscoveryBookingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34B6FD5D2015E6BE00C18E97 /* DiscoveryBookingCell.swift */; }; 34B6FD602015E6BF00C18E97 /* DiscoveryBookingCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34B6FD5E2015E6BF00C18E97 /* DiscoveryBookingCell.xib */; }; @@ -318,7 +309,6 @@ 34D3B04F1E38A20C004100F9 /* Bundle+Init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D3B04D1E38A20C004100F9 /* Bundle+Init.swift */; }; 34D4FA631E26572D003F53EF /* FirstLaunchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D4FA611E26572D003F53EF /* FirstLaunchController.swift */; }; 34D4FA671E265749003F53EF /* WhatsNewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D4FA651E265749003F53EF /* WhatsNewController.swift */; }; - 34D808861E793F91002F0584 /* Pushwoosh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34D808851E793F91002F0584 /* Pushwoosh.framework */; }; 34E50DD81F6FCAB1008EED49 /* UGCSummaryRatingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E50DD51F6FCAB1008EED49 /* UGCSummaryRatingCell.swift */; }; 34E50DDB1F6FCAB1008EED49 /* UGCSummaryRatingCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34E50DD61F6FCAB1008EED49 /* UGCSummaryRatingCell.xib */; }; 34E50DE01F6FCBA1008EED49 /* UGCAddReviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E50DDD1F6FCBA1008EED49 /* UGCAddReviewCell.swift */; }; @@ -553,6 +543,7 @@ 67B78B551E42333C0018E590 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67B78B541E42333C0018E590 /* AdSupport.framework */; }; 6B653B951C7F2DE4007BEFC5 /* cuisine-strings in Resources */ = {isa = PBXBuildFile; fileRef = 6B653B931C7F2DE4007BEFC5 /* cuisine-strings */; }; 6B9978361C89A316003B8AA0 /* editor.config in Resources */ = {isa = PBXBuildFile; fileRef = 6B9978341C89A316003B8AA0 /* editor.config */; }; + 7BD07E4A8D71CA41F082BEC7 /* Pods_MAPS_ME.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58E5736C23FC4E77509C9946 /* Pods_MAPS_ME.framework */; }; A630D1EA207CA95900976DEA /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = A630D1E8207CA95900976DEA /* Localizable.stringsdict */; }; B32FE74020D2844600EF7446 /* DownloadedBookmarksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32FE73E20D2844600EF7446 /* DownloadedBookmarksViewController.swift */; }; B32FE74120D2844600EF7446 /* DownloadedBookmarksViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B32FE73F20D2844600EF7446 /* DownloadedBookmarksViewController.xib */; }; @@ -797,6 +788,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0B07BBB5C2EFC6F60EF51BC8 /* Pods-MAPS.ME.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAPS.ME.debug.xcconfig"; path = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig"; sourceTree = ""; }; + 166595280BE641CF8ADE2209 /* Pods-MAPS.ME.production full.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAPS.ME.production full.xcconfig"; path = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig"; sourceTree = ""; }; 1D3623240D0F684500981E51 /* MapsAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapsAppDelegate.h; sourceTree = ""; }; 1D3623250D0F684500981E51 /* MapsAppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = MapsAppDelegate.mm; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 1DA7908720762B6F008BDD6B /* libopen_location_code.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libopen_location_code.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1015,14 +1008,6 @@ 3463BA651DE81DB90082417F /* MWMTrafficButtonViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMTrafficButtonViewController.xib; sourceTree = ""; }; 3465E7D61B6658C000854C4D /* MWMAPIBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMAPIBar.h; sourceTree = ""; }; 3465E7D71B6658C000854C4D /* MWMAPIBar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAPIBar.mm; sourceTree = ""; }; - 3466A2BF1FB1C733005494D3 /* AppsFlyerTracker.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppsFlyerTracker.framework; path = Carthage/Build/iOS/AppsFlyerTracker.framework; sourceTree = ""; }; - 3466A2C31FB1C83A005494D3 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FBSDKCoreKit.framework; path = Carthage/Build/iOS/FBSDKCoreKit.framework; sourceTree = ""; }; - 3466A2C41FB1C83A005494D3 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FBSDKLoginKit.framework; path = Carthage/Build/iOS/FBSDKLoginKit.framework; sourceTree = ""; }; - 3466A2C51FB1C83A005494D3 /* FBSDKShareKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FBSDKShareKit.framework; path = Carthage/Build/iOS/FBSDKShareKit.framework; sourceTree = ""; }; - 3466A2C61FB1C83A005494D3 /* FacebookShare.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FacebookShare.framework; path = Carthage/Build/iOS/FacebookShare.framework; sourceTree = ""; }; - 3466A2C71FB1C83B005494D3 /* Bolts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Bolts.framework; path = Carthage/Build/iOS/Bolts.framework; sourceTree = ""; }; - 3466A2C81FB1C83B005494D3 /* FacebookCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FacebookCore.framework; path = Carthage/Build/iOS/FacebookCore.framework; sourceTree = ""; }; - 3466A2C91FB1C83B005494D3 /* FacebookLogin.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FacebookLogin.framework; path = Carthage/Build/iOS/FacebookLogin.framework; sourceTree = ""; }; 3467CEB1202C6EEE00D3C670 /* BMCNotificationsHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BMCNotificationsHeader.swift; sourceTree = ""; }; 3467CEB4202C6FA900D3C670 /* BMCNotificationsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BMCNotificationsCell.swift; sourceTree = ""; }; 3467CEB5202C6FA900D3C670 /* BMCNotificationsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BMCNotificationsCell.xib; sourceTree = ""; }; @@ -1204,7 +1189,6 @@ 34AC8FC71EFC01F500E7F910 /* MWMRoutePoint.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMRoutePoint.mm; sourceTree = ""; }; 34AC8FC81EFC01F500E7F910 /* MWMRoutePoint+CPP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MWMRoutePoint+CPP.h"; sourceTree = ""; }; 34AC8FD91EFC062400E7F910 /* UILabel+NumberOfVisibleLines.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UILabel+NumberOfVisibleLines.swift"; sourceTree = ""; }; - 34B1104A1FC843420010F76F /* CoreActionSheetPicker.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreActionSheetPicker.framework; path = Carthage/Build/iOS/CoreActionSheetPicker.framework; sourceTree = ""; }; 34B127E61FBDD358008713D9 /* MWMRouterTransitType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMRouterTransitType.h; sourceTree = ""; }; 34B127E71FBDD410008713D9 /* MWMRouterTransitStepInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMRouterTransitStepInfo.h; sourceTree = ""; }; 34B127E81FBDD410008713D9 /* MWMRouterTransitStepInfo.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMRouterTransitStepInfo.mm; sourceTree = ""; }; @@ -1271,9 +1255,6 @@ 34D4FA611E26572D003F53EF /* FirstLaunchController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FirstLaunchController.swift; sourceTree = ""; }; 34D4FA651E265749003F53EF /* WhatsNewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WhatsNewController.swift; sourceTree = ""; }; 34D7DB77204ED3DD0041D015 /* maps.me dbg.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "maps.me dbg.entitlements"; sourceTree = ""; }; - 34D8087A1E793606002F0584 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = ""; }; - 34D8087C1E79360D002F0584 /* AlamofireImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AlamofireImage.framework; path = Carthage/Build/iOS/AlamofireImage.framework; sourceTree = ""; }; - 34D808851E793F91002F0584 /* Pushwoosh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pushwoosh.framework; path = Carthage/Build/iOS/Pushwoosh.framework; sourceTree = ""; }; 34DFCD971F87ED2400AE2672 /* MWMReviewsViewModelProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMReviewsViewModelProtocol.h; sourceTree = ""; }; 34DFCD981F87ED5600AE2672 /* MWMReviewProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMReviewProtocol.h; sourceTree = ""; }; 34E50DD51F6FCAB1008EED49 /* UGCSummaryRatingCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UGCSummaryRatingCell.swift; sourceTree = ""; }; @@ -1511,6 +1492,7 @@ 4A7D89C41B2EBF3B00AC843E /* resources-xxhdpi_dark */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-xxhdpi_dark"; path = "../../data/resources-xxhdpi_dark"; sourceTree = ""; }; 5605022E1B6211E100169CAD /* sound-strings */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "sound-strings"; path = "../../data/sound-strings"; sourceTree = ""; }; 56EE14D21FE804550036F20C /* libtransit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libtransit.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 58E5736C23FC4E77509C9946 /* Pods_MAPS_ME.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MAPS_ME.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 671182DE1C7F0DD400CB8177 /* countries_obsolete.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = countries_obsolete.txt; path = ../../data/countries_obsolete.txt; sourceTree = ""; }; 671182DF1C7F0DD400CB8177 /* packed_polygons_obsolete.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; name = packed_polygons_obsolete.bin; path = ../../data/packed_polygons_obsolete.bin; sourceTree = ""; }; 671182E01C7F0DD400CB8177 /* WorldCoasts_obsolete.mwm */ = {isa = PBXFileReference; lastKnownFileType = file; name = WorldCoasts_obsolete.mwm; path = ../../data/WorldCoasts_obsolete.mwm; sourceTree = ""; }; @@ -1549,6 +1531,7 @@ 67B78B541E42333C0018E590 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; 6B653B931C7F2DE4007BEFC5 /* cuisine-strings */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "cuisine-strings"; path = "../../data/cuisine-strings"; sourceTree = ""; }; 6B9978341C89A316003B8AA0 /* editor.config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = editor.config; path = ../../data/editor.config; sourceTree = ""; }; + 8022FD18AD3EEA9E8C75A7A7 /* Pods-MAPS.ME.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAPS.ME.release.xcconfig"; path = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig"; sourceTree = ""; }; 8D1107310486CEB800E47090 /* MAPSME.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = MAPSME.plist; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; 978D4A30199A11E600D72CA7 /* faq.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = faq.html; path = ../../data/faq.html; sourceTree = ""; }; 97A5967E19B9CD47007A963F /* copyright.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = copyright.html; path = ../../data/copyright.html; sourceTree = ""; }; @@ -2002,16 +1985,13 @@ 4586D0C41F48121A00DF9CE5 /* libbsdiff.a in Frameworks */, 34E6F2DB1F459C05008E14F9 /* GLKit.framework in Frameworks */, F6F8E3C51EF8469700F2DE8F /* libugc.a in Frameworks */, - 34B1104C1FC8474D0010F76F /* CoreActionSheetPicker.framework in Frameworks */, 34F409891E9E1DD200E57AC0 /* libMopub.a in Frameworks */, 3488B03B1E9D13EF0068AFD8 /* UserNotifications.framework in Frameworks */, 45FFD65D1E965EBE00DB854E /* liblocal_ads.a in Frameworks */, 34D1B6F11E95096B0057E9C7 /* libicu.a in Frameworks */, 671E78D31E6A423300B2859B /* librouting_common.a in Frameworks */, - 34D808861E793F91002F0584 /* Pushwoosh.framework in Frameworks */, 474C9F5A213FF75800369009 /* StoreKit.framework in Frameworks */, 67B78B551E42333C0018E590 /* AdSupport.framework in Frameworks */, - 3466A2DA1FB1C83C005494D3 /* FacebookCore.framework in Frameworks */, 67B78B471E422E0A0018E590 /* MobileCoreServices.framework in Frameworks */, 67B78B451E422C970018E590 /* iAd.framework in Frameworks */, 67B78B431E422C620018E590 /* MessageUI.framework in Frameworks */, @@ -2022,7 +2002,6 @@ 45A37B9E20B33F5E005FBDBB /* FBAudienceNetwork.framework in Frameworks */, 3446C6771DDCA9A200146687 /* libtraffic.a in Frameworks */, 34201E0C1DC0E33100D24118 /* libtracking.a in Frameworks */, - 3466A2CB1FB1C83B005494D3 /* FBSDKCoreKit.framework in Frameworks */, 341F09841C20138100F18AC5 /* libpugixml.a in Frameworks */, 3411387D1C15AE73002E3B3E /* libeditor.a in Frameworks */, 6741AABD1BF356BA002C974C /* libagg.a in Frameworks */, @@ -2031,10 +2010,8 @@ 6741AAC11BF356BA002C974C /* libbase.a in Frameworks */, F68BDF061EEA9A830009BB81 /* MyTargetSDK.framework in Frameworks */, 6741AAC21BF356BA002C974C /* libcoding.a in Frameworks */, - 3466A2D11FB1C83B005494D3 /* FBSDKShareKit.framework in Frameworks */, 6741AAC31BF356BA002C974C /* libexpat.a in Frameworks */, 6741AAC41BF356BA002C974C /* libfreetype.a in Frameworks */, - 3466A2CE1FB1C83B005494D3 /* FBSDKLoginKit.framework in Frameworks */, 340474F41E08199D00C92850 /* Fabric.framework in Frameworks */, 6741AAC61BF356BA002C974C /* libgeometry.a in Frameworks */, 674A7E291C0DA576003D48E1 /* libsdf_image.a in Frameworks */, @@ -2048,26 +2025,33 @@ 6741AAD01BF356BA002C974C /* libplatform.a in Frameworks */, 3404750F1E08199E00C92850 /* MyTrackerSDK.framework in Frameworks */, 6741AAD11BF356BA002C974C /* libprotobuf.a in Frameworks */, - 3466A2D71FB1C83C005494D3 /* Bolts.framework in Frameworks */, 6741AAD31BF356BA002C974C /* librouting.a in Frameworks */, 674A7E281C0DA573003D48E1 /* libstb_image.a in Frameworks */, 6741AAD41BF356BA002C974C /* libsearch.a in Frameworks */, 6741AAD51BF356BA002C974C /* libstorage.a in Frameworks */, 6741AAD61BF356BA002C974C /* libsuccinct.a in Frameworks */, - 3466A2D41FB1C83C005494D3 /* FacebookShare.framework in Frameworks */, - 3466A2C11FB1C734005494D3 /* AppsFlyerTracker.framework in Frameworks */, 6741AA361BF340DE002C974C /* libz.dylib in Frameworks */, 674A7E2B1C0DA57C003D48E1 /* libdrape_frontend.a in Frameworks */, 4563158920E264C20076E9DB /* libshaders.a in Frameworks */, 674A7E2A1C0DA579003D48E1 /* libdrape.a in Frameworks */, - 3466A2DD1FB1C83C005494D3 /* FacebookLogin.framework in Frameworks */, 34201E091DC0DC7300D24118 /* libpartners_api.a in Frameworks */, + 7BD07E4A8D71CA41F082BEC7 /* Pods_MAPS_ME.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 044715AD432F538B6F731670 /* Pods */ = { + isa = PBXGroup; + children = ( + 0B07BBB5C2EFC6F60EF51BC8 /* Pods-MAPS.ME.debug.xcconfig */, + 8022FD18AD3EEA9E8C75A7A7 /* Pods-MAPS.ME.release.xcconfig */, + 166595280BE641CF8ADE2209 /* Pods-MAPS.ME.production full.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( @@ -2128,6 +2112,7 @@ 19C28FACFE9D520D11CA2CBB /* Products */, 29B97317FDCFA39411CA2CEA /* Resources */, F6E2FBFB1E097B9F0083EBEC /* UI */, + 044715AD432F538B6F731670 /* Pods */, ); indentWidth = 2; name = Maps; @@ -2212,6 +2197,7 @@ 3446C6761DDCA9A200146687 /* libtraffic.a */, 3462FD8A1DC1DF3A00906FD7 /* SDK */, 4598438921394D7700F8CAB2 /* shaders_metal.metallib */, + 58E5736C23FC4E77509C9946 /* Pods_MAPS_ME.framework */, ); name = Frameworks; sourceTree = ""; @@ -2290,26 +2276,14 @@ children = ( EBDA7B7320B3576D0054165B /* GoogleMobileAds.framework */, 45A37B9D20B33F5D005FBDBB /* FBAudienceNetwork.framework */, - 34D8087A1E793606002F0584 /* Alamofire.framework */, - 34D8087C1E79360D002F0584 /* AlamofireImage.framework */, - 3466A2BF1FB1C733005494D3 /* AppsFlyerTracker.framework */, - 3466A2C71FB1C83B005494D3 /* Bolts.framework */, - 34B1104A1FC843420010F76F /* CoreActionSheetPicker.framework */, 340474DC1E08199D00C92850 /* Crashlytics.framework */, 340474DD1E08199D00C92850 /* Fabric.framework */, - 3466A2C81FB1C83B005494D3 /* FacebookCore.framework */, - 3466A2C91FB1C83B005494D3 /* FacebookLogin.framework */, - 3466A2C61FB1C83A005494D3 /* FacebookShare.framework */, - 3466A2C31FB1C83A005494D3 /* FBSDKCoreKit.framework */, - 3466A2C41FB1C83A005494D3 /* FBSDKLoginKit.framework */, - 3466A2C51FB1C83A005494D3 /* FBSDKShareKit.framework */, 340474E11E08199D00C92850 /* Flurry */, 347D15C71F82362900E86251 /* GoogleSignIn.framework */, 347D15C81F82362900E86251 /* GoogleSignInDependencies.framework */, 34F407581E9E1D7A00E57AC0 /* Mopub.xcodeproj */, 340474E91E08199D00C92850 /* MyTarget */, 340474EE1E08199D00C92850 /* MyTrackerSDK.framework */, - 34D808851E793F91002F0584 /* Pushwoosh.framework */, ); path = 3party; sourceTree = ""; @@ -4459,12 +4433,13 @@ isa = PBXNativeTarget; buildConfigurationList = 6741AA541BF340DE002C974C /* Build configuration list for PBXNativeTarget "MAPS.ME" */; buildPhases = ( + DC18E8E671D9B333180B1B98 /* [CP] Check Pods Manifest.lock */, 47C7F96D2191A3B600C2760C /* ShellScript */, 6741A9411BF340DE002C974C /* Resources */, 6741A9A01BF340DE002C974C /* Sources */, 6741AA311BF340DE002C974C /* Frameworks */, 34F7422E1E08328300AC1FD6 /* Crashlytics */, - 34D808821E79363A002F0584 /* Copy frameworks */, + AED76F73852BBAF00EEF9E66 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -4545,6 +4520,7 @@ el, ); mainGroup = 29B97314FDCFA39411CA2CEA /* Maps */; + productRefGroup = 19C28FACFE9D520D11CA2CBB /* Products */; projectDirPath = ""; projectReferences = ( { @@ -4803,45 +4779,38 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 34D808821E79363A002F0584 /* Copy frameworks */ = { + 34F7422E1E08328300AC1FD6 /* Crashlytics */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "$(SRCROOT)/3party/Carthage/Build/iOS/AppsFlyerTracker.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/Bolts.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/FacebookCore.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/FacebookLogin.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/FacebookShare.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/FBSDKCoreKit.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/FBSDKLoginKit.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/FBSDKShareKit.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/Pushwoosh.framework", - "$(SRCROOT)/3party/Carthage/Build/iOS/CoreActionSheetPicker.framework", - ); - name = "Copy frameworks"; + ); + name = Crashlytics; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/usr/local/bin/carthage copy-frameworks\n"; + shellScript = "#!/bin/bash\n\nLOWERED_CONFIG=`echo $CONFIGURATION | tr [A-Z] [a-z]`\nif [[ \"$LOWERED_CONFIG\" == *production* || \"$LOWERED_CONFIG\" == *release* ]]; then\n LINE=`grep CRASHLYTICS_IOS_KEY ../../private.h`\n if [[ $LINE =~ \\\"(.*)\\\" ]]; then\n CRASHLYTICS_KEY=${BASH_REMATCH[1]}\n if [[ \"$CRASHLYTICS_KEY\" ]]; then\n bash \"./3party/Fabric.framework/run\" \"$CRASHLYTICS_KEY\"\n fi\n fi\nfi\n"; }; - 34F7422E1E08328300AC1FD6 /* Crashlytics */ = { + 47C7F96D2191A3B600C2760C /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( ); - name = Crashlytics; + outputFileListPaths = ( + ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#!/bin/bash\n\nLOWERED_CONFIG=`echo $CONFIGURATION | tr [A-Z] [a-z]`\nif [[ \"$LOWERED_CONFIG\" == *production* || \"$LOWERED_CONFIG\" == *release* ]]; then\n LINE=`grep CRASHLYTICS_IOS_KEY ../../private.h`\n if [[ $LINE =~ \\\"(.*)\\\" ]]; then\n CRASHLYTICS_KEY=${BASH_REMATCH[1]}\n if [[ \"$CRASHLYTICS_KEY\" ]]; then\n bash \"./3party/Fabric.framework/run\" \"$CRASHLYTICS_KEY\"\n fi\n fi\nfi\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n../../tools/unix/check_cert.sh\n"; }; - 47C7F96D2191A3B600C2760C /* ShellScript */ = { + AED76F73852BBAF00EEF9E66 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -4849,14 +4818,47 @@ inputFileListPaths = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework", + "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework", + "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework", + "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( ); outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ActionSheetPicker_3_0.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKLoginKit.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n../../tools/unix/check_cert.sh\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + DC18E8E671D9B333180B1B98 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAPS.ME-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -5462,6 +5464,7 @@ /* Begin XCBuildConfiguration section */ 6741AA571BF340DE002C974C /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0B07BBB5C2EFC6F60EF51BC8 /* Pods-MAPS.ME.debug.xcconfig */; buildSettings = { CODE_SIGN_ENTITLEMENTS = "maps.me dbg.entitlements"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -5480,6 +5483,7 @@ }; 6741AA5A1BF340DE002C974C /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8022FD18AD3EEA9E8C75A7A7 /* Pods-MAPS.ME.release.xcconfig */; buildSettings = { CODE_SIGN_ENTITLEMENTS = "maps.me dbg.entitlements"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -5498,6 +5502,7 @@ }; 6741AA5C1BF340DE002C974C /* Production Full */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 166595280BE641CF8ADE2209 /* Pods-MAPS.ME.production full.xcconfig */; buildSettings = { CODE_SIGN_ENTITLEMENTS = "maps.me dbg.entitlements"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -5526,7 +5531,6 @@ "$(inherited)", "$(PROJECT_DIR)/3party", "$(PROJECT_DIR)/3party/MyTarget", - "$(PROJECT_DIR)/3party/Carthage/Build/iOS", ); GCC_PREFIX_HEADER = Maps_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; @@ -5575,7 +5579,6 @@ "$(inherited)", "$(PROJECT_DIR)/3party", "$(PROJECT_DIR)/3party/MyTarget", - "$(PROJECT_DIR)/3party/Carthage/Build/iOS", ); GCC_PREFIX_HEADER = Maps_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; @@ -5626,7 +5629,6 @@ "$(inherited)", "$(PROJECT_DIR)/3party", "$(PROJECT_DIR)/3party/MyTarget", - "$(PROJECT_DIR)/3party/Carthage/Build/iOS", ); GCC_PREFIX_HEADER = Maps_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( diff --git a/iphone/Maps/Podfile b/iphone/Maps/Podfile new file mode 100644 index 0000000000..f7ada96408 --- /dev/null +++ b/iphone/Maps/Podfile @@ -0,0 +1,16 @@ +# Uncomment the next line to define a global platform for your project +platform :ios, '10.0' + +workspace './../../xcode/omim.xcworkspace' + +target 'MAPS.ME' do + use_frameworks! + + # Pods for MAPS.ME + +pod 'AppsFlyerFramework', '4.8.9' +pod 'Pushwoosh', '5.9.0' +pod 'ActionSheetPicker-3.0', '2.3.0' +pod 'FBSDKLoginKit', '4.42.0' + +end diff --git a/iphone/Maps/Podfile.lock b/iphone/Maps/Podfile.lock new file mode 100644 index 0000000000..34a03eba2c --- /dev/null +++ b/iphone/Maps/Podfile.lock @@ -0,0 +1,41 @@ +PODS: + - ActionSheetPicker-3.0 (2.3.0) + - AppsFlyerFramework (4.8.9) + - Bolts (1.9.0): + - Bolts/AppLinks (= 1.9.0) + - Bolts/Tasks (= 1.9.0) + - Bolts/AppLinks (1.9.0): + - Bolts/Tasks + - Bolts/Tasks (1.9.0) + - FBSDKCoreKit (4.42.0): + - Bolts (~> 1.9) + - FBSDKLoginKit (4.42.0): + - FBSDKCoreKit + - Pushwoosh (5.9.0) + +DEPENDENCIES: + - ActionSheetPicker-3.0 (= 2.3.0) + - AppsFlyerFramework (= 4.8.9) + - FBSDKLoginKit (= 4.42.0) + - Pushwoosh (= 5.9.0) + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - ActionSheetPicker-3.0 + - AppsFlyerFramework + - Bolts + - FBSDKCoreKit + - FBSDKLoginKit + - Pushwoosh + +SPEC CHECKSUMS: + ActionSheetPicker-3.0: eef157d75e151f255c5333d26656c7fbfe905a51 + AppsFlyerFramework: 0fc823ec9b77f913e4108caa82c969be033058b1 + Bolts: ac6567323eac61e203f6a9763667d0f711be34c8 + FBSDKCoreKit: aa42f1c384775f8b075f53a43080474278e9701d + FBSDKLoginKit: 373830c68aa48c9e8f0bfed93a3e32d2ca8963a0 + Pushwoosh: 8eda99efebf90e44a53b55976db51c5da9b18deb + +PODFILE CHECKSUM: c14eb7e3b15fcc412e5bfd713ad86281c4417a12 + +COCOAPODS: 1.6.1 diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/LICENSE b/iphone/Maps/Pods/ActionSheetPicker-3.0/LICENSE new file mode 100644 index 0000000000..1c418d6ce2 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2011, Tim Cinel (see AUTHORS) +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 of the 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 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/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.h new file mode 100755 index 0000000000..bd03ae9eed --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.h @@ -0,0 +1,126 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import +#import + +@class SWActionSheet; + +#define SuppressPerformSelectorLeakWarning(Stuff) \ +do { \ +_Pragma("clang diagnostic push") \ +_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \ +Stuff; \ +_Pragma("clang diagnostic pop") \ +} while (0) + +typedef NS_ENUM(NSInteger, ActionType) { + ActionTypeValue, + ActionTypeSelector, + ActionTypeBlock +}; + +typedef NS_ENUM(NSInteger, TapAction) { + TapActionNone, + TapActionSuccess, + TapActionCancel +}; + +typedef void (^ActionBlock)(void); + +static NSString *const kButtonValue = @"buttonValue"; + +static NSString *const kButtonTitle = @"buttonTitle"; + +static NSString *const kActionType = @"buttonAction"; + +static NSString *const kActionTarget = @"buttonActionTarget"; + +@interface AbstractActionSheetPicker : NSObject +@property(nonatomic, strong) SWActionSheet *actionSheet; +@property (nonatomic) UIWindowLevel windowLevel; +@property(nonatomic, assign) NSInteger tag; +@property(nonatomic, assign) int borderWidth; +@property(nonatomic, strong) UIToolbar *toolbar; +@property(nonatomic, copy) NSString *title; +@property(nonatomic, strong) UIView *pickerView; +@property(nonatomic, readonly) CGSize viewSize; +@property(nonatomic, strong) NSMutableArray *customButtons; +@property(nonatomic, assign) BOOL hideCancel; // show or hide cancel button. +@property(nonatomic, assign) CGRect presentFromRect; +@property(nonatomic) NSDictionary *titleTextAttributes; // default is nil. Used to specify Title Label attributes. +@property(nonatomic) NSAttributedString *attributedTitle; // default is nil. If titleTextAttributes not nil this value ignored. +@property(nonatomic) NSMutableDictionary *pickerTextAttributes; // default with a NSMutableParagraphStyle to set label align center. Used to specify Picker Label attributes. +@property(nonatomic) UIColor *pickerBackgroundColor; +@property(nonatomic) UIColor *toolbarBackgroundColor; +@property(nonatomic, strong) UIColor *toolbarButtonsColor; +@property(nonatomic) NSNumber *pickerBlurRadius; +@property(nonatomic, retain) Class popoverBackgroundViewClass; //allow popover customization on iPad +@property(nonatomic) UIInterfaceOrientationMask supportedInterfaceOrientations; // You can set your own supportedInterfaceOrientations value to prevent dismissing picker in some special cases. +@property(nonatomic) TapAction tapDismissAction; // Specify, which action should be fired in case of tapping outside of the picker (on top darkened side). Default is TapActionNone. +@property(nonatomic) BOOL popoverDisabled; // Disable popover behavior on iPad + + +- (void)setTextColor:(UIColor *)textColor; + +// For subclasses. +- (instancetype)initWithTarget:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; + +// Present the ActionSheetPicker +- (void)showActionSheetPicker; + +// For subclasses. This is used to send a message to the target upon a successful selection and dismissal of the picker (i.e. not canceled). +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)successAction origin:(id)origin; + +// For subclasses. This is an optional message upon cancelation of the picker. +- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin; + +// For subclasses. This returns a configured picker view. Subclasses should autorelease. +- (UIView *)configuredPickerView; + +// Adds custom buttons to the left of the UIToolbar that select specified values +- (void)addCustomButtonWithTitle:(NSString *)title value:(id)value; + +// Adds custom buttons to the left of the UIToolbar that implement specified block +- (void)addCustomButtonWithTitle:(NSString *)title actionBlock:(ActionBlock)block; + +// Adds custom buttons to the left of the UIToolbar that implement specified selector +- (void)addCustomButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector; + +//For subclasses. This responds to a custom button being pressed. +- (IBAction)customButtonPressed:(id)sender; + +// Allow the user to specify a custom cancel button +- (void)setCancelButton:(UIBarButtonItem *)button; + +// Allow the user to specify a custom done button +- (void)setDoneButton:(UIBarButtonItem *)button; + +// Hide picker programmatically +- (void)hidePickerWithCancelAction; + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.m new file mode 100755 index 0000000000..a20369bb6d --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/AbstractActionSheetPicker.m @@ -0,0 +1,804 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "AbstractActionSheetPicker.h" +#import "SWActionSheet.h" +#import +#import + +CG_INLINE BOOL isIPhone4() { + struct utsname systemInfo; + uname(&systemInfo); + + NSString *modelName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; + return ([modelName rangeOfString:@"iPhone3"].location != NSNotFound); +} + +#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) +#define IS_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad +#define DEVICE_ORIENTATION [UIDevice currentDevice].orientation + +// UIInterfaceOrientationMask vs. UIInterfaceOrientation +// As far as I know, a function like this isn't available in the API. I derived this from the enum def for +// UIInterfaceOrientationMask. +#define OrientationMaskSupportsOrientation(mask, orientation) ((mask & (1 << orientation)) != 0) + + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 + +@interface MyPopoverController : UIPopoverController +@end + +@implementation MyPopoverController ++ (BOOL)canShowPopover { + if (IS_IPAD) { + if ([UITraitCollection class]) { + UITraitCollection *traits = [UIApplication sharedApplication].keyWindow.traitCollection; + if (traits.horizontalSizeClass == UIUserInterfaceSizeClassCompact) + return NO; + } + return YES; + } + return NO; +} + +- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection { + return UIModalPresentationNone; +} +@end + +#else + +@interface MyPopoverController:UIPopoverController +@end + +@implementation MyPopoverController ++(BOOL)canShowPopover { + return IS_IPAD; +} +@end + +#endif + +@interface AbstractActionSheetPicker () + +@property(nonatomic, strong) UIBarButtonItem *barButtonItem; +@property(nonatomic, strong) UIBarButtonItem *doneBarButtonItem; +@property(nonatomic, strong) UIBarButtonItem *cancelBarButtonItem; +@property(nonatomic, strong) UIView *containerView; +@property(nonatomic, unsafe_unretained) id target; +@property(nonatomic, assign) SEL successAction; +@property(nonatomic, assign) SEL cancelAction; +@property(nonatomic, strong) UIPopoverController *popOverController; +@property(nonatomic, strong) CIFilter *filter; +@property(nonatomic, strong) CIContext *context; +@property(nonatomic, strong) NSObject *selfReference; + +- (void)presentPickerForView:(UIView *)aView; + +- (void)configureAndPresentPopoverForView:(UIView *)aView; + +- (void)configureAndPresentActionSheetForView:(UIView *)aView; + +- (void)presentActionSheet:(SWActionSheet *)actionSheet; + +- (void)presentPopover:(UIPopoverController *)popover; + +- (void)dismissPicker; + +- (BOOL)isViewPortrait; + +- (BOOL)isValidOrigin:(id)origin; + +- (id)storedOrigin; + +- (UIToolbar *)createPickerToolbarWithTitle:(NSString *)aTitle; + +- (UIBarButtonItem *)createButtonWithType:(UIBarButtonSystemItem)type target:(id)target action:(SEL)buttonAction; + +- (IBAction)actionPickerDone:(id)sender; + +- (IBAction)actionPickerCancel:(id)sender; +@end + +@implementation AbstractActionSheetPicker + +#pragma mark - Abstract Implementation + +- (instancetype)init { + self = [super init]; + if (self) { + self.windowLevel = UIWindowLevelAlert; + self.presentFromRect = CGRectZero; + self.popoverBackgroundViewClass = nil; + self.popoverDisabled = NO; + +#pragma clang diagnostic push +#pragma ide diagnostic ignored "UnavailableInDeploymentTarget" + if ([UIApplication instancesRespondToSelector:@selector(supportedInterfaceOrientationsForWindow:)]) + self.supportedInterfaceOrientations = (UIInterfaceOrientationMask) [[UIApplication sharedApplication] + supportedInterfaceOrientationsForWindow: + [UIApplication sharedApplication].keyWindow]; + else { + self.supportedInterfaceOrientations = UIInterfaceOrientationMaskAllButUpsideDown; + if (IS_IPAD) + self.supportedInterfaceOrientations |= (1 << UIInterfaceOrientationPortraitUpsideDown); + } +#pragma clang diagnostic pop + + UIBarButtonItem *sysDoneButton = [self createButtonWithType:UIBarButtonSystemItemDone target:self + action:@selector(actionPickerDone:)]; + + UIBarButtonItem *sysCancelButton = [self createButtonWithType:UIBarButtonSystemItemCancel target:self + action:@selector(actionPickerCancel:)]; + + [self setCancelBarButtonItem:sysCancelButton]; + [self setDoneBarButtonItem:sysDoneButton]; + + self.tapDismissAction = TapActionNone; + //allows us to use this without needing to store a reference in calling class + self.selfReference = self; + + NSMutableParagraphStyle *labelParagraphStyle = [[NSMutableParagraphStyle alloc] init]; + labelParagraphStyle.alignment = NSTextAlignmentCenter; + self.pickerTextAttributes = [@{NSParagraphStyleAttributeName : labelParagraphStyle} mutableCopy]; + + self.context = [CIContext contextWithOptions:nil]; + self.filter = [CIFilter filterWithName:@"CIGaussianBlur"]; + } + + return self; +} + + +- (void)setTextColor:(UIColor *)textColor { + if (self.pickerTextAttributes) { + self.pickerTextAttributes[NSForegroundColorAttributeName] = textColor; + } else { + self.pickerTextAttributes = [@{NSForegroundColorAttributeName : [UIColor whiteColor]} mutableCopy]; + } +} + +- (instancetype)initWithTarget:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin { + self = [self init]; + if (self) { + self.target = target; + self.successAction = successAction; + self.cancelAction = cancelActionOrNil; + + if ([origin isKindOfClass:[UIBarButtonItem class]]) + self.barButtonItem = origin; + else if ([origin isKindOfClass:[UIView class]]) + self.containerView = origin; + else + NSAssert(NO, @"Invalid origin provided to ActionSheetPicker ( %@ )", origin); + } + return self; +} + +- (void)dealloc { + //need to clear picker delegates and datasources, otherwise they may call this object after it's gone + if ([self.pickerView respondsToSelector:@selector(setDelegate:)]) + [self.pickerView performSelector:@selector(setDelegate:) withObject:nil]; + + if ([self.pickerView respondsToSelector:@selector(setDataSource:)]) + [self.pickerView performSelector:@selector(setDataSource:) withObject:nil]; + + if ([self.pickerView respondsToSelector:@selector(removeTarget:action:forControlEvents:)]) + [((UIControl *) self.pickerView) removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents]; + + self.target = nil; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (UIView *)configuredPickerView { + NSAssert(NO, @"This is an abstract class, you must use a subclass of AbstractActionSheetPicker (like ActionSheetStringPicker)"); + return nil; +} + +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)successAction origin:(id)origin { + NSAssert(NO, @"This is an abstract class, you must use a subclass of AbstractActionSheetPicker (like ActionSheetStringPicker)"); +} + +- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin { + if (target && cancelAction && [target respondsToSelector:cancelAction]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:cancelAction withObject:origin]; +#pragma clang diagnostic pop + } +} + +#pragma mark - Actions + +- (void)showActionSheetPicker { + UIView *masterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.viewSize.width, 260)]; + + // to fix bug, appeared only on iPhone 4 Device: https://github.com/skywinder/ActionSheetPicker-3.0/issues/5 + if (isIPhone4()) { + masterView.backgroundColor = [UIColor colorWithRed:0.97 green:0.97 blue:0.97 alpha:1.0]; + } + self.toolbar = [self createPickerToolbarWithTitle:self.title]; + [masterView addSubview:self.toolbar]; + + //ios7 picker draws a darkened alpha-only region on the first and last 8 pixels horizontally, but blurs the rest of its background. To make the whole popup appear to be edge-to-edge, we have to add blurring to the remaining left and right edges. + if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { + CGRect rect = CGRectMake(0, self.toolbar.frame.origin.y, _borderWidth, masterView.frame.size.height - self.toolbar.frame.origin.y); + UIToolbar *leftEdge = [[UIToolbar alloc] initWithFrame:rect]; + rect.origin.x = masterView.frame.size.width - _borderWidth; + UIToolbar *rightEdge = [[UIToolbar alloc] initWithFrame:rect]; +#pragma clang diagnostic push +#pragma ide diagnostic ignored "UnavailableInDeploymentTarget" + leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor; +#pragma clang diagnostic pop + [masterView insertSubview:leftEdge atIndex:0]; + [masterView insertSubview:rightEdge atIndex:0]; + } + + self.pickerView = [self configuredPickerView]; + NSAssert(_pickerView != NULL, @"Picker view failed to instantiate, perhaps you have invalid component data."); + // toolbar hidden remove the toolbar frame and update pickerview frame + if (self.toolbar.hidden) { + int halfWidth = (int) (_borderWidth * 0.5f); + masterView.frame = CGRectMake(0, 0, self.viewSize.width, 220); + self.pickerView.frame = CGRectMake(0, halfWidth, self.viewSize.width, 220 - halfWidth); + } + [masterView addSubview:_pickerView]; + + if ((![MyPopoverController canShowPopover] || self.popoverDisabled) && !self.pickerBackgroundColor && !self.toolbarBackgroundColor && [self.pickerBlurRadius intValue] > 0) { + [self blurPickerBackground]; + } else { + [self presentPickerForView:masterView]; + } + +#pragma clang diagnostic push +#pragma ide diagnostic ignored "UnavailableInDeploymentTarget" + { + switch (self.tapDismissAction) { + case TapActionNone: + break; + case TapActionSuccess: { + // add tap dismiss action + self.actionSheet.window.userInteractionEnabled = YES; + UITapGestureRecognizer *tapAction = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionPickerDone:)]; + tapAction.delegate = self; + [self.actionSheet.window addGestureRecognizer:tapAction]; + break; + } + case TapActionCancel: { + // add tap dismiss action + self.actionSheet.window.userInteractionEnabled = YES; + UITapGestureRecognizer *tapAction = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionPickerCancel:)]; + tapAction.delegate = self; + [self.actionSheet.window addGestureRecognizer:tapAction]; + break; + } + }; + } +#pragma clang diagnostic pop + +} + +- (IBAction)actionPickerDone:(id)sender { + [self notifyTarget:self.target didSucceedWithAction:self.successAction origin:[self storedOrigin]]; + [self dismissPicker]; +} + +- (IBAction)actionPickerCancel:(id)sender { + [self notifyTarget:self.target didCancelWithAction:self.cancelAction origin:[self storedOrigin]]; + [self dismissPicker]; +} + +- (void)dismissPicker { +#if __IPHONE_4_1 <= __IPHONE_OS_VERSION_MAX_ALLOWED + if (self.actionSheet) +#else + if (self.actionSheet && [self.actionSheet isVisible]) +#endif + [_actionSheet dismissWithClickedButtonIndex:0 animated:YES]; + else if (self.popOverController && self.popOverController.popoverVisible) + [_popOverController dismissPopoverAnimated:YES]; + self.actionSheet = nil; + self.popOverController = nil; + self.selfReference = nil; +} + +#pragma mark - Custom Buttons + +- (NSMutableArray *)customButtons { + if (!_customButtons) { + _customButtons = [[NSMutableArray alloc] init]; + } + + return _customButtons; +} + +- (void)addCustomButtonWithTitle:(NSString *)title value:(id)value { + if (!title) + title = @""; + if (!value) + value = @0; + NSDictionary *buttonDetails = @{ + kButtonTitle : title, + kActionType : @(ActionTypeValue), + kButtonValue : value + }; + [self.customButtons addObject:buttonDetails]; +} + +- (void)addCustomButtonWithTitle:(NSString *)title actionBlock:(ActionBlock)block { + if (!title) + title = @""; + if (!block) + block = (^{ + }); + NSDictionary *buttonDetails = @{ + kButtonTitle : title, + kActionType : @(ActionTypeBlock), + kButtonValue : [block copy] + }; + [self.customButtons addObject:buttonDetails]; +} + +- (void)addCustomButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector { + if (!title) + title = @""; + if (!target) + target = [NSNull null]; + NSDictionary *buttonDetails = @{ + kButtonTitle : title, + kActionType : @(ActionTypeSelector), + kActionTarget : target, + kButtonValue : [NSValue valueWithPointer:selector] + }; + [self.customButtons addObject:buttonDetails]; +} + +- (IBAction)customButtonPressed:(id)sender { + UIBarButtonItem *button = (UIBarButtonItem *) sender; + NSInteger index = button.tag; + NSAssert((index >= 0 && index < self.customButtons.count), @"Bad custom button tag: %ld, custom button count: %lu", (long) index, (unsigned long) self.customButtons.count); + + NSDictionary *buttonDetails = (self.customButtons)[(NSUInteger) index]; + NSAssert(buttonDetails != NULL, @"Custom button dictionary is invalid"); + + ActionType actionType = (ActionType) [buttonDetails[kActionType] integerValue]; + switch (actionType) { + case ActionTypeValue: { + NSAssert([self.pickerView respondsToSelector:@ + selector(selectRow:inComponent:animated:)], @"customButtonPressed not overridden, cannot interact with subclassed pickerView"); + NSInteger buttonValue = [buttonDetails[kButtonValue] integerValue]; + UIPickerView *picker = (UIPickerView *) self.pickerView; + NSAssert(picker != NULL, @"PickerView is invalid"); + [picker selectRow:buttonValue inComponent:0 animated:YES]; + if ([self respondsToSelector:@selector(pickerView:didSelectRow:inComponent:)]) { + void (*objc_msgSendTyped)(id target, SEL _cmd, id pickerView, NSInteger row, NSInteger component) = (void *) objc_msgSend; // sending Integers as params + objc_msgSendTyped(self, @selector(pickerView:didSelectRow:inComponent:), picker, buttonValue, 0); + } + break; + } + + case ActionTypeBlock: { + ActionBlock actionBlock = buttonDetails[kButtonValue]; + [self dismissPicker]; + if (actionBlock) + actionBlock(); + break; + } + + case ActionTypeSelector: { + SEL selector = [buttonDetails[kButtonValue] pointerValue]; + id target = buttonDetails[kActionTarget]; + [self dismissPicker]; + if (target && [target respondsToSelector:selector]) { + SuppressPerformSelectorLeakWarning ( + [target performSelector:selector]; + ); + } + break; + } + + default: + NSAssert(false, @"Unknown action type"); + break; + } +} + +// Allow the user to specify a custom cancel button +- (void)setCancelButton:(UIBarButtonItem *)button { + if (!button) { + self.hideCancel = YES; + return; + } + + if ([button.customView isKindOfClass:[UIButton class]]) { + UIButton *uiButton = (UIButton *) button.customView; + [uiButton addTarget:self action:@selector(actionPickerCancel:) forControlEvents:UIControlEventTouchUpInside]; + } + else { + [button setTarget:self]; + [button setAction:@selector(actionPickerCancel:)]; + } + self.cancelBarButtonItem = button; +} + +// Allow the user to specify a custom done button +- (void)setDoneButton:(UIBarButtonItem *)button { + if ([button.customView isKindOfClass:[UIButton class]]) { + UIButton *uiButton = (UIButton *) button.customView; + [button setAction:@selector(actionPickerDone:)]; + [uiButton addTarget:self action:@selector(actionPickerDone:) forControlEvents:UIControlEventTouchUpInside]; + } + else { + [button setTarget:self]; + [button setAction:@selector(actionPickerDone:)]; + } + [button setTarget:self]; + [button setAction:@selector(actionPickerDone:)]; + self.doneBarButtonItem = button; +} + +- (void)hidePickerWithCancelAction { + [self actionPickerCancel:nil]; +} + + +- (UIToolbar *)createPickerToolbarWithTitle:(NSString *)title { + CGRect frame = CGRectMake(0, 0, self.viewSize.width, 44); + UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:frame]; + pickerToolbar.barStyle = (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) ? UIBarStyleDefault : UIBarStyleBlackTranslucent; + + pickerToolbar.barTintColor = self.toolbarBackgroundColor; + pickerToolbar.tintColor = self.toolbarButtonsColor; + + NSMutableArray *barItems = [[NSMutableArray alloc] init]; + + if (!self.hideCancel) { + [barItems addObject:self.cancelBarButtonItem]; + } + + NSInteger index = 0; + for (NSDictionary *buttonDetails in self.customButtons) { + NSString *buttonTitle = buttonDetails[kButtonTitle]; + + UIBarButtonItem *button; + if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { + button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStylePlain + target:self action:@selector(customButtonPressed:)]; + } + else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered + target:self action:@selector(customButtonPressed:)]; +#pragma clang diagnostic pop + } + + button.tag = index; + [barItems addObject:button]; + index++; + } + + UIBarButtonItem *flexSpace = [self createButtonWithType:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; + [barItems addObject:flexSpace]; + if (title) { + UIBarButtonItem *labelButton; + + labelButton = [self createToolbarLabelWithTitle:title titleTextAttributes:self.titleTextAttributes andAttributedTitle:self.attributedTitle]; + + [barItems addObject:labelButton]; + [barItems addObject:flexSpace]; + } + [barItems addObject:self.doneBarButtonItem]; + + [pickerToolbar setItems:barItems animated:NO]; + [pickerToolbar layoutIfNeeded]; + return pickerToolbar; +} + +- (UIBarButtonItem *)createToolbarLabelWithTitle:(NSString *)aTitle + titleTextAttributes:(NSDictionary *)titleTextAttributes + andAttributedTitle:(NSAttributedString *)attributedTitle { + UILabel *toolBarItemLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 180, 30)]; + [toolBarItemLabel setTextAlignment:NSTextAlignmentCenter]; + [toolBarItemLabel setBackgroundColor:[UIColor clearColor]]; + + CGFloat strikeWidth; + CGSize textSize; + + + if (titleTextAttributes) { + toolBarItemLabel.attributedText = [[NSAttributedString alloc] initWithString:aTitle attributes:titleTextAttributes]; + textSize = toolBarItemLabel.attributedText.size; + } else if (attributedTitle) { + toolBarItemLabel.attributedText = attributedTitle; + textSize = toolBarItemLabel.attributedText.size; + } + else { + [toolBarItemLabel setTextColor:(NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) ? [UIColor blackColor] : [UIColor whiteColor]]; + [toolBarItemLabel setFont:[UIFont boldSystemFontOfSize:16]]; + toolBarItemLabel.text = aTitle; + + if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { +#pragma clang diagnostic push +#pragma ide diagnostic ignored "UnavailableInDeploymentTarget" + textSize = [[toolBarItemLabel text] sizeWithAttributes:@{NSFontAttributeName : [toolBarItemLabel font]}]; +#pragma clang diagnostic pop + } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + textSize = [[toolBarItemLabel text] sizeWithFont:[toolBarItemLabel font]]; +#pragma clang diagnostic pop + } + } + + strikeWidth = textSize.width; + + if (strikeWidth < 180) { + [toolBarItemLabel sizeToFit]; + } + + UIBarButtonItem *buttonLabel = [[UIBarButtonItem alloc] initWithCustomView:toolBarItemLabel]; + return buttonLabel; +} + +- (UIBarButtonItem *)createButtonWithType:(UIBarButtonSystemItem)type target:(id)target action:(SEL)buttonAction { + + UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:type target:target + action:buttonAction]; + return barButton; +} + +#pragma mark - Custom Color + +- (void)setPickerBackgroundColor:(UIColor *)backgroundColor { + _pickerBackgroundColor = backgroundColor; + _actionSheet.bgView.backgroundColor = backgroundColor; +} + +#pragma mark - Picker blur effect + +- (void)blurPickerBackground { + UIWindow *window = [UIApplication sharedApplication].delegate.window; + UIViewController *rootViewController = window.rootViewController; + + UIView *masterView = self.pickerView.superview; + + self.pickerView.backgroundColor = [UIColor clearColor]; + masterView.backgroundColor = [UIColor clearColor]; + + // Get the snapshot + UIGraphicsBeginImageContext(rootViewController.view.bounds.size); + [rootViewController.view drawViewHierarchyInRect:rootViewController.view.bounds afterScreenUpdates:NO]; + UIImage *backgroundImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + [self presentPickerForView:masterView]; + + // Crop the snapshot to match picker frame + CIImage *image = [CIImage imageWithCGImage:[backgroundImage CGImage]]; + [self.filter setValue:image forKey:kCIInputImageKey]; + [self.filter setValue:self.pickerBlurRadius forKey:kCIInputRadiusKey]; + + CGRect blurFrame = [rootViewController.view convertRect:self.pickerView.frame fromView:masterView]; + // CoreImage coordinate system and UIKit coordinate system differs, so we need to adjust the frame + blurFrame.origin.y = - (blurFrame.origin.y - rootViewController.view.frame.size.height) - blurFrame.size.height; + + CGImageRef imageRef = [self.context createCGImage:self.filter.outputImage fromRect:blurFrame]; + + UIImageView *blurredImageView = [[UIImageView alloc] initWithFrame:self.pickerView.frame]; + blurredImageView.image = [UIImage imageWithCGImage:imageRef]; + blurredImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + + [masterView addSubview:blurredImageView]; + [masterView sendSubviewToBack:blurredImageView]; + + CGImageRelease(imageRef); +} + +#pragma mark - Utilities and Accessors + +- (CGSize)viewSize { + if (IS_IPAD) { + if (!self.popoverDisabled && [MyPopoverController canShowPopover]) + return CGSizeMake(320, 320); + return [UIApplication sharedApplication].keyWindow.bounds.size; + } + +#if defined(__IPHONE_8_0) + if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) { + //iOS 7.1 or earlier + if ([self isViewPortrait]) + return CGSizeMake(320, IS_WIDESCREEN ? 568 : 480); + return CGSizeMake(IS_WIDESCREEN ? 568 : 480, 320); + + } else { + //iOS 8 or later + return [[UIScreen mainScreen] bounds].size; + } +#else + if ( [self isViewPortrait] ) + return CGSizeMake(320 , IS_WIDESCREEN ? 568 : 480); + return CGSizeMake(IS_WIDESCREEN ? 568 : 480, 320); +#endif +} + +- (BOOL)isViewPortrait { + return UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation); +} + +- (BOOL)isValidOrigin:(id)origin { + if (!origin) + return NO; + BOOL isButton = [origin isKindOfClass:[UIBarButtonItem class]]; + BOOL isView = [origin isKindOfClass:[UIView class]]; + return (isButton || isView); +} + +- (id)storedOrigin { + if (self.barButtonItem) + return self.barButtonItem; + return self.containerView; +} + +#pragma mark - Popovers and ActionSheets + +- (void)presentPickerForView:(UIView *)aView { + self.presentFromRect = aView.frame; + + if (!self.popoverDisabled && [MyPopoverController canShowPopover]) + [self configureAndPresentPopoverForView:aView]; + else + [self configureAndPresentActionSheetForView:aView]; +} + +- (void)configureAndPresentActionSheetForView:(UIView *)aView { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil]; + + _actionSheet = [[SWActionSheet alloc] initWithView:aView windowLevel:self.windowLevel]; + if (self.pickerBackgroundColor) { + _actionSheet.bgView.backgroundColor = self.pickerBackgroundColor; + } + + [self presentActionSheet:_actionSheet]; + + // Use beginAnimations for a smoother popup animation, otherwise the UIActionSheet pops into view + [UIView beginAnimations:nil context:nil]; +// _actionSheet.bounds = CGRectMake(0, 0, self.viewSize.width, sheetHeight); + [UIView commitAnimations]; +} + +- (void)didRotate:(NSNotification *)notification { + if (OrientationMaskSupportsOrientation(self.supportedInterfaceOrientations, DEVICE_ORIENTATION)) + [self dismissPicker]; +} + +- (void)presentActionSheet:(SWActionSheet *)actionSheet { + NSParameterAssert(actionSheet != NULL); + if (self.barButtonItem) + [actionSheet showFromBarButtonItem:_barButtonItem animated:YES]; + else + [actionSheet showInContainerView]; +} + +- (void)configureAndPresentPopoverForView:(UIView *)aView { + UIViewController *viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil]; + viewController.view = aView; + + if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { +#pragma clang diagnostic push +#pragma ide diagnostic ignored "UnavailableInDeploymentTarget" + viewController.preferredContentSize = aView.frame.size; +#pragma clang diagnostic pop + } + else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + viewController.contentSizeForViewInPopover = viewController.view.frame.size; +#pragma clang diagnostic pop + } + + _popOverController = [[MyPopoverController alloc] initWithContentViewController:viewController]; + _popOverController.delegate = self; + if (self.pickerBackgroundColor) { + self.popOverController.backgroundColor = self.pickerBackgroundColor; + } + if (self.popoverBackgroundViewClass) { + [self.popOverController setPopoverBackgroundViewClass:self.popoverBackgroundViewClass]; + } + + [self presentPopover:_popOverController]; +} + +- (void)presentPopover:(UIPopoverController *)popover { + NSParameterAssert(popover != NULL); + if (self.barButtonItem) { + if (_containerView != nil) { + [popover presentPopoverFromRect:CGRectMake(_containerView.frame.size.width / 2.f, 0.f, 0, 0) inView:_containerView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + } else { + [popover presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + } + + return; + } + else if ((self.containerView)) { + dispatch_async(dispatch_get_main_queue(), ^{ + [popover presentPopoverFromRect:_containerView.bounds inView:_containerView + permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + + }); + return; + } + // Unfortunately, things go to hell whenever you try to present a popover from a table view cell. These are failsafes. + UIView *origin = nil; + CGRect presentRect = CGRectZero; + @try { + origin = (_containerView.superview ? _containerView.superview : _containerView); + presentRect = origin.bounds; + dispatch_async(dispatch_get_main_queue(), ^{ + [popover presentPopoverFromRect:presentRect inView:origin + permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + + }); + } + @catch (NSException *exception) { + origin = [[[[UIApplication sharedApplication] keyWindow] rootViewController] view]; + presentRect = CGRectMake(origin.center.x, origin.center.y, 1, 1); + dispatch_async(dispatch_get_main_queue(), ^{ + [popover presentPopoverFromRect:presentRect inView:origin + permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + + }); + } +} + +#pragma mark - Popoverdelegate + +- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { + switch (self.tapDismissAction) { + case TapActionSuccess: { + [self notifyTarget:self.target didSucceedWithAction:self.successAction origin:self.storedOrigin]; + break; + } + case TapActionNone: + case TapActionCancel: { + [self notifyTarget:self.target didCancelWithAction:self.cancelAction origin:self.storedOrigin]; + break; + } + }; +} + +#pragma mark UIGestureRecognizerDelegate + +- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { + CGPoint location = [gestureRecognizer locationInView:self.toolbar]; + return !CGRectContainsPoint(self.toolbar.bounds, location); +} + +@end + diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.h new file mode 100644 index 0000000000..9b177f363b --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.h @@ -0,0 +1,37 @@ +// +// ActionSheetPicker.h +// ActionSheetPicker +// +// Created by on 13/03/2012. +// Copyright (c) 2012 Club 15CC. All rights reserved. +// +#import +#import "AbstractActionSheetPicker.h" +#import "ActionSheetCustomPickerDelegate.h" + +@interface ActionSheetCustomPicker : AbstractActionSheetPicker +{ +} + +///////////////////////////////////////////////////////////////////////// +#pragma mark - Properties +///////////////////////////////////////////////////////////////////////// +@property(nonatomic, strong) id delegate; + + +///////////////////////////////////////////////////////////////////////// +#pragma mark - Init Methods +///////////////////////////////////////////////////////////////////////// + +/** Designated init */ +- (instancetype)initWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin; + +- (instancetype)initWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin initialSelections:(NSArray *)initialSelections; + +/** Convenience class method for creating an launched */ ++ (instancetype)showPickerWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin; + ++ (instancetype)showPickerWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin initialSelections:(NSArray *)initialSelections; + + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.m new file mode 100644 index 0000000000..6b7734ac29 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPicker.m @@ -0,0 +1,125 @@ +// +// ActionSheetPicker.m +// ActionSheetPicker +// +// Created by on 13/03/2012. +// Copyright (c) 2012 Club 15CC. All rights reserved. +// + +#import "ActionSheetCustomPicker.h" + +@interface ActionSheetCustomPicker () +@property(nonatomic, strong) NSArray *initialSelections; +@end + +@implementation ActionSheetCustomPicker + +///////////////////////////////////////////////////////////////////////// +#pragma mark - Init +///////////////////////////////////////////////////////////////////////// + +- (instancetype)initWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin +{ + return [self initWithTitle:title delegate:delegate + showCancelButton:showCancelButton origin:origin + initialSelections:nil]; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin +{ + return [self showPickerWithTitle:title delegate:delegate showCancelButton:showCancelButton origin:origin + initialSelections:nil ]; +} + +- (instancetype)initWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin initialSelections:(NSArray *)initialSelections +{ + if ( self = [self initWithTarget:nil successAction:nil cancelAction:nil origin:origin] ) + { + + self.title = title; + self.hideCancel = !showCancelButton; + NSAssert(delegate, @"Delegate can't be nil"); + _delegate = delegate; + if (initialSelections) + self.initialSelections = [[NSArray alloc] initWithArray:initialSelections]; + } + return self; +} + +///////////////////////////////////////////////////////////////////////// + ++ (instancetype)showPickerWithTitle:(NSString *)title delegate:(id )delegate showCancelButton:(BOOL)showCancelButton origin:(id)origin initialSelections:(NSArray *)initialSelections +{ + ActionSheetCustomPicker *picker = [[ActionSheetCustomPicker alloc] initWithTitle:title delegate:delegate + showCancelButton:showCancelButton origin:origin + initialSelections:initialSelections]; + [picker showActionSheetPicker]; + return picker; +} + +///////////////////////////////////////////////////////////////////////// +#pragma mark - AbstractActionSheetPicker fulfilment +///////////////////////////////////////////////////////////////////////// + +- (UIView *)configuredPickerView +{ + CGRect pickerFrame = CGRectMake(0, 40, self.viewSize.width, 216); + UIPickerView *pv = [[UIPickerView alloc] initWithFrame:pickerFrame]; + self.pickerView = pv; + + // Default to our delegate being the picker's delegate and datasource + pv.delegate = _delegate; + pv.dataSource = _delegate; + pv.showsSelectionIndicator = YES; + + if ( self.initialSelections ) + { + NSAssert(pv.numberOfComponents == self.initialSelections.count, @"Number of sections not match"); + for (NSUInteger i = 0; i < [self.initialSelections count]; i++) + { + + NSInteger row = [(NSNumber *) self.initialSelections[i] integerValue]; + NSAssert([pv numberOfRowsInComponent:i] > row, @"Number of sections not match"); + [pv selectRow:row inComponent:i animated:NO]; + + // Strangely, the above selectRow:inComponent:animated: will not call + // pickerView:didSelectRow:inComponent: automatically, so we manually call it. + [pv reloadAllComponents]; + } + + } + + // Allow the delegate to override and set additional configs + //to backward compatibility: + if ( [_delegate respondsToSelector:@selector(actionSheetPicker:configurePickerView:)] ) + { + [_delegate actionSheetPicker:self configurePickerView:pv]; + } + return pv; +} + + +///////////////////////////////////////////////////////////////////////// + +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)successAction origin:(id)origin +{ + // Ignore parent args and just notify the delegate + if ( [_delegate respondsToSelector:@selector(actionSheetPickerDidSucceed:origin:)] ) + { + [_delegate actionSheetPickerDidSucceed:self origin:origin]; + } +} + +///////////////////////////////////////////////////////////////////////// + +- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin +{ + // Ignore parent args and just notify the delegate + if ( [_delegate respondsToSelector:@selector(actionSheetPickerDidCancel:origin:)] ) + { + [_delegate actionSheetPickerDidCancel:self origin:origin]; + } +} + + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPickerDelegate.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPickerDelegate.h new file mode 100644 index 0000000000..bb257cd0c6 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetCustomPickerDelegate.h @@ -0,0 +1,39 @@ +// +// ActionSheetPickerDelegate.h +// ActionSheetPicker +// +// Created by on 13/03/2012. +// Copyright (c) 2012 Club 15CC. All rights reserved. +// + +#import +#import "AbstractActionSheetPicker.h" + +@protocol ActionSheetCustomPickerDelegate + +@optional + +/** + Allow the delegate to override default settings for the picker + + Allows for instance, ability to set separate delegates and data sources as well as GUI settings on the UIPickerView + If not defined and explicily overridden then this class will be the delegate and dataSource. + */ +- (void)configurePickerView:(UIPickerView *)pickerView DEPRECATED_MSG_ATTRIBUTE("use -actionSheetPicker:configurePickerView: instead."); +- (void)actionSheetPicker:(AbstractActionSheetPicker *)actionSheetPicker configurePickerView:(UIPickerView *)pickerView; + +/** + Success callback + + \param actionSheetPicker .pickerView property accesses the picker. Requires a cast to UIView subclass for the picker + \param origin The entity which launched the ActionSheetPicker + */ +- (void)actionSheetPickerDidSucceed:(AbstractActionSheetPicker *)actionSheetPicker origin:(id)origin; + +/** Cancel callback. See actionSheetPickerDidSuccess:origin: */ +- (void)actionSheetPickerDidCancel:(AbstractActionSheetPicker *)actionSheetPicker origin:(id)origin; + + +@required + +@end \ No newline at end of file diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.h new file mode 100755 index 0000000000..d64a69a2e4 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.h @@ -0,0 +1,95 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "AbstractActionSheetPicker.h" + +@class ActionSheetDatePicker; + +typedef void(^ActionDateDoneBlock)(ActionSheetDatePicker *picker, id selectedDate, id origin); //selectedDate is NSDate or NSNumber for "UIDatePickerModeCountDownTimer" +typedef void(^ActionDateCancelBlock)(ActionSheetDatePicker *picker); + +@interface ActionSheetDatePicker : AbstractActionSheetPicker + +@property (nonatomic, retain) NSDate *minimumDate; // specify min/max date range. default is nil. When min > max, the values are ignored. Ignored in countdown timer mode +@property (nonatomic, retain) NSDate *maximumDate; // default is nil + +@property (nonatomic) NSInteger minuteInterval; // display minutes wheel with interval. interval must be evenly divided into 60. default is 1. min is 1, max is 30 + +@property (nonatomic, retain) NSLocale *locale; // default is [NSLocale currentLocale]. setting nil returns to default +@property (nonatomic, copy) NSCalendar *calendar; // default is [NSCalendar currentCalendar]. setting nil returns to default +@property (nonatomic, retain) NSTimeZone *timeZone; // default is nil. use current time zone or time zone from calendar + +@property (nonatomic, assign) NSTimeInterval countDownDuration; // for UIDatePickerModeCountDownTimer, ignored otherwise. default is 0.0. limit is 23:59 (86,399 seconds). value being set is div 60 (drops remaining seconds). + +@property (nonatomic, copy) ActionDateDoneBlock onActionSheetDone; +@property (nonatomic, copy) ActionDateCancelBlock onActionSheetCancel; + ++ (instancetype)showPickerWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin; + ++ (instancetype)showPickerWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate + minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate + target:(id)target action:(SEL)action origin:(id)origin; + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode + selectedDate:(NSDate *)selectedDate + doneBlock:(ActionDateDoneBlock)doneBlock + cancelBlock:(ActionDateCancelBlock)cancelBlock + origin:(UIView*)view; + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode + selectedDate:(NSDate *)selectedDate + minimumDate:(NSDate *)minimumDate + maximumDate:(NSDate *)maximumDate + doneBlock:(ActionDateDoneBlock)doneBlock + cancelBlock:(ActionDateCancelBlock)cancelBlock + origin:(UIView*)view; + + +- (id)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin; + +- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action origin:(id)origin; + +- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; + +- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action cancelAction:(SEL)cancelAction origin:(id)origin; + + +- (instancetype)initWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode + selectedDate:(NSDate *)selectedDate + doneBlock:(ActionDateDoneBlock)doneBlock + cancelBlock:(ActionDateCancelBlock)cancelBlock + origin:(UIView*)view; + +- (void)eventForDatePicker:(id)sender; + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.m new file mode 100755 index 0000000000..fd5df63e3f --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDatePicker.m @@ -0,0 +1,272 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + + +#import "ActionSheetDatePicker.h" +#import + +@interface ActionSheetDatePicker() +@property (nonatomic, assign) UIDatePickerMode datePickerMode; +@property (nonatomic, strong) NSDate *selectedDate; +@end + +@implementation ActionSheetDatePicker + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate + target:(id)target action:(SEL)action origin:(id)origin { + ActionSheetDatePicker *picker = [[ActionSheetDatePicker alloc] initWithTitle:title datePickerMode:datePickerMode selectedDate:selectedDate target:target action:action origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate + target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction { + ActionSheetDatePicker *picker = [[ActionSheetDatePicker alloc] initWithTitle:title datePickerMode:datePickerMode selectedDate:selectedDate target:target action:action origin:origin cancelAction:cancelAction]; + [picker showActionSheetPicker]; + return picker; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate + minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate + target:(id)target action:(SEL)action origin:(id)origin { + ActionSheetDatePicker *picker = [[ActionSheetDatePicker alloc] initWithTitle:title datePickerMode:datePickerMode selectedDate:selectedDate target:target action:action origin:origin]; + [picker setMinimumDate:minimumDate]; + [picker setMaximumDate:maximumDate]; + [picker showActionSheetPicker]; + return picker; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode + selectedDate:(NSDate *)selectedDate + doneBlock:(ActionDateDoneBlock)doneBlock + cancelBlock:(ActionDateCancelBlock)cancelBlock + origin:(UIView*)view +{ + ActionSheetDatePicker* picker = [[ActionSheetDatePicker alloc] initWithTitle:title + datePickerMode:datePickerMode + selectedDate:selectedDate + doneBlock:doneBlock + cancelBlock:cancelBlock + origin:view]; + [picker showActionSheetPicker]; + return picker; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode + selectedDate:(NSDate *)selectedDate + minimumDate:(NSDate *)minimumDate + maximumDate:(NSDate *)maximumDate + doneBlock:(ActionDateDoneBlock)doneBlock + cancelBlock:(ActionDateCancelBlock)cancelBlock + origin:(UIView*)view +{ + ActionSheetDatePicker* picker = [[ActionSheetDatePicker alloc] initWithTitle:title + datePickerMode:datePickerMode + selectedDate:selectedDate + doneBlock:doneBlock + cancelBlock:cancelBlock + origin:view]; + [picker setMinimumDate:minimumDate]; + [picker setMaximumDate:maximumDate]; + [picker showActionSheetPicker]; + return picker; +} + +- (id)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin +{ + self = [self initWithTitle:title datePickerMode:datePickerMode selectedDate:selectedDate target:target action:action origin:origin cancelAction:nil]; + return self; +} + +- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action origin:(id)origin +{ + self = [self initWithTitle:title datePickerMode:datePickerMode selectedDate:selectedDate target:target action:action origin:origin cancelAction:nil]; + self.minimumDate = minimumDate; + self.maximumDate = maximumDate; + return self; +} + +- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction +{ + self = [super initWithTarget:target successAction:action cancelAction:cancelAction origin:origin]; + if (self) { + self.title = title; + self.datePickerMode = datePickerMode; + self.selectedDate = selectedDate; + } + return self; +} + +- (instancetype)initWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action cancelAction:(SEL)cancelAction origin:(id)origin +{ + self = [super initWithTarget:target successAction:action cancelAction:cancelAction origin:origin]; + if (self) { + self.title = title; + self.datePickerMode = datePickerMode; + self.selectedDate = selectedDate; + self.minimumDate = minimumDate; + self.maximumDate = maximumDate; + } + return self; +} + +- (instancetype)initWithTitle:(NSString *)title + datePickerMode:(UIDatePickerMode)datePickerMode + selectedDate:(NSDate *)selectedDate + doneBlock:(ActionDateDoneBlock)doneBlock + cancelBlock:(ActionDateCancelBlock)cancelBlock + origin:(UIView*)origin +{ + self = [self initWithTitle:title datePickerMode:datePickerMode selectedDate:selectedDate target:nil action:nil origin:origin]; + if (self) { + self.onActionSheetDone = doneBlock; + self.onActionSheetCancel = cancelBlock; + } + return self; +} + +- (UIView *)configuredPickerView { + CGRect datePickerFrame = CGRectMake(0, 40, self.viewSize.width, 216); + UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:datePickerFrame]; + datePicker.datePickerMode = self.datePickerMode; + datePicker.maximumDate = self.maximumDate; + datePicker.minimumDate = self.minimumDate; + datePicker.minuteInterval = self.minuteInterval; + datePicker.calendar = self.calendar; + datePicker.timeZone = self.timeZone; + datePicker.locale = self.locale; + + // if datepicker is set with a date in countDownMode then + // 1h is added to the initial countdown + if (self.datePickerMode == UIDatePickerModeCountDownTimer) { + datePicker.countDownDuration = self.countDownDuration; + // Due to a bug in UIDatePicker, countDownDuration needs to be set asynchronously + // more info: http://stackoverflow.com/a/20204317/1161723 + dispatch_async(dispatch_get_main_queue(), ^{ + datePicker.countDownDuration = self.countDownDuration; + }); + } else { + [datePicker setDate:self.selectedDate animated:NO]; + } + + [datePicker addTarget:self action:@selector(eventForDatePicker:) forControlEvents:UIControlEventValueChanged]; + + //need to keep a reference to the picker so we can clear the DataSource / Delegate when dismissing (not used in this picker, but just in case somebody uses this as a template for another picker) + self.pickerView = datePicker; + + return datePicker; +} + +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)action origin:(id)origin +{ + if (self.onActionSheetDone) + { + if (self.datePickerMode == UIDatePickerModeCountDownTimer) + self.onActionSheetDone(self, @(((UIDatePicker *)self.pickerView).countDownDuration), origin); + else + self.onActionSheetDone(self, self.selectedDate, origin); + + return; + } + else if ([target respondsToSelector:action]) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + if (self.datePickerMode == UIDatePickerModeCountDownTimer) { + [target performSelector:action withObject:@(((UIDatePicker *)self.pickerView).countDownDuration) withObject:origin]; + + } else { + [target performSelector:action withObject:self.selectedDate withObject:origin]; + } +#pragma clang diagnostic pop + else + NSAssert(NO, @"Invalid target/action ( %s / %s ) combination used for ActionSheetPicker", object_getClassName(target), sel_getName(action)); +} + +- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin +{ + if (self.onActionSheetCancel) + { + self.onActionSheetCancel(self); + return; + } + else + if ( target && cancelAction && [target respondsToSelector:cancelAction] ) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:cancelAction withObject:origin]; +#pragma clang diagnostic pop + } +} + +- (void)eventForDatePicker:(id)sender +{ + if (!sender || ![sender isKindOfClass:[UIDatePicker class]]) + return; + UIDatePicker *datePicker = (UIDatePicker *)sender; + self.selectedDate = datePicker.date; + self.countDownDuration = datePicker.countDownDuration; +} + +- (void)customButtonPressed:(id)sender { + UIBarButtonItem *button = (UIBarButtonItem*)sender; + NSInteger index = button.tag; + NSAssert((index >= 0 && index < self.customButtons.count), @"Bad custom button tag: %zd, custom button count: %zd", index, self.customButtons.count); + NSDictionary *buttonDetails = (self.customButtons)[(NSUInteger) index]; + NSAssert(buttonDetails != NULL, @"Custom button dictionary is invalid"); + + ActionType actionType = (ActionType) [buttonDetails[kActionType] integerValue]; + switch (actionType) { + case ActionTypeValue: { + NSAssert([self.pickerView respondsToSelector:@selector(setDate:animated:)], @"Bad pickerView for ActionSheetDatePicker, doesn't respond to setDate:animated:"); + NSDate *itemValue = buttonDetails[kButtonValue]; + UIDatePicker *picker = (UIDatePicker *)self.pickerView; + if (self.datePickerMode != UIDatePickerModeCountDownTimer) + { + [picker setDate:itemValue animated:YES]; + [self eventForDatePicker:picker]; + } + break; + } + + case ActionTypeBlock: + case ActionTypeSelector: + [super customButtonPressed:sender]; + break; + + default: + NSAssert(false, @"Unknown action type"); + break; + } +} + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.h new file mode 100644 index 0000000000..f8f74e4ed0 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.h @@ -0,0 +1,39 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "AbstractActionSheetPicker.h" +#import "DistancePickerView.h" +@interface ActionSheetDistancePicker : AbstractActionSheetPicker + ++ (instancetype)showPickerWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin; + +- (instancetype)initWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin; + ++ (instancetype)showPickerWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; + +- (instancetype)initWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction; +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.m new file mode 100644 index 0000000000..c9abcb945a --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetDistancePicker.m @@ -0,0 +1,207 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "ActionSheetDistancePicker.h" +#import + +@interface ActionSheetDistancePicker() +@property (nonatomic, strong) NSString *bigUnitString; +@property (nonatomic, assign) NSInteger selectedBigUnit; +@property (nonatomic, assign) NSInteger bigUnitMax; +@property (nonatomic, assign) NSInteger bigUnitDigits; +@property (nonatomic, strong) NSString *smallUnitString; +@property (nonatomic, assign) NSInteger selectedSmallUnit; +@property (nonatomic, assign) NSInteger smallUnitMax; +@property (nonatomic, assign) NSInteger smallUnitDigits; +@end + +@implementation ActionSheetDistancePicker + ++ (instancetype)showPickerWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin { + ActionSheetDistancePicker *picker = [[ActionSheetDistancePicker alloc] initWithTitle:title bigUnitString:bigUnitString bigUnitMax:bigUnitMax selectedBigUnit:selectedBigUnit smallUnitString:smallUnitString smallUnitMax:smallUnitMax selectedSmallUnit:selectedSmallUnit target:target action:action origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin { + self = [super initWithTarget:target successAction:action cancelAction:nil origin:origin]; + if (self) { + self.title = title; + self.bigUnitString = bigUnitString; + self.bigUnitMax = bigUnitMax; + self.selectedBigUnit = selectedBigUnit; + self.smallUnitString = smallUnitString; + self.smallUnitMax = smallUnitMax; + self.selectedSmallUnit = selectedSmallUnit; + self.bigUnitDigits = [[NSString stringWithFormat:@"%li", (long)self.bigUnitMax] length]; + self.smallUnitDigits = [[NSString stringWithFormat:@"%li", (long)self.smallUnitMax] length]; + } + return self; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction +{ + ActionSheetDistancePicker *picker = [[ActionSheetDistancePicker alloc] initWithTitle:title bigUnitString:bigUnitString bigUnitMax:bigUnitMax selectedBigUnit:selectedBigUnit smallUnitString:smallUnitString smallUnitMax:smallUnitMax selectedSmallUnit:selectedSmallUnit target:target action:action origin:origin cancelAction:cancelAction]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title bigUnitString:(NSString *)bigUnitString bigUnitMax:(NSInteger)bigUnitMax selectedBigUnit:(NSInteger)selectedBigUnit smallUnitString:(NSString *)smallUnitString smallUnitMax:(NSInteger)smallUnitMax selectedSmallUnit:(NSInteger)selectedSmallUnit target:(id)target action:(SEL)action origin:(id)origin cancelAction:(SEL)cancelAction +{ + self = [super initWithTarget:target successAction:action cancelAction:cancelAction origin:origin]; + if (self) { + self.title = title; + self.bigUnitString = bigUnitString; + self.bigUnitMax = bigUnitMax; + self.selectedBigUnit = selectedBigUnit; + self.smallUnitString = smallUnitString; + self.smallUnitMax = smallUnitMax; + self.selectedSmallUnit = selectedSmallUnit; + self.bigUnitDigits = [[NSString stringWithFormat:@"%li", (long)self.bigUnitMax] length]; + self.smallUnitDigits = [[NSString stringWithFormat:@"%li", (long)self.smallUnitMax] length]; + } + return self; +} + + +- (UIView *)configuredPickerView { + CGRect distancePickerFrame = CGRectMake(0, 40, self.viewSize.width, 216); + DistancePickerView *picker = [[DistancePickerView alloc] initWithFrame:distancePickerFrame]; + picker.delegate = self; + picker.dataSource = self; + picker.showsSelectionIndicator = YES; +// [picker addLabel:self.bigUnitString forComponent:(NSUInteger) (self.bigUnitDigits - 1) forLongestString:nil]; +// [picker addLabel:self.smallUnitString forComponent:(NSUInteger) (self.bigUnitDigits + self.smallUnitDigits - 1) +// forLongestString:nil]; + + NSInteger unitSubtract = 0; + NSInteger currentDigit = 0; + + for (int i = 0; i < self.bigUnitDigits; ++i) { + NSInteger factor = (int)pow((double)10, (double)(self.bigUnitDigits - (i+1))); + currentDigit = (( self.selectedBigUnit - unitSubtract ) / factor ) ; + [picker selectRow:currentDigit inComponent:i animated:NO]; + unitSubtract += currentDigit * factor; + } + + unitSubtract = 0; + + for (NSInteger i = self.bigUnitDigits + 1; i < self.bigUnitDigits + self.smallUnitDigits + 1; ++i) { + NSInteger factor = (int)pow((double)10, (double)(self.bigUnitDigits + self.smallUnitDigits + 1 - (i+1))); + currentDigit = (( self.selectedSmallUnit - unitSubtract ) / factor ) ; + [picker selectRow:currentDigit inComponent:i animated:NO]; + unitSubtract += currentDigit * factor; + } + + //need to keep a reference to the picker so we can clear the DataSource / Delegate when dismissing + self.pickerView = picker; + + return picker; +} + +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)action origin:(id)origin { + NSInteger bigUnits = 0; + NSInteger smallUnits = 0; + DistancePickerView *picker = (DistancePickerView *)self.pickerView; + for (int i = 0; i < self.bigUnitDigits; ++i) + bigUnits += [picker selectedRowInComponent:i] * (int)pow((double)10, (double)(self.bigUnitDigits - (i + 1))); + + for (NSInteger i = self.bigUnitDigits + 1; i < self.bigUnitDigits + self.smallUnitDigits + 1; ++i) + smallUnits += [picker selectedRowInComponent:i] * (int)pow((double)10, (double)((picker.numberOfComponents - i - 2))); + + //sending three objects, so can't use performSelector: + if ([target respondsToSelector:action]) + { + void (*response)(id, SEL, id, id,id) = (void (*)(id, SEL, id, id,id)) objc_msgSend; + response(target, action, @(bigUnits), @(smallUnits), origin); + } + else + NSAssert(NO, @"Invalid target/action ( %s / %s ) combination used for ActionSheetPicker", object_getClassName(target), sel_getName(action)); +} + +#pragma mark - +#pragma mark UIPickerViewDataSource + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { + return self.bigUnitDigits + self.smallUnitDigits + 2; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { + + //for labels + if (component == self.bigUnitDigits || component == self.bigUnitDigits + self.smallUnitDigits + 1) + return 1; + + if (component + 1 <= self.bigUnitDigits) { + if (component == 0) + return self.bigUnitMax / (int)pow((double)10, (double)(self.bigUnitDigits - 1)) + 1; + return 10; + } + if (component == self.bigUnitDigits + 1) + return self.smallUnitMax / (int)pow((double)10, (double)(self.smallUnitDigits - 1)) + 1; + return 10; +} + +- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ + + CGFloat totalWidth = pickerView.frame.size.width - 30; + CGFloat otherSize = (totalWidth )/(self.bigUnitDigits + self.smallUnitDigits + 2); + + UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, otherSize, 30)]; + + label.textAlignment = NSTextAlignmentCenter; + + label.font = [UIFont boldSystemFontOfSize:20]; + + if ( component == self.bigUnitDigits ) + { + label.text = self.bigUnitString; + return label; + } + else if ( component == self.bigUnitDigits + self.smallUnitDigits + 1 ) + { + label.text = self.smallUnitString; + return label; + } + + label.font = [UIFont systemFontOfSize:20]; + label.text = [NSString stringWithFormat:@"%li", (long)row]; + return label; +} + +- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { + CGFloat totalWidth = pickerView.frame.size.width - 30; + CGFloat otherSize = (totalWidth )/(self.bigUnitDigits + self.smallUnitDigits + 2); + return otherSize; +} + + +- (void)customButtonPressed:(id)sender { + NSLog(@"Not implemented. If you get around to it, please contribute back to the project :)"); +} + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.h new file mode 100644 index 0000000000..0ba50a6bb8 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.h @@ -0,0 +1,63 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "AbstractActionSheetPicker.h" + +@class ActionSheetLocalePicker; +typedef void(^ActionLocaleDoneBlock)(ActionSheetLocalePicker *picker, NSTimeZone * selectedValue); +typedef void(^ActionLocaleCancelBlock)(ActionSheetLocalePicker *picker); + +static const float firstColumnWidth = 100.0f; +static const float secondColumnWidth = 160.0f; + +@interface ActionSheetLocalePicker : AbstractActionSheetPicker + +/** + * Create and display an action sheet picker. + * + * @param title Title label for picker + * @param index is used to establish the initially selected row; + * @param target must not be empty. It should respond to "onSuccess" actions. + * @param successAction successAction + * @param cancelActionOrNil cancelAction + * @param origin must not be empty. It can be either an originating container view or a UIBarButtonItem to use with a popover arrow. + * + * @return return instance of picker + */ ++ (instancetype)showPickerWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; + +// Create an action sheet picker, but don't display until a subsequent call to "showActionPicker". Receiver must release the picker when ready. */ +- (instancetype)initWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; + ++ (instancetype)showPickerWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index doneBlock:(ActionLocaleDoneBlock)doneBlock cancelBlock:(ActionLocaleCancelBlock)cancelBlock origin:(id)origin; + +- (instancetype)initWithTitle:(NSString *)title initialSelection:(NSTimeZone *)timeZone doneBlock:(ActionLocaleDoneBlock)doneBlock cancelBlock:(ActionLocaleCancelBlock)cancelBlockOrNil origin:(id)origin; + +@property (nonatomic, copy) ActionLocaleDoneBlock onActionSheetDone; +@property (nonatomic, copy) ActionLocaleCancelBlock onActionSheetCancel; + +@end \ No newline at end of file diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.m new file mode 100644 index 0000000000..05308bea59 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetLocalePicker.m @@ -0,0 +1,408 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "ActionSheetLocalePicker.h" + +@interface ActionSheetLocalePicker() +//@property (nonatomic,strong) NSArray *data; +//@property (nonatomic,assign) NSInteger selectedIndex; + +@property(nonatomic, strong) NSTimeZone *initialTimeZone; + +@property (nonatomic, strong) NSString *selectedContinent; +@property (nonatomic, strong) NSString *selectedCity; + +@property(nonatomic, strong) NSMutableDictionary *continentsAndCityDictionary; +@property(nonatomic, strong) NSMutableArray *continents; +@end + +@implementation ActionSheetLocalePicker + ++ (instancetype)showPickerWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index doneBlock:(ActionLocaleDoneBlock)doneBlock cancelBlock:(ActionLocaleCancelBlock)cancelBlockOrNil origin:(id)origin +{ + ActionSheetLocalePicker * picker = [[ActionSheetLocalePicker alloc] initWithTitle:title initialSelection:index doneBlock:doneBlock cancelBlock:cancelBlockOrNil origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title initialSelection:(NSTimeZone *)timeZone doneBlock:(ActionLocaleDoneBlock)doneBlock cancelBlock:(ActionLocaleCancelBlock)cancelBlockOrNil origin:(id)origin +{ + self = [self initWithTitle:title initialSelection:timeZone target:nil successAction:nil cancelAction:nil origin:origin]; + if (self) { + self.onActionSheetDone = doneBlock; + self.onActionSheetCancel = cancelBlockOrNil; + } + return self; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin +{ + ActionSheetLocalePicker *picker = [[ActionSheetLocalePicker alloc] initWithTitle:title initialSelection:index target:target successAction:successAction cancelAction:cancelActionOrNil origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title initialSelection:(NSTimeZone *)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin +{ + self = [self initWithTarget:target successAction:successAction cancelAction:cancelActionOrNil origin:origin]; + if (self) { + self.initialTimeZone = index; + self.title = title; + } + return self; +} + + +- (UIView *)configuredPickerView { + [self fillContinentsAndCities]; + [self setSelectedRows]; + + CGRect pickerFrame = CGRectMake(0, 40, self.viewSize.width, 216); + UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame]; + pickerView.delegate = self; + pickerView.dataSource = self; + + pickerView.showsSelectionIndicator = YES; + + [self selectCurrentLocale:pickerView]; + + //need to keep a reference to the picker so we can clear the DataSource / Delegate when dismissing + self.pickerView = pickerView; + + return pickerView; +} + +- (void)selectCurrentLocale:(UIPickerView *)pickerView +{ + NSUInteger rowContinent = [_continents indexOfObject:self.selectedContinent]; + NSUInteger rowCity = [[self getCitiesByContinent:self.selectedContinent] indexOfObject:self.selectedCity]; + + if ((rowContinent != NSNotFound) && (rowCity != NSNotFound)) // to fix some crashes from prev versions http://crashes.to/s/ecb0f15ce49 + { + [pickerView selectRow:rowContinent inComponent:0 animated:YES]; + [pickerView reloadComponent:1]; + [pickerView selectRow:rowCity inComponent:1 animated:YES]; + } + else + { + [pickerView selectRow:0 inComponent:0 animated:YES]; + [pickerView selectRow:0 inComponent:1 animated:YES]; + } +} + +-(void)fillContinentsAndCities +{ + NSArray *timeZones = [NSTimeZone knownTimeZoneNames]; + + NSMutableDictionary *continentsDict = [[NSMutableDictionary alloc] init]; + + _continents= [[NSMutableArray alloc] init]; + + [timeZones enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) + { + if ( [obj isKindOfClass:[NSString class]] ) + { + NSString *string = (NSString *) obj; + NSArray *array = [string componentsSeparatedByString:@"/"]; + + if ( [array count] == 2) + { + if ( continentsDict[array[0]] ) //if continent exists + { + NSMutableArray *citys = continentsDict[array[0]]; + [citys addObject:array[1]]; + } + else //it's new continent + { + NSMutableArray *mutableArray = [@[array[1]] mutableCopy]; + continentsDict[array[0]] = mutableArray; + [_continents addObject:array[0]]; + } + } + else if (array.count == 3) + { + NSString *string0 = array[0]; + NSString *string1 = array[1]; + NSString *string2 = array[2]; + NSString *string3 = [string1 stringByAppendingFormat:@"/%@", string2]; + + if ( continentsDict[string0] ) //if continent exists + { + NSMutableArray *citys = continentsDict[string0]; + [citys addObject:string3]; + } + else //it's new continent + { + NSMutableArray *mutableArray = [@[string3] mutableCopy]; + continentsDict[string0] = mutableArray; + [_continents addObject:string0]; + } + } + } + + }]; + + self.continentsAndCityDictionary = continentsDict; +}; + +- (void)setSelectedRows +{ + NSString *string; + if (self.initialTimeZone) + string = self.initialTimeZone.name; + else + string = [[NSTimeZone localTimeZone] name]; + + NSArray *array = [string componentsSeparatedByString:@"/"]; + if (array.count == 1) + { + // Unknown time zone - appeared only in travis builds. + self.selectedContinent = _continents[0]; + self.selectedCity = [self getCitiesByContinent:self.selectedContinent][0]; + } + else if (array.count == 2) + { + self.selectedContinent = array[0]; + self.selectedCity = array[1]; + } + else + { + assert(NO); + } + +} + + +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)successAction origin:(id)origin { + + NSString *timeZoneId = [NSString stringWithFormat:@"%@/%@", self.selectedContinent, self.selectedCity]; + NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:timeZoneId]; + + if (self.onActionSheetDone) { + _onActionSheetDone(self, timeZone); + return; + } + else if (target && [target respondsToSelector:successAction]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:successAction withObject:timeZone withObject:origin]; +#pragma clang diagnostic pop + return; + } + NSLog(@"Invalid target/action ( %s / %s ) combination used for ActionSheetPicker", object_getClassName(target), sel_getName(successAction)); +} + +- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin { + if (self.onActionSheetCancel) { + _onActionSheetCancel(self); + return; + } + else if (target && cancelAction && [target respondsToSelector:cancelAction]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:cancelAction withObject:origin]; +#pragma clang diagnostic pop + } +} + +#pragma mark - UIPickerViewDelegate / DataSource +// +//- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { +// id obj = [self.data objectAtIndex:(NSUInteger) row]; +// +// // return the object if it is already a NSString, +// // otherwise, return the description, just like the toString() method in Java +// // else, return nil to prevent exception +// +// if ([obj isKindOfClass:[NSString class]]) +// return obj; +// +// if ([obj respondsToSelector:@selector(description)]) +// return [obj performSelector:@selector(description)]; +// +// return nil; +//} +// + + +///////////////////////////////////////////////////////////////////////// +#pragma mark - UIPickerViewDataSource Implementation +///////////////////////////////////////////////////////////////////////// + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView +{ + return 2; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component +{ + // Returns + switch (component) { + case 0: return [_continents count]; + case 1: return [[self getCitiesByContinent:self.selectedContinent] count]; + default:break; + } + return 0; +} + +///////////////////////////////////////////////////////////////////////// +#pragma mark UIPickerViewDelegate Implementation +///////////////////////////////////////////////////////////////////////// + +// returns width of column and height of row for each component. +- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component +{ + + switch (component) { + + case 0: return firstColumnWidth; + case 1: return secondColumnWidth; + default:break; + } + + return 0; +} + +- (UIView *)pickerView:(UIPickerView *)pickerView + viewForRow:(NSInteger)row + forComponent:(NSInteger)component + reusingView:(UIView *)view { + + UILabel *pickerLabel = (UILabel *)view; + + if (pickerLabel == nil) { + CGRect frame = CGRectZero; + + + switch (component) { + case 0: frame = CGRectMake(0.0, 0.0, firstColumnWidth, 32); + break; + case 1: + frame = CGRectMake(0.0, 0.0, secondColumnWidth, 32); + break; + default: + assert(NO); + break; + } + + pickerLabel = [[UILabel alloc] initWithFrame:frame]; + [pickerLabel setTextAlignment:NSTextAlignmentCenter]; + if ([pickerLabel respondsToSelector:@selector(setMinimumScaleFactor:)]) + [pickerLabel setMinimumScaleFactor:0.5]; + [pickerLabel setAdjustsFontSizeToFitWidth:YES]; + [pickerLabel setBackgroundColor:[UIColor clearColor]]; + [pickerLabel setFont:[UIFont systemFontOfSize:20]]; + } + + NSString *text; + switch (component) { + case 0: text = (self.continents)[(NSUInteger) row]; + break; + case 1: + { + NSString *cityTitle = [self getCitiesByContinent:self.selectedContinent][(NSUInteger) row]; + NSString *timeZoneId = [NSString stringWithFormat:@"%@/%@", self.selectedContinent, cityTitle]; + NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:timeZoneId]; + + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setTimeZone:timeZone]; + [dateFormatter setDateFormat:@"z"]; + text = [cityTitle stringByAppendingString:[NSString stringWithFormat: @" (%@)", [dateFormatter stringFromDate:[NSDate date]]]]; + + break; + } + default:break; + } + + [pickerLabel setText:text]; + + return pickerLabel; + +} + +///////////////////////////////////////////////////////////////////////// + +- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component +{ + switch (component) { + case 0: + { + self.selectedContinent = (self.continents)[(NSUInteger) row]; + [pickerView reloadComponent:1]; + self.selectedCity = [self getCitiesByContinent:self.selectedContinent][(NSUInteger) [pickerView selectedRowInComponent:1]]; + return; + } + + case 1: + self.selectedCity = [self getCitiesByContinent:self.selectedContinent][(NSUInteger) row]; + return; + default:break; + } +} + +-(NSMutableArray *)getCitiesByContinent:(NSString *)continent +{ + NSMutableArray *citiesIncontinent = _continentsAndCityDictionary[continent]; + return citiesIncontinent; +}; + + +- (void)customButtonPressed:(id)sender { + UIBarButtonItem *button = (UIBarButtonItem*)sender; + NSInteger index = button.tag; + NSAssert((index >= 0 && index < self.customButtons.count), @"Bad custom button tag: %ld, custom button count: %lu", (long)index, (unsigned long)self.customButtons.count); + + NSDictionary *buttonDetails = (self.customButtons)[(NSUInteger) index]; + NSAssert(buttonDetails != NULL, @"Custom button dictionary is invalid"); + + ActionType actionType = (ActionType) [buttonDetails[kActionType] intValue]; + switch (actionType) { + case ActionTypeValue: { + id itemValue = buttonDetails[kButtonValue]; + if ( [itemValue isKindOfClass:[NSTimeZone class]] ) + { + NSTimeZone *timeZone = (NSTimeZone *) itemValue; + self.initialTimeZone = timeZone; + [self setSelectedRows]; + [self selectCurrentLocale:(UIPickerView *) self.pickerView]; + } + break; + } + + case ActionTypeBlock: + case ActionTypeSelector: + [super customButtonPressed:sender]; + break; + default: + NSAssert(false, @"Unknown action type"); + break; + } +} + + + +@end \ No newline at end of file diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.h new file mode 100644 index 0000000000..5145f285da --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.h @@ -0,0 +1,65 @@ +// +// ActionSheetMultipleStringPicker.h +// CoreActionSheetPicker +// +// Created by Alejandro on 21/07/15. +// Copyright (c) 2015 Petr Korolev. 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 of the 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 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. +// + +#import "AbstractActionSheetPicker.h" + +@class ActionSheetMultipleStringPicker; +typedef void(^ActionMultipleStringDoneBlock)(ActionSheetMultipleStringPicker *picker, NSArray *selectedIndexes, id selectedValues); +typedef void(^ActionMultipleStringCancelBlock)(ActionSheetMultipleStringPicker *picker); + +@interface ActionSheetMultipleStringPicker : AbstractActionSheetPicker +/** + * Create and display an action sheet picker. + * + * @param title Title label for picker + * @param data is an array of strings to use for the picker's available selection choices + * @param indexes is used to establish the initially selected row; + * @param target must not be empty. It should respond to "onSuccess" actions. + * @param successAction successAction + * @param cancelActionOrNil cancelAction + * @param origin must not be empty. It can be either an originating container view or a UIBarButtonItem to use with a popover arrow. + * + * @return return instance of picker + */ ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSArray *)indexes target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; + +// Create an action sheet picker, but don't display until a subsequent call to "showActionPicker". Receiver must release the picker when ready. */ +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSArray *)indexes target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; + + + ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSArray *)indexes doneBlock:(ActionMultipleStringDoneBlock)doneBlock cancelBlock:(ActionMultipleStringCancelBlock)cancelBlock origin:(id)origin; + +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSArray *)indexes doneBlock:(ActionMultipleStringDoneBlock)doneBlock cancelBlock:(ActionMultipleStringCancelBlock)cancelBlockOrNil origin:(id)origin; + +@property (nonatomic, copy) ActionMultipleStringDoneBlock onActionSheetDone; +@property (nonatomic, copy) ActionMultipleStringCancelBlock onActionSheetCancel; + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.m new file mode 100644 index 0000000000..8eb2dea1e0 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetMultipleStringPicker.m @@ -0,0 +1,225 @@ +// +// ActionSheetMultipleStringPicker.m +// CoreActionSheetPicker +// +// Created by Alejandro on 21/07/15. +// Copyright (c) 2015 Petr Korolev. 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 of the 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 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. +// + +#import "ActionSheetMultipleStringPicker.h" + +@interface ActionSheetMultipleStringPicker() +@property (nonatomic,strong) NSArray *data; //Array of string arrays :) +@property (nonatomic,strong) NSArray *initialSelection; +@end + +@implementation ActionSheetMultipleStringPicker + ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSArray *)indexes doneBlock:(ActionMultipleStringDoneBlock)doneBlock cancelBlock:(ActionMultipleStringCancelBlock)cancelBlockOrNil origin:(id)origin { + ActionSheetMultipleStringPicker * picker = [[ActionSheetMultipleStringPicker alloc] initWithTitle:title rows:strings initialSelection:indexes doneBlock:doneBlock cancelBlock:cancelBlockOrNil origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSArray *)indexes doneBlock:(ActionMultipleStringDoneBlock)doneBlock cancelBlock:(ActionMultipleStringCancelBlock)cancelBlockOrNil origin:(id)origin { + self = [self initWithTitle:title rows:strings initialSelection:indexes target:nil successAction:nil cancelAction:nil origin:origin]; + if (self) { + self.onActionSheetDone = doneBlock; + self.onActionSheetCancel = cancelBlockOrNil; + } + return self; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSArray *)indexes target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin { + ActionSheetMultipleStringPicker *picker = [[ActionSheetMultipleStringPicker alloc] initWithTitle:title rows:data initialSelection:indexes target:target successAction:successAction cancelAction:cancelActionOrNil origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSArray *)indexes target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin { + self = [self initWithTarget:target successAction:successAction cancelAction:cancelActionOrNil origin:origin]; + if (self) { + self.data = data; + self.initialSelection = indexes; + self.title = title; + } + return self; +} + + +- (UIView *)configuredPickerView { + if (!self.data) + return nil; + CGRect pickerFrame = CGRectMake(0, 40, self.viewSize.width, 216); + UIPickerView *stringPicker = [[UIPickerView alloc] initWithFrame:pickerFrame]; + stringPicker.delegate = self; + stringPicker.dataSource = self; + + [self performInitialSelectionInPickerView:stringPicker]; + + if (self.data.count == 0) { + stringPicker.showsSelectionIndicator = NO; + stringPicker.userInteractionEnabled = NO; + } else { + stringPicker.showsSelectionIndicator = YES; + stringPicker.userInteractionEnabled = YES; + } + + //need to keep a reference to the picker so we can clear the DataSource / Delegate when dismissing + self.pickerView = stringPicker; + + return stringPicker; +} + +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)successAction origin:(id)origin { + if (self.onActionSheetDone) { + _onActionSheetDone(self, [self selectedIndexes], [self selection]); + return; + } + else if (target && [target respondsToSelector:successAction]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:successAction withObject:self.selectedIndexes withObject:origin]; +#pragma clang diagnostic pop + return; + } + NSLog(@"Invalid target/action ( %s / %s ) combination used for ActionSheetPicker and done block is nil.", object_getClassName(target), sel_getName(successAction)); +} + +- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin { + if (self.onActionSheetCancel) { + _onActionSheetCancel(self); + return; + } + else if (target && cancelAction && [target respondsToSelector:cancelAction]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:cancelAction withObject:origin]; +#pragma clang diagnostic pop + } +} + +#pragma mark - UIPickerViewDelegate / DataSource + +- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { + +} + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { + return [self.data count]; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { + return ((NSArray *)self.data[component]).count; +} + +- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { + id obj = (self.data)[(NSUInteger) row]; + + // return the object if it is already a NSString, + // otherwise, return the description, just like the toString() method in Java + // else, return nil to prevent exception + + if ([obj isKindOfClass:[NSString class]]) + return obj; + + if ([obj respondsToSelector:@selector(description)]) + return [obj performSelector:@selector(description)]; + + return nil; +} + +- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component { + id obj = (self.data)[component][(NSUInteger) row]; + + // return the object if it is already a NSString, + // otherwise, return the description, just like the toString() method in Java + // else, return nil to prevent exception + + if ([obj isKindOfClass:[NSString class]]) + return [[NSAttributedString alloc] initWithString:obj attributes:self.pickerTextAttributes]; + + if ([obj respondsToSelector:@selector(description)]) + return [[NSAttributedString alloc] initWithString:[obj performSelector:@selector(description)] attributes:self.pickerTextAttributes]; + + return nil; +} + +- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { + UILabel *pickerLabel = (UILabel *)view; + if (pickerLabel == nil) { + pickerLabel = [[UILabel alloc] init]; + } + id obj = (self.data)[component][row]; + + NSAttributedString *attributeTitle = nil; + // use the object if it is already a NSString, + // otherwise, use the description, just like the toString() method in Java + // else, use String with no text to ensure this delegate do not return a nil value. + + if ([obj isKindOfClass:[NSString class]]) + attributeTitle = [[NSAttributedString alloc] initWithString:obj attributes:self.pickerTextAttributes]; + + if ([obj respondsToSelector:@selector(description)]) + attributeTitle = [[NSAttributedString alloc] initWithString:[obj performSelector:@selector(description)] attributes:self.pickerTextAttributes]; + + if (attributeTitle == nil) { + attributeTitle = [[NSAttributedString alloc] initWithString:@"" attributes:self.pickerTextAttributes]; + } + pickerLabel.attributedText = attributeTitle; + return pickerLabel; +} + + +- (void)performInitialSelectionInPickerView:(UIPickerView *)pickerView { + for (int i = 0; i < self.selectedIndexes.count; i++) { + NSInteger row = [(NSNumber *)self.initialSelection[i] integerValue]; + [pickerView selectRow:row inComponent:i animated:NO]; + } +} + +- (NSArray *)selection { + NSMutableArray * array = [NSMutableArray array]; + for (int i = 0; i < self.data.count; i++) { + id object = self.data[i][[(UIPickerView *)self.pickerView selectedRowInComponent:(NSInteger)i]]; + [array addObject: object]; + } + return [array copy]; +} + +- (NSArray *)selectedIndexes { + NSMutableArray * indexes = [NSMutableArray array]; + for (int i = 0; i < self.data.count; i++) { + NSNumber *index = [NSNumber numberWithInteger:[(UIPickerView *)self.pickerView selectedRowInComponent:(NSInteger)i]]; + [indexes addObject: index]; + } + return [indexes copy]; +} + +//- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { +// return pickerView.frame.size.width - 30; +//} + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetPicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetPicker.h new file mode 100644 index 0000000000..69c67ee7ec --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetPicker.h @@ -0,0 +1,35 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "ActionSheetCustomPickerDelegate.h" +#import "AbstractActionSheetPicker.h" +#import "ActionSheetCustomPicker.h" +#import "ActionSheetDatePicker.h" +#import "ActionSheetDistancePicker.h" +#import "ActionSheetLocalePicker.h" +#import "ActionSheetStringPicker.h" +#import "ActionSheetMultipleStringPicker.h" \ No newline at end of file diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.h new file mode 100644 index 0000000000..7ba0c842c2 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.h @@ -0,0 +1,62 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "AbstractActionSheetPicker.h" + +@class ActionSheetStringPicker; +typedef void(^ActionStringDoneBlock)(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue); +typedef void(^ActionStringCancelBlock)(ActionSheetStringPicker *picker); + +@interface ActionSheetStringPicker : AbstractActionSheetPicker +/** + * Create and display an action sheet picker. + * + * @param title Title label for picker + * @param data is an array of strings to use for the picker's available selection choices + * @param index is used to establish the initially selected row; + * @param target must not be empty. It should respond to "onSuccess" actions. + * @param successAction successAction + * @param cancelActionOrNil cancelAction + * @param origin must not be empty. It can be either an originating container view or a UIBarButtonItem to use with a popover arrow. + * + * @return return instance of picker + */ ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSInteger)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; + + // Create an action sheet picker, but don't display until a subsequent call to "showActionPicker". Receiver must release the picker when ready. */ +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSInteger)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin; + + + ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSInteger)index doneBlock:(ActionStringDoneBlock)doneBlock cancelBlock:(ActionStringCancelBlock)cancelBlock origin:(id)origin; + +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSInteger)index doneBlock:(ActionStringDoneBlock)doneBlock cancelBlock:(ActionStringCancelBlock)cancelBlockOrNil origin:(id)origin; + +@property (nonatomic, copy) ActionStringDoneBlock onActionSheetDone; +@property (nonatomic, copy) ActionStringCancelBlock onActionSheetCancel; + +@end \ No newline at end of file diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.m new file mode 100644 index 0000000000..8849b17409 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/ActionSheetStringPicker.m @@ -0,0 +1,195 @@ +// +//Copyright (c) 2011, Tim Cinel +//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 of the 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 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. +// + +#import "ActionSheetStringPicker.h" + +@interface ActionSheetStringPicker() +@property (nonatomic,strong) NSArray *data; +@property (nonatomic,assign) NSInteger selectedIndex; +@end + +@implementation ActionSheetStringPicker + ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSInteger)index doneBlock:(ActionStringDoneBlock)doneBlock cancelBlock:(ActionStringCancelBlock)cancelBlockOrNil origin:(id)origin { + ActionSheetStringPicker * picker = [[ActionSheetStringPicker alloc] initWithTitle:title rows:strings initialSelection:index doneBlock:doneBlock cancelBlock:cancelBlockOrNil origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)strings initialSelection:(NSInteger)index doneBlock:(ActionStringDoneBlock)doneBlock cancelBlock:(ActionStringCancelBlock)cancelBlockOrNil origin:(id)origin { + self = [self initWithTitle:title rows:strings initialSelection:index target:nil successAction:nil cancelAction:nil origin:origin]; + if (self) { + self.onActionSheetDone = doneBlock; + self.onActionSheetCancel = cancelBlockOrNil; + } + return self; +} + ++ (instancetype)showPickerWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSInteger)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin { + ActionSheetStringPicker *picker = [[ActionSheetStringPicker alloc] initWithTitle:title rows:data initialSelection:index target:target successAction:successAction cancelAction:cancelActionOrNil origin:origin]; + [picker showActionSheetPicker]; + return picker; +} + +- (instancetype)initWithTitle:(NSString *)title rows:(NSArray *)data initialSelection:(NSInteger)index target:(id)target successAction:(SEL)successAction cancelAction:(SEL)cancelActionOrNil origin:(id)origin { + self = [self initWithTarget:target successAction:successAction cancelAction:cancelActionOrNil origin:origin]; + if (self) { + self.data = data; + self.selectedIndex = index; + self.title = title; + } + return self; +} + + +- (UIView *)configuredPickerView { + if (!self.data) + return nil; + CGRect pickerFrame = CGRectMake(0, 40, self.viewSize.width, 216); + UIPickerView *stringPicker = [[UIPickerView alloc] initWithFrame:pickerFrame]; + stringPicker.delegate = self; + stringPicker.dataSource = self; + [stringPicker selectRow:self.selectedIndex inComponent:0 animated:NO]; + if (self.data.count == 0) { + stringPicker.showsSelectionIndicator = NO; + stringPicker.userInteractionEnabled = NO; + } else { + stringPicker.showsSelectionIndicator = YES; + stringPicker.userInteractionEnabled = YES; + } + + //need to keep a reference to the picker so we can clear the DataSource / Delegate when dismissing + self.pickerView = stringPicker; + + return stringPicker; +} + +- (void)notifyTarget:(id)target didSucceedWithAction:(SEL)successAction origin:(id)origin { + if (self.onActionSheetDone) { + id selectedObject = (self.data.count > 0) ? (self.data)[(NSUInteger) self.selectedIndex] : nil; + _onActionSheetDone(self, self.selectedIndex, selectedObject); + return; + } + else if (target && [target respondsToSelector:successAction]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:successAction withObject:@(self.selectedIndex) withObject:origin]; +#pragma clang diagnostic pop + return; + } + NSLog(@"Invalid target/action ( %s / %s ) combination used for ActionSheetPicker and done block is nil.", object_getClassName(target), sel_getName(successAction)); +} + +- (void)notifyTarget:(id)target didCancelWithAction:(SEL)cancelAction origin:(id)origin { + if (self.onActionSheetCancel) { + _onActionSheetCancel(self); + return; + } + else if (target && cancelAction && [target respondsToSelector:cancelAction]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:cancelAction withObject:origin]; +#pragma clang diagnostic pop + } +} + +#pragma mark - UIPickerViewDelegate / DataSource + +- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { + self.selectedIndex = row; +} + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { + return 1; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { + return self.data.count; +} + +- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { + id obj = (self.data)[(NSUInteger) row]; + + // return the object if it is already a NSString, + // otherwise, return the description, just like the toString() method in Java + // else, return nil to prevent exception + + if ([obj isKindOfClass:[NSString class]]) + return obj; + + if ([obj respondsToSelector:@selector(description)]) + return [obj performSelector:@selector(description)]; + + return nil; +} + +- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component { + id obj = (self.data)[(NSUInteger) row]; + + // return the object if it is already a NSString, + // otherwise, return the description, just like the toString() method in Java + // else, return nil to prevent exception + + if ([obj isKindOfClass:[NSString class]]) + return [[NSAttributedString alloc] initWithString:obj attributes:self.pickerTextAttributes]; + + if ([obj respondsToSelector:@selector(description)]) + return [[NSAttributedString alloc] initWithString:[obj performSelector:@selector(description)] attributes:self.pickerTextAttributes]; + + return nil; +} + +- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { + UILabel *pickerLabel = (UILabel *)view; + if (pickerLabel == nil) { + pickerLabel = [[UILabel alloc] init]; + } + id obj = (self.data)[(NSUInteger) row]; + + NSAttributedString *attributeTitle = nil; + // use the object if it is already a NSString, + // otherwise, use the description, just like the toString() method in Java + // else, use String with no text to ensure this delegate do not return a nil value. + + if ([obj isKindOfClass:[NSString class]]) + attributeTitle = [[NSAttributedString alloc] initWithString:obj attributes:self.pickerTextAttributes]; + + if ([obj respondsToSelector:@selector(description)]) + attributeTitle = [[NSAttributedString alloc] initWithString:[obj performSelector:@selector(description)] attributes:self.pickerTextAttributes]; + + if (attributeTitle == nil) { + attributeTitle = [[NSAttributedString alloc] initWithString:@"" attributes:self.pickerTextAttributes]; + } + pickerLabel.attributedText = attributeTitle; + return pickerLabel; +} + +- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { + return pickerView.frame.size.width - 30; +} + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.h new file mode 100644 index 0000000000..c6921b135a --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.h @@ -0,0 +1,21 @@ +// +// DistancePickerView.h +// +// Created by Evan on 12/27/10. +// Copyright 2010 NCPTT. All rights reserved. +// +// Adapted from LabeledPickerView by Kåre Morstøl (NotTooBad Software). +// This file only Copyright (c) 2009 Kåre Morstøl (NotTooBad Software). +// This file only under the Eclipse public license v1.0 +// http://www.eclipse.org/legal/epl-v10.html + +#import + + +@interface DistancePickerView : UIPickerView { + NSMutableDictionary *labels; +} + +- (void) addLabel:(NSString *)labeltext forComponent:(NSUInteger)component forLongestString:(NSString *)longestString; +- (void) updateLabel:(NSString *)labeltext forComponent:(NSUInteger)component; +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.m new file mode 100644 index 0000000000..72bfcc531c --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/DistancePickerView.m @@ -0,0 +1,208 @@ +// +// DistancePickerView.m +// +// Created by Evan on 12/27/10. +// Copyright 2010 NCPTT. All rights reserved. +// +// Adapted from LabeledPickerView by Kåre Morstøl (NotTooBad Software). +// This file only Copyright (c) 2009 Kåre Morstøl (NotTooBad Software). +// This file only under the Eclipse public license v1.0 +// http://www.eclipse.org/legal/epl-v10.html + +#import "DistancePickerView.h" + + +@implementation DistancePickerView + + +- (instancetype)initWithFrame:(CGRect)frame +{ + + self = [super initWithFrame:frame]; + if ( self ) + { + labels = [[NSMutableDictionary alloc] initWithCapacity:2]; + } + return self; +} + +- (void)addLabel:(NSString *)labeltext forComponent:(NSUInteger)component forLongestString:(NSString *)longestString +{ + labels[@(component)] = labeltext; + + NSString *keyName = [NSString stringWithFormat:@"%@_%ld", @"longestString", (unsigned long)component]; + + if ( !longestString ) + { + longestString = labeltext; + } + + labels[keyName] = longestString; +} + +- (void)updateLabel:(NSString *)labeltext forComponent:(NSUInteger)component +{ + + UILabel *theLabel = (UILabel *) [self viewWithTag:component + 1]; + + // Update label if it doesn’t match current label + if ( ![theLabel.text isEqualToString:labeltext] ) + { + + NSString *keyName = [NSString stringWithFormat:@"%@_%ld", @"longestString", (unsigned long)component]; + NSString *longestString = labels[keyName]; + + // Update label array with our new string value + [self addLabel:labeltext forComponent:component forLongestString:longestString]; + + // change label during fade out/in + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:0.75]; + [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; + theLabel.alpha = 0.00; + theLabel.text = labeltext; + theLabel.alpha = 1.00; + [UIView commitAnimations]; + } + +} + +/** + Adds the labels to the view, below the selection indicator glass. + The labels are aligned to the right side of the wheel. + The delegate is responsible for providing enough width for both the value and the label. + */ +- (void)didMoveToWindow +{ + // exit if view is removed from the window or there are no labels. + if ( !self.window || [labels count] == 0 ) + return; + + UIFont *labelfont = [UIFont boldSystemFontOfSize:20]; + + // find the width of all the wheels combined + CGFloat widthofwheels = 0; + for (int i = 0; i < self.numberOfComponents; i++) + { + widthofwheels += [self rowSizeForComponent:i].width; + } + + // find the left side of the first wheel. + // seems like a misnomer, but that will soon be corrected. + CGFloat rightsideofwheel = (self.frame.size.width - widthofwheels) / 2; + + // cycle through all wheels + for (int component = 0; component < self.numberOfComponents; component++) + { + // find the right side of the wheel + rightsideofwheel += [self rowSizeForComponent:component].width; + + // get the text for the label. + // move on to the next if there is no label for this wheel. + NSString *text = labels[@(component)]; + if ( text ) + { + + // set up the frame for the label using our longestString length + NSString *keyName = [NSString stringWithFormat:@"%@_%@", @"longestString", + @(component)]; + NSString *longestString = labels[keyName]; + CGRect frame; + + if ( NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) + { +#pragma clang diagnostic push +#pragma ide diagnostic ignored "UnavailableInDeploymentTarget" + frame.size = [longestString sizeWithAttributes: + @{NSFontAttributeName : + labelfont}]; +#pragma clang diagnostic pop + } + else + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + frame.size = [longestString sizeWithFont:labelfont]; +#pragma clang diagnostic pop + } + + + + // center it vertically + frame.origin.y = (CGFloat) ((self.frame.size.height / 2.f) - (frame.size.height / 2.f) - 0.5f); + + // align it to the right side of the wheel, with a margin. + // use a smaller margin for the rightmost wheel. + frame.origin.x = rightsideofwheel - frame.size.width - (component == self.numberOfComponents - 1 ? 5 : 7); + + // set up the label. If label already exists, just get a reference to it + BOOL addlabelView = NO; + UILabel *label = (UILabel *) [self viewWithTag:component + 1]; + if ( !label ) + { + label = [[UILabel alloc] initWithFrame:frame]; + addlabelView = YES; + } + + label.text = text; + label.font = labelfont; + label.backgroundColor = [UIColor clearColor]; + label.shadowColor = [UIColor whiteColor]; + label.shadowOffset = CGSizeMake(0, 1); + + // Tag cannot be 0 so just increment component number to esnure we get a positive + // NB update/remove Label methods are aware of this incrementation! + label.tag = component + 1; + + if ( addlabelView ) + { + /* + and now for the tricky bit: adding the label to the view. + kind of a hack to be honest, might stop working if Apple decides to + change the inner workings of the UIPickerView. + */ + if ( self.showsSelectionIndicator ) + { + // if this is the last wheel, add label as the third view from the top + if ( component == self.numberOfComponents - 1 ) if ( NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) + { + UIView *o = [self.subviews[0] subviews][[[self.subviews[0] subviews] count] - 1]; + UIView *subview = [o subviews][2]; + UIView *view = [(subview.subviews)[0] subviews][1]; + [self insertSubview:label aboveSubview:view]; + } + else + { + [self insertSubview:label atIndex:[self.subviews count] - 3]; + } + // otherwise add label as the 5th, 10th, 15th etc view from the top + else + { + if ( NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) + { + [self insertSubview:label + aboveSubview:[self.subviews[0] subviews][(NSUInteger) component]]; + } + else + { + [self insertSubview:label aboveSubview:(self.subviews)[(NSUInteger) (5 * (component + 1))]]; + } + + } + } else + // there is no selection indicator, so just add it to the top + [self addSubview:label]; + + } + + if ( [self.delegate respondsToSelector:@selector(pickerView:didSelectRow:inComponent:)] ) + [self.delegate pickerView:self didSelectRow:[self selectedRowInComponent:component] + inComponent:component]; + } + + } + +} + + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.h b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.h new file mode 100644 index 0000000000..802f242124 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.h @@ -0,0 +1,19 @@ +// +// Created by Petr Korolev on 11/08/14. +// + + +#import +#import + +@interface SWActionSheet : UIView +@property(nonatomic, strong) UIView *bgView; + +- (void)dismissWithClickedButtonIndex:(int)i animated:(BOOL)animated; + +- (void)showFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated; + +- (instancetype)initWithView:(UIView *)view windowLevel:(UIWindowLevel)windowLevel; + +- (void)showInContainerView; +@end \ No newline at end of file diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.m b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.m new file mode 100644 index 0000000000..da8ddb45da --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/Pickers/SWActionSheet.m @@ -0,0 +1,223 @@ +// +// Created by Petr Korolev on 11/08/14. +// + +#import "SWActionSheet.h" + + +static const float delay = 0.f; + +static const float duration = .25f; + +static const enum UIViewAnimationOptions options = UIViewAnimationOptionCurveEaseIn; + + +@interface SWActionSheetVC : UIViewController + +@property (nonatomic, retain) SWActionSheet *actionSheet; + +@end + + +@interface SWActionSheet () +{ + UIWindow *SWActionSheetWindow; +} + +@property (nonatomic, assign) BOOL presented; +@property (nonatomic) UIWindowLevel windowLevel; + +- (void)configureFrameForBounds:(CGRect)bounds; +- (void)showInContainerViewAnimated:(BOOL)animated; + +@end + + +@implementation SWActionSheet +{ + UIView *view; + UIView *_bgView; +} + +- (void)dismissWithClickedButtonIndex:(int)i animated:(BOOL)animated +{ + CGPoint fadeOutToPoint = CGPointMake(view.center.x, + self.center.y + CGRectGetHeight(view.frame)); + // Window of app + //UIWindow *appWindow = [UIApplication sharedApplication].windows.firstObject; + // Actions + void (^actions)(void) = ^{ + self.center = fadeOutToPoint; + self.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.0f]; + }; + void (^completion)(BOOL) = ^(BOOL finished) { + // if (![appWindow isKeyWindow]) + // [appWindow makeKeyAndVisible]; + [self destroyWindow]; + [self removeFromSuperview]; + }; + // Do actions animated or not + if (animated) { + [UIView animateWithDuration:duration delay:delay options:options animations:actions completion:completion]; + } else { + actions(); + completion(YES); + } + self.presented = NO; +} + +- (void)destroyWindow +{ + if (SWActionSheetWindow) + { + [self actionSheetContainer].actionSheet = nil; + SWActionSheetWindow.hidden = YES; + if ([SWActionSheetWindow isKeyWindow]) + [SWActionSheetWindow resignFirstResponder]; + SWActionSheetWindow.rootViewController = nil; + SWActionSheetWindow = nil; + } +} + +- (UIWindow *)window +{ + if ( SWActionSheetWindow ) + { + return SWActionSheetWindow; + } + else + { + return SWActionSheetWindow = ({ + UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + window.windowLevel = self.windowLevel; + window.backgroundColor = [UIColor clearColor]; + window.rootViewController = [SWActionSheetVC new]; + window; + }); + } +} + +- (SWActionSheetVC *)actionSheetContainer +{ + return (SWActionSheetVC *) [self window].rootViewController; +} + +- (instancetype)initWithView:(UIView *)aView windowLevel:(UIWindowLevel)windowLevel +{ + if ((self = [super init])) + { + view = aView; + _windowLevel = windowLevel; + self.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.0f]; + _bgView = [UIView new]; + _bgView.backgroundColor = [UIColor colorWithRed:247.f/255.f green:247.f/255.f blue:247.f/255.f alpha:1.0f]; + [self addSubview:_bgView]; + [self addSubview:view]; + } + return self; +} + +- (void)configureFrameForBounds:(CGRect)bounds +{ + self.frame = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.width, bounds.size.height + view.bounds.size.height); + view.frame = CGRectMake(view.bounds.origin.x, bounds.size.height, view.bounds.size.width, view.bounds.size.height); + view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; + _bgView.frame = view.frame; + _bgView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; +} + +- (void)showFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated +{ + [self showInContainerView]; +} + +- (void)showInContainerView +{ + // Make sheet window visible and active + UIWindow *sheetWindow = [self window]; + if (![sheetWindow isKeyWindow]) + [sheetWindow makeKeyAndVisible]; + sheetWindow.hidden = NO; + // Put our ActionSheet in Container (it will be presented as soon as possible) + self.actionSheetContainer.actionSheet = self; +} + +- (void)showInContainerViewAnimated:(BOOL)animated +{ + CGPoint toPoint; + CGFloat y = self.center.y - CGRectGetHeight(view.frame); + toPoint = CGPointMake(self.center.x, y); + // Present actions + void (^animations)(void) = ^{ + self.center = toPoint; + self.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.5f]; + }; + // Present sheet + if (animated) + [UIView animateWithDuration:duration delay:delay options:options animations:animations completion:nil]; + else + animations(); + self.presented = YES; +} + +@end + + +#pragma mark - SWActionSheet Container + +@implementation SWActionSheetVC + + +- (UIStatusBarStyle)preferredStatusBarStyle { + return [UIApplication sharedApplication].statusBarStyle; +} + +- (void)setActionSheet:(SWActionSheet *)actionSheet +{ + // Prevent processing one action sheet twice + if (_actionSheet == actionSheet) + return; + // Dissmiss previous action sheet if it presented + if (_actionSheet.presented) + [_actionSheet dismissWithClickedButtonIndex:0 animated:YES]; + // Remember new action sheet + _actionSheet = actionSheet; + // Present new action sheet + [self presentActionSheetAnimated:YES]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + [self presentActionSheetAnimated:YES]; +} + +- (void)presentActionSheetAnimated:(BOOL)animated +{ + // New action sheet will be presented only when view controller will be loaded + if (_actionSheet && [self isViewLoaded] && !_actionSheet.presented) + { + [_actionSheet configureFrameForBounds:self.view.bounds]; + _actionSheet.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:_actionSheet]; + [_actionSheet showInContainerViewAnimated:animated]; + } +} + +- (BOOL)prefersStatusBarHidden { + return [UIApplication sharedApplication].statusBarHidden; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return NO; +} + +// iOS6 support +// --- +- (BOOL)shouldAutorotate +{ + return YES; +} + +@end diff --git a/iphone/Maps/Pods/ActionSheetPicker-3.0/README.md b/iphone/Maps/Pods/ActionSheetPicker-3.0/README.md new file mode 100644 index 0000000000..6eb185ed10 --- /dev/null +++ b/iphone/Maps/Pods/ActionSheetPicker-3.0/README.md @@ -0,0 +1,230 @@ +[![Version](http://img.shields.io/cocoapods/v/ActionSheetPicker-3.0.svg)](http://cocoadocs.org/docsets/ActionSheetPicker-3.0) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Build Status](https://travis-ci.org/skywinder/ActionSheetPicker-3.0.svg?branch=master)](https://travis-ci.org/skywinder/ActionSheetPicker-3.0) +[![Issues](http://img.shields.io/github/issues/skywinder/ActionSheetPicker-3.0.svg)](https://github.com/skywinder/ActionSheetPicker-3.0/issues?state=open) +[![License](https://img.shields.io/cocoapods/l/ActionSheetPicker-3.0.svg)](http://cocoadocs.org/docsets/ActionSheetPicker-3.0) +[![Platform](https://img.shields.io/cocoapods/p/ActionSheetPicker-3.0.svg)](http://cocoadocs.org/docsets/ActionSheetPicker-3.0) + +ActionSheetPicker-3.0 +================== + +- [Overview](#overview) + - [Benefits](#benefits) +- [QuickStart](#quickstart) + - [Basic Usage](#basic-usage) +- [Installation](#installation) +- [Example Projects](#example-projects) +- [Screenshots](#screenshots) +- [Apps using this library](#apps-using-this-library) +- [Maintainer and Contributor](#maintainer-and-contributor) +- [Credits](#credits) +- [Contributing](#contributing) + +Please welcome: **ActionSheetPicker-3.0**! + +`pod 'ActionSheetPicker-3.0', '~> 2.3.0'` (**iOS 5.1.1-9.x** compatible!) + +##ActionSheetPicker = UIPickerView + UIActionSheet ## + +![Animation](Screenshots/example.gif) + +Well, that's how it started. Now, the following is more accurate: + + * _**iPhone/iPod** ActionSheetPicker = ActionSheetPicker = A Picker + UIActionSheet_ + * _**iPad** ActionSheetPicker = A Picker + UIPopoverController_ + + +## Overview ## +Easily present an ActionSheet with a PickerView, allowing user to select from a number of immutable options. + +### Benefits ## + + * Spawn pickers with convenience function - delegate or reference + not required. Just provide a target/action callback. + * Add buttons to UIToolbar for quick selection (see ActionSheetDatePicker below) + * Delegate protocol available for more control + * Universal (iPhone/iPod/iPad) + +## QuickStart + +There are 4 distinct picker view options: `ActionSheetStringPicker`, `ActionSheetDistancePicker`, `ActionSheetDatePicker`, and `ActionSheetCustomPicker`. We'll focus here on how to use the `ActionSheetStringPicker` since it's most likely the one you want to use. + +### Basic Usage ## + +**For detailed info about customisations, please look [BASIC USAGE](https://github.com/skywinder/ActionSheetPicker-3.0/blob/master/BASIC-USAGE.md)** + +- Custom buttons view +- Custom buttons callbacks +- Action by clicking outside of the picker +- Background color and blur effect +- Other customisations + +**For detailed examples, please check [Example Projects](#example-projects) in this repo.** + +#### `Swift:` + +```swift + ActionSheetMultipleStringPicker.show(withTitle: "Multiple String Picker", rows: [ + ["One", "Two", "A lot"], + ["Many", "Many more", "Infinite"] + ], initialSelection: [2, 2], doneBlock: { + picker, indexes, values in + + print("values = \(values)") + print("indexes = \(indexes)") + print("picker = \(picker)") + return + }, cancel: { ActionMultipleStringCancelBlock in return }, origin: sender) +``` + +#### `Objective-C:` + +```obj-c +// Inside a IBAction method: + +// Create an array of strings you want to show in the picker: +NSArray *colors = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", @"Orange", nil]; + +[ActionSheetStringPicker showPickerWithTitle:@"Select a Color" + rows:colors + initialSelection:0 + doneBlock:^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) { + NSLog(@"Picker: %@, Index: %@, value: %@", + picker, selectedIndex, selectedValue); + } + cancelBlock:^(ActionSheetStringPicker *picker) { + NSLog(@"Block Picker Canceled"); + } + origin:sender]; +// You can also use self.view if you don't have a sender +``` + + + +##Installation## + +### CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. + +You can install it with the following command: + +```bash +$ gem install cocoapods +``` + +To integrate ActionSheetPicker-3.0 into your Xcode project using CocoaPods, specify it in your `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +use_frameworks! + +pod 'ActionSheetPicker-3.0' +``` + +Then, run the following command: + +```bash +$ pod install +``` + +### Import to project + +To import pod you should add string: + +- For `Obj-c` projects: + +```obj-c + #import "ActionSheetPicker.h" +``` +- For `Swift` projects: + +```swift + import ActionSheetPicker_3_0 +``` +### Carthage + +Carthage is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application. + +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: + +```bash +$ brew update +$ brew install carthage +``` + +To integrate ActionSheetPicker-3.0 into your Xcode project using Carthage, specify it in your `Cartfile`: + +```ogdl +github "skywinder/ActionSheetPicker-3.0" +``` + +### Manually + +If you prefer not to use either of the aforementioned dependency managers, you can integrate ActionSheetPicker-3.0 into your project manually. + +The "old school" way is manually add to your project all from [Pickers](/Pickers) folder. + +### Embedded Framework + +- Add ActionSheetPicker-3.0 as a [submodule](http://git-scm.com/docs/git-submodule) by opening the Terminal, `cd`-ing into your top-level project directory, and entering the following command: + +```bash +$ git submodule add https://github.com/skywinder/ActionSheetPicker-3.0.git +``` + +- Open the `ActionSheetPicker-3.0` folder, and drag `CoreActionSheetPicker.xcodeproj` into the file navigator of your app project. +- In Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar. +- Ensure that the deployment target of CoreActionSheetPicker.framework matches that of the application target. +- In the tab bar at the top of that window, open the "Build Phases" panel. +- Expand the "Target Dependencies" group, and add `CoreActionSheetPicker.framework`. +- Click on the `+` button at the top left of the panel and select "New Copy Files Phase". Rename this new phase to "Copy Frameworks", set the "Destination" to "Frameworks", and add `CoreActionSheetPicker.framework`. + +## Example Projects## + +`open ActionSheetPicker-3.0.xcworkspace` + +Here is 4 projects: + +- **CoreActionSheetPicker** - all picker files combined in one Framework. (available since `iOS 8`) +- **ActionSheetPicker** - modern and descriptive Obj-C project with many examples. +- **Swift-Example** - example, written on Swift. (only with basic 3 Pickers examples, for all examples please run `ActionSheetPicker` project) +- **ActionSheetPicker-iOS6-7** - iOS 6 and 7 comparable project. or to run only this project `open Example-for-and-6/ActionSheetPicker.xcodeproj` + +## Screenshots + +![ActionSheetPicker](https://raw.githubusercontent.com/skywinder/ActionSheetPicker-3.0/master/Screenshots/string.png "ActionSheetPicker") +![ActionSheetDatePicker](https://raw.githubusercontent.com/skywinder/ActionSheetPicker-3.0/master/Screenshots/date.png "ActionSheetDatePicker") +![ActionSheetDatePicker](https://raw.githubusercontent.com/Jack-s/ActionSheetPicker-3.0/master/Screenshots/time.png "ActionSheetDatePicker") +![CustomButtons](https://raw.githubusercontent.com/skywinder/ActionSheetPicker-3.0/master/Screenshots/custom.png "CustomButtons") +![iPad Support](https://raw.githubusercontent.com/skywinder/ActionSheetPicker-3.0/master/Screenshots/ipad.png "iPad Support") + + +## [Apps using this library](https://github.com/skywinder/ActionSheetPicker-3.0/wiki/Apps-using-ActionSheetPicker-3.0) + +If you've used this project in a live app, please let me know! Nothing makes me happier than seeing someone else take my work and go wild with it. + +*If you are using `ActionSheetPicker-3.0` in your app or know of an app that uses it, please add it to [this] (https://github.com/skywinder/ActionSheetPicker-3.0/wiki/Apps-using-ActionSheetPicker-3.0) list.* + +## Maintainer and Contributor + +- [Petr Korolev](http://github.com/skywinder) (update to iOS 7 and iOS 8, implementing new pickers, community support) + +## Credits + +- ActionSheetPicker was originally created by [Tim Cinel](http://github.com/TimCinel) ([@TimCinel](http://twitter.com/TimCinel)) Since the [Tim's repo](https://github.com/TimCinel/ActionSheetPicker) is not support iOS 7+, I forked from his repo and implement iOS 7-8 support, and also bunch of UI fixes, crash-fixes and different customisation abilities. + +- And most of all, thanks to ActionSheetPicker-3.0's [growing list of contributors](https://github.com/skywinder/ActionSheetPicker-3.0/graphs/contributors). + +## Contributing + +1. Create an issue to discuss about your idea +2. Fork it (https://github.com/skywinder/ActionSheetPicker-3.0/fork) +3. Create your feature branch (`git checkout -b my-new-feature`) +4. Commit your changes (`git commit -am 'Add some feature'`) +5. Push to the branch (`git push origin my-new-feature`) +6. Create a new Pull Request + +**Bug reports, feature requests, patches, well-wishes, and rap demo tapes are always welcome.** + +[![Analytics](https://ga-beacon.appspot.com/UA-52127948-3/ActionSheetPicker-3.0/readme)](https://ga-beacon.appspot.com/UA-52127948-3/ActionSheetPicker-3.0/readme) diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/AppsFlyerLib b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/AppsFlyerLib new file mode 120000 index 0000000000..fd96586f85 --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/AppsFlyerLib @@ -0,0 +1 @@ +Versions/Current/AppsFlyerLib \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Headers b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Headers new file mode 120000 index 0000000000..a177d2a6b9 --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Modules/module.modulemap b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Modules/module.modulemap new file mode 100644 index 0000000000..047c0b9dac --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module AppsFlyerLib { + umbrella header "AppsFlyerTracker.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/AppsFlyerLib b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/AppsFlyerLib new file mode 100644 index 0000000000..50d842859b Binary files /dev/null and b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/AppsFlyerLib differ diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerCrossPromotionHelper.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerCrossPromotionHelper.h new file mode 100644 index 0000000000..7588f820f4 --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerCrossPromotionHelper.h @@ -0,0 +1,25 @@ +// +// CrossPromotionHelper.h +// AppsFlyerLib +// +// Created by Gil Meroz on 27/01/2017. +// +// + +#import +#import + + +NS_ASSUME_NONNULL_BEGIN + +@interface AppsFlyerCrossPromotionHelper : NSObject ++ (void) trackCrossPromoteImpression:(nonnull NSString*) appID + campaign:(nullable NSString*) campaign; + ++ (void) trackAndOpenStore:(nonnull NSString*) appID + campaign:(nullable NSString *) campaign + paramters:(nullable NSDictionary*) parameters + openStore:(void (^)(NSURLSession *urlSession,NSURL *clickURL))openStoreBlock; +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerLinkGenerator.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerLinkGenerator.h new file mode 100644 index 0000000000..9ed4178c3f --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerLinkGenerator.h @@ -0,0 +1,40 @@ +// +// LinkGenerator.h +// AppsFlyerLib +// +// Created by Gil Meroz on 27/01/2017. +// +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/*! + * Payload container for the `generateInviteUrlWithLinkGenerator:completionHandler:` from `AppsFlyerShareInviteHelper` + */ +@interface AppsFlyerLinkGenerator: NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/// The channel through which the invite was sent (e.g. Facebook/Gmail/etc.). Usage: Recommended +- (void)setChannel :(nonnull NSString *)channel; +- (void)setReferrerCustomerId:(nonnull NSString *)referrerCustomerId; +/// A campaign name. Usage: Optional +- (void)setCampaign :(nonnull NSString *)campaign; +- (void)setReferrerUID :(nonnull NSString *)referrerUID; +- (void)setReferrerName :(nonnull NSString *)referrerName; +/// The URL to referrer user avatar. Usage: Optional +- (void)setReferrerImageURL :(nonnull NSString *)referrerImageURL; +- (void)setAppleAppID :(nonnull NSString *)appleAppID; +- (void)setDeeplinkPath :(nonnull NSString *)deeplinkPath; +- (void)setBaseDeeplink :(nonnull NSString *)baseDeeplink; +/// A single key value custom parameter. Usage: Optional +- (void)addParameterValue :(nonnull NSString *)value forKey:(NSString*)key; +/// Multiple key value custom parameters. Usage: Optional +- (void)addParameters :(nonnull NSDictionary *)parameters; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerShareInviteHelper.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerShareInviteHelper.h new file mode 100644 index 0000000000..6ab745e00c --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerShareInviteHelper.h @@ -0,0 +1,33 @@ +// +// ShareInviteHelper.h +// AppsFlyerLib +// +// Created by Gil Meroz on 27/01/2017. +// +// + +#import +#import "AppsFlyerLinkGenerator.h" + +@interface AppsFlyerShareInviteHelper : NSObject + +NS_ASSUME_NONNULL_BEGIN + +/*! + * The AppsFlyerShareInviteHelper class builds the invite URL according to various setter methods + * which allow passing on additional information on the click. + * This information is available through `onConversionDataReceived:` when the user accepts the invite and installs the app. + * In addition, campaign and channel parameters are visible within the AppsFlyer Dashboard. + */ ++ (void) generateInviteUrlWithLinkGenerator:(AppsFlyerLinkGenerator * (^)(AppsFlyerLinkGenerator *generator))generatorCreator + completionHandler:(void (^)(NSURL * _Nullable url))completionHandler; + +/*! + * It is recommended to generate an in-app event after the invite is sent to track the invites from the senders' perspective. + * This enables you to find the users that tend most to invite friends, and the media sources that get you these users. + */ ++ (void) trackInvite:(nullable NSString *)channel parameters:(nullable NSDictionary *)parameters; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerTracker.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerTracker.h new file mode 100644 index 0000000000..c33cae3aa2 --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerTracker.h @@ -0,0 +1,349 @@ +// +// AppsFlyerTracker.h +// AppsFlyerLib +// +// AppsFlyer iOS SDK 4.8.9 (728) +// Copyright (c) 2013 AppsFlyer Ltd. All rights reserved. +// + +#import +#import "AppsFlyerCrossPromotionHelper.h" +#import "AppsFlyerShareInviteHelper.h" + + + +// In app event names constants +#define AFEventLevelAchieved @"af_level_achieved" +#define AFEventAddPaymentInfo @"af_add_payment_info" +#define AFEventAddToCart @"af_add_to_cart" +#define AFEventAddToWishlist @"af_add_to_wishlist" +#define AFEventCompleteRegistration @"af_complete_registration" +#define AFEventTutorial_completion @"af_tutorial_completion" +#define AFEventInitiatedCheckout @"af_initiated_checkout" +#define AFEventPurchase @"af_purchase" +#define AFEventRate @"af_rate" +#define AFEventSearch @"af_search" +#define AFEventSpentCredits @"af_spent_credits" +#define AFEventAchievementUnlocked @"af_achievement_unlocked" +#define AFEventContentView @"af_content_view" +#define AFEventListView @"af_list_view" +#define AFEventTravelBooking @"af_travel_booking" +#define AFEventShare @"af_share" +#define AFEventInvite @"af_invite" +#define AFEventLogin @"af_login" +#define AFEventReEngage @"af_re_engage" +#define AFEventUpdate @"af_update" +#define AFEventOpenedFromPushNotification @"af_opened_from_push_notification" +#define AFEventLocation @"af_location_coordinates" +#define AFEventCustomerSegment @"af_customer_segment" + +#define AFEventSubscribe @"af_subscribe" +#define AFEventStartTrial @"af_start_trial" +#define AFEventAdClick @"af_ad_click" +#define AFEventAdView @"af_ad_view" + +// In app event parameter names +#define AFEventParamContent @"af_content" +#define AFEventParamAchievenmentId @"af_achievement_id" +#define AFEventParamLevel @"af_level" +#define AFEventParamScore @"af_score" +#define AFEventParamSuccess @"af_success" +#define AFEventParamPrice @"af_price" +#define AFEventParamContentType @"af_content_type" +#define AFEventParamContentId @"af_content_id" +#define AFEventParamContentList @"af_content_list" +#define AFEventParamCurrency @"af_currency" +#define AFEventParamQuantity @"af_quantity" +#define AFEventParamRegistrationMethod @"af_registration_method" +#define AFEventParamPaymentInfoAvailable @"af_payment_info_available" +#define AFEventParamMaxRatingValue @"af_max_rating_value" +#define AFEventParamRatingValue @"af_rating_value" +#define AFEventParamSearchString @"af_search_string" +#define AFEventParamDateA @"af_date_a" +#define AFEventParamDateB @"af_date_b" +#define AFEventParamDestinationA @"af_destination_a" +#define AFEventParamDestinationB @"af_destination_b" +#define AFEventParamDescription @"af_description" +#define AFEventParamClass @"af_class" +#define AFEventParamEventStart @"af_event_start" +#define AFEventParamEventEnd @"af_event_end" +#define AFEventParamLat @"af_lat" +#define AFEventParamLong @"af_long" +#define AFEventParamCustomerUserId @"af_customer_user_id" +#define AFEventParamValidated @"af_validated" +#define AFEventParamRevenue @"af_revenue" +#define AFEventProjectedParamRevenue @"af_projected_revenue" +#define AFEventParamReceiptId @"af_receipt_id" +#define AFEventParamTutorialId @"af_tutorial_id" +#define AFEventParamAchievenmentId @"af_achievement_id" +#define AFEventParamVirtualCurrencyName @"af_virtual_currency_name" +#define AFEventParamDeepLink @"af_deep_link" +#define AFEventParamOldVersion @"af_old_version" +#define AFEventParamNewVersion @"af_new_version" +#define AFEventParamReviewText @"af_review_text" +#define AFEventParamCouponCode @"af_coupon_code" +#define AFEventParamOrderId @"af_order_id" +#define AFEventParam1 @"af_param_1" +#define AFEventParam2 @"af_param_2" +#define AFEventParam3 @"af_param_3" +#define AFEventParam4 @"af_param_4" +#define AFEventParam5 @"af_param_5" +#define AFEventParam6 @"af_param_6" +#define AFEventParam7 @"af_param_7" +#define AFEventParam8 @"af_param_8" +#define AFEventParam9 @"af_param_9" +#define AFEventParam10 @"af_param_10" + +#define AFEventParamDepartingDepartureDate @"af_departing_departure_date" +#define AFEventParamReturningDepartureDate @"af_returning_departure_date" +#define AFEventParamDestinationList @"af_destination_list" //array of string +#define AFEventParamCity @"af_city" +#define AFEventParamRegion @"af_region" +#define AFEventParamCountry @"af_country" + + +#define AFEventParamDepartingArrivalDate @"af_departing_arrival_date" +#define AFEventParamReturningArrivalDate @"af_returning_arrival_date" +#define AFEventParamSuggestedDestinations @"af_suggested_destinations" //array of string +#define AFEventParamTravelStart @"af_travel_start" +#define AFEventParamTravelEnd @"af_travel_end" +#define AFEventParamNumAdults @"af_num_adults" +#define AFEventParamNumChildren @"af_num_children" +#define AFEventParamNumInfants @"af_num_infants" +#define AFEventParamSuggestedHotels @"af_suggested_hotels" //array of string + +#define AFEventParamUserScore @"af_user_score" +#define AFEventParamHotelScore @"af_hotel_score" +#define AFEventParamPurchaseCurrency @"af_purchase_currency" + +#define AFEventParamPreferredStarRatings @"af_preferred_star_ratings" //array of int (basically a tupple (min,max) but we'll use array of int and instruct the developer to use two values) + +#define AFEventParamPreferredPriceRange @"af_preferred_price_range" //array of int (basically a tupple (min,max) but we'll use array of int and instruct the developer to use two values) +#define AFEventParamPreferredNeighborhoods @"af_preferred_neighborhoods" //array of string +#define AFEventParamPreferredNumStops @"af_preferred_num_stops" + +#define AFEventParamAdRevenueAdType @"af_adrev_ad_type" +#define AFEventParamAdRevenueNetworkName @"af_adrev_network_name" +#define AFEventParamAdRevenuePlacementId @"af_adrev_placement_id" +#define AFEventParamAdRevenueAdSize @"af_adrev_ad_size" +#define AFEventParamAdRevenueMediatedNetworkName @"af_adrev_mediated_network_name" + +#define kAppsFlyerOneLinkVersion @"oneLinkVersion" +#define kAppsFlyerOneLinkScheme @"oneLinkScheme" +#define kAppsFlyerOneLinkDomain @"oneLinkDomain" +#define kDefaultOneLink @"go.onelink.me" +#define kNoOneLinkFallback @"https://app.appsflyer.com" +#define kINviteAppleAppID @"af_siteid" + + + + +typedef enum { + EmailCryptTypeNone = 0, + EmailCryptTypeSHA1 = 1, + EmailCryptTypeMD5 = 2, + EmailCryptTypeSHA256 = 3 +} EmailCryptType; + +/* + * This delegate should be use if you want to use AppsFlyer conversion data. See AppsFlyer iOS + */ +@protocol AppsFlyerTrackerDelegate + +@optional +- (void) onConversionDataReceived:(NSDictionary*) installData; +- (void) onConversionDataRequestFailure:(NSError *)error; +- (void) onAppOpenAttribution:(NSDictionary*) attributionData; +- (void) onAppOpenAttributionFailure:(NSError *)error; + +@end + +@interface AppsFlyerTracker : NSObject + ++(AppsFlyerTracker*) sharedTracker; + +/* In case you use your own user ID in your app, you can set this property to that ID. */ +@property (nonatomic, strong, setter=setCustomerUserID:) NSString *customerUserID; + + +/* In case you use Custom data and you want to receive it in the raw reports.*/ +@property (nonatomic, strong, setter=setAdditionalData:) NSDictionary *customData; + +/* Use this property to set your AppsFlyer's dev key. */ +@property (nonatomic, strong, setter=setAppsFlyerDevKey:) NSString *appsFlyerDevKey; + +/* Use this property to set your app's Apple ID (taken from the app's page on iTunes Connect) */ +@property (nonatomic, strong, setter=setAppleAppID:) NSString *appleAppID; + +/* + * In case of in app purchase events, you can set the currency code your user has purchased with. + * The currency code is a 3 letter code according to ISO standards. Example: "USD" + */ +@property (nonatomic, strong) NSString *currencyCode; + +/* + * AppsFLyer SDK collect Apple's advertisingIdentifier if the AdSupport framework included in the SDK. + * You can disable this behavior by setting the following property to YES. + */ +@property BOOL disableAppleAdSupportTracking; + +/* + * Prints our messages to the log. This property should only be used in DEBUG mode. The default value + * is NO. + */ +@property (nonatomic, setter = setIsDebug:) BOOL isDebug; + + +/*! + * Set this flag to `YES`, to collect the current device name. Default value is `NO` + */ +@property (nonatomic, setter = setShouldCollectDeviceName:) BOOL shouldCollectDeviceName; + + +@property (nonatomic, setter = setAppInviteOneLink:) NSString* appInviteOneLinkID; + +/* + * Opt-out tracking for specific user + */ +@property BOOL deviceTrackingDisabled; + +/* + * Opt-out tracking for iAd attributions + */ +@property BOOL disableIAdTracking; + +/* + * AppsFlyer delegate. See AppsFlyerTrackerDelegate abvoe + */ +@property (weak, nonatomic) id delegate; + +/* + * In app purchase receipt validation Apple environment (production or sandbox). The default value + * is NO. + */ +@property (nonatomic, setter = setUseReceiptValidationSandbox:) BOOL useReceiptValidationSandbox; + + +/* + * Set this flag to test uninstall on Apple environment (production or sandbox). The default value + * is NO. + */ +@property (nonatomic, setter = setUseUninstallSandbox:) BOOL useUninstallSandbox; + +/* + * Advertising Id (exposed for RemoteDebug) + */ +@property (nonatomic, strong) NSString *advertiserId; + +/* + * Use this to send the User's emails + */ +-(void) setUserEmails:(NSArray *) userEmails withCryptType:(EmailCryptType) type; + + +/* Track application launch*/ +- (void) trackAppLaunch; + +/* + * Use this method to track events in your app like purchases or user actions. + * Example : + * [[AppsFlyer sharedTracker] trackEvent:@"hotel-booked" withValue:"200"]; + */ +- (void) trackEvent:(NSString*)eventName withValue:(NSString*)value __attribute__((deprecated)); + +/* + * Use this method to track an events with mulitple values. See AppsFlyer's documentation for details. + * + */ +- (void) trackEvent:(NSString *)eventName withValues:(NSDictionary*)values; + +/* + * To track in app purchases you can call this method from the completeTransaction: method on + * your SKPaymentTransactionObserver. + */ +- (void) validateAndTrackInAppPurchase:(NSString *)productIdentifier + price:(NSString *)price + currency:(NSString *)currency + transactionId:(NSString *) tranactionId + additionalParameters:(NSDictionary *)params + success:(void (^)(NSDictionary *response))successBlock + failure:(void (^)(NSError *error, id reponse)) failedBlock NS_AVAILABLE(10_7, 7_0); + + + +/* +* To Track location for geo-fencing. +*/ +- (void) trackLocation:(double) longitude latitude:(double) latitude; + +/* + * This method returns AppsFLyer's internal user ID (unique for your app) + */ +- (NSString *) getAppsFlyerUID; + +/* + * In case you want to use AppsFlyer tracking data in your app you can use the following method set a + * delegate with callback buttons for the tracking data. See AppsFlyerTrackerDelegate above. + */ +- (void) loadConversionDataWithDelegate:(id) delegate __attribute__((deprecated)); + +/* + * In case you want to track deep linking, call this method from your delegate's openURL method. + */ +- (void) handleOpenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; + +/* + * In case you want to track deep linking, call this method from your delegate's openURL method with refferer. + */ +- (void) handleOpenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication withAnnotation:(id) annotation; + + +- (void) handleOpenUrl:(NSURL *) url options:(NSDictionary *)options; +/* + * For Universal links iOS 9 + */ + +- (BOOL) continueUserActivity:(NSUserActivity *) userActivity restorationHandler:(void (^)(NSArray *))restorationHandler NS_AVAILABLE_IOS(9_0); +- (void) didUpdateUserActivity:(NSUserActivity *)userActivity NS_AVAILABLE_IOS(9_0); +- (void) handlePushNotification:(NSDictionary *) pushPayload; + + +/* + Register uninstall - you should register for remote notification and provide Appsflyer the push device token. +*/ +- (void) registerUninstall:(NSData *) deviceToken; + +/* + Get SDK version. +*/ +- (NSString *) getSDKVersion; + + + +- (void) remoteDebuggingCallWithData:(NSString *) data; + +/*! + * @brief This property accepts a string value representing the host name for all enpoints. + * @warning To use `default` SDK endpoint – set value to `nil`. + * @code + * Objective-C: + * [[AppsFlyerTracker sharedTracker] setHost:@"example.com"]; + * Swift: + * AppsFlyerTracker.shared().host = "example.com" + * @endcode + */ + +@property (nonatomic, strong) NSString *host; + +/*! + * This property is responsible for timeout between sessions in seconds. + * Default value is 5 seconds. + */ +@property (atomic) NSUInteger minTimeBetweenSessions; + +/*! + * WARNING! This will disable all requests from AppsFlyer SDK + */ +@property (atomic) BOOL isStopTracking; + +@end diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/Current b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/Current new file mode 120000 index 0000000000..8c7e5a667f --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/README.md b/iphone/Maps/Pods/AppsFlyerFramework/README.md new file mode 100644 index 0000000000..bfb3b938e2 --- /dev/null +++ b/iphone/Maps/Pods/AppsFlyerFramework/README.md @@ -0,0 +1,68 @@ +

+ +

+ +----------- +[![Version](https://img.shields.io/cocoapods/v/AppsFlyerFramework.svg?style=flat)](http://cocoapods.org/pods/AppsFlyerFramework) + +[AppsFlyer](https://www.appsflyer.com/) helps mobile marketers measure and improve their performance through amazing tools, really big data and over 2,000 integrations. + + + +- Supports iOS 8+ + +Installation +------------ + +### CocoaPods + +Just add `pod 'AppsFlyerFramework'` into your [Podfile](https://guides.cocoapods.org/syntax/podfile.html). + +Then run + +```zsh +$ pod install +``` + +Finally, import the framework: + +```swift +// Swift +import AppsFlyerLib +``` + +```objc +// ObjC +#import +``` + +### Carthage + +Just add the following into your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile): +``` +binary "https://raw.githubusercontent.com/AppsFlyerSDK/AppsFlyerFramework/master/AppsFlyerTracker.json" +``` + +Then run + +```zsh +$ carthage bootstrap +``` + +**Note:** +Old URI referencing `Carthage.json` is deprecated. If you use it please update your Cartfile to the new one to ease dependency management. + + + +Changelog +------------ + +You can find the release changelog [here](https://support.appsflyer.com/hc/en-us/articles/115001224823-AppsFlyer-iOS-SDK-Release-Notes). + +--- + +In order for us to provide optimal support, we would kindly ask you to submit any issues to support@appsflyer.com + +*When submitting an issue please specify your AppsFlyer sign-up (account) email, your app ID, production steps, logs, code snippets and any additional relevant information.* + +---------- diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.h new file mode 100644 index 0000000000..bda32ee800 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.h @@ -0,0 +1,42 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +/*! + A block that will be called when a token is cancelled. + */ +typedef void(^BFCancellationBlock)(void); + +/*! + 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 + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.m new file mode 100644 index 0000000000..4acd58900c --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.m @@ -0,0 +1,144 @@ +/* + * 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" + +NS_ASSUME_NONNULL_BEGIN + +@interface BFCancellationToken () + +@property (nullable, 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 + +@synthesize cancellationRequested = _cancellationRequested; + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (!self) return self; + + _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.registrations makeObjectsPerformSelector:@selector(dispose)]; + self.registrations = nil; + self.disposed = YES; + } +} + +- (void)throwIfDisposed { + if (self.disposed) { + [NSException raise:NSInternalInconsistencyException format:@"Object already disposed"]; + } +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h new file mode 100644 index 0000000000..fa6090f667 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h @@ -0,0 +1,29 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +/*! + 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 + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m new file mode 100644 index 0000000000..f396c1c934 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m @@ -0,0 +1,79 @@ +/* + * 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" + +NS_ASSUME_NONNULL_BEGIN + +@interface BFCancellationTokenRegistration () + +@property (nonatomic, weak) BFCancellationToken *token; +@property (nullable, 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 { + self = [super init]; + if (!self) return self; + + _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 + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h new file mode 100644 index 0000000000..4627e9958f --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h @@ -0,0 +1,60 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +@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 + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m new file mode 100644 index 0000000000..ee05cf048e --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m @@ -0,0 +1,64 @@ +/* + * 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" + +NS_ASSUME_NONNULL_BEGIN + +@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 self; + + _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 + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h new file mode 100644 index 0000000000..694c8a5fc2 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h @@ -0,0 +1,62 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +/*! + 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)(void)))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(^)(void))block; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m new file mode 100644 index 0000000000..05d49f1879 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m @@ -0,0 +1,136 @@ +/* + * 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" + +#import + +NS_ASSUME_NONNULL_BEGIN + +/*! + Get the remaining stack-size of the current thread. + + @param totalSize The total stack size of the current thread. + + @return The remaining size, in bytes, available to the current thread. + + @note This function cannot be inlined, as otherwise the internal implementation could fail to report the proper + remaining stack space. + */ +__attribute__((noinline)) static size_t remaining_stack_size(size_t *restrict totalSize) { + pthread_t currentThread = pthread_self(); + + // NOTE: We must store stack pointers as uint8_t so that the pointer math is well-defined + uint8_t *endStack = pthread_get_stackaddr_np(currentThread); + *totalSize = pthread_get_stacksize_np(currentThread); + + // NOTE: If the function is inlined, this value could be incorrect + uint8_t *frameAddr = __builtin_frame_address(0); + + return (*totalSize) - (size_t)(endStack - frameAddr); +} + +@interface BFExecutor () + +@property (nonatomic, copy) void(^block)(void(^block)(void)); + +@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)(void)) { + // 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 remaining stack space + // is less than 10% of the total space, we dispatch to another GCD queue. + size_t totalStackSize = 0; + size_t remainingStackSize = remaining_stack_size(&totalStackSize); + + if (remainingStackSize < (totalStackSize / 10)) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); + } else { + @autoreleasepool { + block(); + } + } + }]; + }); + return defaultExecutor; +} + ++ (instancetype)immediateExecutor { + static BFExecutor *immediateExecutor = NULL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + immediateExecutor = [self executorWithBlock:^void(void(^block)(void)) { + block(); + }]; + }); + return immediateExecutor; +} + ++ (instancetype)mainThreadExecutor { + static BFExecutor *mainThreadExecutor = NULL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mainThreadExecutor = [self executorWithBlock:^void(void(^block)(void)) { + if (![NSThread isMainThread]) { + dispatch_async(dispatch_get_main_queue(), block); + } else { + @autoreleasepool { + block(); + } + } + }]; + }); + return mainThreadExecutor; +} + ++ (instancetype)executorWithBlock:(void(^)(void(^block)(void)))block { + return [[self alloc] initWithBlock:block]; +} + ++ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue { + return [self executorWithBlock:^void(void(^block)(void)) { + dispatch_async(queue, block); + }]; +} + ++ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue { + return [self executorWithBlock:^void(void(^block)(void)) { + [queue addOperation:[NSBlockOperation blockOperationWithBlock:block]]; + }]; +} + +#pragma mark - Initializer + +- (instancetype)initWithBlock:(void(^)(void(^block)(void)))block { + self = [super init]; + if (!self) return self; + + _block = block; + + return self; +} + +#pragma mark - Execution + +- (void)execute:(void(^)(void))block { + self.block(block); +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h new file mode 100644 index 0000000000..99b2cf7de7 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h @@ -0,0 +1,25 @@ +/* + * 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 + +#pragma once + +/** + This exists to use along with `BFTask` and `BFTaskCompletionSource`. + + 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 'BFVoid', which will always have a value of `nil`. + + This allows you to provide a more enforced API contract to the caller, + as sending any message to `BFVoid` will result in a compile time error. + */ +@class _BFVoid_Nonexistant; +typedef _BFVoid_Nonexistant *BFVoid; diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h new file mode 100644 index 0000000000..074c182de7 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h @@ -0,0 +1,266 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +/*! + Error domain used if there was multiple errors on . + */ +extern NSString *const BFTaskErrorDomain; + +/*! + An error code used for , if there were multiple errors. + */ +extern NSInteger const kBFMultipleErrorsError; + +/*! + An error userInfo key used if there were multiple errors on . + Value type is `NSArray *`. + */ +extern NSString *const BFTaskMultipleErrorsUserInfoKey; + +@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<__covariant ResultType> : NSObject + +/*! + A block that can act as a continuation for a task. + */ +typedef __nullable id(^BFContinuationBlock)(BFTask *t); + +/*! + Creates a task that is already completed with the given result. + @param result The result for the task. + */ ++ (instancetype)taskWithResult:(nullable ResultType)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 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:(nullable 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:(nullable NSArray *)tasks; + +/*! + Returns a task that will be completed once there is at least one successful task. + The first task to successuly complete will set the result, all other tasks results are + ignored. + @param tasks An `NSArray` of the tasks to use as an input. + */ ++ (instancetype)taskForCompletionOfAnyTask:(nullable 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). + */ ++ (BFTask *)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). + */ ++ (BFTask *)taskWithDelay:(int)millis cancellationToken:(nullable 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:(nullable id (^)(void))block; + +// Properties that will be set on the task once it is completed. + +/*! + The result of a successful task. + */ +@property (nullable, nonatomic, strong, readonly) ResultType result; + +/*! + The error of a failed task. + */ +@property (nullable, nonatomic, strong, readonly) NSError *error; + +/*! + Whether this task has been cancelled. + */ +@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; + +/*! + Whether this task has completed due to an error. + */ +@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. + */ +- (BFTask *)continueWithBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(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. + */ +- (BFTask *)continueWithBlock:(BFContinuationBlock)block + cancellationToken:(nullable BFCancellationToken *)cancellationToken NS_SWIFT_NAME(continueWith(block: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. + */ +- (BFTask *)continueWithExecutor:(BFExecutor *)executor + withBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(executor: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. + */ +- (BFTask *)continueWithExecutor:(BFExecutor *)executor + block:(BFContinuationBlock)block + cancellationToken:(nullable BFCancellationToken *)cancellationToken +NS_SWIFT_NAME(continueWith(executor:block:cancellationToken:)); + +/*! + Identical to continueWithBlock:, except that the block is only run + if this task did not produce a cancellation or an error. + 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. + */ +- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(block:)); + +/*! + Identical to continueWithBlock:, except that the block is only run + if this task did not produce a cancellation or an error. + 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. + */ +- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block + cancellationToken:(nullable BFCancellationToken *)cancellationToken +NS_SWIFT_NAME(continueOnSuccessWith(block:cancellationToken:)); + +/*! + Identical to continueWithExecutor:withBlock:, except that the block + is only run if this task did not produce a cancellation, error, or an error. + 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. + */ +- (BFTask *)continueWithExecutor:(BFExecutor *)executor + withSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(executor:block:)); + +/*! + Identical to continueWithExecutor:withBlock:, except that the block + is only run if this task did not produce a cancellation or an error. + 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. + */ +- (BFTask *)continueWithExecutor:(BFExecutor *)executor + successBlock:(BFContinuationBlock)block + cancellationToken:(nullable BFCancellationToken *)cancellationToken +NS_SWIFT_NAME(continueOnSuccessWith(executor:block: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 + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m new file mode 100644 index 0000000000..0d6bd4cda2 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m @@ -0,0 +1,465 @@ +/* + * 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" + +NS_ASSUME_NONNULL_BEGIN + +__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"; +NSInteger const kBFMultipleErrorsError = 80175001; + +NSString *const BFTaskMultipleErrorsUserInfoKey = @"errors"; + +@interface BFTask () { + id _result; + NSError *_error; +} + +@property (nonatomic, assign, readwrite, getter=isCancelled) BOOL cancelled; +@property (nonatomic, assign, readwrite, getter=isFaulted) BOOL faulted; +@property (nonatomic, 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 { + self = [super init]; + if (!self) return self; + + _lock = [[NSObject alloc] init]; + _condition = [[NSCondition alloc] init]; + _callbacks = [NSMutableArray array]; + + return self; +} + +- (instancetype)initWithResult:(nullable id)result { + self = [super init]; + if (!self) return self; + + [self trySetResult:result]; + + return self; +} + +- (instancetype)initWithError:(NSError *)error { + self = [super init]; + if (!self) return self; + + [self trySetError:error]; + + return self; +} + +- (instancetype)initCancelled { + self = [super init]; + if (!self) return self; + + [self trySetCancelled]; + + return self; +} + +#pragma mark - Task Class methods + ++ (instancetype)taskWithResult:(nullable id)result { + return [[self alloc] initWithResult:result]; +} + ++ (instancetype)taskWithError:(NSError *)error { + return [[self alloc] initWithError:error]; +} + ++ (instancetype)cancelledTask { + return [[self alloc] initCancelled]; +} + ++ (instancetype)taskForCompletionOfAllTasks:(nullable 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]; + + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + for (BFTask *task in tasks) { + [task continueWithBlock:^id(BFTask *t) { + if (t.error) { + @synchronized (lock) { + [errors addObject:t.error]; + } + } else if (t.cancelled) { + OSAtomicIncrement32Barrier(&cancelled); + } + + if (OSAtomicDecrement32Barrier(&total) == 0) { + if (errors.count > 0) { + if (errors.count == 1) { + tcs.error = [errors firstObject]; + } else { + NSError *error = [NSError errorWithDomain:BFTaskErrorDomain + code:kBFMultipleErrorsError + userInfo:@{ BFTaskMultipleErrorsUserInfoKey: errors }]; + tcs.error = error; + } + } else if (cancelled > 0) { + [tcs cancel]; + } else { + tcs.result = nil; + } + } + return nil; + }]; + } + return tcs.task; +} + ++ (instancetype)taskForCompletionOfAllTasksWithResults:(nullable NSArray *)tasks { + return [[self taskForCompletionOfAllTasks:tasks] continueWithSuccessBlock:^id(BFTask * __unused task) { + return [tasks valueForKey:@"result"]; + }]; +} + ++ (instancetype)taskForCompletionOfAnyTask:(nullable NSArray *)tasks +{ + __block int32_t total = (int32_t)tasks.count; + if (total == 0) { + return [self taskWithResult:nil]; + } + + __block int completed = 0; + __block int32_t cancelled = 0; + + NSObject *lock = [NSObject new]; + NSMutableArray *errors = [NSMutableArray new]; + + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + for (BFTask *task in tasks) { + [task continueWithBlock:^id(BFTask *t) { + if (t.error != nil) { + @synchronized(lock) { + [errors addObject:t.error]; + } + } else if (t.cancelled) { + OSAtomicIncrement32Barrier(&cancelled); + } else { + if(OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { + [source setResult:t.result]; + } + } + + if (OSAtomicDecrement32Barrier(&total) == 0 && + OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { + if (cancelled > 0) { + [source cancel]; + } else if (errors.count > 0) { + if (errors.count == 1) { + source.error = errors.firstObject; + } else { + NSError *error = [NSError errorWithDomain:BFTaskErrorDomain + code:kBFMultipleErrorsError + userInfo:@{ @"errors": errors }]; + source.error = error; + } + } + } + // Abort execution of per tasks continuations + return nil; + }]; + } + return source.task; +} + + ++ (BFTask *)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; +} + ++ (BFTask *)taskWithDelay:(int)millis cancellationToken:(nullable 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:(nullable id (^)(void))block { + return [[self taskWithResult:nil] continueWithExecutor:executor withBlock:^id(BFTask *task) { + return block(); + }]; +} + +#pragma mark - Custom Setters/Getters + +- (nullable id)result { + @synchronized(self.lock) { + return _result; + } +} + +- (BOOL)trySetResult:(nullable id)result { + @synchronized(self.lock) { + if (self.completed) { + return NO; + } + self.completed = YES; + _result = result; + [self runContinuations]; + return YES; + } +} + +- (nullable NSError *)error { + @synchronized(self.lock) { + return _error; + } +} + +- (BOOL)trySetError:(NSError *)error { + @synchronized(self.lock) { + if (self.completed) { + return NO; + } + self.completed = YES; + self.faulted = YES; + _error = error; + [self runContinuations]; + return YES; + } +} + +- (BOOL)isCancelled { + @synchronized(self.lock) { + return _cancelled; + } +} + +- (BOOL)isFaulted { + @synchronized(self.lock) { + return _faulted; + } +} + +- (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)runContinuations { + @synchronized(self.lock) { + [self.condition lock]; + [self.condition broadcast]; + [self.condition unlock]; + for (void (^callback)(void) in self.callbacks) { + callback(); + } + [self.callbacks removeAllObjects]; + } +} + +#pragma mark - Chaining methods + +- (BFTask *)continueWithExecutor:(BFExecutor *)executor withBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:executor block:block cancellationToken:nil]; +} + +- (BFTask *)continueWithExecutor:(BFExecutor *)executor + block:(BFContinuationBlock)block + cancellationToken:(nullable BFCancellationToken *)cancellationToken { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + + // Capture all of the state that needs to used when the continuation is complete. + dispatch_block_t executionBlock = ^{ + if (cancellationToken.cancellationRequested) { + [tcs cancel]; + return; + } + + id result = block(self); + if ([result isKindOfClass:[BFTask class]]) { + + id (^setupWithTask) (BFTask *) = ^id(BFTask *task) { + if (cancellationToken.cancellationRequested || task.cancelled) { + [tcs cancel]; + } 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:[^{ + [executor execute:executionBlock]; + } copy]]; + } + } + if (completed) { + [executor execute:executionBlock]; + } + + return tcs.task; +} + +- (BFTask *)continueWithBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:nil]; +} + +- (BFTask *)continueWithBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken { + return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:cancellationToken]; +} + +- (BFTask *)continueWithExecutor:(BFExecutor *)executor + withSuccessBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:executor successBlock:block cancellationToken:nil]; +} + +- (BFTask *)continueWithExecutor:(BFExecutor *)executor + successBlock:(BFContinuationBlock)block + cancellationToken:(nullable 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]; +} + +- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:nil]; +} + +- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block cancellationToken:(nullable 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]; + } + // TODO: (nlutsenko) Restructure this to use Bolts-Swift thread access synchronization architecture + // In the meantime, it's absolutely safe to get `_completed` aka an ivar, as long as it's a `BOOL` aka less than word size. + while (!_completed) { + [self.condition wait]; + } + [self.condition unlock]; +} + +#pragma mark - NSObject + +- (NSString *)description { + // Acquire the data from the locked properties + BOOL completed; + BOOL cancelled; + BOOL faulted; + NSString *resultDescription = nil; + + @synchronized(self.lock) { + completed = self.completed; + cancelled = self.cancelled; + faulted = self.faulted; + resultDescription = completed ? [NSString stringWithFormat:@" result = %@", self.result] : @""; + } + + // 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", + resultDescription]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h new file mode 100644 index 0000000000..f94c18fdb5 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h @@ -0,0 +1,75 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +@class BFTask<__covariant ResultType>; + +/*! + 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<__covariant ResultType> : NSObject + +/*! + Creates a new unfinished task. + */ ++ (instancetype)taskCompletionSource; + +/*! + The task associated with this TaskCompletionSource. + */ +@property (nonatomic, strong, readonly) BFTask *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:(nullable ResultType)result NS_SWIFT_NAME(set(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 NS_SWIFT_NAME(set(error:)); + +/*! + 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:(nullable ResultType)result NS_SWIFT_NAME(trySet(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 NS_SWIFT_NAME(trySet(error:)); + +/*! + Sets the cancellation state of the task if it wasn't already completed. + @returns whether the new value was set. + */ +- (BOOL)trySetCancelled; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m new file mode 100644 index 0000000000..33a6f89663 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m @@ -0,0 +1,79 @@ +/* + * 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" + +NS_ASSUME_NONNULL_BEGIN + +@interface BFTask (BFTaskCompletionSource) + +- (BOOL)trySetResult:(nullable id)result; +- (BOOL)trySetError:(NSError *)error; +- (BOOL)trySetCancelled; + +@end + +@implementation BFTaskCompletionSource + +#pragma mark - Initializer + ++ (instancetype)taskCompletionSource { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) return self; + + _task = [[BFTask alloc] init]; + + return self; +} + +#pragma mark - Custom Setters/Getters + +- (void)setResult:(nullable id)result { + if (![self.task trySetResult:result]) { + [NSException raise:NSInternalInconsistencyException + format:@"Cannot set the result on a completed task."]; + } +} + +- (void)setError:(NSError *)error { + if (![self.task trySetError:error]) { + [NSException raise:NSInternalInconsistencyException + format:@"Cannot set the error on a completed task."]; + } +} + +- (void)cancel { + if (![self.task trySetCancelled]) { + [NSException raise:NSInternalInconsistencyException + format:@"Cannot cancel a completed task."]; + } +} + +- (BOOL)trySetResult:(nullable id)result { + return [self.task trySetResult:result]; +} + +- (BOOL)trySetError:(NSError *)error { + return [self.task trySetError:error]; +} + +- (BOOL)trySetCancelled { + return [self.task trySetCancelled]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h b/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h new file mode 100644 index 0000000000..a3f2bd6f29 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h @@ -0,0 +1,39 @@ +/* + * 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 + +#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV +#import +#import +#import +#import +#import +#import +#import +#import +#import +#endif + + +NS_ASSUME_NONNULL_BEGIN + +/** + A string containing the version of the Bolts Framework used by the current application. + */ +extern NSString *const BoltsFrameworkVersionString; + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m b/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m new file mode 100644 index 0000000000..c202687975 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m @@ -0,0 +1,17 @@ +/* + * 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" + +NS_ASSUME_NONNULL_BEGIN + +NSString *const BoltsFrameworkVersionString = @"1.9.0"; + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h new file mode 100644 index 0000000000..aa89efc2b9 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h @@ -0,0 +1,49 @@ +/* + * 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 + +/*! The version of the App Link protocol that this library supports */ +FOUNDATION_EXPORT NSString *const BFAppLinkVersion; + +/*! + Contains App Link metadata relevant for navigation on this device + derived from the HTML at a given URL. + */ +@interface BFAppLink : NSObject + +/*! + Creates a BFAppLink with the given list of BFAppLinkTargets and target URL. + + Generally, this will only be used by implementers of the BFAppLinkResolving protocol, + as these implementers will produce App Link metadata for a given URL. + + @param sourceURL the URL from which this App Link is derived + @param targets an ordered list of BFAppLinkTargets for this platform derived + from App Link metadata. + @param webURL the fallback web URL, if any, for the app link. + */ ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(NSURL *)webURL; + +/*! The URL from which this BFAppLink was derived */ +@property (nonatomic, strong, readonly) NSURL *sourceURL; + +/*! + The ordered list of targets applicable to this platform that will be used + for navigation. + */ +@property (nonatomic, copy, readonly) NSArray *targets; + +/*! The fallback web URL to use if no targets are installed on this device. */ +@property (nonatomic, strong, readonly) NSURL *webURL; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m new file mode 100644 index 0000000000..77fd3115b8 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m @@ -0,0 +1,62 @@ +/* + * 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 "BFAppLink_Internal.h" + +NSString *const BFAppLinkDataParameterName = @"al_applink_data"; +NSString *const BFAppLinkTargetKeyName = @"target_url"; +NSString *const BFAppLinkUserAgentKeyName = @"user_agent"; +NSString *const BFAppLinkExtrasKeyName = @"extras"; +NSString *const BFAppLinkRefererAppLink = @"referer_app_link"; +NSString *const BFAppLinkRefererAppName = @"app_name"; +NSString *const BFAppLinkRefererUrl = @"url"; +NSString *const BFAppLinkVersionKeyName = @"version"; +NSString *const BFAppLinkVersion = @"1.0"; + +@interface BFAppLink () + +@property (nonatomic, strong, readwrite) NSURL *sourceURL; +@property (nonatomic, copy, readwrite) NSArray *targets; +@property (nonatomic, strong, readwrite) NSURL *webURL; + +@property (nonatomic, assign, readwrite, getter=isBackToReferrer) BOOL backToReferrer; + +@end + +@implementation BFAppLink + ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(NSURL *)webURL + isBackToReferrer:(BOOL)isBackToReferrer { + BFAppLink *link = [[self alloc] initWithIsBackToReferrer:isBackToReferrer]; + link.sourceURL = sourceURL; + link.targets = [targets copy]; + link.webURL = webURL; + return link; +} + ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(NSURL *)webURL { + return [self appLinkWithSourceURL:sourceURL + targets:targets + webURL:webURL + isBackToReferrer:NO]; +} + +- (BFAppLink *)initWithIsBackToReferrer:(BOOL)backToReferrer { + if ((self = [super init])) { + _backToReferrer = backToReferrer; + } + return self; +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h new file mode 100644 index 0000000000..4b8a71e02f --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h @@ -0,0 +1,114 @@ +/* + * 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 + +/*! + The result of calling navigate on a BFAppLinkNavigation + */ +typedef NS_ENUM(NSInteger, BFAppLinkNavigationType) { + /*! Indicates that the navigation failed and no app was opened */ + BFAppLinkNavigationTypeFailure, + /*! Indicates that the navigation succeeded by opening the URL in the browser */ + BFAppLinkNavigationTypeBrowser, + /*! Indicates that the navigation succeeded by opening the URL in an app on the device */ + BFAppLinkNavigationTypeApp +}; + +@protocol BFAppLinkResolving; +@class BFTask; + +/*! + Represents a pending request to navigate to an App Link. Most developers will + simply use navigateToURLInBackground: to open a URL, but developers can build + custom requests with additional navigation and app data attached to them by + creating BFAppLinkNavigations themselves. + */ +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") +@interface BFAppLinkNavigation : NSObject + +/*! + The extras for the AppLinkNavigation. This will generally contain application-specific + data that should be passed along with the request, such as advertiser or affiliate IDs or + other such metadata relevant on this device. + */ +@property (nonatomic, copy, readonly) NSDictionary *extras; + +/*! + The al_applink_data for the AppLinkNavigation. This will generally contain data common to + navigation attempts such as back-links, user agents, and other information that may be used + in routing and handling an App Link request. + */ +@property (nonatomic, copy, readonly) NSDictionary *appLinkData; + +/*! The AppLink to navigate to */ +@property (nonatomic, strong, readonly) BFAppLink *appLink; + +/*! Creates an AppLinkNavigation with the given link, extras, and App Link data */ ++ (instancetype)navigationWithAppLink:(BFAppLink *)appLink + extras:(NSDictionary *)extras + appLinkData:(NSDictionary *)appLinkData; + +/*! + Creates an NSDictionary with the correct format for iOS callback URLs, + to be used as 'appLinkData' argument in the call to navigationWithAppLink:extras:appLinkData: + */ ++ (NSDictionary *)callbackAppLinkDataForAppWithName:(NSString *)appName url:(NSString *)url; + +/*! Performs the navigation */ +- (BFAppLinkNavigationType)navigate:(NSError **)error; + +/*! Returns a BFAppLink for the given URL */ ++ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination; + +/*! Returns a BFAppLink for the given URL using the given App Link resolution strategy */ ++ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination resolver:(id)resolver; + +/*! Navigates to a BFAppLink and returns whether it opened in-app or in-browser */ ++ (BFAppLinkNavigationType)navigateToAppLink:(BFAppLink *)link error:(NSError **)error; + +/*! + Returns a BFAppLinkNavigationType based on a BFAppLink. + It's essentially a no-side-effect version of navigateToAppLink:error:, + allowing apps to determine flow based on the link type (e.g. open an + internal web view instead of going straight to the browser for regular links.) + */ ++ (BFAppLinkNavigationType)navigationTypeForLink:(BFAppLink *)link; + +/*! + Return navigation type for current instance. + No-side-effect version of navigate: + */ +- (BFAppLinkNavigationType)navigationType; + +/*! Navigates to a URL (an asynchronous action) and returns a BFNavigationType */ ++ (BFTask *)navigateToURLInBackground:(NSURL *)destination; + +/*! + Navigates to a URL (an asynchronous action) using the given App Link resolution + strategy and returns a BFNavigationType + */ ++ (BFTask *)navigateToURLInBackground:(NSURL *)destination resolver:(id)resolver; + +/*! + Gets the default resolver to be used for App Link resolution. If the developer has not set one explicitly, + a basic, built-in resolver will be used. + */ ++ (id)defaultResolver; + +/*! + Sets the default resolver to be used for App Link resolution. Setting this to nil will revert the + default resolver to the basic, built-in resolver provided by Bolts. + */ ++ (void)setDefaultResolver:(id)resolver; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m new file mode 100644 index 0000000000..7ea12de0f7 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m @@ -0,0 +1,284 @@ +/* + * 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 "BFAppLinkNavigation.h" + +#import + +#import "BFMeasurementEvent_Internal.h" +#import "BFAppLink_Internal.h" + +FOUNDATION_EXPORT NSString *const BFAppLinkDataParameterName; +FOUNDATION_EXPORT NSString *const BFAppLinkTargetKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkUserAgentKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkExtrasKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkVersionKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppLink; +FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppName; +FOUNDATION_EXPORT NSString *const BFAppLinkRefererUrl; + +static id defaultResolver; + +@interface BFAppLinkNavigation () + +@property (nonatomic, copy, readwrite) NSDictionary *extras; +@property (nonatomic, copy, readwrite) NSDictionary *appLinkData; +@property (nonatomic, strong, readwrite) BFAppLink *appLink; + +@end + +@implementation BFAppLinkNavigation + ++ (instancetype)navigationWithAppLink:(BFAppLink *)appLink + extras:(NSDictionary *)extras + appLinkData:(NSDictionary *)appLinkData { + BFAppLinkNavigation *navigation = [[self alloc] init]; + navigation.appLink = appLink; + navigation.extras = extras; + navigation.appLinkData = appLinkData; + return navigation; +} + ++ (NSDictionary *)callbackAppLinkDataForAppWithName:(NSString *)appName url:(NSString *)url { + return @{BFAppLinkRefererAppLink: @{BFAppLinkRefererAppName: appName, BFAppLinkRefererUrl: url}}; +} + +- (NSString *)stringByEscapingQueryString:(NSString *)string { +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0 || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_9 + return [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; +#else + return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, + (CFStringRef)string, + NULL, + (CFStringRef) @":/?#[]@!$&'()*+,;=", + kCFStringEncodingUTF8)); +#endif +} + +- (NSURL *)appLinkURLWithTargetURL:(NSURL *)targetUrl error:(NSError **)error { + NSMutableDictionary *appLinkData = [NSMutableDictionary dictionaryWithDictionary:self.appLinkData ?: @{}]; + + // Add applink protocol data + if (!appLinkData[BFAppLinkUserAgentKeyName]) { + appLinkData[BFAppLinkUserAgentKeyName] = [NSString stringWithFormat:@"Bolts iOS %@", BoltsFrameworkVersionString]; + } + if (!appLinkData[BFAppLinkVersionKeyName]) { + appLinkData[BFAppLinkVersionKeyName] = BFAppLinkVersion; + } + appLinkData[BFAppLinkTargetKeyName] = [self.appLink.sourceURL absoluteString]; + appLinkData[BFAppLinkExtrasKeyName] = self.extras ?: @{}; + + // JSON-ify the applink data + NSError *jsonError = nil; + NSData *jsonBlob = [NSJSONSerialization dataWithJSONObject:appLinkData options:0 error:&jsonError]; + if (!jsonError) { + NSString *jsonString = [[NSString alloc] initWithData:jsonBlob encoding:NSUTF8StringEncoding]; + NSString *encoded = [self stringByEscapingQueryString:jsonString]; + + NSString *endUrlString = [NSString stringWithFormat:@"%@%@%@=%@", + [targetUrl absoluteString], + targetUrl.query ? @"&" : @"?", + BFAppLinkDataParameterName, + encoded]; + + return [NSURL URLWithString:endUrlString]; + } else { + if (error) { + *error = jsonError; + } + + // If there was an error encoding the app link data, fail hard. + return nil; + } +} + +- (BFAppLinkNavigationType)navigate:(NSError **)error { + NSURL *openedURL = nil; + NSError *encodingError = nil; + BFAppLinkNavigationType retType = BFAppLinkNavigationTypeFailure; + + // Find the first eligible/launchable target in the BFAppLink. + for (BFAppLinkTarget *target in self.appLink.targets) { + NSURL *appLinkAppURL = [self appLinkURLWithTargetURL:target.URL error:&encodingError]; + if (encodingError || !appLinkAppURL) { + if (error) { + *error = encodingError; + } + } else if ([[UIApplication sharedApplication] openURL:appLinkAppURL]) { + retType = BFAppLinkNavigationTypeApp; + openedURL = appLinkAppURL; + break; + } + } + + if (!openedURL && self.appLink.webURL) { + // Fall back to opening the url in the browser if available. + NSURL *appLinkBrowserURL = [self appLinkURLWithTargetURL:self.appLink.webURL error:&encodingError]; + if (encodingError || !appLinkBrowserURL) { + // If there was an error encoding the app link data, fail hard. + if (error) { + *error = encodingError; + } + } else if ([[UIApplication sharedApplication] openURL:appLinkBrowserURL]) { + // This was a browser navigation. + retType = BFAppLinkNavigationTypeBrowser; + openedURL = appLinkBrowserURL; + } + } + + [self postAppLinkNavigateEventNotificationWithTargetURL:openedURL + error:error ? *error : nil + type:retType]; + return retType; +} + +- (void)postAppLinkNavigateEventNotificationWithTargetURL:(NSURL *)outputURL error:(NSError *)error type:(BFAppLinkNavigationType)type { + NSString *const EVENT_YES_VAL = @"1"; + NSString *const EVENT_NO_VAL = @"0"; + NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; + + NSString *outputURLScheme = [outputURL scheme]; + NSString *outputURLString = [outputURL absoluteString]; + if (outputURLScheme) { + logData[@"outputURLScheme"] = outputURLScheme; + } + if (outputURLString) { + logData[@"outputURL"] = outputURLString; + } + + NSString *sourceURLString = [self.appLink.sourceURL absoluteString]; + NSString *sourceURLHost = [self.appLink.sourceURL host]; + NSString *sourceURLScheme = [self.appLink.sourceURL scheme]; + if (sourceURLString) { + logData[@"sourceURL"] = sourceURLString; + } + if (sourceURLHost) { + logData[@"sourceHost"] = sourceURLHost; + } + if (sourceURLScheme) { + logData[@"sourceScheme"] = sourceURLScheme; + } + if ([error localizedDescription]) { + logData[@"error"] = [error localizedDescription]; + } + NSString *success = nil; //no + NSString *linkType = nil; // unknown; + switch (type) { + case BFAppLinkNavigationTypeFailure: + success = EVENT_NO_VAL; + linkType = @"fail"; + break; + case BFAppLinkNavigationTypeBrowser: + success = EVENT_YES_VAL; + linkType = @"web"; + break; + case BFAppLinkNavigationTypeApp: + success = EVENT_YES_VAL; + linkType = @"app"; + break; + default: + break; + } + if (success) { + logData[@"success"] = success; + } + if (linkType) { + logData[@"type"] = linkType; + } + + if ([self.appLink isBackToReferrer]) { + [BFMeasurementEvent postNotificationForEventName:BFAppLinkNavigateBackToReferrerEventName args:logData]; + } else { + [BFMeasurementEvent postNotificationForEventName:BFAppLinkNavigateOutEventName args:logData]; + } +} + ++ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination resolver:(id)resolver { + return [resolver appLinkFromURLInBackground:destination]; +} + ++ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination { + return [self resolveAppLinkInBackground:destination resolver:[self defaultResolver]]; +} + ++ (BFTask *)navigateToURLInBackground:(NSURL *)destination { + return [self navigateToURLInBackground:destination + resolver:[self defaultResolver]]; +} + ++ (BFTask *)navigateToURLInBackground:(NSURL *)destination + resolver:(id)resolver { + BFTask *resolutionTask = [self resolveAppLinkInBackground:destination + resolver:resolver]; + return [resolutionTask continueWithExecutor:[BFExecutor mainThreadExecutor] + withSuccessBlock:^id(BFTask *task) { + NSError *error = nil; + BFAppLinkNavigationType result = [self navigateToAppLink:task.result + error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } else { + return @(result); + } + }]; +} + ++ (BFAppLinkNavigationType)navigateToAppLink:(BFAppLink *)link error:(NSError **)error { + return [[BFAppLinkNavigation navigationWithAppLink:link + extras:nil + appLinkData:nil] navigate:error]; +} + ++ (BFAppLinkNavigationType)navigationTypeForLink:(BFAppLink *)link { + return [[self navigationWithAppLink:link extras:nil appLinkData:nil] navigationType]; +} + +- (BFAppLinkNavigationType)navigationType { + BFAppLinkTarget *eligibleTarget = nil; + for (BFAppLinkTarget *target in self.appLink.targets) { + if ([[UIApplication sharedApplication] canOpenURL:target.URL]) { + eligibleTarget = target; + break; + } + } + + if (eligibleTarget != nil) { + NSURL *appLinkURL = [self appLinkURLWithTargetURL:eligibleTarget.URL error:nil]; + if (appLinkURL != nil) { + return BFAppLinkNavigationTypeApp; + } else { + return BFAppLinkNavigationTypeFailure; + } + } + + if (self.appLink.webURL != nil) { + NSURL *appLinkURL = [self appLinkURLWithTargetURL:eligibleTarget.URL error:nil]; + if (appLinkURL != nil) { + return BFAppLinkNavigationTypeBrowser; + } else { + return BFAppLinkNavigationTypeFailure; + } + } + + return BFAppLinkNavigationTypeFailure; +} + ++ (id)defaultResolver { + if (defaultResolver) { + return defaultResolver; + } + return [BFWebViewAppLinkResolver sharedInstance]; +} + ++ (void)setDefaultResolver:(id)resolver { + defaultResolver = resolver; +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h new file mode 100644 index 0000000000..5c78bff458 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h @@ -0,0 +1,30 @@ +/* + * 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 BFTask; + +/*! + Implement this protocol to provide an alternate strategy for resolving + App Links that may include pre-fetching, caching, or querying for App Link + data from an index provided by a service provider. + */ +@protocol BFAppLinkResolving + +/*! + Asynchronously resolves App Link data for a given URL. + + @param url The URL to resolve into an App Link. + @returns A BFTask that will return a BFAppLink for the given URL. + */ +- (BFTask *)appLinkFromURLInBackground:(NSURL *)url NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.h new file mode 100644 index 0000000000..436c528068 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.h @@ -0,0 +1,88 @@ +/* + * 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 + +@class BFAppLink; +@class BFAppLinkReturnToRefererController; + +/*! + Protocol that a class can implement in order to be notified when the user has navigated back + to the referer of an App Link. + */ +@protocol BFAppLinkReturnToRefererControllerDelegate + +@optional + +/*! Called when the user has tapped to navigate, but before the navigation has been performed. */ +- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller + willNavigateToAppLink:(BFAppLink *)appLink; + +/*! Called after the navigation has been attempted, with an indication of whether the referer + app link was successfully opened. */ +- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller + didNavigateToAppLink:(BFAppLink *)url + type:(BFAppLinkNavigationType)type; + +@end + +/*! + A controller class that implements default behavior for a BFAppLinkReturnToRefererView, including + the ability to display the view above the navigation bar for navigation-based apps. + */ +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") +@interface BFAppLinkReturnToRefererController : NSObject + +/*! + The delegate that will be notified when the user navigates back to the referer. + */ +@property (nonatomic, weak) id delegate; + +/*! + The BFAppLinkReturnToRefererView this controller is controlling. + */ +@property (nonatomic, strong) BFAppLinkReturnToRefererView *view; + +/*! + Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed + contained within another UIView (i.e., not displayed above the navigation bar). + */ +- (instancetype)init; + +/*! + Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed + displayed above the navigation bar. + */ +- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController; + +/*! + Removes the view entirely from the navigation controller it is currently displayed in. + */ +- (void)removeFromNavController; + +/*! + Shows the BFAppLinkReturnToRefererView with the specified referer information. If nil or missing data, + the view will not be displayed. */ +- (void)showViewForRefererAppLink:(BFAppLink *)refererAppLink; + +/*! + Shows the BFAppLinkReturnToRefererView with referer information extracted from the specified URL. + If nil or missing referer App Link data, the view will not be displayed. */ +- (void)showViewForRefererURL:(NSURL *)url; + +/*! + Closes the view, possibly animating it. + */ +- (void)closeViewAnimated:(BOOL)animated; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.m new file mode 100644 index 0000000000..d380635493 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.m @@ -0,0 +1,230 @@ +/* + * 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 "BFAppLinkReturnToRefererController.h" + +#import "BFAppLink.h" +#import "BFAppLinkReturnToRefererView_Internal.h" +#import "BFURL_Internal.h" + +static const CFTimeInterval kBFViewAnimationDuration = 0.25f; + +@implementation BFAppLinkReturnToRefererController { + UINavigationController *_navigationController; + BFAppLinkReturnToRefererView *_view; +} + +#pragma mark - Object lifecycle + +- (instancetype)init { + return [self initForDisplayAboveNavController:nil]; +} + +- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController { + self = [super init]; + if (self) { + _navigationController = navController; + + if (_navigationController != nil) { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(statusBarFrameWillChange:) + name:UIApplicationWillChangeStatusBarFrameNotification + object:nil]; + [nc addObserver:self + selector:@selector(statusBarFrameDidChange:) + name:UIApplicationDidChangeStatusBarFrameNotification + object:nil]; + [nc addObserver:self + selector:@selector(orientationDidChange:) + name:UIDeviceOrientationDidChangeNotification + object:nil]; + } + } + return self; +} + +- (void)dealloc { + _view.delegate = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Public API + +- (BFAppLinkReturnToRefererView *)view { + if (!_view) { + self.view = [[BFAppLinkReturnToRefererView alloc] initWithFrame:CGRectZero]; + if (_navigationController) { + [_navigationController.view addSubview:_view]; + } + } + return _view; +} + +- (void)setView:(BFAppLinkReturnToRefererView *)view { + if (_view != view) { + _view.delegate = nil; + } + + _view = view; + _view.delegate = self; + + if (_navigationController) { + _view.includeStatusBarInSize = BFIncludeStatusBarInSizeAlways; + } +} + +- (void)showViewForRefererAppLink:(BFAppLink *)refererAppLink { + self.view.refererAppLink = refererAppLink; + + [_view sizeToFit]; + + if (_navigationController) { + if (!_view.closed) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self moveNavigationBar]; + }); + } + } +} + +- (void)showViewForRefererURL:(NSURL *)url { + BFAppLink *appLink = [BFURL URLForRenderBackToReferrerBarURL:url].appLinkReferer; + [self showViewForRefererAppLink:appLink]; +} + +- (void)removeFromNavController { + if (_navigationController) { + [_view removeFromSuperview]; + _navigationController = nil; + } +} + +#pragma mark - BFAppLinkReturnToRefererViewDelegate + +- (void)returnToRefererViewDidTapInsideCloseButton:(BFAppLinkReturnToRefererView *)view { + [self closeViewAnimated:YES explicitlyClosed:YES]; +} + +- (void)returnToRefererViewDidTapInsideLink:(BFAppLinkReturnToRefererView *)view + link:(BFAppLink *)link { + [self openRefererAppLink:link]; + [self closeViewAnimated:NO explicitlyClosed:NO]; +} + +#pragma mark - Private + +- (void)statusBarFrameWillChange:(NSNotification *)notification { + NSValue *rectValue = [[notification userInfo] valueForKey:UIApplicationStatusBarFrameUserInfoKey]; + CGRect newFrame; + [rectValue getValue:&newFrame]; + + if (_navigationController && !_view.closed) { + if (CGRectGetHeight(newFrame) == 40) { + UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState; + [UIView animateWithDuration:kBFViewAnimationDuration delay:0.0 options:options animations:^{ + _view.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(_view.bounds), 0.0); + } completion:nil]; + } + } +} + +- (void)statusBarFrameDidChange:(NSNotification *)notification { + NSValue *rectValue = [[notification userInfo] valueForKey:UIApplicationStatusBarFrameUserInfoKey]; + CGRect newFrame; + [rectValue getValue:&newFrame]; + + if (_navigationController && !_view.closed) { + if (CGRectGetHeight(newFrame) == 40) { + UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState; + [UIView animateWithDuration:kBFViewAnimationDuration delay:0.0 options:options animations:^{ + [_view sizeToFit]; + [self moveNavigationBar]; + } completion:nil]; + } + } +} + +- (void)orientationDidChange:(NSNotificationCenter *)notification { + if (_navigationController && !_view.closed && CGRectGetHeight(_view.bounds) > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self moveNavigationBar]; + }); + } +} + +- (void)moveNavigationBar { + if (_view.closed || !_view.refererAppLink) { + return; + } + + [self updateNavigationBarY:CGRectGetHeight(_view.bounds)]; +} + +- (void)updateNavigationBarY:(CGFloat)y { + UINavigationBar *navigationBar = _navigationController.navigationBar; + CGRect navigationBarFrame = navigationBar.frame; + CGFloat oldContainerViewY = CGRectGetMaxY(navigationBarFrame); + navigationBarFrame.origin.y = y; + navigationBar.frame = navigationBarFrame; + + CGFloat dy = CGRectGetMaxY(navigationBarFrame) - oldContainerViewY; + UIView *containerView = _navigationController.visibleViewController.view.superview; + containerView.frame = UIEdgeInsetsInsetRect(containerView.frame, UIEdgeInsetsMake(dy, 0.0, 0.0, 0.0)); +} + +- (void)closeViewAnimated:(BOOL)animated { + [self closeViewAnimated:animated explicitlyClosed:YES]; +} + +- (void)closeViewAnimated:(BOOL)animated explicitlyClosed:(BOOL)explicitlyClosed { + void (^closer)(void) = ^{ + if (_navigationController) { + [self updateNavigationBarY:_view.statusBarHeight]; + } + + CGRect frame = _view.frame; + frame.size.height = 0.0; + _view.frame = frame; + }; + + if (animated) { + [UIView animateWithDuration:kBFViewAnimationDuration animations:^{ + closer(); + } completion:^(BOOL finished) { + if (explicitlyClosed) { + _view.closed = YES; + } + }]; + } else { + closer(); + if (explicitlyClosed) { + _view.closed = YES; + } + } +} + +- (void)openRefererAppLink:(BFAppLink *)refererAppLink { + if (refererAppLink) { + id delegate = _delegate; + if ([delegate respondsToSelector:@selector(returnToRefererController:willNavigateToAppLink:)]) { + [delegate returnToRefererController:self willNavigateToAppLink:refererAppLink]; + } + + NSError *error = nil; + BFAppLinkNavigationType type = [BFAppLinkNavigation navigateToAppLink:refererAppLink error:&error]; + + if ([delegate respondsToSelector:@selector(returnToRefererController:didNavigateToAppLink:type:)]) { + [delegate returnToRefererController:self didNavigateToAppLink:refererAppLink type:type]; + } + } +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h new file mode 100644 index 0000000000..f62bc66f6c --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h @@ -0,0 +1,78 @@ +/* + * 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 + +@class BFAppLinkReturnToRefererView; +@class BFURL; + +typedef NS_ENUM(NSUInteger, BFIncludeStatusBarInSize) { + BFIncludeStatusBarInSizeNever, + BFIncludeStatusBarInSizeIOS7AndLater, + BFIncludeStatusBarInSizeAlways, +}; + +/*! + Protocol that a class can implement in order to be notified when the user has navigated back + to the referer of an App Link. + */ +@protocol BFAppLinkReturnToRefererViewDelegate + +/*! + Called when the user has tapped inside the close button. + */ +- (void)returnToRefererViewDidTapInsideCloseButton:(BFAppLinkReturnToRefererView *)view; + +/*! + Called when the user has tapped inside the App Link portion of the view. + */ +- (void)returnToRefererViewDidTapInsideLink:(BFAppLinkReturnToRefererView *)view + link:(BFAppLink *)link; + +@end + +/*! + Provides a UIView that displays a button allowing users to navigate back to the + application that launched the App Link currently being handled, if the App Link + contained referer data. The user can also close the view by clicking a close button + rather than navigating away. If the view is provided an App Link that does not contain + referer data, it will have zero size and no UI will be displayed. + */ +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") +@interface BFAppLinkReturnToRefererView : UIView + +/*! + The delegate that will be notified when the user navigates back to the referer. + */ +@property (nonatomic, weak) id delegate; + +/*! + The color of the text label and close button. + */ +@property (nonatomic, strong) UIColor *textColor; + +@property (nonatomic, strong) BFAppLink *refererAppLink; + +/*! + Indicates whether to extend the size of the view to include the current status bar + size, for use in scenarios where the view might extend under the status bar on iOS 7 and + above; this property has no effect on earlier versions of iOS. + */ +@property (nonatomic, assign) BFIncludeStatusBarInSize includeStatusBarInSize; + +/*! + Indicates whether the user has closed the view by clicking the close button. + */ +@property (nonatomic, assign) BOOL closed; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m new file mode 100644 index 0000000000..f2d0e79ba2 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m @@ -0,0 +1,268 @@ +/* + * 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 "BFAppLinkReturnToRefererView.h" + +#import "BFAppLink.h" +#import "BFAppLinkTarget.h" + +static const CGFloat BFMarginX = 8.5f; +static const CGFloat BFMarginY = 8.5f; + +static NSString *const BFRefererAppLink = @"referer_app_link"; +static NSString *const BFRefererAppName = @"app_name"; +static NSString *const BFRefererUrl = @"url"; +static const CGFloat BFCloseButtonWidth = 12.0; +static const CGFloat BFCloseButtonHeight = 12.0; + +@interface BFAppLinkReturnToRefererView () + +@property (nonatomic, strong) UILabel *labelView; +@property (nonatomic, strong) UIButton *closeButton; +@property (nonatomic, strong) UITapGestureRecognizer *insideTapGestureRecognizer; + +@end + +@implementation BFAppLinkReturnToRefererView { + BOOL _explicitlyHidden; +} + +#pragma mark - Initialization + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self commonInit]; + [self sizeToFit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self commonInit]; + } + return self; +} + +- (void)commonInit { + // Initialization code + _includeStatusBarInSize = BFIncludeStatusBarInSizeIOS7AndLater; + + // iOS 7 system blue color + self.backgroundColor = [UIColor colorWithRed:0.0f green:122.0f / 255.0f blue:1.0f alpha:1.0f]; + self.textColor = [UIColor whiteColor]; + self.clipsToBounds = YES; + + [self initViews]; +} + +- (void)initViews { + if (!_labelView && !_closeButton) { + _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _closeButton.backgroundColor = [UIColor clearColor]; + _closeButton.userInteractionEnabled = YES; + _closeButton.clipsToBounds = YES; + _closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; + _closeButton.contentMode = UIViewContentModeCenter; + [_closeButton addTarget:self action:@selector(closeButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; + + [self addSubview:_closeButton]; + + _labelView = [[UILabel alloc] initWithFrame:CGRectZero]; + _labelView.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; + _labelView.textColor = [UIColor whiteColor]; + _labelView.backgroundColor = [UIColor clearColor]; +#ifdef __IPHONE_6_0 + _labelView.textAlignment = NSTextAlignmentCenter; +#else + _labelView.textAlignment = UITextAlignmentCenter; +#endif + _labelView.clipsToBounds = YES; + [self updateLabelText]; + [self addSubview:_labelView]; + + _insideTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapInside:)]; + _labelView.userInteractionEnabled = YES; + [_labelView addGestureRecognizer:_insideTapGestureRecognizer]; + + [self updateColors]; + } +} + +#pragma mark - Layout + +- (CGSize)intrinsicContentSize { + CGSize size = self.bounds.size; + if (_closed || !self.hasRefererData) { + size.height = 0.0; + } else { + CGSize labelSize = [_labelView sizeThatFits:size]; + size = CGSizeMake(size.width, labelSize.height + 2 * BFMarginY + self.statusBarHeight); + } + return size; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGRect bounds = self.bounds; + + _labelView.preferredMaxLayoutWidth = _labelView.bounds.size.width; + CGSize labelSize = [_labelView sizeThatFits:bounds.size]; + _labelView.frame = CGRectMake(BFMarginX, + CGRectGetMaxY(bounds) - labelSize.height - 1.5f * BFMarginY, + CGRectGetMaxX(bounds) - BFCloseButtonWidth - 3 * BFMarginX, + labelSize.height + BFMarginY); + + _closeButton.frame = CGRectMake(CGRectGetMaxX(bounds) - BFCloseButtonWidth - 2 * BFMarginX, + _labelView.center.y - BFCloseButtonHeight / 2.0f - BFMarginY, + BFCloseButtonWidth + 2 * BFMarginX, + BFCloseButtonHeight + 2 * BFMarginY); +} + +- (CGSize)sizeThatFits:(CGSize)size { + if (_closed || !self.hasRefererData) { + size = CGSizeMake(size.width, 0.0); + } else { + CGSize labelSize = [_labelView sizeThatFits:size]; + size = CGSizeMake(size.width, labelSize.height + 2 * BFMarginY + self.statusBarHeight); + } + return size; +} + +- (CGFloat)statusBarHeight { + UIApplication *application = [UIApplication sharedApplication]; + + BOOL include; + switch (_includeStatusBarInSize) { + case BFIncludeStatusBarInSizeAlways: + include = YES; + break; + case BFIncludeStatusBarInSizeIOS7AndLater: { + float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; + include = (systemVersion >= 7.0); + break; + } + case BFIncludeStatusBarInSizeNever: + include = NO; + break; + } + if (include && !application.statusBarHidden) { + BOOL landscape = UIInterfaceOrientationIsLandscape(application.statusBarOrientation); + CGRect statusBarFrame = application.statusBarFrame; + return landscape ? CGRectGetWidth(statusBarFrame) : CGRectGetHeight(statusBarFrame); + } + + return 0; +} + +#pragma mark - Public API + +- (void)setIncludeStatusBarInSize:(BFIncludeStatusBarInSize)includeStatusBarInSize { + _includeStatusBarInSize = includeStatusBarInSize; + [self setNeedsLayout]; + [self invalidateIntrinsicContentSize]; +} + +- (void)setTextColor:(UIColor *)textColor { + _textColor = textColor; + [self updateColors]; +} + +- (void)setRefererAppLink:(BFAppLink *)refererAppLink { + _refererAppLink = refererAppLink; + [self updateLabelText]; + [self updateHidden]; + [self invalidateIntrinsicContentSize]; +} + +- (void)setClosed:(BOOL)closed { + if (_closed != closed) { + _closed = closed; + [self updateHidden]; + [self invalidateIntrinsicContentSize]; + } +} + +- (void)setHidden:(BOOL)hidden { + _explicitlyHidden = hidden; + [self updateHidden]; +} + +#pragma mark - Private + +- (void)updateLabelText { + NSString *appName = (_refererAppLink && _refererAppLink.targets[0]) ? [_refererAppLink.targets[0] appName] : nil; + _labelView.text = [self localizedLabelForReferer:appName]; +} + +- (void)updateColors { + UIImage *closeButtonImage = [self drawCloseButtonImageWithColor:_textColor]; + + _labelView.textColor = _textColor; + [_closeButton setImage:closeButtonImage forState:UIControlStateNormal]; +} + +- (UIImage *)drawCloseButtonImageWithColor:(UIColor *)color { + + UIGraphicsBeginImageContextWithOptions(CGSizeMake(BFCloseButtonWidth, BFCloseButtonHeight), NO, 0.0f); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetStrokeColorWithColor(context, [color CGColor]); + CGContextSetFillColorWithColor(context, [color CGColor]); + + CGContextSetLineWidth(context, 1.25f); + + CGFloat inset = 0.5f; + + CGContextMoveToPoint(context, inset, inset); + CGContextAddLineToPoint(context, BFCloseButtonWidth - inset, BFCloseButtonHeight - inset); + CGContextStrokePath(context); + + CGContextMoveToPoint(context, BFCloseButtonWidth - inset, inset); + CGContextAddLineToPoint(context, inset, BFCloseButtonHeight - inset); + CGContextStrokePath(context); + + UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return result; +} + +- (NSString *)localizedLabelForReferer:(NSString *)refererName { + if (!refererName) { + return nil; + } + + NSString *format = NSLocalizedString(@"Touch to return to %1$@", @"Format for the string to return to a calling app."); + + return [NSString stringWithFormat:format, refererName]; +} + +- (BOOL)hasRefererData { + return _refererAppLink && _refererAppLink.targets[0]; +} + +- (void)closeButtonTapped:(id)sender { + [_delegate returnToRefererViewDidTapInsideCloseButton:self]; +} + +- (void)onTapInside:(UIGestureRecognizer *)sender { + [_delegate returnToRefererViewDidTapInsideLink:self link:_refererAppLink]; +} + +- (void)updateHidden { + [super setHidden:_explicitlyHidden || _closed || !self.hasRefererData]; +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h new file mode 100644 index 0000000000..61721269d5 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h @@ -0,0 +1,33 @@ +/* + * 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 a target defined in App Link metadata, consisting of at least + a URL, and optionally an App Store ID and name. + */ +@interface BFAppLinkTarget : NSObject + +/*! Creates a BFAppLinkTarget with the given app site and target URL. */ ++ (instancetype)appLinkTargetWithURL:(NSURL *)url + appStoreId:(NSString *)appStoreId + appName:(NSString *)appName; + +/*! The URL prefix for this app link target */ +@property (nonatomic, strong, readonly) NSURL *URL; + +/*! The app ID for the app store */ +@property (nonatomic, copy, readonly) NSString *appStoreId; + +/*! The name of the app */ +@property (nonatomic, copy, readonly) NSString *appName; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m new file mode 100644 index 0000000000..5518cba295 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m @@ -0,0 +1,33 @@ +/* + * 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 "BFAppLinkTarget.h" + +@interface BFAppLinkTarget () + +@property (nonatomic, strong, readwrite) NSURL *URL; +@property (nonatomic, copy, readwrite) NSString *appStoreId; +@property (nonatomic, copy, readwrite) NSString *appName; + +@end + +@implementation BFAppLinkTarget + ++ (instancetype)appLinkTargetWithURL:(NSURL *)url + appStoreId:(NSString *)appStoreId + appName:(NSString *)appName { + BFAppLinkTarget *target = [[self alloc] init]; + target.URL = url; + target.appStoreId = appStoreId; + target.appName = appName; + return target; +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h new file mode 100644 index 0000000000..b3173fc23c --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h @@ -0,0 +1,45 @@ +/* + * 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 + +/*! The name of the notification posted by BFMeasurementEvent */ +FOUNDATION_EXPORT NSString *const BFMeasurementEventNotificationName; + +/*! Defines keys in the userInfo object for the notification named BFMeasurementEventNotificationName */ +/*! The string field for the name of the event */ +FOUNDATION_EXPORT NSString *const BFMeasurementEventNameKey; +/*! The dictionary field for the arguments of the event */ +FOUNDATION_EXPORT NSString *const BFMeasurementEventArgsKey; + +/*! Bolts Events raised by BFMeasurementEvent for Applink */ +/*! + The name of the event posted when [BFURL URLWithURL:] is called successfully. This represents the successful parsing of an app link URL. + */ +FOUNDATION_EXPORT NSString *const BFAppLinkParseEventName; + +/*! + The name of the event posted when [BFURL URLWithInboundURL:] is called successfully. + This represents parsing an inbound app link URL from a different application + */ +FOUNDATION_EXPORT NSString *const BFAppLinkNavigateInEventName; + +/*! The event raised when the user navigates from your app to other apps */ +FOUNDATION_EXPORT NSString *const BFAppLinkNavigateOutEventName; + +/*! + The event raised when the user navigates out from your app and back to the referrer app. + e.g when the user leaves your app after tapping the back-to-referrer navigation bar + */ +FOUNDATION_EXPORT NSString *const BFAppLinkNavigateBackToReferrerEventName; + +@interface BFMeasurementEvent : NSObject + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m new file mode 100644 index 0000000000..e3e6cde4a2 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m @@ -0,0 +1,62 @@ +/* + * 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 "BFMeasurementEvent_Internal.h" + +NSString *const BFMeasurementEventNotificationName = @"com.parse.bolts.measurement_event"; + +NSString *const BFMeasurementEventNameKey = @"event_name"; +NSString *const BFMeasurementEventArgsKey = @"event_args"; + +/* app Link Event raised by this BFURL */ +NSString *const BFAppLinkParseEventName = @"al_link_parse"; +NSString *const BFAppLinkNavigateInEventName = @"al_nav_in"; + +/*! AppLink events raised in this class */ +NSString *const BFAppLinkNavigateOutEventName = @"al_nav_out"; +NSString *const BFAppLinkNavigateBackToReferrerEventName = @"al_ref_back_out"; + +__attribute__((noinline)) void warnOnMissingEventName() { + NSLog(@"Warning: Missing event name when logging bolts measurement event. \n" + " Ignoring this event in logging."); +} + +@implementation BFMeasurementEvent { + NSString *_name; + NSDictionary *_args; +} + +- (void)postNotification { + if (!_name) { + warnOnMissingEventName(); + return; + } + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + NSDictionary *userInfo = @{BFMeasurementEventNameKey : _name, + BFMeasurementEventArgsKey : _args}; + + [center postNotificationName:BFMeasurementEventNotificationName + object:self + userInfo:userInfo]; +} + +- (instancetype)initEventWithName:(NSString *)name args:(NSDictionary *)args { + if ((self = [super init])) { + _name = name; + _args = args ? args : @{}; + } + return self; +} + ++ (void)postNotificationForEventName:(NSString *)name args:(NSDictionary *)args { + [[[self alloc] initEventWithName:name args:args] postNotification]; +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h new file mode 100644 index 0000000000..924c91d480 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h @@ -0,0 +1,75 @@ +/* + * 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 BFAppLink; + +/*! + Provides a set of utilities for working with NSURLs, such as parsing of query parameters + and handling for App Link requests. + */ +@interface BFURL : NSObject + +/*! + Creates a link target from a raw URL. + On success, this posts the BFAppLinkParseEventName measurement event. If you are constructing the BFURL within your application delegate's + application:openURL:sourceApplication:annotation:, you should instead use URLWithInboundURL:sourceApplication: + to support better BFMeasurementEvent notifications + @param url The instance of `NSURL` to create BFURL from. + */ ++ (BFURL *)URLWithURL:(NSURL *)url; + +/*! + Creates a link target from a raw URL received from an external application. This is typically called from the app delegate's + application:openURL:sourceApplication:annotation: and will post the BFAppLinkNavigateInEventName measurement event. + @param url The instance of `NSURL` to create BFURL from. + @param sourceApplication the bundle ID of the app that is requesting your app to open the URL. The same sourceApplication in application:openURL:sourceApplication:annotation: + */ ++ (BFURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; + +/*! + Gets the target URL. If the link is an App Link, this is the target of the App Link. + Otherwise, it is the url that created the target. + */ +@property (nonatomic, strong, readonly) NSURL *targetURL; + +/*! + Gets the query parameters for the target, parsed into an NSDictionary. + */ +@property (nonatomic, strong, readonly) NSDictionary *targetQueryParameters; + +/*! + If this link target is an App Link, this is the data found in al_applink_data. + Otherwise, it is nil. + */ +@property (nonatomic, strong, readonly) NSDictionary *appLinkData; + +/*! + If this link target is an App Link, this is the data found in extras. + */ +@property (nonatomic, strong, readonly) NSDictionary *appLinkExtras; + +/*! + The App Link indicating how to navigate back to the referer app, if any. + */ +@property (nonatomic, strong, readonly) BFAppLink *appLinkReferer; + +/*! + The URL that was used to create this BFURL. + */ +@property (nonatomic, strong, readonly) NSURL *inputURL; + +/*! + The query parameters of the inputURL, parsed into an NSDictionary. + */ +@property (nonatomic, strong, readonly) NSDictionary *inputQueryParameters; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m new file mode 100644 index 0000000000..14a13842b7 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m @@ -0,0 +1,142 @@ +/* + * 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 "BFURL_Internal.h" +#import "BFAppLink_Internal.h" +#import "BFAppLinkTarget.h" +#import "BFMeasurementEvent_Internal.h" + +@implementation BFURL + +- (instancetype)initWithURL:(NSURL *)url forOpenInboundURL:(BOOL)forOpenURLEvent sourceApplication:(NSString *)sourceApplication forRenderBackToReferrerBar:(BOOL)forRenderBackToReferrerBar { + self = [super init]; + if (!self) return nil; + + _inputURL = url; + _targetURL = url; + + // Parse the query string parameters for the base URL + NSDictionary *baseQuery = [BFURL queryParametersForURL:url]; + _inputQueryParameters = baseQuery; + _targetQueryParameters = baseQuery; + + // Check for applink_data + NSString *appLinkDataString = baseQuery[BFAppLinkDataParameterName]; + if (appLinkDataString) { + // Try to parse the JSON + NSError *error = nil; + NSDictionary *applinkData = [NSJSONSerialization JSONObjectWithData:[appLinkDataString dataUsingEncoding:NSUTF8StringEncoding] + options:0 + error:&error]; + if (!error && [applinkData isKindOfClass:[NSDictionary class]]) { + // If the version is not specified, assume it is 1. + NSString *version = applinkData[BFAppLinkVersionKeyName] ?: @"1.0"; + NSString *target = applinkData[BFAppLinkTargetKeyName]; + if ([version isKindOfClass:[NSString class]] && + [version isEqual:BFAppLinkVersion]) { + // There's applink data! The target should actually be the applink target. + _appLinkData = applinkData; + id applinkExtras = applinkData[BFAppLinkExtrasKeyName]; + if (applinkExtras && [applinkExtras isKindOfClass:[NSDictionary class]]) { + _appLinkExtras = applinkExtras; + } + _targetURL = ([target isKindOfClass:[NSString class]] ? [NSURL URLWithString:target] : url); + _targetQueryParameters = [BFURL queryParametersForURL:_targetURL]; + + NSDictionary *refererAppLink = _appLinkData[BFAppLinkRefererAppLink]; + NSString *refererURLString = refererAppLink[BFAppLinkRefererUrl]; + NSString *refererAppName = refererAppLink[BFAppLinkRefererAppName]; + + if (refererURLString && refererAppName) { + BFAppLinkTarget *appLinkTarget = [BFAppLinkTarget appLinkTargetWithURL:[NSURL URLWithString:refererURLString] + appStoreId:nil + appName:refererAppName]; + _appLinkReferer = [BFAppLink appLinkWithSourceURL:[NSURL URLWithString:refererURLString] + targets:@[ appLinkTarget ] + webURL:nil + isBackToReferrer:YES]; + } + + // Raise Measurement Event + NSString *const EVENT_YES_VAL = @"1"; + NSString *const EVENT_NO_VAL = @"0"; + NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; + logData[@"version"] = version; + if (refererURLString) { + logData[@"refererURL"] = refererURLString; + } + if (refererAppName) { + logData[@"refererAppName"] = refererAppName; + } + if (sourceApplication) { + logData[@"sourceApplication"] = sourceApplication; + } + if ([_targetURL absoluteString]) { + logData[@"targetURL"] = [_targetURL absoluteString]; + } + if ([_inputURL absoluteString]) { + logData[@"inputURL"] = [_inputURL absoluteString]; + } + if ([_inputURL scheme]) { + logData[@"inputURLScheme"] = [_inputURL scheme]; + } + logData[@"forRenderBackToReferrerBar"] = forRenderBackToReferrerBar ? EVENT_YES_VAL : EVENT_NO_VAL; + logData[@"forOpenUrl"] = forOpenURLEvent ? EVENT_YES_VAL : EVENT_NO_VAL; + [BFMeasurementEvent postNotificationForEventName:BFAppLinkParseEventName args:logData]; + if (forOpenURLEvent) { + [BFMeasurementEvent postNotificationForEventName:BFAppLinkNavigateInEventName args:logData]; + } + } + } + } + + return self; +} + ++ (BFURL *)URLWithURL:(NSURL *)url { + return [[BFURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:NO]; +} + ++ (BFURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication { + return [[BFURL alloc] initWithURL:url forOpenInboundURL:YES sourceApplication:sourceApplication forRenderBackToReferrerBar:NO]; +} + ++ (BFURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url { + return [[BFURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:YES]; +} + ++ (NSString *)decodeURLString:(NSString *)string { + return (NSString *)CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapes(NULL, + (CFStringRef)string, + CFSTR(""))); +} + ++ (NSDictionary *)queryParametersForURL:(NSURL *)url { + NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; + NSString *query = url.query; + if ([query isEqualToString:@""]) { + return @{}; + } + NSArray *queryComponents = [query componentsSeparatedByString:@"&"]; + for (NSString *component in queryComponents) { + NSRange equalsLocation = [component rangeOfString:@"="]; + if (equalsLocation.location == NSNotFound) { + // There's no equals, so associate the key with NSNull + parameters[[self decodeURLString:component]] = [NSNull null]; + } else { + NSString *key = [self decodeURLString:[component substringToIndex:equalsLocation.location]]; + NSString *value = [self decodeURLString:[component substringFromIndex:equalsLocation.location + 1]]; + parameters[key] = value; + } + } + return [NSDictionary dictionaryWithDictionary:parameters]; +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h new file mode 100644 index 0000000000..3782ae2cb9 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h @@ -0,0 +1,26 @@ +/* + * 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 reference implementation for an App Link resolver that uses a hidden UIWebView + to parse the HTML containing App Link metadata. + */ +@interface BFWebViewAppLinkResolver : NSObject + +/*! + Gets the instance of a BFWebViewAppLinkResolver. + */ ++ (instancetype)sharedInstance; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m new file mode 100644 index 0000000000..0e0d58c6e4 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m @@ -0,0 +1,296 @@ +/* + * 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 "BFWebViewAppLinkResolver.h" +#import "BFAppLink.h" +#import "BFAppLinkTarget.h" +#import "BFTask.h" +#import "BFTaskCompletionSource.h" +#import "BFExecutor.h" + +// Defines JavaScript to extract app link tags from HTML content +static NSString *const BFWebViewAppLinkResolverTagExtractionJavaScript = @"" +"(function() {" +" var metaTags = document.getElementsByTagName('meta');" +" var results = [];" +" for (var i = 0; i < metaTags.length; i++) {" +" var property = metaTags[i].getAttribute('property');" +" if (property && property.substring(0, 'al:'.length) === 'al:') {" +" var tag = { \"property\": metaTags[i].getAttribute('property') };" +" if (metaTags[i].hasAttribute('content')) {" +" tag['content'] = metaTags[i].getAttribute('content');" +" }" +" results.push(tag);" +" }" +" }" +" return JSON.stringify(results);" +"})()"; +static NSString *const BFWebViewAppLinkResolverIOSURLKey = @"url"; +static NSString *const BFWebViewAppLinkResolverIOSAppStoreIdKey = @"app_store_id"; +static NSString *const BFWebViewAppLinkResolverIOSAppNameKey = @"app_name"; +static NSString *const BFWebViewAppLinkResolverDictionaryValueKey = @"_value"; +static NSString *const BFWebViewAppLinkResolverPreferHeader = @"Prefer-Html-Meta-Tags"; +static NSString *const BFWebViewAppLinkResolverMetaTagPrefix = @"al"; +static NSString *const BFWebViewAppLinkResolverWebKey = @"web"; +static NSString *const BFWebViewAppLinkResolverIOSKey = @"ios"; +static NSString *const BFWebViewAppLinkResolverIPhoneKey = @"iphone"; +static NSString *const BFWebViewAppLinkResolverIPadKey = @"ipad"; +static NSString *const BFWebViewAppLinkResolverWebURLKey = @"url"; +static NSString *const BFWebViewAppLinkResolverShouldFallbackKey = @"should_fallback"; + +@interface BFWebViewAppLinkResolverWebViewDelegate : NSObject + +@property (nonatomic, copy) void (^didFinishLoad)(UIWebView *webView); +@property (nonatomic, copy) void (^didFailLoadWithError)(UIWebView *webView, NSError *error); +@property (nonatomic, assign) BOOL hasLoaded; + +@end + +@implementation BFWebViewAppLinkResolverWebViewDelegate + +- (void)webViewDidFinishLoad:(UIWebView *)webView { + if (self.didFinishLoad) { + self.didFinishLoad(webView); + } +} + +- (void)webViewDidStartLoad:(UIWebView *)webView { +} + +- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { + if (self.didFailLoadWithError) { + self.didFailLoadWithError(webView, error); + } +} + +- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { + if (self.hasLoaded) { + // Consider loading a second resource to be "success", since it indicates an inner frame + // or redirect is happening. We can run the tag extraction script at this point. + self.didFinishLoad(webView); + return NO; + } + self.hasLoaded = YES; + return YES; +} + +@end + +@implementation BFWebViewAppLinkResolver + ++ (instancetype)sharedInstance { + static id instance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[self alloc] init]; + }); + return instance; +} + +- (BFTask *)followRedirects:(NSURL *)url { + // This task will be resolved with either the redirect NSURL + // or a dictionary with the response data to be returned. + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request setValue:BFWebViewAppLinkResolverMetaTagPrefix forHTTPHeaderField:BFWebViewAppLinkResolverPreferHeader]; + + void (^completion)(NSURLResponse *response, NSData *data, NSError *error) = ^(NSURLResponse *response, NSData *data, NSError *error) { + if (error) { + [tcs setError:error]; + return; + } + + if ([response isKindOfClass:[NSHTTPURLResponse class]]) { + NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; + + // NSURLConnection usually follows redirects automatically, but the + // documentation is unclear what the default is. This helps it along. + if (httpResponse.statusCode >= 300 && httpResponse.statusCode < 400) { + NSString *redirectString = httpResponse.allHeaderFields[@"Location"]; + NSURL *redirectURL = [NSURL URLWithString:redirectString]; + [tcs setResult:redirectURL]; + return; + } + } + + [tcs setResult:@{ @"response" : response, @"data" : data }]; + }; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0 || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_9 + NSURLSession *session = [NSURLSession sharedSession]; + [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + completion(response, data, error); + }] resume]; +#else + [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:completion]; +#endif + + return [tcs.task continueWithSuccessBlock:^id(BFTask *task) { + // If we redirected, just keep recursing. + if ([task.result isKindOfClass:[NSURL class]]) { + return [self followRedirects:task.result]; + } + return task; + }]; +} + +- (BFTask *)appLinkFromURLInBackground:(NSURL *)url NS_EXTENSION_UNAVAILABLE_IOS("") { + return [[self followRedirects:url] continueWithExecutor:[BFExecutor mainThreadExecutor] + withSuccessBlock:^id(BFTask *task) { + NSData *responseData = task.result[@"data"]; + NSHTTPURLResponse *response = task.result[@"response"]; + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + + UIWebView *webView = [[UIWebView alloc] init]; + BFWebViewAppLinkResolverWebViewDelegate *listener = [[BFWebViewAppLinkResolverWebViewDelegate alloc] init]; + __block BFWebViewAppLinkResolverWebViewDelegate *retainedListener = listener; + listener.didFinishLoad = ^(UIWebView *view) { + if (retainedListener) { + NSDictionary *ogData = [self getALDataFromLoadedPage:view]; + [view removeFromSuperview]; + view.delegate = nil; + retainedListener = nil; + [tcs setResult:[self appLinkFromALData:ogData destination:url]]; + } + }; + listener.didFailLoadWithError = ^(UIWebView* view, NSError *error) { + if (retainedListener) { + [view removeFromSuperview]; + view.delegate = nil; + retainedListener = nil; + [tcs setError:error]; + } + }; + webView.delegate = listener; + webView.hidden = YES; + [webView loadData:responseData + MIMEType:response.MIMEType + textEncodingName:response.textEncodingName + baseURL:response.URL]; + UIWindow *window = [UIApplication sharedApplication].windows.firstObject; + [window addSubview:webView]; + + return tcs.task; + }]; +} + +/* + Builds up a data structure filled with the app link data from the meta tags on a page. + The structure of this object is a dictionary where each key holds an array of app link + data dictionaries. Values are stored in a key called "_value". + */ +- (NSDictionary *)parseALData:(NSArray *)dataArray { + NSMutableDictionary *al = [NSMutableDictionary dictionary]; + for (NSDictionary *tag in dataArray) { + NSString *name = tag[@"property"]; + if (![name isKindOfClass:[NSString class]]) { + continue; + } + NSArray *nameComponents = [name componentsSeparatedByString:@":"]; + if (![nameComponents[0] isEqualToString:BFWebViewAppLinkResolverMetaTagPrefix]) { + continue; + } + NSMutableDictionary *root = al; + for (NSUInteger i = 1; i < nameComponents.count; i++) { + NSMutableArray *children = root[nameComponents[i]]; + if (!children) { + children = [NSMutableArray array]; + root[nameComponents[i]] = children; + } + NSMutableDictionary *child = children.lastObject; + if (!child || i == nameComponents.count - 1) { + child = [NSMutableDictionary dictionary]; + [children addObject:child]; + } + root = child; + } + if (tag[@"content"]) { + root[BFWebViewAppLinkResolverDictionaryValueKey] = tag[@"content"]; + } + } + return al; +} + +- (NSDictionary *)getALDataFromLoadedPage:(UIWebView *)webView { + // Run some JavaScript in the webview to fetch the meta tags. + NSString *jsonString = [webView stringByEvaluatingJavaScriptFromString:BFWebViewAppLinkResolverTagExtractionJavaScript]; + NSError *error = nil; + NSArray *arr = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] + options:0 + error:&error]; + return [self parseALData:arr]; +} + +/* + Converts app link data into a BFAppLink containing the targets relevant for this platform. + */ +- (BFAppLink *)appLinkFromALData:(NSDictionary *)appLinkDict destination:(NSURL *)destination { + NSMutableArray *linkTargets = [NSMutableArray array]; + + NSArray *platformData = nil; + + const UIUserInterfaceIdiom idiom = UI_USER_INTERFACE_IDIOM(); + if (idiom == UIUserInterfaceIdiomPad) { + platformData = @[ appLinkDict[BFWebViewAppLinkResolverIPadKey] ?: @{}, + appLinkDict[BFWebViewAppLinkResolverIOSKey] ?: @{} ]; + } else if (idiom == UIUserInterfaceIdiomPhone) { + platformData = @[ appLinkDict[BFWebViewAppLinkResolverIPhoneKey] ?: @{}, + appLinkDict[BFWebViewAppLinkResolverIOSKey] ?: @{} ]; + } else { + // Future-proofing. Other User Interface idioms should only hit ios. + platformData = @[ appLinkDict[BFWebViewAppLinkResolverIOSKey] ?: @{} ]; + } + + for (NSArray *platformObjects in platformData) { + for (NSDictionary *platformDict in platformObjects) { + // The schema requires a single url/app store id/app name, + // but we could find multiple of them. We'll make a best effort + // to interpret this data. + NSArray *urls = platformDict[BFWebViewAppLinkResolverIOSURLKey]; + NSArray *appStoreIds = platformDict[BFWebViewAppLinkResolverIOSAppStoreIdKey]; + NSArray *appNames = platformDict[BFWebViewAppLinkResolverIOSAppNameKey]; + + NSUInteger maxCount = MAX(urls.count, MAX(appStoreIds.count, appNames.count)); + + for (NSUInteger i = 0; i < maxCount; i++) { + NSString *urlString = urls[i][BFWebViewAppLinkResolverDictionaryValueKey]; + NSURL *url = urlString ? [NSURL URLWithString:urlString] : nil; + NSString *appStoreId = appStoreIds[i][BFWebViewAppLinkResolverDictionaryValueKey]; + NSString *appName = appNames[i][BFWebViewAppLinkResolverDictionaryValueKey]; + BFAppLinkTarget *target = [BFAppLinkTarget appLinkTargetWithURL:url + appStoreId:appStoreId + appName:appName]; + [linkTargets addObject:target]; + } + } + } + + NSDictionary *webDict = appLinkDict[BFWebViewAppLinkResolverWebKey][0]; + NSString *webUrlString = webDict[BFWebViewAppLinkResolverWebURLKey][0][BFWebViewAppLinkResolverDictionaryValueKey]; + NSString *shouldFallbackString = webDict[BFWebViewAppLinkResolverShouldFallbackKey][0][BFWebViewAppLinkResolverDictionaryValueKey]; + + NSURL *webUrl = destination; + + if (shouldFallbackString && + [@[ @"no", @"false", @"0" ] containsObject:[shouldFallbackString lowercaseString]]) { + webUrl = nil; + } + if (webUrl && webUrlString) { + webUrl = [NSURL URLWithString:webUrlString]; + } + + return [BFAppLink appLinkWithSourceURL:destination + targets:linkTargets + webURL:webUrl]; +} + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h new file mode 100644 index 0000000000..8b85823b4d --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h @@ -0,0 +1,17 @@ +/* + * 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 + +@interface BFAppLinkReturnToRefererView (Internal) + +- (CGFloat)statusBarHeight; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h new file mode 100644 index 0000000000..aeeaa53e3d --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h @@ -0,0 +1,32 @@ +/* + * 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 + +FOUNDATION_EXPORT NSString *const BFAppLinkDataParameterName; +FOUNDATION_EXPORT NSString *const BFAppLinkTargetKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkUserAgentKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkExtrasKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkVersionKeyName; +FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppLink; +FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppName; +FOUNDATION_EXPORT NSString *const BFAppLinkRefererUrl; + +@interface BFAppLink (Internal) + ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(NSURL *)webURL + isBackToReferrer:(BOOL)isBackToReferrer; + +/*! return if this AppLink is to go back to referrer. */ +@property (nonatomic, assign, readonly, getter=isBackToReferrer) BOOL backToReferrer; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFMeasurementEvent_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFMeasurementEvent_Internal.h new file mode 100644 index 0000000000..7d46fd046c --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFMeasurementEvent_Internal.h @@ -0,0 +1,19 @@ +/* + * 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 +/*! + Provides methods for posting notifications from the Bolts framework + */ +@interface BFMeasurementEvent (Internal) + ++ (void)postNotificationForEventName:(NSString *)name args:(NSDictionary *)args; + +@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h new file mode 100644 index 0000000000..03b6bc674a --- /dev/null +++ b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h @@ -0,0 +1,15 @@ +/* + * 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 + +@interface BFURL (Internal) ++ (BFURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url; +@end diff --git a/iphone/Maps/Pods/Bolts/LICENSE b/iphone/Maps/Pods/Bolts/LICENSE new file mode 100644 index 0000000000..e1a5831dea --- /dev/null +++ b/iphone/Maps/Pods/Bolts/LICENSE @@ -0,0 +1,30 @@ +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/iphone/Maps/Pods/Bolts/README.md b/iphone/Maps/Pods/Bolts/README.md new file mode 100644 index 0000000000..5e972c8500 --- /dev/null +++ b/iphone/Maps/Pods/Bolts/README.md @@ -0,0 +1,683 @@ +Bolts +============ +[![Build Status](https://img.shields.io/travis/BoltsFramework/Bolts-ObjC/master.svg?style=flat)](https://travis-ci.org/BoltsFramework/Bolts-ObjC) +[![Coverage Status](https://codecov.io/github/BoltsFramework/Bolts-ObjC/coverage.svg?branch=master)](https://codecov.io/github/BoltsFramework/Bolts-ObjC?branch=master) +[![Pod Platform](https://img.shields.io/cocoapods/p/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) +[![Pod License](https://img.shields.io/cocoapods/l/Bolts.svg?style=flat)](https://github.com/BoltsFramework/Bolts-ObjC/blob/master/LICENSE) +[![Reference Status](https://www.versioneye.com/objective-c/bolts/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts/references) + +[![Pod Version](https://img.shields.io/cocoapods/v/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +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://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 != nil { + // 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 != nil { + // 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 `BFTaskCompletionSource`, 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://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://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 navigation-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-ObjC/releases). + +Bolts is also available through [CocoaPods](https://cocoapods.org/). To install it simply add the following line to your Podfile: + + pod 'Bolts' diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h new file mode 100644 index 0000000000..4216bfd97c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h @@ -0,0 +1,822 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#if !TARGET_OS_TV +#import +#endif + +#import + +@class FBSDKAccessToken; +@class FBSDKGraphRequest; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +/** NSNotificationCenter name indicating a result of a failed log flush attempt. The posted object will be an NSError instance. */ +FOUNDATION_EXPORT NSNotificationName const FBSDKAppEventsLoggingResultNotification; + +#else + +/** NSNotificationCenter name indicating a result of a failed log flush attempt. The posted object will be an NSError instance. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventsLoggingResultNotification; + +#endif + +/** optional plist key ("FacebookLoggingOverrideAppID") for setting `loggingOverrideAppID` */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventsOverrideAppIDBundleKey; + +/** + + NS_ENUM (NSUInteger, FBSDKAppEventsFlushBehavior) + + Specifies when `FBSDKAppEvents` sends log events to the server. + + */ +typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushBehavior) +{ + + /** Flush automatically: periodically (once a minute or every 100 logged events) and always at app reactivation. */ + FBSDKAppEventsFlushBehaviorAuto = 0, + + /** Only flush when the `flush` method is called. When an app is moved to background/terminated, the + events are persisted and re-established at activation, but they will only be written with an + explicit call to `flush`. */ + FBSDKAppEventsFlushBehaviorExplicitOnly, + +}; + +/** + NS_ENUM(NSUInteger, FBSDKProductAvailability) + Specifies product availability for Product Catalog product item update + */ +typedef NS_ENUM(NSUInteger, FBSDKProductAvailability) +{ + /** + * Item ships immediately + */ + FBSDKProductAvailabilityInStock = 0, + /** + * No plan to restock + */ + FBSDKProductAvailabilityOutOfStock, + /** + * Available in future + */ + FBSDKProductAvailabilityPreOrder, + /** + * Ships in 1-2 weeks + */ + FBSDKProductAvailabilityAvailableForOrder, + /** + * Discontinued + */ + FBSDKProductAvailabilityDiscontinued, +}; + +/** + NS_ENUM(NSUInteger, FBSDKProductCondition) + Specifies product condition for Product Catalog product item update + */ +typedef NS_ENUM(NSUInteger, FBSDKProductCondition) +{ + FBSDKProductConditionNew = 0, + FBSDKProductConditionRefurbished, + FBSDKProductConditionUsed, +}; + +/** + @methodgroup Predefined event names for logging events common to many apps. Logging occurs through the `logEvent` family of methods on `FBSDKAppEvents`. + Common event parameters are provided in the `FBSDKAppEventsParameterNames*` constants. + */ + +/** Log this event when the user has achieved a level in the app. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAchievedLevel; + +/** Log this event when the user has entered their payment info. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAddedPaymentInfo; + +/** Log this event when the user has added an item to their cart. The valueToSum passed to logEvent should be the item's price. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAddedToCart; + +/** Log this event when the user has added an item to their wishlist. The valueToSum passed to logEvent should be the item's price. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAddedToWishlist; + +/** Log this event when a user has completed registration with the app. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameCompletedRegistration; + +/** Log this event when the user has completed a tutorial in the app. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameCompletedTutorial; + +/** Log this event when the user has entered the checkout process. The valueToSum passed to logEvent should be the total price in the cart. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameInitiatedCheckout; + +/** Log this event when the user has rated an item in the app. The valueToSum passed to logEvent should be the numeric rating. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameRated; + +/** Log this event when a user has performed a search within the app. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSearched; + +/** Log this event when the user has spent app credits. The valueToSum passed to logEvent should be the number of credits spent. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSpentCredits; + +/** Log this event when the user has unlocked an achievement in the app. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameUnlockedAchievement; + +/** Log this event when a user has viewed a form of content in the app. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameViewedContent; + +/** A telephone/SMS, email, chat or other type of contact between a customer and your business. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameContact; + +/** The customization of products through a configuration tool or other application your business owns. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameCustomizeProduct; + +/** The donation of funds to your organization or cause. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameDonate; + +/** When a person finds one of your locations via web or application, with an intention to visit (example: find product at a local store). */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFindLocation; + +/** The booking of an appointment to visit one of your locations. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSchedule; + +/** The start of a free trial of a product or service you offer (example: trial subscription). */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameStartTrial; + +/** The submission of an application for a product, service or program you offer (example: credit card, educational program or job). */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSubmitApplication; + +/** The start of a paid subscription for a product or service you offer. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSubscribe; + +/** Log this event when the user views an ad. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAdImpression; + +/** Log this event when the user clicks an ad. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAdClick; + +/** + @methodgroup Predefined event name parameters for common additional information to accompany events logged through the `logEvent` family + of methods on `FBSDKAppEvents`. Common event names are provided in the `FBAppEventName*` constants. + */ + + /** + * Parameter key used to specify data for the one or more pieces of content being logged about. + * Data should be a JSON encoded string. + * Example: + * "[{\"id\": \"1234\", \"quantity\": 2, \"item_price\": 5.99}, {\"id\": \"5678\", \"quantity\": 1, \"item_price\": 9.99}]" + */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameContent; + +/** Parameter key used to specify an ID for the specific piece of content being logged about. Could be an EAN, article identifier, etc., depending on the nature of the app. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameContentID; + +/** Parameter key used to specify a generic content type/family for the logged event, e.g. "music", "photo", "video". Options to use will vary based upon what the app is all about. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameContentType; + +/** Parameter key used to specify currency used with logged event. E.g. "USD", "EUR", "GBP". See ISO-4217 for specific values. One reference for these is . */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameCurrency; + +/** Parameter key used to specify a description appropriate to the event being logged. E.g., the name of the achievement unlocked in the `FBAppEventNameAchievementUnlocked` event. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameDescription; + +/** Parameter key used to specify the level achieved in a `FBAppEventNameAchieved` event. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameLevel; + +/** Parameter key used to specify the maximum rating available for the `FBAppEventNameRate` event. E.g., "5" or "10". */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameMaxRatingValue; + +/** Parameter key used to specify how many items are being processed for an `FBAppEventNameInitiatedCheckout` or `FBAppEventNamePurchased` event. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameNumItems; + +/** Parameter key used to specify whether payment info is available for the `FBAppEventNameInitiatedCheckout` event. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNamePaymentInfoAvailable; + +/** Parameter key used to specify method user has used to register for the app, e.g., "Facebook", "email", "Twitter", etc */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameRegistrationMethod; + +/** Parameter key used to specify the string provided by the user for a search operation. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameSearchString; + +/** Parameter key used to specify whether the activity being logged about was successful or not. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameSuccess; + +/** + @methodgroup Predefined event name parameters for common additional information to accompany events logged through the `logProductItem` method on `FBSDKAppEvents`. + */ + +/** Parameter key used to specify the product item's custom label 0. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel0; + +/** Parameter key used to specify the product item's custom label 1. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel1; + +/** Parameter key used to specify the product item's custom label 2. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel2; + +/** Parameter key used to specify the product item's custom label 3. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel3; + +/** Parameter key used to specify the product item's custom label 4. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel4; + +/** Parameter key used to specify the product item's AppLink app URL for iOS. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIOSUrl; + +/** Parameter key used to specify the product item's AppLink app ID for iOS App Store. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIOSAppStoreID; + +/** Parameter key used to specify the product item's AppLink app name for iOS. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIOSAppName; + +/** Parameter key used to specify the product item's AppLink app URL for iPhone. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPhoneUrl; + +/** Parameter key used to specify the product item's AppLink app ID for iPhone App Store. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppStoreID; + +/** Parameter key used to specify the product item's AppLink app name for iPhone. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppName; + +/** Parameter key used to specify the product item's AppLink app URL for iPad. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPadUrl; + +/** Parameter key used to specify the product item's AppLink app ID for iPad App Store. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPadAppStoreID; + +/** Parameter key used to specify the product item's AppLink app name for iPad. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPadAppName; + +/** Parameter key used to specify the product item's AppLink app URL for Android. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkAndroidUrl; + +/** Parameter key used to specify the product item's AppLink fully-qualified package name for intent generation. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkAndroidPackage; + +/** Parameter key used to specify the product item's AppLink app name for Android. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkAndroidAppName; + +/** Parameter key used to specify the product item's AppLink app URL for Windows Phone. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneUrl; + +/** Parameter key used to specify the product item's AppLink app ID, as a GUID, for App Store. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppID; + +/** Parameter key used to specify the product item's AppLink app name for Windows Phone. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppName; + +/* + @methodgroup Predefined values to assign to event parameters that accompany events logged through the `logEvent` family + of methods on `FBSDKAppEvents`. Common event parameters are provided in the `FBSDKAppEventParameterName*` constants. + */ + +/** Yes-valued parameter value to be used with parameter keys that need a Yes/No value */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterValueYes; + +/** No-valued parameter value to be used with parameter keys that need a Yes/No value */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterValueNo; + +/** Parameter key used to specify the type of ad in an FBSDKAppEventNameAdImpression + * or FBSDKAppEventNameAdClick event. + * E.g. "banner", "interstitial", "rewarded_video", "native" */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameAdType; + +/** Parameter key used to specify the unique ID for all events within a subscription + * in an FBSDKAppEventNameSubscribe or FBSDKAppEventNameStartTrial event. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; + +/** + + + Client-side event logging for specialized application analytics available through Facebook App Insights + and for use with Facebook Ads conversion tracking and optimization. + + + + The `FBSDKAppEvents` static class has a few related roles: + + + Logging predefined and application-defined events to Facebook App Insights with a + numeric value to sum across a large number of events, and an optional set of key/value + parameters that define "segments" for this event (e.g., 'purchaserStatus' : 'frequent', or + 'gamerLevel' : 'intermediate') + + + Logging events to later be used for ads optimization around lifetime value. + + + Methods that control the way in which events are flushed out to the Facebook servers. + + Here are some important characteristics of the logging mechanism provided by `FBSDKAppEvents`: + + + Events are not sent immediately when logged. They're cached and flushed out to the Facebook servers + in a number of situations: + - when an event count threshold is passed (currently 100 logged events). + - when a time threshold is passed (currently 15 seconds). + - when an app has gone to background and is then brought back to the foreground. + + + Events will be accumulated when the app is in a disconnected state, and sent when the connection is + restored and one of the above 'flush' conditions are met. + + + The `FBSDKAppEvents` class is thread-safe in that events may be logged from any of the app's threads. + + + The developer can set the `flushBehavior` on `FBSDKAppEvents` to force the flushing of events to only + occur on an explicit call to the `flush` method. + + + The developer can turn on console debug output for event logging and flushing to the server by using + the `FBSDKLoggingBehaviorAppEvents` value in `[FBSettings setLoggingBehavior:]`. + + Some things to note when logging events: + + + There is a limit on the number of unique event names an app can use, on the order of 1000. + + There is a limit to the number of unique parameter names in the provided parameters that can + be used per event, on the order of 25. This is not just for an individual call, but for all + invocations for that eventName. + + Event names and parameter names (the keys in the NSDictionary) must be between 2 and 40 characters, and + must consist of alphanumeric characters, _, -, or spaces. + + The length of each parameter value can be no more than on the order of 100 characters. + + */ +@interface FBSDKAppEvents : NSObject + +/* + * Basic event logging + */ + +/** + + Log an event with just an eventName. + + @param eventName The name of the event to record. Limitations on number of events and name length + are given in the `FBSDKAppEvents` documentation. + + */ ++ (void)logEvent:(NSString *)eventName; + +/** + + Log an event with an eventName and a numeric value to be aggregated with other events of this name. + + @param eventName The name of the event to record. Limitations on number of events and name length + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report + the cumulative and average value of this amount. + */ ++ (void)logEvent:(NSString *)eventName + valueToSum:(double)valueToSum; + + +/** + + Log an event with an eventName and a set of key/value pairs in the parameters dictionary. + Parameter limitations are described above. + + @param eventName The name of the event to record. Limitations on number of events and name construction + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + */ ++ (void)logEvent:(NSString *)eventName + parameters:(NSDictionary *)parameters; + +/** + + Log an event with an eventName, a numeric value to be aggregated with other events of this name, + and a set of key/value pairs in the parameters dictionary. + + @param eventName The name of the event to record. Limitations on number of events and name construction + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report + the cumulative and average value of this amount. + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + */ ++ (void)logEvent:(NSString *)eventName + valueToSum:(double)valueToSum + parameters:(NSDictionary *)parameters; + + +/** + + Log an event with an eventName, a numeric value to be aggregated with other events of this name, + and a set of key/value pairs in the parameters dictionary. Providing session lets the developer + target a particular . If nil is provided, then `[FBSession activeSession]` will be used. + + @param eventName The name of the event to record. Limitations on number of events and name construction + are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. + + @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report + the cumulative and average value of this amount. Note that this is an NSNumber, and a value of `nil` denotes + that this event doesn't have a value associated with it for summation. + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + @param accessToken The optional access token to log the event as. + */ ++ (void)logEvent:(NSString *)eventName + valueToSum:(NSNumber *)valueToSum + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken; + +/* + * Purchase logging + */ + +/** + + Log a purchase of the specified amount, in the specified currency. + + @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency. This value + will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). + + @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for + specific values. One reference for these is . + + + This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set + to `FBSDKAppEventsFlushBehaviorExplicitOnly`. + + */ ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency; + +/** + + Log a purchase of the specified amount, in the specified currency, also providing a set of + additional characteristics describing the purchase. + + @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value + will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). + + @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for + specific values. One reference for these is . + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + + This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set + to `FBSDKAppEventsFlushBehaviorExplicitOnly`. + + */ ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency + parameters:(NSDictionary *)parameters; + +/** + + Log a purchase of the specified amount, in the specified currency, also providing a set of + additional characteristics describing the purchase, as well as an to log to. + + @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value + will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). + + @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for + specific values. One reference for these is . + + @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must + be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of + parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names + are provided in `FBSDKAppEventParameterName*` constants. + + @param accessToken The optional access token to log the event as. + + + This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set + to `FBSDKAppEventsFlushBehaviorExplicitOnly`. + + */ ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken; + + +/* + * Push Notifications Logging + */ + +/** + Log an app event that tracks that the application was open via Push Notification. + + @param payload Notification payload received via `UIApplicationDelegate`. + */ ++ (void)logPushNotificationOpen:(NSDictionary *)payload; + +/** + Log an app event that tracks that a custom action was taken from a push notification. + + @param payload Notification payload received via `UIApplicationDelegate`. + @param action Name of the action that was taken. + */ ++ (void)logPushNotificationOpen:(NSDictionary *)payload action:(NSString *)action; + +/** + Uploads product catalog product item as an app event + @param itemID Unique ID for the item. Can be a variant for a product. + Max size is 100. + @param availability If item is in stock. Accepted values are: + in stock - Item ships immediately + out of stock - No plan to restock + preorder - Available in future + available for order - Ships in 1-2 weeks + discontinued - Discontinued + @param condition Product condition: new, refurbished or used. + @param description Short text describing product. Max size is 5000. + @param imageLink Link to item image used in ad. + @param link Link to merchant's site where someone can buy the item. + @param title Title of item. + @param priceAmount Amount of purchase, in the currency specified by the 'currency' + parameter. This value will be rounded to the thousandths place + (e.g., 12.34567 becomes 12.346). + @param currency Currency used to specify the amount. + E.g. "USD", "EUR", "GBP". See ISO-4217 for specific values. One reference for these is + @param gtin Global Trade Item Number including UPC, EAN, JAN and ISBN + @param mpn Unique manufacture ID for product + @param brand Name of the brand + Note: Either gtin, mpn or brand is required. + @param parameters Optional fields for deep link specification. + */ ++ (void)logProductItem:(NSString *)itemID + availability:(FBSDKProductAvailability)availability + condition:(FBSDKProductCondition)condition + description:(NSString *)description + imageLink:(NSString *)imageLink + link:(NSString *)link + title:(NSString *)title + priceAmount:(double)priceAmount + currency:(NSString *)currency + gtin:(NSString *)gtin + mpn:(NSString *)mpn + brand:(NSString *)brand + parameters:(NSDictionary *)parameters; + +/** + + Notifies the events system that the app has launched and, when appropriate, logs an "activated app" event. + This function is called automatically from FBSDKApplicationDelegate applicationDidBecomeActive, unless + one overrides 'FacebookAutoLogAppEventsEnabled' key to false in the project info plist file. + In case 'FacebookAutoLogAppEventsEnabled' is set to false, then it should typically be placed in the + app delegates' `applicationDidBecomeActive:` method. + + This method also takes care of logging the event indicating the first time this app has been launched, which, among other things, is used to + track user acquisition and app install ads conversions. + + + + `activateApp` will not log an event on every app launch, since launches happen every time the app is backgrounded and then foregrounded. + "activated app" events will be logged when the app has not been active for more than 60 seconds. This method also causes a "deactivated app" + event to be logged when sessions are "completed", and these events are logged with the session length, with an indication of how much + time has elapsed between sessions, and with the number of background/foreground interruptions that session had. This data + is all visible in your app's App Events Insights. + */ ++ (void)activateApp; + +/* + * Push Notifications Registration and Uninstall Tracking + */ + +/** + Sets and sends device token to register the current application for push notifications. + + + + Sets and sends a device token from `NSData` representation that you get from `UIApplicationDelegate.-application:didRegisterForRemoteNotificationsWithDeviceToken:`. + + @param deviceToken Device token data. + */ ++ (void)setPushNotificationsDeviceToken:(NSData *)deviceToken; + +/** + Sets and sends device token string to register the current application for push notifications. + + + + Sets and sends a device token string + + @param deviceTokenString Device token string. + */ ++ (void)setPushNotificationsDeviceTokenString:(NSString *)deviceTokenString; + +/* + * Control over event batching/flushing + */ + +/** + + Get the current event flushing behavior specifying when events are sent back to Facebook servers. + */ ++ (FBSDKAppEventsFlushBehavior)flushBehavior; + +/** + + Set the current event flushing behavior specifying when events are sent back to Facebook servers. + + @param flushBehavior The desired `FBSDKAppEventsFlushBehavior` to be used. + */ ++ (void)setFlushBehavior:(FBSDKAppEventsFlushBehavior)flushBehavior; + +/** + Set the 'override' App ID for App Event logging. + + + + In some cases, apps want to use one Facebook App ID for login and social presence and another + for App Event logging. (An example is if multiple apps from the same company share an app ID for login, but + want distinct logging.) By default, this value is `nil`, and defers to the `FBSDKAppEventsOverrideAppIDBundleKey` + plist value. If that's not set, it defaults to `[FBSDKSettings appID]`. + + This should be set before any other calls are made to `FBSDKAppEvents`. Thus, you should set it in your application + delegate's `application:didFinishLaunchingWithOptions:` delegate. + + @param appID The Facebook App ID to be used for App Event logging. + */ ++ (void)setLoggingOverrideAppID:(NSString *)appID; + +/** + Get the 'override' App ID for App Event logging. + + +@see setLoggingOverrideAppID: + + */ ++ (NSString *)loggingOverrideAppID; + + +/** + Explicitly kick off flushing of events to Facebook. This is an asynchronous method, but it does initiate an immediate + kick off. Server failures will be reported through the NotificationCenter with notification ID `FBSDKAppEventsLoggingResultNotification`. + */ ++ (void)flush; + +/** + Creates a request representing the Graph API call to retrieve a Custom Audience "third party ID" for the app's Facebook user. + Callers will send this ID back to their own servers, collect up a set to create a Facebook Custom Audience with, + and then use the resultant Custom Audience to target ads. + + @param accessToken The access token to use to establish the user's identity for users logged into Facebook through this app. + If `nil`, then the `[FBSDKAccessToken currentAccessToken]` is used. + + + + The JSON in the request's response will include an "custom_audience_third_party_id" key/value pair, with the value being the ID retrieved. + This ID is an encrypted encoding of the Facebook user's ID and the invoking Facebook app ID. + Multiple calls with the same user will return different IDs, thus these IDs cannot be used to correlate behavior + across devices or applications, and are only meaningful when sent back to Facebook for creating Custom Audiences. + + The ID retrieved represents the Facebook user identified in the following way: if the specified access token is valid, + the ID will represent the user associated with that token; otherwise the ID will represent the user logged into the + native Facebook app on the device. If there is no native Facebook app, no one is logged into it, or the user has opted out + at the iOS level from ad tracking, then a `nil` ID will be returned. + + This method returns `nil` if either the user has opted-out (via iOS) from Ad Tracking, the app itself has limited event usage + via the `[FBSDKSettings limitEventAndDataUsage]` flag, or a specific Facebook user cannot be identified. + */ ++ (FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(FBSDKAccessToken *)accessToken; + +/* + Sets a custom user ID to associate with all app events. + + The userID is persisted until it is cleared by passing nil. + */ ++ (void)setUserID:(NSString *)userID; + +/* + Clears the custom user ID to associate with all app events. + */ ++ (void)clearUserID; + +/* + Returns the set custom user ID. + */ ++ (NSString *)userID; + +/* + Sets custom user data to associate with all app events. All user data are hashed + and used to match Facebook user from this instance of an application. + + The user data will be persisted between application instances. + + @param userData user data to identify the user. User data should be formated as + a NSDictionary of data type name and value. + Supported data types and names are: + Email: em + First Name: fn + Last Name: ln + Phone: ph + Date of Birth: db + Gender: ge + City: ct + State: st + Zip: zp + Country: country + */ ++ (void)setUserData:(NSDictionary *)userData + DEPRECATED_MSG_ATTRIBUTE("Renamed `setUserEmail:firstName: ...`"); + +/* + Sets custom user data to associate with all app events. All user data are hashed + and used to match Facebook user from this instance of an application. + + The user data will be persisted between application instances. + + @param email user's email + @param firstName user's first name + @param lastName user's last name + @param phone user's phone + @param dateOfBirth user's date of birth + @param gender user's gender + @param city user's city + @param state user's state + @param zip user's zip + @param country user's country + */ ++ (void)setUserEmail:(NSString *)email + firstName:(NSString *)firstName + lastName:(NSString *)lastName + phone:(NSString *)phone + dateOfBirth:(NSString *)dateOfBirth + gender:(NSString *)gender + city:(NSString *)city + state:(NSString *)state + zip:(NSString *)zip + country:(NSString *)country; +/* + Returns the set user data else nil +*/ ++ (NSString *)getUserData; + +/* + Clears the current user data +*/ ++ (void)clearUserData; + +/* + Sends a request to update the properties for the current user, set by `setUserID:` + + You must call `FBSDKAppEvents setUserID:` before making this call. + @param properties the custom user properties + @param handler the optional completion handler + */ ++ (void)updateUserProperties:(NSDictionary *)properties handler:(FBSDKGraphRequestHandler)handler; + +#if !TARGET_OS_TV +/* + Intended to be used as part of a hybrid webapp. + If you call this method, the FB SDK will inject a new JavaScript object into your webview. + If the FB Pixel is used within the webview, and references the app ID of this app, + then it will detect the presence of this injected JavaScript object + and pass Pixel events back to the FB SDK for logging using the AppEvents framework. + + @param webView The webview to augment with the additional JavaScript behaviour + */ ++ (void)augmentHybridWKWebView:(WKWebView *)webView; +#endif + +/* + * Unity helper functions + */ + +/** + + Set if the Unity is already initialized + + @param isUnityInit whether Unity is initialized. + + */ ++ (void)setIsUnityInit:(BOOL)isUnityInit; + +/* + Send event binding to Unity + */ ++ (void)sendEventBindingsToUnity; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m new file mode 100644 index 0000000000..416cd82bc9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m @@ -0,0 +1,1336 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppEvents.h" +#import "FBSDKAppEvents+Internal.h" + +#import + +#import + +#import "FBSDKAccessToken.h" +#import "FBSDKAppEventsState.h" +#import "FBSDKAppEventsStateManager.h" +#import "FBSDKAppEventsUtility.h" +#import "FBSDKConstants.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKError.h" +#import "FBSDKGraphRequest+Internal.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKPaymentObserver.h" +#import "FBSDKServerConfiguration.h" +#import "FBSDKServerConfigurationManager.h" +#import "FBSDKSettings.h" +#import "FBSDKTimeSpentData.h" +#import "FBSDKUtility.h" +#import "FBSDKUserDataStore.h" + +#if !TARGET_OS_TV +#import "FBSDKEventBindingManager.h" +#import "FBSDKHybridAppEventsScriptMessageHandler.h" +#endif + +// +// Public event names +// + +// General purpose +NSString *const FBSDKAppEventNameCompletedRegistration = @"fb_mobile_complete_registration"; +NSString *const FBSDKAppEventNameViewedContent = @"fb_mobile_content_view"; +NSString *const FBSDKAppEventNameSearched = @"fb_mobile_search"; +NSString *const FBSDKAppEventNameRated = @"fb_mobile_rate"; +NSString *const FBSDKAppEventNameCompletedTutorial = @"fb_mobile_tutorial_completion"; +NSString *const FBSDKAppEventNameContact = @"Contact"; +NSString *const FBSDKAppEventNameCustomizeProduct = @"CustomizeProduct"; +NSString *const FBSDKAppEventNameDonate = @"Donate"; +NSString *const FBSDKAppEventNameFindLocation = @"FindLocation"; +NSString *const FBSDKAppEventNameSchedule = @"Schedule"; +NSString *const FBSDKAppEventNameStartTrial = @"StartTrial"; +NSString *const FBSDKAppEventNameSubmitApplication = @"SubmitApplication"; +NSString *const FBSDKAppEventNameSubscribe = @"Subscribe"; +NSString *const FBSDKAppEventNameAdImpression = @"AdImpression"; +NSString *const FBSDKAppEventNameAdClick = @"AdClick"; + +// Ecommerce related +NSString *const FBSDKAppEventNameAddedToCart = @"fb_mobile_add_to_cart"; +NSString *const FBSDKAppEventNameAddedToWishlist = @"fb_mobile_add_to_wishlist"; +NSString *const FBSDKAppEventNameInitiatedCheckout = @"fb_mobile_initiated_checkout"; +NSString *const FBSDKAppEventNameAddedPaymentInfo = @"fb_mobile_add_payment_info"; +NSString *const FBSDKAppEventNameProductCatalogUpdate = @"fb_mobile_catalog_update"; + +// Gaming related +NSString *const FBSDKAppEventNameAchievedLevel = @"fb_mobile_level_achieved"; +NSString *const FBSDKAppEventNameUnlockedAchievement = @"fb_mobile_achievement_unlocked"; +NSString *const FBSDKAppEventNameSpentCredits = @"fb_mobile_spent_credits"; + +// +// Public event parameter names +// + +NSString *const FBSDKAppEventParameterNameCurrency = @"fb_currency"; +NSString *const FBSDKAppEventParameterNameRegistrationMethod = @"fb_registration_method"; +NSString *const FBSDKAppEventParameterNameContentType = @"fb_content_type"; +NSString *const FBSDKAppEventParameterNameContent = @"fb_content"; +NSString *const FBSDKAppEventParameterNameContentID = @"fb_content_id"; +NSString *const FBSDKAppEventParameterNameSearchString = @"fb_search_string"; +NSString *const FBSDKAppEventParameterNameSuccess = @"fb_success"; +NSString *const FBSDKAppEventParameterNameMaxRatingValue = @"fb_max_rating_value"; +NSString *const FBSDKAppEventParameterNamePaymentInfoAvailable = @"fb_payment_info_available"; +NSString *const FBSDKAppEventParameterNameNumItems = @"fb_num_items"; +NSString *const FBSDKAppEventParameterNameLevel = @"fb_level"; +NSString *const FBSDKAppEventParameterNameDescription = @"fb_description"; +NSString *const FBSDKAppEventParameterLaunchSource = @"fb_mobile_launch_source"; +NSString *const FBSDKAppEventParameterNameAdType = @"ad_type"; +NSString *const FBSDKAppEventParameterNameOrderID = @"fb_order_id"; + +// +// Public event parameter names for DPA Catalog +// + +NSString *const FBSDKAppEventParameterProductCustomLabel0 = @"fb_product_custom_label_0"; +NSString *const FBSDKAppEventParameterProductCustomLabel1 = @"fb_product_custom_label_1"; +NSString *const FBSDKAppEventParameterProductCustomLabel2 = @"fb_product_custom_label_2"; +NSString *const FBSDKAppEventParameterProductCustomLabel3 = @"fb_product_custom_label_3"; +NSString *const FBSDKAppEventParameterProductCustomLabel4 = @"fb_product_custom_label_4"; +NSString *const FBSDKAppEventParameterProductAppLinkIOSUrl = @"fb_product_applink_ios_url"; +NSString *const FBSDKAppEventParameterProductAppLinkIOSAppStoreID = @"fb_product_applink_ios_app_store_id"; +NSString *const FBSDKAppEventParameterProductAppLinkIOSAppName = @"fb_product_applink_ios_app_name"; +NSString *const FBSDKAppEventParameterProductAppLinkIPhoneUrl = @"fb_product_applink_iphone_url"; +NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppStoreID = @"fb_product_applink_iphone_app_store_id"; +NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppName = @"fb_product_applink_iphone_app_name"; +NSString *const FBSDKAppEventParameterProductAppLinkIPadUrl = @"fb_product_applink_ipad_url"; +NSString *const FBSDKAppEventParameterProductAppLinkIPadAppStoreID = @"fb_product_applink_ipad_app_store_id"; +NSString *const FBSDKAppEventParameterProductAppLinkIPadAppName = @"fb_product_applink_ipad_app_name"; +NSString *const FBSDKAppEventParameterProductAppLinkAndroidUrl = @"fb_product_applink_android_url"; +NSString *const FBSDKAppEventParameterProductAppLinkAndroidPackage = @"fb_product_applink_android_package"; +NSString *const FBSDKAppEventParameterProductAppLinkAndroidAppName = @"fb_product_applink_android_app_name"; +NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneUrl = @"fb_product_applink_windows_phone_url"; +NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppID = @"fb_product_applink_windows_phone_app_id"; +NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppName = @"fb_product_applink_windows_phone_app_name"; + +// +// Public event parameter values +// + +NSString *const FBSDKAppEventParameterValueNo = @"0"; +NSString *const FBSDKAppEventParameterValueYes = @"1"; + +// +// Event names internal to this file +// +NSString *const FBSDKAppEventNamePurchased = @"fb_mobile_purchase"; + +NSString *const FBSDKAppEventNameLoginViewUsage = @"fb_login_view_usage"; +NSString *const FBSDKAppEventNameShareSheetLaunch = @"fb_share_sheet_launch"; +NSString *const FBSDKAppEventNameShareSheetDismiss = @"fb_share_sheet_dismiss"; +NSString *const FBSDKAppEventNameShareTrayDidLaunch = @"fb_share_tray_did_launch"; +NSString *const FBSDKAppEventNameShareTrayDidSelectActivity = @"fb_share_tray_did_select_activity"; +NSString *const FBSDKAppEventNamePermissionsUILaunch = @"fb_permissions_ui_launch"; +NSString *const FBSDKAppEventNamePermissionsUIDismiss = @"fb_permissions_ui_dismiss"; +NSString *const FBSDKAppEventNameFBDialogsPresentShareDialog = @"fb_dialogs_present_share"; +NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogPhoto = @"fb_dialogs_present_share_photo"; +NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogOG = @"fb_dialogs_present_share_og"; +NSString *const FBSDKAppEventNameFBDialogsPresentLikeDialogOG = @"fb_dialogs_present_like_og"; +NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialog = @"fb_dialogs_present_message"; +NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogPhoto = @"fb_dialogs_present_message_photo"; +NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogOG = @"fb_dialogs_present_message_og"; + +NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogStart = @"fb_dialogs_native_login_dialog_start"; +NSString *const FBSDKAppEventsNativeLoginDialogStartTime = @"fb_native_login_dialog_start_time"; + +NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogEnd = @"fb_dialogs_native_login_dialog_end"; +NSString *const FBSDKAppEventsNativeLoginDialogEndTime = @"fb_native_login_dialog_end_time"; + +NSString *const FBSDKAppEventNameFBDialogsWebLoginCompleted = @"fb_dialogs_web_login_dialog_complete"; +NSString *const FBSDKAppEventsWebLoginE2E = @"fb_web_login_e2e"; + +NSString *const FBSDKAppEventNameFBSessionAuthStart = @"fb_mobile_login_start"; +NSString *const FBSDKAppEventNameFBSessionAuthEnd = @"fb_mobile_login_complete"; +NSString *const FBSDKAppEventNameFBSessionAuthMethodStart = @"fb_mobile_login_method_start"; +NSString *const FBSDKAppEventNameFBSessionAuthMethodEnd = @"fb_mobile_login_method_complete"; + +NSString *const FBSDKAppEventNameFBSDKLikeButtonImpression = @"fb_like_button_impression"; +NSString *const FBSDKAppEventNameFBSDKLoginButtonImpression = @"fb_login_button_impression"; +NSString *const FBSDKAppEventNameFBSDKSendButtonImpression = @"fb_send_button_impression"; +NSString *const FBSDKAppEventNameFBSDKShareButtonImpression = @"fb_share_button_impression"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonImpression = @"fb_live_streaming_button_impression"; + +NSString *const FBSDKAppEventNameFBSDKSmartLoginService = @"fb_smart_login_service"; + +NSString *const FBSDKAppEventNameFBSDKLikeButtonDidTap = @"fb_like_button_did_tap"; +NSString *const FBSDKAppEventNameFBSDKLoginButtonDidTap = @"fb_login_button_did_tap"; +NSString *const FBSDKAppEventNameFBSDKSendButtonDidTap = @"fb_send_button_did_tap"; +NSString *const FBSDKAppEventNameFBSDKShareButtonDidTap = @"fb_share_button_did_tap"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonDidTap = @"fb_live_streaming_button_did_tap"; + +NSString *const FBSDKAppEventNameFBSDKLikeControlDidDisable = @"fb_like_control_did_disable"; +NSString *const FBSDKAppEventNameFBSDKLikeControlDidLike = @"fb_like_control_did_like"; +NSString *const FBSDKAppEventNameFBSDKLikeControlDidPresentDialog = @"fb_like_control_did_present_dialog"; +NSString *const FBSDKAppEventNameFBSDKLikeControlDidTap = @"fb_like_control_did_tap"; +NSString *const FBSDKAppEventNameFBSDKLikeControlDidUnlike = @"fb_like_control_did_unlike"; +NSString *const FBSDKAppEventNameFBSDKLikeControlError = @"fb_like_control_error"; +NSString *const FBSDKAppEventNameFBSDKLikeControlImpression = @"fb_like_control_impression"; +NSString *const FBSDKAppEventNameFBSDKLikeControlNetworkUnavailable = @"fb_like_control_network_unavailable"; + +NSString *const FBSDLAppEventNameFBSDKEventShareDialogResult = @"fb_dialog_share_result"; +NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogResult = @"fb_messenger_dialog_share_result"; +NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogResult = @"fb_app_invite_dialog_share_result"; + +NSString *const FBSDKAppEventNameFBSDKEventShareDialogShow = @"fb_dialog_share_show"; +NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogShow = @"fb_messenger_dialog_share_show"; +NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogShow = @"fb_app_invite_share_show"; + +NSString *const FBSDKAppEventNameFBSessionFASLoginDialogResult = @"fb_mobile_login_fas_dialog_result"; + +NSString *const FBSDKAppEventNameFBSDKLiveStreamingStart = @"fb_sdk_live_streaming_start"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingStop = @"fb_sdk_live_streaming_stop"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingPause = @"fb_sdk_live_streaming_pause"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingResume = @"fb_sdk_live_streaming_resume"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingError = @"fb_sdk_live_streaming_error"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingUpdateStatus = @"fb_sdk_live_streaming_update_status"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingVideoID = @"fb_sdk_live_streaming_video_id"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingMic = @"fb_sdk_live_streaming_mic"; +NSString *const FBSDKAppEventNameFBSDKLiveStreamingCamera = @"fb_sdk_live_streaming_camera"; + +// Event Parameters internal to this file +NSString *const FBSDKAppEventParameterDialogOutcome = @"fb_dialog_outcome"; +NSString *const FBSDKAppEventParameterDialogErrorMessage = @"fb_dialog_outcome_error_message"; +NSString *const FBSDKAppEventParameterDialogMode = @"fb_dialog_mode"; +NSString *const FBSDKAppEventParameterDialogShareContentType = @"fb_dialog_share_content_type"; +NSString *const FBSDKAppEventParameterDialogShareContentUUID = @"fb_dialog_share_content_uuid"; +NSString *const FBSDKAppEventParameterDialogShareContentPageID = @"fb_dialog_share_content_page_id"; +NSString *const FBSDKAppEventParameterShareTrayActivityName = @"fb_share_tray_activity"; +NSString *const FBSDKAppEventParameterShareTrayResult = @"fb_share_tray_result"; +NSString *const FBSDKAppEventParameterLogTime = @"_logTime"; +NSString *const FBSDKAppEventParameterEventName = @"_eventName"; +NSString *const FBSDKAppEventParameterImplicitlyLogged = @"_implicitlyLogged"; + +NSString *const FBSDKAppEventParameterLiveStreamingPrevStatus = @"live_streaming_prev_status"; +NSString *const FBSDKAppEventParameterLiveStreamingStatus = @"live_streaming_status"; +NSString *const FBSDKAppEventParameterLiveStreamingError = @"live_streaming_error"; +NSString *const FBSDKAppEventParameterLiveStreamingVideoID = @"live_streaming_video_id"; +NSString *const FBSDKAppEventParameterLiveStreamingMicEnabled = @"live_streaming_mic_enabled"; +NSString *const FBSDKAppEventParameterLiveStreamingCameraEnabled = @"live_streaming_camera_enabled"; + +NSString *const FBSDKAppEventParameterProductItemID = @"fb_product_item_id"; +NSString *const FBSDKAppEventParameterProductAvailability = @"fb_product_availability"; +NSString *const FBSDKAppEventParameterProductCondition = @"fb_product_condition"; +NSString *const FBSDKAppEventParameterProductDescription = @"fb_product_description"; +NSString *const FBSDKAppEventParameterProductImageLink = @"fb_product_image_link"; +NSString *const FBSDKAppEventParameterProductLink = @"fb_product_link"; +NSString *const FBSDKAppEventParameterProductTitle = @"fb_product_title"; +NSString *const FBSDKAppEventParameterProductGTIN = @"fb_product_gtin"; +NSString *const FBSDKAppEventParameterProductMPN = @"fb_product_mpn"; +NSString *const FBSDKAppEventParameterProductBrand = @"fb_product_brand"; +NSString *const FBSDKAppEventParameterProductPriceAmount = @"fb_product_price_amount"; +NSString *const FBSDKAppEventParameterProductPriceCurrency = @"fb_product_price_currency"; + +// Event parameter values internal to this file +NSString *const FBSDKAppEventsDialogOutcomeValue_Completed = @"Completed"; +NSString *const FBSDKAppEventsDialogOutcomeValue_Cancelled = @"Cancelled"; +NSString *const FBSDKAppEventsDialogOutcomeValue_Failed = @"Failed"; + +NSString *const FBSDKAppEventsDialogShareModeAutomatic = @"Automatic"; +NSString *const FBSDKAppEventsDialogShareModeBrowser = @"Browser"; +NSString *const FBSDKAppEventsDialogShareModeNative = @"Native"; +NSString *const FBSDKAppEventsDialogShareModeShareSheet = @"ShareSheet"; +NSString *const FBSDKAppEventsDialogShareModeWeb = @"Web"; +NSString *const FBSDKAppEventsDialogShareModeFeedBrowser = @"FeedBrowser"; +NSString *const FBSDKAppEventsDialogShareModeFeedWeb = @"FeedWeb"; +NSString *const FBSDKAppEventsDialogShareModeUnknown = @"Unknown"; + +NSString *const FBSDKAppEventsDialogShareContentTypeOpenGraph = @"OpenGraph"; +NSString *const FBSDKAppEventsDialogShareContentTypeStatus = @"Status"; +NSString *const FBSDKAppEventsDialogShareContentTypePhoto = @"Photo"; +NSString *const FBSDKAppEventsDialogShareContentTypeVideo = @"Video"; +NSString *const FBSDKAppEventsDialogShareContentTypeCamera = @"Camera"; +NSString *const FBSDKAppEventsDialogShareContentTypeMessengerGenericTemplate = @"GenericTemplate"; +NSString *const FBSDKAppEventsDialogShareContentTypeMessengerMediaTemplate = @"MediaTemplate"; +NSString *const FBSDKAppEventsDialogShareContentTypeMessengerOpenGraphMusicTemplate = @"OpenGraphMusicTemplate"; +NSString *const FBSDKAppEventsDialogShareContentTypeUnknown = @"Unknown"; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSNotificationName const FBSDKAppEventsLoggingResultNotification = @"com.facebook.sdk:FBSDKAppEventsLoggingResultNotification"; + +#else + +NSString *const FBSDKAppEventsLoggingResultNotification = @"com.facebook.sdk:FBSDKAppEventsLoggingResultNotification"; + +#endif + +NSString *const FBSDKAppEventsOverrideAppIDBundleKey = @"FacebookLoggingOverrideAppID"; + +// +// Push Notifications +// +// Activities Endpoint Parameter +static NSString *const FBSDKActivitesParameterPushDeviceToken = @"device_token"; +// Event Names +static NSString *const FBSDKAppEventNamePushTokenObtained = @"fb_mobile_obtain_push_token"; +static NSString *const FBSDKAppEventNamePushOpened = @"fb_mobile_push_opened"; +// Event Parameter +static NSString *const FBSDKAppEventParameterPushCampaign = @"fb_push_campaign"; +static NSString *const FBSDKAppEventParameterPushAction = @"fb_push_action"; +// Payload Keys +static NSString *const FBSDKAppEventsPushPayloadKey = @"fb_push_payload"; +static NSString *const FBSDKAppEventsPushPayloadCampaignKey = @"campaign"; + +// +// Augmentation of web browser constants +// +NSString *const FBSDKAppEventsWKWebViewMessagesPixelIDKey = @"pixelID"; +NSString *const FBSDKAppEventsWKWebViewMessagesHandlerKey = @"fbmqHandler"; +NSString *const FBSDKAppEventsWKWebViewMessagesEventKey = @"event"; +NSString *const FBSDKAppEventsWKWebViewMessagesParamsKey = @"params"; +NSString *const FBSDKAPPEventsWKWebViewMessagesProtocolKey = @"fbmq-0.1"; + + +#define NUM_LOG_EVENTS_TO_TRY_TO_FLUSH_AFTER 100 +#define FLUSH_PERIOD_IN_SECONDS 15 +#define USER_ID_USER_DEFAULTS_KEY @"com.facebook.sdk.appevents.userid" + +#define FBUnityUtilityClassName "FBUnityUtility" +#define FBUnityUtilityUpdateBindingsSelector @"triggerUpdateBindings:" + +#define UNINSTALL_TRACKING_DEVICE_ID_KEY @"device_id" +#define UNINSTALL_TRACKING_PLATFORM_KEY @"platform" +#define UNINSTALL_TRACKING_DEVICE_TOKEN_KEY @"device_token" +#define UNINSTALL_TRACKING_TOKEN_ENDPOINT @"app_push_device_token" + +static NSString *g_overrideAppID = nil; + +@interface FBSDKAppEvents () + +@property (nonatomic, assign) FBSDKAppEventsFlushBehavior flushBehavior; +//for testing only. +@property (nonatomic, assign) BOOL disableTimer; + +@property (nonatomic, copy) NSString *pushNotificationsDeviceTokenString; + +@property (nonatomic, strong) dispatch_source_t flushTimer; + +@end + +@implementation FBSDKAppEvents +{ + BOOL _explicitEventsLoggedYet; + FBSDKServerConfiguration *_serverConfiguration; + FBSDKAppEventsState *_appEventsState; +#if !TARGET_OS_TV + FBSDKEventBindingManager *_eventBindingManager; +#endif + NSString *_userID; + BOOL _isUnityInit; +} + +#pragma mark - Object Lifecycle + ++ (void)initialize +{ + if (self == [FBSDKAppEvents class]) { + g_overrideAppID = [[[NSBundle mainBundle] objectForInfoDictionaryKey:FBSDKAppEventsOverrideAppIDBundleKey] copy]; + } +} + +- (FBSDKAppEvents *)init +{ + self = [super init]; + if (self) { + _flushBehavior = FBSDKAppEventsFlushBehaviorAuto; + + typeof(self) __weak weakSelf = self; + self.flushTimer = [FBSDKUtility startGCDTimerWithInterval:FLUSH_PERIOD_IN_SECONDS + block:^{ + [weakSelf flushTimerFired:nil]; + }]; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + _userID = [defaults stringForKey:USER_ID_USER_DEFAULTS_KEY]; + [self fetchServerConfiguration:nil]; + } + + return self; +} + +- (void)registerNotifications { + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(applicationMovingFromActiveStateOrTerminating) + name:UIApplicationWillResignActiveNotification + object:NULL]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(applicationMovingFromActiveStateOrTerminating) + name:UIApplicationWillTerminateNotification + object:NULL]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(applicationDidBecomeActive) + name:UIApplicationDidBecomeActiveNotification + object:NULL]; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [FBSDKUtility stopGCDTimer:self.flushTimer]; +} + +#pragma mark - Public Methods + ++ (void)logEvent:(NSString *)eventName +{ + [FBSDKAppEvents logEvent:eventName + parameters:nil]; +} + ++ (void)logEvent:(NSString *)eventName + valueToSum:(double)valueToSum +{ + [FBSDKAppEvents logEvent:eventName + valueToSum:valueToSum + parameters:nil]; +} + ++ (void)logEvent:(NSString *)eventName + parameters:(NSDictionary *)parameters +{ + [FBSDKAppEvents logEvent:eventName + valueToSum:nil + parameters:parameters + accessToken:nil]; +} + ++ (void)logEvent:(NSString *)eventName + valueToSum:(double)valueToSum + parameters:(NSDictionary *)parameters +{ + [FBSDKAppEvents logEvent:eventName + valueToSum:@(valueToSum) + parameters:parameters + accessToken:nil]; +} + ++ (void)logEvent:(NSString *)eventName + valueToSum:(NSNumber *)valueToSum + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken +{ + [[FBSDKAppEvents singleton] instanceLogEvent:eventName + valueToSum:valueToSum + parameters:parameters + isImplicitlyLogged:(BOOL)parameters[FBSDKAppEventParameterImplicitlyLogged] + accessToken:accessToken]; +} + ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency +{ + [FBSDKAppEvents logPurchase:purchaseAmount + currency:currency + parameters:nil]; +} + ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency + parameters:(NSDictionary *)parameters +{ + [FBSDKAppEvents logPurchase:purchaseAmount + currency:currency + parameters:parameters + accessToken:nil]; +} + ++ (void)logPurchase:(double)purchaseAmount + currency:(NSString *)currency + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken +{ + + // A purchase event is just a regular logged event with a given event name + // and treating the currency value as going into the parameters dictionary. + NSDictionary *newParameters; + if (!parameters) { + newParameters = @{ FBSDKAppEventParameterNameCurrency : currency }; + } else { + newParameters = [NSMutableDictionary dictionaryWithDictionary:parameters]; + [newParameters setValue:currency forKey:FBSDKAppEventParameterNameCurrency]; + } + + [FBSDKAppEvents logEvent:FBSDKAppEventNamePurchased + valueToSum:@(purchaseAmount) + parameters:newParameters + accessToken:accessToken]; + + // Unless the behavior is set to only allow explicit flushing, we go ahead and flush, since purchase events + // are relatively rare and relatively high value and worth getting across on wire right away. + if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { + [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; + } +} + +/* + * Push Notifications Logging + */ + ++ (void)logPushNotificationOpen:(NSDictionary *)payload +{ + [self logPushNotificationOpen:payload action:nil]; +} + ++ (void)logPushNotificationOpen:(NSDictionary *)payload action:(NSString *)action +{ + NSDictionary *facebookPayload = payload[FBSDKAppEventsPushPayloadKey]; + if (!facebookPayload) { + return; + } + NSString *campaign = facebookPayload[FBSDKAppEventsPushPayloadCampaignKey]; + if (campaign.length == 0) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"Malformed payload specified for logging a push notification open."]; + return; + } + + NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObject:campaign forKey:FBSDKAppEventParameterPushCampaign]; + if (action) { + parameters[FBSDKAppEventParameterPushAction] = action; + } + [self logEvent:FBSDKAppEventNamePushOpened parameters:parameters]; +} + +/* + * Uploads product catalog product item as an app event + */ ++ (void)logProductItem:(NSString *)itemID + availability:(FBSDKProductAvailability)availability + condition:(FBSDKProductCondition)condition + description:(NSString *)description + imageLink:(NSString *)imageLink + link:(NSString *)link + title:(NSString *)title + priceAmount:(double)priceAmount + currency:(NSString *)currency + gtin:(NSString *)gtin + mpn:(NSString *)mpn + brand:(NSString *)brand + parameters:(NSDictionary *)parameters { + if (itemID == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"itemID cannot be null"]; + return; + } else if (description == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"description cannot be null"]; + return; + } else if (imageLink == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"imageLink cannot be null"]; + return; + } else if (link == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"link cannot be null"]; + return; + } else if (title == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"title cannot be null"]; + return; + } else if (currency == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"currency cannot be null"]; + return; + } else if (gtin == nil && mpn == nil && brand == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"Either gtin, mpn or brand is required"]; + return; + } + + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + if (nil != parameters) { + [dict setValuesForKeysWithDictionary:parameters]; + } + + dict[FBSDKAppEventParameterProductItemID] = itemID; + + NSString *avail = nil; + switch (availability) { + case FBSDKProductAvailabilityInStock: + avail = @"IN_STOCK"; break; + case FBSDKProductAvailabilityOutOfStock: + avail = @"OUT_OF_STOCK"; break; + case FBSDKProductAvailabilityPreOrder: + avail = @"PREORDER"; break; + case FBSDKProductAvailabilityAvailableForOrder: + avail = @"AVALIABLE_FOR_ORDER"; break; + case FBSDKProductAvailabilityDiscontinued: + avail = @"DISCONTINUED"; break; + } + if (avail) { + dict[FBSDKAppEventParameterProductAvailability] = avail; + } + + NSString *cond = nil; + switch (condition) { + case FBSDKProductConditionNew: + cond = @"NEW"; break; + case FBSDKProductConditionRefurbished: + cond = @"REFURBISHED"; break; + case FBSDKProductConditionUsed: + cond = @"USED"; break; + } + if (cond) { + dict[FBSDKAppEventParameterProductCondition] = cond; + } + + dict[FBSDKAppEventParameterProductDescription] = description; + dict[FBSDKAppEventParameterProductImageLink] = imageLink; + dict[FBSDKAppEventParameterProductLink] = link; + dict[FBSDKAppEventParameterProductTitle] = title; + dict[FBSDKAppEventParameterProductPriceAmount] = [NSString stringWithFormat:@"%.3lf", priceAmount]; + dict[FBSDKAppEventParameterProductPriceCurrency] = currency; + if (gtin) { + dict[FBSDKAppEventParameterProductGTIN] = gtin; + } + if (mpn) { + dict[FBSDKAppEventParameterProductMPN] = mpn; + } + if (brand) { + dict[FBSDKAppEventParameterProductBrand] = brand; + } + + [FBSDKAppEvents logEvent:FBSDKAppEventNameProductCatalogUpdate + parameters:dict]; +} + ++ (void)activateApp +{ + [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass(self)]; + + // Fetch app settings and register for transaction notifications only if app supports implicit purchase + // events + FBSDKAppEvents *instance = [FBSDKAppEvents singleton]; + [instance publishInstall]; + [instance fetchServerConfiguration:NULL]; + + // Restore time spent data, indicating that we're being called from "activateApp", which will, + // when appropriate, result in logging an "activated app" and "deactivated app" (for the + // previous session) App Event. + [FBSDKTimeSpentData restore:YES]; + [FBSDKUserDataStore initStore]; +} + ++ (void)setPushNotificationsDeviceToken:(NSData *)deviceToken +{ + NSString *deviceTokenString = [FBSDKInternalUtility hexadecimalStringFromData:deviceToken]; + [FBSDKAppEvents setPushNotificationsDeviceTokenString:deviceTokenString]; +} + ++ (void)setPushNotificationsDeviceTokenString:(NSString *)deviceTokenString +{ + if (deviceTokenString == nil) { + [FBSDKAppEvents singleton].pushNotificationsDeviceTokenString = nil; + return; + } + + if (![deviceTokenString isEqualToString:([FBSDKAppEvents singleton].pushNotificationsDeviceTokenString)]) { + [FBSDKAppEvents singleton].pushNotificationsDeviceTokenString = deviceTokenString; + + [FBSDKAppEvents logEvent:FBSDKAppEventNamePushTokenObtained]; + + // Unless the behavior is set to only allow explicit flushing, we go ahead and flush the event + if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { + [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; + } + } +} + ++ (FBSDKAppEventsFlushBehavior)flushBehavior +{ + return [FBSDKAppEvents singleton].flushBehavior; +} + ++ (void)setFlushBehavior:(FBSDKAppEventsFlushBehavior)flushBehavior +{ + [FBSDKAppEvents singleton].flushBehavior = flushBehavior; +} + ++ (NSString *)loggingOverrideAppID +{ + return g_overrideAppID; +} + ++ (void)setLoggingOverrideAppID:(NSString *)appID +{ + if (![g_overrideAppID isEqualToString:appID]) { + FBSDKConditionalLog(![FBSDKAppEvents singleton]->_explicitEventsLoggedYet, + FBSDKLoggingBehaviorDeveloperErrors, + @"[FBSDKAppEvents setLoggingOverrideAppID:] should only be called prior to any events being logged."); + g_overrideAppID = appID; + } +} + ++ (void)flush +{ + [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonExplicit]; +} + ++ (void)setUserID:(NSString *)userID +{ + if ([[[self class] singleton]->_userID isEqualToString:userID]) { + return; + } + [[self class] singleton]->_userID = userID; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:userID forKey:USER_ID_USER_DEFAULTS_KEY]; + [defaults synchronize]; +} + ++ (void)clearUserID +{ + [self setUserID:nil]; +} + ++ (NSString *)userID +{ + return [[self class] singleton]->_userID; +} + ++ (void)setUserData:(NSDictionary*)userData +{ + [FBSDKUserDataStore setUserDataAndHash:userData]; +} + ++ (void)setUserEmail:(NSString *)email + firstName:(NSString *)firstName + lastName:(NSString *)lastName + phone:(NSString *)phone + dateOfBirth:(NSString *)dateOfBirth + gender:(NSString *)gender + city:(NSString *)city + state:(NSString *)state + zip:(NSString *)zip + country:(NSString *)country +{ + [FBSDKUserDataStore setUserDataAndHash:email + firstName:firstName + lastName:lastName + phone:phone + dateOfBirth:dateOfBirth + gender:gender + city:city + state:state + zip:zip + country:country]; +} + ++ (NSString*)getUserData +{ + return [FBSDKUserDataStore getHashedUserData]; +} + ++ (void)clearUserData +{ + [FBSDKUserDataStore setUserDataAndHash:nil + firstName:nil + lastName:nil + phone:nil + dateOfBirth:nil + gender:nil + city:nil + state:nil + zip:nil + country:nil]; +} + ++ (void)updateUserProperties:(NSDictionary *)properties handler:(FBSDKGraphRequestHandler)handler +{ + NSString *userID = [[self class] userID]; + + if (userID.length == 0) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Missing [FBSDKAppEvents userID] for [FBSDKAppEvents updateUserProperties:]"]; + NSError *error = [NSError fbRequiredArgumentErrorWithName:@"userID" message:@"Missing [FBSDKAppEvents userID] for [FBSDKAppEvents updateUserProperties:]"]; + if (handler) { + handler(nil, nil, error); + } + return; + } + NSMutableDictionary *dataDictionary = [NSMutableDictionary dictionaryWithCapacity:3]; + dataDictionary[@"user_unique_id"] = [FBSDKAppEvents userID]; + [FBSDKInternalUtility dictionary:dataDictionary setObject:[FBSDKAppEventsUtility advertiserID] forKey:@"advertiser_id"]; + [FBSDKInternalUtility dictionary:dataDictionary setObject:properties forKey:@"custom_data"]; + + NSError *error; + __block NSError *invalidObjectError; + NSString *dataJSONString = [FBSDKInternalUtility JSONStringForObject:@[dataDictionary] error:&error invalidObjectHandler:^id(id object, BOOL *stop) { + *stop = YES; + invalidObjectError = [NSError fbUnknownErrorWithMessage:@"The values in the properties dictionary must be NSStrings or NSNumbers"]; + return nil; + }]; + if (!error) { + error = invalidObjectError; + } + if (error) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Failed to serialize properties for [FBSDKAppEvents updateUserProperties:]"]; + if (handler) { + handler(nil, nil, error); + } + return; + } + NSDictionary *params = @{ @"data" : dataJSONString }; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/user_properties", [[self singleton] appID]] + parameters:params + tokenString:[FBSDKAccessToken currentAccessToken].tokenString + HTTPMethod:@"POST" + flags:FBSDKGraphRequestFlagDisableErrorRecovery | + FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | + FBSDKGraphRequestFlagSkipClientToken + ]; + [request startWithCompletionHandler:handler]; +} + +#if !TARGET_OS_TV ++ (void)augmentHybridWKWebView:(WKWebView *)webView { + // Ensure we can instantiate WebKit before trying this + Class WKWebViewClass = fbsdkdfl_WKWebViewClass(); + if (WKWebViewClass != nil && [webView isKindOfClass:WKWebViewClass]) { + Class WKUserScriptClass = fbsdkdfl_WKUserScriptClass(); + if (WKUserScriptClass != nil) { + WKUserContentController *controller = webView.configuration.userContentController; + FBSDKHybridAppEventsScriptMessageHandler *scriptHandler = [[FBSDKHybridAppEventsScriptMessageHandler alloc] init]; + [controller addScriptMessageHandler:scriptHandler name:FBSDKAppEventsWKWebViewMessagesHandlerKey]; + + NSString *js = [NSString stringWithFormat:@"window.fbmq_%@={'sendEvent': function(pixel_id,event_name,custom_data){var msg={\"%@\":pixel_id, \"%@\":event_name,\"%@\":custom_data};window.webkit.messageHandlers[\"%@\"].postMessage(msg);}, 'getProtocol':function(){return \"%@\";}}", + [[self singleton] appID], + FBSDKAppEventsWKWebViewMessagesPixelIDKey, + FBSDKAppEventsWKWebViewMessagesEventKey, + FBSDKAppEventsWKWebViewMessagesParamsKey, + FBSDKAppEventsWKWebViewMessagesHandlerKey, + FBSDKAPPEventsWKWebViewMessagesProtocolKey + ]; + + [controller addUserScript:[[WKUserScriptClass alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]]; + } + } + else { + [FBSDKAppEventsUtility logAndNotify:@"You must call augmentHybridWKWebView with WebKit linked to your project and a WKWebView instance"]; + } +} +#endif + ++ (void)setIsUnityInit:(BOOL)isUnityInit +{ + [FBSDKAppEvents singleton]->_isUnityInit = isUnityInit; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" ++ (void)sendEventBindingsToUnity +{ + // Send event bindings to Unity only Unity is initialized + if ([FBSDKAppEvents singleton]->_isUnityInit + && [FBSDKAppEvents singleton]->_serverConfiguration + && [NSJSONSerialization isValidJSONObject:[FBSDKAppEvents singleton]->_serverConfiguration.eventBindings] + ) { + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[FBSDKAppEvents singleton]->_serverConfiguration.eventBindings ?: @"" + options:0 + error:nil]; + NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + Class classFBUnityUtility = objc_lookUpClass(FBUnityUtilityClassName); + SEL updateBindingSelector = NSSelectorFromString(FBUnityUtilityUpdateBindingsSelector); + if ([classFBUnityUtility respondsToSelector:updateBindingSelector]) { + [classFBUnityUtility performSelector:updateBindingSelector withObject:jsonString]; + } + } +} +#pragma clang diagnostic pop + +#pragma mark - Internal Methods + ++ (void)logImplicitEvent:(NSString *)eventName + valueToSum:(NSNumber *)valueToSum + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken +{ + [[FBSDKAppEvents singleton] instanceLogEvent:eventName + valueToSum:valueToSum + parameters:parameters + isImplicitlyLogged:YES + accessToken:accessToken]; +} + ++ (FBSDKAppEvents *)singleton +{ + static dispatch_once_t pred; + static FBSDKAppEvents *shared = nil; + + dispatch_once(&pred, ^{ + shared = [[FBSDKAppEvents alloc] init]; + }); + return shared; +} + +- (void)flushForReason:(FBSDKAppEventsFlushReason)flushReason +{ + // Always flush asynchronously, even on main thread, for two reasons: + // - most consistent code path for all threads. + // - allow locks being held by caller to be released prior to actual flushing work being done. + @synchronized (self) { + if (!_appEventsState) { + return; + } + FBSDKAppEventsState *copy = [_appEventsState copy]; + _appEventsState = [[FBSDKAppEventsState alloc] initWithToken:copy.tokenString + appID:copy.appID]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self flushOnMainQueue:copy forReason:flushReason]; + }); + } +} + +#pragma mark - Private Methods +- (NSString *)appID +{ + return [FBSDKAppEvents loggingOverrideAppID] ?: [FBSDKSettings appID]; +} + +- (void)publishInstall +{ + NSString *appID = [self appID]; + if (appID.length == 0) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Missing [FBSDKAppEvents appID] for [FBSDKAppEvents publishInstall:]"]; + return; + } + NSString *lastAttributionPingString = [NSString stringWithFormat:@"com.facebook.sdk:lastAttributionPing%@", appID]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + if ([defaults objectForKey:lastAttributionPingString]) { + return; + } + [self fetchServerConfiguration:^{ + NSDictionary *params = [FBSDKAppEventsUtility activityParametersDictionaryForEvent:@"MOBILE_APP_INSTALL" + implicitEventsOnly:NO + shouldAccessAdvertisingID:self->_serverConfiguration.isAdvertisingIDEnabled]; + NSString *path = [NSString stringWithFormat:@"%@/activities", appID]; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:path + parameters:params + tokenString:nil + HTTPMethod:@"POST" + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (!error) { + [defaults setObject:[NSDate date] forKey:lastAttributionPingString]; + NSString *lastInstallResponseKey = [NSString stringWithFormat:@"com.facebook.sdk:lastInstallResponse%@", appID]; + [defaults setObject:result forKey:lastInstallResponseKey]; + [defaults synchronize]; + } + }]; + }]; +} + +#if !TARGET_OS_TV +- (void)enableCodelessEvents { + if (_serverConfiguration.isCodelessEventsEnabled) { + if (!_eventBindingManager) { + _eventBindingManager = [[FBSDKEventBindingManager alloc] init]; + [_eventBindingManager start]; + } + + if ([FBSDKInternalUtility isUnity]) { + [FBSDKAppEvents sendEventBindingsToUnity]; + } else { + [_eventBindingManager updateBindings:[FBSDKEventBindingManager + parseArray:_serverConfiguration.eventBindings]]; + } + } +} +#endif + +// app events can use a server configuration up to 24 hours old to minimize network traffic. +- (void)fetchServerConfiguration:(void (^)(void))callback +{ + [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *error) { + self->_serverConfiguration = serverConfiguration; + + if (self->_serverConfiguration.implicitPurchaseLoggingEnabled) { + [FBSDKPaymentObserver startObservingTransactions]; + } else { + [FBSDKPaymentObserver stopObservingTransactions]; + } +#if !TARGET_OS_TV + [self enableCodelessEvents]; +#endif + if (callback) { + callback(); + } + }]; +} + +- (void)instanceLogEvent:(NSString *)eventName + valueToSum:(NSNumber *)valueToSum + parameters:(NSDictionary *)parameters + isImplicitlyLogged:(BOOL)isImplicitlyLogged + accessToken:(FBSDKAccessToken *)accessToken +{ + if (isImplicitlyLogged && _serverConfiguration && !_serverConfiguration.isImplicitLoggingSupported) { + return; + } + + if (!isImplicitlyLogged && !_explicitEventsLoggedYet) { + _explicitEventsLoggedYet = YES; + } + + __block BOOL failed = NO; + + if (![FBSDKAppEventsUtility validateIdentifier:eventName]) { + failed = YES; + } + + // Make sure parameter dictionary is well formed. Log and exit if not. + [parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if (![key isKindOfClass:[NSString class]]) { + [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"The keys in the parameters must be NSStrings, '%@' is not.", key]]; + failed = YES; + } + if (![FBSDKAppEventsUtility validateIdentifier:key]) { + failed = YES; + } + if (![obj isKindOfClass:[NSString class]] && ![obj isKindOfClass:[NSNumber class]]) { + [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"The values in the parameters dictionary must be NSStrings or NSNumbers, '%@' is not.", obj]]; + failed = YES; + } + } + ]; + + if (failed) { + return; + } + + NSMutableDictionary *eventDictionary = [NSMutableDictionary dictionaryWithDictionary:parameters]; + eventDictionary[FBSDKAppEventParameterEventName] = eventName; + if (!eventDictionary[FBSDKAppEventParameterLogTime]) { + eventDictionary[FBSDKAppEventParameterLogTime] = @([FBSDKAppEventsUtility unixTimeNow]); + } + [FBSDKInternalUtility dictionary:eventDictionary setObject:valueToSum forKey:@"_valueToSum"]; + if (isImplicitlyLogged) { + eventDictionary[FBSDKAppEventParameterImplicitlyLogged] = @"1"; + } + + NSString *currentViewControllerName; + if ([NSThread isMainThread]) { + // We only collect the view controller when on the main thread, as the behavior off + // the main thread is unpredictable. Besides, UI state for off-main-thread computations + // isn't really relevant anyhow. + UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController; + if (vc) { + currentViewControllerName = [[vc class] description]; + } else { + currentViewControllerName = @"no_ui"; + } + } else { + currentViewControllerName = @"off_thread"; + } + eventDictionary[@"_ui"] = currentViewControllerName; + + NSString *tokenString = [FBSDKAppEventsUtility tokenStringToUseFor:accessToken]; + NSString *appID = [self appID]; + + @synchronized (self) { + if (!_appEventsState) { + _appEventsState = [[FBSDKAppEventsState alloc] initWithToken:tokenString appID:appID]; + } else if (![_appEventsState isCompatibleWithTokenString:tokenString appID:appID]) { + if (self.flushBehavior == FBSDKAppEventsFlushBehaviorExplicitOnly) { + [FBSDKAppEventsStateManager persistAppEventsData:_appEventsState]; + } else { + [self flushForReason:FBSDKAppEventsFlushReasonSessionChange]; + } + _appEventsState = [[FBSDKAppEventsState alloc] initWithToken:tokenString appID:appID]; + } + + [_appEventsState addEvent:eventDictionary isImplicit:isImplicitlyLogged]; + if (!isImplicitlyLogged) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"FBSDKAppEvents: Recording event @ %ld: %@", + [FBSDKAppEventsUtility unixTimeNow], + eventDictionary]; + } + + [self checkPersistedEvents]; + + if (_appEventsState.events.count > NUM_LOG_EVENTS_TO_TRY_TO_FLUSH_AFTER && + self.flushBehavior != FBSDKAppEventsFlushBehaviorExplicitOnly) { + [self flushForReason:FBSDKAppEventsFlushReasonEventThreshold]; + } + } +} + +// this fetches persisted event states. +// for those matching the currently tracked events, add it. +// otherwise, either flush (if not explicitonly behavior) or persist them back. +- (void)checkPersistedEvents +{ + NSArray *existingEventsStates = [FBSDKAppEventsStateManager retrievePersistedAppEventsStates]; + if (existingEventsStates.count == 0) { + return; + } + FBSDKAppEventsState *matchingEventsPreviouslySaved = nil; + // reduce lock time by creating a new FBSDKAppEventsState to collect matching persisted events. + @synchronized(self) { + if (_appEventsState) { + matchingEventsPreviouslySaved = [[FBSDKAppEventsState alloc] initWithToken:_appEventsState.tokenString + appID:_appEventsState.appID]; + } + } + for (FBSDKAppEventsState *saved in existingEventsStates) { + if ([saved isCompatibleWithAppEventsState:matchingEventsPreviouslySaved]) { + [matchingEventsPreviouslySaved addEventsFromAppEventState:saved]; + } else { + if (self.flushBehavior == FBSDKAppEventsFlushBehaviorExplicitOnly) { + [FBSDKAppEventsStateManager persistAppEventsData:saved]; + } else { + dispatch_async(dispatch_get_main_queue(), ^{ + [self flushOnMainQueue:saved forReason:FBSDKAppEventsFlushReasonPersistedEvents]; + }); + } + } + } + if (matchingEventsPreviouslySaved.events.count > 0) { + @synchronized(self) { + if ([_appEventsState isCompatibleWithAppEventsState:matchingEventsPreviouslySaved]) { + [_appEventsState addEventsFromAppEventState:matchingEventsPreviouslySaved]; + } + } + } +} + +- (void)flushOnMainQueue:(FBSDKAppEventsState *)appEventsState + forReason:(FBSDKAppEventsFlushReason)reason +{ + + if (appEventsState.events.count == 0) { + return; + } + + if (appEventsState.appID.length == 0) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Missing [FBSDKAppEvents appEventsState.appID] for [FBSDKAppEvents flushOnMainQueue:]"]; + return; + } + + [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; + + [self fetchServerConfiguration:^(void) { + NSString *receipt_data = [appEventsState extractReceiptData]; + NSString *encodedEvents = [appEventsState JSONStringForEvents:self->_serverConfiguration.implicitLoggingEnabled]; + if (!encodedEvents) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + logEntry:@"FBSDKAppEvents: Flushing skipped - no events after removing implicitly logged ones.\n"]; + return; + } + NSMutableDictionary *postParameters = [FBSDKAppEventsUtility + activityParametersDictionaryForEvent:@"CUSTOM_APP_EVENTS" + implicitEventsOnly:appEventsState.areAllEventsImplicit + shouldAccessAdvertisingID:self->_serverConfiguration.advertisingIDEnabled]; + NSInteger length = receipt_data.length; + if (length > 0) { + postParameters[@"receipt_data"] = receipt_data; + } + + postParameters[@"custom_events"] = encodedEvents; + if (appEventsState.numSkipped > 0) { + postParameters[@"num_skipped_events"] = [NSString stringWithFormat:@"%lu", (unsigned long)appEventsState.numSkipped]; + } + if (self.pushNotificationsDeviceTokenString) { + postParameters[FBSDKActivitesParameterPushDeviceToken] = self.pushNotificationsDeviceTokenString; + } + + NSString *loggingEntry = nil; + if ([FBSDKSettings.loggingBehaviors containsObject:FBSDKLoggingBehaviorAppEvents]) { + NSData *prettyJSONData = [NSJSONSerialization dataWithJSONObject:appEventsState.events + options:NSJSONWritingPrettyPrinted + error:NULL]; + NSString *prettyPrintedJsonEvents = [[NSString alloc] initWithData:prettyJSONData + encoding:NSUTF8StringEncoding]; + // Remove this param -- just an encoding of the events which we pretty print later. + NSMutableDictionary *paramsForPrinting = [postParameters mutableCopy]; + [paramsForPrinting removeObjectForKey:@"custom_events_file"]; + + loggingEntry = [NSString stringWithFormat:@"FBSDKAppEvents: Flushed @ %ld, %lu events due to '%@' - %@\nEvents: %@", + [FBSDKAppEventsUtility unixTimeNow], + (unsigned long)appEventsState.events.count, + [FBSDKAppEventsUtility flushReasonToString:reason], + paramsForPrinting, + prettyPrintedJsonEvents]; + } + + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/activities", appEventsState.appID] + parameters:postParameters + tokenString:appEventsState.tokenString + HTTPMethod:@"POST" + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + [self handleActivitiesPostCompletion:error + loggingEntry:loggingEntry + appEventsState:(FBSDKAppEventsState *)appEventsState]; + }]; + + }]; +} + +- (void)handleActivitiesPostCompletion:(NSError *)error + loggingEntry:(NSString *)loggingEntry + appEventsState:(FBSDKAppEventsState *)appEventsState +{ + typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushResult) { + FlushResultSuccess, + FlushResultServerError, + FlushResultNoConnectivity + }; + + [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; + + FBSDKAppEventsFlushResult flushResult = FlushResultSuccess; + if (error) { + NSInteger errorCode = [error.userInfo[FBSDKGraphRequestErrorHTTPStatusCodeKey] integerValue]; + + // We interpret a 400 coming back from FBRequestConnection as a server error due to improper data being + // sent down. Otherwise we assume no connectivity, or another condition where we could treat it as no connectivity. + // Adding 404 as having wrong/missing appID results in 404 and that is not a connectivity issue + flushResult = (errorCode == 400 || errorCode == 404) ? FlushResultServerError : FlushResultNoConnectivity; + } + + if (flushResult == FlushResultServerError) { + // Only log events that developer can do something with (i.e., if parameters are incorrect). + // as opposed to cases where the token is bad. + if ([error.userInfo[FBSDKGraphRequestErrorKey] unsignedIntegerValue] == FBSDKGraphRequestErrorOther) { + NSString *message = [NSString stringWithFormat:@"Failed to send AppEvents: %@", error]; + [FBSDKAppEventsUtility logAndNotify:message allowLogAsDeveloperError:!appEventsState.areAllEventsImplicit]; + } + } else if (flushResult == FlushResultNoConnectivity) { + @synchronized(self) { + if ([appEventsState isCompatibleWithAppEventsState:_appEventsState]) { + [_appEventsState addEventsFromAppEventState:appEventsState]; + } else { + // flush failed due to connectivity. Persist to be tried again later. + [FBSDKAppEventsStateManager persistAppEventsData:appEventsState]; + } + } + } + + NSString *resultString = @""; + switch (flushResult) { + case FlushResultSuccess: + resultString = @"Success"; + break; + + case FlushResultNoConnectivity: + resultString = @"No Connectivity"; + break; + + case FlushResultServerError: + resultString = [NSString stringWithFormat:@"Server Error - %@", error.description]; + break; + } + + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"%@\nFlush Result : %@", loggingEntry, resultString]; +} + +- (void)flushTimerFired:(id)arg +{ + [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; + if (self.flushBehavior != FBSDKAppEventsFlushBehaviorExplicitOnly && !self.disableTimer) { + [self flushForReason:FBSDKAppEventsFlushReasonTimer]; + } +} + +- (void)applicationDidBecomeActive +{ + [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; + + [self checkPersistedEvents]; + + // Restore time spent data, indicating that we're not being called from "activateApp". + [FBSDKTimeSpentData restore:NO]; +} + +- (void)applicationMovingFromActiveStateOrTerminating +{ + // When moving from active state, we don't have time to wait for the result of a flush, so + // just persist events to storage, and we'll process them at the next activation. + FBSDKAppEventsState *copy = nil; + @synchronized (self) { + copy = [_appEventsState copy]; + _appEventsState = nil; + } + if (copy) { + [FBSDKAppEventsStateManager persistAppEventsData:copy]; + } + [FBSDKTimeSpentData suspend]; +} + +#pragma mark - Custom Audience + ++ (FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(FBSDKAccessToken *)accessToken +{ + accessToken = accessToken ?: [FBSDKAccessToken currentAccessToken]; + // Rules for how we use the attribution ID / advertiser ID for an 'custom_audience_third_party_id' Graph API request + // 1) if the OS tells us that the user has Limited Ad Tracking, then just don't send, and return a nil in the token. + // 2) if the app has set 'limitEventAndDataUsage', this effectively implies that app-initiated ad targeting shouldn't happen, + // so use that data here to return nil as well. + // 3) if we have a user session token, then no need to send attribution ID / advertiser ID back as the udid parameter + // 4) otherwise, send back the udid parameter. + + if ([FBSDKAppEventsUtility advertisingTrackingStatus] == FBSDKAdvertisingTrackingDisallowed || [FBSDKSettings limitEventAndDataUsage]) { + return nil; + } + + NSString *tokenString = [FBSDKAppEventsUtility tokenStringToUseFor:accessToken]; + NSString *udid = nil; + if (!accessToken) { + // We don't have a logged in user, so we need some form of udid representation. Prefer advertiser ID if + // available, and back off to attribution ID if not. Note that this function only makes sense to be + // called in the context of advertising. + udid = [FBSDKAppEventsUtility advertiserID]; + if (!udid) { + udid = [FBSDKAppEventsUtility attributionID]; + } + + if (!udid) { + // No udid, and no user token. No point in making the request. + return nil; + } + } + + NSDictionary *parameters = nil; + if (udid) { + parameters = @{ @"udid" : udid }; + } + + NSString *graphPath = [NSString stringWithFormat:@"%@/custom_audience_third_party_id", [[self singleton] appID]]; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:graphPath + parameters:parameters + tokenString:tokenString + HTTPMethod:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + + return request; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h new file mode 100644 index 0000000000..fcc4f42f5a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h @@ -0,0 +1,27 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 void(^FBSDKCodelessSettingLoadBlock)(BOOL isCodelessSetupEnabled, NSError *error); + +@interface FBSDKCodelessIndexer : NSObject + ++ (NSString *)extInfo; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m new file mode 100644 index 0000000000..60ff531bb2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m @@ -0,0 +1,404 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCodelessIndexer.h" + +#import +#import +#import + +#import + +#import +#import + +#import "FBSDKCoreKit+Internal.h" + +@implementation FBSDKCodelessIndexer + +static BOOL _isCodelessIndexing; +static BOOL _isCheckingSession; +static BOOL _isCodelessIndexingEnabled; + +static NSMutableDictionary *_codelessSetting; +static const NSTimeInterval kTimeout = 4.0; + +static NSString *_deviceSessionID; +static NSTimer *_appIndexingTimer; +static NSString *_lastTreeHash; + ++ (void)load +{ +#if TARGET_OS_SIMULATOR + [self setupGesture]; +#else + [self loadCodelessSettingWithCompletionBlock:^(BOOL isCodelessSetupEnabled, NSError *error) { + if (isCodelessSetupEnabled) { + [self setupGesture]; + } + }]; +#endif +} + +// DO NOT call this function, it is only called once in the load function ++ (void)loadCodelessSettingWithCompletionBlock:(FBSDKCodelessSettingLoadBlock)completionBlock +{ + NSString *appID = [FBSDKSettings appID]; + if (appID == nil) { + return; + } + + [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *serverConfigurationLoadingError) { + if (!serverConfiguration.codelessEventsEnabled) { + return; + } + + // load the defaults + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *defaultKey = [NSString stringWithFormat:CODELESS_SETTING_KEY, appID]; + NSData *data = [defaults objectForKey:defaultKey]; + if ([data isKindOfClass:[NSData class]]) { + NSMutableDictionary *codelessSetting = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + if (codelessSetting) { + _codelessSetting = codelessSetting; + } + } + if (!_codelessSetting) { + _codelessSetting = [[NSMutableDictionary alloc] init]; + } + + if (![self _codelessSetupTimestampIsValid:[_codelessSetting objectForKey:CODELESS_SETTING_TIMESTAMP_KEY]]) { + FBSDKGraphRequest *request = [self requestToLoadCodelessSetup:appID]; + if (request == nil) { + return; + } + FBSDKGraphRequestConnection *requestConnection = [[FBSDKGraphRequestConnection alloc] init]; + requestConnection.timeout = kTimeout; + [requestConnection addRequest:request completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *codelessLoadingError) { + if (codelessLoadingError) { + return; + } + + NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; + if (resultDictionary) { + BOOL isCodelessSetupEnabled = [FBSDKTypeUtility boolValue:resultDictionary[CODELESS_SETUP_ENABLED_FIELD]]; + [_codelessSetting setObject:@(isCodelessSetupEnabled) forKey:CODELESS_SETUP_ENABLED_KEY]; + [_codelessSetting setObject:[NSDate date] forKey:CODELESS_SETTING_TIMESTAMP_KEY]; + // update the cached copy in user defaults + [defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:_codelessSetting] forKey:defaultKey]; + completionBlock(isCodelessSetupEnabled, codelessLoadingError); + } + }]; + [requestConnection start]; + } else { + completionBlock([FBSDKTypeUtility boolValue:[_codelessSetting objectForKey:CODELESS_SETUP_ENABLED_KEY]], nil); + } + }]; +} + ++ (FBSDKGraphRequest *)requestToLoadCodelessSetup:(NSString *)appID +{ + NSString *advertiserID = [FBSDKAppEventsUtility advertiserID]; + if (!advertiserID) { + return nil; + } + + NSDictionary *parameters = @{ + @"fields": CODELESS_SETUP_ENABLED_FIELD, + @"advertiser_id": advertiserID + }; + + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:appID + parameters:parameters + tokenString:nil + HTTPMethod:nil + flags:FBSDKGraphRequestFlagSkipClientToken | FBSDKGraphRequestFlagDisableErrorRecovery]; + return request; +} + ++ (BOOL)_codelessSetupTimestampIsValid:(NSDate *)timestamp +{ + return (timestamp != nil && [[NSDate date] timeIntervalSinceDate:timestamp] < CODELESS_SETTING_CACHE_TIMEOUT); +} + ++ (void)setupGesture +{ + [UIApplication sharedApplication].applicationSupportsShakeToEdit = YES; + Class class = [UIApplication class]; + + [FBSDKSwizzler swizzleSelector:@selector(motionBegan:withEvent:) onClass:class withBlock:^{ + if ([FBSDKServerConfigurationManager cachedServerConfiguration].isCodelessEventsEnabled) { + [self checkCodelessIndexingSession]; + } + } named:@"motionBegan"]; +} + ++ (void)checkCodelessIndexingSession +{ + if (_isCheckingSession) return; + + _isCheckingSession = YES; + NSDictionary *parameters = @{ + CODELESS_INDEXING_SESSION_ID_KEY: [self currentSessionDeviceID], + CODELESS_INDEXING_EXT_INFO_KEY: [self extInfo] + }; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] + initWithGraphPath:[NSString stringWithFormat:@"%@/%@", + [FBSDKSettings appID], CODELESS_INDEXING_SESSION_ENDPOINT] + parameters: parameters + HTTPMethod:@"POST"]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + _isCheckingSession = NO; + if ([result isKindOfClass:[NSDictionary class]]) { + _isCodelessIndexingEnabled = [((NSDictionary *)result)[CODELESS_INDEXING_STATUS_KEY] boolValue]; + if (_isCodelessIndexingEnabled) { + _lastTreeHash = nil; + if (!_appIndexingTimer) { + _appIndexingTimer = [NSTimer timerWithTimeInterval:CODELESS_INDEXING_UPLOAD_INTERVAL_IN_SECONDS + target:self + selector:@selector(startIndexing) + userInfo:nil + repeats:YES]; + + [[NSRunLoop mainRunLoop] addTimer:_appIndexingTimer forMode:NSDefaultRunLoopMode]; + } + } else { + _deviceSessionID = nil; + } + } + }]; +} + ++ (NSString *)currentSessionDeviceID +{ + if (!_deviceSessionID) { + _deviceSessionID = [NSUUID UUID].UUIDString; + } + return _deviceSessionID; +} + ++ (NSString *)extInfo +{ + struct utsname systemInfo; + uname(&systemInfo); + NSString *machine = @(systemInfo.machine); + NSString *advertiserID = [FBSDKAppEventsUtility advertiserID] ?: @""; + machine = machine ?: @""; + NSString *debugStatus = [FBSDKAppEventsUtility isDebugBuild] ? @"1" : @"0"; +#if TARGET_IPHONE_SIMULATOR + NSString *isSimulator = @"1"; +#else + NSString *isSimulator = @"0"; +#endif + NSLocale *locale = [NSLocale currentLocale]; + NSString *languageCode = [locale objectForKey:NSLocaleLanguageCode]; + NSString *countryCode = [locale objectForKey:NSLocaleCountryCode]; + NSString *localeString = locale.localeIdentifier; + if (languageCode && countryCode) { + localeString = [NSString stringWithFormat:@"%@_%@", languageCode, countryCode]; + } + + NSString *extinfo = [FBSDKInternalUtility JSONStringForObject:@[machine, + advertiserID, + debugStatus, + isSimulator, + localeString] + error:NULL + invalidObjectHandler:NULL]; + + return extinfo ?: @""; +} + ++ (void)startIndexing { + if (!_isCodelessIndexingEnabled) { + return; + } + + if (UIApplicationStateActive != [UIApplication sharedApplication].applicationState) { + return; + } + + // If userAgentSuffix begins with Unity, trigger unity code to upload view hierarchy + NSString *userAgentSuffix = [FBSDKSettings userAgentSuffix]; + if (userAgentSuffix != nil && [userAgentSuffix hasPrefix:@"Unity"]) { + Class FBUnityUtility = objc_lookUpClass("FBUnityUtility"); + SEL selector = NSSelectorFromString(@"triggerUploadViewHierarchy"); + if (FBUnityUtility && selector && [FBUnityUtility respondsToSelector:selector]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [FBUnityUtility performSelector:selector]; +#pragma clang diagnostic pop + } + } else { + [self uploadIndexing]; + } +} + ++ (void)uploadIndexing +{ + if (_isCodelessIndexing) { + return; + } + + NSString *tree = [FBSDKCodelessIndexer currentViewTree]; + + [self uploadIndexing:tree]; +} + ++ (void)uploadIndexing:(NSString *)tree +{ + if (_isCodelessIndexing) { + return; + } + + if (!tree) { + return; + } + + NSString *currentTreeHash = [FBSDKUtility SHA256Hash:tree]; + if (_lastTreeHash && [_lastTreeHash isEqualToString:currentTreeHash]) { + return; + } + + _lastTreeHash = currentTreeHash; + + NSBundle *mainBundle = [NSBundle mainBundle]; + NSString *version = [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] + initWithGraphPath:[NSString stringWithFormat:@"%@/%@", + [FBSDKSettings appID], CODELESS_INDEXING_ENDPOINT] + parameters:@{ + CODELESS_INDEXING_TREE_KEY: tree, + CODELESS_INDEXING_APP_VERSION_KEY: version ?: @"", + CODELESS_INDEXING_PLATFORM_KEY: @"iOS", + CODELESS_INDEXING_SESSION_ID_KEY: [self currentSessionDeviceID] + } + HTTPMethod:@"POST"]; + _isCodelessIndexing = YES; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + _isCodelessIndexing = NO; + if ([result isKindOfClass:[NSDictionary class]]) { + _isCodelessIndexingEnabled = [result[CODELESS_INDEXING_STATUS_KEY] boolValue]; + if (!_isCodelessIndexingEnabled) { + _deviceSessionID = nil; + } + } + }]; +} + ++ (NSString *)currentViewTree +{ + NSMutableArray *trees = [NSMutableArray array]; + + NSArray *windows = [UIApplication sharedApplication].windows; + for (UIWindow *window in windows) { + NSDictionary *tree = [FBSDKCodelessIndexer recursiveCaptureTree:window]; + if (tree) { + if (window.isKeyWindow) { + [trees insertObject:tree atIndex:0]; + } else { + [trees addObject:tree]; + } + } + } + + if (0 == trees.count) { + return nil; + } + + NSArray *viewTrees = [trees reverseObjectEnumerator].allObjects; + + NSData *data = UIImageJPEGRepresentation([FBSDKCodelessIndexer screenshot], 0.5); + NSString *screenshot = [data base64EncodedStringWithOptions:0]; + + NSMutableDictionary *treeInfo = [NSMutableDictionary dictionary]; + + treeInfo[@"view"] = viewTrees; + treeInfo[@"screenshot"] = screenshot ?: @""; + + NSString *tree = nil; + data = [NSJSONSerialization dataWithJSONObject:treeInfo options:0 error:nil]; + if (data) { + tree = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + } + + return tree; +} + ++ (NSDictionary *)recursiveCaptureTree:(NSObject *)obj +{ + if (!obj) { + return nil; + } + + NSMutableDictionary *result = [FBSDKViewHierarchy getDetailAttributesOf:obj]; + + NSArray *children = [FBSDKViewHierarchy getChildren:obj]; + NSMutableArray *childrenTrees = [NSMutableArray array]; + for (NSObject *child in children) { + NSDictionary *objTree = [self recursiveCaptureTree:child]; + [childrenTrees addObject:objTree]; + } + + if (childrenTrees.count > 0) { + [result setValue:[childrenTrees copy] forKey:CODELESS_VIEW_TREE_CHILDREN_KEY]; + } + + return [result copy]; +} + ++ (UIImage *)screenshot { + UIWindow *window = [UIApplication sharedApplication].delegate.window; + + UIGraphicsBeginImageContext(window.bounds.size); + [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES]; + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + ++ (NSDictionary *)dimensionOf:(NSObject *)obj +{ + UIView *view = nil; + + if ([obj isKindOfClass:[UIView class]]) { + view = (UIView *)obj; + } else if ([obj isKindOfClass:[UIViewController class]]) { + view = ((UIViewController *)obj).view; + } + + CGRect frame = view.frame; + CGPoint offset = CGPointZero; + + if ([view isKindOfClass:[UIScrollView class]]) + offset = ((UIScrollView *)view).contentOffset; + + return @{ + CODELESS_VIEW_TREE_TOP_KEY: @((int)frame.origin.y), + CODELESS_VIEW_TREE_LEFT_KEY: @((int)frame.origin.x), + CODELESS_VIEW_TREE_WIDTH_KEY: @((int)frame.size.width), + CODELESS_VIEW_TREE_HEIGHT_KEY: @((int)frame.size.height), + CODELESS_VIEW_TREE_OFFSET_X_KEY: @((int)offset.x), + CODELESS_VIEW_TREE_OFFSET_Y_KEY: @((int)offset.y), + CODELESS_VIEW_TREE_VISIBILITY_KEY: view.isHidden ? @4 : @0 + }; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h new file mode 100644 index 0000000000..72ef74153c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h @@ -0,0 +1,92 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKCodelessMacros_h +#define FBSDKCodelessMacros_h + +// keys for event binding path compoenent +#define CODELESS_MAPPING_METHOD_KEY @"method" +#define CODELESS_MAPPING_EVENT_NAME_KEY @"event_name" +#define CODELESS_MAPPING_EVENT_TYPE_KEY @"event_type" +#define CODELESS_MAPPING_APP_VERSION_KEY @"app_version" +#define CODELESS_MAPPING_PATH_KEY @"path" +#define CODELESS_MAPPING_PATH_TYPE_KEY @"path_type" +#define CODELESS_MAPPING_CLASS_NAME_KEY @"class_name" +#define CODELESS_MAPPING_MATCH_BITMASK_KEY @"match_bitmask" +#define CODELESS_MAPPING_ID_KEY @"id" +#define CODELESS_MAPPING_INDEX_KEY @"index" +#define CODELESS_MAPPING_IS_USER_INPUT_KEY @"is_user_input" +#define CODELESS_MAPPING_SECTION_KEY @"section" +#define CODELESS_MAPPING_ROW_KEY @"row" +#define CODELESS_MAPPING_TEXT_KEY @"text" +#define CODELESS_MAPPING_TAG_KEY @"tag" +#define CODELESS_MAPPING_DESC_KEY @"description" +#define CODELESS_MAPPING_HINT_KEY @"hint" +#define CODELESS_MAPPING_PARAMETERS_KEY @"parameters" +#define CODELESS_MAPPING_PARAMETER_NAME_KEY @"name" +#define CODELESS_MAPPING_PARAMETER_VALUE_KEY @"value" + +#define CODELESS_MAPPING_PARENT_CLASS_NAME @".." +#define CODELESS_MAPPING_CURRENT_CLASS_NAME @"." + +#define ReactNativeClassRCTView "RCTView" +#define ReactNativeClassRCTRootView "RCTRootView" + +#define CODELESS_INDEXING_UPLOAD_INTERVAL_IN_SECONDS 1 +#define CODELESS_INDEXING_STATUS_KEY @"is_app_indexing_enabled" +#define CODELESS_INDEXING_SESSION_ID_KEY @"device_session_id" +#define CODELESS_INDEXING_APP_VERSION_KEY @"app_version" +#define CODELESS_INDEXING_SDK_VERSION_KEY @"sdk_version" +#define CODELESS_INDEXING_PLATFORM_KEY @"platform" +#define CODELESS_INDEXING_TREE_KEY @"tree" +#define CODELESS_INDEXING_SCREENSHOT_KEY @"screenshot" +#define CODELESS_INDEXING_EXT_INFO_KEY @"extinfo" + +#define CODELESS_INDEXING_ENDPOINT @"app_indexing" +#define CODELESS_INDEXING_SESSION_ENDPOINT @"app_indexing_session" + +#define CODELESS_SETUP_ENABLED_FIELD @"auto_event_setup_enabled" +#define CODELESS_SETUP_ENABLED_KEY @"codeless_setup_enabled" +#define CODELESS_SETTING_KEY @"com.facebook.sdk:codelessSetting%@" +#define CODELESS_SETTING_TIMESTAMP_KEY @"codeless_setting_timestamp" +#define CODELESS_SETTING_CACHE_TIMEOUT (7 * 24 * 60 * 60) + +// keys for view tree +#define CODELESS_VIEW_TREE_CLASS_NAME_KEY @"classname" +#define CODELESS_VIEW_TREE_CLASS_TYPE_BIT_MASK_KEY @"classtypebitmask" +#define CODELESS_VIEW_TREE_TEXT_KEY @"text" +#define CODELESS_VIEW_TREE_DESC_KEY @"description" +#define CODELESS_VIEW_TREE_DIMENSION_KEY @"dimension" +#define CODELESS_VIEW_TREE_TAG_KEY @"tag" +#define CODELESS_VIEW_TREE_CHILDREN_KEY @"childviews" +#define CODELESS_VIEW_TREE_HINT_KEY @"hint" +#define CODELESS_VIEW_TREE_ACTIONS_KEY @"actions" + +#define CODELESS_VIEW_TREE_TOP_KEY @"top" +#define CODELESS_VIEW_TREE_LEFT_KEY @"left" +#define CODELESS_VIEW_TREE_WIDTH_KEY @"width" +#define CODELESS_VIEW_TREE_HEIGHT_KEY @"height" +#define CODELESS_VIEW_TREE_OFFSET_X_KEY @"scrollx" +#define CODELESS_VIEW_TREE_OFFSET_Y_KEY @"scrolly" +#define CODELESS_VIEW_TREE_VISIBILITY_KEY @"visibility" + +#define CODELESS_VIEW_TREE_TEXT_STYLE_KEY @"text_style" +#define CODELESS_VIEW_TREE_TEXT_IS_BOLD_KEY @"is_bold" +#define CODELESS_VIEW_TREE_TEXT_IS_ITALIC_KEY @"is_italic" +#define CODELESS_VIEW_TREE_TEXT_SIZE_KEY @"font_size" + +#endif /* FBSDKCodelessMacros_h */ diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h new file mode 100644 index 0000000000..e2debc5ab5 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h @@ -0,0 +1,30 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKCodelessParameterComponent : NSObject + +@property (nonatomic, copy, readonly) NSString *name; +@property (nonatomic, copy, readonly) NSString *value; +@property (nonatomic, readonly) NSArray *path; +@property (nonatomic, copy, readonly) NSString *pathType; + +- (instancetype)initWithJSON:(NSDictionary *)dict; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m new file mode 100644 index 0000000000..769ff88f1a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m @@ -0,0 +1,44 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCodelessParameterComponent.h" + +#import "FBSDKCodelessMacros.h" +#import "FBSDKCodelessPathComponent.h" + +@implementation FBSDKCodelessParameterComponent + +- (instancetype)initWithJSON:(NSDictionary *)dict { + if (self = [super init]) { + _name = [dict[CODELESS_MAPPING_PARAMETER_NAME_KEY] copy]; + _value = [dict[CODELESS_MAPPING_PARAMETER_VALUE_KEY] copy]; + _pathType = [dict[CODELESS_MAPPING_PATH_TYPE_KEY] copy]; + + NSArray *ary = dict[CODELESS_MAPPING_PATH_KEY]; + NSMutableArray *mut = [NSMutableArray array]; + for (NSDictionary *info in ary) { + FBSDKCodelessPathComponent *component = [[FBSDKCodelessPathComponent alloc] initWithJSON:info]; + [mut addObject:component]; + } + _path = [mut copy]; + } + + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h new file mode 100644 index 0000000000..15bed07659 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h @@ -0,0 +1,44 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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_OPTIONS(int, FBSDKCodelessMatchBitmaskField) +{ + FBSDKCodelessMatchBitmaskFieldID = 1, + FBSDKCodelessMatchBitmaskFieldText = 1 << 1, + FBSDKCodelessMatchBitmaskFieldTag = 1 << 2, + FBSDKCodelessMatchBitmaskFieldDescription = 1 << 3, + FBSDKCodelessMatchBitmaskFieldHint = 1 << 4 +}; + +@interface FBSDKCodelessPathComponent : NSObject + +@property (nonatomic, copy, readonly) NSString *className; +@property (nonatomic, copy, readonly) NSString *text; +@property (nonatomic, copy, readonly) NSString *hint; +@property (nonatomic, copy, readonly) NSString *desc; // description +@property (nonatomic, readonly) int index; +@property (nonatomic, readonly) int tag; +@property (nonatomic, readonly) int section; +@property (nonatomic, readonly) int row; +@property (nonatomic, readonly) int matchBitmask; + +- (instancetype)initWithJSON:(NSDictionary*)dict; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m new file mode 100644 index 0000000000..1fc5108101 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m @@ -0,0 +1,58 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCodelessPathComponent.h" + +#import "FBSDKCodelessMacros.h" + +@implementation FBSDKCodelessPathComponent + +- (instancetype)initWithJSON:(NSDictionary *)dict { + if (self = [super init]) { + _className = [dict[CODELESS_MAPPING_CLASS_NAME_KEY] copy]; + _text = [dict[CODELESS_MAPPING_TEXT_KEY] copy]; + _hint = [dict[CODELESS_MAPPING_HINT_KEY] copy]; + _desc = [dict[CODELESS_MAPPING_DESC_KEY] copy]; + + + if (dict[CODELESS_MAPPING_INDEX_KEY]) { + _index = [dict[CODELESS_MAPPING_INDEX_KEY] intValue]; + } else { + _index = -1; + } + + if (dict[CODELESS_MAPPING_SECTION_KEY]) { + _section = [dict[CODELESS_MAPPING_SECTION_KEY] intValue]; + } else { + _section = -1; + } + + if (dict[CODELESS_MAPPING_ROW_KEY]) { + _row = [dict[CODELESS_MAPPING_ROW_KEY] intValue]; + } else { + _row = -1; + } + + _tag = [dict[CODELESS_MAPPING_TAG_KEY] intValue]; + _matchBitmask = [dict[CODELESS_MAPPING_MATCH_BITMASK_KEY] intValue]; + } + + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h new file mode 100644 index 0000000000..19e12f57a8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h @@ -0,0 +1,37 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface FBSDKEventBinding : NSObject + +@property (nonatomic, copy, readonly) NSString *eventName; +@property (nonatomic, copy, readonly) NSString *eventType; +@property (nonatomic, copy, readonly) NSString *appVersion; +@property (nonatomic, readonly) NSArray *path; +@property (nonatomic, copy, readonly) NSString *pathType; +@property (nonatomic, readonly) NSArray *parameters; + ++ (BOOL)isViewMatchPath:(UIView *)view path:(NSArray *)path; ++ (BOOL)isPath:(NSArray *)path matchViewPath:(NSArray *)viewPath; +- (FBSDKEventBinding *)initWithJSON:(NSDictionary *)dict; +- (void)trackEvent:(id)sender; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m new file mode 100644 index 0000000000..322b4ef2a2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m @@ -0,0 +1,274 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKEventBinding.h" + +#import + +#import "FBSDKAppEventsUtility.h" +#import "FBSDKCodelessMacros.h" +#import "FBSDKCodelessParameterComponent.h" +#import "FBSDKCodelessPathComponent.h" +#import "FBSDKSwizzler.h" +#import "FBSDKViewHierarchy.h" + +#define CODELESS_PATH_TYPE_ABSOLUTE @"absolute" +#define CODELESS_PATH_TYPE_RELATIVE @"relative" +#define CODELESS_CODELESS_EVENT_KEY @"_is_fb_codeless" +#define PARAMETER_NAME_PRICE @"_valueToSum" + +@implementation FBSDKEventBinding + +- (FBSDKEventBinding *)initWithJSON:(NSDictionary *)dict +{ + if ((self = [super init])) { + _eventName = [dict[CODELESS_MAPPING_EVENT_NAME_KEY] copy]; + _eventType = [dict[CODELESS_MAPPING_EVENT_TYPE_KEY] copy]; + _appVersion = [dict[CODELESS_MAPPING_APP_VERSION_KEY] copy]; + _pathType = [dict[CODELESS_MAPPING_PATH_TYPE_KEY] copy]; + + NSArray *pathComponents = dict[CODELESS_MAPPING_PATH_KEY]; + NSMutableArray *mut = [NSMutableArray array]; + for (NSDictionary *info in pathComponents) { + FBSDKCodelessPathComponent *component = [[FBSDKCodelessPathComponent alloc] initWithJSON:info]; + [mut addObject:component]; + } + _path = [mut copy]; + + NSArray *parameters = dict[CODELESS_MAPPING_PARAMETERS_KEY]; + mut = [NSMutableArray array]; + for (NSDictionary *info in parameters) { + FBSDKCodelessParameterComponent *component = [[FBSDKCodelessParameterComponent alloc] initWithJSON:info]; + [mut addObject:component]; + } + _parameters = [mut copy]; + } + return self; +} + +- (void)trackEvent:(id)sender +{ + UIView *sourceView = [sender isKindOfClass:[UIView class]] ? (UIView *)sender : nil; + NSMutableDictionary *params = [NSMutableDictionary dictionary]; + params[CODELESS_CODELESS_EVENT_KEY] = @"1"; + for (FBSDKCodelessParameterComponent *component in self.parameters) { + NSString *text = component.value; + if (!text || text.length == 0) { + text = [FBSDKEventBinding findParameterOfPath:component.path + pathType:component.pathType + sourceView:sourceView]; + } + if (text) { + if ([component.name isEqualToString:PARAMETER_NAME_PRICE]) { + NSNumber *value = [FBSDKAppEventsUtility getNumberValue:text]; + params[component.name] = value; + } else { + params[component.name] = text; + } + } + } + + [FBSDKAppEvents logEvent:_eventName parameters:[params copy]]; +} + ++ (BOOL)matchAnyView:(NSArray *)views + pathComponent:(FBSDKCodelessPathComponent *)component +{ + for (NSObject *view in views) { + if ([self match:view pathComponent:component]) { + return YES; + } + } + return NO; +} + ++ (BOOL)match:(NSObject *)view +pathComponent:(FBSDKCodelessPathComponent *)component +{ + NSString *className = NSStringFromClass([view class]); + if (![className isEqualToString:component.className]) { + return NO; + } + + if (component.index >= 0) { + NSObject *parent = [FBSDKViewHierarchy getParent:view]; + if (parent) { + NSArray *children = [FBSDKViewHierarchy getChildren:[FBSDKViewHierarchy getParent:view]]; + NSUInteger index = [children indexOfObject:view]; + if (index == NSNotFound || index != component.index) { + return NO; + } + } else { + if (0 != component.index) { + return NO; + } + } + } + + if ((component.matchBitmask & FBSDKCodelessMatchBitmaskFieldText) > 0) { + NSString *text = [FBSDKViewHierarchy getText:view]; + BOOL match = ((text.length == 0 && component.text.length == 0) + || [text isEqualToString:component.text]); + if (!match) { + return NO; + } + } + + if ((component.matchBitmask & FBSDKCodelessMatchBitmaskFieldTag) > 0 + && [view isKindOfClass:[UIView class]] + && component.tag != ((UIView *)view).tag) { + return NO; + } + + if ((component.matchBitmask & FBSDKCodelessMatchBitmaskFieldHint) > 0) { + NSString *hint = [FBSDKViewHierarchy getHint:view]; + BOOL match = ((hint.length == 0 && component.hint.length == 0) + || [hint isEqualToString:component.hint]); + if (!match) { + return NO; + } + } + + return YES; +} + ++ (BOOL)isViewMatchPath:(UIView *)view path:(NSArray *)path +{ + NSArray *viewPath = [FBSDKViewHierarchy getPath:view]; + BOOL isMatch = [self isPath:path matchViewPath:viewPath]; + + return isMatch; +} + ++ (BOOL)isPath:(NSArray *)path matchViewPath:(NSArray *)viewPath { + for (NSInteger i = 0; i < MIN(path.count, viewPath.count); i++) { + NSInteger idxPath = path.count - i - 1; + NSInteger idxViewPath = viewPath.count - i - 1; + + FBSDKCodelessPathComponent *pathComponent = path[idxPath]; + FBSDKCodelessPathComponent *viewPathComponent = viewPath[idxViewPath]; + + if (![pathComponent.className isEqualToString:viewPathComponent.className]) { + return NO; + } + + if (pathComponent.index >= 0 + && pathComponent.index != viewPathComponent.index) { + return NO; + } + + if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldText) > 0) { + NSString *text = viewPathComponent.text; + BOOL match = ((text.length == 0 && pathComponent.text.length == 0) + || [text isEqualToString:pathComponent.text]); + if (!match) { + return NO; + } + } + + if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldTag) > 0 + && pathComponent.tag != viewPathComponent.tag) { + return NO; + } + + if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldHint) > 0) { + NSString *hint = viewPathComponent.hint; + BOOL match = ((hint.length == 0 && pathComponent.hint.length == 0) + || [hint isEqualToString:pathComponent.hint]); + if (!match) { + return NO; + } + } + } + + return YES; +} + ++ (NSObject *)findViewByPath:(NSArray *)path parent:(NSObject *)parent level:(int)level { + if (level >= path.count) { + return nil; + } + + FBSDKCodelessPathComponent *pathComponent = path[level]; + + // If found parent, skip to next level + if ([pathComponent.className isEqualToString:CODELESS_MAPPING_PARENT_CLASS_NAME]) { + NSObject *nextParent = [FBSDKViewHierarchy getParent:parent]; + + return [FBSDKEventBinding findViewByPath:path parent:nextParent level:level + 1]; + } else if ([pathComponent.className isEqualToString:CODELESS_MAPPING_CURRENT_CLASS_NAME]) { + return parent; + } + + NSArray *children; + if (parent) { + children = [FBSDKViewHierarchy getChildren:parent]; + } else { + UIWindow *window = [UIApplication sharedApplication].delegate.window; + if (window) { + children = @[window]; + } else { + return nil; + } + } + + if (path.count - 1 == level) { + int index = pathComponent.index; + if (index >= 0) { + NSObject *child = index < children.count ? children[index] : nil; + if ([self match:child pathComponent:pathComponent]) { + return child; + } + } else { + for (NSObject *child in children) { + if ([self match:child pathComponent:pathComponent]) { + return child; + } + } + } + } else { + for (NSObject *child in children) { + NSObject *result = [self findViewByPath:path parent:child level:level + 1]; + if (result) { + return result; + } + } + } + + return nil; +} + +// MARK: - find event parameters via relative path ++ (NSString *)findParameterOfPath:(NSArray *)path + pathType:(NSString *)pathType + sourceView:(UIView *)sourceView { + if (0 == path.count) { + return nil; + } + + UIView *rootView = sourceView; + if (![pathType isEqualToString:CODELESS_PATH_TYPE_RELATIVE]) { + rootView = nil; + } + + NSObject *foundObj = [self findViewByPath:path parent:rootView level:0]; + + return [FBSDKViewHierarchy getText:foundObj]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h new file mode 100644 index 0000000000..863094e271 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h @@ -0,0 +1,28 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKEventBindingManager : NSObject + +- (FBSDKEventBindingManager*)initWithJSON:(NSDictionary*)dict; +- (void)start; +- (void)updateBindings:(NSArray *)bindings; ++ (NSArray *)parseArray:(NSArray *)array; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m new file mode 100644 index 0000000000..436d0f6814 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m @@ -0,0 +1,390 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKEventBindingManager.h" + +#import + +#import + +#import "FBSDKCodelessMacros.h" +#import "FBSDKCodelessPathComponent.h" +#import "FBSDKEventBinding.h" +#import "FBSDKSwizzler.h" +#import "FBSDKTypeUtility.h" +#import "FBSDKViewHierarchy.h" + +#define ReactNativeTargetKey @"target" +#define ReactNativeTouchEndEventName @"touchEnd" + +#define ReactNativeClassRCTTextView "RCTTextView" +#define ReactNativeClassRCTImageView "RCTImageVIew" +#define ReactNativeClassRCTTouchEvent "RCTTouchEvent" +#define ReactNativeClassRCTTouchHandler "RCTTouchHandler" + +static void fb_dispatch_on_main_thread(dispatch_block_t block) { + dispatch_async(dispatch_get_main_queue(), block); +} + +static void fb_dispatch_on_default_thread(dispatch_block_t block) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); +} + +@interface FBSDKEventBindingManager () +{ + BOOL isStarted; + NSMutableDictionary *reactBindings; + NSSet *validClasses; + BOOL hasReactNative; + NSArray *eventBindings; +} +@end + +@implementation FBSDKEventBindingManager + +- (id)init { + self = [super init]; + if (self) { + isStarted = NO; + hasReactNative = NO; + reactBindings = [NSMutableDictionary dictionary]; + + NSMutableSet *classes = [NSMutableSet set]; + [classes addObject:[UIControl class]]; + [classes addObject:[UITableView class]]; + [classes addObject:[UICollectionView class]]; + // ReactNative + Class classRCTRootView = objc_lookUpClass(ReactNativeClassRCTRootView); + if (classRCTRootView != nil) { + hasReactNative = YES; + Class classRCTView = objc_lookUpClass(ReactNativeClassRCTView); + Class classRCTTextView = objc_lookUpClass(ReactNativeClassRCTTextView); + Class classRCTImageView = objc_lookUpClass(ReactNativeClassRCTImageView); + if (classRCTView) { + [classes addObject:classRCTView]; + } + if (classRCTTextView) { + [classes addObject:classRCTTextView]; + } + if (classRCTImageView) { + [classes addObject:classRCTImageView]; + } + } + validClasses = [NSSet setWithSet:classes]; + } + return self; +} + ++ (NSArray *)parseArray:(NSArray *)array { + NSMutableArray *result = [NSMutableArray array]; + + for (NSDictionary *json in array) { + FBSDKEventBinding *binding = [[FBSDKEventBinding alloc] initWithJSON:json]; + [result addObject:binding]; + } + + return [result copy]; +} + +- (FBSDKEventBindingManager*)initWithJSON:(NSDictionary*)dict +{ + if ((self = [super init])) { + NSArray *eventBindingsDict = [FBSDKTypeUtility arrayValue:dict[@"event_bindings"]]; + NSMutableArray *bindings = [NSMutableArray array]; + for (NSDictionary *d in eventBindingsDict) { + FBSDKEventBinding *e = [[FBSDKEventBinding alloc] initWithJSON:d]; + [bindings addObject:e]; + } + eventBindings = [bindings copy]; + } + return self; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" +- (void)start +{ + if (isStarted) { + return; + } + isStarted = YES; + + void (^blockToWindow)(id view) = ^(id view) { + [self matchView:view delegate:nil]; + }; + + [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) + onClass:[UIControl class] + withBlock:blockToWindow named:@"map_control"]; + + // ReactNative + if (hasReactNative) { // If app is built via ReactNative + Class classRCTView = objc_lookUpClass(ReactNativeClassRCTView); + Class classRCTTextView = objc_lookUpClass(ReactNativeClassRCTTextView); + Class classRCTImageView = objc_lookUpClass(ReactNativeClassRCTImageView); + Class classRCTTouchHandler = objc_lookUpClass(ReactNativeClassRCTTouchHandler); + + // All react-native views would be added tp RCTRootView, so no need to check didMoveToWindow + [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) + onClass:classRCTView + withBlock:blockToWindow + named:@"match_react_native"]; + [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) + onClass:classRCTTextView + withBlock:blockToWindow + named:@"match_react_native"]; + [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) + onClass:classRCTImageView + withBlock:blockToWindow + named:@"match_react_native"]; + + // RCTTouchHandler handles with touch events, like touchEnd and uses RCTEventDispather to dispatch events, so we can check _updateAndDispatchTouches to fire events + [FBSDKSwizzler swizzleSelector:@selector(_updateAndDispatchTouches:eventName:) onClass:classRCTTouchHandler withBlock:^(id touchHandler, SEL command, id touches, id eventName){ + if ([touches isKindOfClass:[NSSet class]] && [eventName isKindOfClass:[NSString class]]) { + @try { + NSString *reactEventName = (NSString *)eventName; + NSSet *reactTouches = (NSSet *)touches; + if ([reactEventName isEqualToString:ReactNativeTouchEndEventName]) { + for (UITouch *touch in reactTouches) { + UIView *targetView = ((UITouch *)touch).view.superview; + NSNumber *reactTag = nil; + // Find the closest React-managed touchable view like RCTTouchHandler + while(targetView) { + reactTag = [FBSDKViewHierarchy getViewReactTag:targetView]; + if (reactTag != nil && targetView.userInteractionEnabled) { + break; + } + targetView = targetView.superview; + } + FBSDKEventBinding *eventBinding = self->reactBindings[reactTag]; + if (reactTag != nil && eventBinding != nil) { + [eventBinding trackEvent:nil]; + } + } + } + } + @catch(NSException *exception) { + // Catch exception here to prevent LytroKit from crashing app + } + } + } named:@"dispatch_rn_event"]; + } + + // UITableView + void (^tableViewBlock)(UITableView *tableView, + SEL cmd, + id delegate) = + ^(UITableView *tableView, SEL cmd, id delegate) { + if (!delegate) { + return; + } + + [self matchView:tableView delegate:delegate]; + }; + [FBSDKSwizzler swizzleSelector:@selector(setDelegate:) + onClass:[UITableView class] + withBlock:tableViewBlock + named:@"match_table_view"]; + // UICollectionView + void (^collectionViewBlock)(UICollectionView *collectionView, + SEL cmd, + id delegate) = + ^(UICollectionView *collectionView, SEL cmd, id delegate) { + if (nil == delegate) { + return; + } + + [self matchView:collectionView delegate:delegate]; + }; + [FBSDKSwizzler swizzleSelector:@selector(setDelegate:) + onClass:[UICollectionView class] + withBlock:collectionViewBlock + named:@"handle_collection_view"]; +} + +- (void)rematchBindings { + if (0 == eventBindings.count) { + return; + } + + NSArray *windows = [UIApplication sharedApplication].windows; + for (UIWindow *window in windows) { + [self matchSubviewsIn:window]; + } +} + +- (void)matchSubviewsIn:(UIView *)view { + if (!view) { + return; + } + + for (UIView *subview in view.subviews) { + BOOL isValidClass = NO; + for (Class cls in validClasses) { + if ([subview isKindOfClass:cls]) { + isValidClass = YES; + break; + } + } + + if (isValidClass) { + if ([subview isKindOfClass:[UITableView class]]) { + UITableView *tableView = (UITableView *)subview; + if (tableView.delegate) { + [self matchView:subview delegate:tableView.delegate]; + } + } else if ([subview isKindOfClass:[UICollectionView class]]) { + UICollectionView *collectionView = (UICollectionView *)subview; + if (collectionView.delegate) { + [self matchView:subview delegate:collectionView.delegate]; + } + } else { + [self matchView:subview delegate:nil]; + } + } + + if (![subview isKindOfClass:[UIControl class]]) { + [self matchSubviewsIn:subview]; + } + } +} + +// check if the view is matched to any event +- (void)matchView:(UIView *)view delegate:(id)delegate { + if (0 == eventBindings.count) { + return; + } + + fb_dispatch_on_main_thread(^{ + if (![view window]) { + return; + } + + NSArray *path = [FBSDKViewHierarchy getPath:view]; + + fb_dispatch_on_default_thread(^{ + if ([view isKindOfClass:[UIControl class]]) { + UIControl *control = (UIControl *)view; + for (FBSDKEventBinding *binding in self->eventBindings) { + if ([FBSDKEventBinding isPath:binding.path matchViewPath:path]) { + fb_dispatch_on_main_thread(^{ + [control addTarget:binding + action:@selector(trackEvent:) + forControlEvents:UIControlEventTouchUpInside]; + }); + break; + } + } + } else if (self->hasReactNative + && [view respondsToSelector:@selector(reactTag)]) { + for (FBSDKEventBinding *binding in self->eventBindings) { + if ([FBSDKEventBinding isPath:binding.path matchViewPath:path]) { + fb_dispatch_on_main_thread(^{ + if (view) { + NSNumber *reactTag = [FBSDKViewHierarchy getViewReactTag:view]; + if (reactTag != nil) { + self->reactBindings[reactTag] = binding; + } + } + }); + break; + } + } + } else if ([view isKindOfClass:[UITableView class]] + && [delegate conformsToProtocol:@protocol(UITableViewDelegate)]) { + fb_dispatch_on_default_thread(^{ + NSMutableSet *matchedBindings = [NSMutableSet set]; + for (FBSDKEventBinding *binding in self->eventBindings) { + if (binding.path.count > 1) { + NSArray *shortPath = [binding.path + subarrayWithRange:NSMakeRange(0, binding.path.count - 1)]; + if ([FBSDKEventBinding isPath:shortPath matchViewPath:path]) { + [matchedBindings addObject:binding]; + } + } + } + + if (matchedBindings.count > 0) { + NSArray *bindings = matchedBindings.allObjects; + void (^block)(id, SEL, id, id) = ^(id target, SEL command, UITableView *tableView, NSIndexPath *indexPath) { + fb_dispatch_on_main_thread(^{ + for (FBSDKEventBinding *binding in bindings) { + FBSDKCodelessPathComponent *component = binding.path.lastObject; + if ((component.section == -1 || component.section == indexPath.section) + && (component.row == -1 || component.row == indexPath.row)) { + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + [binding trackEvent:cell]; + } + } + }); + }; + [FBSDKSwizzler swizzleSelector:@selector(tableView:didSelectRowAtIndexPath:) + onClass:[delegate class] + withBlock:block + named:@"handle_table_view"]; + } + }); + } else if ([view isKindOfClass:[UICollectionView class]] + && [delegate conformsToProtocol:@protocol(UICollectionViewDelegate)]) { + fb_dispatch_on_default_thread(^{ + NSMutableSet *matchedBindings = [NSMutableSet set]; + for (FBSDKEventBinding *binding in self->eventBindings) { + if (binding.path.count > 1) { + NSArray *shortPath = [binding.path + subarrayWithRange:NSMakeRange(0, binding.path.count - 1)]; + if ([FBSDKEventBinding isPath:shortPath matchViewPath:path]) { + [matchedBindings addObject:binding]; + } + } + } + + if (matchedBindings.count > 0) { + NSArray *bindings = matchedBindings.allObjects; + void (^block)(id, SEL, id, id) = ^(id target, SEL command, UICollectionView *collectionView, NSIndexPath *indexPath) { + fb_dispatch_on_main_thread(^{ + for (FBSDKEventBinding *binding in bindings) { + FBSDKCodelessPathComponent *component = binding.path.lastObject; + if ((component.section == -1 || component.section == indexPath.section) + && (component.row == -1 || component.row == indexPath.row)) { + UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; + [binding trackEvent:cell]; + } + } + }); + }; + [FBSDKSwizzler swizzleSelector:@selector(collectionView:didSelectItemAtIndexPath:) + onClass:[delegate class] + withBlock:block + named:@"handle_collection_view"]; + } + }); + } + }); + }); +} + +#pragma clang diagnostic pop +- (void)updateBindings:(NSArray *)bindings { + eventBindings = bindings; + [reactBindings removeAllObjects]; + fb_dispatch_on_main_thread(^{ + [self rematchBindings]; + }); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h new file mode 100644 index 0000000000..4f1125832d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h @@ -0,0 +1,40 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface FBSDKViewHierarchy : NSObject + ++ (NSObject *)getParent:(NSObject *)obj; ++ (NSArray *)getChildren:(NSObject *)obj; ++ (NSArray *)getPath:(NSObject *)obj; ++ (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj; + ++ (NSString *)getText:(NSObject *)obj; ++ (NSString *)getHint:(NSObject *)obj; ++ (NSIndexPath *)getIndexPath:(NSObject *)obj; ++ (NSUInteger)getClassBitmask:(NSObject *)obj; ++ (UITableView *)getParentTableView:(UIView *)cell; ++ (UICollectionView *)getParentCollectionView:(UIView *)cell; ++ (NSInteger)getTag:(NSObject *)obj; ++ (NSNumber *)getViewReactTag:(UIView *)view; + ++ (BOOL)isUserInputView:(NSObject *)obj; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m new file mode 100644 index 0000000000..15bcc85281 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m @@ -0,0 +1,628 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKViewHierarchy.h" + +#import + +#import + +#import "FBSDKCodelessMacros.h" +#import "FBSDKCodelessPathComponent.h" +#import "FBSDKCoreKit+Internal.h" + +#define MAX_VIEW_HIERARCHY_LEVEL 35 + +typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { + /*! Indicates that the class is subclass of UIControl */ + FBCodelessClassBitmaskUIControl = 1 << 3, + /*! Indicates that the class is subclass of UIControl */ + FBCodelessClassBitmaskUIButton = 1 << 4, + /*! Indicates that the class is ReactNative Button */ + FBCodelessClassBitmaskReactNativeButton = 1 << 6, + /*! Indicates that the class is UITableViewCell */ + FBCodelessClassBitmaskUITableViewCell = 1 << 7, + /*! Indicates that the class is UICollectionViewCell */ + FBCodelessClassBitmaskUICollectionViewCell = 1 << 8, + /*! Indicates that the class is UILabel */ + FBCodelessClassBitmaskLabel = 1 << 10, + /*! Indicates that the class is UITextView or UITextField*/ + FBCodelessClassBitmaskInput = 1 << 11, + /*! Indicates that the class is UIPicker*/ + FBCodelessClassBitmaskPicker = 1 << 12, + /*! Indicates that the class is UISwitch*/ + FBCodelessClassBitmaskSwitch = 1 << 13, + /*! Indicates that the class is UIViewController*/ + FBCodelessClassBitmaskUIViewController = 1 << 17, +}; + +@implementation FBSDKViewHierarchy + ++ (NSArray*)getChildren:(NSObject*)obj +{ + if ([obj isKindOfClass:[UIControl class]]) { + return nil; + } + + NSMutableArray *children = [NSMutableArray array]; + + // children of window should be viewcontroller + if ([obj isKindOfClass:[UIWindow class]]) { + UIViewController *rootVC = ((UIWindow *)obj).rootViewController; + NSArray *subviews = ((UIWindow *)obj).subviews; + for (UIView *child in subviews) { + if (child != rootVC.view) { + UIViewController *vc = [FBSDKViewHierarchy getParentViewController:child]; + if (vc != nil && vc.view == child) { + [children addObject:vc]; + } else { + [children addObject:child]; + } + } else { + if (rootVC) { + [children addObject:rootVC]; + } + } + } + } else if ([obj isKindOfClass:[UIView class]]) { + NSArray *subviews = [((UIView *)obj).subviews copy]; + for (UIView *child in subviews) { + UIViewController *vc = [FBSDKViewHierarchy getParentViewController:child]; + if (vc && vc.view == child) { + [children addObject:vc]; + } else { + [children addObject:child]; + } + } + } else if ([obj isKindOfClass:[UINavigationController class]]) { + UIViewController *vc = ((UINavigationController*)obj).visibleViewController; + UIViewController *tc = ((UINavigationController*)obj).topViewController; + NSArray *nextChildren = [FBSDKViewHierarchy getChildren:((UIViewController*)obj).view]; + for (NSObject *child in nextChildren) { + if (tc && [self isView:child superViewOfView:tc.view]) { + [children addObject:tc]; + } else if (vc && [self isView:child superViewOfView:vc.view]) { + [children addObject:vc]; + } else { + if (child != vc.view && child != tc.view) { + [children addObject:child]; + } else { + if (vc && child == vc.view) { + [children addObject:vc]; + } else if (tc && child == tc.view) { + [children addObject:tc]; + } + } + } + } + + if (vc && ![children containsObject:vc]) { + [children addObject:vc]; + } + } else if ([obj isKindOfClass:[UITabBarController class]]) { + UIViewController *vc = ((UITabBarController *)obj).selectedViewController; + NSArray *nextChildren = [FBSDKViewHierarchy getChildren:((UIViewController*)obj).view]; + for (NSObject *child in nextChildren) { + if (vc && [self isView:child superViewOfView:vc.view]) { + [children addObject:vc]; + } else { + if (vc && child == vc.view) { + [children addObject:vc]; + } else { + [children addObject:child]; + } + } + } + + if (vc && ![children containsObject:vc]) { + [children addObject:vc]; + } + } else if ([obj isKindOfClass:[UIViewController class]]) { + UIViewController *vc = (UIViewController *)obj; + if (vc.isViewLoaded) { + NSArray *nextChildren = [FBSDKViewHierarchy getChildren:vc.view]; + if (nextChildren.count > 0) { + [children addObjectsFromArray:nextChildren]; + } + } + for (NSObject *child in vc.childViewControllers) { + [children addObject:child]; + } + UIViewController *presentedVC = vc.presentedViewController; + if (presentedVC) { + [children addObject:presentedVC]; + } + } + return children; +} + ++ (NSObject *)getParent:(NSObject *)obj +{ + if ([obj isKindOfClass:[UIView class]]) { + UIView *superview = ((UIView *)obj).superview; + UIViewController *superviewViewController = [FBSDKViewHierarchy + getParentViewController:superview]; + if (superviewViewController && superviewViewController.view == superview) { + return superviewViewController; + } + if (superview && superview != obj) { + return superview; + } + } + else if ([obj isKindOfClass:[UIViewController class]]) { + UIViewController *vc = (UIViewController *)obj; + UIViewController *parentVC = vc.parentViewController; + UIViewController *presentingVC = vc.presentingViewController; + UINavigationController *nav = vc.navigationController; + UITabBarController *tab = vc.tabBarController; + + if (nav) { + return nav; + } + + if (tab) { + return tab; + } + + if (parentVC) { + return parentVC; + } + + if (presentingVC && presentingVC.presentedViewController == vc) { + return presentingVC; + } + + // Return parent of view of UIViewController + NSObject *viewParent = [FBSDKViewHierarchy getParent:vc.view]; + if (viewParent) { + return viewParent; + } + } + return nil; +} + ++ (NSArray *)getPath:(NSObject *)obj +{ + return [FBSDKViewHierarchy getPath:obj limit:MAX_VIEW_HIERARCHY_LEVEL]; +} + ++ (NSArray *)getPath:(NSObject *)obj limit:(int)limit +{ + if (!obj || limit <= 0) { + return nil; + } + + NSMutableArray *path; + + NSObject *parent = [FBSDKViewHierarchy getParent:obj]; + if (parent) { + NSArray *parentPath = [FBSDKViewHierarchy getPath:parent limit:limit - 1]; + path = [NSMutableArray arrayWithArray:parentPath]; + } else { + path = [NSMutableArray array]; + } + + NSDictionary *componentInfo = [FBSDKViewHierarchy getAttributesOf:obj parent:parent]; + + FBSDKCodelessPathComponent *pathComponent = [[FBSDKCodelessPathComponent alloc] + initWithJSON:componentInfo]; + [path addObject:pathComponent]; + + return [NSArray arrayWithArray:path]; +} + ++ (NSDictionary *)getAttributesOf:(NSObject *)obj parent:(NSObject *)parent +{ + NSMutableDictionary *componentInfo = [NSMutableDictionary dictionary]; + componentInfo[CODELESS_MAPPING_CLASS_NAME_KEY] = NSStringFromClass([obj class]); + + if (![FBSDKViewHierarchy isUserInputView:obj]) { + NSString *text = [FBSDKViewHierarchy getText:obj]; + if (text) { + componentInfo[CODELESS_MAPPING_TEXT_KEY] = text; + } + } else { + componentInfo[CODELESS_MAPPING_TEXT_KEY] = @""; + componentInfo[CODELESS_MAPPING_IS_USER_INPUT_KEY] = @YES; + } + + NSString *hint = [FBSDKViewHierarchy getHint:obj]; + if (hint) { + componentInfo[CODELESS_MAPPING_HINT_KEY] = hint; + } + + NSIndexPath *indexPath = [FBSDKViewHierarchy getIndexPath:obj]; + if (indexPath) { + componentInfo[CODELESS_MAPPING_SECTION_KEY] = @(indexPath.section); + componentInfo[CODELESS_MAPPING_ROW_KEY] = @(indexPath.row); + } + + if (parent != nil) { + NSArray *children = [FBSDKViewHierarchy getChildren:parent]; + NSUInteger index = [children indexOfObject:obj]; + if (index != NSNotFound) { + componentInfo[CODELESS_MAPPING_INDEX_KEY] = @(index); + } + } else { + componentInfo[CODELESS_MAPPING_INDEX_KEY] = @0; + } + + componentInfo[CODELESS_VIEW_TREE_TAG_KEY] = @([FBSDKViewHierarchy getTag:obj]); + + return [componentInfo copy]; +} + ++ (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj +{ + if (!obj) { + return nil; + } + + NSObject *parent = [FBSDKViewHierarchy getParent:obj]; + + NSDictionary *simpleAttributes = [FBSDKViewHierarchy getAttributesOf:obj parent:parent]; + + NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:simpleAttributes]; + + NSString *className = NSStringFromClass([obj class]); + result[CODELESS_VIEW_TREE_CLASS_NAME_KEY] = className; + + NSUInteger classBitmask = [FBSDKViewHierarchy getClassBitmask:obj]; + result[CODELESS_VIEW_TREE_CLASS_TYPE_BIT_MASK_KEY] = [NSString stringWithFormat:@"%lu", (unsigned long)classBitmask]; + + if ([obj isKindOfClass:[UIControl class]]) { + // Get actions of UIControl + UIControl *control = (UIControl *)obj; + NSMutableSet *actions = [NSMutableSet set]; + NSSet *targets = control.allTargets; + for (NSObject *target in targets) { + NSArray *ary = [control actionsForTarget:target forControlEvent:0]; + if (ary.count > 0) { + [actions addObjectsFromArray:ary]; + } + } + if (targets.count > 0) { + result[CODELESS_VIEW_TREE_ACTIONS_KEY] = actions.allObjects; + } + } + + result[CODELESS_VIEW_TREE_DIMENSION_KEY] = [FBSDKViewHierarchy getDimensionOf:obj]; + + NSDictionary *textStyle = [FBSDKViewHierarchy getTextStyle:obj]; + if (textStyle) { + result[CODELESS_VIEW_TREE_TEXT_STYLE_KEY] = textStyle; + } + + return result; +} + ++ (NSIndexPath *)getIndexPath:(NSObject *)obj +{ + NSIndexPath *indexPath = nil; + + if ([obj isKindOfClass:[UITableViewCell class]]) { + UITableView *tableView = [FBSDKViewHierarchy getParentTableView:(UIView *)obj]; + indexPath = [tableView indexPathForCell:(UITableViewCell *)obj]; + } else if ([obj isKindOfClass:[UICollectionViewCell class]]) { + UICollectionView *collectionView = [FBSDKViewHierarchy getParentCollectionView:(UIView *)obj]; + indexPath = [collectionView indexPathForCell:(UICollectionViewCell *)obj]; + } + + return indexPath; +} + ++ (NSString *)getText:(NSObject *)obj +{ + NSString *text = nil; + + if ([obj isKindOfClass:[UIButton class]]) { + text = ((UIButton *)obj).currentTitle; + } else if ([obj isKindOfClass:[UITextView class]] || + [obj isKindOfClass:[UITextField class]] || + [obj isKindOfClass:[UILabel class]]) { + text = ((UILabel *)obj).text; + } else if ([obj isKindOfClass:[UIPickerView class]]) { + UIPickerView *picker = (UIPickerView *)obj; + NSInteger sections = picker.numberOfComponents; + NSMutableArray *titles = [NSMutableArray array]; + + for (NSInteger i = 0; i < sections; i++) { + NSInteger row = [picker selectedRowInComponent:i]; + NSString *title; + if ([picker.delegate + respondsToSelector:@selector(pickerView:titleForRow:forComponent:)]) { + title = [picker.delegate pickerView:picker titleForRow:row forComponent:i]; + } else if ([picker.delegate + respondsToSelector:@selector(pickerView:attributedTitleForRow:forComponent:)]) { + title = [picker.delegate + pickerView:picker + attributedTitleForRow:row forComponent:i].string; + } + [titles addObject:title ?: @""]; + } + + if (titles.count > 0) { + text = [FBSDKInternalUtility JSONStringForObject:titles + error:NULL + invalidObjectHandler:NULL]; + } + } else if ([obj isKindOfClass:[UIDatePicker class]]) { + UIDatePicker *picker = (UIDatePicker *)obj; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"yyyy-MM-dd HH:mm:ssZ"; + text = [formatter stringFromDate:picker.date]; + } else if ([obj isKindOfClass:objc_lookUpClass("RCTTextView")]) { + NSTextStorage *textStorage = [FBSDKAppEventsUtility getVariable:@"_textStorage" + fromInstance:obj]; + if (textStorage) { + text = textStorage.string; + } + } else if ([obj isKindOfClass:objc_lookUpClass("RCTBaseTextInputView")]) { + NSAttributedString *attributedText = [FBSDKAppEventsUtility getVariable:@"attributedText" + fromInstance:obj]; + text = attributedText.string; + } + + return text.length > 0 ? text : nil; +} + ++ (NSDictionary *)getTextStyle:(NSObject *)obj +{ + UIFont *font = nil; + if ([obj isKindOfClass:[UIButton class]]) { + font = ((UIButton *)obj).titleLabel.font; + } else if ([obj isKindOfClass:[UILabel class]]) { + font = ((UILabel *)obj).font; + } else if ([obj isKindOfClass:[UITextField class]]) { + font = ((UITextField *)obj).font; + } else if ([obj isKindOfClass:[UITextView class]]) { + font = ((UITextView *)obj).font; + } + + if (font) { + UIFontDescriptorSymbolicTraits traits = font.fontDescriptor.symbolicTraits; + BOOL isBold = (traits & UIFontDescriptorTraitBold) != 0; + BOOL isItalic = (traits & UIFontDescriptorTraitItalic) != 0; + CGFloat fontSize = font.pointSize; + + return @{ + CODELESS_VIEW_TREE_TEXT_IS_BOLD_KEY: @(isBold), + CODELESS_VIEW_TREE_TEXT_IS_ITALIC_KEY: @(isItalic), + CODELESS_VIEW_TREE_TEXT_SIZE_KEY: @(fontSize) + }; + } + + return nil; +} + ++ (NSString *)getHint:(NSObject *)obj +{ + NSString *hint = nil; + + if ([obj isKindOfClass:[UITextField class]]) { + hint = ((UITextField *)obj).placeholder; + } else if ([obj isKindOfClass:[UINavigationController class]]) { + UIViewController *top = ((UINavigationController *)obj).topViewController; + if (top) { + hint = NSStringFromClass([top class]); + } + } + + return hint.length > 0 ? hint : nil; +} + ++ (NSUInteger)getClassBitmask:(NSObject *)obj +{ + NSUInteger bitmask = 0; + + if ([obj isKindOfClass:[UIView class]]) { + if ([obj isKindOfClass:[UIControl class]]) { + bitmask |= FBCodelessClassBitmaskUIControl; + if ([obj isKindOfClass:[UIButton class]]) { + bitmask |= FBCodelessClassBitmaskUIButton; + } else if ([obj isKindOfClass:[UISwitch class]]) { + bitmask |= FBCodelessClassBitmaskSwitch; + }else if ([obj isKindOfClass:[UIDatePicker class]]) { + bitmask |= FBCodelessClassBitmaskPicker; + } + } else if ([obj isKindOfClass:[UITableViewCell class]]) { + bitmask |= FBCodelessClassBitmaskUITableViewCell; + } else if ([obj isKindOfClass:[UICollectionViewCell class]]) { + bitmask |= FBCodelessClassBitmaskUICollectionViewCell; + } else if ([obj isKindOfClass:[UIPickerView class]]) { + bitmask |= FBCodelessClassBitmaskPicker; + } else if ([obj isKindOfClass:[UILabel class]]) { + bitmask |= FBCodelessClassBitmaskLabel; + } + + if ([FBSDKViewHierarchy isRCTButton:((UIView *)obj)]) { + bitmask |= FBCodelessClassBitmaskReactNativeButton; + } + + // Check selector of UITextInput protocol instead of checking conformsToProtocol + if ([obj respondsToSelector:@selector(textInRange:)]) { + bitmask |= FBCodelessClassBitmaskInput; + } + } else if ([obj isKindOfClass:[UIViewController class]]) { + bitmask |= FBCodelessClassBitmaskUIViewController; + } + + return bitmask; +} + ++ (BOOL)isUserInputView:(NSObject *)obj +{ + if (obj && [obj conformsToProtocol:@protocol(UITextInput)]) { + id input = (id)obj; + if ([input respondsToSelector:@selector(isSecureTextEntry)] + && input.secureTextEntry) { + return YES; + } else { + if ([input respondsToSelector:@selector(keyboardType)]) { + switch (input.keyboardType) { + case UIKeyboardTypePhonePad: + case UIKeyboardTypeEmailAddress: + return YES; + default: break; + } + } + } + } + + NSString *text = [FBSDKViewHierarchy getText:obj]; + return text && [FBSDKAppEventsUtility isSensitiveUserData:text]; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" ++ (BOOL)isRCTButton:(UIView *)view +{ + if (view == nil) { + return NO; + } + + Class classRCTView = objc_lookUpClass(ReactNativeClassRCTView); + if (classRCTView && [view isKindOfClass:classRCTView] && + [view respondsToSelector:@selector(reactTagAtPoint:)] && + [view respondsToSelector:@selector(reactTag)] && + view.userInteractionEnabled) { + // We check all its subviews locations and the view is clickable if there exists one that mathces reactTagAtPoint + for (UIView *subview in view.subviews) { + if (subview && ![subview isKindOfClass:classRCTView]) { + NSNumber *reactTag = [view performSelector:@selector(reactTagAtPoint:) + withObject:[NSValue valueWithCGPoint:subview.frame.origin]]; + NSNumber *subviewReactTag = [FBSDKViewHierarchy getViewReactTag:subview]; + if (reactTag != nil && subviewReactTag != nil && [reactTag isEqualToNumber:subviewReactTag]) { + return YES; + } + } + } + } + + return NO; +} + ++ (NSNumber *)getViewReactTag:(UIView *)view +{ + if (view != nil && [view respondsToSelector:@selector(reactTag)]) { + NSNumber *reactTag = [view performSelector:@selector(reactTag)]; + if (reactTag != nil && [reactTag isKindOfClass:[NSNumber class]]) { + return reactTag; + } + } + + return nil; +} +#pragma clang diagnostic pop + ++ (BOOL)isView:(NSObject *)obj1 superViewOfView:(UIView *)obj2 +{ + if (![obj1 isKindOfClass:[UIView class]] + || ![obj2 isKindOfClass:[UIView class]]) { + return NO; + } + UIView *view1 = (UIView *)obj1; + UIView *view2 = (UIView *)obj2; + UIView *superview = view2; + while (superview) { + superview = superview.superview; + if (superview == view1) { + return YES; + } + } + + return NO; +} + ++ (UIViewController *)getParentViewController:(UIView *)view +{ + UIResponder *parentResponder = view; + + while (parentResponder) { + parentResponder = parentResponder.nextResponder; + if ([parentResponder isKindOfClass:[UIViewController class]]) { + return (UIViewController *)parentResponder; + } + } + + return nil; +} + ++ (UITableView *)getParentTableView:(UIView *)cell +{ + UIView *superview = cell.superview; + while (superview) { + if ([superview isKindOfClass:[UITableView class]]) { + return (UITableView *)superview; + } + superview = superview.superview; + } + return nil; +} + ++ (UICollectionView *)getParentCollectionView:(UIView *)cell +{ + UIView *superview = cell.superview; + while (superview) { + if ([superview isKindOfClass:[UICollectionView class]]) { + return (UICollectionView *)superview; + } + superview = superview.superview; + } + return nil; +} + ++ (NSInteger)getTag:(NSObject *)obj +{ + if ([obj isKindOfClass:[UIView class]]) { + return ((UIView *)obj).tag; + } else if ([obj isKindOfClass:[UIViewController class]]) { + return ((UIViewController *)obj).view.tag; + } + + return 0; +} + ++ (NSDictionary *)getDimensionOf:(NSObject *)obj +{ + UIView *view = nil; + + if ([obj isKindOfClass:[UIView class]]) { + view = (UIView *)obj; + } else if ([obj isKindOfClass:[UIViewController class]]) { + view = ((UIViewController *)obj).view; + } + + CGRect frame = view.frame; + CGPoint offset = CGPointZero; + + if ([view isKindOfClass:[UIScrollView class]]) + offset = ((UIScrollView *)view).contentOffset; + + return @{ + CODELESS_VIEW_TREE_TOP_KEY: @((int)frame.origin.y), + CODELESS_VIEW_TREE_LEFT_KEY: @((int)frame.origin.x), + CODELESS_VIEW_TREE_WIDTH_KEY: @((int)frame.size.width), + CODELESS_VIEW_TREE_HEIGHT_KEY: @((int)frame.size.height), + CODELESS_VIEW_TREE_OFFSET_X_KEY: @((int)offset.x), + CODELESS_VIEW_TREE_OFFSET_Y_KEY: @((int)offset.y), + CODELESS_VIEW_TREE_VISIBILITY_KEY: view.isHidden ? @4 : @0 + }; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h new file mode 100644 index 0000000000..41ab684754 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h @@ -0,0 +1,211 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppEventsUtility.h" + +@class FBSDKGraphRequest; + +// Internally known event names + +FOUNDATION_EXPORT NSString *const FBSDKAppEventNamePurchased; + +/** Use to log that the share dialog was launched */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareSheetLaunch; + +/** Use to log that the share dialog was dismissed */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareSheetDismiss; + +/** Use to log that the permissions UI was launched */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNamePermissionsUILaunch; + +/** Use to log that the permissions UI was dismissed */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNamePermissionsUIDismiss; + +/** Use to log that the login view was used */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameLoginViewUsage; + +/*! Use to log that the share tray launched. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareTrayDidLaunch; + +/*! Use to log that the person selected a sharing target. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareTrayDidSelectActivity; + +// Internally known event parameters + +/** String parameter specifying the outcome of a dialog invocation */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogOutcome; + +/** Parameter key used to specify which application launches this application. */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLaunchSource; + +/** Use to log the result of a call to FBDialogs presentShareDialogWithParams: */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentShareDialog; + +/** Use to log the result of a call to FBDialogs presentShareDialogWithOpenGraphActionParams: */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogOG; + +/** Use to log the result of a call to FBDialogs presentLikeDialogWithLikeParams: */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentLikeDialogOG; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogPhoto; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialog; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogPhoto; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogOG; + +/** Use to log the start of an auth request that cannot be fulfilled by the token cache */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthStart; + +/** Use to log the end of an auth request that was not fulfilled by the token cache */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthEnd; + +/** Use to log the start of a specific auth method as part of an auth request */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthMethodStart; + +/** Use to log the end of the last tried auth method as part of an auth request */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthMethodEnd; + +/** Use to log the timestamp for the transition to the Facebook native login dialog */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogStart; + +/** Use to log the timestamp for the transition back to the app after the Facebook native login dialog */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogEnd; + +/** Use to log the e2e timestamp metrics for web login */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsWebLoginCompleted; + +/** Use to log the result of the App Switch OS AlertView. Only available on OS >= iOS10 */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionFASLoginDialogResult; + +/** Use to log the live streaming events from sdk */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingStart; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingStop; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingPause; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingResume; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingError; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingUpdateStatus; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingVideoID; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingMic; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingCamera; + +/** Use to log the results of a share dialog */ +FOUNDATION_EXPORT NSString *const FBSDLAppEventNameFBSDKEventShareDialogResult; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogResult; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogResult; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventShareDialogShow; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogShow; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogShow; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogMode; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentType; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentUUID; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentPageID; + +/*! Use to log parameters for share tray use */ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterShareTrayActivityName; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterShareTrayResult; + +/*! Use to log parameters for live streaming*/ +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingPrevStatus; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingStatus; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingError; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingVideoID; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingMicEnabled; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingCameraEnabled; + +// Internally known event parameter values + +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogOutcomeValue_Completed; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogOutcomeValue_Cancelled; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogOutcomeValue_Failed; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeOpenGraph; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeStatus; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypePhoto; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeVideo; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeCamera; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeMessengerGenericTemplate; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeMessengerMediaTemplate; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeMessengerOpenGraphMusicTemplate; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeUnknown; + + +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeAutomatic; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeBrowser; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeNative; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeShareSheet; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeWeb; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeFeedBrowser; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeFeedWeb; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeUnknown; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventsNativeLoginDialogStartTime; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsNativeLoginDialogEndTime; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWebLoginE2E; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeButtonImpression; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLoginButtonImpression; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKSendButtonImpression; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKShareButtonImpression; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonImpression; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKSmartLoginService; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeButtonDidTap; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLoginButtonDidTap; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKSendButtonDidTap; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKShareButtonDidTap; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonDidTap; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidDisable; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidLike; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidPresentDialog; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidTap; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidUnlike; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlError; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlImpression; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlNetworkUnavailable; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogErrorMessage; +FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLogTime; + +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesHandlerKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesActionKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesEventKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesParamsKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackCustomKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackSingleKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackSingleCustomKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelIDKey; + +@interface FBSDKAppEvents (Internal) + ++ (void)logImplicitEvent:(NSString *)eventName + valueToSum:(NSNumber *)valueToSum + parameters:(NSDictionary *)parameters + accessToken:(FBSDKAccessToken *)accessToken; + ++ (FBSDKAppEvents *)singleton; +- (void)flushForReason:(FBSDKAppEventsFlushReason)flushReason; +- (void)registerNotifications; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h new file mode 100644 index 0000000000..2de04b854d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKAppEventsDeviceInfo : NSObject + ++ (void)extendDictionaryWithDeviceInfo:(NSMutableDictionary *)dictionary; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m new file mode 100644 index 0000000000..11106fa396 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m @@ -0,0 +1,278 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppEventsDeviceInfo.h" + +#import +#import + +#if !TARGET_OS_TV +#import +#import +#endif +#import +#import + +#import "FBSDKAppEvents+Internal.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKUtility.h" + +#define FB_ARRAY_COUNT(x) sizeof(x) / sizeof(x[0]) + +static const u_int FB_GROUP1_RECHECK_DURATION = 30 * 60; // seconds + +// Apple reports storage in binary gigabytes (1024^3) in their About menus, etc. +static const u_int FB_GIGABYTE = 1024 * 1024 * 1024; // bytes + +@implementation FBSDKAppEventsDeviceInfo +{ + // Ephemeral data, may change during the lifetime of an app. We collect them in different + // 'group' frequencies - group1 may gets collected once every 30 minutes. + + // group1 + NSString *_carrierName; + NSString *_timeZoneAbbrev; + unsigned long long _remainingDiskSpaceGB; + NSString *_timeZoneName; + + // Persistent data, but we maintain it to make rebuilding the device info as fast as possible. + NSString *_bundleIdentifier; + NSString *_longVersion; + NSString *_shortVersion; + NSString *_sysVersion; + NSString *_machine; + NSString *_language; + unsigned long long _totalDiskSpaceGB; + unsigned long long _coreCount; + CGFloat _width; + CGFloat _height; + CGFloat _density; + + // Other state + long _lastGroup1CheckTime; + BOOL _isEncodingDirty; + NSString *_encodedDeviceInfo; +} + +#pragma mark - Public Methods + ++ (void)extendDictionaryWithDeviceInfo:(NSMutableDictionary *)dictionary +{ + dictionary[@"extinfo"] = [[self sharedDeviceInfo] encodedDeviceInfo]; +} + +#pragma mark - Internal Methods + ++ (void)initialize +{ + if (self == [FBSDKAppEventsDeviceInfo class]) { + [[self sharedDeviceInfo] _collectPersistentData]; + } +} + ++ (instancetype)sharedDeviceInfo +{ + static FBSDKAppEventsDeviceInfo *_sharedDeviceInfo = nil; + if (_sharedDeviceInfo == nil) { + _sharedDeviceInfo = [[FBSDKAppEventsDeviceInfo alloc] init]; + } + return _sharedDeviceInfo; +} + +- (instancetype)init +{ + if ((self = [super init])) { + _isEncodingDirty = YES; + } + return self; +} + +- (NSString *)encodedDeviceInfo +{ + @synchronized (self) { + + BOOL isGroup1Expired = [self _isGroup1Expired]; + BOOL isEncodingExpired = isGroup1Expired; // Can || other groups in if we add them + + // As long as group1 hasn't expired, we can just return the last generated value + if (_encodedDeviceInfo && !isEncodingExpired) { + return _encodedDeviceInfo; + } + + if (isGroup1Expired) { + [self _collectGroup1Data]; + } + + if (_isEncodingDirty) { + self.encodedDeviceInfo = [self _generateEncoding]; + _isEncodingDirty = NO; + } + + return _encodedDeviceInfo; + } +} + +- (void)setEncodedDeviceInfo:(NSString *)encodedDeviceInfo +{ + @synchronized (self) { + if (![_encodedDeviceInfo isEqualToString:encodedDeviceInfo]) { + _encodedDeviceInfo = [encodedDeviceInfo copy]; + } + } +} + +// This data need only be collected once. +- (void)_collectPersistentData +{ + // Bundle stuff + NSBundle *mainBundle = [NSBundle mainBundle]; + _bundleIdentifier = mainBundle.bundleIdentifier; + _longVersion = [mainBundle objectForInfoDictionaryKey:@"CFBundleVersion"]; + _shortVersion = [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + + // Locale stuff + _language = [NSLocale currentLocale].localeIdentifier; + + // Device stuff + UIDevice *device = [UIDevice currentDevice]; + _sysVersion = device.systemVersion; + _coreCount = [FBSDKAppEventsDeviceInfo _coreCount]; + + UIScreen *sc = [UIScreen mainScreen]; + CGRect sr = sc.bounds; + _width = sr.size.width; + _height = sr.size.height; + _density = sc.scale; + + struct utsname systemInfo; + uname(&systemInfo); + _machine = @(systemInfo.machine); + + // Disk space stuff + float totalDiskSpace = [FBSDKAppEventsDeviceInfo _getTotalDiskSpace].floatValue; + _totalDiskSpaceGB = (unsigned long long)round(totalDiskSpace / FB_GIGABYTE); +} + +- (BOOL)_isGroup1Expired +{ + return ([FBSDKAppEventsUtility unixTimeNow] - _lastGroup1CheckTime) > FB_GROUP1_RECHECK_DURATION; +} + +// This data is collected only once every GROUP1_RECHECK_DURATION. +- (void)_collectGroup1Data +{ + // Carrier + NSString *newCarrierName = [FBSDKAppEventsDeviceInfo _getCarrier]; + if (![newCarrierName isEqualToString:_carrierName]) { + _carrierName = newCarrierName; + _isEncodingDirty = YES; + } + + // Time zone + NSTimeZone *timeZone = [NSTimeZone systemTimeZone]; + NSString *timeZoneName = timeZone.name; + if (![timeZoneName isEqualToString:_timeZoneName]) { + _timeZoneName = timeZoneName; + _timeZoneAbbrev = timeZone.abbreviation; + _isEncodingDirty = YES; + } + + // Remaining disk space + float remainingDiskSpace = [FBSDKAppEventsDeviceInfo _getRemainingDiskSpace].floatValue; + unsigned long long newRemainingDiskSpaceGB = (unsigned long long)round(remainingDiskSpace / FB_GIGABYTE); + if (_remainingDiskSpaceGB != newRemainingDiskSpaceGB) { + _remainingDiskSpaceGB = newRemainingDiskSpaceGB; + _isEncodingDirty = YES; + } + + _lastGroup1CheckTime = [FBSDKAppEventsUtility unixTimeNow]; +} + +- (NSString *)_generateEncoding +{ + // Keep a bit of precision on density as it's the most likely to become non-integer. + NSString *densityString = _density ? [NSString stringWithFormat:@"%.02f", _density] : @""; + + NSArray *arr = @[ + @"i2", // version - starts with 'i' for iOS, we'll use 'a' for Android + _bundleIdentifier ?: @"", + _longVersion ?: @"", + _shortVersion ?: @"", + _sysVersion ?: @"", + _machine ?: @"", + _language ?: @"", + _timeZoneAbbrev ?: @"", + _carrierName ?: @"", + _width ? @((unsigned long)_width) : @"", + _height ? @((unsigned long)_height) : @"", + densityString, + @(_coreCount) ?: @"", + @(_totalDiskSpaceGB) ?: @"", + @(_remainingDiskSpaceGB) ?: @"", + _timeZoneName ?: @"" + ]; + + return [FBSDKInternalUtility JSONStringForObject:arr error:NULL invalidObjectHandler:NULL]; +} + +#pragma mark - Helper Methods + ++ (NSNumber *)_getTotalDiskSpace +{ + NSDictionary *attrs = [[[NSFileManager alloc] init] attributesOfFileSystemForPath:NSHomeDirectory() + error:nil]; + return attrs[NSFileSystemSize]; +} + ++ (NSNumber *)_getRemainingDiskSpace +{ + NSDictionary *attrs = [[[NSFileManager alloc] init] attributesOfFileSystemForPath:NSHomeDirectory() + error:nil]; + return attrs[NSFileSystemFreeSize]; +} + ++ (uint)_coreCount +{ + return [FBSDKAppEventsDeviceInfo _readSysCtlUInt:CTL_HW type:HW_AVAILCPU]; +} + ++ (uint)_readSysCtlUInt:(int)ctl type:(int)type +{ + int mib[2] = {ctl, type}; + uint value; + size_t size = sizeof value; + if (0 != sysctl(mib, FB_ARRAY_COUNT(mib), &value, &size, NULL, 0)) { + return 0; + } + return value; +} + ++ (NSString *)_getCarrier +{ +#if TARGET_OS_TV || TARGET_IPHONE_SIMULATOR + return @"NoCarrier"; +#else + // Dynamically load class for this so calling app doesn't need to link framework in. + CTTelephonyNetworkInfo *networkInfo = [[fbsdkdfl_CTTelephonyNetworkInfoClass() alloc] init]; + CTCarrier *carrier = networkInfo.subscriberCellularProvider; + return carrier.carrierName ?: @"NoCarrier"; +#endif +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h new file mode 100644 index 0000000000..5bb5c2e798 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h @@ -0,0 +1,41 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +// this type is not thread safe. +@interface FBSDKAppEventsState : NSObject + +@property (nonatomic, readonly, copy) NSArray *events; +@property (nonatomic, readonly, assign) NSUInteger numSkipped; +@property (nonatomic, readonly, copy) NSString *tokenString; +@property (nonatomic, readonly, copy) NSString *appID; +@property (nonatomic, readonly) BOOL areAllEventsImplicit; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithToken:(NSString *)tokenString appID:(NSString *)appID NS_DESIGNATED_INITIALIZER; + +- (void)addEvent:(NSDictionary *)eventDictionary isImplicit:(BOOL)isImplicit; +- (void)addEventsFromAppEventState:(FBSDKAppEventsState *)appEventsState; +- (BOOL)isCompatibleWithAppEventsState:(FBSDKAppEventsState *)appEventsState; +- (BOOL)isCompatibleWithTokenString:(NSString *)tokenString appID:(NSString *)appID; +- (NSString *)JSONStringForEvents:(BOOL)includeImplicitEvents; +- (NSString *)extractReceiptData; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m new file mode 100644 index 0000000000..cff1b8ac93 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m @@ -0,0 +1,181 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppEventsState.h" + +#import "FBSDKInternalUtility.h" + +#define FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY @"isImplicit" + +#define FBSDK_APPEVENTSSTATE_MAX_EVENTS 1000 + +#define FBSDK_APPEVENTSSTATE_APPID_KEY @"appID" +#define FBSDK_APPEVENTSSTATE_EVENTS_KEY @"events" +#define FBSDK_APPEVENTSSTATE_NUMSKIPPED_KEY @"numSkipped" +#define FBSDK_APPEVENTSSTATE_TOKENSTRING_KEY @"tokenString" +#define FBSDK_APPEVENTSTATE_RECEIPTDATA_KEY @"receipt_data" +#define FBSDK_APPEVENTSTATE_RECEIPTID_KEY @"receipt_id" + +@implementation FBSDKAppEventsState +{ + NSMutableArray *_mutableEvents; +} + +- (instancetype)initWithToken:(NSString *)tokenString appID:(NSString *)appID +{ + if ((self = [super init])) { + _tokenString = [tokenString copy]; + _appID = [appID copy]; + _mutableEvents = [NSMutableArray array]; + } + return self; +} + +- (instancetype)copyWithZone:(NSZone *)zone +{ + FBSDKAppEventsState *copy = [[FBSDKAppEventsState allocWithZone:zone] initWithToken:_tokenString appID:_appID]; + if (copy) { + [copy->_mutableEvents addObjectsFromArray:_mutableEvents]; + copy->_numSkipped = _numSkipped; + } + return copy; +} + +#pragma mark - NSCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder +{ + NSString *appID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_APPEVENTSSTATE_APPID_KEY]; + NSString *tokenString = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_APPEVENTSSTATE_TOKENSTRING_KEY]; + NSArray *events = [decoder decodeObjectOfClass:[NSArray class] forKey:FBSDK_APPEVENTSSTATE_EVENTS_KEY]; + NSUInteger numSkipped = [[decoder decodeObjectOfClass:[NSNumber class] forKey:FBSDK_APPEVENTSSTATE_NUMSKIPPED_KEY] unsignedIntegerValue]; + + if ((self = [self initWithToken:tokenString appID:appID])) { + _mutableEvents = [NSMutableArray arrayWithArray:events]; + _numSkipped = numSkipped; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)encoder +{ + [encoder encodeObject:_appID forKey:FBSDK_APPEVENTSSTATE_APPID_KEY]; + [encoder encodeObject:_tokenString forKey:FBSDK_APPEVENTSSTATE_TOKENSTRING_KEY]; + [encoder encodeObject:@(_numSkipped) forKey:FBSDK_APPEVENTSSTATE_NUMSKIPPED_KEY]; + [encoder encodeObject:_mutableEvents forKey:FBSDK_APPEVENTSSTATE_EVENTS_KEY]; +} + +#pragma mark - Implementation + +- (NSArray *)events +{ + return [_mutableEvents copy]; +} + +- (void)addEventsFromAppEventState:(FBSDKAppEventsState *)appEventsState +{ + NSArray *toAdd = appEventsState->_mutableEvents; + NSInteger excess = _mutableEvents.count + toAdd.count - FBSDK_APPEVENTSSTATE_MAX_EVENTS; + if (excess > 0) { + NSInteger range = FBSDK_APPEVENTSSTATE_MAX_EVENTS - _mutableEvents.count; + toAdd = [toAdd subarrayWithRange:NSMakeRange(0, range)]; + _numSkipped += excess; + } + + [_mutableEvents addObjectsFromArray:toAdd]; +} + +- (void)addEvent:(NSDictionary *)eventDictionary + isImplicit:(BOOL)isImplicit { + if (_mutableEvents.count >= FBSDK_APPEVENTSSTATE_MAX_EVENTS) { + _numSkipped++; + } else { + [_mutableEvents addObject:@{ + @"event" : [eventDictionary mutableCopy], + FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY : @(isImplicit) + }]; + } +} + +- (NSString *)extractReceiptData { + NSMutableString *receipts_string = [NSMutableString string]; + NSInteger transactionId = 1; + for (NSMutableDictionary* events in _mutableEvents) { + NSMutableDictionary *event = events[@"event"]; + + NSString* receipt = event[@"receipt_data"]; + // Add receipt id as the identifier for receipt data in event parameter. + // Receipt data will be sent as post parameter rather than the event parameter + if (receipt) { + NSString* idKey = [NSString stringWithFormat:@"receipt_%ld", (long)transactionId]; + event[FBSDK_APPEVENTSTATE_RECEIPTID_KEY] = idKey; + NSString* receiptWithId = [NSString stringWithFormat:@"%@::%@;;;", idKey, receipt]; + [receipts_string appendString:receiptWithId]; + transactionId++; + } + } + return receipts_string; +} + +- (BOOL)areAllEventsImplicit +{ + for (NSDictionary *event in _mutableEvents) { + if (![[event valueForKey:FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY] boolValue]) { + return NO; + } + } + return YES; +} + +- (BOOL)isCompatibleWithAppEventsState:(FBSDKAppEventsState *)appEventsState +{ + return ([self isCompatibleWithTokenString:appEventsState.tokenString appID:appEventsState.appID]); +} + +- (BOOL)isCompatibleWithTokenString:(NSString *)tokenString appID:(NSString *)appID +{ + // token strings can be nil (e.g., no user token) but appIDs should not. + BOOL tokenCompatible = ([self.tokenString isEqualToString:tokenString] || + (self.tokenString == nil && tokenString == nil)); + return (tokenCompatible && + [self.appID isEqualToString:appID]); +} + +- (NSString *)JSONStringForEvents:(BOOL)includeImplicitEvents +{ + NSMutableArray *events = [[NSMutableArray alloc] initWithCapacity:_mutableEvents.count]; + for (NSDictionary *eventAndImplicitFlag in _mutableEvents) { + if (!includeImplicitEvents && [eventAndImplicitFlag[FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY] boolValue]) { + continue; + } + NSMutableDictionary *event = eventAndImplicitFlag[@"event"]; + NSAssert(event != nil, @"event cannot be nil"); + [event removeObjectForKey:FBSDK_APPEVENTSTATE_RECEIPTDATA_KEY]; + + [events addObject:event]; + } + + return [FBSDKInternalUtility JSONStringForObject:events error:NULL invalidObjectHandler:NULL]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h new file mode 100644 index 0000000000..4c17a4c791 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h @@ -0,0 +1,34 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAppEventsState; + +@interface FBSDKAppEventsStateManager : NSObject + ++ (void)clearPersistedAppEventsStates; + +// reads all saved event states, appends the param, and writes them all. ++ (void)persistAppEventsData:(FBSDKAppEventsState *)appEventsState; + +// returns the array of saved app event states and deletes them. ++ (NSArray *)retrievePersistedAppEventsStates; + + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m new file mode 100644 index 0000000000..596d7a6223 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m @@ -0,0 +1,78 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppEventsStateManager.h" + +#import + +#import "FBSDKAppEventsState.h" +#import "FBSDKAppEventsUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" + +// A quick optimization to allow returning empty array if we know there are no persisted events. +static BOOL g_canSkipDiskCheck = NO; + +@implementation FBSDKAppEventsStateManager + ++ (void)clearPersistedAppEventsStates +{ + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + logEntry:@"FBSDKAppEvents Persist: Clearing"]; + [[NSFileManager defaultManager] removeItemAtPath:[[self class] filePath] + error:NULL]; + g_canSkipDiskCheck = YES; +} + ++ (void)persistAppEventsData:(FBSDKAppEventsState *)appEventsState +{ + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"FBSDKAppEvents Persist: Writing %lu events", (unsigned long)appEventsState.events.count]; + + if (!appEventsState.events.count) { + return; + } + NSMutableArray *existingEvents = [NSMutableArray arrayWithArray:[[self class] retrievePersistedAppEventsStates]]; + [existingEvents addObject:appEventsState]; + + [NSKeyedArchiver archiveRootObject:existingEvents toFile:[[self class] filePath]]; + g_canSkipDiskCheck = NO; +} + ++ (NSArray *)retrievePersistedAppEventsStates +{ + NSMutableArray *eventsStates = [NSMutableArray array]; + if (!g_canSkipDiskCheck) { + [eventsStates addObjectsFromArray:[NSKeyedUnarchiver unarchiveObjectWithFile:[[self class] filePath]]]; + + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"FBSDKAppEvents Persist: Read %lu event states. First state has %lu events", + (unsigned long)eventsStates.count, + (unsigned long)(eventsStates.count > 0 ? ((FBSDKAppEventsState *)eventsStates[0]).events.count : 0)]; + [[self class] clearPersistedAppEventsStates]; + } + return eventsStates; +} + +#pragma mark - Private Helpers + ++ (NSString *)filePath +{ + return [FBSDKAppEventsUtility persistenceFilePath:@"com-facebook-sdk-AppEventsPersistedEvents.json"]; +} +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h new file mode 100644 index 0000000000..42ec8c71e9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h @@ -0,0 +1,64 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAccessToken; + +typedef NS_ENUM(NSUInteger, FBSDKAdvertisingTrackingStatus) +{ + FBSDKAdvertisingTrackingAllowed, + FBSDKAdvertisingTrackingDisallowed, + FBSDKAdvertisingTrackingUnspecified +}; + +typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushReason) +{ + FBSDKAppEventsFlushReasonExplicit, + FBSDKAppEventsFlushReasonTimer, + FBSDKAppEventsFlushReasonSessionChange, + FBSDKAppEventsFlushReasonPersistedEvents, + FBSDKAppEventsFlushReasonEventThreshold, + FBSDKAppEventsFlushReasonEagerlyFlushingEvent +}; + +@interface FBSDKAppEventsUtility : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + ++ (NSMutableDictionary *)activityParametersDictionaryForEvent:(NSString *)eventCategory + implicitEventsOnly:(BOOL)implicitEventsOnly + shouldAccessAdvertisingID:(BOOL)shouldAccessAdvertisingID; ++ (NSString *)advertiserID; ++ (FBSDKAdvertisingTrackingStatus)advertisingTrackingStatus; ++ (NSString *)attributionID; ++ (void)ensureOnMainThread:(NSString *)methodName className:(NSString *)className; ++ (NSString *)flushReasonToString:(FBSDKAppEventsFlushReason)flushReason; ++ (void)logAndNotify:(NSString *)msg allowLogAsDeveloperError:(BOOL)allowLogAsDeveloperError; ++ (void)logAndNotify:(NSString *)msg; ++ (NSString *)persistenceFilePath:(NSString *)filename; ++ (NSString *)tokenStringToUseFor:(FBSDKAccessToken *)token; ++ (long)unixTimeNow; ++ (BOOL)validateIdentifier:(NSString *)identifier; ++ (id)getVariable:(NSString *)variableName fromInstance:(NSObject *)instance; ++ (NSNumber *)getNumberValue:(NSString *)text; ++ (BOOL)isDebugBuild; ++ (BOOL)isSensitiveUserData:(NSString *)text; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m new file mode 100644 index 0000000000..dae2b1bfab --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m @@ -0,0 +1,474 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppEventsUtility.h" + +#import + +#import + +#import "FBSDKAccessToken.h" +#import "FBSDKAppEvents.h" +#import "FBSDKAppEventsDeviceInfo.h" +#import "FBSDKConstants.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKError.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" +#import "FBSDKTimeSpentData.h" + +#define FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME @"com-facebook-sdk-PersistedAnonymousID.json" +#define FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY @"anon_id" +#define FBSDK_APPEVENTSUTILITY_MAX_IDENTIFIER_LENGTH 40 + +@implementation FBSDKAppEventsUtility + ++ (NSMutableDictionary *)activityParametersDictionaryForEvent:(NSString *)eventCategory + implicitEventsOnly:(BOOL)implicitEventsOnly + shouldAccessAdvertisingID:(BOOL)shouldAccessAdvertisingID { + NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; + parameters[@"event"] = eventCategory; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 + NSString *attributionID = [[self class] attributionID]; // Only present on iOS 6 and below. + [FBSDKInternalUtility dictionary:parameters setObject:attributionID forKey:@"attribution"]; +#endif + + if (!implicitEventsOnly && shouldAccessAdvertisingID) { + NSString *advertiserID = [[self class] advertiserID]; + [FBSDKInternalUtility dictionary:parameters setObject:advertiserID forKey:@"advertiser_id"]; + } + + parameters[FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY] = [self anonymousID]; + + FBSDKAdvertisingTrackingStatus advertisingTrackingStatus = [[self class] advertisingTrackingStatus]; + if (advertisingTrackingStatus != FBSDKAdvertisingTrackingUnspecified) { + BOOL allowed = (advertisingTrackingStatus == FBSDKAdvertisingTrackingAllowed); + parameters[@"advertiser_tracking_enabled"] = @(allowed).stringValue; + } + + parameters[@"application_tracking_enabled"] = @(!FBSDKSettings.limitEventAndDataUsage).stringValue; + + NSString *userID = [FBSDKAppEvents userID]; + if (userID) { + parameters[@"app_user_id"] = userID; + } + NSString *userData = [FBSDKAppEvents getUserData]; + if (userData){ + parameters[@"ud"] = userData; + } + + [FBSDKAppEventsDeviceInfo extendDictionaryWithDeviceInfo:parameters]; + + static dispatch_once_t fetchBundleOnce; + static NSMutableArray *urlSchemes; + + dispatch_once(&fetchBundleOnce, ^{ + NSBundle *mainBundle = [NSBundle mainBundle]; + urlSchemes = [[NSMutableArray alloc] init]; + for (NSDictionary *fields in [mainBundle objectForInfoDictionaryKey:@"CFBundleURLTypes"]) { + NSArray *schemesForType = fields[@"CFBundleURLSchemes"]; + if (schemesForType) { + [urlSchemes addObjectsFromArray:schemesForType]; + } + } + }); + + if (urlSchemes.count > 0) { + parameters[@"url_schemes"] = [FBSDKInternalUtility JSONStringForObject:urlSchemes error:NULL invalidObjectHandler:NULL]; + } + + return parameters; +} + ++ (NSString *)advertiserID +{ + if (![[FBSDKSettings advertiserIDCollectionEnabled] boolValue]) { + return nil; + } + + NSString *result = nil; + + Class ASIdentifierManagerClass = fbsdkdfl_ASIdentifierManagerClass(); + if ([ASIdentifierManagerClass class]) { + ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager]; + result = manager.advertisingIdentifier.UUIDString; + } + + return result; +} + ++ (FBSDKAdvertisingTrackingStatus)advertisingTrackingStatus +{ + static dispatch_once_t fetchAdvertisingTrackingStatusOnce; + static FBSDKAdvertisingTrackingStatus status; + + dispatch_once(&fetchAdvertisingTrackingStatusOnce, ^{ + status = FBSDKAdvertisingTrackingUnspecified; + Class ASIdentifierManagerClass = fbsdkdfl_ASIdentifierManagerClass(); + if ([ASIdentifierManagerClass class]) { + ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager]; + if (manager) { + status = manager.advertisingTrackingEnabled ? FBSDKAdvertisingTrackingAllowed : FBSDKAdvertisingTrackingDisallowed; + } + } + }); + + return status; +} + ++ (NSString *)anonymousID +{ + // Grab previously written anonymous ID and, if none have been generated, create and + // persist a new one which will remain associated with this app. + NSString *result = [[self class] retrievePersistedAnonymousID]; + if (!result) { + // Generate a new anonymous ID. Create as a UUID, but then prepend the fairly + // arbitrary 'XZ' to the front so it's easily distinguishable from IDFA's which + // will only contain hex. + result = [NSString stringWithFormat:@"XZ%@", [NSUUID UUID].UUIDString]; + + [self persistAnonymousID:result]; + } + return result; +} + ++ (NSString *)attributionID +{ +#if TARGET_OS_TV + return nil; +#else + return [UIPasteboard pasteboardWithName:@"fb_app_attribution" create:NO].string; +#endif +} + +// for tests only. ++ (void)clearLibraryFiles +{ + [[NSFileManager defaultManager] removeItemAtPath:[[self class] persistenceFilePath:FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME] + error:NULL]; + [[NSFileManager defaultManager] removeItemAtPath:[[self class] persistenceFilePath:FBSDKTimeSpentFilename] + error:NULL]; +} + ++ (void)ensureOnMainThread:(NSString *)methodName className:(NSString *)className +{ + FBSDKConditionalLog([NSThread isMainThread], + FBSDKLoggingBehaviorDeveloperErrors, + @"*** <%@, %@> is not called on the main thread. This can lead to errors.", + methodName, + className); +} + ++ (NSString *)flushReasonToString:(FBSDKAppEventsFlushReason)flushReason +{ + NSString *result = @"Unknown"; + switch (flushReason) { + case FBSDKAppEventsFlushReasonExplicit: + result = @"Explicit"; + break; + case FBSDKAppEventsFlushReasonTimer: + result = @"Timer"; + break; + case FBSDKAppEventsFlushReasonSessionChange: + result = @"SessionChange"; + break; + case FBSDKAppEventsFlushReasonPersistedEvents: + result = @"PersistedEvents"; + break; + case FBSDKAppEventsFlushReasonEventThreshold: + result = @"EventCountThreshold"; + break; + case FBSDKAppEventsFlushReasonEagerlyFlushingEvent: + result = @"EagerlyFlushingEvent"; + break; + } + return result; +} + ++ (void)logAndNotify:(NSString *)msg +{ + [[self class] logAndNotify:msg allowLogAsDeveloperError:YES]; +} + ++ (void)logAndNotify:(NSString *)msg allowLogAsDeveloperError:(BOOL)allowLogAsDeveloperError +{ + NSString *behaviorToLog = FBSDKLoggingBehaviorAppEvents; + if (allowLogAsDeveloperError) { + if ([FBSDKSettings.loggingBehaviors containsObject:FBSDKLoggingBehaviorDeveloperErrors]) { + // Rather than log twice, prefer 'DeveloperErrors' if it's set over AppEvents. + behaviorToLog = FBSDKLoggingBehaviorDeveloperErrors; + } + } + + [FBSDKLogger singleShotLogEntry:behaviorToLog logEntry:msg]; + NSError *error = [NSError fbErrorWithCode:FBSDKErrorAppEventsFlush message:msg]; + [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAppEventsLoggingResultNotification object:error]; +} + ++ (BOOL)matchString:(NSString *)string + firstCharacterSet:(NSCharacterSet *)firstCharacterSet +restOfStringCharacterSet:(NSCharacterSet *)restOfStringCharacterSet +{ + if (string.length == 0) { + return NO; + } + for (NSUInteger i = 0; i < string.length; i++) { + const unichar c = [string characterAtIndex:i]; + if (i == 0) { + if (![firstCharacterSet characterIsMember:c]) { + return NO; + } + } else { + if (![restOfStringCharacterSet characterIsMember:c]) { + return NO; + } + } + } + return YES; +} + ++ (BOOL)regexValidateIdentifier:(NSString *)identifier +{ + static NSCharacterSet *firstCharacterSet; + static NSCharacterSet *restOfStringCharacterSet; + static dispatch_once_t onceToken; + static NSMutableSet *cachedIdentifiers; + dispatch_once(&onceToken, ^{ + NSMutableCharacterSet *mutableSet = [NSMutableCharacterSet alphanumericCharacterSet]; + [mutableSet addCharactersInString:@"_"]; + firstCharacterSet = [mutableSet copy]; + + [mutableSet addCharactersInString:@"- "]; + restOfStringCharacterSet = [mutableSet copy]; + cachedIdentifiers = [[NSMutableSet alloc] init]; + }); + + @synchronized(self) { + if (![cachedIdentifiers containsObject:identifier]) { + if ([self matchString:identifier + firstCharacterSet:firstCharacterSet + restOfStringCharacterSet:restOfStringCharacterSet]) { + [cachedIdentifiers addObject:identifier]; + } else { + return NO; + } + } + } + return YES; +} + ++ (BOOL)validateIdentifier:(NSString *)identifier +{ + if (identifier == nil || identifier.length == 0 || identifier.length > FBSDK_APPEVENTSUTILITY_MAX_IDENTIFIER_LENGTH || ![[self class] regexValidateIdentifier:identifier]) { + [[self class] logAndNotify:[NSString stringWithFormat:@"Invalid identifier: '%@'. Must be between 1 and %d characters, and must be contain only alphanumerics, _, - or spaces, starting with alphanumeric or _.", + identifier, FBSDK_APPEVENTSUTILITY_MAX_IDENTIFIER_LENGTH]]; + return NO; + } + + return YES; +} + ++ (void)persistAnonymousID:(NSString *)anonymousID +{ + [[self class] ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass(self)]; + NSDictionary *data = @{ FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY : anonymousID }; + NSString *content = [FBSDKInternalUtility JSONStringForObject:data error:NULL invalidObjectHandler:NULL]; + + [content writeToFile:[[self class] persistenceFilePath:FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME] + atomically:YES + encoding:NSASCIIStringEncoding + error:nil]; +} + ++ (NSString *)persistenceFilePath:(NSString *)filename +{ + NSSearchPathDirectory directory = NSLibraryDirectory; + NSArray *paths = NSSearchPathForDirectoriesInDomains(directory, NSUserDomainMask, YES); + NSString *docDirectory = paths[0]; + return [docDirectory stringByAppendingPathComponent:filename]; +} + ++ (NSString *)retrievePersistedAnonymousID +{ + [[self class] ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass(self)]; + NSString *file = [[self class] persistenceFilePath:FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME]; + NSString *content = [[NSString alloc] initWithContentsOfFile:file + encoding:NSASCIIStringEncoding + error:nil]; + NSDictionary *results = [FBSDKInternalUtility objectForJSONString:content error:NULL]; + return results[FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY]; +} + +// Given a candidate token (which may be nil), find the real token to string to use. +// Precedence: 1) provided token, 2) current token, 3) app | client token, 4) fully anonymous session. ++ (NSString *)tokenStringToUseFor:(FBSDKAccessToken *)token +{ + if (!token) { + token = [FBSDKAccessToken currentAccessToken]; + } + + NSString *appID = [FBSDKAppEvents loggingOverrideAppID] ?: token.appID ?: [FBSDKSettings appID]; + NSString *tokenString = token.tokenString; + if (!tokenString || ![appID isEqualToString:token.appID]) { + // If there's an logging override app id present, then we don't want to use the client token since the client token + // is intended to match up with the primary app id (and AppEvents doesn't require a client token). + NSString *clientTokenString = [FBSDKSettings clientToken]; + if (clientTokenString && appID && [appID isEqualToString:token.appID]){ + tokenString = [NSString stringWithFormat:@"%@|%@", appID, clientTokenString]; + } else if (appID) { + tokenString = nil; + } + } + return tokenString; +} + ++ (long)unixTimeNow +{ + return (long)round([NSDate date].timeIntervalSince1970); +} + ++ (id)getVariable:(NSString *)variableName fromInstance:(NSObject *)instance { + Ivar ivar = class_getInstanceVariable([instance class], variableName.UTF8String); + if (ivar != NULL) { + const char *encoding = ivar_getTypeEncoding(ivar); + if (encoding != NULL && encoding[0] == '@') { + return object_getIvar(instance, ivar); + } + } + + return nil; +} + ++ (NSNumber *)getNumberValue:(NSString *)text { + NSNumber *value = @0; + + NSLocale *locale = [NSLocale currentLocale]; + + NSString *ds = [locale objectForKey:NSLocaleDecimalSeparator] ?: @"."; + NSString *gs = [locale objectForKey:NSLocaleGroupingSeparator] ?: @","; + NSString *separators = [ds stringByAppendingString:gs]; + + NSString *regex = [NSString stringWithFormat:@"[+-]?([0-9]+[%1$@]?)?[%1$@]?([0-9]+[%1$@]?)+", separators]; + NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:regex + options:0 + error:nil]; + NSTextCheckingResult *match = [re firstMatchInString:text + options:0 + range:NSMakeRange(0, text.length)]; + if (match) { + NSString *validText = [text substringWithRange:match.range]; + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.locale = locale; + formatter.numberStyle = NSNumberFormatterDecimalStyle; + + value = [formatter numberFromString:validText]; + if (nil == value) { + value = @(validText.floatValue); + } + } + + return value; +} + ++ (BOOL)isDebugBuild { +#if TARGET_IPHONE_SIMULATOR + return YES; +#else + BOOL isDevelopment = NO; + + // There is no provisioning profile in AppStore Apps. + @try + { + NSData *data = [NSData dataWithContentsOfFile:[NSBundle.mainBundle pathForResource:@"embedded" ofType:@"mobileprovision"]]; + if (data) { + const char *bytes = [data bytes]; + NSMutableString *profile = [[NSMutableString alloc] initWithCapacity:data.length]; + for (NSUInteger i = 0; i < data.length; i++) { + [profile appendFormat:@"%c", bytes[i]]; + } + // Look for debug value, if detected we're in a development build. + NSString *cleared = [[profile componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet] componentsJoinedByString:@""]; + isDevelopment = ([cleared rangeOfString:@"get-task-allow"].length > 0); + } + + return isDevelopment; + } + @catch(NSException *exception) + { + + } + + return NO; +#endif +} + ++ (BOOL)isSensitiveUserData:(NSString *)text +{ + if (0 == text.length) { + return NO; + } + + return [self isEmailAddress:text] || [self isCreditCardNumber:text]; +} + ++ (BOOL)isCreditCardNumber:(NSString *)text +{ + text = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet.decimalDigitCharacterSet invertedSet]] componentsJoinedByString:@""]; + + if (text.doubleValue == 0) { + return NO; + } + + if (text.length < 9 || text.length > 21) { + return NO; + } + + const char *chars = [text cStringUsingEncoding:NSUTF8StringEncoding]; + if (NULL == chars) { + return NO; + } + + BOOL isOdd = YES; + int oddSum = 0; + int evenSum = 0; + + for (int i = (int)text.length - 1; i >= 0; i--) { + int digit = chars[i] - '0'; + + if (isOdd) + oddSum += digit; + else + evenSum += digit / 5 + (2 * digit) % 10; + + isOdd = !isOdd; + } + + return ((oddSum + evenSum) % 10 == 0); +} + ++ (BOOL)isEmailAddress:(NSString *)text +{ + NSString *pattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; + NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; + NSUInteger matches = [regex numberOfMatchesInString:text options:0 range:NSMakeRange(0, [text length])]; + return matches > 0; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h new file mode 100644 index 0000000000..0f6d1c8e15 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h @@ -0,0 +1,26 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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. + +#if !TARGET_OS_TV +#import +#import + +@interface FBSDKHybridAppEventsScriptMessageHandler : NSObject + +@end +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m new file mode 100644 index 0000000000..3e62dcfcfe --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m @@ -0,0 +1,62 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKHybridAppEventsScriptMessageHandler.h" + +#import + +#import "FBSDKAppEvents+Internal.h" + +NSString *const FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey = @"_fb_pixel_referral_id"; + +@class WKUserContentController; + +@implementation FBSDKHybridAppEventsScriptMessageHandler + +- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { + + if ([message.name isEqualToString:FBSDKAppEventsWKWebViewMessagesHandlerKey]) { + NSString *event = message.body[FBSDKAppEventsWKWebViewMessagesEventKey]; + if (event.length > 0) { + NSString *stringedParams = message.body[FBSDKAppEventsWKWebViewMessagesParamsKey]; + NSMutableDictionary *params = nil; + NSError *jsonParseError = nil; + if ([stringedParams isKindOfClass:[NSString class]]) { + params = [NSJSONSerialization JSONObjectWithData:[stringedParams dataUsingEncoding:NSUTF8StringEncoding] + options:NSJSONReadingMutableContainers + error:&jsonParseError + ]; + } + NSString *pixelID = message.body[FBSDKAppEventsWKWebViewMessagesPixelIDKey]; + if (pixelID == nil) { + [FBSDKAppEventsUtility logAndNotify:@"Can't bridge an event without a referral Pixel ID. Check your webview Pixel configuration."]; + return; + } + if (jsonParseError != nil || ![params isKindOfClass:[NSDictionary class]] || params == nil) { + [FBSDKAppEventsUtility logAndNotify:@"Could not find parameters for your Pixel request. Check your webview Pixel configuration."]; + params = [[NSMutableDictionary alloc] initWithObjectsAndKeys:pixelID, FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey, nil]; + } + else { + params[FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey] = pixelID; + } + [FBSDKAppEvents logEvent:event parameters:params]; + } + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h new file mode 100644 index 0000000000..a5f7a77ab3 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +// Class to encapsulate implicit logging of purchase events +@interface FBSDKPaymentObserver : NSObject ++ (void)startObservingTransactions; ++ (void)stopObservingTransactions; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m new file mode 100644 index 0000000000..858e103856 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m @@ -0,0 +1,358 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKPaymentObserver.h" + +#import + +#import "FBSDKAppEvents+Internal.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" + +static NSString *const FBSDKAppEventParameterImplicitlyLoggedPurchase = @"_implicitlyLogged"; +static NSString *const FBSDKAppEventNamePurchaseFailed = @"fb_mobile_purchase_failed"; +static NSString *const FBSDKAppEventNamePurchaseRestored = @"fb_mobile_purchase_restored"; +static NSString *const FBSDKAppEventParameterNameInAppPurchaseType = @"fb_iap_product_type"; +static NSString *const FBSDKAppEventParameterNameProductTitle = @"fb_content_title"; +static NSString *const FBSDKAppEventParameterNameTransactionID = @"fb_transaction_id"; +static NSString *const FBSDKAppEventParameterNameTransactionDate = @"fb_transaction_date"; +static NSString *const FBSDKAppEventParameterNameSubscriptionPeriod = @"fb_iap_subs_period"; +static NSString *const FBSDKAppEventParameterNameTrialPeriod = @"fb_iap_trial_period"; +static NSString *const FBSDKAppEventParameterNameTrialPrice = @"fb_iap_trial_price"; +static int const FBSDKMaxParameterValueLength = 100; +static NSMutableArray *g_pendingRequestors; + +@interface FBSDKPaymentProductRequestor : NSObject + +@property (nonatomic, retain) SKPaymentTransaction *transaction; + +- (instancetype)initWithTransaction:(SKPaymentTransaction*)transaction; +- (void)resolveProducts; + +@end + +@interface FBSDKPaymentObserver() +@end + +@implementation FBSDKPaymentObserver +{ + BOOL _observingTransactions; +} + ++ (void)startObservingTransactions +{ + [[self singleton] startObservingTransactions]; +} + ++ (void)stopObservingTransactions +{ + [[self singleton] stopObservingTransactions]; +} + +// +// Internal methods +// + ++ (FBSDKPaymentObserver *)singleton +{ + static dispatch_once_t pred; + static FBSDKPaymentObserver *shared = nil; + + dispatch_once(&pred, ^{ + shared = [[FBSDKPaymentObserver alloc] init]; + }); + return shared; +} + +- (instancetype) init +{ + self = [super init]; + if (self) { + _observingTransactions = NO; + } + return self; +} + +- (void)startObservingTransactions +{ + @synchronized (self) { + if (!_observingTransactions) { + [(SKPaymentQueue *)[fbsdkdfl_SKPaymentQueueClass() defaultQueue] addTransactionObserver:self]; + _observingTransactions = YES; + } + } +} + +- (void)stopObservingTransactions +{ + @synchronized (self) { + if (_observingTransactions) { + [(SKPaymentQueue *)[fbsdkdfl_SKPaymentQueueClass() defaultQueue] removeTransactionObserver:self]; + _observingTransactions = NO; + } + } +} + +- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions +{ + for (SKPaymentTransaction *transaction in transactions) { + switch (transaction.transactionState) { + case SKPaymentTransactionStatePurchasing: + case SKPaymentTransactionStatePurchased: + case SKPaymentTransactionStateFailed: + case SKPaymentTransactionStateRestored: + [self handleTransaction:transaction]; + break; + case SKPaymentTransactionStateDeferred: + break; + } + } +} + +- (void)handleTransaction:(SKPaymentTransaction *)transaction +{ + // Ignore restored transaction + if (transaction.originalTransaction != nil) { + return; + } + FBSDKPaymentProductRequestor *productRequest = [[FBSDKPaymentProductRequestor alloc] initWithTransaction:transaction]; + [productRequest resolveProducts]; +} + +@end + +@interface FBSDKPaymentProductRequestor() +@property (nonatomic, retain) SKProductsRequest *productRequest; +@end + +@implementation FBSDKPaymentProductRequestor + ++ (void)initialize +{ + if ([self class] == [FBSDKPaymentProductRequestor class]) { + g_pendingRequestors = [[NSMutableArray alloc] init]; + } +} + +- (instancetype)initWithTransaction:(SKPaymentTransaction*)transaction +{ + self = [super init]; + if (self) { + _transaction = transaction; + } + return self; +} + +- (void)setProductRequest:(SKProductsRequest *)productRequest +{ + if (productRequest != _productRequest) { + if (_productRequest) { + _productRequest.delegate = nil; + } + _productRequest = productRequest; + } +} + +- (void)resolveProducts +{ + NSString *productId = self.transaction.payment.productIdentifier; + NSSet *productIdentifiers = [NSSet setWithObjects:productId, nil]; + self.productRequest = [[fbsdkdfl_SKProductsRequestClass() alloc] initWithProductIdentifiers:productIdentifiers]; + self.productRequest.delegate = self; + @synchronized(g_pendingRequestors) { + [g_pendingRequestors addObject:self]; + } + [self.productRequest start]; +} + +- (NSString *)getTruncatedString:(NSString *)inputString +{ + if (!inputString) { + return @""; + } + + return inputString.length <= FBSDKMaxParameterValueLength ? inputString : [inputString substringToIndex:FBSDKMaxParameterValueLength]; +} + +- (void)logTransactionEvent:(SKProduct *)product +{ + NSString *eventName = nil; + NSString *transactionID = nil; + NSString *transactionDate = nil; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"yyyy-MM-dd HH:mm:ssZ"; + switch (self.transaction.transactionState) { + case SKPaymentTransactionStatePurchasing: + eventName = FBSDKAppEventNameInitiatedCheckout; + break; + case SKPaymentTransactionStatePurchased: + eventName = FBSDKAppEventNamePurchased; + transactionID = self.transaction.transactionIdentifier; + transactionDate = [formatter stringFromDate:self.transaction.transactionDate]; + break; + case SKPaymentTransactionStateFailed: + eventName = FBSDKAppEventNamePurchaseFailed; + break; + case SKPaymentTransactionStateRestored: + eventName = FBSDKAppEventNamePurchaseRestored; + transactionDate = [formatter stringFromDate:self.transaction.transactionDate]; + break; + case SKPaymentTransactionStateDeferred: + return; + } + if (!eventName) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"FBSDKPaymentObserver logTransactionEvent: event name cannot be nil"]; + return; + } + + SKPayment *payment = self.transaction.payment; + NSMutableDictionary *eventParameters = [NSMutableDictionary dictionaryWithDictionary: @{ + FBSDKAppEventParameterNameContentID: payment.productIdentifier ?: @"", + FBSDKAppEventParameterNameNumItems: @(payment.quantity), + FBSDKAppEventParameterNameTransactionDate: transactionDate ?: @"", + }]; + double totalAmount = 0; + if (product) { + totalAmount = payment.quantity * product.price.doubleValue; + [eventParameters addEntriesFromDictionary: @{ + FBSDKAppEventParameterNameCurrency: [product.priceLocale objectForKey:NSLocaleCurrencyCode], + FBSDKAppEventParameterNameNumItems: @(payment.quantity), + FBSDKAppEventParameterNameProductTitle: [self getTruncatedString:product.localizedTitle], + FBSDKAppEventParameterNameDescription: [self getTruncatedString:product.localizedDescription], + }]; + +#if !TARGET_OS_TV +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_2 + if (@available(iOS 11.2, *)) { + BOOL isSubscription = (product.subscriptionPeriod != nil) && ((unsigned long)product.subscriptionPeriod.numberOfUnits > 0); + if (isSubscription) { + // subs inapp + eventParameters[FBSDKAppEventParameterNameSubscriptionPeriod] = [self lengthOfSubscriptionPeriod:product.subscriptionPeriod]; + eventParameters[FBSDKAppEventParameterNameInAppPurchaseType] = @"subs"; + // trial information for subs + SKProductDiscount *discount = product.introductoryPrice; + if (discount) { + eventParameters[FBSDKAppEventParameterNameTrialPeriod] = [self lengthOfSubscriptionPeriod:discount.subscriptionPeriod]; + eventParameters[FBSDKAppEventParameterNameTrialPrice] = discount.price; + } + } else { + eventParameters[FBSDKAppEventParameterNameInAppPurchaseType] = @"inapp"; + } + } +#endif +#endif + if (transactionID) { + eventParameters[FBSDKAppEventParameterNameTransactionID] = transactionID; + } + } + + [self logImplicitPurchaseEvent:eventName + valueToSum:totalAmount + parameters:eventParameters]; +} + +- (NSString *)lengthOfSubscriptionPeriod:(id)subcriptionPeriod +{ +#if !TARGET_OS_TV +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_2 + if (@available(iOS 11.2, *)) { + if (subcriptionPeriod && [subcriptionPeriod isKindOfClass:[SKProductSubscriptionPeriod class]]) { + SKProductSubscriptionPeriod *period = (SKProductSubscriptionPeriod *)subcriptionPeriod; + NSString *unit = nil; + switch (period.unit) { + case SKProductPeriodUnitDay: unit = @"D"; break; + case SKProductPeriodUnitWeek: unit = @"W"; break; + case SKProductPeriodUnitMonth: unit = @"M"; break; + case SKProductPeriodUnitYear: unit = @"Y"; break; + } + return [NSString stringWithFormat:@"P%lu%@", (unsigned long)period.numberOfUnits, unit]; + } + } +#endif +#endif + return nil; +} + +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response +{ + NSArray* products = response.products; + NSArray* invalidProductIdentifiers = response.invalidProductIdentifiers; + if (products.count + invalidProductIdentifiers.count != 1) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"FBSDKPaymentObserver: Expect to resolve one product per request"]; + } + SKProduct *product = nil; + if (products.count) { + product = products[0]; + } + [self logTransactionEvent:product]; +} + +- (void)requestDidFinish:(SKRequest *)request +{ + [self cleanUp]; +} + +- (void)request:(SKRequest *)request didFailWithError:(NSError *)error +{ + [self logTransactionEvent:nil]; + [self cleanUp]; +} + +- (void)cleanUp +{ + @synchronized(g_pendingRequestors) { + [g_pendingRequestors removeObject:self]; + } +} + +- (void)logImplicitPurchaseEvent:(NSString *)eventName + valueToSum:(double)valueToSum + parameters:(NSDictionary *)parameters { + NSMutableDictionary *eventParameters = [NSMutableDictionary dictionaryWithDictionary:parameters]; + + if ([eventName isEqualToString:FBSDKAppEventNamePurchased]) { + NSData* receipt = [self fetchDeviceReceipt]; + if (receipt) { + NSString *base64encodedReceipt = [receipt base64EncodedStringWithOptions:0]; + eventParameters[@"receipt_data"] = base64encodedReceipt; + } + } + + eventParameters[FBSDKAppEventParameterImplicitlyLoggedPurchase] = @"1"; + [FBSDKAppEvents logEvent:eventName + valueToSum:valueToSum + parameters:eventParameters]; + + // Unless the behavior is set to only allow explicit flushing, we go ahead and flush, since purchase events + // are relatively rare and relatively high value and worth getting across on wire right away. + if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { + [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; + } +} + +// Fetch the current receipt for this application. +- (NSData*)fetchDeviceReceipt { + NSURL *receiptURL = [NSBundle bundleForClass:[self class]].appStoreReceiptURL; + NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; + return receipt; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h new file mode 100644 index 0000000000..b664af9745 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h @@ -0,0 +1,34 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +FOUNDATION_EXPORT NSString *const FBSDKTimeSpentFilename; + +// Class to encapsulate persisting of time spent data collected by [FBSDKAppEvents activateApp]. The activate app App Event is +// logged when restore: is called with sufficient time since the last deactivation. +@interface FBSDKTimeSpentData : NSObject + ++ (void)suspend; ++ (void)restore:(BOOL)calledFromActivateApp; + ++ (void)setSourceApplication:(NSString *)sourceApplication openURL:(NSURL *)url; ++ (void)setSourceApplication:(NSString *)sourceApplication isFromAppLink:(BOOL)isFromAppLink; ++ (void)registerAutoResetSourceApplication; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m new file mode 100644 index 0000000000..366c450d83 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m @@ -0,0 +1,319 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKTimeSpentData.h" + +#import "FBSDKAppEvents+Internal.h" +#import "FBSDKAppEventsUtility.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKServerConfiguration.h" +#import "FBSDKServerConfigurationManager.h" +#import "FBSDKSettings.h" + + +// Filename and keys for session length +NSString *const FBSDKTimeSpentFilename = @"com-facebook-sdk-AppEventsTimeSpent.json"; +static NSString *const FBSDKTimeSpentPersistKeySessionSecondsSpent = @"secondsSpentInCurrentSession"; +static NSString *const FBSDKTimeSpentPersistKeySessionNumInterruptions = @"numInterruptions"; +static NSString *const FBSDKTimeSpentPersistKeyLastSuspendTime = @"lastSuspendTime"; +static NSString *const FBSDKTimeSpentPersistKeySessionID = @"sessionID"; + +static NSString *const FBSDKAppEventNameActivatedApp = @"fb_mobile_activate_app"; +static NSString *const FBSDKAppEventNameDeactivatedApp = @"fb_mobile_deactivate_app"; +static NSString *const FBSDKAppEventParameterNameSessionInterruptions = @"fb_mobile_app_interruptions"; +static NSString *const FBSDKAppEventParameterNameTimeBetweenSessions = @"fb_mobile_time_between_sessions"; +static NSString *const FBSDKAppEventParameterNameSessionID = @"_session_id"; + + +static const int SECS_PER_MIN = 60; +static const int SECS_PER_HOUR = 60 * SECS_PER_MIN; +static const int SECS_PER_DAY = 24 * SECS_PER_HOUR; + +static NSString *g_sourceApplication; +static BOOL g_isOpenedFromAppLink; + +// Will be translated and displayed in App Insights. Need to maintain same number and value of quanta on the server. +static const long INACTIVE_SECONDS_QUANTA[] = +{ + 5 * SECS_PER_MIN, + 15 * SECS_PER_MIN, + 30 * SECS_PER_MIN, + 1 * SECS_PER_HOUR, + 6 * SECS_PER_HOUR, + 12 * SECS_PER_HOUR, + 1 * SECS_PER_DAY, + 2 * SECS_PER_DAY, + 3 * SECS_PER_DAY, + 7 * SECS_PER_DAY, + 14 * SECS_PER_DAY, + 21 * SECS_PER_DAY, + 28 * SECS_PER_DAY, + 60 * SECS_PER_DAY, + 90 * SECS_PER_DAY, + 120 * SECS_PER_DAY, + 150 * SECS_PER_DAY, + 180 * SECS_PER_DAY, + 365 * SECS_PER_DAY, + LONG_MAX, // keep as LONG_MAX to guarantee loop will terminate +}; + +/** + * This class encapsulates the notion of an app 'session' - the length of time that the user has + * spent in the app that can be considered a single usage of the app. Apps may be frequently interrupted + * do to other device activity, like a text message, so this class allows those interruptions to be smoothed + * out and the time actually spent in the app excluding this interruption time to be accumulated. Also, + * once a certain amount of time has gone by where the app is not in the foreground, we consider the + * session to be complete, and a new session beginning. When this occurs, we log a 'deactivate app' event + * with the duration of the previous session as the 'value' of this event, along with the number of + * interruptions from that previous session as an event parameter. + */ +@implementation FBSDKTimeSpentData +{ + BOOL _isCurrentlyLoaded; + BOOL _shouldLogActivateEvent; + BOOL _shouldLogDeactivateEvent; + long _secondsSpentInCurrentSession; + long _timeSinceLastSuspend; + int _numInterruptionsInCurrentSession; + long _lastRestoreTime; + long _lastSuspendTime; + NSString *_sessionID; +} + +// +// Public methods +// + ++ (void)suspend +{ + [self.singleton instanceSuspend]; +} + ++ (void)restore:(BOOL)calledFromActivateApp +{ + [self.singleton instanceRestore:calledFromActivateApp]; +} + +// +// Internal methods +// ++ (FBSDKTimeSpentData *)singleton +{ + static dispatch_once_t pred; + static FBSDKTimeSpentData *shared = nil; + + dispatch_once(&pred, ^{ + shared = [[FBSDKTimeSpentData alloc] init]; + }); + return shared; +} + +// Calculate and persist time spent data for this instance of the app activation. +- (void)instanceSuspend +{ + + [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; + if (!_isCurrentlyLoaded) { + FBSDKConditionalLog(YES, FBSDKLoggingBehaviorInformational, @"[FBSDKTimeSpentData suspend] invoked without corresponding restore"); + return; + } + + long now = [FBSDKAppEventsUtility unixTimeNow]; + long timeSinceRestore = now - _lastRestoreTime; + + // Can happen if the clock on the device is changed + if (timeSinceRestore < 0) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"Clock skew detected"]; + timeSinceRestore = 0; + } + + _secondsSpentInCurrentSession += timeSinceRestore; + + NSDictionary *timeSpentData = + @{ + FBSDKTimeSpentPersistKeySessionSecondsSpent : @(_secondsSpentInCurrentSession), + FBSDKTimeSpentPersistKeySessionNumInterruptions : @(_numInterruptionsInCurrentSession), + FBSDKTimeSpentPersistKeyLastSuspendTime : @(now), + FBSDKTimeSpentPersistKeySessionID : _sessionID, + }; + + NSString *content = [FBSDKInternalUtility JSONStringForObject:timeSpentData error:NULL invalidObjectHandler:NULL]; + + [content writeToFile:[FBSDKAppEventsUtility persistenceFilePath:FBSDKTimeSpentFilename] + atomically:YES + encoding:NSASCIIStringEncoding + error:nil]; + + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"FBSDKTimeSpentData Persist: %@", content]; + + _isCurrentlyLoaded = NO; +} + + +// Called during activation - either through an explicit 'activateApp' call or implicitly when the app is foregrounded. +// In both cases, we restore the persisted event data. In the case of the activateApp, we log an 'app activated' +// event if there's been enough time between the last deactivation and now. +- (void)instanceRestore:(BOOL)calledFromActivateApp +{ + + [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; + + // It's possible to call this multiple times during the time the app is in the foreground. If this is the case, + // just restore persisted data the first time. + if (!_isCurrentlyLoaded) { + + NSString *content = + [[NSString alloc] initWithContentsOfFile:[FBSDKAppEventsUtility persistenceFilePath:FBSDKTimeSpentFilename] + usedEncoding:nil + error:nil]; + + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents + formatString:@"FBSDKTimeSpentData Restore: %@", content]; + + long now = [FBSDKAppEventsUtility unixTimeNow]; + if (!content) { + + // Nothing persisted, so this is the first launch. + _sessionID = [NSUUID UUID].UUIDString; + _secondsSpentInCurrentSession = 0; + _numInterruptionsInCurrentSession = 0; + _lastSuspendTime = 0; + + // We want to log the app activation event on the first launch, but not the deactivate event + _shouldLogActivateEvent = YES; + _shouldLogDeactivateEvent = NO; + + } else { + + NSDictionary *results = [FBSDKInternalUtility objectForJSONString:content error:NULL]; + + _lastSuspendTime = [results[FBSDKTimeSpentPersistKeyLastSuspendTime] longValue]; + + _timeSinceLastSuspend = now - _lastSuspendTime; + _secondsSpentInCurrentSession = [results[FBSDKTimeSpentPersistKeySessionSecondsSpent] intValue]; + _sessionID = results[FBSDKTimeSpentPersistKeySessionID] ? : [NSUUID UUID].UUIDString; + _numInterruptionsInCurrentSession = [results[FBSDKTimeSpentPersistKeySessionNumInterruptions] intValue]; + _shouldLogActivateEvent = (_timeSinceLastSuspend > [FBSDKServerConfigurationManager cachedServerConfiguration].sessionTimoutInterval); + + // Other than the first launch, we always log the last session's deactivate with this session's activate. + _shouldLogDeactivateEvent = _shouldLogActivateEvent; + + if (!_shouldLogDeactivateEvent) { + // If we're not logging, then the time we spent deactivated is considered another interruption. But cap it + // so errant or test uses doesn't blow out the cardinality on the backend processing + _numInterruptionsInCurrentSession = MIN(_numInterruptionsInCurrentSession + 1, 200); + } + + } + + _lastRestoreTime = now; + _isCurrentlyLoaded = YES; + + if (calledFromActivateApp) { + // It's important to log deactivate first to reset sessionID + if (_shouldLogDeactivateEvent) { + [FBSDKAppEvents logEvent:FBSDKAppEventNameDeactivatedApp + valueToSum:_secondsSpentInCurrentSession + parameters:[self appEventsParametersForDeactivate]]; + + // We've logged the session stats, now reset. + _secondsSpentInCurrentSession = 0; + _numInterruptionsInCurrentSession = 0; + _sessionID = [NSUUID UUID].UUIDString; + } + + if (_shouldLogActivateEvent) { + [FBSDKAppEvents logEvent:FBSDKAppEventNameActivatedApp + parameters:[self appEventsParametersForActivate]]; + // Unless the behavior is set to only allow explicit flushing, we go ahead and flush. App launch + // events are critical to Analytics so we don't want to lose them. + if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { + [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; + } + } + } + } +} + +- (NSDictionary *)appEventsParametersForActivate +{ + return @{ + FBSDKAppEventParameterLaunchSource: [[self class] getSourceApplication], + FBSDKAppEventParameterNameSessionID: _sessionID, + }; +} + +- (NSDictionary *)appEventsParametersForDeactivate +{ + int quantaIndex = 0; + while (_timeSinceLastSuspend > INACTIVE_SECONDS_QUANTA[quantaIndex]) { + quantaIndex++; + } + + NSMutableDictionary *params = [@{ FBSDKAppEventParameterNameSessionInterruptions : @(_numInterruptionsInCurrentSession), + FBSDKAppEventParameterNameTimeBetweenSessions : [NSString stringWithFormat:@"session_quanta_%d", quantaIndex], + FBSDKAppEventParameterLaunchSource: [[self class] getSourceApplication], + FBSDKAppEventParameterNameSessionID : _sessionID ?: @"", + } mutableCopy]; + if (_lastSuspendTime) { + params[FBSDKAppEventParameterLogTime] = @(_lastSuspendTime); + } + return [params copy]; +} + ++ (void)setSourceApplication:(NSString *)sourceApplication openURL:(NSURL *)url +{ + [self setSourceApplication:sourceApplication + isFromAppLink:[FBSDKInternalUtility dictionaryFromFBURL:url][@"al_applink_data"] != nil]; +} + ++ (void)setSourceApplication:(NSString *)sourceApplication isFromAppLink:(BOOL)isFromAppLink +{ + g_isOpenedFromAppLink = isFromAppLink; + g_sourceApplication = sourceApplication; +} + ++ (NSString *)getSourceApplication +{ + NSString *openType = @"Unclassified"; + if (g_isOpenedFromAppLink) { + openType = @"AppLink"; + } + return (g_sourceApplication ? + [NSString stringWithFormat:@"%@(%@)", openType, g_sourceApplication] + : openType); +} + ++ (void)resetSourceApplication +{ + g_sourceApplication = nil; + g_isOpenedFromAppLink = NO; +} + ++ (void)registerAutoResetSourceApplication +{ + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(resetSourceApplication) + name:UIApplicationDidEnterBackgroundNotification + object:nil]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h new file mode 100644 index 0000000000..9377089331 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h @@ -0,0 +1,44 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface FBSDKUserDataStore : NSObject + ++ (void)initStore; + ++ (void)setUserDataAndHash:(NSDictionary *)ud; + ++ (void)setUserDataAndHash:(nullable NSString *)email + firstName:(nullable NSString *)firstName + lastName:(nullable NSString *)lastName + phone:(nullable NSString *)phone + dateOfBirth:(nullable NSString *)dateOfBirth + gender:(nullable NSString *)gender + city:(nullable NSString *)city + state:(nullable NSString *)state + zip:(nullable NSString *)zip + country:(nullable NSString *)country; + ++ (NSString *) getHashedUserData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m new file mode 100644 index 0000000000..a4c18465d3 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m @@ -0,0 +1,204 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKUserDataStore.h" + +#import "FBSDKAppEventsUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" +#import "FBSDKUtility.h" + +static NSString *const FBSDKUserDataKey = @"com.facebook.appevents.UserDataStore.userData"; + +static NSString *const FBSDKEmail = @"em"; +static NSString *const FBSDKFirstName = @"fn"; +static NSString *const FBSDKLastName = @"ln"; +static NSString *const FBSDKPhone = @"ph"; +static NSString *const FBSDKDateOfBirth = @"db"; +static NSString *const FBSDKGender = @"ge"; +static NSString *const FBSDKCity = @"ct"; +static NSString *const FBSDKState = @"st"; +static NSString *const FBSDKZip = @"zp"; +static NSString *const FBSDKCountry = @"country"; + +static NSString *hashedUserData; +static volatile bool initialized = false; + +@implementation FBSDKUserDataStore + ++ (void)initStore +{ + if (initialized){ + return; + } + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + hashedUserData = [defaults stringForKey:FBSDKUserDataKey]; + initialized = true; +} + ++ (void)setUserDataAndHash:(NSDictionary *)ud +{ + if (!initialized){ + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"initStore should have been called before calling setUserData"]; + [FBSDKUserDataStore initStore]; + } + + hashedUserData = [FBSDKUserDataStore hashUserData:ud]; + NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:(hashedUserData) forKey:(FBSDKUserDataKey)]; +} + ++ (void)setUserDataAndHash:(nullable NSString *)email + firstName:(nullable NSString *)firstName + lastName:(nullable NSString *)lastName + phone:(nullable NSString *)phone + dateOfBirth:(nullable NSString *)dateOfBirth + gender:(nullable NSString *)gender + city:(nullable NSString *)city + state:(nullable NSString *)state + zip:(nullable NSString *)zip + country:(nullable NSString *)country +{ + [FBSDKUserDataStore initStore]; + + NSMutableDictionary *ud = [[NSMutableDictionary alloc] init]; + if (email != nil) { + ud[FBSDKEmail] = email; + } + if (firstName != nil) { + ud[FBSDKFirstName] = firstName; + } + if (lastName != nil) { + ud[FBSDKLastName] = lastName; + } + if (phone != nil) { + ud[FBSDKPhone] = phone; + } + if (dateOfBirth != nil) { + ud[FBSDKDateOfBirth] = dateOfBirth; + } + if (gender != nil) { + ud[FBSDKGender] = gender; + } + if (city != nil) { + ud[FBSDKCity] = city; + } + if (state != nil) { + ud[FBSDKState] = state; + } + if (zip != nil) { + ud[FBSDKZip] = zip; + } + if (country != nil) { + ud[FBSDKCountry] = country; + } + + hashedUserData = [FBSDKUserDataStore hashUserData:ud]; + NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:(hashedUserData) forKey:(FBSDKUserDataKey)]; +} + ++ (NSString *)getHashedUserData +{ + if (!initialized){ + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"initStore should have been called before calling setUserID"]; + [FBSDKUserDataStore initStore]; + } + + return hashedUserData; +} + ++ (NSString *)hashUserData:(NSDictionary *)ud +{ + if (ud == nil){ + return nil; + } + + NSMutableDictionary *encryptUserData = [NSMutableDictionary dictionaryWithCapacity:ud.count]; + + for (NSString *key in ud){ + NSString *const value = ud[key]; + if ([FBSDKUserDataStore maybeSHA256Hashed:value]){ + encryptUserData[key] = value; + } else { + NSString *const normalizedValue = [FBSDKUserDataStore normalizeData:key data:value]; + NSString *const encryptedValue = [FBSDKUserDataStore encryptData:normalizedValue]; + if (encryptedValue != nil){ + encryptUserData[key] = encryptedValue; + } + } + } + + NSError *error; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:encryptUserData + options:0 + error:&error]; + if (jsonData){ + return [[NSString alloc] initWithData:jsonData + encoding:NSUTF8StringEncoding]; + } else { + [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"invalid json object: %@", error]]; + return nil; + } +} + ++ (NSString *)encryptData:(NSString *)data +{ + if (data == nil || data.length == 0){ + return nil; + } + return [FBSDKUtility SHA256Hash:data]; +} + ++ (NSString *)normalizeData:(NSString *)type data:(NSString *)data{ + NSString *normalizedData = @""; + if ([type isEqualToString:FBSDKEmail] || [type isEqualToString:FBSDKFirstName] + || [type isEqualToString:FBSDKLastName] || [type isEqualToString:FBSDKCity] + || [type isEqualToString:FBSDKState] || [type isEqualToString:FBSDKCountry]) { + normalizedData = [data stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + normalizedData = normalizedData.lowercaseString; + } else if ([type isEqualToString:FBSDKPhone]){ + NSError *error = nil; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9]" + options:NSRegularExpressionCaseInsensitive + error:&error + ]; + normalizedData = [regex stringByReplacingMatchesInString:data + options:0 + range:NSMakeRange(0, data.length) + withTemplate:@"" + ]; + } else if ([type isEqualToString:FBSDKGender]){ + NSString *temp = [data stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + temp = temp.lowercaseString; + normalizedData = temp.length > 0 ? [temp substringToIndex:1]: @""; + } + + return normalizedData; +} + ++ (BOOL)maybeSHA256Hashed:(NSString *)data +{ + NSRange range = [data rangeOfString:@"[A-Fa-f0-9]{64}" options:NSRegularExpressionSearch]; + return (data.length == 64) && (range.location != NSNotFound); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h new file mode 100644 index 0000000000..4bd2d01a61 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h @@ -0,0 +1,63 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkTarget.h" + +NS_ASSUME_NONNULL_BEGIN + +/*! The version of the App Link protocol that this library supports */ +FOUNDATION_EXPORT NSString *const FBSDKAppLinkVersion; + +/*! + Contains App Link metadata relevant for navigation on this device + derived from the HTML at a given URL. + */ +@interface FBSDKAppLink : NSObject + +/*! + Creates a FBSDKAppLink with the given list of FBSDKAppLinkTargets and target URL. + + Generally, this will only be used by implementers of the FBSDKAppLinkResolving protocol, + as these implementers will produce App Link metadata for a given URL. + + @param sourceURL the URL from which this App Link is derived + @param targets an ordered list of FBSDKAppLinkTargets for this platform derived + from App Link metadata. + @param webURL the fallback web URL, if any, for the app link. + */ ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(nullable NSURL *)webURL; + +/*! The URL from which this FBSDKAppLink was derived */ +@property (nonatomic, strong, readonly) NSURL *sourceURL; + +/*! + The ordered list of targets applicable to this platform that will be used + for navigation. + */ +@property (nonatomic, copy, readonly) NSArray *targets; + +/*! The fallback web URL to use if no targets are installed on this device. */ +@property (nonatomic, strong, readonly, nullable) NSURL *webURL; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m new file mode 100644 index 0000000000..57597dd576 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m @@ -0,0 +1,70 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLink_Internal.h" + +NSString *const FBSDKAppLinkDataParameterName = @"al_applink_data"; +NSString *const FBSDKAppLinkTargetKeyName = @"target_url"; +NSString *const FBSDKAppLinkUserAgentKeyName = @"user_agent"; +NSString *const FBSDKAppLinkExtrasKeyName = @"extras"; +NSString *const FBSDKAppLinkRefererAppLink = @"referer_app_link"; +NSString *const FBSDKAppLinkRefererAppName = @"app_name"; +NSString *const FBSDKAppLinkRefererUrl = @"url"; +NSString *const FBSDKAppLinkVersionKeyName = @"version"; +NSString *const FBSDKAppLinkVersion = @"1.0"; + +@interface FBSDKAppLink () + +@property (nonatomic, strong) NSURL *sourceURL; +@property (nonatomic, copy) NSArray *targets; +@property (nonatomic, strong) NSURL *webURL; + +@property (nonatomic, assign, getter=isBackToReferrer) BOOL backToReferrer; + +@end + +@implementation FBSDKAppLink + ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(NSURL *)webURL + isBackToReferrer:(BOOL)isBackToReferrer { + FBSDKAppLink *link = [[self alloc] initWithIsBackToReferrer:isBackToReferrer]; + link.sourceURL = sourceURL; + link.targets = [targets copy]; + link.webURL = webURL; + return link; +} + ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(NSURL *)webURL { + return [self appLinkWithSourceURL:sourceURL + targets:targets + webURL:webURL + isBackToReferrer:NO]; +} + +- (FBSDKAppLink *)initWithIsBackToReferrer:(BOOL)backToReferrer { + if ((self = [super init])) { + _backToReferrer = backToReferrer; + } + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h new file mode 100644 index 0000000000..daf124ffed --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h @@ -0,0 +1,137 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLink.h" +#import "FBSDKAppLinkResolving.h" + +NS_ASSUME_NONNULL_BEGIN + +/*! + The result of calling navigate on a FBSDKAppLinkNavigation + */ +typedef NS_ENUM(NSInteger, FBSDKAppLinkNavigationType) { + /*! Indicates that the navigation failed and no app was opened */ + FBSDKAppLinkNavigationTypeFailure, + /*! Indicates that the navigation succeeded by opening the URL in the browser */ + FBSDKAppLinkNavigationTypeBrowser, + /*! Indicates that the navigation succeeded by opening the URL in an app on the device */ + FBSDKAppLinkNavigationTypeApp +}; + +/** + Describes the callback for appLinkFromURLInBackground. + @param navType the FBSDKAppLink representing the deferred App Link + @param error the error during the request, if any + + */ +typedef void (^FBSDKAppLinkNavigationHandler)(FBSDKAppLinkNavigationType navType, NSError * _Nullable error); + +/*! + Represents a pending request to navigate to an App Link. Most developers will + simply use navigateToURLInBackground: to open a URL, but developers can build + custom requests with additional navigation and app data attached to them by + creating FBSDKAppLinkNavigations themselves. + */ +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") +@interface FBSDKAppLinkNavigation : NSObject + +/*! + The extras for the AppLinkNavigation. This will generally contain application-specific + data that should be passed along with the request, such as advertiser or affiliate IDs or + other such metadata relevant on this device. + */ +@property (nonatomic, copy, readonly) NSDictionary *extras; + +/*! + The al_applink_data for the AppLinkNavigation. This will generally contain data common to + navigation attempts such as back-links, user agents, and other information that may be used + in routing and handling an App Link request. + */ +@property (nonatomic, copy, readonly) NSDictionary *appLinkData; + +/*! The AppLink to navigate to */ +@property (nonatomic, strong, readonly) FBSDKAppLink *appLink; + +/*! + Return navigation type for current instance. + No-side-effect version of navigate: + */ +@property (nonatomic, readonly) FBSDKAppLinkNavigationType navigationType; + +/*! Creates an AppLinkNavigation with the given link, extras, and App Link data */ ++ (instancetype)navigationWithAppLink:(FBSDKAppLink *)appLink + extras:(NSDictionary *)extras + appLinkData:(NSDictionary *)appLinkData; + +/*! + Creates an NSDictionary with the correct format for iOS callback URLs, + to be used as 'appLinkData' argument in the call to navigationWithAppLink:extras:appLinkData: + */ ++ (NSDictionary *> *)callbackAppLinkDataForAppWithName:(NSString *)appName + url:(NSString *)url; + +/*! Performs the navigation */ +- (FBSDKAppLinkNavigationType)navigate:(NSError *__autoreleasing *)error; + +/*! Returns a FBSDKAppLink for the given URL */ ++ (void)resolveAppLink:(NSURL *)destination handler:(FBSDKAppLinkFromURLHandler)handler; + +/*! Returns a FBSDKAppLink for the given URL using the given App Link resolution strategy */ ++ (void)resolveAppLink:(NSURL *)destination + resolver:(id)resolver + handler:(FBSDKAppLinkFromURLHandler)handler; + +/*! Navigates to a FBSDKAppLink and returns whether it opened in-app or in-browser */ ++ (FBSDKAppLinkNavigationType)navigateToAppLink:(FBSDKAppLink *)link error:(NSError *__autoreleasing *)error; + +/*! + Returns a FBSDKAppLinkNavigationType based on a FBSDKAppLink. + It's essentially a no-side-effect version of navigateToAppLink:error:, + allowing apps to determine flow based on the link type (e.g. open an + internal web view instead of going straight to the browser for regular links.) + */ ++ (FBSDKAppLinkNavigationType)navigationTypeForLink:(FBSDKAppLink *)link; + +/*! Navigates to a URL (an asynchronous action) and returns a FBSDKNavigationType */ ++ (void)navigateToURL:(NSURL *)destination handler:(FBSDKAppLinkNavigationHandler)handler; + +/*! + Navigates to a URL (an asynchronous action) using the given App Link resolution + strategy and returns a FBSDKNavigationType + */ ++ (void)navigateToURL:(NSURL *)destination + resolver:(id)resolver + handler:(FBSDKAppLinkNavigationHandler)handler; + +/*! + Gets the default resolver to be used for App Link resolution. If the developer has not set one explicitly, + a basic, built-in resolver will be used. + */ ++ (id)defaultResolver; + +/*! + Sets the default resolver to be used for App Link resolution. Setting this to nil will revert the + default resolver to the basic, built-in resolver provided by FBSDK. + */ ++ (void)setDefaultResolver:(id)resolver; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m new file mode 100644 index 0000000000..436ceb4954 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m @@ -0,0 +1,294 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkNavigation.h" + +#import "FBSDKAppLinkTarget.h" +#import "FBSDKAppLink_Internal.h" +#import "FBSDKMeasurementEvent_Internal.h" +#import "FBSDKSettings.h" +#import "FBSDKWebViewAppLinkResolver.h" + +FOUNDATION_EXPORT NSString *const FBSDKAppLinkDataParameterName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkTargetKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkUserAgentKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkExtrasKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkVersionKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppLink; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererUrl; + +static id defaultResolver; + +@interface FBSDKAppLinkNavigation () + +@property (nonatomic, copy) NSDictionary *extras; +@property (nonatomic, copy) NSDictionary *appLinkData; +@property (nonatomic, strong) FBSDKAppLink *appLink; + +@end + +@implementation FBSDKAppLinkNavigation + ++ (instancetype)navigationWithAppLink:(FBSDKAppLink *)appLink + extras:(NSDictionary *)extras + appLinkData:(NSDictionary *)appLinkData { + FBSDKAppLinkNavigation *navigation = [[self alloc] init]; + navigation.appLink = appLink; + navigation.extras = extras; + navigation.appLinkData = appLinkData; + return navigation; +} + ++ (NSDictionary *> *)callbackAppLinkDataForAppWithName:(NSString *)appName + url:(NSString *)url { + return @{FBSDKAppLinkRefererAppLink: @{FBSDKAppLinkRefererAppName: appName, FBSDKAppLinkRefererUrl: url}}; +} + +- (NSString *)stringByEscapingQueryString:(NSString *)string { + return [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; +} + +- (NSURL *)appLinkURLWithTargetURL:(NSURL *)targetUrl error:(NSError **)error { + NSMutableDictionary *appLinkData = + [NSMutableDictionary dictionaryWithDictionary:self.appLinkData ?: @{}]; + + // Add applink protocol data + if (!appLinkData[FBSDKAppLinkUserAgentKeyName]) { + appLinkData[FBSDKAppLinkUserAgentKeyName] = [NSString stringWithFormat:@"FBSDK %@", FBSDKSettings.sdkVersion]; + } + if (!appLinkData[FBSDKAppLinkVersionKeyName]) { + appLinkData[FBSDKAppLinkVersionKeyName] = FBSDKAppLinkVersion; + } + if (self.appLink.sourceURL.absoluteString) { + appLinkData[FBSDKAppLinkTargetKeyName] = self.appLink.sourceURL.absoluteString; + } + appLinkData[FBSDKAppLinkExtrasKeyName] = self.extras ?: @{}; + + // JSON-ify the applink data + NSError *jsonError = nil; + NSData *jsonBlob = [NSJSONSerialization dataWithJSONObject:appLinkData options:0 error:&jsonError]; + if (!jsonError) { + NSString *jsonString = [[NSString alloc] initWithData:jsonBlob encoding:NSUTF8StringEncoding]; + NSString *encoded = [self stringByEscapingQueryString:jsonString]; + + NSString *endUrlString = [NSString stringWithFormat:@"%@%@%@=%@", + targetUrl.absoluteString, + targetUrl.query ? @"&" : @"?", + FBSDKAppLinkDataParameterName, + encoded]; + + return [NSURL URLWithString:endUrlString]; + } else { + if (error) { + *error = jsonError; + } + + // If there was an error encoding the app link data, fail hard. + return nil; + } +} + +- (FBSDKAppLinkNavigationType)navigate:(NSError **)error { + NSURL *openedURL = nil; + NSError *encodingError = nil; + FBSDKAppLinkNavigationType retType = FBSDKAppLinkNavigationTypeFailure; + + // Find the first eligible/launchable target in the FBSDKAppLink. + for (FBSDKAppLinkTarget *target in self.appLink.targets) { + NSURL *appLinkAppURL = [self appLinkURLWithTargetURL:target.URL error:&encodingError]; + if (encodingError || !appLinkAppURL) { + if (error) { + *error = encodingError; + } + } else if ([[UIApplication sharedApplication] openURL:appLinkAppURL]) { + retType = FBSDKAppLinkNavigationTypeApp; + openedURL = appLinkAppURL; + break; + } + } + + if (!openedURL && self.appLink.webURL) { + // Fall back to opening the url in the browser if available. + NSURL *appLinkBrowserURL = [self appLinkURLWithTargetURL:self.appLink.webURL error:&encodingError]; + if (encodingError || !appLinkBrowserURL) { + // If there was an error encoding the app link data, fail hard. + if (error) { + *error = encodingError; + } + } else if ([[UIApplication sharedApplication] openURL:appLinkBrowserURL]) { + // This was a browser navigation. + retType = FBSDKAppLinkNavigationTypeBrowser; + openedURL = appLinkBrowserURL; + } + } + + [self postAppLinkNavigateEventNotificationWithTargetURL:openedURL + error:error ? *error : nil + type:retType]; + return retType; +} + +- (void)postAppLinkNavigateEventNotificationWithTargetURL:(NSURL *)outputURL error:(NSError *)error type:(FBSDKAppLinkNavigationType)type { + NSString *const EVENT_YES_VAL = @"1"; + NSString *const EVENT_NO_VAL = @"0"; + NSMutableDictionary *logData = + [[NSMutableDictionary alloc] init]; + + NSString *outputURLScheme = outputURL.scheme; + NSString *outputURLString = outputURL.absoluteString; + if (outputURLScheme) { + logData[@"outputURLScheme"] = outputURLScheme; + } + if (outputURLString) { + logData[@"outputURL"] = outputURLString; + } + + NSString *sourceURLString = self.appLink.sourceURL.absoluteString; + NSString *sourceURLHost = self.appLink.sourceURL.host; + NSString *sourceURLScheme = self.appLink.sourceURL.scheme; + if (sourceURLString) { + logData[@"sourceURL"] = sourceURLString; + } + if (sourceURLHost) { + logData[@"sourceHost"] = sourceURLHost; + } + if (sourceURLScheme) { + logData[@"sourceScheme"] = sourceURLScheme; + } + if (error.localizedDescription) { + logData[@"error"] = error.localizedDescription; + } + NSString *success = nil; //no + NSString *linkType = nil; // unknown; + switch (type) { + case FBSDKAppLinkNavigationTypeFailure: + success = EVENT_NO_VAL; + linkType = @"fail"; + break; + case FBSDKAppLinkNavigationTypeBrowser: + success = EVENT_YES_VAL; + linkType = @"web"; + break; + case FBSDKAppLinkNavigationTypeApp: + success = EVENT_YES_VAL; + linkType = @"app"; + break; + default: + break; + } + if (success) { + logData[@"success"] = success; + } + if (linkType) { + logData[@"type"] = linkType; + } + + if (self.appLink.backToReferrer) { + [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkNavigateBackToReferrerEventName args:logData]; + } else { + [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkNavigateOutEventName args:logData]; + } +} + ++ (void)resolveAppLink:(NSURL *)destination + resolver:(id)resolver + handler:(FBSDKAppLinkFromURLHandler)handler { + [resolver appLinkFromURL:destination handler:handler]; +} + ++ (void)resolveAppLink:(NSURL *)destination handler:(FBSDKAppLinkFromURLHandler)handler { + [self resolveAppLink:destination resolver:[self defaultResolver] handler:handler]; +} + ++ (void)navigateToURL:(NSURL *)destination handler:(FBSDKAppLinkNavigationHandler)handler { + [self navigateToURL:destination resolver:[self defaultResolver] handler:handler]; +} + ++ (void)navigateToURL:(NSURL *)destination + resolver:(id)resolver + handler:(FBSDKAppLinkNavigationHandler)handler { + + dispatch_async(dispatch_get_main_queue(), ^{ + [self resolveAppLink:destination + resolver:resolver + handler:^(FBSDKAppLink * _Nullable appLink, NSError * _Nullable error) { + if (error) { + handler(FBSDKAppLinkNavigationTypeFailure, error); + return; + } + + NSError *navigateError = nil; + FBSDKAppLinkNavigationType result = [self navigateToAppLink:appLink error:&navigateError]; + handler(result, navigateError); + }]; + }); +} + ++ (FBSDKAppLinkNavigationType)navigateToAppLink:(FBSDKAppLink *)link error:(NSError **)error { + return [[FBSDKAppLinkNavigation navigationWithAppLink:link + extras:@{} + appLinkData:@{}] navigate:error]; +} + ++ (FBSDKAppLinkNavigationType)navigationTypeForLink:(FBSDKAppLink *)link { + return [[self navigationWithAppLink:link extras:@{} appLinkData:@{}] navigationType]; +} + +- (FBSDKAppLinkNavigationType)navigationType { + FBSDKAppLinkTarget *eligibleTarget = nil; + for (FBSDKAppLinkTarget *target in self.appLink.targets) { + if ([[UIApplication sharedApplication] canOpenURL:target.URL]) { + eligibleTarget = target; + break; + } + } + + if (eligibleTarget != nil) { + NSURL *appLinkURL = [self appLinkURLWithTargetURL:eligibleTarget.URL error:nil]; + if (appLinkURL != nil) { + return FBSDKAppLinkNavigationTypeApp; + } else { + return FBSDKAppLinkNavigationTypeFailure; + } + } + + if (self.appLink.webURL != nil) { + NSURL *appLinkURL = [self appLinkURLWithTargetURL:eligibleTarget.URL error:nil]; + if (appLinkURL != nil) { + return FBSDKAppLinkNavigationTypeBrowser; + } else { + return FBSDKAppLinkNavigationTypeFailure; + } + } + + return FBSDKAppLinkNavigationTypeFailure; +} + ++ (id)defaultResolver { + if (defaultResolver) { + return defaultResolver; + } + return [FBSDKWebViewAppLinkResolver sharedInstance]; +} + ++ (void)setDefaultResolver:(id)resolver { + defaultResolver = resolver; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h new file mode 100644 index 0000000000..39b5dc0e85 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h @@ -0,0 +1,107 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkResolving.h" + +@class BFTask; + + +// Check if Bolts.framework is available for import +#if __has_include() +// Import it if it's available +#import +#else +// Otherwise - redeclare BFAppLinkResolving protocol to resolve the problem of missing symbols +// Please note: Bolts.framework is still required for AppLink resolving to work, +// but this allows FBSDKCoreKit to weakly link Bolts.framework as well as this enables clang modulemaps to work. + +/** + Implement this protocol to provide an alternate strategy for resolving + App Links that may include pre-fetching, caching, or querying for App Link + data from an index provided by a service provider. + */ +DEPRECATED_MSG_ATTRIBUTE("Use `FBSDKAppLinkResolving`") +@protocol BFAppLinkResolving + +/** + Asynchronously resolves App Link data for a given URL. + + @param url The URL to resolve into an App Link. + @return A BFTask that will return a BFAppLink for the given URL. + */ +- (BFTask *)appLinkFromURLInBackground:(NSURL *)url +DEPRECATED_MSG_ATTRIBUTE("Use `appLinkFromURL:handler:`"); + +@end + +#endif + +/** + + Provides an implementation of the BFAppLinkResolving protocol that uses the Facebook App Link + Index API to resolve App Links given a URL. It also provides an additional helper method that can resolve + multiple App Links in a single call. + + + + Usage of this type requires a client token. See `[FBSDKSettings setClientToken:]` and linking + Bolts.framework + */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +@interface FBSDKAppLinkResolver : NSObject +#pragma clang diagnostic pop + +/** + Asynchronously resolves App Link data for multiple URLs. + + @param urls An array of NSURLs to resolve into App Links. + @return A BFTask that will return dictionary mapping input NSURLs to their + corresponding BFAppLink. + + You should set the client token before making this call. See `[FBSDKSettings setClientToken:]` + */ +- (BFTask *)appLinksFromURLsInBackground:(NSArray *)urls +DEPRECATED_MSG_ATTRIBUTE("Use `appLinkFromURLs:handler:`"); + +/** + Asynchronously resolves App Link data for a given URL. + + @param url The URL to resolve into an App Link. + @return A BFTask that will return a BFAppLink for the given URL. + */ +- (BFTask *)appLinkFromURLInBackground:(NSURL *)url +DEPRECATED_MSG_ATTRIBUTE("Use `appLinkFromURL:handler:`"); + +/** + Asynchronously resolves App Link data for a given array of URLs. + + @param urls The URLs to resolve into an App Link. + @param handler The completion block that will return an App Link for the given URL. + */ +- (void)appLinksFromURLs:(NSArray *)urls handler:(FBSDKAppLinksFromURLArrayHandler)handler +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); + +/** + Allocates and initializes a new instance of FBSDKAppLinkResolver. + */ ++ (instancetype)resolver; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m new file mode 100644 index 0000000000..b83ec5bb2b --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m @@ -0,0 +1,299 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkResolver.h" + +#import + +#import +#import +#import +#import + +#import "FBSDKAccessToken.h" +#import "FBSDKAppLink.h" +#import "FBSDKGraphRequest+Internal.h" +#import "FBSDKGraphRequestConnection.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings+Internal.h" +#import "FBSDKUtility.h" + +static NSString *const kURLKey = @"url"; +static NSString *const kIOSAppStoreIdKey = @"app_store_id"; +static NSString *const kIOSAppNameKey = @"app_name"; +static NSString *const kWebKey = @"web"; +static NSString *const kIOSKey = @"ios"; +static NSString *const kIPhoneKey = @"iphone"; +static NSString *const kIPadKey = @"ipad"; +static NSString *const kShouldFallbackKey = @"should_fallback"; +static NSString *const kAppLinksKey = @"app_links"; + +@interface FBSDKAppLinkResolver () + +@property (nonatomic, strong) NSMutableDictionary *cachedBFAppLinks; +@property (nonatomic, strong) NSMutableDictionary *cachedFBSDKAppLinks; +@property (nonatomic, assign) UIUserInterfaceIdiom userInterfaceIdiom; +@end + +@implementation FBSDKAppLinkResolver + +static Class g_BFTaskCompletionSourceClass; +static Class g_BFAppLinkTargetClass; +static Class g_BFAppLinkClass; +static Class g_BFTaskClass; + ++ (void)initialize +{ + if (self == [FBSDKAppLinkResolver class]) { + g_BFTaskCompletionSourceClass = [FBSDKInternalUtility + resolveBoltsClassWithName:@"BFTaskCompletionSource"]; + g_BFAppLinkTargetClass = [FBSDKInternalUtility resolveBoltsClassWithName:@"BFAppLinkTarget"]; + g_BFTaskClass = [FBSDKInternalUtility resolveBoltsClassWithName:@"BFTask"]; + g_BFAppLinkClass = [FBSDKInternalUtility resolveBoltsClassWithName:@"BFAppLink"]; + } +} + +- (instancetype)initWithUserInterfaceIdiom:(UIUserInterfaceIdiom)userInterfaceIdiom +{ + if (self = [super init]) { + self.cachedBFAppLinks = [NSMutableDictionary dictionary]; + self.cachedFBSDKAppLinks = [NSMutableDictionary dictionary]; + self.userInterfaceIdiom = userInterfaceIdiom; + } + return self; +} + +- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkFromURLHandler)handler +{ + [self appLinksFromURLs:@[url] handler:^(NSDictionary *urls, NSError * _Nullable error) { + handler(urls[url], error); + }]; +} + +- (void)appLinksFromURLs:(NSArray *)urls handler:(FBSDKAppLinksFromURLArrayHandler)handler +{ + if (![FBSDKSettings clientToken] && ![FBSDKAccessToken currentAccessToken]) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"A user access token or clientToken is required to use FBAppLinkResolver"]; + } + NSMutableDictionary *appLinks = [NSMutableDictionary dictionary]; + NSMutableArray *toFind = [NSMutableArray array]; + NSMutableArray *toFindStrings = [NSMutableArray array]; + + @synchronized (self.cachedFBSDKAppLinks) { + for (NSURL *url in urls) { + if (self.cachedFBSDKAppLinks[url]) { + appLinks[url] = self.cachedFBSDKAppLinks[url]; + } else { + [toFind addObject:url]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSString *toFindString = [url.absoluteString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +#pragma clang diagnostic pop + if (toFindString) { + [toFindStrings addObject:toFindString]; + } + } + } + } + if (toFind.count == 0) { + // All of the URLs have already been found. + handler(_cachedFBSDKAppLinks, nil); + } + NSMutableArray *fields = [NSMutableArray arrayWithObject:kIOSKey]; + + NSString *idiomSpecificField = nil; + + switch (self.userInterfaceIdiom) { + case UIUserInterfaceIdiomPad: + idiomSpecificField = kIPadKey; + break; + case UIUserInterfaceIdiomPhone: + idiomSpecificField = kIPhoneKey; + break; + default: + break; + } + if (idiomSpecificField) { + [fields addObject:idiomSpecificField]; + } + NSString *path = [NSString stringWithFormat:@"?fields=%@.fields(%@)&ids=%@", + kAppLinksKey, + [fields componentsJoinedByString:@","], + [toFindStrings componentsJoinedByString:@","]]; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:path + parameters:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (error) { + handler(@{}, error); + return; + } + for (NSURL *url in toFind) { + id nestedObject = result[url.absoluteString][kAppLinksKey]; + NSMutableArray *rawTargets = [NSMutableArray array]; + if (idiomSpecificField) { + [rawTargets addObjectsFromArray:nestedObject[idiomSpecificField]]; + } + [rawTargets addObjectsFromArray:nestedObject[kIOSKey]]; + + NSMutableArray *targets = [NSMutableArray arrayWithCapacity:rawTargets.count]; + for (id rawTarget in rawTargets) { + [targets addObject:[FBSDKAppLinkTarget appLinkTargetWithURL:[NSURL URLWithString:rawTarget[kURLKey]] + appStoreId:rawTarget[kIOSAppStoreIdKey] + appName:rawTarget[kIOSAppNameKey]]]; + } + + id webTarget = nestedObject[kWebKey]; + NSString *webFallbackString = webTarget[kURLKey]; + NSURL *fallbackUrl = webFallbackString ? [NSURL URLWithString:webFallbackString] : url; + + NSNumber *shouldFallback = webTarget[kShouldFallbackKey]; + if (shouldFallback && !shouldFallback.boolValue) { + fallbackUrl = nil; + } + + FBSDKAppLink *link = [FBSDKAppLink appLinkWithSourceURL:url + targets:targets + webURL:fallbackUrl]; + @synchronized (self.cachedFBSDKAppLinks) { + self.cachedFBSDKAppLinks[url] = link; + } + appLinks[url] = link; + } + handler(appLinks, nil); + }]; +} + +- (BFTask *)appLinksFromURLsInBackground:(NSArray *)urls +{ + if (![FBSDKSettings clientToken] && ![FBSDKAccessToken currentAccessToken]) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"A user access token or clientToken is required to use FBAppLinkResolver"]; + } + NSMutableDictionary *appLinks = [NSMutableDictionary dictionary]; + NSMutableArray *toFind = [NSMutableArray array]; + NSMutableArray *toFindStrings = [NSMutableArray array]; + + @synchronized (self.cachedBFAppLinks) { + for (NSURL *url in urls) { + if (self.cachedBFAppLinks[url]) { + appLinks[url] = self.cachedBFAppLinks[url]; + } else { + [toFind addObject:url]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSString *toFindString = [url.absoluteString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +#pragma clang diagnostic pop + if (toFindString) { + [toFindStrings addObject:toFindString]; + } + } + } + } + if (toFind.count == 0) { + // All of the URLs have already been found. + return [g_BFTaskClass taskWithResult:appLinks]; + } + NSMutableArray *fields = [NSMutableArray arrayWithObject:kIOSKey]; + + NSString *idiomSpecificField = nil; + + switch (self.userInterfaceIdiom) { + case UIUserInterfaceIdiomPad: + idiomSpecificField = kIPadKey; + break; + case UIUserInterfaceIdiomPhone: + idiomSpecificField = kIPhoneKey; + break; + default: + break; + } + if (idiomSpecificField) { + [fields addObject:idiomSpecificField]; + } + NSString *path = [NSString stringWithFormat:@"?fields=%@.fields(%@)&ids=%@", + kAppLinksKey, + [fields componentsJoinedByString:@","], + [toFindStrings componentsJoinedByString:@","]]; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:path + parameters:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + BFTaskCompletionSource *tcs = [g_BFTaskCompletionSourceClass taskCompletionSource]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (error) { + [tcs setError:error]; + return; + } + for (NSURL *url in toFind) { + id nestedObject = result[url.absoluteString][kAppLinksKey]; + NSMutableArray *rawTargets = [NSMutableArray array]; + if (idiomSpecificField) { + [rawTargets addObjectsFromArray:nestedObject[idiomSpecificField]]; + } + [rawTargets addObjectsFromArray:nestedObject[kIOSKey]]; + + NSMutableArray *targets = [NSMutableArray arrayWithCapacity:rawTargets.count]; + for (id rawTarget in rawTargets) { + [targets addObject:[g_BFAppLinkTargetClass appLinkTargetWithURL:[NSURL URLWithString:rawTarget[kURLKey]] + appStoreId:rawTarget[kIOSAppStoreIdKey] + appName:rawTarget[kIOSAppNameKey]]]; + } + + id webTarget = nestedObject[kWebKey]; + NSString *webFallbackString = webTarget[kURLKey]; + NSURL *fallbackUrl = webFallbackString ? [NSURL URLWithString:webFallbackString] : url; + + NSNumber *shouldFallback = webTarget[kShouldFallbackKey]; + if (shouldFallback && !shouldFallback.boolValue) { + fallbackUrl = nil; + } + + BFAppLink *link = [g_BFAppLinkClass appLinkWithSourceURL:url + targets:targets + webURL:fallbackUrl]; + @synchronized (self.cachedBFAppLinks) { + self.cachedBFAppLinks[url] = link; + } + appLinks[url] = link; + } + [tcs setResult:appLinks]; + }]; + return tcs.task; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (BFTask *)appLinkFromURLInBackground:(NSURL *)url +{ + // Implement in terms of appLinksFromURLsInBackground + BFTask *resolveTask = [self appLinksFromURLsInBackground:@[url]]; + return [resolveTask continueWithSuccessBlock:^id(BFTask *task) { + return task.result[url]; + }]; +} +#pragma clang diagnostic pop + ++ (instancetype)resolver +{ + return [[self alloc] initWithUserInterfaceIdiom:UI_USER_INTERFACE_IDIOM()]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h new file mode 100644 index 0000000000..fac242537d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h @@ -0,0 +1,60 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAppLink; + +/** + Describes the callback for appLinkFromURLInBackground. + @param appLink the FBSDKAppLink representing the deferred App Link + @param error the error during the request, if any + + */ +typedef void (^FBSDKAppLinkFromURLHandler)(FBSDKAppLink * _Nullable appLink, NSError * _Nullable error); + + +/** + Describes the callback for appLinkFromURLInBackground. + @param appLinks the FBSDKAppLinks representing the deferred App Links + @param error the error during the request, if any + */ +typedef void (^FBSDKAppLinksFromURLArrayHandler)(NSDictionary * appLinks, + NSError * _Nullable error); + +/*! + Implement this protocol to provide an alternate strategy for resolving + App Links that may include pre-fetching, caching, or querying for App Link + data from an index provided by a service provider. + */ +@protocol FBSDKAppLinkResolving + +/** + Asynchronously resolves App Link data for a given URL. + + @param url The URL to resolve into an App Link. + @param handler The completion block that will return an App Link for the given URL. + */ +- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkFromURLHandler)handler +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h new file mode 100644 index 0000000000..3f587a67ae --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h @@ -0,0 +1,100 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkReturnToRefererView.h" + +NS_ASSUME_NONNULL_BEGIN + +@class FBSDKAppLink; +@class FBSDKAppLinkReturnToRefererController; + +/*! + Protocol that a class can implement in order to be notified when the user has navigated back + to the referer of an App Link. + */ +@protocol FBSDKAppLinkReturnToRefererControllerDelegate + +@optional + +/*! Called when the user has tapped to navigate, but before the navigation has been performed. */ +- (void)returnToRefererController:(FBSDKAppLinkReturnToRefererController *)controller + willNavigateToAppLink:(FBSDKAppLink *)appLink; + +/*! Called after the navigation has been attempted, with an indication of whether the referer + app link was successfully opened. */ +- (void)returnToRefererController:(FBSDKAppLinkReturnToRefererController *)controller + didNavigateToAppLink:(FBSDKAppLink *)url + type:(FBSDKAppLinkNavigationType)type; + +@end + +/*! + A controller class that implements default behavior for a FBSDKAppLinkReturnToRefererView, including + the ability to display the view above the navigation bar for navigation-based apps. + */ +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") +@interface FBSDKAppLinkReturnToRefererController : NSObject + +/*! + The delegate that will be notified when the user navigates back to the referer. + */ +@property (nonatomic, weak, nullable) id delegate; + +/*! + The FBSDKAppLinkReturnToRefererView this controller is controlling. + */ +@property (nonatomic, strong) FBSDKAppLinkReturnToRefererView *view; + +/*! + Initializes a controller suitable for controlling a FBSDKAppLinkReturnToRefererView that is to be displayed + contained within another UIView (i.e., not displayed above the navigation bar). + */ +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +/*! + Initializes a controller suitable for controlling a FBSDKAppLinkReturnToRefererView that is to be displayed + displayed above the navigation bar. + */ +- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController; + +/*! + Removes the view entirely from the navigation controller it is currently displayed in. + */ +- (void)removeFromNavController; + +/*! + Shows the FBSDKAppLinkReturnToRefererView with the specified referer information. If nil or missing data, + the view will not be displayed. */ +- (void)showViewForRefererAppLink:(FBSDKAppLink *)refererAppLink; + +/*! + Shows the FBSDKAppLinkReturnToRefererView with referer information extracted from the specified URL. + If nil or missing referer App Link data, the view will not be displayed. */ +- (void)showViewForRefererURL:(NSURL *)url; + +/*! + Closes the view, possibly animating it. + */ +- (void)closeViewAnimated:(BOOL)animated; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m new file mode 100644 index 0000000000..c2268f699c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m @@ -0,0 +1,238 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkReturnToRefererController.h" + +#import "FBSDKAppLink.h" +#import "FBSDKAppLinkReturnToRefererView_Internal.h" +#import "FBSDKURL_Internal.h" + +static const CFTimeInterval kFBSDKViewAnimationDuration = 0.25f; + +@implementation FBSDKAppLinkReturnToRefererController { + UINavigationController *_navigationController; + FBSDKAppLinkReturnToRefererView *_view; +} + +#pragma mark - Object lifecycle + +- (instancetype)init { + return [super init]; +} + +- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController { + self = [self init]; + if (self) { + _navigationController = navController; + + if (_navigationController != nil) { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(statusBarFrameWillChange:) + name:UIApplicationWillChangeStatusBarFrameNotification + object:nil]; + [nc addObserver:self + selector:@selector(statusBarFrameDidChange:) + name:UIApplicationDidChangeStatusBarFrameNotification + object:nil]; + [nc addObserver:self + selector:@selector(orientationDidChange:) + name:UIDeviceOrientationDidChangeNotification + object:nil]; + } + } + return self; +} + +- (void)dealloc { + _view.delegate = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Public API + +- (FBSDKAppLinkReturnToRefererView *)view { + if (!_view) { + self.view = [[FBSDKAppLinkReturnToRefererView alloc] initWithFrame:CGRectZero]; + if (_navigationController) { + [_navigationController.view addSubview:_view]; + } + } + return _view; +} + +- (void)setView:(FBSDKAppLinkReturnToRefererView *)view { + if (_view != view) { + _view.delegate = nil; + } + + _view = view; + _view.delegate = self; + + if (_navigationController) { + _view.includeStatusBarInSize = FBSDKIncludeStatusBarInSizeAlways; + } +} + +- (void)showViewForRefererAppLink:(FBSDKAppLink *)refererAppLink { + self.view.refererAppLink = refererAppLink; + + [_view sizeToFit]; + + if (_navigationController) { + if (!_view.closed) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self moveNavigationBar]; + }); + } + } +} + +- (void)showViewForRefererURL:(NSURL *)url { + FBSDKAppLink *appLink = [FBSDKURL URLForRenderBackToReferrerBarURL:url].appLinkReferer; + [self showViewForRefererAppLink:appLink]; +} + +- (void)removeFromNavController { + if (_navigationController) { + [_view removeFromSuperview]; + _navigationController = nil; + } +} + +#pragma mark - FBSDKAppLinkReturnToRefererViewDelegate + +- (void)returnToRefererViewDidTapInsideCloseButton:(FBSDKAppLinkReturnToRefererView *)view { + [self closeViewAnimated:YES explicitlyClosed:YES]; +} + +- (void)returnToRefererViewDidTapInsideLink:(FBSDKAppLinkReturnToRefererView *)view + link:(FBSDKAppLink *)link { + [self openRefererAppLink:link]; + [self closeViewAnimated:NO explicitlyClosed:NO]; +} + +#pragma mark - Private + +- (void)statusBarFrameWillChange:(NSNotification *)notification { + NSValue *rectValue = [notification.userInfo valueForKey:UIApplicationStatusBarFrameUserInfoKey]; + CGRect newFrame; + [rectValue getValue:&newFrame]; + + if (_navigationController && !_view.closed) { + if (CGRectGetHeight(newFrame) == 40) { + UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState; + [UIView animateWithDuration:kFBSDKViewAnimationDuration delay:0.0 options:options animations:^{ + self->_view.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(self->_view.bounds), 0.0); + } completion:nil]; + } + } +} + +- (void)statusBarFrameDidChange:(NSNotification *)notification { + NSValue *rectValue = [notification.userInfo valueForKey:UIApplicationStatusBarFrameUserInfoKey]; + CGRect newFrame; + [rectValue getValue:&newFrame]; + + if (_navigationController && !_view.closed) { + if (CGRectGetHeight(newFrame) == 40) { + UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState; + [UIView animateWithDuration:kFBSDKViewAnimationDuration delay:0.0 options:options animations:^{ + [self->_view sizeToFit]; + [self moveNavigationBar]; + } completion:nil]; + } + } +} + +- (void)orientationDidChange:(NSNotificationCenter *)notification { + if (_navigationController && !_view.closed && CGRectGetHeight(_view.bounds) > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self moveNavigationBar]; + }); + } +} + +- (void)moveNavigationBar { + if (_view.closed || !_view.refererAppLink) { + return; + } + + [self updateNavigationBarY:CGRectGetHeight(_view.bounds)]; +} + +- (void)updateNavigationBarY:(CGFloat)y { + UINavigationBar *navigationBar = _navigationController.navigationBar; + CGRect navigationBarFrame = navigationBar.frame; + CGFloat oldContainerViewY = CGRectGetMaxY(navigationBarFrame); + navigationBarFrame.origin.y = y; + navigationBar.frame = navigationBarFrame; + + CGFloat dy = CGRectGetMaxY(navigationBarFrame) - oldContainerViewY; + UIView *containerView = _navigationController.visibleViewController.view.superview; + containerView.frame = UIEdgeInsetsInsetRect(containerView.frame, UIEdgeInsetsMake(dy, 0.0, 0.0, 0.0)); +} + +- (void)closeViewAnimated:(BOOL)animated { + [self closeViewAnimated:animated explicitlyClosed:YES]; +} + +- (void)closeViewAnimated:(BOOL)animated explicitlyClosed:(BOOL)explicitlyClosed { + void (^closer)(void) = ^{ + if (self->_navigationController) { + [self updateNavigationBarY:self->_view.statusBarHeight]; + } + + CGRect frame = self->_view.frame; + frame.size.height = 0.0; + self->_view.frame = frame; + }; + + if (animated) { + [UIView animateWithDuration:kFBSDKViewAnimationDuration animations:^{ + closer(); + } completion:^(BOOL finished) { + if (explicitlyClosed) { + self->_view.closed = YES; + } + }]; + } else { + closer(); + if (explicitlyClosed) { + self->_view.closed = YES; + } + } +} + +- (void)openRefererAppLink:(FBSDKAppLink *)refererAppLink { + if (refererAppLink) { + id delegate = _delegate; + if ([delegate respondsToSelector:@selector(returnToRefererController:willNavigateToAppLink:)]) { + [delegate returnToRefererController:self willNavigateToAppLink:refererAppLink]; + } + + NSError *error = nil; + FBSDKAppLinkNavigationType type = [FBSDKAppLinkNavigation navigateToAppLink:refererAppLink error:&error]; + + if ([delegate respondsToSelector:@selector(returnToRefererController:didNavigateToAppLink:type:)]) { + [delegate returnToRefererController:self didNavigateToAppLink:refererAppLink type:type]; + } + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h new file mode 100644 index 0000000000..c5378b73cb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h @@ -0,0 +1,90 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkNavigation.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSUInteger, FBSDKIncludeStatusBarInSize) { + FBSDKIncludeStatusBarInSizeNever, + FBSDKIncludeStatusBarInSizeIOS7AndLater, + FBSDKIncludeStatusBarInSizeAlways, +}; + +@class FBSDKAppLinkReturnToRefererView; +@class FBSDKURL; + +/*! + Protocol that a class can implement in order to be notified when the user has navigated back + to the referer of an App Link. + */ +@protocol FBSDKAppLinkReturnToRefererViewDelegate + +/*! + Called when the user has tapped inside the close button. + */ +- (void)returnToRefererViewDidTapInsideCloseButton:(FBSDKAppLinkReturnToRefererView *)view; + +/*! + Called when the user has tapped inside the App Link portion of the view. + */ +- (void)returnToRefererViewDidTapInsideLink:(FBSDKAppLinkReturnToRefererView *)view + link:(FBSDKAppLink *)link; + +@end + +/*! + Provides a UIView that displays a button allowing users to navigate back to the + application that launched the App Link currently being handled, if the App Link + contained referer data. The user can also close the view by clicking a close button + rather than navigating away. If the view is provided an App Link that does not contain + referer data, it will have zero size and no UI will be displayed. + */ +NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") +@interface FBSDKAppLinkReturnToRefererView : UIView + +/*! + The delegate that will be notified when the user navigates back to the referer. + */ +@property (nonatomic, weak, nullable) id delegate; + +/*! + The color of the text label and close button. + */ +@property (nonatomic, strong) UIColor *textColor; + +@property (nonatomic, strong) FBSDKAppLink *refererAppLink; + +/*! + Indicates whether to extend the size of the view to include the current status bar + size, for use in scenarios where the view might extend under the status bar on iOS 7 and + above; this property has no effect on earlier versions of iOS. + */ +@property (nonatomic, assign) FBSDKIncludeStatusBarInSize includeStatusBarInSize; + +/*! + Indicates whether the user has closed the view by clicking the close button. + */ +@property (nonatomic, assign) BOOL closed; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m new file mode 100644 index 0000000000..82ede34e6c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m @@ -0,0 +1,271 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkReturnToRefererView.h" + +#import "FBSDKAppLink.h" +#import "FBSDKAppLinkTarget.h" + +static const CGFloat FBSDKMarginX = 8.5f; +static const CGFloat FBSDKMarginY = 8.5f; + +static NSString *const FBSDKRefererAppLink = @"referer_app_link"; +static NSString *const FBSDKRefererAppName = @"app_name"; +static NSString *const FBSDKRefererUrl = @"url"; +static const CGFloat FBSDKCloseButtonWidth = 12.0; +static const CGFloat FBSDKCloseButtonHeight = 12.0; + +@interface FBSDKAppLinkReturnToRefererView () + +@property (nonatomic, strong) UILabel *labelView; +@property (nonatomic, strong) UIButton *closeButton; +@property (nonatomic, strong) UITapGestureRecognizer *insideTapGestureRecognizer; + +@end + +@implementation FBSDKAppLinkReturnToRefererView { + BOOL _explicitlyHidden; +} + +#pragma mark - Initialization + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self commonInit]; + [self sizeToFit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self commonInit]; + } + return self; +} + +- (void)commonInit { + // Initialization code + _includeStatusBarInSize = FBSDKIncludeStatusBarInSizeIOS7AndLater; + + // iOS 7 system blue color + self.backgroundColor = [UIColor colorWithRed:0.0f green:122.0f / 255.0f blue:1.0f alpha:1.0f]; + self.textColor = [UIColor whiteColor]; + self.clipsToBounds = YES; + + [self initViews]; +} + +- (void)initViews { + if (!_labelView && !_closeButton) { + _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _closeButton.backgroundColor = [UIColor clearColor]; + _closeButton.userInteractionEnabled = YES; + _closeButton.clipsToBounds = YES; + _closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; + _closeButton.contentMode = UIViewContentModeCenter; + [_closeButton addTarget:self action:@selector(closeButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; + + [self addSubview:_closeButton]; + + _labelView = [[UILabel alloc] initWithFrame:CGRectZero]; + _labelView.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; + _labelView.textColor = [UIColor whiteColor]; + _labelView.backgroundColor = [UIColor clearColor]; + _labelView.textAlignment = NSTextAlignmentCenter; + _labelView.clipsToBounds = YES; + [self updateLabelText]; + [self addSubview:_labelView]; + + _insideTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapInside:)]; + _labelView.userInteractionEnabled = YES; + [_labelView addGestureRecognizer:_insideTapGestureRecognizer]; + + [self updateColors]; + } +} + +#pragma mark - Layout + +- (CGSize)intrinsicContentSize { + CGSize size = self.bounds.size; + if (_closed || !self.hasRefererData) { + size.height = 0.0; + } else { + CGSize labelSize = [_labelView sizeThatFits:size]; + size = CGSizeMake(size.width, labelSize.height + 2 * FBSDKMarginY + self.statusBarHeight); + } + return size; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGRect bounds = self.bounds; + + _labelView.preferredMaxLayoutWidth = _labelView.bounds.size.width; + CGSize labelSize = [_labelView sizeThatFits:bounds.size]; + _labelView.frame = CGRectMake(FBSDKMarginX, + CGRectGetMaxY(bounds) - labelSize.height - 1.5f * FBSDKMarginY, + CGRectGetMaxX(bounds) - FBSDKCloseButtonWidth - 3 * FBSDKMarginX, + labelSize.height + FBSDKMarginY); + + _closeButton.frame = CGRectMake(CGRectGetMaxX(bounds) - FBSDKCloseButtonWidth - 2 * FBSDKMarginX, + _labelView.center.y - FBSDKCloseButtonHeight / 2.0f - FBSDKMarginY, + FBSDKCloseButtonWidth + 2 * FBSDKMarginX, + FBSDKCloseButtonHeight + 2 * FBSDKMarginY); +} + +- (CGSize)sizeThatFits:(CGSize)size { + if (_closed || !self.hasRefererData) { + size = CGSizeMake(size.width, 0.0); + } else { + CGSize labelSize = [_labelView sizeThatFits:size]; + size = CGSizeMake(size.width, labelSize.height + 2 * FBSDKMarginY + self.statusBarHeight); + } + return size; +} + +- (CGFloat)statusBarHeight { + UIApplication *application = [UIApplication sharedApplication]; + + BOOL include; + switch (_includeStatusBarInSize) { + case FBSDKIncludeStatusBarInSizeAlways: + include = YES; + break; + case FBSDKIncludeStatusBarInSizeIOS7AndLater: { + float systemVersion = [UIDevice currentDevice].systemVersion.floatValue; + include = (systemVersion >= 7.0); + break; + } + case FBSDKIncludeStatusBarInSizeNever: + include = NO; + break; + } + if (include && !application.statusBarHidden) { + BOOL landscape = UIInterfaceOrientationIsLandscape(application.statusBarOrientation); + CGRect statusBarFrame = application.statusBarFrame; + return landscape ? CGRectGetWidth(statusBarFrame) : CGRectGetHeight(statusBarFrame); + } + + return 0; +} + +#pragma mark - Public API + +- (void)setIncludeStatusBarInSize:(FBSDKIncludeStatusBarInSize)includeStatusBarInSize { + _includeStatusBarInSize = includeStatusBarInSize; + [self setNeedsLayout]; + [self invalidateIntrinsicContentSize]; +} + +- (void)setTextColor:(UIColor *)textColor { + _textColor = textColor; + [self updateColors]; +} + +- (void)setRefererAppLink:(FBSDKAppLink *)refererAppLink { + _refererAppLink = refererAppLink; + [self updateLabelText]; + [self updateHidden]; + [self invalidateIntrinsicContentSize]; +} + +- (void)setClosed:(BOOL)closed { + if (_closed != closed) { + _closed = closed; + [self updateHidden]; + [self invalidateIntrinsicContentSize]; + } +} + +- (void)setHidden:(BOOL)hidden { + _explicitlyHidden = hidden; + [self updateHidden]; +} + +#pragma mark - Private + +- (void)updateLabelText { + NSString *appName = (_refererAppLink && _refererAppLink.targets[0]) ? _refererAppLink.targets[0].appName : nil; + _labelView.text = [self localizedLabelForReferer:appName]; +} + +- (void)updateColors { + UIImage *closeButtonImage = [self drawCloseButtonImageWithColor:_textColor]; + + _labelView.textColor = _textColor; + [_closeButton setImage:closeButtonImage forState:UIControlStateNormal]; +} + +- (UIImage *)drawCloseButtonImageWithColor:(UIColor *)color { + + UIGraphicsBeginImageContextWithOptions(CGSizeMake(FBSDKCloseButtonWidth, FBSDKCloseButtonHeight), NO, 0.0f); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetStrokeColorWithColor(context, color.CGColor); + CGContextSetFillColorWithColor(context, color.CGColor); + + CGContextSetLineWidth(context, 1.25f); + + CGFloat inset = 0.5f; + + CGContextMoveToPoint(context, inset, inset); + CGContextAddLineToPoint(context, FBSDKCloseButtonWidth - inset, FBSDKCloseButtonHeight - inset); + CGContextStrokePath(context); + + CGContextMoveToPoint(context, FBSDKCloseButtonWidth - inset, inset); + CGContextAddLineToPoint(context, inset, FBSDKCloseButtonHeight - inset); + CGContextStrokePath(context); + + UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return result; +} + +- (NSString *)localizedLabelForReferer:(NSString *)refererName { + if (!refererName) { + return nil; + } + + NSString *format = NSLocalizedString(@"Touch to return to %1$@", @"Format for the string to return to a calling app."); + return [NSString stringWithFormat:format, refererName]; +} + +- (BOOL)hasRefererData { + return _refererAppLink && _refererAppLink.targets[0]; +} + +- (void)closeButtonTapped:(id)sender { + [_delegate returnToRefererViewDidTapInsideCloseButton:self]; +} + +- (void)onTapInside:(UIGestureRecognizer *)sender { + [_delegate returnToRefererViewDidTapInsideLink:self link:_refererAppLink]; +} + +- (void)updateHidden { + super.hidden = _explicitlyHidden || _closed || !self.hasRefererData; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h new file mode 100644 index 0000000000..091d66af61 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h @@ -0,0 +1,45 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/*! + Represents a target defined in App Link metadata, consisting of at least + a URL, and optionally an App Store ID and name. + */ +@interface FBSDKAppLinkTarget : NSObject + +/*! Creates a FBSDKAppLinkTarget with the given app site and target URL. */ ++ (instancetype)appLinkTargetWithURL:(NSURL *)url + appStoreId:(nullable NSString *)appStoreId + appName:(NSString *)appName; + +/*! The URL prefix for this app link target */ +@property (nonatomic, strong, readonly) NSURL *URL; + +/*! The app ID for the app store */ +@property (nonatomic, copy, readonly, nullable) NSString *appStoreId; + +/*! The name of the app */ +@property (nonatomic, copy, readonly) NSString *appName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m new file mode 100644 index 0000000000..250ed1a1ca --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m @@ -0,0 +1,41 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkTarget.h" + +@interface FBSDKAppLinkTarget () + +@property (nonatomic, strong) NSURL *URL; +@property (nonatomic, copy) NSString *appStoreId; +@property (nonatomic, copy) NSString *appName; + +@end + +@implementation FBSDKAppLinkTarget + ++ (instancetype)appLinkTargetWithURL:(NSURL *)url + appStoreId:(NSString *)appStoreId + appName:(NSString *)appName { + FBSDKAppLinkTarget *target = [[self alloc] init]; + target.URL = url; + target.appStoreId = appStoreId; + target.appName = appName; + return target; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h new file mode 100644 index 0000000000..8a971b23e0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h @@ -0,0 +1,89 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + Describes the callback for fetchDeferredAppLink. + @param url the url representing the deferred App Link + @param error the error during the request, if any + + + The url may also have a fb_click_time_utc query parameter that + represents when the click occurred that caused the deferred App Link to be created. + */ +typedef void (^FBSDKDeferredAppLinkHandler)(NSURL *url, NSError *error); + + +/** + Describes the callback for fetchOrganicDeferredAppLink. + @param url the url representing the deferred App Link + */ +typedef void (^FBSDKDeferredAppInviteHandler)(NSURL *url); + + +/** + Class containing App Links related utility methods. + */ +@interface FBSDKAppLinkUtility : NSObject + +/** + Call this method from the main thread to fetch deferred applink data if you use Mobile App + Engagement Ads (https://developers.facebook.com/docs/ads-for-apps/mobile-app-ads-engagement). + This may require a network round trip. If successful, the handler is invoked with the link + data (this will only return a valid URL once, and future calls will result in a nil URL + value in the callback). + + @param handler the handler to be invoked if there is deferred App Link data + + + The handler may contain an NSError instance to capture any errors. In the + common case where there simply was no app link data, the NSError instance will be nil. + + This method should only be called from a location that occurs after any launching URL has + been processed (e.g., you should call this method from your application delegate's + applicationDidBecomeActive:). + */ ++ (void)fetchDeferredAppLink:(FBSDKDeferredAppLinkHandler)handler; + +/** + +@warning This method is no longer available and will always return NO. + */ ++ (BOOL)fetchDeferredAppInvite:(FBSDKDeferredAppInviteHandler)handler +DEPRECATED_MSG_ATTRIBUTE("This method is no longer available."); + +/* + Call this method to fetch promotion code from the url, if it's present. This function + requires Bolts framework. + + Note: This throws an exception if Bolts.framework is not linked. Add '[BFURL class]' in intialize method + of your AppDelegate. + + @param url App Link url that was passed to the app. + + @return Promotion code string. + + + Call this method to fetch App Invite Promotion Code from applink if present. + This can be used to fetch the promotion code that was associated with the invite when it + was created. This method should be called with the url from the openURL method. +*/ ++ (NSString*)appInvitePromotionCodeFromURL:(NSURL*)url; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m new file mode 100644 index 0000000000..9b180c23d2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m @@ -0,0 +1,108 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkUtility.h" + +#import + +#import "FBSDKAppEventsUtility.h" +#import "FBSDKGraphRequest.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKSettings.h" +#import "FBSDKUtility.h" + +static NSString *const FBSDKLastDeferredAppLink = @"com.facebook.sdk:lastDeferredAppLink%@"; +static NSString *const FBSDKDeferredAppLinkEvent = @"DEFERRED_APP_LINK"; + +@implementation FBSDKAppLinkUtility {} + ++ (void)fetchDeferredAppLink:(FBSDKDeferredAppLinkHandler)handler +{ + NSAssert([NSThread isMainThread], @"FBSDKAppLink fetchDeferredAppLink: must be invoked from main thread."); + + NSString *appID = [FBSDKSettings appID]; + + // Deferred app links are only currently used for engagement ads, thus we consider the app to be an advertising one. + // If this is considered for organic, non-ads scenarios, we'll need to retrieve the FBAppEventsUtility.shouldAccessAdvertisingID + // before we make this call. + NSMutableDictionary *deferredAppLinkParameters = + [FBSDKAppEventsUtility activityParametersDictionaryForEvent:FBSDKDeferredAppLinkEvent + implicitEventsOnly:NO + shouldAccessAdvertisingID:YES]; + + FBSDKGraphRequest *deferredAppLinkRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/activities", appID, nil] + parameters:deferredAppLinkParameters + tokenString:nil + version:nil + HTTPMethod:@"POST"]; + + [deferredAppLinkRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, + id result, + NSError *error) { + NSURL *applinkURL = nil; + if (!error) { + NSString *appLinkString = result[@"applink_url"]; + if (appLinkString) { + applinkURL = [NSURL URLWithString:appLinkString]; + + NSString *createTimeUtc = result[@"click_time"]; + if (createTimeUtc) { + // append/translate the create_time_utc so it can be used by clients + NSString *modifiedURLString = [applinkURL.absoluteString + stringByAppendingFormat:@"%@fb_click_time_utc=%@", + (applinkURL.query) ? @"&" : @"?" , + createTimeUtc]; + applinkURL = [NSURL URLWithString:modifiedURLString]; + } + } + } + + if (handler) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(applinkURL, error); + }); + } + }]; +} + ++ (BOOL)fetchDeferredAppInvite:(FBSDKDeferredAppInviteHandler)handler +{ + return NO; +} + ++ (NSString*)appInvitePromotionCodeFromURL:(NSURL*)url; +{ + BFURL *parsedUrl = [[FBSDKInternalUtility resolveBoltsClassWithName:@"BFURL"] URLWithURL:url]; + NSDictionary *extras = parsedUrl.appLinkExtras; + if (extras) { + NSString *deeplinkContextString = extras[@"deeplink_context"]; + + // Parse deeplinkContext and extract promo code + if (deeplinkContextString.length > 0) { + NSError *error = nil; + NSDictionary *deeplinkContextData = [FBSDKInternalUtility objectForJSONString:deeplinkContextString error:&error]; + if (!error && [deeplinkContextData isKindOfClass:[NSDictionary class]]) { + return deeplinkContextData[@"promo_code"]; + } + } + } + + return nil; + +} +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h new file mode 100644 index 0000000000..33eba98f90 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkResolving.h" + +NS_ASSUME_NONNULL_BEGIN + +/*! + A reference implementation for an App Link resolver that uses a hidden UIWebView + to parse the HTML containing App Link metadata. + */ +@interface FBSDKWebViewAppLinkResolver : NSObject + +/*! + Gets the instance of a FBSDKWebViewAppLinkResolver. + */ ++ (instancetype)sharedInstance; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m new file mode 100644 index 0000000000..6b6839a1be --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m @@ -0,0 +1,304 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKWebViewAppLinkResolver.h" + +#import + +#import "FBSDKAppLink.h" +#import "FBSDKAppLinkTarget.h" + +/** + Describes the callback for appLinkFromURLInBackground. + @param result the results from following redirects + @param error the error during the request, if any + + */ +typedef void (^FBSDKURLFollowRedirectsHandler)(NSDictionary *result, NSError * _Nullable error); + +// Defines JavaScript to extract app link tags from HTML content +static NSString *const FBSDKWebViewAppLinkResolverTagExtractionJavaScript = @"" +"(function() {" +" var metaTags = document.getElementsByTagName('meta');" +" var results = [];" +" for (var i = 0; i < metaTags.length; i++) {" +" var property = metaTags[i].getAttribute('property');" +" if (property && property.substring(0, 'al:'.length) === 'al:') {" +" var tag = { \"property\": metaTags[i].getAttribute('property') };" +" if (metaTags[i].hasAttribute('content')) {" +" tag['content'] = metaTags[i].getAttribute('content');" +" }" +" results.push(tag);" +" }" +" }" +" return JSON.stringify(results);" +"})()"; +static NSString *const FBSDKWebViewAppLinkResolverIOSURLKey = @"url"; +static NSString *const FBSDKWebViewAppLinkResolverIOSAppStoreIdKey = @"app_store_id"; +static NSString *const FBSDKWebViewAppLinkResolverIOSAppNameKey = @"app_name"; +static NSString *const FBSDKWebViewAppLinkResolverDictionaryValueKey = @"_value"; +static NSString *const FBSDKWebViewAppLinkResolverPreferHeader = @"Prefer-Html-Meta-Tags"; +static NSString *const FBSDKWebViewAppLinkResolverMetaTagPrefix = @"al"; +static NSString *const FBSDKWebViewAppLinkResolverWebKey = @"web"; +static NSString *const FBSDKWebViewAppLinkResolverIOSKey = @"ios"; +static NSString *const FBSDKWebViewAppLinkResolverIPhoneKey = @"iphone"; +static NSString *const FBSDKWebViewAppLinkResolverIPadKey = @"ipad"; +static NSString *const FBSDKWebViewAppLinkResolverWebURLKey = @"url"; +static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_fallback"; + +@interface FBSDKWebViewAppLinkResolverWebViewDelegate : NSObject + +@property (nonatomic, copy) void (^didFinishLoad)(UIWebView *webView); +@property (nonatomic, copy) void (^didFailLoadWithError)(UIWebView *webView, NSError *error); +@property (nonatomic, assign) BOOL hasLoaded; + +@end + +@implementation FBSDKWebViewAppLinkResolverWebViewDelegate + +- (void)webViewDidFinishLoad:(UIWebView *)webView { + if (self.didFinishLoad) { + self.didFinishLoad(webView); + } +} + +- (void)webViewDidStartLoad:(UIWebView *)webView { +} + +- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { + if (self.didFailLoadWithError) { + self.didFailLoadWithError(webView, error); + } +} + +- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { + if (self.hasLoaded) { + // Consider loading a second resource to be "success", since it indicates an inner frame + // or redirect is happening. We can run the tag extraction script at this point. + self.didFinishLoad(webView); + return NO; + } + self.hasLoaded = YES; + return YES; +} + +@end + +@implementation FBSDKWebViewAppLinkResolver + ++ (instancetype)sharedInstance { + static id instance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[self alloc] init]; + }); + return instance; +} + +- (void)followRedirects:(NSURL *)url handler:(FBSDKURLFollowRedirectsHandler)handler +{ + // This task will be resolved with either the redirect NSURL + // or a dictionary with the response data to be returned. + void (^completion)(NSURLResponse *response, NSData *data, NSError *error) = ^(NSURLResponse *response, NSData *data, NSError *error) { + if (error) { + handler(nil, error); + return; + } + + if ([response isKindOfClass:[NSHTTPURLResponse class]]) { + NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; + + // NSURLConnection usually follows redirects automatically, but the + // documentation is unclear what the default is. This helps it along. + if (httpResponse.statusCode >= 300 && httpResponse.statusCode < 400) { + NSString *redirectString = httpResponse.allHeaderFields[@"Location"]; + NSURL *redirectURL = [NSURL URLWithString:redirectString]; + [self followRedirects:redirectURL handler:handler]; + return; + } + } + + handler(@{ @"response" : response, @"data" : data }, nil); + }; + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request setValue:FBSDKWebViewAppLinkResolverMetaTagPrefix forHTTPHeaderField:FBSDKWebViewAppLinkResolverPreferHeader]; + + NSURLSession *session = [NSURLSession sharedSession]; + [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + completion(response, data, error); + }] resume]; +} + +- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkFromURLHandler)handler +{ + dispatch_async(dispatch_get_main_queue(), ^{ + [self followRedirects:url handler:^(NSDictionary *result, NSError * _Nullable error) { + + if (error) { + handler(nil, error); + return; + } + + NSData *responseData = result[@"data"]; + NSHTTPURLResponse *response = result[@"response"]; + + UIWebView *webView = [[UIWebView alloc] init]; + FBSDKWebViewAppLinkResolverWebViewDelegate *listener = [[FBSDKWebViewAppLinkResolverWebViewDelegate alloc] init]; + __block FBSDKWebViewAppLinkResolverWebViewDelegate *retainedListener = listener; + listener.didFinishLoad = ^(UIWebView *view) { + if (retainedListener) { + NSDictionary *ogData = [self getALDataFromLoadedPage:view]; + [view removeFromSuperview]; + view.delegate = nil; + retainedListener = nil; + handler([self appLinkFromALData:ogData destination:url], nil); + } + }; + listener.didFailLoadWithError = ^(UIWebView* view, NSError *loadError) { + if (retainedListener) { + [view removeFromSuperview]; + view.delegate = nil; + retainedListener = nil; + handler(nil, loadError); + } + }; + webView.delegate = listener; + webView.hidden = YES; + [webView loadData:responseData + MIMEType:response.MIMEType + textEncodingName:response.textEncodingName + baseURL:response.URL]; + UIWindow *window = [UIApplication sharedApplication].windows.firstObject; + [window addSubview:webView]; + }]; + }); +} + +/* + Builds up a data structure filled with the app link data from the meta tags on a page. + The structure of this object is a dictionary where each key holds an array of app link + data dictionaries. Values are stored in a key called "_value". + */ +- (NSDictionary *)parseALData:(NSArray *> *)dataArray { + NSMutableDictionary *al = [NSMutableDictionary dictionary]; + for (NSDictionary *tag in dataArray) { + NSString *name = tag[@"property"]; + if (![name isKindOfClass:[NSString class]]) { + continue; + } + NSArray *nameComponents = [name componentsSeparatedByString:@":"]; + if (![nameComponents[0] isEqualToString:FBSDKWebViewAppLinkResolverMetaTagPrefix]) { + continue; + } + NSMutableDictionary *root = al; + for (NSUInteger i = 1; i < nameComponents.count; i++) { + NSMutableArray *> *children = root[nameComponents[i]]; + if (!children) { + children = [NSMutableArray array]; + root[nameComponents[i]] = children; + } + NSMutableDictionary *child = children.lastObject; + if (!child || i == nameComponents.count - 1) { + child = [NSMutableDictionary dictionary]; + [children addObject:child]; + } + root = child; + } + if (tag[@"content"]) { + root[FBSDKWebViewAppLinkResolverDictionaryValueKey] = tag[@"content"]; + } + } + return al; +} + +- (NSDictionary *)getALDataFromLoadedPage:(UIWebView *)webView { + // Run some JavaScript in the webview to fetch the meta tags. + NSString *jsonString = [webView stringByEvaluatingJavaScriptFromString:FBSDKWebViewAppLinkResolverTagExtractionJavaScript]; + NSError *error = nil; + NSArray *> *arr = + [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] + options:0 + error:&error]; + return [self parseALData:arr]; +} + +/* + Converts app link data into a FBSDKAppLink containing the targets relevant for this platform. + */ +- (FBSDKAppLink *)appLinkFromALData:(NSDictionary *)appLinkDict destination:(NSURL *)destination { + NSMutableArray *linkTargets = [NSMutableArray array]; + + NSArray *platformData = nil; + + const UIUserInterfaceIdiom idiom = UI_USER_INTERFACE_IDIOM(); + if (idiom == UIUserInterfaceIdiomPad) { + platformData = @[ appLinkDict[FBSDKWebViewAppLinkResolverIPadKey] ?: @{}, + appLinkDict[FBSDKWebViewAppLinkResolverIOSKey] ?: @{} ]; + } else if (idiom == UIUserInterfaceIdiomPhone) { + platformData = @[ appLinkDict[FBSDKWebViewAppLinkResolverIPhoneKey] ?: @{}, + appLinkDict[FBSDKWebViewAppLinkResolverIOSKey] ?: @{} ]; + } else { + // Future-proofing. Other User Interface idioms should only hit ios. + platformData = @[ appLinkDict[FBSDKWebViewAppLinkResolverIOSKey] ?: @{} ]; + } + + for (NSArray *platformObjects in platformData) { + for (NSDictionary *platformDict in platformObjects) { + // The schema requires a single url/app store id/app name, + // but we could find multiple of them. We'll make a best effort + // to interpret this data. + NSArray *> *urls = platformDict[FBSDKWebViewAppLinkResolverIOSURLKey]; + NSArray *> *appStoreIds = platformDict[FBSDKWebViewAppLinkResolverIOSAppStoreIdKey]; + NSArray *> *appNames = platformDict[FBSDKWebViewAppLinkResolverIOSAppNameKey]; + + NSUInteger maxCount = MAX(urls.count, MAX(appStoreIds.count, appNames.count)); + + for (NSUInteger i = 0; i < maxCount; i++) { + NSString *urlString = urls[i][FBSDKWebViewAppLinkResolverDictionaryValueKey]; + NSURL *url = urlString ? [NSURL URLWithString:urlString] : nil; + NSString *appStoreId = appStoreIds[i][FBSDKWebViewAppLinkResolverDictionaryValueKey]; + NSString *appName = appNames[i][FBSDKWebViewAppLinkResolverDictionaryValueKey]; + FBSDKAppLinkTarget *target = [FBSDKAppLinkTarget appLinkTargetWithURL:url + appStoreId:appStoreId + appName:appName]; + [linkTargets addObject:target]; + } + } + } + + NSDictionary *webDict = appLinkDict[FBSDKWebViewAppLinkResolverWebKey][0]; + NSString *webUrlString = webDict[FBSDKWebViewAppLinkResolverWebURLKey][0][FBSDKWebViewAppLinkResolverDictionaryValueKey]; + NSString *shouldFallbackString = webDict[FBSDKWebViewAppLinkResolverShouldFallbackKey][0][FBSDKWebViewAppLinkResolverDictionaryValueKey]; + + NSURL *webUrl = destination; + + if (shouldFallbackString && + [@[ @"no", @"false", @"0" ] containsObject:shouldFallbackString.lowercaseString]) { + webUrl = nil; + } + if (webUrl && webUrlString) { + webUrl = [NSURL URLWithString:webUrlString]; + } + + return [FBSDKAppLink appLinkWithSourceURL:destination + targets:linkTargets + webURL:webUrl]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h new file mode 100644 index 0000000000..c42431b808 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h @@ -0,0 +1,23 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKBoltsMeasurementEventListener : NSObject ++ (FBSDKBoltsMeasurementEventListener *)defaultListener; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m new file mode 100644 index 0000000000..718e23b097 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m @@ -0,0 +1,87 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBoltsMeasurementEventListener.h" + +#import "FBSDKAppEvents+Internal.h" +#import "FBSDKTimeSpentData.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +static NSNotificationName const BoltsMeasurementEventNotification = @"com.parse.bolts.measurement_event"; + +#else + +static NSString *const BoltsMeasurementEventNotification = @"com.parse.bolts.measurement_event"; + +#endif + +static NSString *const BoltsMeasurementEventName = @"event_name"; +static NSString *const BoltsMeasurementEventArgs = @"event_args"; +static NSString *const BoltsMeasurementEventPrefix = @"bf_"; + +@implementation FBSDKBoltsMeasurementEventListener + ++ (instancetype)defaultListener +{ + static dispatch_once_t dispatchOnceLocker = 0; + static FBSDKBoltsMeasurementEventListener *defaultListener = nil; + dispatch_once(&dispatchOnceLocker, ^{ + defaultListener = [[self alloc] init]; + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:defaultListener + selector:@selector(logFBAppEventForNotification:) + name:BoltsMeasurementEventNotification + object:nil]; + }); + return defaultListener; +} + +- (void)logFBAppEventForNotification:(NSNotification *)note +{ + // when catch al_nav_in event, we set source application for FBAppEvents. + if ([note.userInfo[BoltsMeasurementEventName] isEqualToString:@"al_nav_in"]) { + NSString *sourceApplication = note.userInfo[BoltsMeasurementEventArgs][@"sourceApplication"]; + if (sourceApplication) { + [FBSDKTimeSpentData setSourceApplication:sourceApplication isFromAppLink:YES]; + } + } + NSDictionary *eventArgs = note.userInfo[BoltsMeasurementEventArgs]; + NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; + for(NSString *key in eventArgs.allKeys) { + NSError *error = nil; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9a-zA-Z _-]" options:0 error:&error]; + NSString *safeKey = [regex stringByReplacingMatchesInString:key + options:0 + range:NSMakeRange(0, key.length) + withTemplate:@"-"]; + safeKey = [safeKey stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" -"]]; + logData[safeKey] = eventArgs[key]; + } + [FBSDKAppEvents logImplicitEvent:[BoltsMeasurementEventPrefix stringByAppendingString:note.userInfo[BoltsMeasurementEventName]] + valueToSum:nil + parameters:logData + accessToken:nil]; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h new file mode 100644 index 0000000000..ff73de5d64 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h @@ -0,0 +1,247 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +/** + Notification indicating that the `currentAccessToken` has changed. + + the userInfo dictionary of the notification will contain keys + `FBSDKAccessTokenChangeOldKey` and + `FBSDKAccessTokenChangeNewKey`. + */ +FOUNDATION_EXPORT NSNotificationName const FBSDKAccessTokenDidChangeNotification; + +#else + +/** + Notification indicating that the `currentAccessToken` has changed. + + the userInfo dictionary of the notification will contain keys + `FBSDKAccessTokenChangeOldKey` and + `FBSDKAccessTokenChangeNewKey`. + */ +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeNotification; + +#endif + +/** + A key in the notification's userInfo that will be set + if and only if the user ID changed between the old and new tokens. + + Token refreshes can occur automatically with the SDK + which do not change the user. If you're only interested in user + changes (such as logging out), you should check for the existence + of this key. The value is a NSNumber with a boolValue. + + On a fresh start of the app where the SDK reads in the cached value + of an access token, this key will also exist since the access token + is moving from a null state (no user) to a non-null state (user). + */ +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeUserIDKey; + +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeUserID +DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidChangeUserIDKey`"); + +/* + key in notification's userInfo object for getting the old token. + + If there was no old token, the key will not be present. + */ +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenChangeOldKey; + +/* + key in notification's userInfo object for getting the new token. + + If there is no new token, the key will not be present. + */ +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenChangeNewKey; + +/* + A key in the notification's userInfo that will be set + if and only if the token has expired. + */ +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidExpireKey; + +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidExpire +DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidExpireKey`"); + + +/** + Represents an immutable access token for using Facebook services. + */ +@interface FBSDKAccessToken : NSObject + +/** + Returns the app ID. + */ +@property (readonly, copy, nonatomic) NSString *appID; + +/** + Returns the expiration date for data access + */ +@property (readonly, copy, nonatomic) NSDate *dataAccessExpirationDate; + +/** + Returns the known declined permissions. + */ +@property (readonly, copy, nonatomic) NSSet *declinedPermissions; + +/** + Returns the expiration date. + */ +@property (readonly, copy, nonatomic) NSDate *expirationDate; + +/** + Returns the known granted permissions. + */ +@property (readonly, copy, nonatomic) NSSet *permissions; + +/** + Returns the date the token was last refreshed. +*/ +@property (readonly, copy, nonatomic) NSDate *refreshDate; + +/** + Returns the opaque token string. + */ +@property (readonly, copy, nonatomic) NSString *tokenString; + +/** + Returns the user ID. + */ +@property (readonly, copy, nonatomic) NSString *userID; + +/** + Returns whether the access token is expired by checking its expirationDate property + */ +@property (readonly, assign, nonatomic, getter = isExpired) BOOL expired; + +/** + Returns whether user data access is still active for the given access token + */ +@property (readonly, assign, nonatomic, getter = isDataAccessExpired) BOOL dataAccessExpired; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + Initializes a new instance. + @param tokenString the opaque token string. + @param permissions the granted permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param declinedPermissions the declined permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param appID the app ID. + @param userID the user ID. + @param expirationDate the optional expiration date (defaults to distantFuture). + @param refreshDate the optional date the token was last refreshed (defaults to today). + + This initializer should only be used for advanced apps that + manage tokens explicitly. Typical login flows only need to use `FBSDKLoginManager` + along with `+currentAccessToken`. + */ +- (instancetype)initWithTokenString:(NSString *)tokenString + permissions:(NSArray *)permissions + declinedPermissions:(NSArray *)declinedPermissions + appID:(NSString *)appID + userID:(NSString *)userID + expirationDate:(NSDate *)expirationDate + refreshDate:(NSDate *)refreshDate; + +/** + Initializes a new instance. + @param tokenString the opaque token string. + @param permissions the granted permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param declinedPermissions the declined permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param appID the app ID. + @param userID the user ID. + @param expirationDate the optional expiration date (defaults to distantFuture). + @param refreshDate the optional date the token was last refreshed (defaults to today). + @param dataAccessExpirationDate the date which data access will expire for the given user + (defaults to distantFuture). + + This initializer should only be used for advanced apps that + manage tokens explicitly. Typical login flows only need to use `FBSDKLoginManager` + along with `+currentAccessToken`. + */ +- (instancetype)initWithTokenString:(NSString *)tokenString + permissions:(NSArray *)permissions + declinedPermissions:(NSArray *)declinedPermissions + appID:(NSString *)appID + userID:(NSString *)userID + expirationDate:(NSDate *)expirationDate + refreshDate:(NSDate *)refreshDate + dataAccessExpirationDate:(NSDate *)dataAccessExpirationDate +NS_DESIGNATED_INITIALIZER; + +/** + Convenience getter to determine if a permission has been granted + @param permission The permission to check. + */ +- (BOOL)hasGranted:(NSString *)permission; + +/** + Compares the receiver to another FBSDKAccessToken + @param token The other token + @return YES if the receiver's values are equal to the other token's values; otherwise NO + */ +- (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token; + +/** + Returns the "global" access token that represents the currently logged in user. + + The `currentAccessToken` is a convenient representation of the token of the + current user and is used by other SDK components (like `FBSDKLoginManager`). + */ ++ (FBSDKAccessToken *)currentAccessToken; + +/** + Returns YES if currentAccessToken is not nil AND currentAccessToken is not expired + + */ ++ (BOOL)currentAccessTokenIsActive; + +/** + Sets the "global" access token that represents the currently logged in user. + @param token The access token to set. + + This will broadcast a notification and save the token to the app keychain. + */ ++ (void)setCurrentAccessToken:(FBSDKAccessToken *)token; + +/** + Refresh the current access token's permission state and extend the token's expiration date, + if possible. + @param completionHandler an optional callback handler that can surface any errors related to permission refreshing. + + On a successful refresh, the currentAccessToken will be updated so you typically only need to + observe the `FBSDKAccessTokenDidChangeNotification` notification. + + If a token is already expired, it cannot be refreshed. + */ ++ (void)refreshCurrentAccessToken:(FBSDKGraphRequestHandler)completionHandler; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m new file mode 100644 index 0000000000..f26a9e2f45 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m @@ -0,0 +1,252 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessToken.h" + +#import "FBSDKGraphRequestPiggybackManager.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKMath.h" +#import "FBSDKSettings+Internal.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSNotificationName const FBSDKAccessTokenDidChangeNotification = @"com.facebook.sdk.FBSDKAccessTokenData.FBSDKAccessTokenDidChangeNotification"; + +#else + +NSString *const FBSDKAccessTokenDidChangeNotification = @"com.facebook.sdk.FBSDKAccessTokenData.FBSDKAccessTokenDidChangeNotification"; + +#endif + +NSString *const FBSDKAccessTokenDidChangeUserIDKey = @"FBSDKAccessTokenDidChangeUserID"; +NSString *const FBSDKAccessTokenDidChangeUserID = @"FBSDKAccessTokenDidChangeUserID"; +NSString *const FBSDKAccessTokenChangeNewKey = @"FBSDKAccessToken"; +NSString *const FBSDKAccessTokenChangeOldKey = @"FBSDKAccessTokenOld"; +NSString *const FBSDKAccessTokenDidExpireKey = @"FBSDKAccessTokenDidExpire"; +NSString *const FBSDKAccessTokenDidExpire = @"FBSDKAccessTokenDidExpire"; + +static FBSDKAccessToken *g_currentAccessToken; + +#define FBSDK_ACCESSTOKEN_TOKENSTRING_KEY @"tokenString" +#define FBSDK_ACCESSTOKEN_PERMISSIONS_KEY @"permissions" +#define FBSDK_ACCESSTOKEN_DECLINEDPERMISSIONS_KEY @"declinedPermissions" +#define FBSDK_ACCESSTOKEN_APPID_KEY @"appID" +#define FBSDK_ACCESSTOKEN_USERID_KEY @"userID" +#define FBSDK_ACCESSTOKEN_REFRESHDATE_KEY @"refreshDate" +#define FBSDK_ACCESSTOKEN_EXPIRATIONDATE_KEY @"expirationDate" +#define FBSDK_ACCESSTOKEN_DATA_EXPIRATIONDATE_KEY @"dataAccessExpirationDate" + + +@implementation FBSDKAccessToken + +- (instancetype)initWithTokenString:(NSString *)tokenString + permissions:(NSArray *)permissions + declinedPermissions:(NSArray *)declinedPermissions + appID:(NSString *)appID + userID:(NSString *)userID + expirationDate:(NSDate *)expirationDate + refreshDate:(NSDate *)refreshDate +{ + return [self initWithTokenString:tokenString + permissions:permissions + declinedPermissions:declinedPermissions + appID:appID + userID:userID + expirationDate:expirationDate + refreshDate:refreshDate + dataAccessExpirationDate:[NSDate distantFuture]]; +} + +- (instancetype)initWithTokenString:(NSString *)tokenString + permissions:(NSArray *)permissions + declinedPermissions:(NSArray *)declinedPermissions + appID:(NSString *)appID + userID:(NSString *)userID + expirationDate:(NSDate *)expirationDate + refreshDate:(NSDate *)refreshDate + dataAccessExpirationDate:(NSDate *)dataAccessExpirationDate +{ + if ((self = [super init])) { + _tokenString = [tokenString copy]; + _permissions = [NSSet setWithArray:permissions]; + _declinedPermissions = [NSSet setWithArray:declinedPermissions]; + _appID = [appID copy]; + _userID = [userID copy]; + _expirationDate = [expirationDate copy] ?: [NSDate distantFuture]; + _refreshDate = [refreshDate copy] ?: [NSDate date]; + _dataAccessExpirationDate = [dataAccessExpirationDate copy] ?: [NSDate distantFuture]; + } + return self; +} + +- (BOOL)hasGranted:(NSString *)permission +{ + return [self.permissions containsObject:permission]; + +} + +- (BOOL)isDataAccessExpired +{ + return [self.dataAccessExpirationDate compare:NSDate.date] == NSOrderedAscending; +} + +- (BOOL)isExpired +{ + return [self.expirationDate compare:NSDate.date] == NSOrderedAscending; +} + ++ (FBSDKAccessToken *)currentAccessToken +{ + return g_currentAccessToken; +} + ++ (void)setCurrentAccessToken:(FBSDKAccessToken *)token +{ + if (token != g_currentAccessToken) { + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + [FBSDKInternalUtility dictionary:userInfo setObject:token forKey:FBSDKAccessTokenChangeNewKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:g_currentAccessToken forKey:FBSDKAccessTokenChangeOldKey]; + // We set this flag also when the current Access Token was not valid, since there might be legacy code relying on it + if (![g_currentAccessToken.userID isEqualToString:token.userID] || ![self currentAccessTokenIsActive]) { + userInfo[FBSDKAccessTokenDidChangeUserIDKey] = @YES; + } + + g_currentAccessToken = token; + + // Only need to keep current session in web view for the case when token is current + // When token is abandoned cookies must to be cleaned up immediately + if (token == nil) { + [FBSDKInternalUtility deleteFacebookCookies]; + } + + [FBSDKSettings accessTokenCache].accessToken = token; + [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAccessTokenDidChangeNotification + object:[self class] + userInfo:userInfo]; + } +} + ++ (BOOL)currentAccessTokenIsActive +{ + FBSDKAccessToken *currentAccessToken = [self currentAccessToken]; + return currentAccessToken != nil && !currentAccessToken.isExpired; +} + ++ (void)refreshCurrentAccessToken:(FBSDKGraphRequestHandler)completionHandler +{ + if ([FBSDKAccessToken currentAccessToken]) { + FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; + [FBSDKGraphRequestPiggybackManager addRefreshPiggyback:connection permissionHandler:completionHandler]; + [connection start]; + } else { + if (completionHandler) { + completionHandler(nil, nil, [NSError fbErrorWithCode:FBSDKErrorAccessTokenRequired message:@"No current access token to refresh"]); + } + } +} + +#pragma mark - Equality + +- (NSUInteger)hash +{ + NSUInteger subhashes[] = { + self.tokenString.hash, + self.permissions.hash, + self.declinedPermissions.hash, + self.appID.hash, + self.userID.hash, + self.refreshDate.hash, + self.expirationDate.hash, + self.dataAccessExpirationDate.hash + }; + return [FBSDKMath hashWithIntegerArray:subhashes count:sizeof(subhashes) / sizeof(subhashes[0])]; +} + +- (BOOL)isEqual:(id)object +{ + if (self == object) { + return YES; + } + if (![object isKindOfClass:[FBSDKAccessToken class]]) { + return NO; + } + return [self isEqualToAccessToken:(FBSDKAccessToken *)object]; +} + +- (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token +{ + return (token && + [FBSDKInternalUtility object:self.tokenString isEqualToObject:token.tokenString] && + [FBSDKInternalUtility object:self.permissions isEqualToObject:token.permissions] && + [FBSDKInternalUtility object:self.declinedPermissions isEqualToObject:token.declinedPermissions] && + [FBSDKInternalUtility object:self.appID isEqualToObject:token.appID] && + [FBSDKInternalUtility object:self.userID isEqualToObject:token.userID] && + [FBSDKInternalUtility object:self.refreshDate isEqualToObject:token.refreshDate] && + [FBSDKInternalUtility object:self.expirationDate isEqualToObject:token.expirationDate] && + [FBSDKInternalUtility object:self.dataAccessExpirationDate isEqualToObject:token.dataAccessExpirationDate] ); +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone +{ + // we're immutable. + return self; +} + +#pragma mark NSCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder +{ + NSString *appID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ACCESSTOKEN_APPID_KEY]; + NSSet *declinedPermissions = [decoder decodeObjectOfClass:[NSSet class] forKey:FBSDK_ACCESSTOKEN_DECLINEDPERMISSIONS_KEY]; + NSSet *permissions = [decoder decodeObjectOfClass:[NSSet class] forKey:FBSDK_ACCESSTOKEN_PERMISSIONS_KEY]; + NSString *tokenString = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ACCESSTOKEN_TOKENSTRING_KEY]; + NSString *userID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ACCESSTOKEN_USERID_KEY]; + NSDate *refreshDate = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_ACCESSTOKEN_REFRESHDATE_KEY]; + NSDate *expirationDate = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_ACCESSTOKEN_EXPIRATIONDATE_KEY]; + NSDate *dataAccessExpirationDate = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_ACCESSTOKEN_DATA_EXPIRATIONDATE_KEY]; + + return [self initWithTokenString:tokenString + permissions:permissions.allObjects + declinedPermissions:declinedPermissions.allObjects + appID:appID + userID:userID + expirationDate:expirationDate + refreshDate:refreshDate + dataAccessExpirationDate:dataAccessExpirationDate]; +} + +- (void)encodeWithCoder:(NSCoder *)encoder +{ + [encoder encodeObject:self.appID forKey:FBSDK_ACCESSTOKEN_APPID_KEY]; + [encoder encodeObject:self.declinedPermissions forKey:FBSDK_ACCESSTOKEN_DECLINEDPERMISSIONS_KEY]; + [encoder encodeObject:self.permissions forKey:FBSDK_ACCESSTOKEN_PERMISSIONS_KEY]; + [encoder encodeObject:self.tokenString forKey:FBSDK_ACCESSTOKEN_TOKENSTRING_KEY]; + [encoder encodeObject:self.userID forKey:FBSDK_ACCESSTOKEN_USERID_KEY]; + [encoder encodeObject:self.expirationDate forKey:FBSDK_ACCESSTOKEN_EXPIRATIONDATE_KEY]; + [encoder encodeObject:self.refreshDate forKey:FBSDK_ACCESSTOKEN_REFRESHDATE_KEY]; + [encoder encodeObject:self.dataAccessExpirationDate forKey:FBSDK_ACCESSTOKEN_DATA_EXPIRATIONDATE_KEY]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h new file mode 100644 index 0000000000..c1eca10f70 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h @@ -0,0 +1,92 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKApplicationDelegate is designed to post process the results from Facebook Login + or Facebook Dialogs (or any action that requires switching over to the native Facebook + app or Safari). + + + + The methods in this class are designed to mirror those in UIApplicationDelegate, and you + should call them in the respective methods in your AppDelegate implementation. + */ +@interface FBSDKApplicationDelegate : NSObject + +/** + Gets the singleton instance. + */ ++ (instancetype)sharedInstance; + +/** + Call this method from the [UIApplicationDelegate application:openURL:sourceApplication:annotation:] method + of the AppDelegate for your app. It should be invoked for the proper processing of responses during interaction + with the native Facebook app or Safari as part of SSO authorization flow or Facebook dialogs. + + @param application The application as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @param url The URL as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @param sourceApplication The sourceApplication as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @param annotation The annotation as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. + + @return YES if the url was intended for the Facebook SDK, NO if not. + */ +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_0 +/** + Call this method from the [UIApplicationDelegate application:openURL:options:] method + of the AppDelegate for your app. It should be invoked for the proper processing of responses during interaction + with the native Facebook app or Safari as part of SSO authorization flow or Facebook dialogs. + + @param application The application as passed to [UIApplicationDelegate application:openURL:options:]. + + @param url The URL as passed to [UIApplicationDelegate application:openURL:options:]. + + @param options The options dictionary as passed to [UIApplicationDelegate application:openURL:options:]. + + @return YES if the url was intended for the Facebook SDK, NO if not. + */ +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + options:(NSDictionary *)options; +#endif + +/** + Call this method from the [UIApplicationDelegate application:didFinishLaunchingWithOptions:] method + of the AppDelegate for your app. It should be invoked for the proper use of the Facebook SDK. + As part of SDK initialization basic auto logging of app events will occur, this can be +controlled via 'FacebookAutoLogAppEventsEnabled' key in the project info plist file. + + @param application The application as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + + @param launchOptions The launchOptions as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + + @return YES if the url was intended for the Facebook SDK, NO if not. + */ +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m new file mode 100644 index 0000000000..aa6ed583fe --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m @@ -0,0 +1,330 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKApplicationDelegate.h" +#import "FBSDKApplicationDelegate+Internal.h" + +#import + +#import "FBSDKAppEvents+Internal.h" +#import "FBSDKConstants.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKError.h" +#import "FBSDKGateKeeperManager.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKServerConfiguration.h" +#import "FBSDKServerConfigurationManager.h" +#import "FBSDKSettings+Internal.h" +#import "FBSDKTimeSpentData.h" +#import "FBSDKUtility.h" + +#if !TARGET_OS_TV +#import "FBSDKBoltsMeasurementEventListener.h" +#import "FBSDKContainerViewController.h" +#import "FBSDKProfile+Internal.h" +#endif + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSNotificationName const FBSDKApplicationDidBecomeActiveNotification = @"com.facebook.sdk.FBSDKApplicationDidBecomeActiveNotification"; + +#else + +NSString *const FBSDKApplicationDidBecomeActiveNotification = @"com.facebook.sdk.FBSDKApplicationDidBecomeActiveNotification"; + +#endif + +static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; + +@implementation FBSDKApplicationDelegate +{ + NSHashTable> *_applicationObservers; + BOOL _isAppLaunched; +} + +#pragma mark - Class Methods + ++ (void)load +{ + // when the app becomes active by any means, kick off the initialization. + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(initializeWithLaunchData:) + name:UIApplicationDidFinishLaunchingNotification + object:nil]; +} + +// Initialize SDK listeners +// Don't call this function in any place else. It should only be called when the class is loaded. ++ (void)initializeWithLaunchData:(NSNotification *)note +{ + NSDictionary *launchData = note.userInfo; + + [[self sharedInstance] application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:launchData]; + +#if !TARGET_OS_TV + // Register Listener for Bolts measurement events + [FBSDKBoltsMeasurementEventListener defaultListener]; +#endif + // Set the SourceApplication for time spent data. This is not going to update the value if the app has already launched. + [FBSDKTimeSpentData setSourceApplication:launchData[UIApplicationLaunchOptionsSourceApplicationKey] + openURL:launchData[UIApplicationLaunchOptionsURLKey]]; + // Register on UIApplicationDidEnterBackgroundNotification events to reset source application data when app backgrounds. + [FBSDKTimeSpentData registerAutoResetSourceApplication]; + + [FBSDKInternalUtility validateFacebookReservedURLSchemes]; + // Remove the observer + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + ++ (instancetype)sharedInstance +{ + static FBSDKApplicationDelegate *_sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedInstance = [[self alloc] _init]; + }); + return _sharedInstance; +} + +#pragma mark - Object Lifecycle + +- (instancetype)_init +{ + if ((self = [super init]) != nil) { + NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; + [defaultCenter addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; + [defaultCenter addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; + + [[FBSDKAppEvents singleton] registerNotifications]; + _applicationObservers = [[NSHashTable alloc] init]; + } + return self; +} + +- (instancetype)init +{ + return nil; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - UIApplicationDelegate + +#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_0 +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + options:(NSDictionary *)options +{ + if (@available(iOS 9.0, *)) { + return [self application:application + openURL:url + sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] + annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; + } + + return NO; +} +#endif + +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation +{ + if (sourceApplication != nil && ![sourceApplication isKindOfClass:[NSString class]]) { + @throw [NSException exceptionWithName:NSInvalidArgumentException + reason:@"Expected 'sourceApplication' to be NSString. Please verify you are passing in 'sourceApplication' from your app delegate (not the UIApplication* parameter). If your app delegate implements iOS 9's application:openURL:options:, you should pass in options[UIApplicationOpenURLOptionsSourceApplicationKey]. " + userInfo:nil]; + } + [FBSDKTimeSpentData setSourceApplication:sourceApplication openURL:url]; + + BOOL handled = NO; + NSArray> *observers = [_applicationObservers allObjects]; + for (id observer in observers) { + if ([observer respondsToSelector:@selector(application:openURL:sourceApplication:annotation:)]) { + if ([observer application:application + openURL:url + sourceApplication:sourceApplication + annotation:annotation]) { + handled = YES; + } + } + } + + if (handled) { + return YES; + } + + [self _logIfAppLinkEvent:url]; + + return NO; +} + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + if ([self isAppLaunched]) { + return NO; + } + + _isAppLaunched = YES; + FBSDKAccessToken *cachedToken = [FBSDKSettings accessTokenCache].accessToken; + [FBSDKAccessToken setCurrentAccessToken:cachedToken]; + // fetch app settings + [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:NULL]; + // fetch gate keepers + [FBSDKGateKeeperManager loadGateKeepers]; + + if ([FBSDKSettings autoLogAppEventsEnabled].boolValue) { + [self _logSDKInitialize]; + } +#if !TARGET_OS_TV + FBSDKProfile *cachedProfile = [FBSDKProfile fetchCachedProfile]; + [FBSDKProfile setCurrentProfile:cachedProfile]; +#endif + NSArray> *observers = [_applicationObservers allObjects]; + BOOL handled = NO; + for (id observer in observers) { + if ([observer respondsToSelector:@selector(application:didFinishLaunchingWithOptions:)]) { + if ([observer application:application didFinishLaunchingWithOptions:launchOptions]) { + handled = YES; + } + } + } + + return handled; +} + +- (void)applicationDidEnterBackground:(NSNotification *)notification +{ + NSArray> *observers = [_applicationObservers allObjects]; + for (id observer in observers) { + if ([observer respondsToSelector:@selector(applicationDidEnterBackground:)]) { + [observer applicationDidEnterBackground:notification.object]; + } + } +} + +- (void)applicationDidBecomeActive:(NSNotification *)notification +{ + // Auto log basic events in case autoLogAppEventsEnabled is set + if ([[FBSDKSettings autoLogAppEventsEnabled] boolValue]) { + [FBSDKAppEvents activateApp]; + } + + NSArray> *observers = [_applicationObservers copy]; + for (id observer in observers) { + if ([observer respondsToSelector:@selector(applicationDidBecomeActive:)]) { + [observer applicationDidBecomeActive:notification.object]; + } + } +} + +#pragma mark - Internal Methods + +- (void)addObserver:(id)observer +{ + if (![_applicationObservers containsObject:observer]) { + [_applicationObservers addObject:observer]; + } +} + +- (void)removeObserver:(id)observer +{ + if ([_applicationObservers containsObject:observer]) { + [_applicationObservers removeObject:observer]; + } +} + +#pragma mark - Helper Methods + +- (void)_logIfAppLinkEvent:(NSURL *)url +{ + if (!url) { + return; + } + NSDictionary *params = [FBSDKUtility dictionaryWithQueryString:url.query]; + NSString *applinkDataString = params[@"al_applink_data"]; + if (!applinkDataString) { + return; + } + + NSDictionary *applinkData = [FBSDKInternalUtility objectForJSONString:applinkDataString error:NULL]; + if (!applinkData) { + return; + } + + NSString *targetURLString = applinkData[@"target_url"]; + NSURL *targetURL = [targetURLString isKindOfClass:[NSString class]] ? [NSURL URLWithString:targetURLString] : nil; + + NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; + [FBSDKInternalUtility dictionary:logData setObject:targetURL.absoluteString forKey:@"targetURL"]; + [FBSDKInternalUtility dictionary:logData setObject:targetURL.host forKey:@"targetURLHost"]; + + NSDictionary *refererData = applinkData[@"referer_data"]; + if (refererData) { + [FBSDKInternalUtility dictionary:logData setObject:refererData[@"target_url"] forKey:@"referralTargetURL"]; + [FBSDKInternalUtility dictionary:logData setObject:refererData[@"url"] forKey:@"referralURL"]; + [FBSDKInternalUtility dictionary:logData setObject:refererData[@"app_name"] forKey:@"referralAppName"]; + } + [FBSDKInternalUtility dictionary:logData setObject:url.absoluteString forKey:@"inputURL"]; + [FBSDKInternalUtility dictionary:logData setObject:url.scheme forKey:@"inputURLScheme"]; + + [FBSDKAppEvents logImplicitEvent:FBSDKAppLinkInboundEvent + valueToSum:nil + parameters:logData + accessToken:nil]; +} + +- (void)_logSDKInitialize +{ + NSMutableDictionary *params = [NSMutableDictionary new]; + params[@"core_lib_included"] = @1; + if (objc_lookUpClass("FBSDKShareDialog") != nil) { + params[@"share_lib_included"] = @1; + } + if (objc_lookUpClass("FBSDKLoginManager") != nil) { + params[@"login_lib_included"] = @1; + } + if (objc_lookUpClass("FBSDKPlacesManager") != nil) { + params[@"places_lib_included"] = @1; + } + if (objc_lookUpClass("FBSDKMessengerButton") != nil) { + params[@"messenger_lib_included"] = @1; + } + if (objc_lookUpClass("FBSDKMessengerButton") != nil) { + params[@"messenger_lib_included"] = @1; + } + if (objc_lookUpClass("FBSDKTVInterfaceFactory.m") != nil) { + params[@"tv_lib_included"] = @1; + } + if (objc_lookUpClass("FBSDKAutoLog") != nil) { + params[@"marketing_lib_included"] = @1; + } + [FBSDKAppEvents logEvent:@"fb_sdk_initialize" parameters:params]; +} + +// Wrapping this makes it mockable and enables testability +- (BOOL)isAppLaunched { + return _isAppLaunched; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h new file mode 100644 index 0000000000..ca539660c4 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h @@ -0,0 +1,26 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 base class for common SDK buttons. + */ +@interface FBSDKButton : UIButton + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m new file mode 100644 index 0000000000..834f9e5459 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m @@ -0,0 +1,457 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKButton.h" +#import "FBSDKButton+Subclass.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKAppEvents+Internal.h" +#import "FBSDKAppEvents.h" +#import "FBSDKApplicationDelegate+Internal.h" +#import "FBSDKLogo.h" +#import "FBSDKMath.h" +#import "FBSDKUIUtility.h" +#import "FBSDKViewImpressionTracker.h" + +#define HEIGHT_TO_FONT_SIZE 0.47 +#define HEIGHT_TO_MARGIN 0.27 +#define HEIGHT_TO_PADDING 0.23 +#define HEIGHT_TO_TEXT_PADDING_CORRECTION 0.08 + +@implementation FBSDKButton +{ + BOOL _skipIntrinsicContentSizing; + BOOL _isExplicitlyDisabled; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithFrame:(CGRect)frame +{ + if ((self = [super initWithFrame:frame])) { + _skipIntrinsicContentSizing = YES; + [self configureButton]; + _skipIntrinsicContentSizing = NO; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + _skipIntrinsicContentSizing = YES; + [self configureButton]; + _skipIntrinsicContentSizing = NO; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Properties + +- (void)setEnabled:(BOOL)enabled +{ + _isExplicitlyDisabled = !enabled; + [self checkImplicitlyDisabled]; +} + +#pragma mark - Layout + +- (CGRect)imageRectForContentRect:(CGRect)contentRect +{ + if (self.hidden || CGRectIsEmpty(self.bounds)) { + return CGRectZero; + } + CGRect imageRect = UIEdgeInsetsInsetRect(contentRect, self.imageEdgeInsets); + CGFloat margin = [self _marginForHeight:[self _heightForContentRect:contentRect]]; + imageRect = CGRectInset(imageRect, margin, margin); + imageRect.size.width = CGRectGetHeight(imageRect); + return imageRect; +} + +- (CGSize)intrinsicContentSize +{ + if (_skipIntrinsicContentSizing) { + return CGSizeZero; + } + _skipIntrinsicContentSizing = YES; + CGSize size = [self sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; + _skipIntrinsicContentSizing = NO; + return size; +} + +- (void)layoutSubviews +{ + // automatic impression tracking if the button conforms to FBSDKButtonImpressionTracking + if ([self conformsToProtocol:@protocol(FBSDKButtonImpressionTracking)]) { + NSString *eventName = ((id)self).impressionTrackingEventName; + NSString *identifier = ((id)self).impressionTrackingIdentifier; + NSDictionary *parameters = ((id)self).analyticsParameters; + if (eventName && identifier) { + FBSDKViewImpressionTracker *impressionTracker = [FBSDKViewImpressionTracker impressionTrackerWithEventName:eventName]; + [impressionTracker logImpressionWithIdentifier:identifier parameters:parameters]; + } + } + [super layoutSubviews]; +} + +- (CGSize)sizeThatFits:(CGSize)size +{ + if (self.hidden) { + return CGSizeZero; + } + CGSize normalSize = [self sizeThatFits:size title:[self titleForState:UIControlStateNormal]]; + CGSize selectedSize = [self sizeThatFits:size title:[self titleForState:UIControlStateSelected]]; + return CGSizeMake(MAX(normalSize.width, selectedSize.width), MAX(normalSize.height, selectedSize.height)); +} + +- (void)sizeToFit +{ + CGRect bounds = self.bounds; + bounds.size = [self sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; + self.bounds = bounds; +} + +- (CGRect)titleRectForContentRect:(CGRect)contentRect +{ + if (self.hidden || CGRectIsEmpty(self.bounds)) { + return CGRectZero; + } + CGRect imageRect = [self imageRectForContentRect:contentRect]; + CGFloat height = [self _heightForContentRect:contentRect]; + CGFloat padding = [self _paddingForHeight:height]; + CGFloat titleX = CGRectGetMaxX(imageRect) + padding; + CGRect titleRect = CGRectMake(titleX, 0.0, CGRectGetWidth(contentRect) - titleX, CGRectGetHeight(contentRect)); + + UIEdgeInsets titleEdgeInsets = UIEdgeInsetsZero; + if (!self.layer.needsLayout) { + UILabel *titleLabel = self.titleLabel; + if (titleLabel.textAlignment == NSTextAlignmentCenter) { + // if the text is centered, we need to adjust the frame for the titleLabel based on the size of the text in order + // to keep the text centered in the button without adding extra blank space to the right when unnecessary + // 1. the text fits centered within the button without colliding with the image (imagePaddingWidth) + // 2. the text would run into the image, so adjust the insets to effectively left align it (textPaddingWidth) + CGSize titleSize = FBSDKTextSize(titleLabel.text, + titleLabel.font, + titleRect.size, + titleLabel.lineBreakMode); + CGFloat titlePaddingWidth = (CGRectGetWidth(titleRect) - titleSize.width) / 2; + CGFloat imagePaddingWidth = titleX / 2; + CGFloat inset = MIN(titlePaddingWidth, imagePaddingWidth); + titleEdgeInsets.left -= inset; + titleEdgeInsets.right += inset; + } + } + return UIEdgeInsetsInsetRect(titleRect, titleEdgeInsets); +} + +#pragma mark - Subclass Methods + +- (void)logTapEventWithEventName:(NSString *)eventName parameters:(NSDictionary *)parameters +{ + [FBSDKAppEvents logImplicitEvent:eventName + valueToSum:nil + parameters:parameters + accessToken:[FBSDKAccessToken currentAccessToken]]; +} + +- (void)checkImplicitlyDisabled +{ + BOOL enabled = !_isExplicitlyDisabled && !self.implicitlyDisabled; + BOOL currentEnabled = self.enabled; + super.enabled = enabled; + if (currentEnabled != enabled) { + [self invalidateIntrinsicContentSize]; + [self setNeedsLayout]; + } +} + +- (void)configureButton +{ + [self configureWithIcon:[self defaultIcon] + title:nil + backgroundColor:[self defaultBackgroundColor] + highlightedColor:[self defaultHighlightedColor]]; +} + +- (void)configureWithIcon:(FBSDKIcon *)icon + title:(NSString *)title + backgroundColor:(UIColor *)backgroundColor + highlightedColor:(UIColor *)highlightedColor +{ + [self _configureWithIcon:icon + title:title + backgroundColor:backgroundColor + highlightedColor:highlightedColor + selectedTitle:nil + selectedIcon:nil + selectedColor:nil + selectedHighlightedColor:nil]; +} + +- (void)configureWithIcon:(FBSDKIcon *)icon + title:(NSString *)title + backgroundColor:(UIColor *)backgroundColor + highlightedColor:(UIColor *)highlightedColor + selectedTitle:(NSString *)selectedTitle + selectedIcon:(FBSDKIcon *)selectedIcon + selectedColor:(UIColor *)selectedColor + selectedHighlightedColor:(UIColor *)selectedHighlightedColor +{ + [self _configureWithIcon:icon + title:title + backgroundColor:backgroundColor + highlightedColor:highlightedColor + selectedTitle:selectedTitle + selectedIcon:selectedIcon + selectedColor:selectedColor + selectedHighlightedColor:selectedHighlightedColor]; +} + +- (UIColor *)defaultBackgroundColor +{ + return [UIColor colorWithRed:65.0/255.0 green:93.0/255.0 blue:174.0/255.0 alpha:1.0]; +} + +- (UIColor *)defaultDisabledColor +{ + return [UIColor colorWithRed:189.0/255.0 green:193.0/255.0 blue:201.0/255.0 alpha:1.0]; +} + +- (UIFont *)defaultFont +{ + return [UIFont systemFontOfSize:14]; +} + +- (UIColor *)defaultHighlightedColor +{ + return [UIColor colorWithRed:47.0/255.0 green:71.0/255.0 blue:122.0/255.0 alpha:1.0]; +} + +- (FBSDKIcon *)defaultIcon +{ + return [[FBSDKLogo alloc] init]; +} + +- (UIColor *)defaultSelectedColor +{ + return [UIColor colorWithRed:124.0/255.0 green:143.0/255.0 blue:200.0/255.0 alpha:1.0]; +} + +- (BOOL)isImplicitlyDisabled +{ + return NO; +} + +- (CGSize)sizeThatFits:(CGSize)size title:(NSString *)title +{ + UIFont *font = self.titleLabel.font; + CGFloat height = [self _heightForFont:font]; + + UIEdgeInsets contentEdgeInsets = self.contentEdgeInsets; + + CGSize constrainedContentSize = FBSDKEdgeInsetsInsetSize(size, contentEdgeInsets); + + CGSize titleSize = FBSDKTextSize(title, font, constrainedContentSize, self.titleLabel.lineBreakMode); + + CGFloat padding = [self _paddingForHeight:height]; + CGFloat textPaddingCorrection = [self _textPaddingCorrectionForHeight:height]; + CGSize contentSize = CGSizeMake(height + padding + titleSize.width - textPaddingCorrection, height); + return FBSDKEdgeInsetsOutsetSize(contentSize, contentEdgeInsets); +} + +#pragma mark - Helper Methods + +- (void)_applicationDidBecomeActiveNotification:(NSNotification *)notification +{ + [self checkImplicitlyDisabled]; +} + +- (UIImage *)_backgroundImageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius scale:(CGFloat)scale +{ + CGFloat size = 1.0 + 2 * cornerRadius; + UIGraphicsBeginImageContextWithOptions(CGSizeMake(size, size), NO, scale); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetFillColorWithColor(context, color.CGColor); + CGMutablePathRef path = CGPathCreateMutable(); + CGPathMoveToPoint(path, NULL, cornerRadius + 1.0, 0.0); + CGPathAddArcToPoint(path, NULL, size, 0.0, size, cornerRadius, cornerRadius); + CGPathAddLineToPoint(path, NULL, size, cornerRadius + 1.0); + CGPathAddArcToPoint(path, NULL, size, size, cornerRadius + 1.0, size, cornerRadius); + CGPathAddLineToPoint(path, NULL, cornerRadius, size); + CGPathAddArcToPoint(path, NULL, 0.0, size, 0.0, cornerRadius + 1.0, cornerRadius); + CGPathAddLineToPoint(path, NULL, 0.0, cornerRadius); + CGPathAddArcToPoint(path, NULL, 0.0, 0.0, cornerRadius, 0.0, cornerRadius); + CGPathCloseSubpath(path); + CGContextAddPath(context, path); + CGPathRelease(path); + CGContextFillPath(context); + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); +#if TARGET_OS_TV + return [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius) + resizingMode:UIImageResizingModeStretch]; +#else + return [image stretchableImageWithLeftCapWidth:cornerRadius topCapHeight:cornerRadius]; +#endif +} + +- (void)_configureWithIcon:(FBSDKIcon *)icon + title:(NSString *)title + backgroundColor:(UIColor *)backgroundColor + highlightedColor:(UIColor *)highlightedColor + selectedTitle:(NSString *)selectedTitle + selectedIcon:(FBSDKIcon *)selectedIcon + selectedColor:(UIColor *)selectedColor + selectedHighlightedColor:(UIColor *)selectedHighlightedColor +{ + [self checkImplicitlyDisabled]; + + if (!icon) { + icon = [self defaultIcon]; + } + if (!backgroundColor) { + backgroundColor = [self defaultBackgroundColor]; + } + if (!highlightedColor) { + highlightedColor = [self defaultHighlightedColor]; + } + if (!selectedColor) { + selectedColor = [self defaultSelectedColor]; + } + if (!selectedHighlightedColor) { + selectedHighlightedColor = highlightedColor; + } + + self.adjustsImageWhenDisabled = NO; + self.adjustsImageWhenHighlighted = NO; + self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill; + self.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; + self.tintColor = [UIColor whiteColor]; + + BOOL forceSizeToFit = CGRectIsEmpty(self.bounds); + + CGFloat scale = [UIScreen mainScreen].scale; + UIImage *backgroundImage; + + backgroundImage = [self _backgroundImageWithColor:backgroundColor cornerRadius:3.0 scale:scale]; + [self setBackgroundImage:backgroundImage forState:UIControlStateNormal]; +#if TARGET_OS_TV + [self setBackgroundImage:backgroundImage forState:UIControlStateFocused]; +#endif + + backgroundImage = [self _backgroundImageWithColor:highlightedColor cornerRadius:3.0 scale:scale]; + [self setBackgroundImage:backgroundImage forState:UIControlStateHighlighted]; + + backgroundImage = [self _backgroundImageWithColor:[self defaultDisabledColor] cornerRadius:3.0 scale:scale]; + [self setBackgroundImage:backgroundImage forState:UIControlStateDisabled]; + + if (selectedColor) { + backgroundImage = [self _backgroundImageWithColor:selectedColor cornerRadius:3.0 scale:scale]; + [self setBackgroundImage:backgroundImage forState:UIControlStateSelected]; + } + + if (selectedHighlightedColor) { + backgroundImage = [self _backgroundImageWithColor:selectedHighlightedColor cornerRadius:3.0 scale:scale]; + [self setBackgroundImage:backgroundImage forState:UIControlStateSelected | UIControlStateHighlighted]; +#if TARGET_OS_TV + [self setBackgroundImage:backgroundImage forState:UIControlStateSelected | UIControlStateFocused]; +#endif + } + + [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + + [self setTitle:title forState:UIControlStateNormal]; +#if TARGET_OS_TV + [self setTitle:title forState:UIControlStateFocused]; +#endif + if (selectedTitle) { + [self setTitle:selectedTitle forState:UIControlStateSelected]; + [self setTitle:selectedTitle forState:UIControlStateSelected | UIControlStateHighlighted]; +#if TARGET_OS_TV + [self setTitle:selectedTitle forState:UIControlStateSelected | UIControlStateFocused]; +#endif + } + + UILabel *titleLabel = self.titleLabel; + titleLabel.lineBreakMode = NSLineBreakByClipping; + UIFont *font = [self defaultFont]; + titleLabel.font = font; + + CGSize imageSize = CGSizeMake(font.pointSize, font.pointSize); + UIImage *image = [icon imageWithSize:imageSize]; + image = [image resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; + [self setImage:image forState:UIControlStateNormal]; +#if TARGET_OS_TV + [self setImage:image forState:UIControlStateFocused]; +#endif + + if (selectedIcon) { + UIImage *selectedImage = [selectedIcon imageWithSize:imageSize]; + selectedImage = [selectedImage resizableImageWithCapInsets:UIEdgeInsetsZero + resizingMode:UIImageResizingModeStretch]; + [self setImage:selectedImage forState:UIControlStateSelected]; + [self setImage:selectedImage forState:UIControlStateSelected | UIControlStateHighlighted]; +#if TARGET_OS_TV + [self setImage:selectedImage forState:UIControlStateSelected | UIControlStateFocused]; +#endif + } + + if (forceSizeToFit) { + [self sizeToFit]; + } + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_applicationDidBecomeActiveNotification:) + name:FBSDKApplicationDidBecomeActiveNotification + object:[FBSDKApplicationDelegate sharedInstance]]; +} + +- (CGFloat)_fontSizeForHeight:(CGFloat)height +{ + return floorf(height * HEIGHT_TO_FONT_SIZE); +} + +- (CGFloat)_heightForContentRect:(CGRect)contentRect +{ + UIEdgeInsets contentEdgeInsets = self.contentEdgeInsets; + return contentEdgeInsets.top + CGRectGetHeight(contentRect) + contentEdgeInsets.bottom; +} + +- (CGFloat)_heightForFont:(UIFont *)font +{ + return floorf(font.pointSize / (1 - 2 * HEIGHT_TO_MARGIN)); +} + +- (CGFloat)_marginForHeight:(CGFloat)height +{ + return floorf(height * HEIGHT_TO_MARGIN); +} + +- (CGFloat)_paddingForHeight:(CGFloat)height +{ + return roundf(height * HEIGHT_TO_PADDING) - [self _textPaddingCorrectionForHeight:height]; +} + +- (CGFloat)_textPaddingCorrectionForHeight:(CGFloat)height +{ + return floorf(height * HEIGHT_TO_TEXT_PADDING_CORRECTION); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h new file mode 100644 index 0000000000..098621e4c0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h @@ -0,0 +1,383 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +/** + The error domain for all errors from FBSDKCoreKit. + + Error codes from the SDK in the range 0-99 are reserved for this domain. + */ +FOUNDATION_EXPORT NSErrorDomain const FBSDKErrorDomain; + +#else + +/** + The error domain for all errors from FBSDKCoreKit. + + Error codes from the SDK in the range 0-99 are reserved for this domain. + */ +FOUNDATION_EXPORT NSString *const FBSDKErrorDomain; + +#endif + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0 + +/* + @methodgroup error userInfo keys + */ + +/** + The userInfo key for the invalid collection for errors with FBSDKErrorInvalidArgument. + + If the invalid argument is a collection, the collection can be found with this key and the individual + invalid item can be found with FBSDKErrorArgumentValueKey. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorArgumentCollectionKey; + +/** + The userInfo key for the invalid argument name for errors with FBSDKErrorInvalidArgument. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorArgumentNameKey; + +/** + The userInfo key for the invalid argument value for errors with FBSDKErrorInvalidArgument. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorArgumentValueKey; + +/** + The userInfo key for the message for developers in NSErrors that originate from the SDK. + + The developer message will not be localized and is not intended to be presented within the app. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorDeveloperMessageKey; + +/** + The userInfo key describing a localized description that can be presented to the user. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorLocalizedDescriptionKey; + +/** + The userInfo key describing a localized title that can be presented to the user, used with `FBSDKLocalizedErrorDescriptionKey`. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorLocalizedTitleKey; + +/* + @methodgroup FBSDKGraphRequest error userInfo keys + */ + +/** + The userInfo key describing the error category, for error recovery purposes. + + See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorKey; + +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorCategoryKey +DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorKey instead"); + +/* + The userInfo key for the Graph API error code. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCodeKey; + +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCode +DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorCodeKey instead"); + +/* + The userInfo key for the Graph API error subcode. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcodeKey; + +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcode +DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorSubcodeKey instead"); + +/* + The userInfo key for the HTTP status code. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorHTTPStatusCodeKey; + +/* + The userInfo key for the raw JSON response. + */ +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorParsedJSONResponseKey; + +#else + +/* + @methodgroup error userInfo keys + */ + +/** + The userInfo key for the invalid collection for errors with FBSDKErrorInvalidArgument. + + If the invalid argument is a collection, the collection can be found with this key and the individual + invalid item can be found with FBSDKErrorArgumentValueKey. + */ +FOUNDATION_EXPORT NSString *const FBSDKErrorArgumentCollectionKey; + +/** + The userInfo key for the invalid argument name for errors with FBSDKErrorInvalidArgument. + */ +FOUNDATION_EXPORT NSString *const FBSDKErrorArgumentNameKey; + +/** + The userInfo key for the invalid argument value for errors with FBSDKErrorInvalidArgument. + */ +FOUNDATION_EXPORT NSString *const FBSDKErrorArgumentValueKey; + +/** + The userInfo key for the message for developers in NSErrors that originate from the SDK. + + The developer message will not be localized and is not intended to be presented within the app. + */ +FOUNDATION_EXPORT NSString *const FBSDKErrorDeveloperMessageKey; + +/** + The userInfo key describing a localized description that can be presented to the user. + */ +FOUNDATION_EXPORT NSString *const FBSDKErrorLocalizedDescriptionKey; + +/** + The userInfo key describing a localized title that can be presented to the user, used with `FBSDKLocalizedErrorDescriptionKey`. + */ +FOUNDATION_EXPORT NSString *const FBSDKErrorLocalizedTitleKey; + +/* + @methodgroup FBSDKGraphRequest error userInfo keys + */ + +/** + The userInfo key describing the error category, for error recovery purposes. + + See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. + */ +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorKey; + +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorCategoryKey +DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorKey instead"); + +/* + The userInfo key for the Graph API error code. + */ +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorCodeKey; + +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorCode +DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorCodeKey instead"); + +/* + The userInfo key for the Graph API error subcode. + */ +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorSubcodeKey; + +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorSubcode +DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorSubcodeKey instead"); + +/* + The userInfo key for the HTTP status code. + */ +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey; + +/* + The userInfo key for the raw JSON response. + */ +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey; + +#endif + +/* + @methodgroup Common Code Block typedefs + */ + +/** + Success Block + */ +typedef void (^FBSDKCodeBlock)(void) +NS_SWIFT_NAME(CodeBlock); + +/** + Error Block + */ +typedef void (^FBSDKErrorBlock)(NSError *_Nullable error) +NS_SWIFT_NAME(ErrorBlock); + +/** + Success Block + */ +typedef void (^FBSDKSuccessBlock)(BOOL success, NSError *_Nullable error) +NS_SWIFT_NAME(SuccessBlock); + +#ifndef NS_ERROR_ENUM +#define NS_ERROR_ENUM(_domain, _name) \ +enum _name: NSInteger _name; \ +enum __attribute__((ns_error_domain(_domain))) _name: NSInteger +#endif + +/** + FBSDKError + Error codes for FBSDKErrorDomain. + */ +typedef NS_ERROR_ENUM(FBSDKErrorDomain, FBSDKError) +{ + /** + Reserved. + */ + FBSDKErrorReserved = 0, + + /** + The error code for errors from invalid encryption on incoming encryption URLs. + */ + FBSDKErrorEncryption, + + /** + The error code for errors from invalid arguments to SDK methods. + */ + FBSDKErrorInvalidArgument, + + /** + The error code for unknown errors. + */ + FBSDKErrorUnknown, + + /** + A request failed due to a network error. Use NSUnderlyingErrorKey to retrieve + the error object from the NSURLSession for more information. + */ + FBSDKErrorNetwork, + + /** + The error code for errors encountered during an App Events flush. + */ + FBSDKErrorAppEventsFlush, + + /** + An endpoint that returns a binary response was used with FBSDKGraphRequestConnection. + + Endpoints that return image/jpg, etc. should be accessed using NSURLRequest + */ + FBSDKErrorGraphRequestNonTextMimeTypeReturned, + + /** + The operation failed because the server returned an unexpected response. + + You can get this error if you are not using the most recent SDK, or you are accessing a version of the + Graph API incompatible with the current SDK. + */ + FBSDKErrorGraphRequestProtocolMismatch, + + /** + The Graph API returned an error. + + See below for useful userInfo keys (beginning with FBSDKGraphRequestError*) + */ + FBSDKErrorGraphRequestGraphAPI, + + /** + The specified dialog configuration is not available. + + This error may signify that the configuration for the dialogs has not yet been downloaded from the server + or that the dialog is unavailable. Subsequent attempts to use the dialog may succeed as the configuration is loaded. + */ + FBSDKErrorDialogUnavailable, + + /** + Indicates an operation failed because a required access token was not found. + */ + FBSDKErrorAccessTokenRequired, + + /** + Indicates an app switch (typically for a dialog) failed because the destination app is out of date. + */ + FBSDKErrorAppVersionUnsupported, + + /** + Indicates an app switch to the browser (typically for a dialog) failed. + */ + FBSDKErrorBrowserUnavailable, +}; + +/** + FBSDKGraphRequestError + Describes the category of Facebook error. See `FBSDKGraphRequestErrorKey`. + */ +typedef NS_ENUM(NSUInteger, FBSDKGraphRequestError) +{ + /** The default error category that is not known to be recoverable. Check `FBSDKLocalizedErrorDescriptionKey` for a user facing message. */ + FBSDKGraphRequestErrorOther = 0, + /** Indicates the error is temporary (such as server throttling). While a recoveryAttempter will be provided with the error instance, the attempt is guaranteed to succeed so you can simply retry the operation if you do not want to present an alert. */ + FBSDKGraphRequestErrorTransient = 1, + /** Indicates the error can be recovered (such as requiring a login). A recoveryAttempter will be provided with the error instance that can take UI action. */ + FBSDKGraphRequestErrorRecoverable = 2 +}; + +/** + a formal protocol very similar to the informal protocol NSErrorRecoveryAttempting + */ +@protocol FBSDKErrorRecoveryAttempting + +/** + attempt the recovery + @param error the error + @param recoveryOptionIndex the selected option index + @param delegate the delegate + @param didRecoverSelector the callback selector, see discussion. + @param contextInfo context info to pass back to callback selector, see discussion. + + + Given that an error alert has been presented document-modally to the user, and the user has chosen one of the error's recovery options, attempt recovery from the error, and send the selected message to the specified delegate. The option index is an index into the error's array of localized recovery options. The method selected by didRecoverSelector must have the same signature as: + + - (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo; + + The value passed for didRecover must be YES if error recovery was completely successful, NO otherwise. + */ +- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo; + +@end + +/** + Deprecated + */ +typedef NS_ENUM(NSInteger, FBSDKErrorCode) +{ + FBSDKReservedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorReserved instead") = 0, + FBSDKEncryptionErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorEncryption instead"), + FBSDKInvalidArgumentErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorInvalidArgument instead"), + FBSDKUnknownErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorUnknown instead"), + FBSDKNetworkErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorNetwork instead"), + FBSDKAppEventsFlushErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorAppEventsFlush instead"), + FBSDKGraphRequestNonTextMimeTypeReturnedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorGraphRequestNonTextMimeTypeReturned instead"), + FBSDKGraphRequestProtocolMismatchErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorGraphRequestProtocolMismatch instead"), + FBSDKGraphRequestGraphAPIErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorGraphRequestGraphAPI instead"), + FBSDKDialogUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorDialogUnavailable instead"), + FBSDKAccessTokenRequiredErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorAccessTokenRequired instead"), + FBSDKAppVersionUnsupportedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorAppVersionUnsupported instead"), + FBSDKBrowserUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorBrowserUnavailable instead"), + FBSDKBrowswerUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorBrowserUnavailable instead") = FBSDKBrowserUnavailableErrorCode, +} DEPRECATED_MSG_ATTRIBUTE("use FBSDKError instead"); + +/** + Deprecated + */ +typedef NS_ENUM(NSUInteger, FBSDKGraphRequestErrorCategory) +{ + FBSDKGraphRequestErrorCategoryOther DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorOther instead") = 0, + FBSDKGraphRequestErrorCategoryTransient DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorTransient instead") = 1, + FBSDKGraphRequestErrorCategoryRecoverable DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorRecoverable instead") = 2 +} DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestError instead"); diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m new file mode 100644 index 0000000000..24f9d57e99 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m @@ -0,0 +1,68 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKConstants.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSErrorDomain const FBSDKErrorDomain = @"com.facebook.sdk.core"; + +#else + +NSString *const FBSDKErrorDomain = @"com.facebook.sdk.core"; + +#endif + + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSErrorUserInfoKey const FBSDKErrorArgumentCollectionKey = @"com.facebook.sdk:FBSDKErrorArgumentCollectionKey"; +NSErrorUserInfoKey const FBSDKErrorArgumentNameKey = @"com.facebook.sdk:FBSDKErrorArgumentNameKey"; +NSErrorUserInfoKey const FBSDKErrorArgumentValueKey = @"com.facebook.sdk:FBSDKErrorArgumentValueKey"; +NSErrorUserInfoKey const FBSDKErrorDeveloperMessageKey = @"com.facebook.sdk:FBSDKErrorDeveloperMessageKey"; +NSErrorUserInfoKey const FBSDKErrorLocalizedDescriptionKey = @"com.facebook.sdk:FBSDKErrorLocalizedDescriptionKey"; +NSErrorUserInfoKey const FBSDKErrorLocalizedTitleKey = @"com.facebook.sdk:FBSDKErrorLocalizedErrorTitleKey"; + +NSErrorUserInfoKey const FBSDKGraphRequestErrorKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorCategoryKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorHTTPStatusCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorParsedJSONResponseKey = @"com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey"; + +#else + +NSString *const FBSDKErrorArgumentCollectionKey = @"com.facebook.sdk:FBSDKErrorArgumentCollectionKey"; +NSString *const FBSDKErrorArgumentNameKey = @"com.facebook.sdk:FBSDKErrorArgumentNameKey"; +NSString *const FBSDKErrorArgumentValueKey = @"com.facebook.sdk:FBSDKErrorArgumentValueKey"; +NSString *const FBSDKErrorDeveloperMessageKey = @"com.facebook.sdk:FBSDKErrorDeveloperMessageKey"; +NSString *const FBSDKErrorLocalizedDescriptionKey = @"com.facebook.sdk:FBSDKErrorLocalizedDescriptionKey"; +NSString *const FBSDKErrorLocalizedTitleKey = @"com.facebook.sdk:FBSDKErrorLocalizedErrorTitleKey"; + +NSString *const FBSDKGraphRequestErrorKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; +NSString *const FBSDKGraphRequestErrorCategoryKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; +NSString *const FBSDKGraphRequestErrorGraphErrorCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; +NSString *const FBSDKGraphRequestErrorGraphErrorCode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; +NSString *const FBSDKGraphRequestErrorGraphErrorSubcodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; +NSString *const FBSDKGraphRequestErrorGraphErrorSubcode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; +NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey"; +NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey = @"com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey"; + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h new file mode 100644 index 0000000000..039302bcc5 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h @@ -0,0 +1,34 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + Extension protocol for NSCopying that adds the copy method, which is implemented on NSObject. + + NSObject implicitly conforms to this protocol. + */ +@protocol FBSDKCopying + +/** + Implemented by NSObject as a convenience to copyWithZone:. + @return A copy of the receiver. + */ +- (id)copy; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h new file mode 100644 index 0000000000..1c3a99f0ad --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h @@ -0,0 +1,57 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 +#import + +#if !TARGET_OS_TV +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#else +#import +#import +#endif + +#define FBSDK_VERSION_STRING @"4.42.0" +#define FBSDK_TARGET_PLATFORM_VERSION @"v3.2" diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h new file mode 100644 index 0000000000..820be4b825 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h @@ -0,0 +1,99 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKConstants.h" + +@class FBSDKGraphErrorRecoveryProcessor; +@class FBSDKGraphRequest; + +/** + Defines a delegate for `FBSDKGraphErrorRecoveryProcessor`. + */ +@protocol FBSDKGraphErrorRecoveryProcessorDelegate + +/** + Indicates the error recovery has been attempted. + @param processor the processor instance. + @param didRecover YES if the recovery was successful. + @param error the error that that was attempted to be recovered from. + */ +- (void)processorDidAttemptRecovery:(FBSDKGraphErrorRecoveryProcessor *)processor didRecover:(BOOL)didRecover error:(NSError *)error; + +@optional +/** + Indicates the processor is about to process the error. + @param processor the processor instance. + @param error the error is about to be processed. + + return NO if the processor should not process the error. For example, + if you want to prevent alerts of localized messages but otherwise perform retries and recoveries, + you could return NO for errors where userInfo[FBSDKGraphRequestErrorKey] equal to FBSDKGraphRequestErrorOther + */ +- (BOOL)processorWillProcessError:(FBSDKGraphErrorRecoveryProcessor *)processor error:(NSError *)error; + +@end + +/** + Defines a type that can process Facebook NSErrors with best practices. + + Facebook NSErrors can contain FBSDKErrorRecoveryAttempting instances to recover from errors, or + localized messages to present to the user. This class will process the instances as follows: + + 1. If the error is temporary as indicated by FBSDKGraphRequestErrorKey, assume the recovery succeeded and + notify the delegate. + 2. If a FBSDKErrorRecoveryAttempting instance is available, display an alert (dispatched to main thread) + with the recovery options and call the instance's [ attemptRecoveryFromError:optionIndex:...]. + 3. If a FBSDKErrorRecoveryAttempting is not available, check the userInfo for FBSDKLocalizedErrorDescriptionKey + and present that in an alert (dispatched to main thread). + + By default, FBSDKGraphRequests use this type to process errors and retry the request upon a successful + recovery. + + Note that Facebook recovery attempters can present UI or even cause app switches (such as to login). Any such + work is dispatched to the main thread (therefore your request handlers may then run on the main thread). + + Login recovery requires FBSDKLoginKit. Login will use FBSDKLoginBehaviorNative and will prompt the user + for all permissions last granted. If any are declined on the new request, the recovery is not successful but + the `[FBSDKAccessToken currentAccessToken]` might still have been updated. + . + */ +@interface FBSDKGraphErrorRecoveryProcessor : NSObject + +/** + Gets the delegate. Note this is a strong reference, and is nil'ed out after recovery is complete. + */ +@property (nonatomic, strong, readonly) iddelegate; + +/** + Attempts to process the error, return YES if the error can be processed. + @param error the error to process. + @param request the related request that may be reissued. + @param delegate the delegate that will be retained until recovery is complete. + */ +- (BOOL)processError:(NSError *)error request:(FBSDKGraphRequest *)request delegate:(id) delegate; + +/** + The callback for FBSDKErrorRecoveryAttempting + @param didRecover if the recovery succeeded + @param contextInfo unused + */ +- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m new file mode 100644 index 0000000000..bd21cecde8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m @@ -0,0 +1,172 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGraphErrorRecoveryProcessor.h" + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKErrorRecoveryAttempter.h" + +@interface FBSDKGraphErrorRecoveryProcessor() +{ + FBSDKErrorRecoveryAttempter *_recoveryAttempter; + NSError *_error; +} + +@property (nonatomic, strong) iddelegate; + +@end + +@implementation FBSDKGraphErrorRecoveryProcessor + +- (void)dealloc +{ + +} + +- (BOOL)processError:(NSError *)error request:(FBSDKGraphRequest *)request delegate:(id) delegate +{ + self.delegate = delegate; + if ([self.delegate respondsToSelector:@selector(processorWillProcessError:error:)]) { + if (![self.delegate processorWillProcessError:self error:error]) { + return NO; + } + } + + FBSDKGraphRequestError errorCategory = [error.userInfo[FBSDKGraphRequestErrorKey] unsignedIntegerValue]; + switch (errorCategory) { + case FBSDKGraphRequestErrorTransient : + [self.delegate processorDidAttemptRecovery:self didRecover:YES error:nil]; + self.delegate = nil; + return YES; + case FBSDKGraphRequestErrorRecoverable : + if ([request.tokenString isEqualToString:[FBSDKAccessToken currentAccessToken].tokenString]) { + _recoveryAttempter = error.recoveryAttempter; + BOOL isLoginRecoveryAttempter = [_recoveryAttempter isKindOfClass:NSClassFromString(@"_FBSDKLoginRecoveryAttempter")]; + + // Set up a block to do the typical recovery work so that we can chain it for ios auth special cases. + // the block returns YES if recovery UI is started (meaning we wait for the alertviewdelegate to resume control flow). + BOOL (^standardRecoveryWork)(void) = ^BOOL{ + NSArray *recoveryOptionsTitles = error.userInfo[NSLocalizedRecoveryOptionsErrorKey]; + if (recoveryOptionsTitles.count > 0 && self->_recoveryAttempter) { + NSString *recoverySuggestion = error.userInfo[NSLocalizedRecoverySuggestionErrorKey]; + self->_error = error; + dispatch_async(dispatch_get_main_queue(), ^{ + [self displayAlertWithRecoverySuggestion:recoverySuggestion recoveryOptionsTitles:recoveryOptionsTitles]; + }); + return YES; + } + return NO; + }; + + if ([request.tokenString isEqualToString:[FBSDKSystemAccountStoreAdapter sharedInstance].accessTokenString] && + isLoginRecoveryAttempter) { + // special system auth case: if user has granted permissions we can simply renew. On a successful + // renew, treat this as immediately recovered without the standard alert prompty. + // (for example, this can repair expired tokens seamlessly) + [[FBSDKSystemAccountStoreAdapter sharedInstance] + renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *renewError) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (result == ACAccountCredentialRenewResultRenewed) { + [self.delegate processorDidAttemptRecovery:self didRecover:YES error:nil]; + self.delegate = nil; + } else if (!standardRecoveryWork()) { + [self.delegate processorDidAttemptRecovery:self didRecover:NO error:self->_error]; + }; + }); + }]; + // short-circuit YES so that the renew callback resumes the control flow. + return YES; + } + + return standardRecoveryWork(); + } + return NO; + case FBSDKGraphRequestErrorOther : + if ([request.tokenString isEqualToString:[FBSDKAccessToken currentAccessToken].tokenString]) { + NSString *message = error.userInfo[FBSDKErrorLocalizedDescriptionKey]; + NSString *title = error.userInfo[FBSDKErrorLocalizedTitleKey]; + if (message) { + dispatch_async(dispatch_get_main_queue(), ^{ + NSString *localizedOK = + NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Alert.OK", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"OK", + @"The title of the label to dismiss the alert when presenting user facing error messages"); + [self displayAlertWithTitle:title message:message cancelButtonTitle:localizedOK]; + }); + } + } + return NO; + } + return NO; +} + +#pragma mark - UIAlertController support + +- (void)displayAlertWithRecoverySuggestion:(NSString *)recoverySuggestion recoveryOptionsTitles:(NSArray *)recoveryOptionsTitles +{ + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil + message:recoverySuggestion + preferredStyle:UIAlertControllerStyleAlert]; + for (NSUInteger i = 0; i < recoveryOptionsTitles.count; i++) { + NSString *title = recoveryOptionsTitles[i]; + UIAlertAction *option = [UIAlertAction actionWithTitle:title + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * _Nonnull action) { + [self->_recoveryAttempter attemptRecoveryFromError:self->_error + optionIndex:i + delegate:self + didRecoverSelector:@selector(didPresentErrorWithRecovery:contextInfo:) + contextInfo:nil]; + }]; + [alertController addAction:option]; + } + UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; + [topMostViewController presentViewController:alertController + animated:YES + completion:nil]; +} + +- (void)displayAlertWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)localizedOK +{ + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil + message:message + preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *OKAction = [UIAlertAction actionWithTitle:localizedOK + style:UIAlertActionStyleCancel + handler:^(UIAlertAction * _Nonnull action) { + [self->_recoveryAttempter attemptRecoveryFromError:self->_error + optionIndex:0 + delegate:self + didRecoverSelector:@selector(didPresentErrorWithRecovery:contextInfo:) + contextInfo:nil]; + }]; + [alertController addAction:OKAction]; + UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; + [topMostViewController presentViewController:alertController + animated:YES + completion:nil]; +} + +#pragma mark - FBSDKErrorRecoveryAttempting "delegate" + +- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo +{ + [self.delegate processorDidAttemptRecovery:self didRecover:didRecover error:_error]; + self.delegate = nil; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h new file mode 100644 index 0000000000..bcb514929b --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h @@ -0,0 +1,126 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAccessToken; + +/** + Represents a request to the Facebook Graph API. + + + `FBSDKGraphRequest` encapsulates the components of a request (the + Graph API path, the parameters, error recovery behavior) and should be + used in conjunction with `FBSDKGraphRequestConnection` to issue the request. + + Nearly all Graph APIs require an access token. Unless specified, the + `[FBSDKAccessToken currentAccessToken]` is used. Therefore, most requests + will require login first (see `FBSDKLoginManager` in FBSDKLoginKit.framework). + + A `- start` method is provided for convenience for single requests. + + By default, FBSDKGraphRequest will attempt to recover any errors returned from + Facebook. You can disable this via `disableErrorRecovery:`. + + @see FBSDKGraphErrorRecoveryProcessor + */ +@interface FBSDKGraphRequest : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. + @param graphPath the graph path (e.g., @"me"). + @param parameters the optional parameters dictionary. + */ +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters; + +/** + Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. + @param graphPath the graph path (e.g., @"me"). + @param parameters the optional parameters dictionary. + @param HTTPMethod the optional HTTP method. nil defaults to @"GET". + */ +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + HTTPMethod:(NSString *)HTTPMethod; + +/** + Initializes a new instance. + @param graphPath the graph path (e.g., @"me"). + @param parameters the optional parameters dictionary. + @param tokenString the token string to use. Specifying nil will cause no token to be used. + @param version the optional Graph API version (e.g., @"v2.0"). nil defaults to `[FBSDKSettings graphAPIVersion]`. + @param HTTPMethod the optional HTTP method (e.g., @"POST"). nil defaults to @"GET". + */ +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + tokenString:(NSString *)tokenString + version:(NSString *)version + HTTPMethod:(NSString *)HTTPMethod +NS_DESIGNATED_INITIALIZER; + +/** + The request parameters. + */ +@property (nonatomic, strong, readonly) NSMutableDictionary *parameters; + +/** + The access token string used by the request. + */ +@property (nonatomic, copy, readonly) NSString *tokenString; + +/** + The Graph API endpoint to use for the request, for example "me". + */ +@property (nonatomic, copy, readonly) NSString *graphPath; + +/** + The HTTPMethod to use for the request, for example "GET" or "POST". + */ +@property (nonatomic, copy, readonly) NSString *HTTPMethod; + +/** + The Graph API version to use (e.g., "v2.0") + */ +@property (nonatomic, copy, readonly) NSString *version; + +/** + If set, disables the automatic error recovery mechanism. + @param disable whether to disable the automatic error recovery mechanism + + By default, non-batched FBSDKGraphRequest instances will automatically try to recover + from errors by constructing a `FBSDKGraphErrorRecoveryProcessor` instance that + re-issues the request on successful recoveries. The re-issued request will call the same + handler as the receiver but may occur with a different `FBSDKGraphRequestConnection` instance. + + This will override [FBSDKSettings setGraphErrorRecoveryDisabled:]. + */ +- (void)setGraphErrorRecoveryDisabled:(BOOL)disable; + +/** + Starts a connection to the Graph API. + @param handler The handler block to call when the request completes. + */ +- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestHandler)handler; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m new file mode 100644 index 0000000000..93ad56f524 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m @@ -0,0 +1,212 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGraphRequest+Internal.h" + +#import + +#import "FBSDKAccessToken.h" +#import "FBSDKCoreKit.h" +#import "FBSDKGraphRequestConnection.h" +#import "FBSDKGraphRequestDataAttachment.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings+Internal.h" + +// constants +static NSString *const kGetHTTPMethod = @"GET"; +static NSString *const kPostHTTPMethod = @"POST"; + +@interface FBSDKGraphRequest() +@property (nonatomic, assign) FBSDKGraphRequestFlags flags; +@end + +@implementation FBSDKGraphRequest + +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters { + return [self initWithGraphPath:graphPath + parameters:parameters + flags:FBSDKGraphRequestFlagNone]; +} + +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + HTTPMethod:(NSString *)HTTPMethod { + return [self initWithGraphPath:graphPath + parameters:parameters + tokenString:[FBSDKAccessToken currentAccessToken].tokenString + version:nil + HTTPMethod:HTTPMethod]; +} + +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + flags:(FBSDKGraphRequestFlags)flags { + return [self initWithGraphPath:graphPath + parameters:parameters + tokenString:[FBSDKAccessToken currentAccessToken].tokenString + HTTPMethod:nil + flags:flags]; +} + +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + tokenString:(NSString *)tokenString + HTTPMethod:(NSString *)HTTPMethod + flags:(FBSDKGraphRequestFlags)flags { + if ((self = [self initWithGraphPath:graphPath + parameters:parameters + tokenString:tokenString + version:[FBSDKSettings graphAPIVersion] + HTTPMethod:HTTPMethod])) { + self.flags |= flags; + } + return self; +} + +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + tokenString:(NSString *)tokenString + version:(NSString *)version + HTTPMethod:(NSString *)HTTPMethod { + if ((self = [super init])) { + _tokenString = [tokenString copy]; + _version = version ? [version copy] : [FBSDKSettings graphAPIVersion]; + _graphPath = [graphPath copy]; + _HTTPMethod = HTTPMethod ? [HTTPMethod copy] : kGetHTTPMethod; + _parameters = [[NSMutableDictionary alloc] initWithDictionary:parameters]; + if ([FBSDKSettings isGraphErrorRecoveryDisabled]) { + _flags = FBSDKGraphRequestFlagDisableErrorRecovery; + } + } + return self; +} + +- (BOOL)isGraphErrorRecoveryDisabled +{ + return (self.flags & FBSDKGraphRequestFlagDisableErrorRecovery); +} + +- (void)setGraphErrorRecoveryDisabled:(BOOL)disable +{ + if (disable) { + self.flags |= FBSDKGraphRequestFlagDisableErrorRecovery; + } else { + self.flags &= ~FBSDKGraphRequestFlagDisableErrorRecovery; + } +} + +- (BOOL)hasAttachments +{ + __block BOOL hasAttachments = NO; + [self.parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if ([FBSDKGraphRequest isAttachment:obj]) { + hasAttachments = YES; + *stop = YES; + } + }]; + return hasAttachments; +} + ++ (BOOL)isAttachment:(id)item +{ + return ([item isKindOfClass:[UIImage class]] || + [item isKindOfClass:[NSData class]] || + [item isKindOfClass:[FBSDKGraphRequestDataAttachment class]]); +} + + ++ (NSString *)serializeURL:(NSString *)baseUrl + params:(NSDictionary *)params { + return [self serializeURL:baseUrl params:params httpMethod:kGetHTTPMethod]; +} + ++ (NSString *)serializeURL:(NSString *)baseUrl + params:(NSDictionary *)params + httpMethod:(NSString *)httpMethod { + return [self serializeURL:baseUrl params:params httpMethod:httpMethod forBatch:NO]; +} + ++ (NSString *)serializeURL:(NSString *)baseUrl + params:(NSDictionary *)params + httpMethod:(NSString *)httpMethod + forBatch:(BOOL)forBatch { + params = [self preprocessParams: params]; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSURL *parsedURL = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; +#pragma clang pop + + if ([httpMethod isEqualToString:kPostHTTPMethod] && !forBatch) { + return baseUrl; + } + + NSString *queryPrefix = parsedURL.query ? @"&" : @"?"; + + NSString *query = [FBSDKInternalUtility queryStringWithDictionary:params error:NULL invalidObjectHandler:^id(id object, BOOL *stop) { + if ([self isAttachment:object]) { + if ([httpMethod isEqualToString:kGetHTTPMethod]) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"can not use GET to upload a file"]; + } + return nil; + } + return object; + }]; + return [NSString stringWithFormat:@"%@%@%@", baseUrl, queryPrefix, query]; +} + ++ (NSDictionary *)preprocessParams:(NSDictionary *)params +{ + NSString *debugValue = [FBSDKSettings graphAPIDebugParamValue]; + if (debugValue) { + NSMutableDictionary *mutableParams = [NSMutableDictionary dictionaryWithDictionary:params]; + mutableParams[@"debug"] = debugValue; + return mutableParams; + } + + return params; +} + +- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestHandler)handler +{ + FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; + [connection addRequest:self completionHandler:handler]; + [connection start]; + return connection; +} + +#pragma mark - Debugging helpers + +- (NSString *)description +{ + NSMutableString *result = [NSMutableString stringWithFormat:@"<%@: %p", + NSStringFromClass([self class]), + self]; + if (self.graphPath) { + [result appendFormat:@", graphPath: %@", self.graphPath]; + } + if (self.HTTPMethod) { + [result appendFormat:@", HTTPMethod: %@", self.HTTPMethod]; + } + [result appendFormat:@", parameters: %@>", self.parameters.description]; + return result; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h new file mode 100644 index 0000000000..af10a85957 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h @@ -0,0 +1,332 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKGraphRequest; +@class FBSDKGraphRequestConnection; + +/** + FBSDKGraphRequestHandler + + A block that is passed to addRequest to register for a callback with the results of that + request once the connection completes. + + + + Pass a block of this type when calling addRequest. This will be called once + the request completes. The call occurs on the UI thread. + + @param connection The `FBSDKGraphRequestConnection` that sent the request. + + @param result The result of the request. This is a translation of + JSON data to `NSDictionary` and `NSArray` objects. This + is nil if there was an error. + + @param error The `NSError` representing any error that occurred. + + */ +typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection, + id result, + NSError *error); + +/** + @protocol + + The `FBSDKGraphRequestConnectionDelegate` protocol defines the methods used to receive network + activity progress information from a . + */ +@protocol FBSDKGraphRequestConnectionDelegate + +@optional + +/** + @method + + Tells the delegate the request connection will begin loading + + + + If the is created using one of the convenience factory methods prefixed with + start, the object returned from the convenience method has already begun loading and this method + will not be called when the delegate is set. + + @param connection The request connection that is starting a network request + */ +- (void)requestConnectionWillBeginLoading:(FBSDKGraphRequestConnection *)connection; + +/** + @method + + Tells the delegate the request connection finished loading + + + + If the request connection completes without a network error occurring then this method is called. + Invocation of this method does not indicate success of every made, only that the + request connection has no further activity. Use the error argument passed to the FBSDKGraphRequestHandler + block to determine success or failure of each . + + This method is invoked after the completion handler for each . + + @param connection The request connection that successfully completed a network request + */ +- (void)requestConnectionDidFinishLoading:(FBSDKGraphRequestConnection *)connection; + +/** + @method + + Tells the delegate the request connection failed with an error + + + + If the request connection fails with a network error then this method is called. The `error` + argument specifies why the network connection failed. The `NSError` object passed to the + FBSDKGraphRequestHandler block may contain additional information. + + @param connection The request connection that successfully completed a network request + @param error The `NSError` representing the network error that occurred, if any. May be nil + in some circumstances. Consult the `NSError` for the for reliable + failure information. + */ +- (void)requestConnection:(FBSDKGraphRequestConnection *)connection + didFailWithError:(NSError *)error; + +/** + @method + + Tells the delegate how much data has been sent and is planned to send to the remote host + + + + The byte count arguments refer to the aggregated objects, not a particular . + + Like `NSURLSession`, the values may change in unexpected ways if data needs to be resent. + + @param connection The request connection transmitting data to a remote host + @param bytesWritten The number of bytes sent in the last transmission + @param totalBytesWritten The total number of bytes sent to the remote host + @param totalBytesExpectedToWrite The total number of bytes expected to send to the remote host + */ +- (void)requestConnection:(FBSDKGraphRequestConnection *)connection + didSendBodyData:(NSInteger)bytesWritten + totalBytesWritten:(NSInteger)totalBytesWritten +totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; + +@end + +/** + + The `FBSDKGraphRequestConnection` represents a single connection to Facebook to service a request. + + + + The request settings are encapsulated in a reusable object. The + `FBSDKGraphRequestConnection` object encapsulates the concerns of a single communication + e.g. starting a connection, canceling a connection, or batching requests. + + */ +@interface FBSDKGraphRequestConnection : NSObject + +/** + The delegate object that receives updates. + */ +@property (nonatomic, weak) id delegate; + +/** + Gets or sets the timeout interval to wait for a response before giving up. + */ +@property (nonatomic, assign) NSTimeInterval timeout; + +/** + The raw response that was returned from the server. (readonly) + + + + This property can be used to inspect HTTP headers that were returned from + the server. + + The property is nil until the request completes. If there was a response + then this property will be non-nil during the FBSDKGraphRequestHandler callback. + */ +@property (nonatomic, retain, readonly) NSHTTPURLResponse *URLResponse; + +/** + @methodgroup Class methods + */ + +/** + @method + + This method sets the default timeout on all FBSDKGraphRequestConnection instances. Defaults to 60 seconds. + + @param defaultConnectionTimeout The timeout interval. + */ ++ (void)setDefaultConnectionTimeout:(NSTimeInterval)defaultConnectionTimeout; + +/** + @methodgroup Adding requests + */ + +/** + @method + + This method adds an object to this connection. + + @param request A request to be included in the round-trip when start is called. + @param handler A handler to call back when the round-trip completes or times out. + + + + The completion handler is retained until the block is called upon the + completion or cancellation of the connection. + */ +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler; + +/** + @method + + This method adds an object to this connection. + + @param request A request to be included in the round-trip when start is called. + + @param handler A handler to call back when the round-trip completes or times out. + The handler will be invoked on the main thread. + + @param name An optional name for this request. This can be used to feed + the results of one request to the input of another in the same + `FBSDKGraphRequestConnection` as described in + [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). + + + + The completion handler is retained until the block is called upon the + completion or cancellation of the connection. This request can be named + to allow for using the request's response in a subsequent request. + */ +- (void)addRequest:(FBSDKGraphRequest *)request + batchEntryName:(NSString *)name + completionHandler:(FBSDKGraphRequestHandler)handler; + +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchEntryName:(NSString *)name +DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchEntryName:completionHandler:`"); + +/** + @method + + This method adds an object to this connection. + + @param request A request to be included in the round-trip when start is called. + + @param handler A handler to call back when the round-trip completes or times out. + + @param batchParameters The optional dictionary of parameters to include for this request + as described in [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). + Examples include "depends_on", "name", or "omit_response_on_success". + + + + The completion handler is retained until the block is called upon the + completion or cancellation of the connection. This request can be named + to allow for using the request's response in a subsequent request. + */ +- (void)addRequest:(FBSDKGraphRequest *)request + batchParameters:(NSDictionary *)batchParameters + completionHandler:(FBSDKGraphRequestHandler)handler; + +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchParameters:(NSDictionary *)batchParameters +DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchParameters:completionHandler:`"); + +/** + @methodgroup Instance methods + */ + +/** + @method + + Signals that a connection should be logically terminated as the + application is no longer interested in a response. + + + + Synchronously calls any handlers indicating the request was cancelled. Cancel + does not guarantee that the request-related processing will cease. It + does promise that all handlers will complete before the cancel returns. A call to + cancel prior to a start implies a cancellation of all requests associated + with the connection. + */ +- (void)cancel; + +/** + @method + + This method starts a connection with the server and is capable of handling all of the + requests that were added to the connection. + + + By default, a connection is scheduled on the current thread in the default mode when it is created. + See `setDelegateQueue:` for other options. + + This method cannot be called twice for an `FBSDKGraphRequestConnection` instance. + */ +- (void)start; + +/** + Determines the operation queue that is used to call methods on the connection's delegate. + @param queue The operation queue to use when calling delegate methods. + + By default, a connection is scheduled on the current thread in the default mode when it is created. + You cannot reschedule a connection after it has started. + */ +- (void)setDelegateQueue:(NSOperationQueue *)queue; + +/** + @method + + Overrides the default version for a batch request + + + + The SDK automatically prepends a version part, such as "v2.0" to API paths in order to simplify API versioning + for applications. If you want to override the version part while using batch requests on the connection, call + this method to set the version for the batch request. + + @param version This is a string in the form @"v2.0" which will be used for the version part of an API path + */ +- (void)overrideGraphAPIVersion:(NSString *)version; + +- (void)overrideVersionPartWith:(NSString *)version +DEPRECATED_MSG_ATTRIBUTE("Renamed `overrideGraphAPIVersion`"); + +@end + +/** + The key in the result dictionary for requests to old versions of the Graph API + whose response is not a JSON object. + + + When a request returns a non-JSON response (such as a "true" literal), that response + will be wrapped into a dictionary using this const as the key. This only applies for very few Graph API + prior to v2.1. + */ +FOUNDATION_EXPORT NSString *const FBSDKNonJSONResponseProperty; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m new file mode 100644 index 0000000000..990be5f440 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m @@ -0,0 +1,1084 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGraphRequestConnection+Internal.h" + +#import "FBSDKAppEvents+Internal.h" +#import "FBSDKConstants.h" +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKError.h" +#import "FBSDKErrorConfiguration.h" +#import "FBSDKGraphRequest+Internal.h" +#import "FBSDKGraphRequestBody.h" +#import "FBSDKGraphRequestDataAttachment.h" +#import "FBSDKGraphRequestMetadata.h" +#import "FBSDKGraphRequestPiggybackManager.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings+Internal.h" +#import "FBSDKURLSessionTask.h" + +NSString *const FBSDKNonJSONResponseProperty = @"FACEBOOK_NON_JSON_RESULT"; + +// URL construction constants +static NSString *const kGraphURLPrefix = @"graph."; +static NSString *const kGraphVideoURLPrefix = @"graph-video."; + +static NSString *const kBatchKey = @"batch"; +static NSString *const kBatchMethodKey = @"method"; +static NSString *const kBatchRelativeURLKey = @"relative_url"; +static NSString *const kBatchAttachmentKey = @"attached_files"; +static NSString *const kBatchFileNamePrefix = @"file"; +static NSString *const kBatchEntryName = @"name"; + +static NSString *const kAccessTokenKey = @"access_token"; +#if TARGET_OS_TV +static NSString *const kSDK = @"tvos"; +static NSString *const kUserAgentBase = @"FBtvOSSDK"; +#else +static NSString *const kSDK = @"ios"; +static NSString *const kUserAgentBase = @"FBiOSSDK"; +#endif +static NSString *const kBatchRestMethodBaseURL = @"method/"; + +static NSTimeInterval g_defaultTimeout = 60.0; + +static FBSDKErrorConfiguration *g_errorConfiguration; + +#if !TARGET_OS_TV +static FBSDKAccessToken *_CreateExpiredAccessToken(FBSDKAccessToken *accessToken) +{ + if (accessToken == nil) { + return nil; + } + if (accessToken.isExpired) { + return accessToken; + } + NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-1]; + return [[FBSDKAccessToken alloc] initWithTokenString:accessToken.tokenString + permissions:accessToken.permissions.allObjects + declinedPermissions:accessToken.declinedPermissions.allObjects + appID:accessToken.appID + userID:accessToken.userID + expirationDate:expirationDate + refreshDate:expirationDate + dataAccessExpirationDate:expirationDate]; +} +#endif + +// ---------------------------------------------------------------------------- +// FBSDKGraphRequestConnectionState + +typedef NS_ENUM(NSUInteger, FBSDKGraphRequestConnectionState) +{ + kStateCreated, + kStateSerialized, + kStateStarted, + kStateCompleted, + kStateCancelled, +}; + +// ---------------------------------------------------------------------------- +// Private properties and methods + +@interface FBSDKGraphRequestConnection () < +NSURLSessionDataDelegate +#if !TARGET_OS_TV +, FBSDKGraphErrorRecoveryProcessorDelegate +#endif +> + +@property (nonatomic, strong) NSURLSession *session; +@property (nonatomic, strong) FBSDKURLSessionTask *task; +@property (nonatomic, retain) NSMutableArray *requests; +@property (nonatomic, assign) FBSDKGraphRequestConnectionState state; +@property (nonatomic, strong) FBSDKLogger *logger; +@property (nonatomic, assign) uint64_t requestStartTime; + +@end + +// ---------------------------------------------------------------------------- +// FBSDKGraphRequestConnection + +@implementation FBSDKGraphRequestConnection +{ + NSString *_overrideVersionPart; + NSUInteger _expectingResults; + NSOperationQueue *_delegateQueue; +#if !TARGET_OS_TV + FBSDKGraphRequestMetadata *_recoveringRequestMetadata; + FBSDKGraphErrorRecoveryProcessor *_errorRecoveryProcessor; +#endif +} + +- (instancetype)init +{ + if ((self = [super init])) { + _requests = [[NSMutableArray alloc] init]; + _timeout = g_defaultTimeout; + _state = kStateCreated; + _logger = [[FBSDKLogger alloc] initWithLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests]; + } + return self; +} + +- (void)dealloc +{ + [_session invalidateAndCancel]; +} + +#pragma mark - Public + ++ (void)setDefaultConnectionTimeout:(NSTimeInterval)defaultTimeout +{ + if (defaultTimeout >= 0) { + g_defaultTimeout = defaultTimeout; + } +} + +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler +{ + [self addRequest:request batchEntryName:nil completionHandler:handler]; +} + +- (void)addRequest:(FBSDKGraphRequest *)request + batchEntryName:(NSString *)name + completionHandler:(FBSDKGraphRequestHandler)handler +{ + NSDictionary *batchParams = (name)? @{kBatchEntryName : name } : nil; + [self addRequest:request batchParameters:batchParams completionHandler:handler]; +} + +- (void)addRequest:(FBSDKGraphRequest *)request + batchParameters:(NSDictionary *)batchParameters + completionHandler:(FBSDKGraphRequestHandler)handler +{ + if (self.state != kStateCreated) { + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"Cannot add requests once started or if a URLRequest is set" + userInfo:nil]; + } + FBSDKGraphRequestMetadata *metadata = [[FBSDKGraphRequestMetadata alloc] initWithRequest:request + completionHandler:handler + batchParameters:batchParameters]; + + [self.requests addObject:metadata]; +} + +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchEntryName:(NSString *)name +{ + [self addRequest:request batchEntryName:name completionHandler:handler]; +} + +- (void)addRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchParameters:(NSDictionary *)batchParameters +{ + [self addRequest:request batchParameters:batchParameters completionHandler:handler]; +} + +- (void)cancel +{ + self.state = kStateCancelled; + [self.task cancel]; + [self cleanUpSession]; +} + +- (void)overrideGraphAPIVersion:(NSString *)version +{ + if (![_overrideVersionPart isEqualToString:version]) { + _overrideVersionPart = [version copy]; + } +} + +- (void)overrideVersionPartWith:(NSString *)version +{ + [self overrideGraphAPIVersion:version]; +} + +- (void)start +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + g_errorConfiguration = [[FBSDKErrorConfiguration alloc] initWithDictionary:nil]; + }); + //optimistically check for updated server configuration; + g_errorConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration].errorConfiguration ?: g_errorConfiguration; + + if (self.state != kStateCreated && self.state != kStateSerialized) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"FBSDKGraphRequestConnection cannot be started again."]; + return; + } + [FBSDKGraphRequestPiggybackManager addPiggybackRequests:self]; + NSMutableURLRequest *request = [self requestWithBatch:self.requests timeout:_timeout]; + + self.state = kStateStarted; + + [self logRequest:request bodyLength:0 bodyLogger:nil attachmentLogger:nil]; + _requestStartTime = [FBSDKInternalUtility currentTimeInMilliseconds]; + + FBSDKURLSessionTaskHandler handler = ^(NSError *error, + NSURLResponse *response, + NSData *responseData) { + [self completeFBSDKURLSessionWithResponse:response + data:responseData + networkError:error]; + }; + + if (!self.session) { + self.session = [self defaultSession]; + } + + self.task = [[FBSDKURLSessionTask alloc] initWithRequest:request + fromSession:self.session + completionHandler:handler]; + [self.task start]; + + id delegate = self.delegate; + if ([delegate respondsToSelector:@selector(requestConnectionWillBeginLoading:)]) { + if (_delegateQueue) { + [_delegateQueue addOperationWithBlock:^{ + [delegate requestConnectionWillBeginLoading:self]; + }]; + } else { + [delegate requestConnectionWillBeginLoading:self]; + } + } +} + +- (void)setDelegateQueue:(NSOperationQueue *)queue +{ + _delegateQueue = queue; +} + +#pragma mark - Private methods (request generation) + +// +// Adds request data to a batch in a format expected by the JsonWriter. +// Binary attachments are referenced by name in JSON and added to the +// attachments dictionary. +// +- (void)addRequest:(FBSDKGraphRequestMetadata *)metadata + toBatch:(NSMutableArray *)batch + attachments:(NSMutableDictionary *)attachments + batchToken:(NSString *)batchToken +{ + NSMutableDictionary *requestElement = [[NSMutableDictionary alloc] init]; + + if (metadata.batchParameters) { + [requestElement addEntriesFromDictionary:metadata.batchParameters]; + } + + if (batchToken) { + metadata.request.parameters[kAccessTokenKey] = batchToken; + [self registerTokenToOmitFromLog:batchToken]; + } + + NSString *urlString = [self urlStringForSingleRequest:metadata.request forBatch:YES]; + requestElement[kBatchRelativeURLKey] = urlString; + requestElement[kBatchMethodKey] = metadata.request.HTTPMethod; + + NSMutableArray *attachmentNames = [NSMutableArray array]; + + [metadata.request.parameters enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { + if ([FBSDKGraphRequest isAttachment:value]) { + NSString *name = [NSString stringWithFormat:@"%@%lu", + kBatchFileNamePrefix, + (unsigned long)attachments.count]; + [attachmentNames addObject:name]; + attachments[name] = value; + } + }]; + + if (attachmentNames.count) { + requestElement[kBatchAttachmentKey] = [attachmentNames componentsJoinedByString:@","]; + } + + [batch addObject:requestElement]; +} + +- (void)appendAttachments:(NSDictionary *)attachments + toBody:(FBSDKGraphRequestBody *)body + addFormData:(BOOL)addFormData + logger:(FBSDKLogger *)logger +{ + [attachments enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { + value = [FBSDKInternalUtility convertRequestValue:value]; + if ([value isKindOfClass:[NSString class]]) { + if (addFormData) { + [body appendWithKey:key formValue:(NSString *)value logger:logger]; + } + } else if ([value isKindOfClass:[UIImage class]]) { + [body appendWithKey:key imageValue:(UIImage *)value logger:logger]; + } else if ([value isKindOfClass:[NSData class]]) { + [body appendWithKey:key dataValue:(NSData *)value logger:logger]; + } else if ([value isKindOfClass:[FBSDKGraphRequestDataAttachment class]]) { + [body appendWithKey:key dataAttachmentValue:(FBSDKGraphRequestDataAttachment *)value logger:logger]; + } else { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors formatString:@"Unsupported FBSDKGraphRequest attachment:%@, skipping.", value]; + } + }]; +} + +// +// Serializes all requests in the batch to JSON and appends the result to +// body. Also names all attachments that need to go as separate blocks in +// the body of the request. +// +// All the requests are serialized into JSON, with any binary attachments +// named and referenced by name in the JSON. +// +- (void)appendJSONRequests:(NSArray *)requests + toBody:(FBSDKGraphRequestBody *)body + andNameAttachments:(NSMutableDictionary *)attachments + logger:(FBSDKLogger *)logger +{ + NSMutableArray *batch = [[NSMutableArray alloc] init]; + NSString *batchToken = nil; + for (FBSDKGraphRequestMetadata *metadata in requests) { + NSString *individualToken = [self accessTokenWithRequest:metadata.request]; + BOOL isClientToken = [FBSDKSettings clientToken] && [individualToken hasSuffix:[FBSDKSettings clientToken]]; + if (!batchToken && + !isClientToken) { + batchToken = individualToken; + } + [self addRequest:metadata + toBatch:batch + attachments:attachments + batchToken:[batchToken isEqualToString:individualToken] ? nil : individualToken]; + } + + NSString *jsonBatch = [FBSDKInternalUtility JSONStringForObject:batch error:NULL invalidObjectHandler:NULL]; + + [body appendWithKey:kBatchKey formValue:jsonBatch logger:logger]; + if (batchToken) { + [body appendWithKey:kAccessTokenKey formValue:batchToken logger:logger]; + } +} + +- (BOOL)_shouldWarnOnMissingFieldsParam:(FBSDKGraphRequest *)request +{ + NSString *minVersion = @"2.4"; + NSString *version = request.version; + if (!version) { + return YES; + } + if ([version hasPrefix:@"v"]) { + version = [version substringFromIndex:1]; + } + + NSComparisonResult result = [version compare:minVersion options:NSNumericSearch]; + + // if current version is the same as minVersion, or if the current version is > minVersion + return (result == NSOrderedSame) || (result == NSOrderedDescending); +} + +// Validate that all GET requests after v2.4 have a "fields" param +- (void)_validateFieldsParamForGetRequests:(NSArray *)requests +{ + for (FBSDKGraphRequestMetadata *metadata in requests) { + FBSDKGraphRequest *request = metadata.request; + if ([request.HTTPMethod.uppercaseString isEqualToString:@"GET"] && + [self _shouldWarnOnMissingFieldsParam:request] && + !request.parameters[@"fields"] && + [request.graphPath rangeOfString:@"fields="].location == NSNotFound) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"starting with Graph API v2.4, GET requests for /%@ should contain an explicit \"fields\" parameter", request.graphPath]; + } + } +} + +// +// Generates a NSURLRequest based on the contents of self.requests, and sets +// options on the request. Chooses between URL-based request for a single +// request and JSON-based request for batches. +// +- (NSMutableURLRequest *)requestWithBatch:(NSArray *)requests + timeout:(NSTimeInterval)timeout +{ + FBSDKGraphRequestBody *body = [[FBSDKGraphRequestBody alloc] init]; + FBSDKLogger *bodyLogger = [[FBSDKLogger alloc] initWithLoggingBehavior:_logger.loggingBehavior]; + FBSDKLogger *attachmentLogger = [[FBSDKLogger alloc] initWithLoggingBehavior:_logger.loggingBehavior]; + + NSMutableURLRequest *request; + + if (requests.count == 0) { + [[NSException exceptionWithName:NSInvalidArgumentException + reason:@"FBSDKGraphRequestConnection: Must have at least one request or urlRequest not specified." + userInfo:nil] + raise]; + + } + + [self _validateFieldsParamForGetRequests:requests]; + + if (requests.count == 1) { + FBSDKGraphRequestMetadata *metadata = requests[0]; + NSURL *url = [NSURL URLWithString:[self urlStringForSingleRequest:metadata.request forBatch:NO]]; + request = [NSMutableURLRequest requestWithURL:url + cachePolicy:NSURLRequestUseProtocolCachePolicy + timeoutInterval:timeout]; + + // HTTP methods are case-sensitive; be helpful in case someone provided a mixed case one. + NSString *httpMethod = metadata.request.HTTPMethod.uppercaseString; + request.HTTPMethod = httpMethod; + [self appendAttachments:metadata.request.parameters + toBody:body + addFormData:[httpMethod isEqualToString:@"POST"] + logger:attachmentLogger]; + } else { + // Find the session with an app ID and use that as the batch_app_id. If we can't + // find one, try to load it from the plist. As a last resort, pass 0. + NSString *batchAppID = [FBSDKSettings appID]; + if (!batchAppID || batchAppID.length == 0) { + // The Graph API batch method requires either an access token or batch_app_id. + // If we can't determine an App ID to use for the batch, we can't issue it. + [[NSException exceptionWithName:NSInternalInconsistencyException + reason:@"FBSDKGraphRequestConnection: [FBSDKSettings appID] must be specified for batch requests" + userInfo:nil] + raise]; + } + + [body appendWithKey:@"batch_app_id" formValue:batchAppID logger:bodyLogger]; + + NSMutableDictionary *attachments = [[NSMutableDictionary alloc] init]; + + [self appendJSONRequests:requests + toBody:body + andNameAttachments:attachments + logger:bodyLogger]; + + [self appendAttachments:attachments + toBody:body + addFormData:NO + logger:attachmentLogger]; + + NSURL *url = [FBSDKInternalUtility facebookURLWithHostPrefix:kGraphURLPrefix path:nil queryParameters:nil defaultVersion:_overrideVersionPart error:NULL]; + request = [NSMutableURLRequest requestWithURL:url + cachePolicy:NSURLRequestUseProtocolCachePolicy + timeoutInterval:timeout]; + request.HTTPMethod = @"POST"; + } + + request.HTTPBody = body.data; + NSUInteger bodyLength = body.data.length / 1024; + + [request setValue:[FBSDKGraphRequestConnection userAgent] forHTTPHeaderField:@"User-Agent"]; + [request setValue:[body mimeContentType] forHTTPHeaderField:@"Content-Type"]; + [request setHTTPShouldHandleCookies:NO]; + + [self logRequest:request bodyLength:bodyLength bodyLogger:bodyLogger attachmentLogger:attachmentLogger]; + + return request; +} + +// +// Generates a URL for a batch containing only a single request, +// and names all attachments that need to go in the body of the +// request. +// +// The URL contains all parameters that are not body attachments, +// including the session key if present. +// +// Attachments are named and referenced by name in the URL. +// +- (NSString *)urlStringForSingleRequest:(FBSDKGraphRequest *)request forBatch:(BOOL)forBatch +{ + request.parameters[@"format"] = @"json"; + request.parameters[@"sdk"] = kSDK; + request.parameters[@"include_headers"] = @"false"; + + NSString *baseURL; + if (forBatch) { + baseURL = request.graphPath; + } else { + NSString *token = [self accessTokenWithRequest:request]; + if (token) { + [request.parameters setValue:token forKey:kAccessTokenKey]; + [self registerTokenToOmitFromLog:token]; + } + + NSString *prefix = kGraphURLPrefix; + // We special case a graph post to /videos and send it to graph-video.facebook.com + // We only do this for non batch post requests + NSString *graphPath = request.graphPath.lowercaseString; + if ([request.HTTPMethod.uppercaseString isEqualToString:@"POST"] && + [graphPath hasSuffix:@"/videos"]) { + graphPath = [graphPath stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; + NSArray *components = [graphPath componentsSeparatedByString:@"/"]; + if (components.count == 2) { + prefix = kGraphVideoURLPrefix; + } + } + + baseURL = [FBSDKInternalUtility facebookURLWithHostPrefix:prefix path:request.graphPath queryParameters:nil defaultVersion:request.version error:NULL].absoluteString; + } + + NSString *url = [FBSDKGraphRequest serializeURL:baseURL + params:request.parameters + httpMethod:request.HTTPMethod + forBatch:forBatch]; + return url; +} + +#pragma mark - Private methods (response parsing) + +- (void)completeFBSDKURLSessionWithResponse:(NSURLResponse *)response + data:(NSData *)data + networkError:(NSError *)error +{ + if (self.state != kStateCancelled) { + NSAssert(self.state == kStateStarted, + @"Unexpected state %lu in completeWithResponse", + (unsigned long)self.state); + self.state = kStateCompleted; + } + + NSArray *results = nil; + _URLResponse = (NSHTTPURLResponse *)response; + if (response) { + NSAssert([response isKindOfClass:[NSHTTPURLResponse class]], + @"Expected NSHTTPURLResponse, got %@", + response); + + NSInteger statusCode = _URLResponse.statusCode; + + if (!error && [response.MIMEType hasPrefix:@"image"]) { + error = [NSError fbErrorWithCode:FBSDKErrorGraphRequestNonTextMimeTypeReturned + message:@"Response is a non-text MIME type; endpoints that return images and other " + @"binary data should be fetched using NSURLRequest and NSURLSession"]; + } else { + results = [self parseJSONResponse:data + error:&error + statusCode:statusCode]; + } + } else if (!error) { + error = [NSError fbErrorWithCode:FBSDKErrorUnknown + message:@"Missing NSURLResponse"]; + } + + if (!error) { + if (self.requests.count != results.count) { + error = [NSError fbErrorWithCode:FBSDKErrorGraphRequestProtocolMismatch + message:@"Unexpected number of results returned from server."]; + } else { + [_logger appendFormat:@"Response <#%lu>\nDuration: %llu msec\nSize: %lu kB\nResponse Body:\n%@\n\n", + (unsigned long)_logger.loggerSerialNumber, + [FBSDKInternalUtility currentTimeInMilliseconds] - _requestStartTime, + (unsigned long)data.length, + results]; + } + } + + if (error) { + [_logger appendFormat:@"Response <#%lu> :\n%@\n%@\n", + (unsigned long)_logger.loggerSerialNumber, + error.localizedDescription, + error.userInfo]; + } + [_logger emitToNSLog]; + + [self completeWithResults:results networkError:error]; + + [self cleanUpSession]; +} + +// +// If there is one request, the JSON is the response. +// If there are multiple requests, the JSON has an array of dictionaries whose +// body property is the response. +// [{ "code":200, +// "body":"JSON-response-as-a-string" }, +// { "code":200, +// "body":"JSON-response-as-a-string" }] +// +// In both cases, this function returns an NSArray containing the results. +// The NSArray looks just like the multiple request case except the body +// value is converted from a string to parsed JSON. +// +- (NSArray *)parseJSONResponse:(NSData *)data + error:(NSError **)error + statusCode:(NSInteger)statusCode; +{ + // Graph API can return "true" or "false", which is not valid JSON. + // Translate that before asking JSON parser to look at it. + NSString *responseUTF8 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSMutableArray *results = [[NSMutableArray alloc] init];; + id response = [self parseJSONOrOtherwise:responseUTF8 error:error]; + + if (responseUTF8 == nil) { + NSString *base64Data = data.length != 0 ? [data base64EncodedStringWithOptions:0] : @""; + if (base64Data != nil) { + [FBSDKAppEvents logImplicitEvent:@"fb_response_invalid_utf8" + valueToSum:nil + parameters:nil + accessToken:nil]; + } + } + + NSDictionary *responseError = nil; + if (!response) { + if ((error != NULL) && (*error == nil)) { + *error = [self errorWithCode:FBSDKErrorUnknown + statusCode:statusCode + parsedJSONResponse:nil + innerError:nil + message:@"The server returned an unexpected response."]; + } + } else if (self.requests.count == 1) { + // response is the entry, so put it in a dictionary under "body" and add + // that to array of responses. + [results addObject:@{ + @"code":@(statusCode), + @"body":response + }]; + } else if ([response isKindOfClass:[NSArray class]]) { + // response is the array of responses, but the body element of each needs + // to be decoded from JSON. + for (id item in response) { + // Don't let errors parsing one response stop us from parsing another. + NSError *batchResultError = nil; + if (![item isKindOfClass:[NSDictionary class]]) { + [results addObject:item]; + } else { + NSMutableDictionary *result = [((NSDictionary *)item) mutableCopy]; + if (result[@"body"]) { + result[@"body"] = [self parseJSONOrOtherwise:result[@"body"] error:&batchResultError]; + } + [results addObject:result]; + } + if (batchResultError) { + // We'll report back the last error we saw. + *error = batchResultError; + } + } + } else if ([response isKindOfClass:[NSDictionary class]] && + (responseError = [FBSDKTypeUtility dictionaryValue:response[@"error"]]) != nil && + [responseError[@"type"] isEqualToString:@"OAuthException"]) { + // if there was one request then return the only result. if there were multiple requests + // but only one error then the server rejected the batch access token + NSDictionary *result = @{ + @"code":@(statusCode), + @"body":response + }; + + for (NSUInteger resultIndex = 0, resultCount = self.requests.count; resultIndex < resultCount; ++resultIndex) { + [results addObject:result]; + } + } else if (error != NULL) { + *error = [self errorWithCode:FBSDKErrorGraphRequestProtocolMismatch + statusCode:statusCode + parsedJSONResponse:results + innerError:nil + message:nil]; + } + + return results; +} + +- (id)parseJSONOrOtherwise:(NSString *)utf8 + error:(NSError **)error +{ + id parsed = nil; + if (!(*error) && [utf8 isKindOfClass:[NSString class]]) { + parsed = [FBSDKInternalUtility objectForJSONString:utf8 error:error]; + // if we fail parse we attempt a re-parse of a modified input to support results in the form "foo=bar", "true", etc. + // which is shouldn't be necessary since Graph API v2.1. + if (*error) { + // we round-trip our hand-wired response through the parser in order to remain + // consistent with the rest of the output of this function (note, if perf turns out + // to be a problem -- unlikely -- we can return the following dictionary outright) + NSDictionary *original = @{ FBSDKNonJSONResponseProperty : utf8 }; + NSString *jsonrep = [FBSDKInternalUtility JSONStringForObject:original error:NULL invalidObjectHandler:NULL]; + NSError *reparseError = nil; + parsed = [FBSDKInternalUtility objectForJSONString:jsonrep error:&reparseError]; + if (!reparseError) { + *error = nil; + } + } + } + return parsed; +} + +- (void)completeWithResults:(NSArray *)results + networkError:(NSError *)networkError +{ + NSUInteger count = self.requests.count; + _expectingResults = count; + NSUInteger disabledRecoveryCount = 0; + for (FBSDKGraphRequestMetadata *metadata in self.requests) { + if (metadata.request.graphErrorRecoveryDisabled) { + disabledRecoveryCount++; + } + } +#if !TARGET_OS_TV + BOOL isSingleRequestToRecover = (count - disabledRecoveryCount == 1); +#endif + + [self.requests enumerateObjectsUsingBlock:^(FBSDKGraphRequestMetadata *metadata, NSUInteger i, BOOL *stop) { + id result = networkError ? nil : results[i]; + NSError *resultError = networkError ?: [self errorFromResult:result request:metadata.request]; + + id body = nil; + if (!resultError && [result isKindOfClass:[NSDictionary class]]) { + NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; + body = [FBSDKTypeUtility dictionaryValue:resultDictionary[@"body"]]; + } + +#if !TARGET_OS_TV + if (resultError && !metadata.request.graphErrorRecoveryDisabled && isSingleRequestToRecover) { + self->_recoveringRequestMetadata = metadata; + self->_errorRecoveryProcessor = [[FBSDKGraphErrorRecoveryProcessor alloc] init]; + if ([self->_errorRecoveryProcessor processError:resultError request:metadata.request delegate:self]) { + return; + } + } +#endif + + [self processResultBody:body error:resultError metadata:metadata canNotifyDelegate:networkError == nil]; + }]; + + if (networkError) { + if ([_delegate respondsToSelector:@selector(requestConnection:didFailWithError:)]) { + [_delegate requestConnection:self didFailWithError:networkError]; + } + } +} + +- (void)processResultBody:(NSDictionary *)body error:(NSError *)error metadata:(FBSDKGraphRequestMetadata *)metadata canNotifyDelegate:(BOOL)canNotifyDelegate +{ + void (^finishAndInvokeCompletionHandler)(void) = ^{ + NSDictionary *graphDebugDict = body[@"__debug__"]; + if ([graphDebugDict isKindOfClass:[NSDictionary class]]) { + [self processResultDebugDictionary: graphDebugDict]; + } + [metadata invokeCompletionHandlerForConnection:self withResults:body error:error]; + + if (--self->_expectingResults == 0) { + if (canNotifyDelegate && [self->_delegate respondsToSelector:@selector(requestConnectionDidFinishLoading:)]) { + [self->_delegate requestConnectionDidFinishLoading:self]; + } + } + }; + +#if !TARGET_OS_TV + void (^clearToken)(NSInteger) = ^(NSInteger errorSubcode){ + if (metadata.request.flags & FBSDKGraphRequestFlagDoNotInvalidateTokenOnError) { + return; + } + if (errorSubcode == 493) { + [FBSDKAccessToken setCurrentAccessToken:_CreateExpiredAccessToken([FBSDKAccessToken currentAccessToken])]; + } else { + [FBSDKAccessToken setCurrentAccessToken:nil]; + } + + }; + + FBSDKSystemAccountStoreAdapter *adapter = [FBSDKSystemAccountStoreAdapter sharedInstance]; + NSString *metadataTokenString = metadata.request.tokenString; + NSString *currentTokenString = [FBSDKAccessToken currentAccessToken].tokenString; + NSString *accountStoreTokenString = adapter.accessTokenString; + BOOL isAccountStoreLogin = [metadataTokenString isEqualToString:accountStoreTokenString]; + + if ([metadataTokenString isEqualToString:currentTokenString] || isAccountStoreLogin) { + NSInteger errorCode = [error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] integerValue]; + NSInteger errorSubcode = [error.userInfo[FBSDKGraphRequestErrorGraphErrorSubcodeKey] integerValue]; + if (errorCode == 190 || errorCode == 102) { + if (isAccountStoreLogin) { + if (errorSubcode == 460) { + // For iOS6, when the password is changed on the server, the system account store + // will continue to issue the old token until the user has changed the + // password AND _THEN_ a renew call is made. To prevent opening + // with an old token which would immediately be closed, we tell our adapter + // that we want to force a blocking renew until success. + adapter.forceBlockingRenew = YES; + } else { + [adapter renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *renewError) { + NSOperationQueue *queue = self->_delegateQueue ?: [NSOperationQueue mainQueue]; + [queue addOperationWithBlock:^{ + clearToken(errorSubcode); + finishAndInvokeCompletionHandler(); + }]; + }]; + return; + } + } + clearToken(errorSubcode); + } else if (errorCode >= 200 && errorCode < 300) { + // permission error + [adapter renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *renewError) { + NSOperationQueue *queue = self->_delegateQueue ?: [NSOperationQueue mainQueue]; + [queue addOperationWithBlock:finishAndInvokeCompletionHandler]; + }]; + return; + } + } +#endif + // this is already on the queue since we are currently in the NSURLSession callback. + finishAndInvokeCompletionHandler(); +} + +- (void)processResultDebugDictionary:(NSDictionary *)dict +{ + NSArray *messages = [FBSDKTypeUtility arrayValue:dict[@"messages"]]; + if (!messages.count) { + return; + } + + [messages enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + NSDictionary *messageDict = [FBSDKTypeUtility dictionaryValue:obj]; + NSString *message = [FBSDKTypeUtility stringValue:messageDict[@"message"]]; + NSString *type = [FBSDKTypeUtility stringValue:messageDict[@"type"]]; + NSString *link = [FBSDKTypeUtility stringValue:messageDict[@"link"]]; + if (!message || !type) { + return; + } + + NSString *loggingBehavior = FBSDKLoggingBehaviorGraphAPIDebugInfo; + if ([type isEqualToString:@"warning"]) { + loggingBehavior = FBSDKLoggingBehaviorGraphAPIDebugWarning; + } + if (link) { + message = [message stringByAppendingFormat:@" Link: %@", link]; + } + + [FBSDKLogger singleShotLogEntry:loggingBehavior logEntry:message]; + }]; + +} + +- (NSError *)errorFromResult:(id)result request:(FBSDKGraphRequest *)request +{ + if ([result isKindOfClass:[NSDictionary class]]) { + NSDictionary *errorDictionary = [FBSDKTypeUtility dictionaryValue:result[@"body"]][@"error"]; + + if ([errorDictionary isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"code"] forKey:FBSDKGraphRequestErrorGraphErrorCodeKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_subcode"] forKey:FBSDKGraphRequestErrorGraphErrorSubcodeKey]; + //"message" is preferred over error_msg or error_reason. + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_msg"] forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_reason"] forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"message"] forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_user_title"] forKey:FBSDKErrorLocalizedTitleKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_user_msg"] forKey:FBSDKErrorLocalizedDescriptionKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_user_msg"] forKey:NSLocalizedDescriptionKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:result[@"code"] forKey:FBSDKGraphRequestErrorHTTPStatusCodeKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:result forKey:FBSDKGraphRequestErrorParsedJSONResponseKey]; + + FBSDKErrorRecoveryConfiguration *recoveryConfiguration = [g_errorConfiguration + recoveryConfigurationForCode:[userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] stringValue] + subcode:[userInfo[FBSDKGraphRequestErrorGraphErrorSubcodeKey] stringValue] + request:request]; + if ([errorDictionary[@"is_transient"] boolValue]) { + userInfo[FBSDKGraphRequestErrorKey] = @(FBSDKGraphRequestErrorTransient); + } else { + [FBSDKInternalUtility dictionary:userInfo setObject:@(recoveryConfiguration.errorCategory) forKey:FBSDKGraphRequestErrorKey]; + } + [FBSDKInternalUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryDescription forKey:NSLocalizedRecoverySuggestionErrorKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryOptionDescriptions forKey:NSLocalizedRecoveryOptionsErrorKey]; + FBSDKErrorRecoveryAttempter *attempter = [FBSDKErrorRecoveryAttempter recoveryAttempterFromConfiguration:recoveryConfiguration]; + [FBSDKInternalUtility dictionary:userInfo setObject:attempter forKey:NSRecoveryAttempterErrorKey]; + + return [NSError fbErrorWithCode:FBSDKErrorGraphRequestGraphAPI + userInfo:userInfo + message:nil + underlyingError:nil]; + } + } + + return nil; +} + +- (NSError *)errorWithCode:(FBSDKError)code + statusCode:(NSInteger)statusCode + parsedJSONResponse:(id)response + innerError:(NSError *)innerError + message:(NSString *)message { + NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; + userInfo[FBSDKGraphRequestErrorHTTPStatusCodeKey] = @(statusCode); + + if (response) { + userInfo[FBSDKGraphRequestErrorParsedJSONResponseKey] = response; + } + + if (innerError) { + userInfo[FBSDKGraphRequestErrorParsedJSONResponseKey] = innerError; + } + + if (message) { + userInfo[FBSDKErrorDeveloperMessageKey] = message; + } + + NSError *error = [[NSError alloc] + initWithDomain:FBSDKErrorDomain + code:code + userInfo:userInfo]; + + return error; +} + +#pragma mark - Private methods (miscellaneous) + +- (void)logRequest:(NSMutableURLRequest *)request + bodyLength:(NSUInteger)bodyLength + bodyLogger:(FBSDKLogger *)bodyLogger + attachmentLogger:(FBSDKLogger *)attachmentLogger +{ + if (_logger.isActive) { + [_logger appendFormat:@"Request <#%lu>:\n", (unsigned long)_logger.loggerSerialNumber]; + [_logger appendKey:@"URL" value:request.URL.absoluteString]; + [_logger appendKey:@"Method" value:request.HTTPMethod]; + [_logger appendKey:@"UserAgent" value:[request valueForHTTPHeaderField:@"User-Agent"]]; + [_logger appendKey:@"MIME" value:[request valueForHTTPHeaderField:@"Content-Type"]]; + + if (bodyLength != 0) { + [_logger appendKey:@"Body Size" value:[NSString stringWithFormat:@"%lu kB", (unsigned long)bodyLength / 1024]]; + } + + if (bodyLogger != nil) { + [_logger appendKey:@"Body (w/o attachments)" value:bodyLogger.contents]; + } + + if (attachmentLogger != nil) { + [_logger appendKey:@"Attachments" value:attachmentLogger.contents]; + } + + [_logger appendString:@"\n"]; + + [_logger emitToNSLog]; + } +} + +- (NSString *)accessTokenWithRequest:(FBSDKGraphRequest *)request +{ + NSString *token = request.tokenString ?: request.parameters[kAccessTokenKey]; + if (!token && !(request.flags & FBSDKGraphRequestFlagSkipClientToken) && [FBSDKSettings clientToken].length > 0) { + return [NSString stringWithFormat:@"%@|%@", [FBSDKSettings appID], [FBSDKSettings clientToken]]; + } + return token; +} + +- (void)registerTokenToOmitFromLog:(NSString *)token +{ + if (![FBSDKSettings.loggingBehaviors containsObject:FBSDKLoggingBehaviorAccessTokens]) { + [FBSDKLogger registerStringToReplace:token replaceWith:@"ACCESS_TOKEN_REMOVED"]; + } +} + ++ (NSString *)userAgent +{ + static NSString *agent = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + agent = [NSString stringWithFormat:@"%@.%@", kUserAgentBase, FBSDK_VERSION_STRING]; + }); + + if ([FBSDKSettings userAgentSuffix]) { + return [NSString stringWithFormat:@"%@/%@", agent, [FBSDKSettings userAgentSuffix]]; + } + return agent; +} + +- (NSURLSession *)defaultSession +{ + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; + return [NSURLSession sessionWithConfiguration:config + delegate:self + delegateQueue:_delegateQueue]; +} + +- (void)cleanUpSession +{ + [self.session invalidateAndCancel]; + self.session = nil; +} + +#pragma mark - NSURLSessionDataDelegate + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + id delegate = self.delegate; + + if ([delegate respondsToSelector:@selector(requestConnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:)]) { + [delegate requestConnection:self + didSendBodyData:(NSUInteger)bytesSent + totalBytesWritten:(NSUInteger)totalBytesSent + totalBytesExpectedToWrite:(NSUInteger)totalBytesExpectedToSend]; + } +} + +#pragma mark - FBSDKGraphErrorRecoveryProcessorDelegate + +#if !TARGET_OS_TV +- (void)processorDidAttemptRecovery:(FBSDKGraphErrorRecoveryProcessor *)processor didRecover:(BOOL)didRecover error:(NSError *)error +{ + if (didRecover) { + FBSDKGraphRequest *originalRequest = _recoveringRequestMetadata.request; + FBSDKGraphRequest *retryRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:originalRequest.graphPath + parameters:originalRequest.parameters + tokenString:[FBSDKAccessToken currentAccessToken].tokenString + version:originalRequest.version + HTTPMethod:originalRequest.HTTPMethod]; + // prevent further attempts at recovery (i.e., additional retries). + [retryRequest setGraphErrorRecoveryDisabled:YES]; + FBSDKGraphRequestMetadata *retryMetadata = [[FBSDKGraphRequestMetadata alloc] initWithRequest:retryRequest completionHandler:_recoveringRequestMetadata.completionHandler batchParameters:_recoveringRequestMetadata.batchParameters]; + [retryRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *retriedError) { + [self processResultBody:result error:retriedError metadata:retryMetadata canNotifyDelegate:YES]; + self->_errorRecoveryProcessor = nil; + self->_recoveringRequestMetadata = nil; + }]; + } else { + [self processResultBody:nil error:error metadata:_recoveringRequestMetadata canNotifyDelegate:YES]; + _errorRecoveryProcessor = nil; + _recoveringRequestMetadata = nil; + } +} +#endif + +#pragma mark - Debugging helpers + +- (NSString *)description +{ + NSMutableString *result = [NSMutableString stringWithFormat:@"<%@: %p, %lu request(s): (\n", + NSStringFromClass([self class]), + self, + (unsigned long)self.requests.count]; + BOOL comma = NO; + for (FBSDKGraphRequestMetadata *metadata in self.requests) { + FBSDKGraphRequest *request = metadata.request; + if (comma) { + [result appendString:@",\n"]; + } + [result appendString:request.description]; + comma = YES; + } + [result appendString:@"\n)>"]; + return result; + +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h new file mode 100644 index 0000000000..7ad50dc42f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h @@ -0,0 +1,55 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 container class for data attachments so that additional metadata can be provided about the attachment. + */ +@interface FBSDKGraphRequestDataAttachment : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + Initializes the receiver with the attachment data and metadata. + @param data The attachment data (retained, not copied) + @param filename The filename for the attachment + @param contentType The content type for the attachment + */ +- (instancetype)initWithData:(NSData *)data + filename:(NSString *)filename + contentType:(NSString *)contentType +NS_DESIGNATED_INITIALIZER; + +/** + The content type for the attachment. + */ +@property (nonatomic, copy, readonly) NSString *contentType; + +/** + The attachment data. + */ +@property (nonatomic, strong, readonly) NSData *data; + +/** + The filename for the attachment. + */ +@property (nonatomic, copy, readonly) NSString *filename; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m new file mode 100644 index 0000000000..9a6161109f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m @@ -0,0 +1,33 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGraphRequestDataAttachment.h" + +@implementation FBSDKGraphRequestDataAttachment + +- (instancetype)initWithData:(NSData *)data filename:(NSString *)filename contentType:(NSString *)contentType +{ + if ((self = [super init])) { + _data = data; + _filename = [filename copy]; + _contentType = [contentType copy]; + } + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h new file mode 100644 index 0000000000..d749579352 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h @@ -0,0 +1,19 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h new file mode 100644 index 0000000000..3798330988 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h @@ -0,0 +1,69 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +/*! The name of the notification posted by FBSDKMeasurementEvent */ +FOUNDATION_EXPORT NSNotificationName const FBSDKMeasurementEventNotification; + +#else + +/*! The name of the notification posted by FBSDKMeasurementEvent */ +FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventNotification; + +#endif + +FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventNotificationName +DEPRECATED_MSG_ATTRIBUTE("Use `FBSDKMeasurementEventNotification` instead"); + +/*! Defines keys in the userInfo object for the notification named FBSDKMeasurementEventNotificationName */ +/*! The string field for the name of the event */ +FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventNameKey; +/*! The dictionary field for the arguments of the event */ +FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventArgsKey; + +/*! Events raised by FBSDKMeasurementEvent for Applink */ +/*! + The name of the event posted when [FBSDKURL URLWithURL:] is called successfully. This represents the successful parsing of an app link URL. + */ +FOUNDATION_EXPORT NSString *const FBSDKAppLinkParseEventName; + +/*! + The name of the event posted when [FBSDKURL URLWithInboundURL:] is called successfully. + This represents parsing an inbound app link URL from a different application + */ +FOUNDATION_EXPORT NSString *const FBSDKAppLinkNavigateInEventName; + +/*! The event raised when the user navigates from your app to other apps */ +FOUNDATION_EXPORT NSString *const FBSDKAppLinkNavigateOutEventName; + +/*! + The event raised when the user navigates out from your app and back to the referrer app. + e.g when the user leaves your app after tapping the back-to-referrer navigation bar + */ +FOUNDATION_EXPORT NSString *const FBSDKAppLinkNavigateBackToReferrerEventName; + +@interface FBSDKMeasurementEvent : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m new file mode 100644 index 0000000000..ef96d3ec56 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m @@ -0,0 +1,78 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKMeasurementEvent_Internal.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSNotificationName const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; + +#else + +NSString *const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; + +#endif + +NSString *const FBSDKMeasurementEventNotificationName = @"com.facebook.facebook-objc-sdk.measurement_event"; + +NSString *const FBSDKMeasurementEventNameKey = @"event_name"; +NSString *const FBSDKMeasurementEventArgsKey = @"event_args"; + +/* app Link Event raised by this FBSDKURL */ +NSString *const FBSDKAppLinkParseEventName = @"al_link_parse"; +NSString *const FBSDKAppLinkNavigateInEventName = @"al_nav_in"; + +/*! AppLink events raised in this class */ +NSString *const FBSDKAppLinkNavigateOutEventName = @"al_nav_out"; +NSString *const FBSDKAppLinkNavigateBackToReferrerEventName = @"al_ref_back_out"; + +@implementation FBSDKMeasurementEvent { + NSString *_name; + NSDictionary *_args; +} + +- (void)postNotification { + if (!_name) { + NSLog(@"Warning: Missing event name when logging FBSDK measurement event. \n" + " Ignoring this event in logging."); + return; + } + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + NSDictionary *userInfo = @{FBSDKMeasurementEventNameKey : _name, + FBSDKMeasurementEventArgsKey : _args}; + + [center postNotificationName:FBSDKMeasurementEventNotification + object:self + userInfo:userInfo]; +} + +- (instancetype)initEventWithName:(NSString *)name + args:(NSDictionary *)args { + if ((self = [super init])) { + _name = name; + _args = args ? args : @{}; + } + return self; +} + ++ (void)postNotificationForEventName:(NSString *)name + args:(NSDictionary *)args { + [[[self alloc] initEventWithName:name args:args] postNotification]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h new file mode 100644 index 0000000000..3fada941d2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h @@ -0,0 +1,36 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + Extension protocol for NSMutableCopying that adds the mutableCopy method, which is implemented on NSObject. + + NSObject implicitly conforms to this protocol. + */ +@protocol FBSDKMutableCopying + +/** + Implemented by NSObject as a convenience to mutableCopyWithZone:. + @return A mutable copy of the receiver. + */ +- (id)mutableCopy; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h new file mode 100644 index 0000000000..d0e245bb47 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h @@ -0,0 +1,183 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKProfilePictureView.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +/** + Notification indicating that the `currentProfile` has changed. + + the userInfo dictionary of the notification will contain keys + `FBSDKProfileChangeOldKey` and + `FBSDKProfileChangeNewKey`. + */ +FOUNDATION_EXPORT NSNotificationName const FBSDKProfileDidChangeNotification; + +#else + +/** + Notification indicating that the `currentProfile` has changed. + + the userInfo dictionary of the notification will contain keys + `FBSDKProfileChangeOldKey` and + `FBSDKProfileChangeNewKey`. + */ +FOUNDATION_EXPORT NSString *const FBSDKProfileDidChangeNotification; + +#endif + +/* key in notification's userInfo object for getting the old profile. + + If there was no old profile, the key will not be present. + */ +FOUNDATION_EXPORT NSString *const FBSDKProfileChangeOldKey; + +/* key in notification's userInfo object for getting the new profile. + + If there is no new profile, the key will not be present. + */ +FOUNDATION_EXPORT NSString *const FBSDKProfileChangeNewKey; + +/** + Represents an immutable Facebook profile + + This class provides a global "currentProfile" instance to more easily + add social context to your application. When the profile changes, a notification is + posted so that you can update relevant parts of your UI and is persisted to NSUserDefaults. + + Typically, you will want to call `enableUpdatesOnAccessTokenChange:YES` so that + it automatically observes changes to the `[FBSDKAccessToken currentAccessToken]`. + + You can use this class to build your own `FBSDKProfilePictureView` or in place of typical requests to "/me". + */ +@interface FBSDKProfile : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + initializes a new instance. + @param userID the user ID + @param firstName the user's first name + @param middleName the user's middle name + @param lastName the user's last name + @param name the user's complete name + @param linkURL the link for this profile + @param refreshDate the optional date this profile was fetched. Defaults to [NSDate date]. + */ +- (instancetype)initWithUserID:(NSString *)userID + firstName:(NSString *)firstName + middleName:(NSString *)middleName + lastName:(NSString *)lastName + name:(NSString *)name + linkURL:(NSURL *)linkURL + refreshDate:(NSDate *)refreshDate NS_DESIGNATED_INITIALIZER; +/** + The user id + */ +@property (nonatomic, copy, readonly) NSString *userID; +/** + The user's first name + */ +@property (nonatomic, copy, readonly) NSString *firstName; +/** + The user's middle name + */ +@property (nonatomic, copy, readonly) NSString *middleName; +/** + The user's last name + */ +@property (nonatomic, copy, readonly) NSString *lastName; +/** + The user's complete name + */ +@property (nonatomic, copy, readonly) NSString *name; +/** + A URL to the user's profile. + + Consider using Bolts and `FBSDKAppLinkResolver` to resolve this + to an app link to link directly to the user's profile in the Facebook app. + */ +@property (nonatomic, readonly) NSURL *linkURL; + +/** + The last time the profile data was fetched. + */ +@property (nonatomic, readonly) NSDate *refreshDate; + +/** + Gets the current FBSDKProfile instance. + */ ++ (FBSDKProfile *)currentProfile; + +/** + Sets the current instance and posts the appropriate notification if the profile parameter is different + than the receiver. + @param profile the profile to set + + This persists the profile to NSUserDefaults. + */ ++ (void)setCurrentProfile:(FBSDKProfile *)profile; + +/** + Indicates if `currentProfile` will automatically observe `FBSDKAccessTokenDidChangeNotification` notifications + @param enable YES is observing + + If observing, this class will issue a graph request for public profile data when the current token's userID + differs from the current profile. You can observe `FBSDKProfileDidChangeNotification` for when the profile is updated. + + Note that if `[FBSDKAccessToken currentAccessToken]` is unset, the `currentProfile` instance remains. It's also possible + for `currentProfile` to return nil until the data is fetched. + */ ++ (void)enableUpdatesOnAccessTokenChange:(BOOL)enable; + +/** + Loads the current profile and passes it to the completion block. + @param completion The block to be executed once the profile is loaded + + If the profile is already loaded, this method will call the completion block synchronously, otherwise it + will begin a graph request to update `currentProfile` and then call the completion block when finished. + */ ++ (void)loadCurrentProfileWithCompletion:(void(^)(FBSDKProfile *profile, NSError *error))completion; + +/** + A convenience method for returning a complete `NSURL` for retrieving the user's profile image. + @param mode The picture mode + @param size The height and width. This will be rounded to integer precision. + */ +- (NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size; + +/** + A convenience method for returning a Graph API path for retrieving the user's profile image. + +@warning use `imageURLForPictureMode:size:` instead + + You can pass this to a `FBSDKGraphRequest` instance to download the image. + @param mode The picture mode + @param size The height and width. This will be rounded to integer precision. + */ +- (NSString *)imagePathForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size +DEPRECATED_MSG_ATTRIBUTE("use imageURLForPictureMode:size: instead"); + +/** + Returns YES if the profile is equivalent to the receiver. + @param profile the profile to compare to. + */ +- (BOOL)isEqualToProfile:(FBSDKProfile *)profile; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m new file mode 100644 index 0000000000..c785d1a314 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m @@ -0,0 +1,295 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKProfile+Internal.h" + +#import "FBSDKCoreKit+Internal.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSNotificationName const FBSDKProfileDidChangeNotification = @"com.facebook.sdk.FBSDKProfile.FBSDKProfileDidChangeNotification";; + +#else + +NSString *const FBSDKProfileDidChangeNotification = @"com.facebook.sdk.FBSDKProfile.FBSDKProfileDidChangeNotification";; + +#endif + +NSString *const FBSDKProfileChangeOldKey = @"FBSDKProfileOld"; +NSString *const FBSDKProfileChangeNewKey = @"FBSDKProfileNew"; +static NSString *const FBSDKProfileUserDefaultsKey = @"com.facebook.sdk.FBSDKProfile.currentProfile"; +static FBSDKProfile *g_currentProfile; + +#define FBSDKPROFILE_USERID_KEY @"userID" +#define FBSDKPROFILE_FIRSTNAME_KEY @"firstName" +#define FBSDKPROFILE_MIDDLENAME_KEY @"middleName" +#define FBSDKPROFILE_LASTNAME_KEY @"lastName" +#define FBSDKPROFILE_NAME_KEY @"name" +#define FBSDKPROFILE_LINKURL_KEY @"linkURL" +#define FBSDKPROFILE_REFRESHDATE_KEY @"refreshDate" + +// Once a day +#define FBSDKPROFILE_STALE_IN_SECONDS (60 * 60 * 24) + +@implementation FBSDKProfile + +- (instancetype)initWithUserID:(NSString *)userID + firstName:(NSString *)firstName + middleName:(NSString *)middleName + lastName:(NSString *)lastName + name:(NSString *)name + linkURL:(NSURL *)linkURL + refreshDate:(NSDate *)refreshDate +{ + if ((self = [super init])) { + _userID = [userID copy]; + _firstName = [firstName copy]; + _middleName = [middleName copy]; + _lastName = [lastName copy]; + _name = [name copy]; + _linkURL = [linkURL copy]; + _refreshDate = [refreshDate copy] ?: [NSDate date]; + } + return self; +} + ++ (FBSDKProfile *)currentProfile +{ + return g_currentProfile; +} + ++ (void)setCurrentProfile:(FBSDKProfile *)profile +{ + if (profile != g_currentProfile && ![profile isEqualToProfile:g_currentProfile]) { + [[self class] cacheProfile:profile]; + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + + [FBSDKInternalUtility dictionary:userInfo setObject:profile forKey:FBSDKProfileChangeNewKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:g_currentProfile forKey:FBSDKProfileChangeOldKey]; + g_currentProfile = profile; + [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKProfileDidChangeNotification + object:[self class] + userInfo:userInfo]; + } +} + +- (NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSString *path = [self imagePathForPictureMode:mode size:size]; +#pragma clang diagnostic pop + return [FBSDKInternalUtility facebookURLWithHostPrefix:@"graph" + path:path + queryParameters:nil + error:NULL]; +} + +- (NSString *)imagePathForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size +{ + NSString *type; + switch (mode) { + case FBSDKProfilePictureModeNormal: type = @"normal"; break; + case FBSDKProfilePictureModeSquare: type = @"square"; break; + } + return [NSString stringWithFormat:@"%@/picture?type=%@&width=%d&height=%d", + _userID, + type, + (int) roundf(size.width), + (int) roundf(size.height)]; +} + ++ (void)enableUpdatesOnAccessTokenChange:(BOOL)enable +{ + if (enable) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(observeChangeAccessTokenChange:) + name:FBSDKAccessTokenDidChangeNotification + object:nil]; + } else { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + } +} + ++ (void)loadCurrentProfileWithCompletion:(void (^)(FBSDKProfile *, NSError *))completion +{ + [self loadProfileWithToken:[FBSDKAccessToken currentAccessToken] completion:completion]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone +{ + //immutable + return self; +} + +#pragma mark - Equality + +- (NSUInteger)hash +{ + NSUInteger subhashes[] = { + self.userID.hash, + self.firstName.hash, + self.middleName.hash, + self.lastName.hash, + self.name.hash, + self.linkURL.hash, + self.refreshDate.hash + }; + return [FBSDKMath hashWithIntegerArray:subhashes count:sizeof(subhashes) / sizeof(subhashes[0])]; +} + +- (BOOL)isEqual:(id)object +{ + if (self == object) { + return YES; + } + if (![object isKindOfClass:[FBSDKProfile class]]){ + return NO; + } + return [self isEqualToProfile:object]; +} + +- (BOOL)isEqualToProfile:(FBSDKProfile *)profile +{ + return ([_userID isEqualToString:profile.userID] && + [_firstName isEqualToString:profile.firstName] && + [_middleName isEqualToString:profile.middleName] && + [_lastName isEqualToString:profile.lastName] && + [_name isEqualToString:profile.name] && + [_linkURL isEqual:profile.linkURL] && + [_refreshDate isEqualToDate:profile.refreshDate]); +} +#pragma mark NSCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder +{ + NSString *userID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_USERID_KEY]; + NSString *firstName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_FIRSTNAME_KEY]; + NSString *middleName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_MIDDLENAME_KEY]; + NSString *lastName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_LASTNAME_KEY]; + NSString *name = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_NAME_KEY]; + NSURL *linkURL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDKPROFILE_LINKURL_KEY]; + NSDate *refreshDate = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDKPROFILE_REFRESHDATE_KEY]; + return [self initWithUserID:userID + firstName:firstName + middleName:middleName + lastName:lastName + name:name + linkURL:linkURL + refreshDate:refreshDate]; +} + +- (void)encodeWithCoder:(NSCoder *)encoder +{ + [encoder encodeObject:self.userID forKey:FBSDKPROFILE_USERID_KEY]; + [encoder encodeObject:self.firstName forKey:FBSDKPROFILE_FIRSTNAME_KEY]; + [encoder encodeObject:self.middleName forKey:FBSDKPROFILE_MIDDLENAME_KEY]; + [encoder encodeObject:self.lastName forKey:FBSDKPROFILE_LASTNAME_KEY]; + [encoder encodeObject:self.name forKey:FBSDKPROFILE_NAME_KEY]; + [encoder encodeObject:self.linkURL forKey:FBSDKPROFILE_LINKURL_KEY]; + [encoder encodeObject:self.refreshDate forKey:FBSDKPROFILE_REFRESHDATE_KEY]; +} + +#pragma mark - Private + ++ (void)loadProfileWithToken:(FBSDKAccessToken *)token completion:(void (^)(FBSDKProfile *, NSError *))completion +{ + static FBSDKGraphRequestConnection *executingRequestConnection = nil; + + BOOL isStale = [[NSDate date] timeIntervalSinceDate:g_currentProfile.refreshDate] > FBSDKPROFILE_STALE_IN_SECONDS; + if (token && + (isStale || ![g_currentProfile.userID isEqualToString:token.userID])) { + FBSDKProfile *expectedCurrentProfile = g_currentProfile; + + NSString *graphPath = @"me?fields=id,first_name,middle_name,last_name,name,link"; + [executingRequestConnection cancel]; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:graphPath + parameters:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + executingRequestConnection = [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (expectedCurrentProfile != g_currentProfile) { + // current profile has already changed since request was started. Let's not overwrite. + if (completion != NULL) { + completion(nil, nil); + } + return; + } + FBSDKProfile *profile = nil; + if (!error) { + profile = [[FBSDKProfile alloc] initWithUserID:result[@"id"] + firstName:result[@"first_name"] + middleName:result[@"middle_name"] + lastName:result[@"last_name"] + name:result[@"name"] + linkURL:[NSURL URLWithString:result[@"link"]] + refreshDate:[NSDate date]]; + } + [[self class] setCurrentProfile:profile]; + if (completion != NULL) { + completion(profile, error); + } + }]; + } else if (completion != NULL) { + completion(g_currentProfile, nil); + } +} + ++ (void)observeChangeAccessTokenChange:(NSNotification *)notification +{ + FBSDKAccessToken *token = notification.userInfo[FBSDKAccessTokenChangeNewKey]; + [self loadProfileWithToken:token completion:NULL]; +} + +@end + +@implementation FBSDKProfile(Internal) + ++ (void)cacheProfile:(FBSDKProfile *) profile +{ + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + if (profile) { + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:profile]; + [userDefaults setObject:data forKey:FBSDKProfileUserDefaultsKey]; + } else { + [userDefaults removeObjectForKey:FBSDKProfileUserDefaultsKey]; + } + [userDefaults synchronize]; +} + ++ (FBSDKProfile *)fetchCachedProfile +{ + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + NSData *data = [userDefaults objectForKey:FBSDKProfileUserDefaultsKey]; + if (data != nil) { + @try { + return [NSKeyedUnarchiver unarchiveObjectWithData:data]; + } @catch (NSException *exception) { + return nil; + } + } + return nil; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h new file mode 100644 index 0000000000..aaf9bcaa78 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h @@ -0,0 +1,60 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + FBSDKProfilePictureMode enum + Defines the aspect ratio mode for the source image of the profile picture. + */ +typedef NS_ENUM(NSUInteger, FBSDKProfilePictureMode) +{ + /** + A square cropped version of the image will be included in the view. + */ + FBSDKProfilePictureModeSquare, + /** + The original picture's aspect ratio will be used for the source image in the view. + */ + FBSDKProfilePictureModeNormal, +}; + +/** + A view to display a profile picture. + */ +@interface FBSDKProfilePictureView : UIView + +/** + The mode for the receiver to determine the aspect ratio of the source image. + */ +@property (nonatomic, assign) FBSDKProfilePictureMode pictureMode; + +/** + The profile ID to show the picture for. + */ +@property (nonatomic, copy) NSString *profileID; + +/** + Explicitly marks the receiver as needing to update the image. + + This method is called whenever any properties that affect the source image are modified, but this can also + be used to trigger a manual update of the image if it needs to be re-downloaded. + */ +- (void)setNeedsImageUpdate; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m new file mode 100644 index 0000000000..36e998e26c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m @@ -0,0 +1,380 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKProfilePictureView.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKMaleSilhouetteIcon.h" +#import "FBSDKMath.h" +#import "FBSDKUtility.h" + +@interface FBSDKProfilePictureViewState : NSObject + +- (instancetype)initWithProfileID:(NSString *)profileID + size:(CGSize)size + scale:(CGFloat)scale + pictureMode:(FBSDKProfilePictureMode)pictureMode + imageShouldFit:(BOOL)imageShouldFit; + +@property (nonatomic, assign, readonly) BOOL imageShouldFit; +@property (nonatomic, assign, readonly) FBSDKProfilePictureMode pictureMode; +@property (nonatomic, copy, readonly) NSString *profileID; +@property (nonatomic, assign, readonly) CGFloat scale; +@property (nonatomic, assign, readonly) CGSize size; + +- (BOOL)isEqualToState:(FBSDKProfilePictureViewState *)other; +- (BOOL)isValidForState:(FBSDKProfilePictureViewState *)other; + +@end + +@implementation FBSDKProfilePictureViewState + +- (instancetype)initWithProfileID:(NSString *)profileID + size:(CGSize)size + scale:(CGFloat)scale + pictureMode:(FBSDKProfilePictureMode)pictureMode + imageShouldFit:(BOOL)imageShouldFit +{ + if ((self = [super init])) { + _profileID = [profileID copy]; + _size = size; + _scale = scale; + _pictureMode = pictureMode; + _imageShouldFit = imageShouldFit; + } + return self; +} + +- (NSUInteger)hash +{ + NSUInteger subhashes[] = { + (NSUInteger)_imageShouldFit, + (NSUInteger)_size.width, + (NSUInteger)_size.height, + (NSUInteger)_scale, + (NSUInteger)_pictureMode, + _profileID.hash, + }; + return [FBSDKMath hashWithIntegerArray:subhashes count:sizeof(subhashes) / sizeof(subhashes[0])]; +} + +- (BOOL)isEqual:(id)object +{ + if (![object isKindOfClass:[FBSDKProfilePictureViewState class]]) { + return NO; + } + FBSDKProfilePictureViewState *other = (FBSDKProfilePictureViewState *)object; + return [self isEqualToState:other]; +} + +- (BOOL)isEqualToState:(FBSDKProfilePictureViewState *)other +{ + return ([self isValidForState:other] && + CGSizeEqualToSize(_size, other->_size) && + (_scale == other->_scale)); +} + +- (BOOL)isValidForState:(FBSDKProfilePictureViewState *)other +{ + return (other != nil && + (_imageShouldFit == other->_imageShouldFit) && + (_pictureMode == other->_pictureMode) && + [FBSDKInternalUtility object:_profileID isEqualToObject:other->_profileID]); +} + +@end + +@implementation FBSDKProfilePictureView +{ + BOOL _hasProfileImage; + UIImageView *_imageView; + FBSDKProfilePictureViewState *_lastState; + BOOL _needsImageUpdate; + BOOL _placeholderImageIsValid; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithFrame:(CGRect)frame +{ + if ((self = [super initWithFrame:frame])) { + [self _configureProfilePictureView]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder +{ + if ((self = [super initWithCoder:decoder])) { + [self _configureProfilePictureView]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Properties + +- (void)setBounds:(CGRect)bounds +{ + dispatch_async(dispatch_get_main_queue(), ^{ + CGRect currentBounds = self.bounds; + if (!CGRectEqualToRect(currentBounds, bounds)) { + super.bounds = bounds; + if (!CGSizeEqualToSize(currentBounds.size, bounds.size)) { + self->_placeholderImageIsValid = NO; + [self setNeedsImageUpdate]; + } + } + }); +} + +- (UIViewContentMode)contentMode +{ + return _imageView.contentMode; +} + +- (void)setContentMode:(UIViewContentMode)contentMode +{ + if (_imageView.contentMode != contentMode) { + _imageView.contentMode = contentMode; + super.contentMode = contentMode; + [self setNeedsImageUpdate]; + } +} + +- (void)setMode:(FBSDKProfilePictureMode)pictureMode +{ + if (_pictureMode != pictureMode) { + _pictureMode = pictureMode; + [self setNeedsImageUpdate]; + } +} + +- (void)setProfileID:(NSString *)profileID +{ + if (![FBSDKInternalUtility object:_profileID isEqualToObject:profileID]) { + _profileID = [profileID copy]; + _placeholderImageIsValid = NO; + [self setNeedsImageUpdate]; + } +} + +#pragma mark - Public Methods + +- (void)setNeedsImageUpdate +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (!self->_imageView || CGRectIsEmpty(self.bounds)) { + // we can't do anything with an empty view, so just bail out until we have a size + return; + } + + // ensure that we have an image. do this here so we can draw the placeholder image synchronously if we don't have one + if (!self->_placeholderImageIsValid && !self->_hasProfileImage) { + [self _setPlaceholderImage]; + } + + // debounce calls to needsImage against the main runloop + if (self->_needsImageUpdate) { + return; + } + self->_needsImageUpdate = YES; + [self _needsImageUpdate]; + }); +} + +#pragma mark - Helper Methods + ++ (void)_downloadImageWithState:(FBSDKProfilePictureViewState *)state + completionBlock:(void(^)(NSData *data))completionBlock; +{ + NSURL *imageURL = [self _imageURLWithState:state]; + if (!imageURL) { + return; + } + + NSURLRequest *request = [[NSURLRequest alloc] initWithURL:imageURL]; + NSURLSession *session = [NSURLSession sharedSession]; + [[session + dataTaskWithRequest:request + completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + if (!error && data.length) { + completionBlock(data); + } + }] resume]; +} + ++ (NSURL *)_imageURLWithState:(FBSDKProfilePictureViewState *)state +{ + FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken]; + if ([state.profileID isEqualToString:@"me"] && !accessToken) { + return nil; + } + NSString *path = [[NSString alloc] initWithFormat:@"/%@/picture", [FBSDKUtility URLEncode:state.profileID]]; + CGSize size = state.size; + NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; + parameters[@"width"] = @(size.width); + parameters[@"height"] = @(size.height); + [FBSDKInternalUtility dictionary:parameters setObject:accessToken.tokenString forKey:@"access_token"]; + return [FBSDKInternalUtility facebookURLWithHostPrefix:@"graph" path:path queryParameters:parameters error:NULL]; +} + +- (void)_accessTokenDidChangeNotification:(NSNotification *)notification +{ + if (![_profileID isEqualToString:@"me"] || !notification.userInfo[FBSDKAccessTokenDidChangeUserIDKey]) { + return; + } + _lastState = nil; + [self setNeedsImageUpdate]; +} + +- (void)_configureProfilePictureView +{ + _imageView = [[UIImageView alloc] initWithFrame:self.bounds]; + _imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); + [self addSubview:_imageView]; + + _profileID = @"me"; + self.backgroundColor = [UIColor whiteColor]; + self.contentMode = UIViewContentModeScaleAspectFit; + self.userInteractionEnabled = NO; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_accessTokenDidChangeNotification:) + name:FBSDKAccessTokenDidChangeNotification + object:nil]; + + [self setNeedsImageUpdate]; +} + +- (BOOL)_imageShouldFit +{ + switch (self.contentMode) { + case UIViewContentModeBottom: + case UIViewContentModeBottomLeft: + case UIViewContentModeBottomRight: + case UIViewContentModeCenter: + case UIViewContentModeLeft: + case UIViewContentModeRedraw: + case UIViewContentModeRight: + case UIViewContentModeScaleAspectFit: + case UIViewContentModeTop: + case UIViewContentModeTopLeft: + case UIViewContentModeTopRight: + return YES; + case UIViewContentModeScaleAspectFill: + case UIViewContentModeScaleToFill: + return NO; + } +} + +- (CGSize)_imageSize:(BOOL)imageShouldFit scale:(CGFloat)scale +{ + // get the image size based on the contentMode and pictureMode + CGSize size = self.bounds.size; + switch (_pictureMode) { + case FBSDKProfilePictureModeSquare:{ + CGFloat imageSize; + if (imageShouldFit) { + imageSize = MIN(size.width, size.height); + } else { + imageSize = MAX(size.width, size.height); + } + size = CGSizeMake(imageSize, imageSize); + break; + } + case FBSDKProfilePictureModeNormal: + // use the bounds size + break; + } + + // adjust for the screen scale + size = CGSizeMake(size.width * scale, size.height * scale); + + return size; +} + +- (void)_needsImageUpdate +{ + _needsImageUpdate = NO; + + if (!_profileID) { + if (!_placeholderImageIsValid) { + [self _setPlaceholderImage]; + } + return; + } + + // if the current image is no longer representative of the current state, clear the current value out; otherwise, + // leave the current value until the new resolution image is downloaded + BOOL imageShouldFit = [self _imageShouldFit]; + UIScreen *screen = self.window.screen ?: [UIScreen mainScreen]; + CGFloat scale = screen.scale; + CGSize imageSize = [self _imageSize:imageShouldFit scale:scale]; + FBSDKProfilePictureViewState *state = [[FBSDKProfilePictureViewState alloc] initWithProfileID:_profileID + size:imageSize + scale:scale + pictureMode:_pictureMode + imageShouldFit:imageShouldFit]; + if (![_lastState isValidForState:state]) { + [self _setPlaceholderImage]; + } + _lastState = state; + + __weak FBSDKProfilePictureView *weakSelf = self; + [[self class] _downloadImageWithState:state completionBlock:^(NSData *data) { + [weakSelf _updateImageWithData:data state:state]; + }]; +} + +- (void)_setPlaceholderImage +{ + UIColor *fillColor = [UIColor colorWithRed:157.0/255.0 green:177.0/255.0 blue:204.0/255.0 alpha:1.0]; + _placeholderImageIsValid = YES; + _hasProfileImage = NO; + + dispatch_async(dispatch_get_main_queue(), ^{ + self->_imageView.image = [[[FBSDKMaleSilhouetteIcon alloc] initWithColor:fillColor] imageWithSize:self->_imageView.bounds.size]; + }); +} + +- (void)_updateImageWithData:(NSData *)data state:(FBSDKProfilePictureViewState *)state +{ + // make sure we haven't updated the state since we began fetching the image + if (![state isValidForState:_lastState]) { + return; + } + + UIImage *image = [[UIImage alloc] initWithData:data scale:state.scale]; + if (image) { + _hasProfileImage = YES; + dispatch_async(dispatch_get_main_queue(), ^{ + self->_imageView.image = image; + }); + } else { + _hasProfileImage = NO; + _placeholderImageIsValid = NO; + [self setNeedsImageUpdate]; + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h new file mode 100644 index 0000000000..4f79de54fc --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h @@ -0,0 +1,272 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/* + * Constants defining logging behavior. Use with <[FBSDKSettings setLoggingBehavior]>. + */ + +/** Include access token in logging. */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorAccessTokens; + +/** Log performance characteristics */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorPerformanceCharacteristics; + +/** Log FBSDKAppEvents interactions */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorAppEvents; + +/** Log Informational occurrences */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorInformational; + +/** Log cache errors. */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorCacheErrors; + +/** Log errors from SDK UI controls */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorUIControlErrors; + +/** Log debug warnings from API response, i.e. when friends fields requested, but user_friends permission isn't granted. */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorGraphAPIDebugWarning; + +/** Log warnings from API response, i.e. when requested feature will be deprecated in next version of API. + Info is the lowest level of severity, using it will result in logging all previously mentioned levels. + */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorGraphAPIDebugInfo; + +/** Log errors from SDK network requests */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorNetworkRequests; + +/** Log errors likely to be preventable by the developer. This is in the default set of enabled logging behaviors. */ +FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorDeveloperErrors; + +@interface FBSDKSettings : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + Get the Facebook App ID used by the SDK. + + If not explicitly set, the default will be read from the application's plist (FacebookAppID). + */ ++ (NSString *)appID; + +/** + Set the Facebook App ID to be used by the SDK. + @param appID The Facebook App ID to be used by the SDK. + */ ++ (void)setAppID:(NSString *)appID; + +/** + Get the default url scheme suffix used for sessions. + + If not explicitly set, the default will be read from the application's plist (FacebookUrlSchemeSuffix). + */ ++ (NSString *)appURLSchemeSuffix; + +/** + Set the app url scheme suffix used by the SDK. + @param appURLSchemeSuffix The url scheme suffix to be used by the SDK. + */ ++ (void)setAppURLSchemeSuffix:(NSString *)appURLSchemeSuffix; + +/** + Retrieve the Client Token that has been set via [FBSDKSettings setClientToken]. + + If not explicitly set, the default will be read from the application's plist (FacebookClientToken). + */ ++ (NSString *)clientToken; + +/** + Sets the Client Token for the Facebook App. + + This is needed for certain API calls when made anonymously, without a user-based access token. + @param clientToken The Facebook App's "client token", which, for a given appid can be found in the Security + section of the Advanced tab of the Facebook App settings found at + */ ++ (void)setClientToken:(NSString *)clientToken; + +/** + A convenient way to toggle error recovery for all FBSDKGraphRequest instances created after this is set. + @param disableGraphErrorRecovery YES or NO. + */ ++ (void)setGraphErrorRecoveryDisabled:(BOOL)disableGraphErrorRecovery; + +/** + Get the Facebook Display Name used by the SDK. + + If not explicitly set, the default will be read from the application's plist (FacebookDisplayName). + */ ++ (NSString *)displayName; + +/** + Set the default Facebook Display Name to be used by the SDK. + + This should match the Display Name that has been set for the app with the corresponding Facebook App ID, + in the Facebook App Dashboard. + @param displayName The Facebook Display Name to be used by the SDK. + */ ++ (void)setDisplayName:(NSString *)displayName; + +/** + Get the Facebook domain part. + + If not explicitly set, the default will be read from the application's plist (FacebookDomainPart). + */ ++ (NSString *)facebookDomainPart; + +/** + Set the subpart of the Facebook domain. + + This can be used to change the Facebook domain (e.g. @"beta") so that requests will be sent to + graph.beta.facebook.com + @param facebookDomainPart The domain part to be inserted into facebook.com. + */ ++ (void)setFacebookDomainPart:(NSString *)facebookDomainPart; + +/** + The quality of JPEG images sent to Facebook from the SDK. + + If not explicitly set, the default is 0.9. + + @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ ++ (CGFloat)JPEGCompressionQuality; + +/** + Set the quality of JPEG images sent to Facebook from the SDK. + @param JPEGCompressionQuality The quality for JPEG images, expressed as a value from 0.0 to 1.0. + + @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ ++ (void)setJPEGCompressionQuality:(CGFloat)JPEGCompressionQuality; + +/** + Flag which controls the auto logging of basic app events, such as activateApp and deactivateApp. + If not explicitly set, the default is 1 - true + */ ++ (NSNumber *)autoLogAppEventsEnabled; + +/** + Set the flag which controls the auto logging of basic app events, such as activateApp and deactivateApp. + @param AutoLogAppEventsEnabled Flag value, expressed as a value from 0 - false or 1 - true. + */ ++ (void)setAutoLogAppEventsEnabled:(NSNumber *)AutoLogAppEventsEnabled; + +/** + Flag which controls the fb_codeless_debug logging event + If not explicitly set, the default is 1 - true + */ ++ (NSNumber *)codelessDebugLogEnabled; + +/** + Set the flag which controls the fb_codeless_debug logging event + @param CodelessDebugLogEnabled Flag value, expressed as a value from 0 - false or 1 - true. + */ ++ (void)setCodelessDebugLogEnabled:(NSNumber *)CodelessDebugLogEnabled; + +/** + Flag which controls whether advertiserID could be collected. + If not explicitly set, the default is 1 - true + */ ++ (NSNumber *)advertiserIDCollectionEnabled; + +/** + Set the flag which controls ontrols whether advertiserID could be collected. + @param AdvertiserIDCollectionEnabled Flag value, expressed as a value from 0 - false or 1 - true. + */ ++ (void)setAdvertiserIDCollectionEnabled:(NSNumber *)AdvertiserIDCollectionEnabled; + +/** + Gets whether data such as that generated through FBSDKAppEvents and sent to Facebook should be restricted from being used for other than analytics and conversions. Defaults to NO. This value is stored on the device and persists across app launches. + */ ++ (BOOL)limitEventAndDataUsage; + +/** + Sets whether data such as that generated through FBSDKAppEvents and sent to Facebook should be restricted from being used for other than analytics and conversions. Defaults to NO. This value is stored on the device and persists across app launches. + + @param limitEventAndDataUsage The desired value. + */ ++ (void)setLimitEventAndDataUsage:(BOOL)limitEventAndDataUsage; + +/** + Retrieve the current iOS SDK version. + */ ++ (NSString *)sdkVersion; + +/** + The current Facebook SDK logging behavior. + */ +@property (class, nonatomic, copy) NSSet *loggingBehaviors; + ++ (NSSet *)loggingBehavior +DEPRECATED_MSG_ATTRIBUTE("Renamed `loggingBehaviors`"); + +/** + Set the current Facebook SDK logging behavior. This should consist of strings defined as + constants with FBSDKLoggingBehavior*. + + @param loggingBehavior A set of strings indicating what information should be logged. If nil is provided, the logging + behavior is reset to the default set of enabled behaviors. Set to an empty set in order to disable all logging. + + + You can also define this via an array in your app plist with key "FacebookLoggingBehavior" or add and remove individual values via enableLoggingBehavior: or disableLogginBehavior: + */ ++ (void)setLoggingBehavior:(NSSet *)loggingBehavior; + +/** + Enable a particular Facebook SDK logging behavior. + + @param loggingBehavior The LoggingBehavior to enable. This should be a string defined as a constant with FBSDKLoggingBehavior*. + */ ++ (void)enableLoggingBehavior:(NSString *)loggingBehavior; + +/** + Disable a particular Facebook SDK logging behavior. + + @param loggingBehavior The LoggingBehavior to disable. This should be a string defined as a constant with FBSDKLoggingBehavior*. + */ ++ (void)disableLoggingBehavior:(NSString *)loggingBehavior; + +/** + Set the user defaults key used by legacy token caches. + + @param tokenInformationKeyName the key used by legacy token caches. + + + Use this only if you customized FBSessionTokenCachingStrategy in v3.x of + the Facebook SDK for iOS. +*/ ++ (void)setLegacyUserDefaultTokenInformationKeyName:(NSString *)tokenInformationKeyName; + +/** + Get the user defaults key used by legacy token caches. +*/ ++ (NSString *)legacyUserDefaultTokenInformationKeyName; + +/** + Overrides the default Graph API version to use with `FBSDKGraphRequests`. This overrides `FBSDK_TARGET_PLATFORM_VERSION`. + + The string should be of the form `@"v2.7"`. +*/ ++ (void)setGraphAPIVersion:(NSString *)version; + +/** + Returns the default Graph API version. Defaults to `FBSDK_TARGET_PLATFORM_VERSION` +*/ ++ (NSString *)graphAPIVersion; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m new file mode 100644 index 0000000000..4790f1c1a1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m @@ -0,0 +1,306 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKSettings+Internal.h" + +#import "FBSDKAccessTokenCache.h" +#import "FBSDKAccessTokenExpirer.h" +#import "FBSDKCoreKit.h" + +#define FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(TYPE, PLIST_KEY, GETTER, SETTER, DEFAULT_VALUE) \ +static TYPE *g_##PLIST_KEY = nil; \ ++ (TYPE *)GETTER \ +{ \ + if (!g_##PLIST_KEY) { \ + g_##PLIST_KEY = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@#PLIST_KEY] copy] ?: DEFAULT_VALUE; \ + } \ + return g_##PLIST_KEY; \ +} \ ++ (void)SETTER:(TYPE *)value { \ + g_##PLIST_KEY = [value copy]; \ +} + +#define FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY @"com.facebook.sdk:autoLogAppEventsEnabled%@" +#define FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY @"com.facebook.sdk:advertiserIDCollectionEnabled%@" + +NSString *const FBSDKLoggingBehaviorAccessTokens = @"include_access_tokens"; +NSString *const FBSDKLoggingBehaviorPerformanceCharacteristics = @"perf_characteristics"; +NSString *const FBSDKLoggingBehaviorAppEvents = @"app_events"; +NSString *const FBSDKLoggingBehaviorInformational = @"informational"; +NSString *const FBSDKLoggingBehaviorCacheErrors = @"cache_errors"; +NSString *const FBSDKLoggingBehaviorUIControlErrors = @"ui_control_errors"; +NSString *const FBSDKLoggingBehaviorDeveloperErrors = @"developer_errors"; +NSString *const FBSDKLoggingBehaviorGraphAPIDebugWarning = @"graph_api_debug_warning"; +NSString *const FBSDKLoggingBehaviorGraphAPIDebugInfo = @"graph_api_debug_info"; +NSString *const FBSDKLoggingBehaviorNetworkRequests = @"network_requests"; + +static NSObject *g_tokenCache; +static NSMutableSet *g_loggingBehaviors; +static NSString *g_legacyUserDefaultTokenInformationKeyName = @"FBAccessTokenInformationKey"; +static NSString *const FBSDKSettingsLimitEventAndDataUsage = @"com.facebook.sdk:FBSDKSettingsLimitEventAndDataUsage"; +static BOOL g_disableErrorRecovery; +static NSString *g_userAgentSuffix; +static NSString *g_defaultGraphAPIVersion; +static FBSDKAccessTokenExpirer *g_accessTokenExpirer; +static NSString *const FBSDKSettingsAutoLogAppEventsEnabled = @"FacebookAutoLogAppEventsEnabled"; +static NSString *const FBSDKSettingsAdvertiserIDCollectionEnabled = @"FacebookAdvertiserIDCollectionEnabled"; +static NSNumber *g_autoLogAppEventsEnabled; +static NSNumber *g_advertiserIDCollectionEnabled; + +@implementation FBSDKSettings + ++ (void)initialize +{ + if (self == [FBSDKSettings class]) { + NSString *appID = [self appID]; + g_tokenCache = [[FBSDKAccessTokenCache alloc] init]; + g_accessTokenExpirer = [[FBSDKAccessTokenExpirer alloc] init]; + // Fetch meta data from plist and overwrite the value with NSUserDefaults if possible + g_autoLogAppEventsEnabled = [self appEventSettingsForPlistKey:FBSDKSettingsAutoLogAppEventsEnabled defaultValue:@YES]; + g_autoLogAppEventsEnabled = [self appEventSettingsForUserDefaultsKey:[NSString stringWithFormat:FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY, appID] defaultValue:g_autoLogAppEventsEnabled]; + [[NSUserDefaults standardUserDefaults] setObject:g_autoLogAppEventsEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY, appID]]; + g_advertiserIDCollectionEnabled = [self appEventSettingsForPlistKey:FBSDKSettingsAdvertiserIDCollectionEnabled defaultValue:@YES]; + g_advertiserIDCollectionEnabled = [self appEventSettingsForUserDefaultsKey:[NSString stringWithFormat:FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY, appID] defaultValue:g_advertiserIDCollectionEnabled]; + [[NSUserDefaults standardUserDefaults] setObject:g_advertiserIDCollectionEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY, appID]]; + } +} + +#pragma mark - Plist Configuration Settings + +FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookAppID, appID, setAppID, nil); +FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookUrlSchemeSuffix, appURLSchemeSuffix, setAppURLSchemeSuffix, nil); +FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookClientToken, clientToken, setClientToken, nil); +FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookDisplayName, displayName, setDisplayName, nil); +FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookDomainPart, facebookDomainPart, setFacebookDomainPart, nil); +FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookJpegCompressionQuality, _JPEGCompressionQualityNumber, _setJPEGCompressionQualityNumber, @0.9); +FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLogEnabled, codelessDebugLogEnabled, + setCodelessDebugLogEnabled, @0); + ++ (void)setGraphErrorRecoveryDisabled:(BOOL)disableGraphErrorRecovery { + g_disableErrorRecovery = disableGraphErrorRecovery; +} + ++ (BOOL)isGraphErrorRecoveryDisabled { + return g_disableErrorRecovery; +} + ++ (CGFloat)JPEGCompressionQuality +{ + return [self _JPEGCompressionQualityNumber].floatValue; +} + ++ (void)setJPEGCompressionQuality:(CGFloat)JPEGCompressionQuality +{ + [self _setJPEGCompressionQualityNumber:@(JPEGCompressionQuality)]; +} + ++ (BOOL)limitEventAndDataUsage +{ + NSNumber *storedValue = [[NSUserDefaults standardUserDefaults] objectForKey:FBSDKSettingsLimitEventAndDataUsage]; + if (storedValue == nil) { + return NO; + } + return storedValue.boolValue; +} + ++ (void)setLimitEventAndDataUsage:(BOOL)limitEventAndDataUsage +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:@(limitEventAndDataUsage) forKey:FBSDKSettingsLimitEventAndDataUsage]; + [defaults synchronize]; +} + ++ (NSSet *)loggingBehaviors +{ + if (!g_loggingBehaviors) { + NSArray *bundleLoggingBehaviors = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookLoggingBehavior"]; + if (bundleLoggingBehaviors) { + g_loggingBehaviors = [[NSMutableSet alloc] initWithArray:bundleLoggingBehaviors]; + } else { + // Establish set of default enabled logging behaviors. You can completely disable logging by + // specifying an empty array for FacebookLoggingBehavior in your Info.plist. + g_loggingBehaviors = [[NSMutableSet alloc] initWithObjects:FBSDKLoggingBehaviorDeveloperErrors, nil]; + } + } + return [g_loggingBehaviors copy]; +} + ++ (void)setLoggingBehaviors:(NSSet *)loggingBehaviors +{ + if (![g_loggingBehaviors isEqualToSet:loggingBehaviors]) { + g_loggingBehaviors = [loggingBehaviors mutableCopy]; + + [self updateGraphAPIDebugBehavior]; + } +} + ++ (NSSet *)loggingBehavior +{ + return [self loggingBehaviors]; +} + ++ (void)setLoggingBehavior:(NSSet *)loggingBehavior +{ + [self setLoggingBehaviors:loggingBehavior]; +} + ++ (void)enableLoggingBehavior:(NSString *)loggingBehavior +{ + if (!g_loggingBehaviors) { + [self loggingBehaviors]; + } + [g_loggingBehaviors addObject:loggingBehavior]; + [self updateGraphAPIDebugBehavior]; +} + ++ (void)disableLoggingBehavior:(NSString *)loggingBehavior +{ + if (!g_loggingBehaviors) { + [self loggingBehaviors]; + } + [g_loggingBehaviors removeObject:loggingBehavior]; + [self updateGraphAPIDebugBehavior]; +} + ++ (void)setLegacyUserDefaultTokenInformationKeyName:(NSString *)tokenInformationKeyName +{ + if (![g_legacyUserDefaultTokenInformationKeyName isEqualToString:tokenInformationKeyName]) { + g_legacyUserDefaultTokenInformationKeyName = tokenInformationKeyName; + } +} + ++ (NSString *)legacyUserDefaultTokenInformationKeyName +{ + return g_legacyUserDefaultTokenInformationKeyName; +} + +#pragma mark - Readonly Configuration Settings + ++ (NSString *)sdkVersion +{ + return FBSDK_VERSION_STRING; +} + +#pragma mark - Internal + ++ (NSObject *)accessTokenCache +{ + return g_tokenCache; +} + ++ (void)setAccessTokenCache:(NSObject *)cache +{ + if (g_tokenCache != cache) { + g_tokenCache = cache; + } +} + ++ (NSString *)userAgentSuffix +{ + return g_userAgentSuffix; +} + ++ (void)setUserAgentSuffix:(NSString *)suffix +{ + if (![g_userAgentSuffix isEqualToString:suffix]) { + g_userAgentSuffix = suffix; + } +} + ++ (void)setGraphAPIVersion:(NSString *)version +{ + if (![g_defaultGraphAPIVersion isEqualToString:version]) + { + g_defaultGraphAPIVersion = version; + } +} + ++ (NSString *)graphAPIVersion +{ + return g_defaultGraphAPIVersion ?: FBSDK_TARGET_PLATFORM_VERSION; +} + ++ (NSNumber *)appEventSettingsForPlistKey:(NSString *)plistKey + defaultValue:(NSNumber *)defaultValue +{ + return [[[NSBundle mainBundle] objectForInfoDictionaryKey:plistKey] copy] ?: defaultValue; +} + ++ (NSNumber *)appEventSettingsForUserDefaultsKey:(NSString *)userDefaultsKey + defaultValue:(NSNumber *)defaultValue +{ + NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:userDefaultsKey]; + if ([data isKindOfClass:[NSNumber class]]) { + return (NSNumber *)data; + } + return defaultValue; +} + ++ (NSNumber *)autoLogAppEventsEnabled +{ + return g_autoLogAppEventsEnabled; +} + ++ (void)setAutoLogAppEventsEnabled:(NSNumber *)autoLogAppEventsEnabled +{ + if (autoLogAppEventsEnabled == nil || [g_autoLogAppEventsEnabled isEqual:autoLogAppEventsEnabled]) { + return; + } + + g_autoLogAppEventsEnabled = [autoLogAppEventsEnabled copy]; + [[NSUserDefaults standardUserDefaults] setObject:g_autoLogAppEventsEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY, [self appID]]]; +} + ++ (NSNumber *)advertiserIDCollectionEnabled +{ + return g_advertiserIDCollectionEnabled; +} + ++ (void)setAdvertiserIDCollectionEnabled:(NSNumber *)advertiserIDCollectionEnabled +{ + if (advertiserIDCollectionEnabled == nil || [g_advertiserIDCollectionEnabled isEqual:advertiserIDCollectionEnabled]) { + return; + } + + g_advertiserIDCollectionEnabled = [advertiserIDCollectionEnabled copy]; + [[NSUserDefaults standardUserDefaults] setObject:g_advertiserIDCollectionEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY, [self appID]]]; +} + +#pragma mark - Internal - Graph API Debug + ++ (void)updateGraphAPIDebugBehavior +{ + // Enable Warnings everytime Info is enabled + if ([g_loggingBehaviors containsObject:FBSDKLoggingBehaviorGraphAPIDebugInfo] + && ![g_loggingBehaviors containsObject:FBSDKLoggingBehaviorGraphAPIDebugWarning]) { + [g_loggingBehaviors addObject:FBSDKLoggingBehaviorGraphAPIDebugWarning]; + } +} + ++ (NSString *)graphAPIDebugParamValue +{ + if ([[self loggingBehaviors] containsObject:FBSDKLoggingBehaviorGraphAPIDebugInfo]) { + return @"info"; + } else if ([[self loggingBehaviors] containsObject:FBSDKLoggingBehaviorGraphAPIDebugWarning]) { + return @"warning"; + } + + return nil; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h new file mode 100644 index 0000000000..7373639975 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h @@ -0,0 +1,104 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAccessToken; + +/** + + Callback block for returning an array of FBSDKAccessToken instances (and possibly `NSNull` instances); or an error. + */ +typedef void (^FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)(NSArray *tokens, NSError *error) ; + +/** + + Callback block for removing a test user. + */ +typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; + + +/** + Provides methods for managing test accounts for testing Facebook integration. + + + Facebook allows developers to create test accounts for testing their applications' + Facebook integration (see https://developers.facebook.com/docs/test_users/). This class + simplifies use of these accounts for writing tests. It is not designed for use in + production application code. + + This class will make Graph API calls on behalf of your app to manage test accounts and requires + an app id and app secret. You will typically use this class to write unit or integration tests. + Make sure you NEVER include your app secret in your production app. + */ +@interface FBSDKTestUsersManager : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + construct or return the shared instance + @param appID the Facebook app id + @param appSecret the Facebook app secret + */ ++ (instancetype)sharedInstanceForAppID:(NSString *)appID appSecret:(NSString *)appSecret; + +/** + retrieve FBSDKAccessToken instances for test accounts with the specific permissions. + @param arraysOfPermissions an array of permissions sets, such as @[ [NSSet setWithObject:@"email"], [NSSet setWithObject:@"user_birthday"]] + if you needed two test accounts with email and birthday permissions, respectively. You can pass in empty nested sets + if you need two arbitrary test accounts. For convenience, passing nil is treated as @[ [NSSet set] ] + for fetching a single test user. + @param createIfNotFound if YES, new test accounts are created if no test accounts existed that fit the permissions + requirement + @param handler the callback to invoke which will return an array of `FBAccessTokenData` instances or an `NSError`. + If param `createIfNotFound` is NO, the array may contain `[NSNull null]` instances. + + + If you are requesting test accounts with differing number of permissions, try to order + `arrayOfPermissionsArrays` so that the most number of permissions come first to minimize creation of new + test accounts. + */ +- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *)arraysOfPermissions + createIfNotFound:(BOOL)createIfNotFound + completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler; + +/** + add a test account with the specified permissions + @param permissions the set of permissions, e.g., [NSSet setWithObjects:@"email", @"user_friends"] + @param handler the callback handler + */ +- (void)addTestAccountWithPermissions:(NSSet *)permissions + completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler; + +/** + remove a test account for the given user id + @param userId the user id + @param handler the callback handler + */ +- (void)removeTestAccount:(NSString *)userId completionHandler:(FBSDKTestUsersManagerRemoveTestAccountHandler)handler; + +/** + Make two test users friends with each other. + @param first the token of the first user + @param second the token of the second user + @param callback the callback handler + */ +- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(void (^)(NSError *))callback; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m new file mode 100644 index 0000000000..d6e45c75be --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m @@ -0,0 +1,328 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKTestUsersManager.h" + +#import "FBSDKCoreKit+Internal.h" + +static NSString *const kFBGraphAPITestUsersPathFormat = @"%@/accounts/test-users"; +static NSString *const kAccountsDictionaryTokenKey = @"access_token"; +static NSString *const kAccountsDictionaryPermissionsKey = @"permissions"; +static NSMutableDictionary *gInstancesDictionary; + +@interface FBSDKTestUsersManager() +- (instancetype)initWithAppID:(NSString *)appID appSecret:(NSString *)appSecret NS_DESIGNATED_INITIALIZER; +@end + +@implementation FBSDKTestUsersManager +{ + NSString *_appID; + NSString *_appSecret; + // dictionary with format like: + // { user_id : { kAccountsDictionaryTokenKey : "token", + // kAccountsDictionaryPermissionsKey : [ permissions ] } + NSMutableDictionary *_accounts; +} + +- (instancetype)initWithAppID:(NSString *)appID appSecret:(NSString *)appSecret { + if ((self = [super init])) { + _appID = [appID copy]; + _appSecret = [appSecret copy]; + _accounts = [NSMutableDictionary dictionary]; + } + return self; +} + ++ (instancetype)sharedInstanceForAppID:(NSString *)appID appSecret:(NSString *)appSecret { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + gInstancesDictionary = [NSMutableDictionary dictionary]; + }); + + NSString *instanceKey = [NSString stringWithFormat:@"%@|%@", appID, appSecret]; + if (!gInstancesDictionary[instanceKey]) { + gInstancesDictionary[instanceKey] = [[FBSDKTestUsersManager alloc] initWithAppID:appID appSecret:appSecret]; + } + return gInstancesDictionary[instanceKey]; +} + +- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *)arraysOfPermissions + createIfNotFound:(BOOL)createIfNotFound + completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler { + arraysOfPermissions = arraysOfPermissions ?: @[[NSSet set]]; + + // wrap work in a block so that we can chain it to after a fetch of existing accounts if we need to. + void (^helper)(NSError *) = ^(NSError *error){ + if (error) { + if (handler) { + handler(nil, error); + } + return; + } + NSMutableArray *tokenDatum = [NSMutableArray arrayWithCapacity:arraysOfPermissions.count]; + NSMutableSet *collectedUserIds = [NSMutableSet setWithCapacity:arraysOfPermissions.count]; + __block BOOL canInvokeHandler = YES; + __weak id weakSelf = self; + [arraysOfPermissions enumerateObjectsUsingBlock:^(NSSet *desiredPermissions, NSUInteger idx, BOOL *stop) { + NSArray* userIdAndTokenPair = [self userIdAndTokenOfExistingAccountWithPermissions:desiredPermissions skip:collectedUserIds]; + if (!userIdAndTokenPair) { + if (createIfNotFound) { + [self addTestAccountWithPermissions:desiredPermissions + completionHandler:^(NSArray *tokens, NSError *addError) { + if (addError) { + if (handler) { + handler(nil, addError); + } + } else { + [weakSelf requestTestAccountTokensWithArraysOfPermissions:arraysOfPermissions + createIfNotFound:createIfNotFound + completionHandler:handler]; + } + }]; + // stop the enumeration (ane flag so that callback to addTestAccount* will resolve our handler now). + canInvokeHandler = NO; + *stop = YES; + return; + } else { + [tokenDatum addObject:[NSNull null]]; + } + } else { + NSString *userId = userIdAndTokenPair[0]; + NSString *tokenString = userIdAndTokenPair[1]; + [collectedUserIds addObject:userId]; + [tokenDatum addObject:[self tokenDataForTokenString:tokenString + permissions:desiredPermissions + userId:userId]]; + } + }]; + + if (canInvokeHandler && handler) { + handler(tokenDatum, nil); + } + }; + if (_accounts.count == 0) { + [self fetchExistingTestAccountsWithAfterCursor:nil handler:helper]; + } else { + helper(NULL); + } +} + +- (void)addTestAccountWithPermissions:(NSSet *)permissions + completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler { + NSDictionary *params = @{ + @"installed" : @"true", + @"permissions" : [permissions.allObjects componentsJoinedByString:@","], + @"access_token" : self.appAccessToken + }; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:kFBGraphAPITestUsersPathFormat, _appID] + parameters:params + tokenString:[self appAccessToken] + version:nil + HTTPMethod:@"POST"]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (error) { + if (handler) { + handler(nil, error); + } + } else { + NSMutableDictionary *accountData = [NSMutableDictionary dictionaryWithCapacity:2]; + accountData[kAccountsDictionaryPermissionsKey] = [NSSet setWithSet:permissions]; + accountData[kAccountsDictionaryTokenKey] = result[@"access_token"]; + self->_accounts[result[@"id"]] = accountData; + + if (handler) { + FBSDKAccessToken *token = [self tokenDataForTokenString:accountData[kAccountsDictionaryTokenKey] + permissions:permissions + userId:result[@"id"]]; + handler(@[token], nil); + } + } + }]; +} + +- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(void (^)(NSError *))callback +{ + __block int expectedCount = 2; + void (^complete)(NSError *) = ^(NSError *error) { + // ignore if they're already friends or pending request + if ([error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] integerValue] == 522 || + [error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] integerValue] == 520) { + error = nil; + } + if (--expectedCount == 0 || error) { + callback(error); + } + }; + FBSDKGraphRequest *one = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/friends/%@", first.userID, second.userID] + parameters:nil + tokenString:first.tokenString + version:nil + HTTPMethod:@"POST"]; + FBSDKGraphRequest *two = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/friends/%@", second.userID, first.userID] + parameters:nil + tokenString:second.tokenString + version:nil + HTTPMethod:@"POST"]; + FBSDKGraphRequestConnection *conn = [[FBSDKGraphRequestConnection alloc] init]; + [conn addRequest:one + batchEntryName:@"first" + completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + complete(error); + }]; + [conn addRequest:two + batchParameters:@{ @"depends_on" : @"first"} + completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + complete(error); + }]; + [conn start]; +} + +- (void)removeTestAccount:(NSString *)userId completionHandler:(FBSDKTestUsersManagerRemoveTestAccountHandler)handler { + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:userId + parameters:nil + tokenString:self.appAccessToken + version:nil + HTTPMethod:@"DELETE"]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (handler) { + handler(error); + } + }]; + [_accounts removeObjectForKey:userId]; +} + +#pragma mark - private methods +- (FBSDKAccessToken *)tokenDataForTokenString:(NSString *)tokenString permissions:(NSSet *)permissions userId:(NSString *)userId{ + return [[FBSDKAccessToken alloc] initWithTokenString:tokenString + permissions:permissions.allObjects + declinedPermissions:nil + appID:_appID + userID:userId + expirationDate:nil + refreshDate:nil + dataAccessExpirationDate:nil]; +} + +- (NSArray *)userIdAndTokenOfExistingAccountWithPermissions:(NSSet *)permissions skip:(NSSet *)setToSkip { + __block NSString *userId = nil; + __block NSString *token = nil; + + [_accounts enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSDictionary *accountData, BOOL *stop) { + if ([setToSkip containsObject:key]) { + return; + } + NSSet *accountPermissions = accountData[kAccountsDictionaryPermissionsKey]; + if ([permissions isSubsetOfSet:accountPermissions]) { + token = accountData[kAccountsDictionaryTokenKey]; + userId = key; + *stop = YES; + } + }]; + if (userId && token) { + return @[userId, token]; + } else { + return nil; + } +} + +- (NSString *)appAccessToken { + return [NSString stringWithFormat:@"%@|%@", _appID, _appSecret]; +} + +- (void)fetchExistingTestAccountsWithAfterCursor:(NSString *)after handler:(void(^)(NSError *error))handler { + FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; + FBSDKGraphRequest *requestForAccountIds = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:kFBGraphAPITestUsersPathFormat, _appID] + parameters:@{@"limit" : @"50", + @"after" : after ?: @"", + @"fields": @"" + } + tokenString:self.appAccessToken + version:nil + HTTPMethod:nil]; + __block NSString *afterCursor = nil; + __block NSInteger expectedTestAccounts = 0; + FBSDKGraphRequestConnection *permissionConnection = [[FBSDKGraphRequestConnection alloc] init]; + [connection addRequest:requestForAccountIds completionHandler:^(FBSDKGraphRequestConnection *innerConnection, id result, NSError *error) { + if (error) { + if (handler) { + handler(error); + } + // on errors, clear out accounts since it may be in a bad state + [self->_accounts removeAllObjects]; + return; + } else { + for (NSDictionary *account in result[@"data"]) { + NSString *userId = account[@"id"]; + NSString *token = account[@"access_token"]; + if (userId && token) { + self->_accounts[userId] = [NSMutableDictionary dictionaryWithCapacity:2]; + self->_accounts[userId][kAccountsDictionaryTokenKey] = token; + expectedTestAccounts++; + [permissionConnection addRequest:[[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@?fields=permissions", userId] + parameters:nil + tokenString:self.appAccessToken + version:nil + HTTPMethod:nil] + completionHandler:^(FBSDKGraphRequestConnection *innerConnection2, id innerResult, NSError *innerError) { + if (self->_accounts.count == 0) { + // indicates an earlier error that was already passed to handler, so just short circuit. + return; + } + if (innerError) { + if (handler) { + handler(innerError); + } + [self->_accounts removeAllObjects]; + return; + } else { + NSMutableSet *grantedPermissions = [NSMutableSet set]; + NSArray *resultPermissionsDictionaries = innerResult[@"permissions"][@"data"]; + [resultPermissionsDictionaries enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL *stop) { + if ([obj[@"status"] isEqualToString:@"granted"]) { + [grantedPermissions addObject:obj[@"permission"]]; + } + }]; + self->_accounts[userId][kAccountsDictionaryPermissionsKey] = grantedPermissions; + } + expectedTestAccounts--; + if (!expectedTestAccounts) { + if (afterCursor) { + [self fetchExistingTestAccountsWithAfterCursor:afterCursor handler:handler]; + } else if (handler) { + handler(nil); + } + } + } + ]; + } + } + afterCursor = result[@"paging"][@"cursors"][@"after"]; + } + + if (expectedTestAccounts) { + // finished fetching ids and tokens, now kick off the request for all the permissions + [permissionConnection start]; + } else { + if (handler) { + handler(nil); + } + } + }]; + [connection start]; +} +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h new file mode 100644 index 0000000000..e0e3d4c6b0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h @@ -0,0 +1,87 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAppLink; + +/*! + Provides a set of utilities for working with NSURLs, such as parsing of query parameters + and handling for App Link requests. + */ +@interface FBSDKURL : NSObject + +/*! + Creates a link target from a raw URL. + On success, this posts the FBSDKAppLinkParseEventName measurement event. If you are constructing the FBSDKURL within your application delegate's + application:openURL:sourceApplication:annotation:, you should instead use URLWithInboundURL:sourceApplication: + to support better FBSDKMeasurementEvent notifications + @param url The instance of `NSURL` to create FBSDKURL from. + */ ++ (FBSDKURL *)URLWithURL:(NSURL *)url; + +/*! + Creates a link target from a raw URL received from an external application. This is typically called from the app delegate's + application:openURL:sourceApplication:annotation: and will post the FBSDKAppLinkNavigateInEventName measurement event. + @param url The instance of `NSURL` to create FBSDKURL from. + @param sourceApplication the bundle ID of the app that is requesting your app to open the URL. The same sourceApplication in application:openURL:sourceApplication:annotation: + */ ++ (FBSDKURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; + +/*! + Gets the target URL. If the link is an App Link, this is the target of the App Link. + Otherwise, it is the url that created the target. + */ +@property (nonatomic, strong, readonly) NSURL *targetURL; + +/*! + Gets the query parameters for the target, parsed into an NSDictionary. + */ +@property (nonatomic, strong, readonly) NSDictionary *targetQueryParameters; + +/*! + If this link target is an App Link, this is the data found in al_applink_data. + Otherwise, it is nil. + */ +@property (nonatomic, strong, readonly) NSDictionary *appLinkData; + +/*! + If this link target is an App Link, this is the data found in extras. + */ +@property (nonatomic, strong, readonly) NSDictionary *appLinkExtras; + +/*! + The App Link indicating how to navigate back to the referer app, if any. + */ +@property (nonatomic, strong, readonly) FBSDKAppLink *appLinkReferer; + +/*! + The URL that was used to create this FBSDKURL. + */ +@property (nonatomic, strong, readonly) NSURL *inputURL; + +/*! + The query parameters of the inputURL, parsed into an NSDictionary. + */ +@property (nonatomic, strong, readonly) NSDictionary *inputQueryParameters; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m new file mode 100644 index 0000000000..adc4729eee --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m @@ -0,0 +1,152 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKURL_Internal.h" + +#import "FBSDKAppLinkTarget.h" +#import "FBSDKAppLink_Internal.h" +#import "FBSDKMeasurementEvent_Internal.h" + +@implementation FBSDKURL + +- (instancetype)initWithURL:(NSURL *)url forOpenInboundURL:(BOOL)forOpenURLEvent sourceApplication:(NSString *)sourceApplication forRenderBackToReferrerBar:(BOOL)forRenderBackToReferrerBar { + self = [super init]; + if (!self) return nil; + + _inputURL = url; + _targetURL = url; + + // Parse the query string parameters for the base URL + NSDictionary *baseQuery = [FBSDKURL queryParametersForURL:url]; + _inputQueryParameters = baseQuery; + _targetQueryParameters = baseQuery; + + // Check for applink_data + NSString *appLinkDataString = baseQuery[FBSDKAppLinkDataParameterName]; + if (appLinkDataString) { + // Try to parse the JSON + NSError *error = nil; + NSDictionary *applinkData = + [NSJSONSerialization JSONObjectWithData:[appLinkDataString dataUsingEncoding:NSUTF8StringEncoding] + options:0 + error:&error]; + if (!error && [applinkData isKindOfClass:[NSDictionary class]]) { + // If the version is not specified, assume it is 1. + NSString *version = applinkData[FBSDKAppLinkVersionKeyName] ?: @"1.0"; + NSString *target = applinkData[FBSDKAppLinkTargetKeyName]; + if ([version isKindOfClass:[NSString class]] && + [version isEqual:FBSDKAppLinkVersion]) { + // There's applink data! The target should actually be the applink target. + _appLinkData = applinkData; + id applinkExtras = applinkData[FBSDKAppLinkExtrasKeyName]; + if (applinkExtras && [applinkExtras isKindOfClass:[NSDictionary class]]) { + _appLinkExtras = applinkExtras; + } + _targetURL = ([target isKindOfClass:[NSString class]] ? [NSURL URLWithString:target] : url); + _targetQueryParameters = [FBSDKURL queryParametersForURL:_targetURL]; + + NSDictionary *refererAppLink = _appLinkData[FBSDKAppLinkRefererAppLink]; + NSString *refererURLString = refererAppLink[FBSDKAppLinkRefererUrl]; + NSString *refererAppName = refererAppLink[FBSDKAppLinkRefererAppName]; + + if (refererURLString && refererAppName) { + FBSDKAppLinkTarget *appLinkTarget = [FBSDKAppLinkTarget appLinkTargetWithURL:[NSURL URLWithString:refererURLString] + appStoreId:nil + appName:refererAppName]; + _appLinkReferer = [FBSDKAppLink appLinkWithSourceURL:[NSURL URLWithString:refererURLString] + targets:@[ appLinkTarget ] + webURL:nil + isBackToReferrer:YES]; + } + + // Raise Measurement Event + NSString *const EVENT_YES_VAL = @"1"; + NSString *const EVENT_NO_VAL = @"0"; + NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; + logData[@"version"] = version; + if (refererURLString) { + logData[@"refererURL"] = refererURLString; + } + if (refererAppName) { + logData[@"refererAppName"] = refererAppName; + } + if (sourceApplication) { + logData[@"sourceApplication"] = sourceApplication; + } + if (_targetURL.absoluteString) { + logData[@"targetURL"] = _targetURL.absoluteString; + } + if (_inputURL.absoluteString) { + logData[@"inputURL"] = _inputURL.absoluteString; + } + if (_inputURL.scheme) { + logData[@"inputURLScheme"] = _inputURL.scheme; + } + logData[@"forRenderBackToReferrerBar"] = forRenderBackToReferrerBar ? EVENT_YES_VAL : EVENT_NO_VAL; + logData[@"forOpenUrl"] = forOpenURLEvent ? EVENT_YES_VAL : EVENT_NO_VAL; + [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkParseEventName args:logData]; + if (forOpenURLEvent) { + [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkNavigateInEventName args:logData]; + } + } + } + } + + return self; +} + ++ (FBSDKURL *)URLWithURL:(NSURL *)url { + return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:NO]; +} + ++ (FBSDKURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication { + return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:YES sourceApplication:sourceApplication forRenderBackToReferrerBar:NO]; +} + ++ (FBSDKURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url { + return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:YES]; +} + ++ (NSString *)decodeURLString:(NSString *)string { + return (NSString *)CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapes(NULL, + (CFStringRef)string, + CFSTR(""))); +} + ++ (NSDictionary *)queryParametersForURL:(NSURL *)url { + NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; + NSString *query = url.query; + if ([query isEqualToString:@""]) { + return @{}; + } + NSArray *queryComponents = [query componentsSeparatedByString:@"&"]; + for (NSString *component in queryComponents) { + NSRange equalsLocation = [component rangeOfString:@"="]; + if (equalsLocation.location == NSNotFound) { + // There's no equals, so associate the key with NSNull + parameters[[self decodeURLString:component]] = [NSNull null]; + } else { + NSString *key = [self decodeURLString:[component substringToIndex:equalsLocation.location]]; + NSString *value = [self decodeURLString:[component substringFromIndex:equalsLocation.location + 1]]; + parameters[key] = value; + } + } + return [NSDictionary dictionaryWithDictionary:parameters]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h new file mode 100644 index 0000000000..560b6b039a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h @@ -0,0 +1,79 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + Class to contain common utility methods. + */ +@interface FBSDKUtility : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + Parses a query string into a dictionary. + @param queryString The query string value. + @return A dictionary with the key/value pairs. + */ ++ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString; + +/** + Constructs a query string from a dictionary. + @param dictionary The dictionary with key/value pairs for the query string. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @return Query string representation of the parameters. + */ ++ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary error:(NSError *__autoreleasing *)errorRef; + +/** + Decodes a value from an URL. + @param value The value to decode. + @return The decoded value. + */ ++ (NSString *)URLDecode:(NSString *)value; + +/** + Encodes a value for an URL. + @param value The value to encode. + @return The encoded value. + */ ++ (NSString *)URLEncode:(NSString *)value; + +/** + Creates a timer using Grand Central Dispatch. + @param interval The interval to fire the timer, in seconds. + @param block The code block to execute when timer is fired. + @return The dispatch handle. + */ ++ (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block; + +/** + Stop a timer that was started by startGCDTimerWithInterval. + @param timer The dispatch handle received from startGCDTimerWithInterval. + */ ++ (void)stopGCDTimer:(dispatch_source_t)timer; + +/** + Get SHA256 hased string of NSString/NSData + + @param input The data that needs to be hashed, it could be NSString or NSData. + */ ++ (NSString *)SHA256Hash:(NSObject *)input; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m new file mode 100644 index 0000000000..b6af8ab37d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m @@ -0,0 +1,135 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKUtility.h" + +#import + +#import "FBSDKInternalUtility.h" + +@implementation FBSDKUtility + ++ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString +{ + NSMutableDictionary *result = [[NSMutableDictionary alloc] init]; + NSArray *parts = [queryString componentsSeparatedByString:@"&"]; + + for (NSString *part in parts) { + if (part.length == 0) { + continue; + } + + NSRange index = [part rangeOfString:@"="]; + NSString *key; + NSString *value; + + if (index.location == NSNotFound) { + key = part; + value = @""; + } else { + key = [part substringToIndex:index.location]; + value = [part substringFromIndex:index.location + index.length]; + } + + key = [self URLDecode:key]; + value = [self URLDecode:value]; + if (key && value) { + result[key] = value; + } + } + return result; +} + ++ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary error:(NSError *__autoreleasing *)errorRef +{ + return [FBSDKInternalUtility queryStringWithDictionary:dictionary error:errorRef invalidObjectHandler:NULL]; +} + ++ (NSString *)URLDecode:(NSString *)value +{ + value = [value stringByReplacingOccurrencesOfString:@"+" withString:@" "]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + value = [value stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +#pragma clang diagnostic pop + return value; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" ++ (NSString *)URLEncode:(NSString *)value +{ + return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, + (CFStringRef)value, + NULL, // characters to leave unescaped + CFSTR(":!*();@/&?+$,='"), + kCFStringEncodingUTF8); +} +#pragma clang diagnostic pop + ++ (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block +{ + dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, // source type + 0, // handle + 0, // mask + dispatch_get_main_queue()); // queue + + dispatch_source_set_timer(timer, // dispatch source + dispatch_time(DISPATCH_TIME_NOW, interval * NSEC_PER_SEC), // start + interval * NSEC_PER_SEC, // interval + 0 * NSEC_PER_SEC); // leeway + + dispatch_source_set_event_handler(timer, block); + + dispatch_resume(timer); + + return timer; +} + ++ (void)stopGCDTimer:(dispatch_source_t)timer +{ + if (timer) { + dispatch_source_cancel(timer); + } +} + ++ (NSString *)SHA256Hash:(NSObject *)input +{ + NSData *data = nil; + + if ([input isKindOfClass:[NSString class]]) { + data = [(NSString *)input dataUsingEncoding:NSUTF8StringEncoding]; + } else if ([input isKindOfClass:[NSData class]]) { + data = (NSData *)input; + } + + if (!data) { + return nil; + } + + uint8_t digest[CC_SHA256_DIGEST_LENGTH]; + CC_SHA256(data.bytes, (CC_LONG)data.length, digest); + NSMutableString *encryptedStuff = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { + [encryptedStuff appendFormat:@"%02x", digest[i]]; + } + + return encryptedStuff; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h new file mode 100644 index 0000000000..d90e99e9ab --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h @@ -0,0 +1,51 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKBase64 : NSObject + +/** + Decodes a base-64 encoded string. + @param string The base-64 encoded string. + @return NSData containing the decoded bytes. + */ ++ (NSData *)decodeAsData:(NSString *)string; + +/** + Decodes a base-64 encoded string into a string. + @param string The base-64 encoded string. + @return NSString with the decoded UTF-8 value. + */ ++ (NSString *)decodeAsString:(NSString *)string; + +/** + Encodes data into a string. + @param data The data to be encoded. + @return The base-64 encoded string. + */ ++ (NSString *)encodeData:(NSData *)data; + +/** + Encodes string into a base-64 representation. + @param string The string to be encoded. + @return The base-64 encoded string. + */ ++ (NSString *)encodeString:(NSString *)string; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m new file mode 100644 index 0000000000..dd81d5a3a1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m @@ -0,0 +1,99 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBase64.h" + +@implementation FBSDKBase64 + +static FBSDKBase64 *_decoder; +static FBSDKBase64 *_encoder; + +#pragma mark - Class Methods + ++ (void)initialize +{ + if (self == [FBSDKBase64 class]) { + _decoder = [[FBSDKBase64 alloc] init]; + _encoder = [[FBSDKBase64 alloc] init]; + } +} + ++ (NSData *)decodeAsData:(NSString *)string +{ + return [_decoder decodeAsData:string]; +} + ++ (NSString *)decodeAsString:(NSString *)string +{ + return [_decoder decodeAsString:string]; +} + ++ (NSString *)encodeData:(NSData *)data +{ + return [_encoder encodeData:data]; +} + ++ (NSString *)encodeString:(NSString *)string +{ + return [_encoder encodeString:string]; +} + +#pragma mark - Object Lifecycle + +#pragma mark - Implementation Methods + +- (NSData *)decodeAsData:(NSString *)string +{ + if (!string) { + return nil; + } + // This padding will be appended before stripping unknown characters, so if there are unknown characters of count % 4 + // it will not be able to decode. Since we assume valid base64 data, we will take this as is. + int needPadding = string.length % 4; + if (needPadding > 0) { + needPadding = 4 - needPadding; + string = [string stringByPaddingToLength:string.length+needPadding withString:@"=" startingAtIndex:0]; + } + + return [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; +} + +- (NSString *)decodeAsString:(NSString *)string +{ + NSData *data = [self decodeAsData:string]; + if (!data) { + return nil; + } + return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; +} + +- (NSString *)encodeData:(NSData *)data +{ + if (!data) { + return nil; + } + + return [data base64EncodedStringWithOptions:0]; +} + +- (NSString *)encodeString:(NSString *)string +{ + return [self encodeData:[string dataUsingEncoding:NSUTF8StringEncoding]]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h new file mode 100644 index 0000000000..b94cd470cb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h @@ -0,0 +1,58 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocol.h" +#import "FBSDKBridgeAPIProtocolType.h" +#import "FBSDKBridgeAPIRequest.h" +#import "FBSDKBridgeAPIResponse.h" +#import "FBSDKURLOpening.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^FBSDKBridgeAPIResponseBlock)(FBSDKBridgeAPIResponse *response) +NS_SWIFT_NAME(BridgeAPIResponseBlock); + +@interface FBSDKBridgeAPI : NSObject + +- (void)openBridgeAPIRequest:(FBSDKBridgeAPIRequest *)request + useSafariViewController:(BOOL)useSafariViewController + fromViewController:(nullable UIViewController *)fromViewController + completionBlock:(FBSDKBridgeAPIResponseBlock)completionBlock; + +- (void)openURLWithSafariViewController:(NSURL *)url + sender:(nullable id)sender + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKSuccessBlock)handler; + +- (void)openURL:(NSURL *)url + sender:(nullable id)sender + handler:(FBSDKSuccessBlock)handler; + +@property (class, nonatomic, readonly, strong) FBSDKBridgeAPI *sharedInstance +NS_SWIFT_NAME(shared); +@property (nonatomic, readonly, getter=isActive) BOOL active; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m new file mode 100644 index 0000000000..7e4e339621 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m @@ -0,0 +1,414 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPI.h" + +#import "FBSDKCoreKit+Internal.h" + +typedef void (^FBSDKAuthenticationCompletionHandler)(NSURL *_Nullable callbackURL, NSError *_Nullable error); + +@protocol FBSDKAuthenticationSession + +- (instancetype)initWithURL:(NSURL *)URL callbackURLScheme:(nullable NSString *)callbackURLScheme completionHandler:(FBSDKAuthenticationCompletionHandler)completionHandler; +- (BOOL)start; +- (void)cancel; + +@end + +@interface FBSDKBridgeAPI() + +@end + +@implementation FBSDKBridgeAPI { + FBSDKBridgeAPIRequest *_pendingRequest; + FBSDKBridgeAPIResponseBlock _pendingRequestCompletionBlock; + id _pendingURLOpen; + id _authenticationSession NS_AVAILABLE_IOS(11_0); + FBSDKAuthenticationCompletionHandler _authenticationSessionCompletionHandler NS_AVAILABLE_IOS(11_0); + + BOOL _expectingBackground; + BOOL _isRequestingSFAuthenticationSession; + UIViewController *_safariViewController; + BOOL _isDismissingSafariViewController; + BOOL _isAppLaunched; +} + ++ (void)load +{ + [[FBSDKApplicationDelegate sharedInstance] addObserver:[FBSDKBridgeAPI sharedInstance]]; +} + ++ (FBSDKBridgeAPI *)sharedInstance +{ + static FBSDKBridgeAPI *_sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedInstance = [[self alloc] init]; + }); + return _sharedInstance; +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + // _expectingBackground can be YES if the caller started doing work (like login) + // within the app delegate's lifecycle like openURL, in which case there + // might have been a "didBecomeActive" event pending that we want to ignore. + BOOL notExpectingBackground = !_expectingBackground && !_safariViewController && !_isDismissingSafariViewController && !_isRequestingSFAuthenticationSession; + if (notExpectingBackground) { + _active = YES; + + [_pendingURLOpen applicationDidBecomeActive:application]; + [self _cancelBridgeRequest]; + + [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKApplicationDidBecomeActiveNotification object:self]; + } +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + _isRequestingSFAuthenticationSession = NO; + _active = NO; + _expectingBackground = NO; +} + +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation +{ + id pendingURLOpen = _pendingURLOpen; + + void (^completePendingOpenURLBlock)(void) = ^{ + self->_pendingURLOpen = nil; + [pendingURLOpen application:application + openURL:url + sourceApplication:sourceApplication + annotation:annotation]; + self->_isDismissingSafariViewController = NO; + }; + // if they completed a SFVC flow, dismiss it. + if (_safariViewController) { + _isDismissingSafariViewController = YES; + [_safariViewController.presentingViewController dismissViewControllerAnimated:YES + completion:completePendingOpenURLBlock]; + _safariViewController = nil; + } else { + if (@available(iOS 11.0, *)) { + if (_authenticationSession != nil) { + [_authenticationSession cancel]; + _authenticationSession = nil; + } + } + completePendingOpenURLBlock(); + } + + if ([pendingURLOpen canOpenURL:url + forApplication:application + sourceApplication:sourceApplication + annotation:annotation]) { + return YES; + } + + if ([self _handleBridgeAPIResponseURL:url sourceApplication:sourceApplication]) { + return YES; + } + + return NO; +} + +- (BOOL)application:(UIApplication *)application +didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + NSURL *launchedURL = launchOptions[UIApplicationLaunchOptionsURLKey]; + NSString *sourceApplication = launchOptions[UIApplicationLaunchOptionsSourceApplicationKey]; + + if (launchedURL && + sourceApplication) { + Class loginManagerClass = NSClassFromString(@"FBSDKLoginManager"); + if (loginManagerClass) { + id annotation = launchOptions[UIApplicationLaunchOptionsAnnotationKey]; + id loginManager = [[loginManagerClass alloc] init]; + return [loginManager application:application + openURL:launchedURL + sourceApplication:sourceApplication + annotation:annotation]; + } + } + + return NO; +} + +#pragma mark - Internal Methods + +- (void)openURL:(NSURL *)url sender:(id)sender handler:(FBSDKSuccessBlock)handler +{ + _expectingBackground = YES; + _pendingURLOpen = sender; + dispatch_async(dispatch_get_main_queue(), ^{ + // Dispatch openURL calls to prevent hangs if we're inside the current app delegate's openURL flow already + NSOperatingSystemVersion iOS10Version = { .majorVersion = 10, .minorVersion = 0, .patchVersion = 0 }; + if ([FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS10Version]) { + if (@available(iOS 10.0, *)) { + [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) { + handler(success, nil); + }]; + } + } else { + BOOL opened = [[UIApplication sharedApplication] openURL:url]; + + if ([url.scheme hasPrefix:@"http"] && !opened) { + NSOperatingSystemVersion iOS8Version = { .majorVersion = 8, .minorVersion = 0, .patchVersion = 0 }; + if (![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS8Version]) { + // Safari openURL calls can wrongly return NO on iOS 7 so manually overwrite that case to YES. + // Otherwise we would rather trust in the actual result of openURL + opened = YES; + } + } + if (handler) { + handler(opened, nil); + } + } + }); +} + +- (void)openBridgeAPIRequest:(FBSDKBridgeAPIRequest *)request + useSafariViewController:(BOOL)useSafariViewController + fromViewController:(UIViewController *)fromViewController + completionBlock:(FBSDKBridgeAPIResponseBlock)completionBlock +{ + if (!request) { + return; + } + NSError *error; + NSURL *requestURL = [request requestURL:&error]; + if (!requestURL) { + FBSDKBridgeAPIResponse *response = [FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request error:error]; + completionBlock(response); + return; + } + _pendingRequest = request; + _pendingRequestCompletionBlock = [completionBlock copy]; + void (^handler)(BOOL, NSError *) = ^(BOOL openedURL, NSError *anError) { + if (!openedURL) { + self->_pendingRequest = nil; + self->_pendingRequestCompletionBlock = nil; + NSError *openedURLError; + if ([request.scheme hasPrefix:@"http"]) { + openedURLError = [NSError fbErrorWithCode:FBSDKErrorBrowserUnavailable + message:@"the app switch failed because the browser is unavailable"]; + } else { + openedURLError = [NSError fbErrorWithCode:FBSDKErrorAppVersionUnsupported + message:@"the app switch failed because the destination app is out of date"]; + } + FBSDKBridgeAPIResponse *response = [FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request + error:openedURLError]; + completionBlock(response); + return; + } + }; + if (useSafariViewController) { + [self openURLWithSafariViewController:requestURL sender:nil fromViewController:fromViewController handler:handler]; + } else { + [self openURL:requestURL sender:nil handler:handler]; + } +} + +- (void)openURLWithSafariViewController:(NSURL *)url + sender:(id)sender + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKSuccessBlock)handler +{ + if (![url.scheme hasPrefix:@"http"]) { + [self openURL:url sender:sender handler:handler]; + return; + } + + _expectingBackground = NO; + _pendingURLOpen = sender; + + if (@available(iOS 11.0, *)) { + if ([sender isAuthenticationURL:url]) { + [self _setSessionCompletionHandlerFromHandler:handler]; + [self _openURLWithAuthenticationSession:url]; + return; + } + } + + // trying to dynamically load SFSafariViewController class + // so for the cases when it is available we can send users through Safari View Controller flow + // in cases it is not available regular flow will be selected + Class SFSafariViewControllerClass = fbsdkdfl_SFSafariViewControllerClass(); + + if (SFSafariViewControllerClass) { + UIViewController *parent = fromViewController ?: [FBSDKInternalUtility topMostViewController]; + if (parent == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"There are no valid ViewController to present SafariViewController with", nil]; + return; + } + + NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; + NSURLQueryItem *sfvcQueryItem = [[NSURLQueryItem alloc] initWithName:@"sfvc" value:@"1"]; + components.queryItems = [components.queryItems arrayByAddingObject:sfvcQueryItem]; + url = components.URL; + FBSDKContainerViewController *container = [[FBSDKContainerViewController alloc] init]; + container.delegate = self; + if (parent.transitionCoordinator != nil) { + // Wait until the transition is finished before presenting SafariVC to avoid a blank screen. + [parent.transitionCoordinator animateAlongsideTransition:NULL completion:^(id context) { + // Note SFVC init must occur inside block to avoid blank screen. + self->_safariViewController = [[SFSafariViewControllerClass alloc] initWithURL:url]; + // Disable dismissing with edge pan gesture + self->_safariViewController.modalPresentationStyle = UIModalPresentationOverFullScreen; + [self->_safariViewController performSelector:@selector(setDelegate:) withObject:self]; + [container displayChildController:self->_safariViewController]; + [parent presentViewController:container animated:YES completion:nil]; + }]; + } else { + _safariViewController = [[SFSafariViewControllerClass alloc] initWithURL:url]; + // Disable dismissing with edge pan gesture + _safariViewController.modalPresentationStyle = UIModalPresentationOverFullScreen; + [_safariViewController performSelector:@selector(setDelegate:) withObject:self]; + [container displayChildController:_safariViewController]; + [parent presentViewController:container animated:YES completion:nil]; + } + + // Assuming Safari View Controller always opens + if (handler) { + handler(YES, nil); + } + } else { + [self openURL:url sender:sender handler:handler]; + } +} + +- (void)_openURLWithAuthenticationSession:(NSURL *)url +{ + Class AuthenticationSessionClass = fbsdkdfl_ASWebAuthenticationSessionClass(); + + if (!AuthenticationSessionClass) { + AuthenticationSessionClass = fbsdkdfl_SFAuthenticationSessionClass(); + } + + if (AuthenticationSessionClass != nil) { + if (_authenticationSession != nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"There is already a request for authenticated session. Cancelling active SFAuthenticationSession before starting the new one.", nil]; + [_authenticationSession cancel]; + } + _authenticationSession = [[AuthenticationSessionClass alloc] initWithURL:url + callbackURLScheme:[FBSDKInternalUtility appURLScheme] + completionHandler:_authenticationSessionCompletionHandler]; + _isRequestingSFAuthenticationSession = YES; + [_authenticationSession start]; + } +} + +- (void)_setSessionCompletionHandlerFromHandler:(void(^)(BOOL, NSError *))handler +{ + __weak typeof(self) weakSelf = self; + _authenticationSessionCompletionHandler = ^ (NSURL *aURL, NSError *error) { + typeof(self) strongSelf = weakSelf; + strongSelf->_isRequestingSFAuthenticationSession = NO; + handler(error == nil, error); + if (error == nil) { + [strongSelf application:[UIApplication sharedApplication] openURL:aURL sourceApplication:@"com.apple" annotation:nil]; + } + strongSelf->_authenticationSession = nil; + strongSelf->_authenticationSessionCompletionHandler = nil; + }; +} + +#pragma mark -- SFSafariViewControllerDelegate + +// This means the user tapped "Done" which we should treat as a cancellation. +- (void)safariViewControllerDidFinish:(UIViewController *)safariViewController +{ + if (_pendingURLOpen) { + id pendingURLOpen = _pendingURLOpen; + + _pendingURLOpen = nil; + + [pendingURLOpen application:nil + openURL:nil + sourceApplication:nil + annotation:nil]; + } + [self _cancelBridgeRequest]; + _safariViewController = nil; +} + +#pragma mark -- FBSDKContainerViewControllerDelegate + +- (void)viewControllerDidDisappear:(FBSDKContainerViewController *)viewController animated:(BOOL)animated +{ + if (_safariViewController) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"**ERROR**:\n The SFSafariViewController's parent view controller was dismissed.\n" + "This can happen if you are triggering login from a UIAlertController. Instead, make sure your top most view " + "controller will not be prematurely dismissed."]; + [self safariViewControllerDidFinish:_safariViewController]; + } +} + +#pragma mark - Helper Methods + +- (BOOL)_handleBridgeAPIResponseURL:(NSURL *)responseURL sourceApplication:(NSString *)sourceApplication +{ + FBSDKBridgeAPIRequest *request = _pendingRequest; + FBSDKBridgeAPIResponseBlock completionBlock = _pendingRequestCompletionBlock; + _pendingRequest = nil; + _pendingRequestCompletionBlock = NULL; + if (![responseURL.scheme isEqualToString:[FBSDKInternalUtility appURLScheme]]) { + return NO; + } + if (![responseURL.host isEqualToString:@"bridge"]) { + return NO; + } + if (!request) { + return NO; + } + if (!completionBlock) { + return YES; + } + NSError *error; + FBSDKBridgeAPIResponse *response = [FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request + responseURL:responseURL + sourceApplication:sourceApplication + error:&error]; + if (response) { + completionBlock(response); + return YES; + } else if (error) { + completionBlock([FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request error:error]); + return YES; + } else { + return NO; + } +} + +- (void)_cancelBridgeRequest +{ + if (_pendingRequest && _pendingRequestCompletionBlock) { + _pendingRequestCompletionBlock([FBSDKBridgeAPIResponse bridgeAPIResponseCancelledWithRequest:_pendingRequest]); + } + _pendingRequest = nil; + _pendingRequestCompletionBlock = NULL; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h new file mode 100644 index 0000000000..1245f32622 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h @@ -0,0 +1,34 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIRequest.h" + +@interface FBSDKBridgeAPICrypto : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + ++ (void)addCipherKeyToQueryParameters:(NSMutableDictionary *)queryParameters; ++ (NSDictionary *)decryptResponseForRequest:(FBSDKBridgeAPIRequest *)request + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef; ++ (void)reset; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m new file mode 100644 index 0000000000..80abc9617a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m @@ -0,0 +1,130 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPICrypto.h" + +#import "FBSDKBridgeAPIProtocol.h" +#import "FBSDKConstants.h" +#import "FBSDKCrypto.h" +#import "FBSDKError.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKSettings.h" +#import "FBSDKUtility.h" + +static NSString *const FBSDKBridgeAPICryptoCipherKey = @"cipher"; +static NSString *const FBSDKBridgeAPICryptoCipherKeyKey = @"cipher_key"; +static NSString *g_cipherKey = nil; + +@implementation FBSDKBridgeAPICrypto + +#pragma mark - Class Methods + ++ (void)addCipherKeyToQueryParameters:(NSMutableDictionary *)queryParameters +{ + [FBSDKInternalUtility dictionary:queryParameters setObject:[self _cipherKey] forKey:FBSDKBridgeAPICryptoCipherKeyKey]; +} + ++ (NSDictionary *)decryptResponseForRequest:(FBSDKBridgeAPIRequest *)request + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef +{ + if (errorRef != NULL) { + *errorRef = nil; + } + NSString *cipher = queryParameters[FBSDKBridgeAPICryptoCipherKey]; + if (!cipher) { + return queryParameters ?: @{}; + } + NSString *version = queryParameters[FBSDKBridgeAPIVersionKey]; + NSString *cipherKey = [self _cipherKey]; + if (!version || !cipherKey) { + if (errorRef != NULL) { + NSDictionary *userInfo = @{ + FBSDKErrorArgumentValueKey: queryParameters, + }; + *errorRef = [NSError fbErrorWithCode:FBSDKErrorEncryption + userInfo:userInfo + message:@"Error decrypting incoming query parameters." + underlyingError:nil]; + } + return nil; + } + NSArray *additionalSignedDataArray = @[ + [NSBundle mainBundle].bundleIdentifier, + [FBSDKSettings appID] ?: @"", + @"bridge", + request.methodName ?: @"", + version, + ]; + NSString *additionalSignedDataString = [additionalSignedDataArray componentsJoinedByString:@":"]; + NSData *additionalSignedData = [additionalSignedDataString dataUsingEncoding:NSUTF8StringEncoding]; + FBSDKCrypto *crypto = [[FBSDKCrypto alloc] initWithMasterKey:cipherKey]; + NSData *decryptedData = [crypto decrypt:cipher additionalSignedData:additionalSignedData]; + if (!decryptedData) { + if (errorRef != NULL) { + NSDictionary *userInfo = @{ + FBSDKErrorArgumentValueKey: @{ + @"cipher": cipher, + @"bundleIdentifier": additionalSignedDataArray[0], + @"appID": additionalSignedDataArray[1], + @"host": additionalSignedDataArray[2], + @"methodName": additionalSignedDataArray[3], + @"version": additionalSignedDataArray[4], + }, + }; + *errorRef = [NSError fbErrorWithCode:FBSDKErrorEncryption + userInfo:userInfo + message:@"Error decrypting incoming query parameters." + underlyingError:nil]; + } + return nil; + } + NSString *decryptedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding]; + NSDictionary *decryptedDictionary = [FBSDKUtility dictionaryWithQueryString:decryptedString]; + NSMutableDictionary *decryptedQueryParameters = [[NSMutableDictionary alloc] initWithDictionary:decryptedDictionary]; + decryptedQueryParameters[FBSDKBridgeAPIVersionKey] = version; + return [decryptedQueryParameters copy]; +} + ++ (void)reset +{ + [self _resetCipherKey]; +} + +#pragma mark - Helper Methods + ++ (NSString *)_cipherKey +{ + if (g_cipherKey) { + return g_cipherKey; + } + g_cipherKey = [[[NSUserDefaults standardUserDefaults] stringForKey:FBSDKBridgeAPICryptoCipherKeyKey] copy]; + if (g_cipherKey) { + return g_cipherKey; + } + return [self _resetCipherKey]; +} + ++ (NSString *)_resetCipherKey +{ + g_cipherKey = [[FBSDKCrypto makeMasterKey] copy]; + [[NSUserDefaults standardUserDefaults] setObject:g_cipherKey forKey:FBSDKBridgeAPICryptoCipherKeyKey]; + return g_cipherKey; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h new file mode 100644 index 0000000000..0a5a9b437e --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h @@ -0,0 +1,42 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocolType.h" + +@class FBSDKBridgeAPIRequest; + +FOUNDATION_EXPORT NSString *const FBSDKBridgeAPIAppIDKey; +FOUNDATION_EXPORT NSString *const FBSDKBridgeAPISchemeSuffixKey; +FOUNDATION_EXPORT NSString *const FBSDKBridgeAPIVersionKey; + +@protocol FBSDKBridgeAPIProtocol + +- (NSURL *)requestURLWithActionID:(NSString *)actionID + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + error:(NSError *__autoreleasing *)errorRef; +- (NSDictionary *)responseParametersForActionID:(NSString *)actionID + queryParameters:(NSDictionary *)queryParameters + cancelled:(BOOL *)cancelledRef + error:(NSError *__autoreleasing *)errorRef; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h new file mode 100644 index 0000000000..b04e3592bb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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(NSUInteger, FBSDKBridgeAPIProtocolType) +{ + FBSDKBridgeAPIProtocolTypeNative, + FBSDKBridgeAPIProtocolTypeWeb, +}; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h new file mode 100644 index 0000000000..4455e2268b --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h @@ -0,0 +1,35 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocol.h" +#import "FBSDKBridgeAPIRequest.h" + +@interface FBSDKBridgeAPIRequest () + +- (instancetype)initWithProtocol:(id)protocol + protocolType:(FBSDKBridgeAPIProtocolType)protocolType + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + userInfo:(NSDictionary *)userInfo +NS_DESIGNATED_INITIALIZER; + +@property (nonatomic, strong, readonly) id protocol; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h new file mode 100644 index 0000000000..04689a3a7c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h @@ -0,0 +1,46 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocolType.h" + +@interface FBSDKBridgeAPIRequest : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; ++ (instancetype)bridgeAPIRequestWithProtocolType:(FBSDKBridgeAPIProtocolType)protocolType + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + userInfo:(NSDictionary *)userInfo; + +@property (nonatomic, copy, readonly) NSString *actionID; +@property (nonatomic, copy, readonly) NSString *methodName; +@property (nonatomic, copy, readonly) NSString *methodVersion; +@property (nonatomic, copy, readonly) NSDictionary *parameters; +@property (nonatomic, assign, readonly) FBSDKBridgeAPIProtocolType protocolType; +@property (nonatomic, copy, readonly) NSString *scheme; +@property (nonatomic, copy, readonly) NSDictionary *userInfo; + +- (NSURL *)requestURL:(NSError *__autoreleasing *)errorRef; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m new file mode 100644 index 0000000000..608bdce4a8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m @@ -0,0 +1,154 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIRequest.h" +#import "FBSDKBridgeAPIRequest+Private.h" + +#import "FBSDKBridgeAPICrypto.h" +#import "FBSDKBridgeAPIProtocolNativeV1.h" +#import "FBSDKBridgeAPIProtocolWebV1.h" +#import "FBSDKBridgeAPIProtocolWebV2.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKSettings.h" +#import "FBSDKUtility.h" + +NSString *const FBSDKBridgeAPIAppIDKey = @"app_id"; +NSString *const FBSDKBridgeAPISchemeSuffixKey = @"scheme_suffix"; +NSString *const FBSDKBridgeAPIVersionKey = @"version"; + +@implementation FBSDKBridgeAPIRequest + +#pragma mark - Class Methods + ++ (instancetype)bridgeAPIRequestWithProtocolType:(FBSDKBridgeAPIProtocolType)protocolType + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + userInfo:(NSDictionary *)userInfo +{ + return [[self alloc] initWithProtocol:[self _protocolForType:protocolType scheme:scheme] + protocolType:protocolType + scheme:scheme + methodName:methodName + methodVersion:methodVersion + parameters:parameters + userInfo:userInfo]; +} + ++ (NSDictionary *)protocolMap +{ + static NSDictionary *_protocolMap; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _protocolMap = @{ + @(FBSDKBridgeAPIProtocolTypeNative): @{ + FBSDK_CANOPENURL_FACEBOOK:[[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:@"fbapi20130214"], + FBSDK_CANOPENURL_MESSENGER:[[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:@"fb-messenger-share-api"], + FBSDK_CANOPENURL_MSQRD_PLAYER:[[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:@"msqrdplayer-api20170208"] + }, + @(FBSDKBridgeAPIProtocolTypeWeb): @{ + @"https": [[FBSDKBridgeAPIProtocolWebV1 alloc] init], + @"web": [[FBSDKBridgeAPIProtocolWebV2 alloc] init] + }, + }; + }); + return _protocolMap; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithProtocol:(id)protocol + protocolType:(FBSDKBridgeAPIProtocolType)protocolType + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + userInfo:(NSDictionary *)userInfo +{ + if (!protocol) { + return nil; + } + if ((self = [super init])) { + _protocol = protocol; + _protocolType = protocolType; + _scheme = [scheme copy]; + _methodName = [methodName copy]; + _methodVersion = [methodVersion copy]; + _parameters = [parameters copy]; + _userInfo = [userInfo copy]; + + _actionID = [NSUUID UUID].UUIDString; + } + return self; +} + +#pragma mark - Public Methods + +- (NSURL *)requestURL:(NSError *__autoreleasing *)errorRef +{ + NSURL *requestURL = [_protocol requestURLWithActionID:self.actionID + scheme:self.scheme + methodName:self.methodName + methodVersion:self.methodVersion + parameters:self.parameters + error:errorRef]; + if (!requestURL) { + return nil; + } + + [FBSDKInternalUtility validateURLSchemes]; + + NSDictionary *requestQueryParameters = [FBSDKUtility dictionaryWithQueryString:requestURL.query]; + NSMutableDictionary *queryParameters = [[NSMutableDictionary alloc] initWithDictionary:requestQueryParameters]; + [FBSDKBridgeAPICrypto addCipherKeyToQueryParameters:queryParameters]; + [FBSDKInternalUtility dictionary:queryParameters setObject:[FBSDKSettings appID] forKey:FBSDKBridgeAPIAppIDKey]; + [FBSDKInternalUtility dictionary:queryParameters + setObject:[FBSDKSettings appURLSchemeSuffix] + forKey:FBSDKBridgeAPISchemeSuffixKey]; + requestURL = [FBSDKInternalUtility URLWithScheme:requestURL.scheme + host:requestURL.host + path:requestURL.path + queryParameters:queryParameters + error:errorRef]; + return requestURL; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + ++ (id)_protocolForType:(FBSDKBridgeAPIProtocolType)type scheme:(NSString *)scheme +{ + id protocol = [self protocolMap][@(type)][scheme]; + if (type == FBSDKBridgeAPIProtocolTypeWeb) { + return protocol; + } + NSURLComponents *components = [[NSURLComponents alloc] init]; + components.scheme = scheme; + components.path = @"/"; + if ([[UIApplication sharedApplication] canOpenURL:components.URL]) { + return protocol; + } + return nil; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h new file mode 100644 index 0000000000..a04cd9086c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h @@ -0,0 +1,42 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIRequest.h" + +@interface FBSDKBridgeAPIResponse : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + ++ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request error:(NSError *)error; ++ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request + responseURL:(NSURL *)responseURL + sourceApplication:(NSString *)sourceApplication + error:(NSError *__autoreleasing *)errorRef; ++ (instancetype)bridgeAPIResponseCancelledWithRequest:(FBSDKBridgeAPIRequest *)request; + +@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; +@property (nonatomic, copy, readonly) NSError *error; +@property (nonatomic, copy, readonly) FBSDKBridgeAPIRequest *request; +@property (nonatomic, copy, readonly) NSDictionary *responseParameters; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m new file mode 100644 index 0000000000..282d4c3e87 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m @@ -0,0 +1,128 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIResponse.h" + +#import "FBSDKBridgeAPICrypto.h" +#import "FBSDKBridgeAPIProtocol.h" +#import "FBSDKBridgeAPIProtocolType.h" +#import "FBSDKBridgeAPIRequest+Private.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKTypeUtility.h" +#import "FBSDKUtility.h" + +@interface FBSDKBridgeAPIResponse () +- (instancetype)initWithRequest:(FBSDKBridgeAPIRequest *)request + responseParameters:(NSDictionary *)responseParameters + cancelled:(BOOL)cancelled + error:(NSError *)error +NS_DESIGNATED_INITIALIZER; +@end + +@implementation FBSDKBridgeAPIResponse + +#pragma mark - Class Methods + ++ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request error:(NSError *)error +{ + return [[self alloc] initWithRequest:request + responseParameters:nil + cancelled:NO + error:error]; +} + ++ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request + responseURL:(NSURL *)responseURL + sourceApplication:(NSString *)sourceApplication + error:(NSError *__autoreleasing *)errorRef +{ + FBSDKBridgeAPIProtocolType protocolType = request.protocolType; + switch (protocolType) { + case FBSDKBridgeAPIProtocolTypeNative:{ + if (![FBSDKInternalUtility isFacebookBundleIdentifier:sourceApplication]) { + [FBSDKBridgeAPICrypto reset]; + return nil; + } + break; + } + case FBSDKBridgeAPIProtocolTypeWeb:{ + if (![FBSDKInternalUtility isSafariBundleIdentifier:sourceApplication]) { + [FBSDKBridgeAPICrypto reset]; + return nil; + } + break; + } + } + NSDictionary *queryParameters = [FBSDKUtility dictionaryWithQueryString:responseURL.query]; + queryParameters = [FBSDKBridgeAPICrypto decryptResponseForRequest:request + queryParameters:queryParameters + error:errorRef]; + if (!queryParameters) { + return nil; + } + id protocol = request.protocol; + BOOL cancelled; + NSError *error; + NSDictionary *responseParameters = [protocol responseParametersForActionID:request.actionID + queryParameters:queryParameters + cancelled:&cancelled + error:&error]; + if (errorRef != NULL) { + *errorRef = error; + } + if (!responseParameters) { + return nil; + } + return [[self alloc] initWithRequest:request + responseParameters:responseParameters + cancelled:cancelled + error:error]; +} + ++ (instancetype)bridgeAPIResponseCancelledWithRequest:(FBSDKBridgeAPIRequest *)request +{ + return [[self alloc] initWithRequest:request + responseParameters:nil + cancelled:YES + error:nil]; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithRequest:(FBSDKBridgeAPIRequest *)request + responseParameters:(NSDictionary *)responseParameters + cancelled:(BOOL)cancelled + error:(NSError *)error +{ + if ((self = [super init])) { + _request = [request copy]; + _responseParameters = [responseParameters copy]; + _cancelled = cancelled; + _error = [error copy]; + } + return self; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h new file mode 100644 index 0000000000..54cd1674b7 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h @@ -0,0 +1,41 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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. + +@protocol FBSDKURLOpening + +// Implementations should make sure they can handle nil parameters +// which is possible in SafariViewController. +// see canOpenURL below. +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +// create a different handler to return YES/NO if the receiver can process the above openURL:. +// This is separated so that we can process the openURL: in callbacks, while still returning +// the result of canOpenURL synchronously in FBSDKApplicationDelegate +- (BOOL)canOpenURL:(NSURL *)url + forApplication:(UIApplication *)application + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +- (void)applicationDidBecomeActive:(UIApplication *)application; + +- (BOOL)isAuthenticationURL:(NSURL *)url; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h new file mode 100644 index 0000000000..ba001f09b3 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h @@ -0,0 +1,71 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocol.h" + +typedef struct +{ + __unsafe_unretained NSString *bridgeArgs; + __unsafe_unretained NSString *methodArgs; + __unsafe_unretained NSString *methodVersion; +} FBSDKBridgeAPIProtocolNativeV1OutputKeysStruct; +FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1OutputKeysStruct FBSDKBridgeAPIProtocolNativeV1OutputKeys; + +typedef struct +{ + __unsafe_unretained NSString *actionID; + __unsafe_unretained NSString *appIcon; + __unsafe_unretained NSString *appName; + __unsafe_unretained NSString *sdkVersion; +} FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeysStruct; +FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys; + +typedef struct +{ + __unsafe_unretained NSString *bridgeArgs; + __unsafe_unretained NSString *methodResults; +} FBSDKBridgeAPIProtocolNativeV1InputKeysStruct; +FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1InputKeysStruct FBSDKBridgeAPIProtocolNativeV1InputKeys; + +typedef struct +{ + __unsafe_unretained NSString *actionID; + __unsafe_unretained NSString *error; +} FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct; +FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys; + +@interface FBSDKBridgeAPIProtocolNativeV1 : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithAppScheme:(NSString *)appScheme; +- (instancetype)initWithAppScheme:(NSString *)appScheme + pasteboard:(UIPasteboard *)pasteboard + dataLengthThreshold:(NSUInteger)dataLengthThreshold + includeAppIcon:(BOOL)includeAppIcon +NS_DESIGNATED_INITIALIZER; + +@property (nonatomic, copy, readonly) NSString *appScheme; +@property (nonatomic, assign, readonly) NSUInteger dataLengthThreshold; +@property (nonatomic, assign, readonly) BOOL includeAppIcon; +@property (nonatomic, strong, readonly) UIPasteboard *pasteboard; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m new file mode 100644 index 0000000000..00b1b3c2ac --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m @@ -0,0 +1,335 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocolNativeV1.h" + +#import + +#import "FBSDKApplicationDelegate+Internal.h" +#import "FBSDKBase64.h" +#import "FBSDKBridgeAPIRequest.h" +#import "FBSDKConstants.h" +#import "FBSDKError.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKSettings.h" +#import "FBSDKTypeUtility.h" + +#define FBSDKBridgeAPIProtocolNativeV1BridgeMaxBase64DataLengthThreshold (1024 * 16) + +const FBSDKBridgeAPIProtocolNativeV1OutputKeysStruct FBSDKBridgeAPIProtocolNativeV1OutputKeys = +{ + .bridgeArgs = @"bridge_args", + .methodArgs = @"method_args", + .methodVersion = @"version", +}; + +const FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys = +{ + .actionID = @"action_id", + .appIcon = @"app_icon", + .appName = @"app_name", + .sdkVersion = @"sdk_version", +}; + +const FBSDKBridgeAPIProtocolNativeV1InputKeysStruct FBSDKBridgeAPIProtocolNativeV1InputKeys = +{ + .bridgeArgs = @"bridge_args", + .methodResults = @"method_results", +}; + +const FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys = +{ + .actionID = @"action_id", + .error = @"error", +}; + +static const struct +{ + __unsafe_unretained NSString *isBase64; + __unsafe_unretained NSString *isPasteboard; + __unsafe_unretained NSString *tag; + __unsafe_unretained NSString *value; +} FBSDKBridgeAPIProtocolNativeV1DataKeys = +{ + .isBase64 = @"isBase64", + .isPasteboard = @"isPasteboard", + .tag = @"tag", + .value = @"fbAppBridgeType_jsonReadyValue", +}; + +static NSString *const FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey = @"com.facebook.Facebook.FBAppBridgeType"; + +static const struct +{ + __unsafe_unretained NSString *data; + __unsafe_unretained NSString *image; +} FBSDKBridgeAPIProtocolNativeV1DataTypeTags = +{ + .data = @"data", + // we serialize jpegs but use png for backward compatibility - it is any image format that UIImage can handle + .image = @"png", +}; + +static const struct +{ + __unsafe_unretained NSString *code; + __unsafe_unretained NSString *domain; + __unsafe_unretained NSString *userInfo; +} FBSDKBridgeAPIProtocolNativeV1ErrorKeys = +{ + .code = @"code", + .domain = @"domain", + .userInfo = @"user_info", +}; + +@implementation FBSDKBridgeAPIProtocolNativeV1 + +#pragma mark - Object Lifecycle + +- (instancetype)initWithAppScheme:(NSString *)appScheme +{ + return [self initWithAppScheme:appScheme + pasteboard:[UIPasteboard generalPasteboard] + dataLengthThreshold:FBSDKBridgeAPIProtocolNativeV1BridgeMaxBase64DataLengthThreshold + includeAppIcon:YES]; +} + +- (instancetype)initWithAppScheme:(NSString *)appScheme + pasteboard:(UIPasteboard *)pasteboard + dataLengthThreshold:(NSUInteger)dataLengthThreshold + includeAppIcon:(BOOL)includeAppIcon +{ + if ((self = [super init])) { + _appScheme = [appScheme copy]; + _pasteboard = pasteboard; + _dataLengthThreshold = dataLengthThreshold; + _includeAppIcon = includeAppIcon; + } + return self; +} + +#pragma mark - FBSDKBridgeAPIProtocol + +- (NSURL *)requestURLWithActionID:(NSString *)actionID + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + error:(NSError *__autoreleasing *)errorRef +{ + NSString *const host = @"dialog"; + NSString *const path = [@"/" stringByAppendingString:methodName]; + + NSMutableDictionary *const queryParameters = [[NSMutableDictionary alloc] init]; + [FBSDKInternalUtility dictionary:queryParameters setObject:methodVersion + forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodVersion]; + + if (parameters.count) { + NSString *const parametersString = [self _JSONStringForObject:parameters enablePasteboard:YES error:errorRef]; + if (!parametersString) { + return nil; + } + NSString *const escapedParametersString = [parametersString stringByReplacingOccurrencesOfString:@"&" + withString:@"%26" + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, + parametersString.length)]; + [FBSDKInternalUtility dictionary:queryParameters + setObject:escapedParametersString + forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodArgs]; + } + + NSDictionary *const bridgeParameters = [self _bridgeParametersWithActionID:actionID error:errorRef]; + if (!bridgeParameters) { + return nil; + } + NSString *const bridgeParametersString = [self _JSONStringForObject:bridgeParameters enablePasteboard:NO error:errorRef]; + if (!bridgeParametersString) { + return nil; + } + [FBSDKInternalUtility dictionary:queryParameters + setObject:bridgeParametersString + forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.bridgeArgs]; + + + return [FBSDKInternalUtility URLWithScheme:self.appScheme + host:host + path:path + queryParameters:queryParameters + error:errorRef]; +} + +- (NSDictionary *)responseParametersForActionID:(NSString *)actionID + queryParameters:(NSDictionary *)queryParameters + cancelled:(BOOL *)cancelledRef + error:(NSError *__autoreleasing *)errorRef +{ + if (cancelledRef != NULL) { + *cancelledRef = NO; + } + if (errorRef != NULL) { + *errorRef = nil; + } + NSError *error; + NSString *bridgeParametersJSON = queryParameters[FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs]; + NSDictionary *bridgeParameters = [FBSDKInternalUtility objectForJSONString:bridgeParametersJSON error:&error]; + bridgeParameters = [FBSDKTypeUtility dictionaryValue:bridgeParameters]; + if (!bridgeParameters) { + if (error && (errorRef != NULL)) { + *errorRef = [NSError fbInvalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs + value:bridgeParametersJSON + message:@"Invalid bridge_args." + underlyingError:error]; + } + return nil; + } + NSString *responseActionID = bridgeParameters[FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys.actionID]; + responseActionID = [FBSDKTypeUtility stringValue:responseActionID]; + if (![responseActionID isEqualToString:actionID]) { + return nil; + } + NSDictionary *errorDictionary = bridgeParameters[FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys.error]; + errorDictionary = [FBSDKTypeUtility dictionaryValue:errorDictionary]; + if (errorDictionary) { + error = [self _errorWithDictionary:errorDictionary]; + if (errorRef != NULL) { + *errorRef = error; + } + return nil; + } + NSString *resultParametersJSON = queryParameters[FBSDKBridgeAPIProtocolNativeV1InputKeys.methodResults]; + NSDictionary *resultParameters = [FBSDKInternalUtility objectForJSONString:resultParametersJSON error:&error]; + if (!resultParameters) { + if (errorRef != NULL) { + *errorRef = [NSError fbInvalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.methodResults + value:resultParametersJSON + message:@"Invalid method_results." + underlyingError:error]; + } + return nil; + } + if (cancelledRef != NULL) { + NSString *completionGesture = [FBSDKTypeUtility stringValue:resultParameters[@"completionGesture"]]; + *cancelledRef = [completionGesture isEqualToString:@"cancel"]; + } + return resultParameters; +} + +#pragma mark - Helper Methods + +- (UIImage *)_appIcon +{ + if (!_includeAppIcon) { + return nil; + } + NSArray *files = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIcons"] + [@"CFBundlePrimaryIcon"] + [@"CFBundleIconFiles"]; + if (!files.count) { + return nil; + } + return [UIImage imageNamed:files[0]]; +} + +- (NSDictionary *)_bridgeParametersWithActionID:(NSString *)actionID error:(NSError *__autoreleasing *)errorRef +{ + NSMutableDictionary *bridgeParameters = [[NSMutableDictionary alloc] init]; + [FBSDKInternalUtility dictionary:bridgeParameters setObject:actionID + forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.actionID]; + [FBSDKInternalUtility dictionary:bridgeParameters setObject:[self _appIcon] + forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.appIcon]; + [FBSDKInternalUtility dictionary:bridgeParameters setObject:[FBSDKSettings displayName] + forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.appName]; + [FBSDKInternalUtility dictionary:bridgeParameters setObject:[FBSDKSettings sdkVersion] + forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.sdkVersion]; + return bridgeParameters; +} + +- (NSError *)_errorWithDictionary:(NSDictionary *)dictionary +{ + if (!dictionary) { + return nil; + } + NSString *domain = [FBSDKTypeUtility stringValue:dictionary[FBSDKBridgeAPIProtocolNativeV1ErrorKeys.domain]] ?: + FBSDKErrorDomain; + NSInteger code = [FBSDKTypeUtility integerValue:dictionary[FBSDKBridgeAPIProtocolNativeV1ErrorKeys.code]] ?: + FBSDKErrorUnknown; + NSDictionary *userInfo = [FBSDKTypeUtility dictionaryValue:dictionary[FBSDKBridgeAPIProtocolNativeV1ErrorKeys.userInfo]]; + return [NSError errorWithDomain:domain code:code userInfo:userInfo]; +} + +- (NSString *)_JSONStringForObject:(id)object enablePasteboard:(BOOL)enablePasteboard error:(NSError **)errorRef +{ + __block BOOL didAddToPasteboard = NO; + return [FBSDKInternalUtility JSONStringForObject:object error:errorRef invalidObjectHandler:^id(id invalidObject, BOOL *stop) { + NSString *dataTag = FBSDKBridgeAPIProtocolNativeV1DataTypeTags.data; + if ([invalidObject isKindOfClass:[UIImage class]]) { + UIImage *image = (UIImage *)invalidObject; + // due to backward compatibility, we must send UIImage as NSData even though UIPasteboard can handle UIImage + invalidObject = UIImageJPEGRepresentation(image, [FBSDKSettings JPEGCompressionQuality]); + dataTag = FBSDKBridgeAPIProtocolNativeV1DataTypeTags.image; + } + if ([invalidObject isKindOfClass:[NSData class]]) { + NSData *data = (NSData *)invalidObject; + NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; + if (didAddToPasteboard || !enablePasteboard || !self->_pasteboard || (data.length < self->_dataLengthThreshold)) { + dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.isBase64] = @YES; + dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.tag] = dataTag; + [FBSDKInternalUtility dictionary:dictionary + setObject:[FBSDKBase64 encodeData:data] + forKey:FBSDKBridgeAPIProtocolNativeV1DataKeys.value]; + } else { + dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.isPasteboard] = @YES; + dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.tag] = dataTag; + dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.value] = self->_pasteboard.name; + [self->_pasteboard setData:data forPasteboardType:FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey]; + // this version of the protocol only supports a single item on the pasteboard, so if when we add an item, make + // sure we don't add another item + didAddToPasteboard = YES; + // if we are adding this to the general pasteboard, then we want to remove it when we are done with the share. + // the Facebook app will not clear the value with this version of the protocol, so we should do it when the app + // becomes active again + NSString *pasteboardName = self->_pasteboard.name; + if ([pasteboardName isEqualToString:UIPasteboardNameGeneral] || + [pasteboardName isEqualToString:UIPasteboardNameFind]) { + [[self class] clearData:data fromPasteboardOnApplicationDidBecomeActive:self->_pasteboard]; + } + } + return dictionary; + } else if ([invalidObject isKindOfClass:[NSURL class]]) { + return ((NSURL *)invalidObject).absoluteString; + } + return invalidObject; + }]; +} + ++ (void)clearData:(NSData *)data fromPasteboardOnApplicationDidBecomeActive:(UIPasteboard *)pasteboard +{ + void(^notificationBlock)(NSNotification *) = ^(NSNotification *note){ + NSData *pasteboardData = [pasteboard dataForPasteboardType:FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey]; + if ([data isEqualToData:pasteboardData]) { + [pasteboard setData:[NSData data] forPasteboardType:FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey]; + } + }; + [[NSNotificationCenter defaultCenter] addObserverForName:FBSDKApplicationDidBecomeActiveNotification + object:[FBSDKApplicationDelegate sharedInstance] + queue:nil + usingBlock:notificationBlock]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h new file mode 100644 index 0000000000..c7b28f4f2c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocol.h" + +@interface FBSDKBridgeAPIProtocolWebV1 : NSObject + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m new file mode 100644 index 0000000000..51af66fe17 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m @@ -0,0 +1,115 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocolWebV1.h" + +#import + +#import "FBSDKBase64.h" +#import "FBSDKBridgeAPIRequest.h" +#import "FBSDKError.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKSettings.h" +#import "FBSDKTypeUtility.h" + +#define FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_ACTION_ID_KEY @"action_id" +#define FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY @"bridge_args" + +@implementation FBSDKBridgeAPIProtocolWebV1 + +#pragma mark - FBSDKBridgeAPIProtocol + +- (NSURL *)requestURLWithActionID:(NSString *)actionID + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + error:(NSError *__autoreleasing *)errorRef +{ + NSMutableDictionary *queryParameters = [[NSMutableDictionary alloc] initWithDictionary:parameters]; + queryParameters[@"display"] = @"touch"; + NSString *bridgeArgs = [FBSDKInternalUtility JSONStringForObject:@{ FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_ACTION_ID_KEY: actionID } + error:NULL + invalidObjectHandler:NULL]; + NSDictionary *redirectQueryParameters = @{ FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY: bridgeArgs }; + NSURL *redirectURL = [FBSDKInternalUtility appURLWithHost:@"bridge" + path:methodName + queryParameters:redirectQueryParameters + error:NULL]; + [FBSDKInternalUtility dictionary:queryParameters setObject:redirectURL forKey:@"redirect_uri"]; + [queryParameters addEntriesFromDictionary:parameters]; + return [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" + path:[@"/dialog/" stringByAppendingString:methodName] + queryParameters:queryParameters + error:NULL]; +} + +- (NSDictionary *)responseParametersForActionID:(NSString *)actionID + queryParameters:(NSDictionary *)queryParameters + cancelled:(BOOL *)cancelledRef + error:(NSError *__autoreleasing *)errorRef +{ + if (errorRef != NULL) { + *errorRef = nil; + } + NSInteger errorCode = [FBSDKTypeUtility integerValue:queryParameters[@"error_code"]]; + switch (errorCode) { + case 0:{ + // good to go, handle the other codes and bail + break; + } + case 4201:{ + return @{ + @"completionGesture": @"cancel", + }; + break; + } + default:{ + if (errorRef != NULL) { + *errorRef = [NSError fbErrorWithCode:errorCode + message:[FBSDKTypeUtility stringValue:queryParameters[@"error_message"]]]; + } + return nil; + break; + } + } + + NSError *error; + NSString *bridgeParametersJSON = [FBSDKTypeUtility stringValue:queryParameters[FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY]]; + NSDictionary *bridgeParameters = [FBSDKInternalUtility objectForJSONString:bridgeParametersJSON error:&error]; + if (!bridgeParameters) { + if (error && (errorRef != NULL)) { + *errorRef = [NSError fbInvalidArgumentErrorWithName:FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY + value:bridgeParametersJSON + message:nil + underlyingError:error]; + } + return nil; + } + NSString *responseActionID = bridgeParameters[FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_ACTION_ID_KEY]; + responseActionID = [FBSDKTypeUtility stringValue:responseActionID]; + if (![responseActionID isEqualToString:actionID]) { + return nil; + } + NSMutableDictionary *resultParameters = [queryParameters mutableCopy]; + [resultParameters removeObjectForKey:FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY]; + resultParameters[@"didComplete"] = @YES; + return resultParameters; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h new file mode 100644 index 0000000000..3d7e340409 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocol.h" + +@interface FBSDKBridgeAPIProtocolWebV2 : NSObject + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m new file mode 100644 index 0000000000..36b3bc00fb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m @@ -0,0 +1,130 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKBridgeAPIProtocolWebV2.h" + +#import "FBSDKBridgeAPIProtocolNativeV1.h" +#import "FBSDKDialogConfiguration.h" +#import "FBSDKError.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKServerConfiguration.h" +#import "FBSDKServerConfigurationManager.h" +#import "FBSDKUtility.h" + +@implementation FBSDKBridgeAPIProtocolWebV2 +{ + FBSDKBridgeAPIProtocolNativeV1 *_nativeProtocol; +} + +#pragma mark - Object Lifecycle + +- (instancetype)init +{ + if ((self = [super init])) { + _nativeProtocol = [[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:nil + pasteboard:nil + dataLengthThreshold:0 + includeAppIcon:NO]; + } + return self; +} + +#pragma mark - FBSDKBridgeAPIProtocol + +- (NSURL *)_redirectURLWithActionID:(NSString *)actionID methodName:(NSString *)methodName error:(NSError **)errorRef +{ + NSDictionary *queryParameters = nil; + if (actionID) { + NSDictionary *bridgeArgs = @{ FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys.actionID: actionID }; + NSString *bridgeArgsString = [FBSDKInternalUtility JSONStringForObject:bridgeArgs + error:NULL + invalidObjectHandler:NULL]; + queryParameters = @{ FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs: bridgeArgsString }; + } + return [FBSDKInternalUtility appURLWithHost:@"bridge" path:methodName queryParameters:queryParameters error:errorRef]; +} + +- (NSURL *)_requestURLForDialogConfiguration:(FBSDKDialogConfiguration *)dialogConfiguration error:(NSError **)errorRef +{ + NSURL *requestURL = dialogConfiguration.URL; + if (!requestURL.scheme) { + requestURL = [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" + path:requestURL.path + queryParameters:nil + defaultVersion:@"" + error:errorRef]; + } + return requestURL; +} + +- (NSURL *)requestURLWithActionID:(NSString *)actionID + scheme:(NSString *)scheme + methodName:(NSString *)methodName + methodVersion:(NSString *)methodVersion + parameters:(NSDictionary *)parameters + error:(NSError *__autoreleasing *)errorRef +{ + FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; + FBSDKDialogConfiguration *dialogConfiguration = [serverConfiguration dialogConfigurationForDialogName:methodName]; + if (!dialogConfiguration) { + if (errorRef != NULL) { + *errorRef = [NSError fbErrorWithCode:FBSDKErrorDialogUnavailable message:nil]; + } + return nil; + } + + NSURL *requestURL = [_nativeProtocol requestURLWithActionID:actionID + scheme:scheme + methodName:methodName + methodVersion:methodVersion + parameters:parameters error:errorRef]; + if (!requestURL) { + return nil; + } + + NSMutableDictionary *queryParameters = [[FBSDKUtility dictionaryWithQueryString:requestURL.query] mutableCopy]; + queryParameters[@"ios_bundle_id"] = [NSBundle mainBundle].bundleIdentifier; + NSURL *redirectURL = [self _redirectURLWithActionID:nil methodName:methodName error:errorRef]; + if (!redirectURL) { + return nil; + } + queryParameters[@"redirect_url"] = redirectURL; + + requestURL = [self _requestURLForDialogConfiguration:dialogConfiguration error:errorRef]; + if (!requestURL) { + return nil; + } + return [FBSDKInternalUtility URLWithScheme:requestURL.scheme + host:requestURL.host + path:requestURL.path + queryParameters:queryParameters + error:errorRef]; +} + +- (NSDictionary *)responseParametersForActionID:(NSString *)actionID + queryParameters:(NSDictionary *)queryParameters + cancelled:(BOOL *)cancelledRef + error:(NSError *__autoreleasing *)errorRef +{ + return [_nativeProtocol responseParametersForActionID:actionID + queryParameters:queryParameters + cancelled:cancelledRef + error:errorRef]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h new file mode 100644 index 0000000000..ae84c5d29f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h @@ -0,0 +1,67 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKCrypto : NSObject + +/** + Generate numOfBytes random data. + + This calls the system-provided function SecRandomCopyBytes, based on /dev/random. + */ ++ (NSData *)randomBytes:(NSUInteger)numOfBytes; + +/** + * Generate numOfBytes random data, base64-encoded. + * This calls the system-provided function SecRandomCopyBytes, based on /dev/random. + */ ++ (NSString *)randomString:(NSUInteger)numOfBytes; + +/** + Generate a fresh master key using SecRandomCopyBytes, the result is encoded in base64/. + */ ++ (NSString *)makeMasterKey; + +/** + Initialize with a base64-encoded master key. + + This key and the current derivation function will be used to generate the encryption key and the mac key. + */ +- (instancetype)initWithMasterKey:(NSString *)masterKey; + +/** + Initialize with base64-encoded encryption key and mac key. + */ +- (instancetype)initWithEncryptionKey:(NSString *)encryptionKey macKey:(NSString *)macKey; + +/** + Encrypt plainText and return the base64 encoded result. + + MAC computation involves additionalDataToSign. + */ +- (NSString *)encrypt:(NSData *)plainText additionalDataToSign:(NSData *)additionalDataToSign; + +/** + Decrypt base64EncodedCipherText. + + MAC computation involves additionalSignedData. + */ +- (NSData *)decrypt:(NSString *)base64EncodedCipherText additionalSignedData:(NSData *)additionalSignedData; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m new file mode 100644 index 0000000000..7e17cc451a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m @@ -0,0 +1,287 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCrypto.h" + +#import +#import +#import + +#import "FBSDKBase64.h" +#import "FBSDKDynamicFrameworkLoader.h" + +static const uint8_t kFBSDK_CRYPTO_CURRENT_VERSION = 1; +static const uint8_t kFBSDK_CRYPTO_CURRENT_MASTER_KEY_LENGTH = 16; + +static inline void FBSDKCryptoWriteIntBigEndian(uint8_t *buffer, uint32_t value) +{ + buffer[3] = (uint8_t)(value & 0xff); + buffer[2] = (uint8_t)((value >> 8) & 0xff); + buffer[1] = (uint8_t)((value >> 16) & 0xff); + buffer[0] = (uint8_t)((value >> 24) & 0xff); +} + +static inline void FBSDKCryptoBlankData(NSData *data) +{ + if (!data) { + return; + } + bzero((void *) [data bytes], [data length]); +} + +// Note: the following simple derivation function is NOT suitable for passwords or weak keys +static inline NSData *FBSDKCryptoMakeSubKey(uint8_t *key, size_t len, uint32_t idx) +{ + if (!key || len < 10) { + return nil; + } + + size_t macBufferLength = 4; + uint8_t macBuffer[4]; + FBSDKCryptoWriteIntBigEndian(macBuffer, idx); + + uint8_t *result = malloc(CC_SHA256_DIGEST_LENGTH); + if (!result) { + return nil; + } + + CCHmac(kCCHmacAlgSHA256, key, len, macBuffer, macBufferLength, result); + + return [NSData dataWithBytesNoCopy:result length:CC_SHA256_DIGEST_LENGTH]; +} + +@implementation FBSDKCrypto +{ + NSData *_encryptionKeyData; + NSData *_macKeyData; +} + +#pragma mark - Class Methods + ++ (NSString *)makeMasterKey +{ + NSData *masterKeyData = [FBSDKCrypto randomBytes:kFBSDK_CRYPTO_CURRENT_MASTER_KEY_LENGTH + 1]; + + // force the first byte to be the crypto version + uint8_t *first = (uint8_t *)masterKeyData.bytes; + *first = kFBSDK_CRYPTO_CURRENT_VERSION; + + NSString *masterKey = [FBSDKBase64 encodeData:masterKeyData]; + FBSDKCryptoBlankData(masterKeyData); + return masterKey; +} + ++ (NSData *)randomBytes:(NSUInteger)numOfBytes +{ + uint8_t *buffer = malloc(numOfBytes); + int result = fbsdkdfl_SecRandomCopyBytes([FBSDKDynamicFrameworkLoader loadkSecRandomDefault], numOfBytes, buffer); + if (result != 0) { + free(buffer); + return nil; + } + return [NSData dataWithBytesNoCopy:buffer length:numOfBytes]; +} + ++ (NSString *)randomString:(NSUInteger)numOfBytes +{ + NSData *randomStringData = [FBSDKCrypto randomBytes:numOfBytes]; + NSString *randomString = [FBSDKBase64 encodeData:randomStringData]; + FBSDKCryptoBlankData(randomStringData); + return randomString; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithMasterKey:(NSString *)masterKey +{ + if ((self = [super init])) { + NSData *masterKeyData = [FBSDKBase64 decodeAsData:masterKey]; + NSUInteger len = masterKeyData.length; + uint8_t *first = (uint8_t *)masterKeyData.bytes; + + if (len == 0 || first == nil || *first != kFBSDK_CRYPTO_CURRENT_VERSION) { + // only one version supported at the moment + return nil; + } + + _encryptionKeyData = FBSDKCryptoMakeSubKey(first+1, len-1, 1); + _macKeyData = FBSDKCryptoMakeSubKey(first+1, len-1, 2); + FBSDKCryptoBlankData(masterKeyData); + return self; + } else { + return nil; + } +} + +- (instancetype)initWithEncryptionKey:(NSString *)encryptionKey macKey:(NSString *)macKey +{ + if ((self = [super init])) { + _macKeyData = [FBSDKBase64 decodeAsData:macKey]; + _encryptionKeyData = [FBSDKBase64 decodeAsData:encryptionKey]; + } + return self; +} + +- (void)dealloc +{ + FBSDKCryptoBlankData(_encryptionKeyData); + FBSDKCryptoBlankData(_macKeyData); +} + +#pragma mark - Public Methods + +/** + * return base64_encode([VERSION 1 byte] + [MAC 32 bytes] + [IV 16 bytes] + [AES256(Padded Data, multiples of 16)] + */ +- (NSString *)encrypt:(NSData *)plainText additionalDataToSign:(NSData *)additionalDataToSign +{ + NSAssert(plainText.length <= INT_MAX, @""); + int plainTextLength = (int)plainText.length; + + uint8_t numPaddingBytes = kCCBlockSizeAES128 - (plainText.length % kCCBlockSizeAES128); // Pad 1 .. 16 bytes + int cipherDataLength = plainTextLength + numPaddingBytes; + size_t bufferSize = 1 + CC_SHA256_DIGEST_LENGTH + kCCBlockSizeAES128 + cipherDataLength; + int offsetMAC = 1; + int offsetIV = offsetMAC + CC_SHA256_DIGEST_LENGTH; + int offsetCipherData = offsetIV + kCCBlockSizeAES128; + + uint8_t *buffer = calloc(bufferSize, sizeof(uint8_t)); + buffer[0] = kFBSDK_CRYPTO_CURRENT_VERSION; // First byte is the version number + NSData *IV = [[self class] randomBytes:kCCBlockSizeAES128]; + memcpy(buffer + offsetIV, IV.bytes, IV.length); + + memcpy(buffer + offsetCipherData, plainText.bytes, plainTextLength); // Copy input in + fbsdkdfl_SecRandomCopyBytes([FBSDKDynamicFrameworkLoader loadkSecRandomDefault], + numPaddingBytes, + buffer + offsetCipherData + plainTextLength); // Random pad + buffer[offsetCipherData + cipherDataLength - 1] = numPaddingBytes; // Record the number of padded bytes at the end + + size_t numOutputBytes = 0; + CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, 0, + _encryptionKeyData.bytes, kCCKeySizeAES256, + IV.bytes, + buffer + offsetCipherData, cipherDataLength, + buffer + offsetCipherData, cipherDataLength, + &numOutputBytes); + + NSData *mac = [self _macForIV:IV + cipherData:[NSData dataWithBytesNoCopy:buffer + offsetCipherData length:cipherDataLength freeWhenDone:NO] + additionalDataToSign:additionalDataToSign]; + memcpy(buffer + offsetMAC, mac.bytes, CC_SHA256_DIGEST_LENGTH); + + if (cryptStatus == kCCSuccess) { + return [FBSDKBase64 encodeData:[NSData dataWithBytesNoCopy:buffer length:bufferSize]]; + } + free(buffer); + return nil; +} + +- (NSData *)decrypt:(NSString *)base64EncodedCipherText additionalSignedData:(NSData *)additionalSignedData +{ + NSData *cipherText = [FBSDKBase64 decodeAsData:base64EncodedCipherText]; + NSAssert(cipherText.length <= INT_MAX, @""); + int cipherTextLength = (int)cipherText.length; + + if (!cipherText || cipherTextLength < 1 + CC_SHA256_DIGEST_LENGTH + kCCBlockSizeAES128) { + return nil; + } + int cipherDataLength = cipherTextLength - (1 + CC_SHA256_DIGEST_LENGTH + kCCBlockSizeAES128); + if (cipherDataLength % kCCBlockSizeAES128 != 0) { + return nil; + } + uint8_t *buffer = (uint8_t *)cipherText.bytes; + + int offsetMAC = 1; + int offsetIV = offsetMAC + CC_SHA256_DIGEST_LENGTH; + int offsetCipherData = offsetIV + kCCBlockSizeAES128; + + if (buffer[0] != kFBSDK_CRYPTO_CURRENT_VERSION) { + return nil; // Version does not match + } + + NSData *IV = [NSData dataWithBytesNoCopy:buffer + offsetIV length:kCCBlockSizeAES128 freeWhenDone:NO]; + NSData *cipherData = [NSData dataWithBytesNoCopy:buffer + offsetCipherData length:cipherDataLength freeWhenDone:NO]; + NSData *mac = [self _macForIV:IV cipherData:cipherData additionalDataToSign:additionalSignedData]; + NSData *macFromStream = [NSData dataWithBytesNoCopy:buffer + offsetMAC length:CC_SHA256_DIGEST_LENGTH freeWhenDone:NO]; + if (![mac isEqualToData:macFromStream]) { + return nil; // MAC does not match + } + + + uint8_t *outputBuffer = malloc(cipherDataLength); + size_t numOutputBytes = 0; + CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0, + _encryptionKeyData.bytes, kCCKeySizeAES256, + IV.bytes, + buffer + offsetCipherData, cipherDataLength, + outputBuffer, cipherDataLength, + &numOutputBytes); + if (cryptStatus == kCCSuccess) { + int numPaddingBytes = outputBuffer[cipherDataLength - 1]; + if (!(numPaddingBytes >= 1 && numPaddingBytes <= kCCBlockSizeAES128)) { + numPaddingBytes = 0; + } + return [NSData dataWithBytesNoCopy:outputBuffer length:cipherDataLength - numPaddingBytes]; + } + free(outputBuffer); + return nil; +} + +#pragma mark - Helper Methods + +/** + * + * [IV 16 bytes] . [length of ciphertext 4 bytes] . [ciphertext] . [length of additionalDataToSign, 4 bytes] . [additionalDataToSign]) + * length is written in big-endian + */ +- (NSData *)_macForIV:(NSData *)IV cipherData:(NSData *)cipherData additionalDataToSign:(NSData *)additionalDataToSign +{ + NSAssert(cipherData.length <= INT_MAX, @""); + int cipherDataLength = (int)cipherData.length; + + NSAssert(additionalDataToSign.length <= INT_MAX, @""); + int additionalDataToSignLength = (int)additionalDataToSign.length; + + size_t macBufferLength = kCCBlockSizeAES128 + 4 + cipherData.length + 4 + additionalDataToSign.length; + uint8_t *macBuffer = malloc(macBufferLength); + int offsetIV = 0; + int offsetCipherTextLength = offsetIV + kCCBlockSizeAES128; + int offsetCipherText = offsetCipherTextLength + 4; + + int offsetAdditionalDataLength = offsetCipherText + cipherDataLength; + int offsetAdditionalData = offsetAdditionalDataLength + 4; + + // [IV 16 bytes] + memcpy(macBuffer + offsetIV, IV.bytes, kCCBlockSizeAES128); + // [length of ciphertext 4 bytes] + FBSDKCryptoWriteIntBigEndian(macBuffer + offsetCipherTextLength, cipherDataLength); + // [ciphertext] + memcpy(macBuffer + offsetCipherText, cipherData.bytes, cipherDataLength); + // [length of additionalDataToSign, 4 bytes] + FBSDKCryptoWriteIntBigEndian(macBuffer + offsetAdditionalDataLength, additionalDataToSignLength); + memcpy(macBuffer + offsetAdditionalData, additionalDataToSign.bytes, additionalDataToSignLength); + + uint8_t *result = malloc(CC_SHA256_DIGEST_LENGTH); + + CCHmac(kCCHmacAlgSHA256, _macKeyData.bytes, _macKeyData.length, macBuffer, macBufferLength, result); + free(macBuffer); + + return [NSData dataWithBytesNoCopy:result length:CC_SHA256_DIGEST_LENGTH]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h new file mode 100644 index 0000000000..65d5e58bcf --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h @@ -0,0 +1,34 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKErrorRecoveryConfiguration; + +@interface FBSDKErrorRecoveryAttempter : NSObject + +// can return nil if configuration is not supported. ++ (instancetype)recoveryAttempterFromConfiguration:(FBSDKErrorRecoveryConfiguration *)configuration; + +@end + +@interface FBSDKErrorRecoveryAttempter (Protected) +- (void)completeRecovery:(BOOL)didRecover delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m new file mode 100644 index 0000000000..07aa418dbc --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m @@ -0,0 +1,56 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKErrorRecoveryAttempter.h" + +#import "_FBSDKTemporaryErrorRecoveryAttempter.h" +#import "FBSDKErrorRecoveryConfiguration.h" + +@implementation FBSDKErrorRecoveryAttempter + ++ (instancetype)recoveryAttempterFromConfiguration:(FBSDKErrorRecoveryConfiguration *)configuration +{ + if (configuration.errorCategory == FBSDKGraphRequestErrorTransient) { + return [[_FBSDKTemporaryErrorRecoveryAttempter alloc] init]; + } else if (configuration.errorCategory == FBSDKGraphRequestErrorOther) { + return nil; + } + if ([configuration.recoveryActionName isEqualToString:@"login"]) { + Class loginRecoveryAttmpterClass = NSClassFromString(@"_FBSDKLoginRecoveryAttempter"); + if (loginRecoveryAttmpterClass) { + return [[loginRecoveryAttmpterClass alloc] init]; + } + } + return nil; +} + +- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo +{ + // should be implemented by subclasses. +} +@end + +@implementation FBSDKErrorRecoveryAttempter(Protected) + +- (void)completeRecovery:(BOOL)didRecover delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo +{ + void (*callback)(id, SEL, BOOL, void *) = (void *)[delegate methodForSelector:didRecoverSelector]; + (*callback)(delegate, didRecoverSelector, didRecover, contextInfo); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h new file mode 100644 index 0000000000..21ad040d1d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h @@ -0,0 +1,23 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKErrorRecoveryAttempter.h" + +@interface _FBSDKTemporaryErrorRecoveryAttempter : FBSDKErrorRecoveryAttempter + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m new file mode 100644 index 0000000000..bb555aa7f8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m @@ -0,0 +1,28 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "_FBSDKTemporaryErrorRecoveryAttempter.h" + +@implementation _FBSDKTemporaryErrorRecoveryAttempter + +- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo +{ + [super completeRecovery:YES delegate:delegate didRecoverSelector:didRecoverSelector contextInfo:contextInfo]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h new file mode 100644 index 0000000000..96997007fa --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLinkReturnToRefererView.h" + +@interface FBSDKAppLinkReturnToRefererView (Internal) + +- (CGFloat)statusBarHeight; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h new file mode 100644 index 0000000000..c4d40cb58e --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h @@ -0,0 +1,40 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAppLink.h" + +FOUNDATION_EXPORT NSString *const FBSDKAppLinkDataParameterName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkTargetKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkUserAgentKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkExtrasKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkVersionKeyName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppLink; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppName; +FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererUrl; + +@interface FBSDKAppLink (Internal) + ++ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL + targets:(NSArray *)targets + webURL:(NSURL *)webURL + isBackToReferrer:(BOOL)isBackToReferrer; + +/*! return if this AppLink is to go back to referrer. */ +@property (nonatomic, assign, readonly, getter=isBackToReferrer) BOOL backToReferrer; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h new file mode 100644 index 0000000000..062aba8dae --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h @@ -0,0 +1,40 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCoreKit+Internal.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +FOUNDATION_EXPORT NSNotificationName const FBSDKApplicationDidBecomeActiveNotification; + +#else + +FOUNDATION_EXPORT NSString *const FBSDKApplicationDidBecomeActiveNotification; + +#endif + +@interface FBSDKApplicationDelegate () + +- (void)addObserver:(id)observer; +- (void)removeObserver:(id)observer; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h new file mode 100644 index 0000000000..9eba4ce116 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@protocol FBSDKApplicationObserving + +@optional +- (void)applicationDidBecomeActive:(nullable UIApplication *)application; +- (void)applicationDidEnterBackground:(nullable UIApplication *)application; +- (BOOL)application:(UIApplication *)application +didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions; + +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(nullable NSString *)sourceApplication + annotation:(nullable id)annotation; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h new file mode 100644 index 0000000000..2c0557524a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h @@ -0,0 +1,36 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKAudioResourceLoader : NSObject + ++ (instancetype)sharedLoader; + +- (BOOL)loadSound:(NSError **)error; +- (void)playSound; + +@end + +@interface FBSDKAudioResourceLoader (Subclass) + ++ (NSString *)name; ++ (NSUInteger)version; ++ (NSData *)data; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m new file mode 100644 index 0000000000..b7ea5d7d21 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m @@ -0,0 +1,151 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAudioResourceLoader.h" + +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" + +@implementation FBSDKAudioResourceLoader +{ + NSFileManager *_fileManager; + NSURL *_fileURL; + SystemSoundID _systemSoundID; +} + +#pragma mark - Class Methods + ++ (instancetype)sharedLoader +{ + static NSMutableDictionary *_loaderCache = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _loaderCache = [[NSMutableDictionary alloc] init]; + }); + + NSString *name = [self name]; + FBSDKAudioResourceLoader *loader; + @synchronized(_loaderCache) { + loader = _loaderCache[name]; + if (!loader) { + loader = [[self alloc] init]; + NSError *error = nil; + if ([loader loadSound:&error]) { + _loaderCache[name] = loader; + } else { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"%@ error: %@", self, error]; + } + } + } + + return loader; +} + +#pragma mark - Object Lifecycle + +- (instancetype)init +{ + if ((self = [super init])) { + _fileManager = [[NSFileManager alloc] init]; + } + return self; +} + +- (void)dealloc +{ + fbsdkdfl_AudioServicesDisposeSystemSoundID(_systemSoundID); +} + +#pragma mark - Public API + +- (BOOL)loadSound:(NSError **)errorRef +{ + NSURL *fileURL = [self _fileURL:errorRef]; + + if (![_fileManager fileExistsAtPath:fileURL.path]) { + NSData *data = [[self class] data]; + if (![data writeToURL:fileURL options:NSDataWritingAtomic error:errorRef]) { + return NO; + } + } + + OSStatus status = fbsdkdfl_AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &_systemSoundID); + return (status == kAudioServicesNoError); +} + +- (void)playSound +{ + if ((_systemSoundID == 0) && ![self loadSound:NULL]) { + return; + } + fbsdkdfl_AudioServicesPlaySystemSound(_systemSoundID); +} + +#pragma mark - Helper Methods + +- (NSURL *)_fileURL:(NSError **)errorRef +{ + if (_fileURL) { + return _fileURL; + } + + NSURL *baseURL = [_fileManager URLForDirectory:NSCachesDirectory + inDomain:NSUserDomainMask + appropriateForURL:nil + create:YES + error:errorRef]; + if (!baseURL) { + return nil; + } + + NSURL *directoryURL = [baseURL URLByAppendingPathComponent:@"fb_audio" isDirectory:YES]; + NSURL *versionURL = [directoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%lu", (unsigned long)[[self class] version]] + isDirectory:YES]; + if (![_fileManager createDirectoryAtURL:versionURL withIntermediateDirectories:YES attributes:nil error:errorRef]) { + return nil; + } + + _fileURL = [[versionURL URLByAppendingPathComponent:[[self class] name]] copy]; + + return _fileURL; +} + +@end + +@implementation FBSDKAudioResourceLoader (Subclass) + +#pragma mark - Subclass Methods + ++ (NSString *)name +{ + return nil; +} + ++ (NSUInteger)version +{ + return 0; +} + ++ (NSData *)data +{ + return nil; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h new file mode 100644 index 0000000000..5feed4f0f3 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h @@ -0,0 +1,35 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKContainerViewController; + +@protocol FBSDKContainerViewControllerDelegate + +- (void)viewControllerDidDisappear:(FBSDKContainerViewController *)viewController animated:(BOOL)animated; + +@end + +@interface FBSDKContainerViewController : UIViewController + +@property (nonatomic, weak) id delegate; + +- (void)displayChildController:(UIViewController *)childController; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m new file mode 100644 index 0000000000..e1c2e6d93a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m @@ -0,0 +1,78 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKContainerViewController.h" + +@implementation FBSDKContainerViewController + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + if ([self.delegate respondsToSelector:@selector(viewControllerDidDisappear:animated:)]) { + [self.delegate viewControllerDidDisappear:self animated:animated]; + } +} + +- (void)displayChildController:(UIViewController *)childController +{ + [self addChildViewController:childController]; + UIView *view = self.view; + UIView *childView = childController.view; + childView.translatesAutoresizingMaskIntoConstraints = NO; + childView.frame = view.frame; + [view addSubview:childView]; + + [view addConstraints: + @[ + [NSLayoutConstraint constraintWithItem:childView + attribute:NSLayoutAttributeTop + relatedBy:NSLayoutRelationEqual + toItem:view + attribute:NSLayoutAttributeTop + multiplier:1.0 + constant:0.0], + + [NSLayoutConstraint constraintWithItem:childView + attribute:NSLayoutAttributeBottom + relatedBy:NSLayoutRelationEqual + toItem:view + attribute:NSLayoutAttributeBottom + multiplier:1.0 + constant:0.0], + + [NSLayoutConstraint constraintWithItem:childView + attribute:NSLayoutAttributeLeading + relatedBy:NSLayoutRelationEqual + toItem:view + attribute:NSLayoutAttributeLeading + multiplier:1.0 + constant:0.0], + + [NSLayoutConstraint constraintWithItem:childView + attribute:NSLayoutAttributeTrailing + relatedBy:NSLayoutRelationEqual + toItem:view + attribute:NSLayoutAttributeTrailing + multiplier:1.0 + constant:0.0], + ]]; + + [childController didMoveToParentViewController:self]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h new file mode 100644 index 0000000000..2dfc683a4f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h @@ -0,0 +1,81 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +#if !TARGET_OS_TV +#import "../AppEvents/Internal/Codeless/FBSDKViewHierarchy.h" +#import "../AppEvents/Internal/Codeless/FBSDKCodelessMacros.h" +#import "../AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h" +#import "Cryptography/FBSDKCrypto.h" +#import "FBSDKAudioResourceLoader.h" +#import "FBSDKContainerViewController.h" +#import "BridgeAPI/FBSDKBridgeAPI.h" +#import "FBSDKMonotonicTime.h" +#import "FBSDKSystemAccountStoreAdapter.h" +#import "FBSDKTriStateBOOL.h" +#import "UI/FBSDKCloseIcon.h" +#import "UI/FBSDKColor.h" +#import "UI/FBSDKMaleSilhouetteIcon.h" +#import "UI/FBSDKUIUtility.h" +#import "UI/FBSDKViewImpressionTracker.h" +#import "WebDialog/FBSDKWebDialog.h" +#else +#import "Device/FBSDKDeviceButton+Internal.h" +#import "Device/FBSDKDeviceDialogView.h" +#import "Device/FBSDKSmartDeviceDialogView.h" +#import "Device/FBSDKDeviceViewControllerBase+Internal.h" +#import "Device/FBSDKModalFormPresentationController.h" +#endif + +#import "../AppEvents/Internal/FBSDKAppEvents+Internal.h" +#import "../AppEvents/Internal/FBSDKAppEventsState.h" +#import "../AppEvents/Internal/FBSDKAppEventsStateManager.h" +#import "../AppEvents/Internal/FBSDKAppEventsUtility.h" +#import "../AppEvents/Internal/FBSDKTimeSpentData.h" +#import "Base64/FBSDKBase64.h" +#import "ErrorRecovery/FBSDKErrorRecoveryAttempter.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKApplicationObserving.h" +#import "FBSDKApplicationDelegate+Internal.h" +#import "FBSDKDeviceRequestsHelper.h" +#import "FBSDKError.h" +#import "FBSDKImageDownloader.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKMath.h" +#import "FBSDKSettings+Internal.h" +#import "FBSDKSwizzler.h" +#import "FBSDKTypeUtility.h" +#import "Network/FBSDKGraphRequest+Internal.h" +#import "Network/FBSDKGraphRequestConnection+Internal.h" +#import "Network/FBSDKGraphRequestMetadata.h" +#import "ServerConfiguration/FBSDKDialogConfiguration.h" +#import "ServerConfiguration/FBSDKServerConfiguration+Internal.h" +#import "ServerConfiguration/FBSDKServerConfiguration.h" +#import "ServerConfiguration/FBSDKServerConfigurationManager+Internal.h" +#import "ServerConfiguration/FBSDKServerConfigurationManager.h" +#import "TokenCaching/FBSDKAccessTokenCache.h" +#import "TokenCaching/FBSDKAccessTokenCaching.h" +#import "TokenCaching/FBSDKKeychainStore.h" +#import "TokenCaching/FBSDKKeychainStoreViaBundleID.h" +#import "UI/FBSDKButton+Subclass.h" +#import "UI/FBSDKIcon.h" +#import "UI/FBSDKLogo.h" diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h new file mode 100644 index 0000000000..20d0f778ec --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h @@ -0,0 +1,58 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +#define FBSDK_DEVICE_INFO_PARAM @"device_info" + +/* + @class + + Helper class for device requests mDNS broadcasts. Note this is only intended for + internal consumption. + */ +@interface FBSDKDeviceRequestsHelper : NSObject + +/** + Get device info to include with the GraphRequest + */ ++ (NSString *)getDeviceInfo; + +/** + Start the mDNS advertisement service for a device request + @param loginCode The login code associated with the action for the device request. + @return True if the service broadcast was successfully started. + */ ++ (BOOL)startAdvertisementService:(NSString *)loginCode withDelegate:(id)delegate; + +/** + Check if a service delegate is registered with particular advertisement service + @param delegate The delegate to check if registered. + @param service The advertisement service to check for. + @return True if the service is the one the delegate registered with. + */ ++ (BOOL)isDelegate:(id)delegate forAdvertisementService:(NSNetService *)service; + +/** + Stop the mDNS advertisement service for a device request + @param delegate The delegate registered with the service. + */ ++ (void)cleanUpAdvertisementService:(id)delegate; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m new file mode 100644 index 0000000000..4bc1bd9aaa --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m @@ -0,0 +1,124 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDeviceRequestsHelper.h" + +#import + +#import + +#import "FBSDKCoreKit+Internal.h" + +#define FBSDK_DEVICE_INFO_DEVICE @"device" +#define FBSDK_DEVICE_INFO_MODEL @"model" +#define FBSDK_HEADER @"fbsdk" +#if !TARGET_OS_TV +#define FBSDK_FLAVOR @"ios" +#else +#define FBSDK_FLAVOR @"tvos" +#endif +#define FBSDK_SERVICE_TYPE @"_fb._tcp." + +static NSMapTable *g_mdnsAdvertisementServices; + +@implementation FBSDKDeviceRequestsHelper + +#pragma mark - Class Methods + ++ (void)initialize { + // We use weak to strong in order to retain the advertisement services + // without having to pass them back to the delegate that started them + // Note that in case the delegate is destroyed before it had a chance to + // stop the service, the service will continue broadcasting until the map + // resizes itself and releases the service, causing it to stop + g_mdnsAdvertisementServices = [NSMapTable weakToStrongObjectsMapTable]; +} + ++ (NSString *)getDeviceInfo +{ + struct utsname systemInfo; + uname(&systemInfo); + NSDictionary *deviceInfo = @{ + FBSDK_DEVICE_INFO_DEVICE: @(systemInfo.machine), + FBSDK_DEVICE_INFO_MODEL: [UIDevice currentDevice].model, + }; + NSError *err; + NSData *jsonDeviceInfo = [NSJSONSerialization dataWithJSONObject:deviceInfo + options:0 + error:&err]; + + return [[NSString alloc] initWithData:jsonDeviceInfo encoding:NSUTF8StringEncoding]; +} + ++ (BOOL)startAdvertisementService:(NSString *)loginCode withDelegate:(id)delegate; +{ + static NSString *sdkVersion = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // Dots in the version will mess up the bonjour DNS record parsing + sdkVersion = [[FBSDKSettings sdkVersion] stringByReplacingOccurrencesOfString:@"." withString:@"|"]; + if (sdkVersion.length > 10 || + ![[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[sdkVersion characterAtIndex:0]]) { + sdkVersion = @"dev"; + } + }); + NSString *serviceName = [NSString stringWithFormat:@"%@_%@_%@", + FBSDK_HEADER, + [NSString stringWithFormat:@"%@-%@", + FBSDK_FLAVOR, + sdkVersion + ], + loginCode + ]; + if (serviceName.length > 60) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"serviceName exceeded 60 characters"]; + } + NSNetService *mdnsAdvertisementService = [[NSNetService alloc] + initWithDomain:@"local." + type:FBSDK_SERVICE_TYPE + name:serviceName + port:0]; + mdnsAdvertisementService.delegate = delegate; + [mdnsAdvertisementService publishWithOptions:NSNetServiceNoAutoRename | NSNetServiceListenForConnections]; + [FBSDKAppEvents logImplicitEvent:FBSDKAppEventNameFBSDKSmartLoginService + valueToSum:nil + parameters:nil + accessToken:nil]; + [g_mdnsAdvertisementServices setObject:mdnsAdvertisementService forKey:delegate]; + + return YES; +} + ++ (BOOL)isDelegate:(id)delegate forAdvertisementService:(NSNetService *)service +{ + NSNetService *mdnsAdvertisementService = [g_mdnsAdvertisementServices objectForKey:delegate]; + return (mdnsAdvertisementService == service); +} + ++ (void)cleanUpAdvertisementService:(id)delegate +{ + NSNetService *mdnsAdvertisementService = [g_mdnsAdvertisementServices objectForKey:delegate]; + if (mdnsAdvertisementService != nil) { + // We are not interested in the stop publish event + mdnsAdvertisementService.delegate = nil; + [mdnsAdvertisementService stop]; + [g_mdnsAdvertisementServices removeObjectForKey:delegate]; + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h new file mode 100644 index 0000000000..d89d733e85 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h @@ -0,0 +1,239 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + + This class provides a way to load constants and methods from Apple Frameworks in a dynamic + fashion. It allows the SDK to be just dragged into a project without having to specify additional + frameworks to link against. It is an internal class and not to be used by 3rd party developers. + + As new types are needed, they should be added and strongly typed. + */ +@interface FBSDKDynamicFrameworkLoader : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +#pragma mark - Security Constants + +/** + Load the kSecRandomDefault value from the Security Framework + + @return The kSecRandomDefault value or nil. + */ ++ (SecRandomRef)loadkSecRandomDefault; + +/** + Load the kSecAttrAccessible value from the Security Framework + + @return The kSecAttrAccessible value or nil. + */ ++ (CFTypeRef)loadkSecAttrAccessible; + +/** + Load the kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly value from the Security Framework + + @return The kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly value or nil. + */ ++ (CFTypeRef)loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; + +/** + Load the kSecAttrAccount value from the Security Framework + + @return The kSecAttrAccount value or nil. + */ ++ (CFTypeRef)loadkSecAttrAccount; + +/** + Load the kSecAttrService value from the Security Framework + + @return The kSecAttrService value or nil. + */ ++ (CFTypeRef)loadkSecAttrService; + +/** + Load the kSecAttrGeneric value from the Security Framework + + @return The kSecAttrGeneric value or nil. + */ ++ (CFTypeRef)loadkSecAttrGeneric; + +/** + Load the kSecValueData value from the Security Framework + + @return The kSecValueData value or nil. + */ ++ (CFTypeRef)loadkSecValueData; + +/** + Load the kSecClassGenericPassword value from the Security Framework + + @return The kSecClassGenericPassword value or nil. + */ ++ (CFTypeRef)loadkSecClassGenericPassword; + +/** + Load the kSecAttrAccessGroup value from the Security Framework + + @return The kSecAttrAccessGroup value or nil. + */ ++ (CFTypeRef)loadkSecAttrAccessGroup; + +/** + Load the kSecMatchLimitOne value from the Security Framework + + @return The kSecMatchLimitOne value or nil. + */ ++ (CFTypeRef)loadkSecMatchLimitOne; + +/** + Load the kSecMatchLimit value from the Security Framework + + @return The kSecMatchLimit value or nil. + */ ++ (CFTypeRef)loadkSecMatchLimit; + +/** + Load the kSecReturnData value from the Security Framework + + @return The kSecReturnData value or nil. + */ ++ (CFTypeRef)loadkSecReturnData; + +/** + Load the kSecClass value from the Security Framework + + @return The kSecClass value or nil. + */ ++ (CFTypeRef)loadkSecClass; + +@end + +#pragma mark - Security APIs + +// These are local wrappers around the corresponding methods in Security/SecRandom.h +FOUNDATION_EXPORT int fbsdkdfl_SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes); + +// These are local wrappers around Keychain API +FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate); +FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemAdd(CFDictionaryRef attributes, CFTypeRef *result); +FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result); +FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemDelete(CFDictionaryRef query); + +#pragma mark - Social Constants + +FOUNDATION_EXPORT NSString *fbsdkdfl_SLServiceTypeFacebook(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_SLServiceTypeTwitter(void); + +#pragma mark - Social Classes + +FOUNDATION_EXPORT Class fbsdkdfl_SLComposeViewControllerClass(void); + +#pragma mark - MessageUI Classes + +FOUNDATION_EXPORT Class fbsdkdfl_MFMailComposeViewControllerClass(void); +FOUNDATION_EXPORT Class fbsdkdfl_MFMessageComposeViewControllerClass(void); + +#pragma mark - QuartzCore Classes + +FOUNDATION_EXPORT Class fbsdkdfl_CATransactionClass(void); + +#pragma mark - QuartzCore APIs + +// These are local wrappers around the corresponding transform methods from QuartzCore.framework/CATransform3D.h +FOUNDATION_EXPORT CATransform3D fbsdkdfl_CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz); +FOUNDATION_EXPORT CATransform3D fbsdkdfl_CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz); +FOUNDATION_EXPORT CATransform3D fbsdkdfl_CATransform3DConcat (CATransform3D a, CATransform3D b); + +FOUNDATION_EXPORT const CATransform3D fbsdkdfl_CATransform3DIdentity; + +#pragma mark - AudioToolbox APIs + +// These are local wrappers around the corresponding methods in AudioToolbox/AudioToolbox.h +FOUNDATION_EXPORT OSStatus fbsdkdfl_AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID); +FOUNDATION_EXPORT OSStatus fbsdkdfl_AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID); +FOUNDATION_EXPORT void fbsdkdfl_AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID); + +#pragma mark - AdSupport Classes + +FOUNDATION_EXPORT Class fbsdkdfl_ASIdentifierManagerClass(void); + +#pragma mark - SafariServices Classes + +FOUNDATION_EXPORT Class fbsdkdfl_SFSafariViewControllerClass(void); +FOUNDATION_EXPORT Class fbsdkdfl_SFAuthenticationSessionClass(void); + +#pragma mark - AuthenticationServices Classes + +FOUNDATION_EXPORT Class fbsdkdfl_ASWebAuthenticationSessionClass(void); + +#pragma mark - Accounts Constants + +FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAppIdKey(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceEveryone(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceFriends(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceKey(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceOnlyMe(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookPermissionsKey(void); + +#pragma mark - Accounts Classes + +FOUNDATION_EXPORT Class fbsdkdfl_ACAccountStoreClass(void); + +#pragma mark - StoreKit classes + +FOUNDATION_EXPORT Class fbsdkdfl_SKPaymentQueueClass(void); +FOUNDATION_EXPORT Class fbsdkdfl_SKProductsRequestClass(void); + +#pragma mark - AssetsLibrary Classes + +FOUNDATION_EXPORT Class fbsdkdfl_ALAssetsLibraryClass(void); + +#pragma mark - CoreTelephony Classes + +FOUNDATION_EXPORT Class fbsdkdfl_CTTelephonyNetworkInfoClass(void); + +#pragma mark - CoreImage + +FOUNDATION_EXPORT Class fbsdkdfl_CIImageClass(void); +FOUNDATION_EXPORT Class fbsdkdfl_CIFilterClass(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_kCIInputImageKey(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_kCIInputRadiusKey(void); +FOUNDATION_EXPORT NSString *fbsdkdfl_kCIOutputImageKey(void); + +#pragma mark - Photos.framework + +FOUNDATION_EXPORT Class fbsdkdfl_PHPhotoLibrary(void); +FOUNDATION_EXPORT Class fbsdkdfl_PHAssetChangeRequest(void); + +#pragma mark - MobileCoreServices + +FOUNDATION_EXPORT CFStringRef fbsdkdfl_UTTypeCopyPreferredTagWithClass(CFStringRef inUTI, + CFStringRef inTagClass); +FOUNDATION_EXPORT CFStringRef fbsdkdfl_kUTTagClassMIMEType(void); +FOUNDATION_EXPORT CFStringRef fbsdkdfl_kUTTypeJPEG(void); +FOUNDATION_EXPORT CFStringRef fbsdkdfl_kUTTypePNG(void); + +#pragma mark - WebKit Classes + +FOUNDATION_EXPORT Class fbsdkdfl_WKWebViewClass(void); +FOUNDATION_EXPORT Class fbsdkdfl_WKUserScriptClass(void); diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h new file mode 100644 index 0000000000..e6b73f462a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h @@ -0,0 +1,93 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 NSError (FBSDKError) + ++ (NSError *)fbErrorWithCode:(NSInteger)code message:(NSString *)message; ++ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + message:(NSString *)message; + ++ (NSError *)fbErrorWithCode:(NSInteger)code + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbErrorWithCode:(NSInteger)code + userInfo:(NSDictionary *)userInfo + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + userInfo:(NSDictionary *)userInfo + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name + value:(id)value + message:(NSString *)message; + ++ (NSError *)fbInvalidArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + value:(id)value + message:(NSString *)message; + ++ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name + value:(id)value + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbInvalidArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + value:(id)value + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbInvalidCollectionErrorWithName:(NSString *)name + collection:(id)collection + item:(id)item + message:(NSString *)message; + ++ (NSError *)fbInvalidCollectionErrorWithName:(NSString *)name + collection:(id)collection + item:(id)item + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name message:(NSString *)message; ++ (NSError *)fbRequiredArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + message:(NSString *)message; + ++ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name + message:(NSString *)message + underlyingError:(NSError *)underlyingError; + ++ (NSError *)fbUnknownErrorWithMessage:(NSString *)message; + +@property (nonatomic, assign, readonly, getter=isNetworkError) BOOL networkError +NS_SWIFT_NAME(isNetworkError); + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m new file mode 100644 index 0000000000..bad2aae914 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m @@ -0,0 +1,205 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKError.h" + +#import "FBSDKConstants.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKTypeUtility.h" + +@implementation NSError (FBSDKError) + +#pragma mark - Class Methods + +- (BOOL)isNetworkError +{ + NSError *innerError = self.userInfo[NSUnderlyingErrorKey]; + if (innerError && innerError.isNetworkError) { + return YES; + } + + switch (self.code) { + case NSURLErrorTimedOut: + case NSURLErrorCannotFindHost: + case NSURLErrorCannotConnectToHost: + case NSURLErrorNetworkConnectionLost: + case NSURLErrorDNSLookupFailed: + case NSURLErrorNotConnectedToInternet: + case NSURLErrorInternationalRoamingOff: + case NSURLErrorCallIsActive: + case NSURLErrorDataNotAllowed: + return YES; + default: + return NO; + } +} + ++ (NSError *)fbErrorWithCode:(NSInteger)code message:(NSString *)message +{ + return [self fbErrorWithCode:code message:message underlyingError:nil]; +} + ++ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + message:(NSString *)message +{ + return [self fbErrorWithDomain:domain code:code message:message underlyingError:nil]; +} + ++ (NSError *)fbErrorWithCode:(NSInteger)code message:(NSString *)message underlyingError:(NSError *)underlyingError +{ + return [self fbErrorWithCode:code userInfo:nil message:message underlyingError:underlyingError]; +} + ++ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + message:(NSString *)message + underlyingError:(NSError *)underlyingError +{ + return [self fbErrorWithDomain:domain code:code userInfo:@{} message:message underlyingError:underlyingError]; +} + ++ (NSError *)fbErrorWithCode:(NSInteger)code + userInfo:(NSDictionary *)userInfo + message:(NSString *)message + underlyingError:(NSError *)underlyingError +{ + return [self fbErrorWithDomain:FBSDKErrorDomain code:code userInfo:userInfo message:message underlyingError:underlyingError]; +} + ++ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + userInfo:(NSDictionary *)userInfo + message:(NSString *)message + underlyingError:(NSError *)underlyingError +{ + NSMutableDictionary *fullUserInfo = [[NSMutableDictionary alloc] initWithDictionary:userInfo]; + [FBSDKInternalUtility dictionary:fullUserInfo setObject:message forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKInternalUtility dictionary:fullUserInfo setObject:underlyingError forKey:NSUnderlyingErrorKey]; + userInfo = fullUserInfo.count ? [fullUserInfo copy] : nil; + return [[NSError alloc] initWithDomain:domain code:code userInfo:userInfo]; +} + ++ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name value:(id)value message:(NSString *)message +{ + return [self fbInvalidArgumentErrorWithName:name value:value message:message underlyingError:nil]; +} + ++ (NSError *)fbInvalidArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + value:(id)value + message:(NSString *)message +{ + return [self fbInvalidArgumentErrorWithDomain:domain + name:name + value:value + message:message + underlyingError:nil]; +} + ++ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name + value:(id)value + message:(NSString *)message + underlyingError:(NSError *)underlyingError +{ + return [self fbInvalidArgumentErrorWithDomain:FBSDKErrorDomain + name:name + value:value + message:message + underlyingError:underlyingError]; +} ++ (NSError *)fbInvalidArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + value:(id)value + message:(NSString *)message + underlyingError:(NSError *)underlyingError +{ + if (!message) { + message = [[NSString alloc] initWithFormat:@"Invalid value for %@: %@", name, value]; + } + NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; + [FBSDKInternalUtility dictionary:userInfo setObject:name forKey:FBSDKErrorArgumentNameKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:value forKey:FBSDKErrorArgumentValueKey]; + return [self fbErrorWithDomain:domain + code:FBSDKErrorInvalidArgument + userInfo:userInfo + message:message + underlyingError:underlyingError]; +} + ++ (NSError *)fbInvalidCollectionErrorWithName:(NSString *)name + collection:(id)collection + item:(id)item + message:(NSString *)message +{ + return [self fbInvalidCollectionErrorWithName:name collection:collection item:item message:message underlyingError:nil]; +} + ++ (NSError *)fbInvalidCollectionErrorWithName:(NSString *)name + collection:(id)collection + item:(id)item + message:(NSString *)message + underlyingError:(NSError *)underlyingError +{ + if (!message) { + message = [[NSString alloc] initWithFormat:@"Invalid item (%@) found in collection for %@: %@", item, name, collection]; + } + NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; + [FBSDKInternalUtility dictionary:userInfo setObject:name forKey:FBSDKErrorArgumentNameKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:item forKey:FBSDKErrorArgumentValueKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:collection forKey:FBSDKErrorArgumentCollectionKey]; + return [self fbErrorWithCode:FBSDKErrorInvalidArgument + userInfo:userInfo + message:message + underlyingError:underlyingError]; +} + ++ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name message:(NSString *)message +{ + return [self fbRequiredArgumentErrorWithName:name message:message underlyingError:nil]; +} + ++ (NSError *)fbRequiredArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + message:(NSString *)message +{ + if (!message) { + message = [[NSString alloc] initWithFormat:@"Value for %@ is required.", name]; + } + return [self fbInvalidArgumentErrorWithDomain:domain name:name value:nil message:message underlyingError:nil]; +} + ++ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name + message:(NSString *)message + underlyingError:(NSError *)underlyingError +{ + if (!message) { + message = [[NSString alloc] initWithFormat:@"Value for %@ is required.", name]; + } + return [self fbInvalidArgumentErrorWithName:name value:nil message:message underlyingError:underlyingError]; +} + ++ (NSError *)fbUnknownErrorWithMessage:(NSString *)message +{ + return [self fbErrorWithCode:FBSDKErrorUnknown + userInfo:nil + message:message + underlyingError:nil]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h new file mode 100644 index 0000000000..aa98cd27d5 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h @@ -0,0 +1,41 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/* + simple class to manage image downloads + + this class is not smart enough to dedupe identical requests in flight. + */ +@interface FBSDKImageDownloader : NSObject + ++ (instancetype)sharedInstance; + +/* + download an image or retrieve it from cache + @param url the url to download + @param ttl the amount of time (in seconds) that using a cached version is acceptable. + @param completion the callback with the image - for simplicity nil is returned rather than surfacing an error. + */ +- (void)downloadImageWithURL:(NSURL *)url ttl:(NSTimeInterval)ttl completion:(void(^)(UIImage* image))completion; + +- (void)removeAll; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m new file mode 100644 index 0000000000..5c9de889cc --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m @@ -0,0 +1,93 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKImageDownloader.h" + +static NSString *const kImageDirectory = @"fbsdkimages"; +static NSString *const kCachedResponseUserInfoKeyTimestamp = @"timestamp"; + +@implementation FBSDKImageDownloader { + NSURLCache *_urlCache; +} + ++ (instancetype)sharedInstance +{ + static FBSDKImageDownloader *instance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[FBSDKImageDownloader alloc] init]; + }); + return instance; +} + +- (instancetype)init +{ + if ((self = [super init])) { + _urlCache = [[NSURLCache alloc] initWithMemoryCapacity:1024*1024*8 + diskCapacity:1024*1024*100 + diskPath:kImageDirectory]; + } + return self; +} + +- (void)removeAll +{ + [_urlCache removeAllCachedResponses]; +} + +- (void)downloadImageWithURL:(NSURL *)url ttl:(NSTimeInterval)ttl completion:(void(^)(UIImage* image))completion +{ + NSURLRequest *request = [NSURLRequest requestWithURL:url]; + NSCachedURLResponse *cachedResponse = [_urlCache cachedResponseForRequest:request]; + NSDate *modificationDate = cachedResponse.userInfo[kCachedResponseUserInfoKeyTimestamp]; + BOOL isExpired = ([[modificationDate dateByAddingTimeInterval:ttl] compare:[NSDate date]] == NSOrderedAscending); + + void (^completionWrapper)(NSCachedURLResponse *) = ^(NSCachedURLResponse *responseData){ + if (completion != NULL) { + UIImage *image = [UIImage imageWithData:responseData.data]; + completion(image); + } + }; + + if (cachedResponse == nil || isExpired) { + NSURLSession *session = [NSURLSession sharedSession]; + NSURLSessionDataTask *task = [session dataTaskWithRequest:request + completionHandler: + ^(NSData *data, NSURLResponse *response, NSError *error) { + if ([response isKindOfClass:[NSHTTPURLResponse class]] && + ((NSHTTPURLResponse *)response).statusCode == 200 && + error == nil && + data != nil) { + NSCachedURLResponse *responseToCache = + [[NSCachedURLResponse alloc] initWithResponse:response + data:data + userInfo:@{ kCachedResponseUserInfoKeyTimestamp : [NSDate date] } + storagePolicy:NSURLCacheStorageAllowed]; + [self->_urlCache storeCachedResponse:responseToCache forRequest:request]; + completionWrapper(responseToCache); + } else if (completion != NULL) { + completion(nil); + } + }]; + [task resume]; + } else { + completionWrapper(cachedResponse); + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h new file mode 100644 index 0000000000..6a5e0f53b0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h @@ -0,0 +1,374 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +#define FBSDK_CANOPENURL_FACEBOOK @"fbauth2" +#define FBSDK_CANOPENURL_FBAPI @"fbapi" +#define FBSDK_CANOPENURL_MESSENGER @"fb-messenger-share-api" +#define FBSDK_CANOPENURL_MSQRD_PLAYER @"msqrdplayer" +#define FBSDK_CANOPENURL_SHARE_EXTENSION @"fbshareextension" + +typedef NS_ENUM(int32_t, FBSDKUIKitVersion) +{ + FBSDKUIKitVersion_6_0 = 0x0944, + FBSDKUIKitVersion_6_1 = 0x094C, + FBSDKUIKitVersion_7_0 = 0x0B57, + FBSDKUIKitVersion_7_1 = 0x0B77, + FBSDKUIKitVersion_8_0 = 0x0CF6, +}; + +@interface FBSDKInternalUtility : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + Constructs the scheme for apps that come to the current app through the bridge. + */ ++ (NSString *)appURLScheme; + +/** + Constructs an URL for the current app. + @param host The host for the URL. + @param path The path for the URL. + @param queryParameters The query parameters for the URL. This will be converted into a query string. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @return The app URL. + */ ++ (NSURL *)appURLWithHost:(NSString *)host + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef; + +/** + Parses an FB url's query params (and potentially fragment) into a dictionary. + @param url The FB url. + @return A dictionary with the key/value pairs. + */ ++ (NSDictionary *)dictionaryFromFBURL:(NSURL *)url; + +/** + Adds an object to an array if it is not nil. + @param array The array to add the object to. + @param object The object to add to the array. + */ ++ (void)array:(NSMutableArray *)array addObject:(id)object; + +/** + Returns bundle for returning localized strings + + We assume a convention of a bundle named FBSDKStrings.bundle, otherwise we + return the main bundle. +*/ ++ (NSBundle *)bundleForStrings; + +/** + Converts simple value types to the string equivalent for serializing to a request query or body. + @param value The value to be converted. + @return The value that may have been converted if able (otherwise the input param). + */ ++ (id)convertRequestValue:(id)value; + +/** + Gets the milliseconds since the Unix Epoch. + + Changes in the system clock will affect this value. + @return The number of milliseconds since the Unix Epoch. + */ ++ (uint64_t)currentTimeInMilliseconds; + +/** + Sets an object for a key in a dictionary if it is not nil. + @param dictionary The dictionary to set the value for. + @param object The value to set after serializing to JSON. + @param key The key to set the value for. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @return NO if an error occurred while serializing the object, otherwise YES. + */ ++ (BOOL)dictionary:(NSMutableDictionary *)dictionary +setJSONStringForObject:(id)object + forKey:(id)key + error:(NSError *__autoreleasing *)errorRef; + +/** + Sets an object for a key in a dictionary if it is not nil. + @param dictionary The dictionary to set the value for. + @param object The value to set. + @param key The key to set the value for. + */ ++ (void)dictionary:(NSMutableDictionary *)dictionary setObject:(id)object forKey:(id)key; + +/** + Constructs a Facebook URL. + @param hostPrefix The prefix for the host, such as 'm', 'graph', etc. + @param path The path for the URL. This may or may not include a version. + @param queryParameters The query parameters for the URL. This will be converted into a query string. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @return The Facebook URL. + */ ++ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef; + +/** + Constructs a Facebook URL. + @param hostPrefix The prefix for the host, such as 'm', 'graph', etc. + @param path The path for the URL. This may or may not include a version. + @param queryParameters The query parameters for the URL. This will be converted into a query string. + @param defaultVersion A version to add to the URL if none is found in the path. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @return The Facebook URL. + */ ++ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + defaultVersion:(NSString *)defaultVersion + error:(NSError *__autoreleasing *)errorRef; + +/** + Tests whether the supplied URL is a valid URL for opening in the browser. + @param URL The URL to test. + @return YES if the URL refers to an http or https resource, otherwise NO. + */ ++ (BOOL)isBrowserURL:(NSURL *)URL; + +/** + Tests whether the supplied bundle identifier references a Facebook app. + @param bundleIdentifier The bundle identifier to test. + @return YES if the bundle identifier refers to a Facebook app, otherwise NO. + */ ++ (BOOL)isFacebookBundleIdentifier:(NSString *)bundleIdentifier; + +/** + Tests whether the operating system is at least the specified version. + @param version The version to test against. + @return YES if the operating system is greater than or equal to the specified version, otherwise NO. + */ ++ (BOOL)isOSRunTimeVersionAtLeast:(NSOperatingSystemVersion)version; + +/** + Tests whether the supplied bundle identifier references the Safari app. + @param bundleIdentifier The bundle identifier to test. + @return YES if the bundle identifier refers to the Safari app, otherwise NO. + */ ++ (BOOL)isSafariBundleIdentifier:(NSString *)bundleIdentifier; + +/** + Tests whether the UIKit version that the current app was linked to is at least the specified version. + @param version The version to test against. + @return YES if the linked UIKit version is greater than or equal to the specified version, otherwise NO. + */ ++ (BOOL)isUIKitLinkTimeVersionAtLeast:(FBSDKUIKitVersion)version; + +/** + Tests whether the UIKit version in the runtime is at least the specified version. + @param version The version to test against. + @return YES if the runtime UIKit version is greater than or equal to the specified version, otherwise NO. + */ ++ (BOOL)isUIKitRunTimeVersionAtLeast:(FBSDKUIKitVersion)version; + +/** + Converts an object into a JSON string. + @param object The object to convert to JSON. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @param invalidObjectHandler Handles objects that are invalid, returning a replacement value or nil to ignore. + @return A JSON string or nil if the object cannot be converted to JSON. + */ ++ (NSString *)JSONStringForObject:(id)object + error:(NSError *__autoreleasing *)errorRef + invalidObjectHandler:(id(^)(id object, BOOL *stop))invalidObjectHandler; + +/** + Checks equality between 2 objects. + + Checks for pointer equality, nils, isEqual:. + @param object The first object to compare. + @param other The second object to compare. + @return YES if the objects are equal, otherwise NO. + */ ++ (BOOL)object:(id)object isEqualToObject:(id)other; + +/** + Converts a JSON string into an object + @param string The JSON string to convert. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @return An NSDictionary, NSArray, NSString or NSNumber containing the object representation, or nil if the string + cannot be converted. + */ ++ (id)objectForJSONString:(NSString *)string error:(NSError *__autoreleasing *)errorRef; + +/** + The version of the operating system on which the process is executing. + */ ++ (NSOperatingSystemVersion)operatingSystemVersion; + +/** + Constructs a query string from a dictionary. + @param dictionary The dictionary with key/value pairs for the query string. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @param invalidObjectHandler Handles objects that are invalid, returning a replacement value or nil to ignore. + @return Query string representation of the parameters. + */ ++ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary + error:(NSError *__autoreleasing *)errorRef + invalidObjectHandler:(id(^)(id object, BOOL *stop))invalidObjectHandler; + +/** + Tests whether the orientation should be manually adjusted for views outside of the root view controller. + + With the legacy layout the developer must worry about device orientation when working with views outside of + the window's root view controller and apply the correct rotation transform and/or swap a view's width and height + values. If the application was linked with UIKit on iOS 7 or earlier or the application is running on iOS 7 or earlier + then we need to use the legacy layout code. Otherwise if the application was linked with UIKit on iOS 8 or later and + the application is running on iOS 8 or later, UIKit handles all of the rotation complexity and the origin is always in + the top-left and no rotation transform is necessary. + @return YES if if the orientation must be manually adjusted, otherwise NO. + */ ++ (BOOL)shouldManuallyAdjustOrientation; + +/** + Constructs an NSURL. + @param scheme The scheme for the URL. + @param host The host for the URL. + @param path The path for the URL. + @param queryParameters The query parameters for the URL. This will be converted into a query string. + @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. + @return The URL. + */ ++ (NSURL *)URLWithScheme:(NSString *)scheme + host:(NSString *)host + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef; + +/** + * Deletes all the cookies in the NSHTTPCookieStorage for Facebook web dialogs + */ ++ (void)deleteFacebookCookies; + +/** + Extracts permissions from a response fetched from me/permissions + @param responseObject the response + @param grantedPermissions the set to add granted permissions to + @param declinedPermissions the set to add declined permissions to. + */ ++ (void)extractPermissionsFromResponse:(NSDictionary *)responseObject + grantedPermissions:(NSMutableSet *)grantedPermissions + declinedPermissions:(NSMutableSet *)declinedPermissions; + +/** + Registers a transient object so that it will not be deallocated until unregistered + @param object The transient object + */ ++ (void)registerTransientObject:(id)object; + +/** + Unregisters a transient object that was previously registered with registerTransientObject: + @param object The transient object + */ ++ (void)unregisterTransientObject:(__weak id)object; + +/** + validates that the app ID is non-nil, throws an NSException if nil. + */ ++ (void)validateAppID; + +/** + Validates that the client access token is non-nil, otherwise - throws an NSException otherwise. + Returns the composed client access token. + */ ++ (NSString *)validateRequiredClientAccessToken; + +/** + validates that the right URL schemes are registered, throws an NSException if not. + */ ++ (void)validateURLSchemes; + +/** + validates that Facebook reserved URL schemes are not registered, throws an NSException if they are. + */ ++ (void)validateFacebookReservedURLSchemes; + +/** + Attempts to find the first UIViewController in the view's responder chain. Returns nil if not found. + */ ++ (UIViewController *)viewControllerForView:(UIView *)view; + +/** + returns true if the url scheme is registered in the CFBundleURLTypes + */ ++ (BOOL)isRegisteredURLScheme:(NSString *)urlScheme; + +/** + returns the current key window + */ ++ (UIWindow *)findWindow; + +/** + returns currently displayed top view controller. + */ ++ (UIViewController *)topMostViewController; + +/** + Converts NSData to a hexadecimal UTF8 String. + */ ++ (NSString *)hexadecimalStringFromData:(NSData *)data; + +/* + Checks if the permission is a publish permission. + */ ++ (BOOL)isPublishPermission:(NSString *)permission; + +/* + Checks if the set of permissions are all read permissions. + */ ++ (BOOL)areAllPermissionsReadPermissions:(NSSet *)permissions; + +/* + Checks if the set of permissions are all publish permissions. + */ ++ (BOOL)areAllPermissionsPublishPermissions:(NSSet *)permissions; + +/* + Checks if the app is Unity. + */ ++ (BOOL)isUnity; + +#pragma mark - FB Apps Installed + ++ (BOOL)isFacebookAppInstalled; ++ (BOOL)isMessengerAppInstalled; ++ (BOOL)isMSQRDPlayerAppInstalled; ++ (void)checkRegisteredCanOpenURLScheme:(NSString *)urlScheme; ++ (BOOL)isRegisteredCanOpenURLScheme:(NSString *)urlScheme; + +#define FBSDKConditionalLog(condition, loggingBehavior, desc, ...) \ +{ \ + if (!(condition)) { \ + NSString *msg = [NSString stringWithFormat:(desc), ##__VA_ARGS__]; \ + [FBSDKLogger singleShotLogEntry:loggingBehavior logEntry:msg]; \ + } \ +} + +#define FB_BASE_URL @"facebook.com" + ++ (Class)resolveBoltsClassWithName:(NSString *)className; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m new file mode 100644 index 0000000000..71c2fe8b10 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m @@ -0,0 +1,789 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKInternalUtility.h" + +#import + +#import + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKError.h" +#import "FBSDKSettings+Internal.h" +#import "FBSDKSettings.h" +#import "FBSDKUtility.h" + +typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionMask) +{ + FBSDKInternalUtilityMajorVersionMask = 0xFFFF0000, + //FBSDKInternalUtilityMinorVersionMask = 0x0000FF00, // unused + //FBSDKInternalUtilityPatchVersionMask = 0x000000FF, // unused +}; + +typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionShift) +{ + FBSDKInternalUtilityMajorVersionShift = 16, + //FBSDKInternalUtilityMinorVersionShift = 8, // unused + //FBSDKInternalUtilityPatchVersionShift = 0, // unused +}; + +@implementation FBSDKInternalUtility + +#pragma mark - Class Methods + ++ (NSString *)appURLScheme +{ + NSString *appID = ([FBSDKSettings appID] ?: @""); + NSString *suffix = ([FBSDKSettings appURLSchemeSuffix] ?: @""); + return [[NSString alloc] initWithFormat: @"fb%@%@", appID, suffix]; +} + ++ (NSURL *)appURLWithHost:(NSString *)host + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef +{ + return [self URLWithScheme:[self appURLScheme] + host:host + path:path + queryParameters:queryParameters + error:errorRef]; +} + ++ (NSDictionary *)dictionaryFromFBURL:(NSURL *)url +{ + // version 3.2.3 of the Facebook app encodes the parameters in the query but + // version 3.3 and above encode the parameters in the fragment; + // merge them together with fragment taking priority. + NSMutableDictionary *params = [NSMutableDictionary dictionary]; + [params addEntriesFromDictionary:[FBSDKUtility dictionaryWithQueryString:url.query]]; + + // Only get the params from the fragment if it has authorize as the host + if ([url.host isEqualToString:@"authorize"]) { + [params addEntriesFromDictionary:[FBSDKUtility dictionaryWithQueryString:url.fragment]]; + } + return params; +} + ++ (void)array:(NSMutableArray *)array addObject:(id)object +{ + if (object) { + [array addObject:object]; + } +} + ++ (NSBundle *)bundleForStrings +{ + static NSBundle *bundle; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *stringsBundlePath = [[NSBundle bundleForClass:[FBSDKApplicationDelegate class]] + pathForResource:@"FacebookSDKStrings" + ofType:@"bundle"]; + bundle = [NSBundle bundleWithPath:stringsBundlePath] ?: [NSBundle mainBundle]; + }); + return bundle; +} + ++ (id)convertRequestValue:(id)value +{ + if ([value isKindOfClass:[NSNumber class]]) { + value = ((NSNumber *)value).stringValue; + } else if ([value isKindOfClass:[NSURL class]]) { + value = ((NSURL *)value).absoluteString; + } + return value; +} + ++ (uint64_t)currentTimeInMilliseconds +{ + struct timeval time; + gettimeofday(&time, NULL); + return ((uint64_t)time.tv_sec * 1000) + (time.tv_usec / 1000); +} + ++ (BOOL)dictionary:(NSMutableDictionary *)dictionary +setJSONStringForObject:(id)object + forKey:(id)key + error:(NSError *__autoreleasing *)errorRef +{ + if (!object || !key) { + return YES; + } + NSString *JSONString = [self JSONStringForObject:object error:errorRef invalidObjectHandler:NULL]; + if (!JSONString) { + return NO; + } + [self dictionary:dictionary setObject:JSONString forKey:key]; + return YES; +} + ++ (void)dictionary:(NSMutableDictionary *)dictionary setObject:(id)object forKey:(id)key +{ + if (object && key) { + dictionary[key] = object; + } +} + ++ (void)extractPermissionsFromResponse:(NSDictionary *)responseObject + grantedPermissions:(NSMutableSet *)grantedPermissions + declinedPermissions:(NSMutableSet *)declinedPermissions +{ + NSArray *resultData = responseObject[@"data"]; + if (resultData.count > 0) { + for (NSDictionary *permissionsDictionary in resultData) { + NSString *permissionName = permissionsDictionary[@"permission"]; + NSString *status = permissionsDictionary[@"status"]; + + if ([status isEqualToString:@"granted"]) { + [grantedPermissions addObject:permissionName]; + } else if ([status isEqualToString:@"declined"]) { + [declinedPermissions addObject:permissionName]; + } + } + } +} + ++ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef +{ + return [self facebookURLWithHostPrefix:hostPrefix + path:path + queryParameters:queryParameters + defaultVersion:nil + error:errorRef]; +} + ++ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + defaultVersion:(NSString *)defaultVersion + error:(NSError *__autoreleasing *)errorRef +{ + if (hostPrefix.length && ![hostPrefix hasSuffix:@"."]) { + hostPrefix = [hostPrefix stringByAppendingString:@"."]; + } + + NSString *host = @"facebook.com"; + NSString *domainPart = [FBSDKSettings facebookDomainPart]; + if (domainPart.length) { + host = [[NSString alloc] initWithFormat:@"%@.%@", domainPart, host]; + } + host = [NSString stringWithFormat:@"%@%@", hostPrefix ?: @"", host ?: @""]; + + NSString *version = defaultVersion ?: [FBSDKSettings graphAPIVersion]; + if (version.length) { + version = [@"/" stringByAppendingString:version]; + } + + if (path.length) { + NSScanner *versionScanner = [[NSScanner alloc] initWithString:path]; + if ([versionScanner scanString:@"/v" intoString:NULL] && + [versionScanner scanInteger:NULL] && + [versionScanner scanString:@"." intoString:NULL] && + [versionScanner scanInteger:NULL]) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:[NSString stringWithFormat:@"Invalid Graph API version:%@, assuming %@ instead", + version, + [FBSDKSettings graphAPIVersion]]]; + version = nil; + } + if (![path hasPrefix:@"/"]) { + path = [@"/" stringByAppendingString:path]; + } + } + path = [[NSString alloc] initWithFormat:@"%@%@", version ?: @"", path ?: @""]; + + return [self URLWithScheme:@"https" + host:host + path:path + queryParameters:queryParameters + error:errorRef]; +} + ++ (BOOL)isBrowserURL:(NSURL *)URL +{ + NSString *scheme = URL.scheme.lowercaseString; + return ([scheme isEqualToString:@"http"] || [scheme isEqualToString:@"https"]); +} + ++ (BOOL)isFacebookBundleIdentifier:(NSString *)bundleIdentifier +{ + return ([bundleIdentifier hasPrefix:@"com.facebook."] || + [bundleIdentifier hasPrefix:@".com.facebook."]); +} + ++ (BOOL)isOSRunTimeVersionAtLeast:(NSOperatingSystemVersion)version +{ + return ([self _compareOperatingSystemVersion:[self operatingSystemVersion] toVersion:version] != NSOrderedAscending); +} + ++ (BOOL)isSafariBundleIdentifier:(NSString *)bundleIdentifier +{ + return ([bundleIdentifier isEqualToString:@"com.apple.mobilesafari"] || + [bundleIdentifier isEqualToString:@"com.apple.SafariViewService"]); +} + ++ (BOOL)isUIKitLinkTimeVersionAtLeast:(FBSDKUIKitVersion)version +{ + static int32_t linkTimeMajorVersion; + static dispatch_once_t getVersionOnce; + dispatch_once(&getVersionOnce, ^{ + int32_t linkTimeVersion = NSVersionOfLinkTimeLibrary("UIKit"); + linkTimeMajorVersion = [self getMajorVersionFromFullLibraryVersion:linkTimeVersion]; + }); + return (version <= linkTimeMajorVersion); +} + ++ (BOOL)isUIKitRunTimeVersionAtLeast:(FBSDKUIKitVersion)version +{ + static int32_t runTimeMajorVersion; + static dispatch_once_t getVersionOnce; + dispatch_once(&getVersionOnce, ^{ + int32_t runTimeVersion = NSVersionOfRunTimeLibrary("UIKit"); + runTimeMajorVersion = [self getMajorVersionFromFullLibraryVersion:runTimeVersion]; + }); + return (version <= runTimeMajorVersion); +} + ++ (int32_t)getMajorVersionFromFullLibraryVersion:(int32_t)version +{ + // Negative values returned by NSVersionOfRunTimeLibrary/NSVersionOfLinkTimeLibrary + // are still valid version numbers, as long as it's not -1. + // After bitshift by 16, the negatives become valid positive major version number. + // We ran into this first time with iOS 12. + if (version != -1) { + return ((version & FBSDKInternalUtilityMajorVersionMask) >> FBSDKInternalUtilityMajorVersionShift); + } else { + return 0; + } +} + ++ (NSString *)JSONStringForObject:(id)object + error:(NSError *__autoreleasing *)errorRef + invalidObjectHandler:(id(^)(id object, BOOL *stop))invalidObjectHandler +{ + if (invalidObjectHandler || ![NSJSONSerialization isValidJSONObject:object]) { + object = [self _convertObjectToJSONObject:object invalidObjectHandler:invalidObjectHandler stop:NULL]; + if (![NSJSONSerialization isValidJSONObject:object]) { + if (errorRef != NULL) { + *errorRef = [NSError fbInvalidArgumentErrorWithName:@"object" + value:object + message:@"Invalid object for JSON serialization."]; + } + return nil; + } + } + NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:errorRef]; + if (!data) { + return nil; + } + return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; +} + ++ (BOOL)object:(id)object isEqualToObject:(id)other; +{ + if (object == other) { + return YES; + } + if (!object || !other) { + return NO; + } + return [object isEqual:other]; +} + ++ (id)objectForJSONString:(NSString *)string error:(NSError *__autoreleasing *)errorRef +{ + NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; + if (!data) { + if (errorRef != NULL) { + *errorRef = nil; + } + return nil; + } + return [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:errorRef]; +} + ++ (NSOperatingSystemVersion)operatingSystemVersion +{ + static NSOperatingSystemVersion operatingSystemVersion = { + .majorVersion = 0, + .minorVersion = 0, + .patchVersion = 0, + }; + static dispatch_once_t getVersionOnce; + dispatch_once(&getVersionOnce, ^{ + if ([NSProcessInfo instancesRespondToSelector:@selector(operatingSystemVersion)]) { + operatingSystemVersion = [NSProcessInfo processInfo].operatingSystemVersion; + } else { + NSArray *components = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; + switch (components.count) { + default: + case 3: + operatingSystemVersion.patchVersion = [components[2] integerValue]; + // fall through + case 2: + operatingSystemVersion.minorVersion = [components[1] integerValue]; + // fall through + case 1: + operatingSystemVersion.majorVersion = [components[0] integerValue]; + break; + case 0: + operatingSystemVersion.majorVersion = ([self isUIKitLinkTimeVersionAtLeast:FBSDKUIKitVersion_7_0] ? 7 : 6); + break; + } + } + }); + return operatingSystemVersion; +} + ++ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary + error:(NSError *__autoreleasing *)errorRef + invalidObjectHandler:(id(^)(id object, BOOL *stop))invalidObjectHandler +{ + NSMutableString *queryString = [[NSMutableString alloc] init]; + __block BOOL hasParameters = NO; + if (dictionary) { + NSMutableArray *keys = [dictionary.allKeys mutableCopy]; + // remove non-string keys, as they are not valid + [keys filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { + return [evaluatedObject isKindOfClass:[NSString class]]; + }]]; + // sort the keys so that the query string order is deterministic + [keys sortUsingSelector:@selector(compare:)]; + BOOL stop = NO; + for (NSString *key in keys) { + id value = [self convertRequestValue:dictionary[key]]; + if ([value isKindOfClass:[NSString class]]) { + value = [FBSDKUtility URLEncode:value]; + } + if (invalidObjectHandler && ![value isKindOfClass:[NSString class]]) { + value = invalidObjectHandler(value, &stop); + if (stop) { + break; + } + } + if (value) { + if (hasParameters) { + [queryString appendString:@"&"]; + } + [queryString appendFormat:@"%@=%@", key, value]; + hasParameters = YES; + } + } + } + if (errorRef != NULL) { + *errorRef = nil; + } + return (queryString.length ? [queryString copy] : nil); +} + ++ (BOOL)shouldManuallyAdjustOrientation +{ + return (![self isUIKitLinkTimeVersionAtLeast:FBSDKUIKitVersion_8_0] || + ![self isUIKitRunTimeVersionAtLeast:FBSDKUIKitVersion_8_0]); +} + ++ (NSURL *)URLWithScheme:(NSString *)scheme + host:(NSString *)host + path:(NSString *)path + queryParameters:(NSDictionary *)queryParameters + error:(NSError *__autoreleasing *)errorRef +{ + if (![path hasPrefix:@"/"]) { + path = [@"/" stringByAppendingString:path ?: @""]; + } + + NSString *queryString = nil; + if (queryParameters.count) { + NSError *queryStringError; + queryString = [@"?" stringByAppendingString:[FBSDKUtility queryStringWithDictionary:queryParameters + error:&queryStringError]]; + if (!queryString) { + if (errorRef != NULL) { + *errorRef = [NSError fbInvalidArgumentErrorWithName:@"queryParameters" + value:queryParameters + message:nil + underlyingError:queryStringError]; + } + return nil; + } + } + + NSURL *URL = [[NSURL alloc] initWithString:[NSString stringWithFormat: + @"%@://%@%@%@", + scheme ?: @"", + host ?: @"", + path ?: @"", + queryString ?: @""]]; + if (errorRef != NULL) { + if (URL) { + *errorRef = nil; + } else { + *errorRef = [NSError fbUnknownErrorWithMessage:@"Unknown error building URL."]; + } + } + return URL; +} + ++ (void)deleteFacebookCookies +{ + NSHTTPCookieStorage *cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + NSArray *facebookCookies = [cookies cookiesForURL:[self facebookURLWithHostPrefix:@"m." + path:@"/dialog/" + queryParameters:nil + error:NULL]]; + + for (NSHTTPCookie *cookie in facebookCookies) { + [cookies deleteCookie:cookie]; + } +} + +static NSMapTable *_transientObjects; + ++ (void)registerTransientObject:(id)object +{ + NSAssert([NSThread isMainThread], @"Must be called from the main thread!"); + if (!_transientObjects) { + _transientObjects = [[NSMapTable alloc] init]; + } + NSUInteger count = ((NSNumber *)[_transientObjects objectForKey:object]).unsignedIntegerValue; + [_transientObjects setObject:@(count + 1) forKey:object]; +} + ++ (void)unregisterTransientObject:(__weak id)object +{ + if (!object) { + return; + } + NSAssert([NSThread isMainThread], @"Must be called from the main thread!"); + NSUInteger count = ((NSNumber *)[_transientObjects objectForKey:object]).unsignedIntegerValue; + if (count == 1) { + [_transientObjects removeObjectForKey:object]; + } else if (count != 0) { + [_transientObjects setObject:@(count - 1) forKey:object]; + } else { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"unregisterTransientObject:%@ count is 0. This may indicate a bug in the FBSDK. Please" + " file a report to developers.facebook.com/bugs if you encounter any problems. Thanks!", [object class]]; + } +} + ++ (UIViewController *)viewControllerForView:(UIView *)view +{ + UIResponder *responder = view.nextResponder; + while (responder) { + if ([responder isKindOfClass:[UIViewController class]]) { + return (UIViewController *)responder; + } + responder = responder.nextResponder; + } + return nil; +} + +#pragma mark - FB Apps Installed + ++ (BOOL)isFacebookAppInstalled +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + [FBSDKInternalUtility checkRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_FACEBOOK]; + }); + return [self _canOpenURLScheme:FBSDK_CANOPENURL_FACEBOOK]; +} + ++ (BOOL)isMessengerAppInstalled +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + [FBSDKInternalUtility checkRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_MESSENGER]; + }); + return [self _canOpenURLScheme:FBSDK_CANOPENURL_MESSENGER]; +} + ++ (BOOL)isMSQRDPlayerAppInstalled +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + [FBSDKInternalUtility checkRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_MSQRD_PLAYER]; + }); + return [self _canOpenURLScheme:FBSDK_CANOPENURL_MSQRD_PLAYER]; +} + +#pragma mark - Helper Methods + ++ (NSComparisonResult)_compareOperatingSystemVersion:(NSOperatingSystemVersion)version1 + toVersion:(NSOperatingSystemVersion)version2 +{ + if (version1.majorVersion < version2.majorVersion) { + return NSOrderedAscending; + } else if (version1.majorVersion > version2.majorVersion) { + return NSOrderedDescending; + } else if (version1.minorVersion < version2.minorVersion) { + return NSOrderedAscending; + } else if (version1.minorVersion > version2.minorVersion) { + return NSOrderedDescending; + } else if (version1.patchVersion < version2.patchVersion) { + return NSOrderedAscending; + } else if (version1.patchVersion > version2.patchVersion) { + return NSOrderedDescending; + } else { + return NSOrderedSame; + } +} + ++ (id)_convertObjectToJSONObject:(id)object + invalidObjectHandler:(id(^)(id object, BOOL *stop))invalidObjectHandler + stop:(BOOL *)stopRef +{ + __block BOOL stop = NO; + if ([object isKindOfClass:[NSString class]] || [object isKindOfClass:[NSNumber class]]) { + // good to go, keep the object + } else if ([object isKindOfClass:[NSURL class]]) { + object = ((NSURL *)object).absoluteString; + } else if ([object isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; + [(NSDictionary *)object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *dictionaryStop) { + [self dictionary:dictionary + setObject:[self _convertObjectToJSONObject:obj invalidObjectHandler:invalidObjectHandler stop:&stop] + forKey:[FBSDKTypeUtility stringValue:key]]; + if (stop) { + *dictionaryStop = YES; + } + }]; + object = dictionary; + } else if ([object isKindOfClass:[NSArray class]]) { + NSMutableArray *array = [[NSMutableArray alloc] init]; + for (id obj in (NSArray *)object) { + id convertedObj = [self _convertObjectToJSONObject:obj invalidObjectHandler:invalidObjectHandler stop:&stop]; + [self array:array addObject:convertedObj]; + if (stop) { + break; + } + } + object = array; + } else { + object = invalidObjectHandler(object, stopRef); + } + if (stopRef != NULL) { + *stopRef = stop; + } + return object; +} + ++ (BOOL)_canOpenURLScheme:(NSString *)scheme +{ + NSURLComponents *components = [[NSURLComponents alloc] init]; + components.scheme = scheme; + components.path = @"/"; + return [[UIApplication sharedApplication] canOpenURL:components.URL]; +} + ++ (void)validateAppID +{ + if (![FBSDKSettings appID]) { + NSString *reason = @"App ID not found. Add a string value with your app ID for the key " + @"FacebookAppID to the Info.plist or call [FBSDKSettings setAppID:]."; + @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; + } +} + ++ (NSString *)validateRequiredClientAccessToken { + if (![FBSDKSettings clientToken]) { + NSString *reason = @"ClientToken is required to be set for this operation. " + @"Set the FacebookClientToken in the Info.plist or call [FBSDKSettings setClientToken:]. " + @"You can find your client token in your App Settings -> Advanced."; + @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; + } + return [NSString stringWithFormat:@"%@|%@", [FBSDKSettings appID], [FBSDKSettings clientToken]]; +} + ++ (void)validateURLSchemes +{ + [self validateAppID]; + NSString *defaultUrlScheme = [NSString stringWithFormat:@"fb%@%@", [FBSDKSettings appID], [FBSDKSettings appURLSchemeSuffix] ?: @""]; + if (![self isRegisteredURLScheme:defaultUrlScheme]) { + NSString *reason = [NSString stringWithFormat:@"%@ is not registered as a URL scheme. Please add it in your Info.plist", defaultUrlScheme]; + @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; + } +} + ++ (void)validateFacebookReservedURLSchemes +{ + for (NSString * fbUrlScheme in @[FBSDK_CANOPENURL_FACEBOOK, FBSDK_CANOPENURL_MESSENGER, FBSDK_CANOPENURL_FBAPI, FBSDK_CANOPENURL_SHARE_EXTENSION]) { + if ([self isRegisteredURLScheme:fbUrlScheme]) { + NSString *reason = [NSString stringWithFormat:@"%@ is registered as a URL scheme. Please move the entry from CFBundleURLSchemes in your Info.plist to LSApplicationQueriesSchemes. If you are trying to resolve \"canOpenURL: failed\" warnings, those only indicate that the Facebook app is not installed on your device or simulator and can be ignored.", fbUrlScheme]; + @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; + } + } +} + ++ (UIWindow *)findWindow +{ + UIWindow *window = [UIApplication sharedApplication].keyWindow; + if (window == nil || window.windowLevel != UIWindowLevelNormal) { + for (window in [UIApplication sharedApplication].windows) { + if (window.windowLevel == UIWindowLevelNormal) { + break; + } + } + } + if (window == nil) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"Unable to find a valid UIWindow", nil]; + } + return window; +} + ++ (UIViewController *)topMostViewController +{ + UIWindow *keyWindow = [self findWindow]; + // SDK expects a key window at this point, if it is not, make it one + if (keyWindow != nil && !keyWindow.isKeyWindow) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"Unable to obtain a key window, marking %@ as keyWindow", keyWindow.description]; + [keyWindow makeKeyWindow]; + } + + UIViewController *topController = keyWindow.rootViewController; + while (topController.presentedViewController) { + topController = topController.presentedViewController; + } + return topController; +} + ++ (NSString *)hexadecimalStringFromData:(NSData *)data +{ + NSUInteger dataLength = data.length; + if (dataLength == 0) { + return nil; + } + + const unsigned char *dataBuffer = data.bytes; + NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)]; + for (int i = 0; i < dataLength; ++i) { + [hexString appendFormat:@"%02x", dataBuffer[i]]; + } + return [hexString copy]; +} + ++ (BOOL)isRegisteredURLScheme:(NSString *)urlScheme { + static dispatch_once_t fetchBundleOnce; + static NSArray *urlTypes = nil; + + dispatch_once(&fetchBundleOnce, ^{ + urlTypes = [[NSBundle mainBundle].infoDictionary valueForKey:@"CFBundleURLTypes"]; + }); + for (NSDictionary *urlType in urlTypes) { + NSArray *urlSchemes = [urlType valueForKey:@"CFBundleURLSchemes"]; + if ([urlSchemes containsObject:urlScheme]) { + return YES; + } + } + return NO; +} + ++ (void)checkRegisteredCanOpenURLScheme:(NSString *)urlScheme +{ + static dispatch_once_t initCheckedSchemesOnce; + static NSMutableSet *checkedSchemes = nil; + + dispatch_once(&initCheckedSchemesOnce, ^{ + checkedSchemes = [NSMutableSet set]; + }); + + @synchronized(self) { + if ([checkedSchemes containsObject:urlScheme]) { + return; + } else { + [checkedSchemes addObject:urlScheme]; + } + } + + if (![self isRegisteredCanOpenURLScheme:urlScheme]){ + NSString *reason = [NSString stringWithFormat:@"%@ is missing from your Info.plist under LSApplicationQueriesSchemes and is required for iOS 9.0", urlScheme]; + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:reason]; + } +} + ++ (BOOL)isRegisteredCanOpenURLScheme:(NSString *)urlScheme +{ + static dispatch_once_t fetchBundleOnce; + static NSArray *schemes = nil; + + dispatch_once(&fetchBundleOnce, ^{ + schemes = [[NSBundle mainBundle].infoDictionary valueForKey:@"LSApplicationQueriesSchemes"]; + }); + + return [schemes containsObject:urlScheme]; +} + ++ (BOOL)isPublishPermission:(NSString *)permission +{ + return [permission hasPrefix:@"publish"] || + [permission hasPrefix:@"manage"] || + [permission isEqualToString:@"ads_management"] || + [permission isEqualToString:@"create_event"] || + [permission isEqualToString:@"rsvp_event"]; +} + ++ (BOOL)areAllPermissionsReadPermissions:(NSSet *)permissions +{ + for (NSString *permission in permissions) { + if ([[self class] isPublishPermission:permission]) { + return NO; + } + } + return YES; +} + ++ (BOOL)areAllPermissionsPublishPermissions:(NSSet *)permissions +{ + for (NSString *permission in permissions) { + if (![[self class] isPublishPermission:permission]) { + return NO; + } + } + return YES; +} + ++ (Class)resolveBoltsClassWithName:(NSString *)className; +{ + Class clazz = NSClassFromString(className); + if (clazz == nil) { + NSString *message = [NSString stringWithFormat:@"Unable to load class %@. Did you link Bolts.framework?", className]; + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:message + userInfo:nil]; + } + + return clazz; +} + ++ (BOOL)isUnity +{ + NSString *userAgentSuffix = [FBSDKSettings userAgentSuffix]; + if (userAgentSuffix != nil && [userAgentSuffix rangeOfString:@"Unity"].location != NSNotFound) { + return YES; + } + return NO; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h new file mode 100644 index 0000000000..1672a8b580 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h @@ -0,0 +1,86 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + + Simple logging utility for conditionally logging strings and then emitting them + via NSLog(). + + @unsorted + */ +@interface FBSDKLogger : NSObject + +// Access current accumulated contents of the logger. +@property (copy, nonatomic) NSString *contents; + +// Each FBSDKLogger gets a unique serial number to allow the client to log these numbers and, for instance, correlation of Request/Response +@property (nonatomic, readonly) NSUInteger loggerSerialNumber; + +// The logging behavior of this logger. See the FB_LOG_BEHAVIOR* constants in FBSession.h +@property (copy, nonatomic, readonly) NSString *loggingBehavior; + +// Is the current logger instance active, based on its loggingBehavior? +@property (nonatomic, readonly) BOOL isActive; + +// +// Instance methods +// + +// Create with specified logging behavior +- (instancetype)initWithLoggingBehavior:(NSString *)loggingBehavior; + +// Append string, or key/value pair +- (void)appendString:(NSString *)string; +- (void)appendFormat:(NSString *)formatString, ... NS_FORMAT_FUNCTION(1,2); +- (void)appendKey:(NSString *)key value:(NSString *)value; + +// Emit log, clearing out the logger contents. +- (void)emitToNSLog; + +// +// Class methods +// + +// +// Return a globally unique serial number to be used for correlating multiple output from the same logger. +// ++ (NSUInteger)generateSerialNumber; + +// Simple helper to write a single log entry, based upon whether the behavior matches a specified on. ++ (void)singleShotLogEntry:(NSString *)loggingBehavior + logEntry:(NSString *)logEntry; + ++ (void)singleShotLogEntry:(NSString *)loggingBehavior + formatString:(NSString *)formatString, ... NS_FORMAT_FUNCTION(2,3); + ++ (void)singleShotLogEntry:(NSString *)loggingBehavior + timestampTag:(NSObject *)timestampTag + formatString:(NSString *)formatString, ... NS_FORMAT_FUNCTION(3,4); + +// Register a timestamp label with the "current" time, to then be retrieved by singleShotLogEntry +// to include a duration. ++ (void)registerCurrentTime:(NSString *)loggingBehavior + withTag:(NSObject *)timestampTag; + +// When logging strings, replace all instances of 'replace' with instances of 'replaceWith'. ++ (void)registerStringToReplace:(NSString *)replace + replaceWith:(NSString *)replaceWith; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m new file mode 100644 index 0000000000..6b638fb756 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m @@ -0,0 +1,218 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLogger.h" + +#import "FBSDKInternalUtility.h" +#import "FBSDKSettings+Internal.h" + +static NSUInteger g_serialNumberCounter = 1111; +static NSMutableDictionary *g_stringsToReplace = nil; +static NSMutableDictionary *g_startTimesWithTags = nil; + +@interface FBSDKLogger () + +@property (nonatomic, strong, readonly) NSMutableString *internalContents; + +@end + +@implementation FBSDKLogger + +// Lifetime + +- (instancetype)initWithLoggingBehavior:(NSString *)loggingBehavior +{ + if ((self = [super init])) { + _isActive = [FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]; + _loggingBehavior = loggingBehavior; + if (_isActive) { + _internalContents = [[NSMutableString alloc] init]; + _loggerSerialNumber = [FBSDKLogger generateSerialNumber]; + } + } + + return self; +} + +// Public properties + +- (NSString *)contents +{ + return _internalContents; +} + +- (void)setContents:(NSString *)contents +{ + if (_isActive) { + _internalContents = [NSMutableString stringWithString:contents]; + } +} + +// Public instance methods + +- (void)appendString:(NSString *)string +{ + if (_isActive) { + [_internalContents appendString:string]; + } +} + +- (void)appendFormat:(NSString *)formatString, ... +{ + if (_isActive) { + va_list vaArguments; + va_start(vaArguments, formatString); + NSString *logString = [[NSString alloc] initWithFormat:formatString arguments:vaArguments]; + va_end(vaArguments); + + [self appendString:logString]; + } +} + + +- (void)appendKey:(NSString *)key value:(NSString *)value +{ + if (_isActive && value.length) { + [_internalContents appendFormat:@" %@:\t%@\n", key, value]; + } +} + +- (void)emitToNSLog +{ + if (_isActive) { + + for (NSString *key in [g_stringsToReplace keyEnumerator]) { + [_internalContents replaceOccurrencesOfString:key + withString:g_stringsToReplace[key] + options:NSLiteralSearch + range:NSMakeRange(0, _internalContents.length)]; + } + + // Xcode 4.4 hangs on extremely long NSLog output (http://openradar.appspot.com/11972490). Truncate if needed. + const int MAX_LOG_STRING_LENGTH = 10000; + NSString *logString = _internalContents; + if (_internalContents.length > MAX_LOG_STRING_LENGTH) { + logString = [NSString stringWithFormat:@"TRUNCATED: %@", [_internalContents substringToIndex:MAX_LOG_STRING_LENGTH]]; + } + NSLog(@"FBSDKLog: %@", logString); + + [_internalContents setString:@""]; + } +} + +// Public static methods + ++ (NSUInteger)generateSerialNumber +{ + return g_serialNumberCounter++; +} + ++ (void)singleShotLogEntry:(NSString *)loggingBehavior + logEntry:(NSString *)logEntry { + if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { + FBSDKLogger *logger = [[FBSDKLogger alloc] initWithLoggingBehavior:loggingBehavior]; + [logger appendString:logEntry]; + [logger emitToNSLog]; + } +} + ++ (void)singleShotLogEntry:(NSString *)loggingBehavior + formatString:(NSString *)formatString, ... { + + if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { + va_list vaArguments; + va_start(vaArguments, formatString); + NSString *logString = [[NSString alloc] initWithFormat:formatString arguments:vaArguments]; + va_end(vaArguments); + + [self singleShotLogEntry:loggingBehavior logEntry:logString]; + } +} + + ++ (void)singleShotLogEntry:(NSString *)loggingBehavior + timestampTag:(NSObject *)timestampTag + formatString:(NSString *)formatString, ... { + + if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { + va_list vaArguments; + va_start(vaArguments, formatString); + NSString *logString = [[NSString alloc] initWithFormat:formatString arguments:vaArguments]; + va_end(vaArguments); + + // Start time of this "timestampTag" is stashed in the dictionary. + // Treat the incoming object tag simply as an address, since it's only used to identify during lifetime. If + // we send in as an object, the dictionary will try to copy it. + NSNumber *tagAsNumber = @((unsigned long)(__bridge void *)timestampTag); + NSNumber *startTimeNumber = g_startTimesWithTags[tagAsNumber]; + + // Only log if there's been an associated start time. + if (startTimeNumber) { + uint64_t elapsed = [FBSDKInternalUtility currentTimeInMilliseconds] - startTimeNumber.unsignedLongLongValue; + [g_startTimesWithTags removeObjectForKey:tagAsNumber]; // served its purpose, remove + + // Log string is appended with "%d msec", with nothing intervening. This gives the most control to the caller. + logString = [NSString stringWithFormat:@"%@%llu msec", logString, elapsed]; + + [self singleShotLogEntry:loggingBehavior logEntry:logString]; + } + } +} + ++ (void)registerCurrentTime:(NSString *)loggingBehavior + withTag:(NSObject *)timestampTag { + + if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { + + if (!g_startTimesWithTags) { + g_startTimesWithTags = [[NSMutableDictionary alloc] init]; + } + + if (g_startTimesWithTags.count >= 1000) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry: + @"Unexpectedly large number of outstanding perf logging start times, something is likely wrong."]; + } + + uint64_t currTime = [FBSDKInternalUtility currentTimeInMilliseconds]; + + // Treat the incoming object tag simply as an address, since it's only used to identify during lifetime. If + // we send in as an object, the dictionary will try to copy it. + unsigned long tagAsNumber = (unsigned long)(__bridge void *)timestampTag; + g_startTimesWithTags[@(tagAsNumber)] = @(currTime); + } +} + + ++ (void)registerStringToReplace:(NSString *)replace + replaceWith:(NSString *)replaceWith { + + // Strings sent in here never get cleaned up, but that's OK, don't ever expect too many. + + if (FBSDKSettings.loggingBehaviors.count > 0) { // otherwise there's no logging. + + if (!g_stringsToReplace) { + g_stringsToReplace = [[NSMutableDictionary alloc] init]; + } + + [g_stringsToReplace setValue:replaceWith forKey:replace]; + } +} + + + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h new file mode 100644 index 0000000000..5414e38281 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h @@ -0,0 +1,41 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface FBSDKMath : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + ++ (CGPoint)ceilForPoint:(CGPoint)value; ++ (CGSize)ceilForSize:(CGSize)value; ++ (CGPoint)floorForPoint:(CGPoint)value; ++ (CGSize)floorForSize:(CGSize)value; ++ (NSUInteger)hashWithCGFloat:(CGFloat)value; ++ (NSUInteger)hashWithCString:(const char *)value; ++ (NSUInteger)hashWithDouble:(double)value; ++ (NSUInteger)hashWithFloat:(float)value; ++ (NSUInteger)hashWithInteger:(NSUInteger)value; ++ (NSUInteger)hashWithInteger:(NSUInteger)value1 andInteger:(NSUInteger)value2; ++ (NSUInteger)hashWithIntegerArray:(NSUInteger *)values count:(NSUInteger)count; ++ (NSUInteger)hashWithLong:(unsigned long long)value; ++ (NSUInteger)hashWithPointer:(const void *)value; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m new file mode 100644 index 0000000000..302e80b170 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m @@ -0,0 +1,149 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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. + +// +// Based on Thomas Wang 32/64 bit mix hash +// http://www.concentric.net/~Ttwang/tech/inthash.htm +// + +#import "FBSDKMath.h" + +#import + +@implementation FBSDKMath + +#pragma mark - Class Methods + ++ (CGPoint)ceilForPoint:(CGPoint)value +{ + return CGPointMake(ceilf(value.x), ceilf(value.x)); +} + ++ (CGSize)ceilForSize:(CGSize)value +{ + return CGSizeMake(ceilf(value.width), ceilf(value.height)); +} + ++ (CGPoint)floorForPoint:(CGPoint)value +{ + return CGPointMake(floorf(value.x), floorf(value.y)); +} + ++ (CGSize)floorForSize:(CGSize)value +{ + return CGSizeMake(floorf(value.width), floorf(value.height)); +} + ++ (NSUInteger)hashWithCGFloat:(CGFloat)value +{ +#if CGFLOAT_IS_DOUBLE + return [self hashWithDouble:value]; +#else + return [self hashWithFloat:value]; +#endif +} + ++ (NSUInteger)hashWithCString:(const char *)value +{ + // FNV-1a hash. + NSUInteger hash = sizeof(NSUInteger) == 4 ? 2166136261U : 14695981039346656037U; + while (*value) { + hash ^= *value++; + hash *= sizeof(NSUInteger) == 4 ? 16777619 : 1099511628211; + } + return hash; +} + ++ (NSUInteger)hashWithDouble:(double)value +{ + assert(sizeof(double) == sizeof(uint64_t)); // Size of double must be 8 bytes + union { + double key; + uint64_t bits; + } u; + u.key = value; + return [self hashWithLong:u.bits]; +} + ++ (NSUInteger)hashWithFloat:(float)value +{ + assert(sizeof(float) == sizeof(uint32_t)); // Size of float must be 4 bytes + union { + float key; + uint32_t bits; + } u; + u.key = value; + return [self hashWithInteger:u.bits]; +} + ++ (NSUInteger)hashWithInteger:(NSUInteger)value +{ + return [self hashWithPointer:(void *)value]; +} + ++ (NSUInteger)hashWithInteger:(NSUInteger)value1 andInteger:(NSUInteger)value2 +{ + return [self hashWithLong:(((unsigned long long)value1) << 32 | value2)]; +} + ++ (NSUInteger)hashWithIntegerArray:(NSUInteger *)values count:(NSUInteger)count +{ + if (count == 0) { + return 0; + } + NSUInteger hash = values[0]; + for (NSUInteger i = 1; i < count; ++i) { + hash = [self hashWithInteger:hash andInteger:values[i]]; + } + return hash; +} + ++ (NSUInteger)hashWithLong:(unsigned long long)value +{ + value = (~value) + (value << 18); // key = (key << 18) - key - 1; + value ^= (value >> 31); + value *= 21; // key = (key + (key << 2)) + (key << 4); + value ^= (value >> 11); + value += (value << 6); + value ^= (value >> 22); + return (NSUInteger)value; +} + ++ (NSUInteger)hashWithPointer:(const void *)value +{ + NSUInteger hash = (NSUInteger)value; +#if !TARGET_RT_64_BIT + hash = ~hash + (hash << 15); // key = (key << 15) - key - 1; + hash ^= (hash >> 12); + hash += (hash << 2); + hash ^= (hash >> 4); + hash *= 2057; // key = (key + (key << 3)) + (key << 11); + hash ^= (hash >> 16); +#else + hash += ~hash + (hash << 21); // key = (key << 21) - key - 1; + hash ^= (hash >> 24); + hash = (hash + (hash << 3)) + (hash << 8); + hash ^= (hash >> 14); + hash = (hash + (hash << 2)) + (hash << 4); // key * 21 + hash ^= (hash >> 28); + hash += (hash << 31); +#endif + return hash; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h new file mode 100644 index 0000000000..e3b039fd82 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h @@ -0,0 +1,33 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKMeasurementEvent.h" + +NS_ASSUME_NONNULL_BEGIN + +/*! + Provides methods for posting notifications from the Bolts framework + */ +@interface FBSDKMeasurementEvent (Internal) + ++ (void)postNotificationForEventName:(NSString *)name + args:(NSDictionary *)args; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h new file mode 100644 index 0000000000..d504d9733e --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h @@ -0,0 +1,67 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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. + +#include + +typedef double FBSDKMonotonicTimeSeconds; +typedef uint64_t FBSDKMonotonicTimeMilliseconds; +typedef uint64_t FBSDKMonotonicTimeNanoseconds; +typedef uint64_t FBSDKMachAbsoluteTimeUnits; + +/** + * return current monotonic time in Milliseconds + * Millisecond precision, uint64_t value. + * Avoids float/double math operations, thus more efficient than FBSDKMonotonicTimeGetCurrentSeconds. + * Should be preferred over FBSDKMonotonicTimeGetCurrentSeconds in case millisecond + * precision is required. + * IMPORTANT: this timer doesn't run while the device is sleeping. + */ +FBSDKMonotonicTimeMilliseconds FBSDKMonotonicTimeGetCurrentMilliseconds(void); + +/** + * return current monotonic time in Seconds + * Nanosecond precision, double value. + * Should be preferred over FBSDKMonotonicTimeGetCurrentMilliseconds in case + * nanosecond precision is required. + * IMPORTANT: this timer doesn't run while the device is sleeping. + */ +FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeGetCurrentSeconds(void); + +/** + * return current monotonic time in NanoSeconds + * Nanosecond precision, uint64_t value. + * Useful when nanosecond precision is required but you want to avoid float/double math operations. + * IMPORTANT: this timer doesn't run while the device is sleeping. + */ +FBSDKMonotonicTimeNanoseconds FBSDKMonotonicTimeGetCurrentNanoseconds(void); + +/** + * return number of MachTimeUnits for given number of seconds + * this is useful when you want to use the really fast mach_absolute_time() function + * to calculate deltas between two points and then check it against a (precomputed) threshold. + * Nanosecond precision, uint64_t value. + */ +FBSDKMachAbsoluteTimeUnits FBSDKMonotonicTimeConvertSecondsToMachUnits(FBSDKMonotonicTimeSeconds seconds); + +/** + * return the number of seconds for a given amount of MachTimeUnits + * this is useful when you want to use the really fast mach_absolute_time() function, take + * deltas between time points, and when you're out of the timing critical section, use + * this function to compute how many seconds the delta works out to be. + */ +FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeConvertMachUnitsToSeconds(FBSDKMachAbsoluteTimeUnits machUnits); diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m new file mode 100644 index 0000000000..1a52c81ef9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m @@ -0,0 +1,86 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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. + +#include +#include +#include +#include + +#import "FBSDKMonotonicTime.h" + +/** + * PLEASE NOTE: FBSDKSDKMonotonicTimeTests work fine, but are disabled + * because they take several seconds. Please re-enable them to test + * any changes you're making here! + */ +static uint64_t _get_time_nanoseconds(void) +{ + static struct mach_timebase_info tb_info = {0}; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + int ret = mach_timebase_info(&tb_info); + assert(0 == ret); + }); + + return (mach_absolute_time() * tb_info.numer) / tb_info.denom; +} + +FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeGetCurrentSeconds(void) +{ + const uint64_t nowNanoSeconds = _get_time_nanoseconds(); + return (FBSDKMonotonicTimeSeconds)nowNanoSeconds / (FBSDKMonotonicTimeSeconds)1000000000.0; +} + +FBSDKMonotonicTimeMilliseconds FBSDKMonotonicTimeGetCurrentMilliseconds(void) +{ + const uint64_t nowNanoSeconds = _get_time_nanoseconds(); + return nowNanoSeconds / 1000000; +} + +FBSDKMonotonicTimeNanoseconds FBSDKMonotonicTimeGetCurrentNanoseconds(void) +{ + return _get_time_nanoseconds(); +} + +FBSDKMachAbsoluteTimeUnits FBSDKMonotonicTimeConvertSecondsToMachUnits(FBSDKMonotonicTimeSeconds seconds) +{ + static double ratio = 0; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + struct mach_timebase_info tb_info = {0}; + int ret = mach_timebase_info(&tb_info); + assert(0 == ret); + ratio = ((double) tb_info.denom / (double)tb_info.numer) * 1000000000.0; + }); + + return seconds * ratio; +} + +FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeConvertMachUnitsToSeconds(FBSDKMachAbsoluteTimeUnits machUnits) +{ + static double ratio = 0; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + struct mach_timebase_info tb_info = {0}; + int ret = mach_timebase_info(&tb_info); + assert(0 == ret); + ratio = ((double) tb_info.numer / (double)tb_info.denom) / 1000000000.0; + }); + + return ratio * (double)machUnits; +} diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h new file mode 100644 index 0000000000..d2298d53f6 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h @@ -0,0 +1,26 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKProfile.h" + +@interface FBSDKProfile(Internal) + ++ (void)cacheProfile:(FBSDKProfile *) profile; ++ (FBSDKProfile *)fetchCachedProfile; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h new file mode 100644 index 0000000000..0751f7a5db --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h @@ -0,0 +1,37 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@protocol FBSDKAccessTokenCaching; + +@interface FBSDKSettings(Internal) + ++ (NSObject *)accessTokenCache; + ++ (void)setAccessTokenCache:(NSObject *)accessTokenCache; + ++ (NSString *)graphAPIDebugParamValue; + ++ (BOOL)isGraphErrorRecoveryDisabled; + +// used by Unity. ++ (NSString *)userAgentSuffix; ++ (void)setUserAgentSuffix:(NSString *)suffix; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h new file mode 100644 index 0000000000..7e9f29c488 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +// Cast to turn things that are not ids into NSMapTable keys +#define MAPTABLE_ID(x) (__bridge id)((void *)x) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wstrict-prototypes" + +typedef void (^swizzleBlock)(); + +#pragma clang diagnostic pop + +// Rename to avoid duplicate symbol errors +@interface FBSDKSwizzler : NSObject + ++ (void)swizzleSelector:(SEL)aSelector onClass:(Class)aClass withBlock:(swizzleBlock)block named:(NSString *)aName; ++ (void)unswizzleSelector:(SEL)aSelector onClass:(Class)aClass named:(NSString *)aName; ++ (void)printSwizzles; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m new file mode 100644 index 0000000000..9bf54c72a9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m @@ -0,0 +1,321 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKSwizzler.h" + +#import + +#define MIN_ARGS 2 +#define MAX_ARGS 5 + +@interface FBSDKSwizzle : NSObject + +@property (nonatomic, assign) Class class; +@property (nonatomic, assign) SEL selector; +@property (nonatomic, assign) IMP originalMethod; +@property (nonatomic, assign) uint numArgs; +@property (nonatomic, copy) NSMapTable *blocks; + +- (instancetype)initWithBlock:(swizzleBlock)aBlock + named:(NSString *)aName + forClass:(Class)aClass + selector:(SEL)aSelector + originalMethod:(IMP)aMethod + withNumArgs:(uint)numArgs; + +@end + +static NSMapTable *swizzles; + +static FBSDKSwizzle* fb_findSwizzle(id self, SEL _cmd){ + Method aMethod = class_getInstanceMethod([self class], _cmd); + FBSDKSwizzle *swizzle = (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; + Class this_class = [FBSDKSwizzler class]; + while (!swizzle && class_getSuperclass(this_class)){ + this_class = class_getSuperclass(this_class); + aMethod = class_getInstanceMethod(this_class, _cmd); + swizzle = (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; + } + return swizzle; +} + +static void fb_swizzledMethod_2(id self, SEL _cmd) +{ + FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); + if (swizzle) { + ((void(*)(id, SEL))swizzle.originalMethod)(self, _cmd); + + NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; + swizzleBlock block; + while ((block = [blocks nextObject])) { + block(self, _cmd); + } + } +} + +static void fb_swizzledMethod_3(id self, SEL _cmd, id arg) +{ + FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); + if (swizzle) { + ((void(*)(id, SEL, id))swizzle.originalMethod)(self, _cmd, arg); + + NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; + swizzleBlock block; + while ((block = [blocks nextObject])) { + block(self, _cmd, arg); + } + } +} + +static void fb_swizzledMethod_4(id self, SEL _cmd, id arg, id arg2) +{ + FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); + if (swizzle) { + ((void(*)(id, SEL, id, id))swizzle.originalMethod)(self, _cmd, arg, arg2); + + NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; + swizzleBlock block; + while ((block = [blocks nextObject])) { + block(self, _cmd, arg, arg2); + } + } +} + +static void fb_swizzledMethod_5(id self, SEL _cmd, id arg, id arg2, id arg3) +{ + FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); + if (swizzle) { + ((void(*)(id, SEL, id, id, id))swizzle.originalMethod)(self, _cmd, arg, arg2, arg3); + + NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; + swizzleBlock block; + while ((block = [blocks nextObject])) { + block(self, _cmd, arg, arg2, arg3); + } + } +} + +static void fb_swizzleMethod_4_io(id self, SEL _cmd, NSInteger arg, id arg2) +{ + FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); + if (swizzle) { + ((void(*)(id, SEL, NSInteger, id))swizzle.originalMethod)(self, _cmd, arg, arg2); + + NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; + swizzleBlock block; + while ((block = [blocks nextObject])) { + block(self, _cmd, arg, arg2); + } + } +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wstrict-prototypes" + +static void (*fb_swizzledMethods[MAX_ARGS - MIN_ARGS + 1])() = {fb_swizzledMethod_2, fb_swizzledMethod_3, fb_swizzledMethod_4, fb_swizzledMethod_5}; + +#pragma clang diagnostic pop + +@implementation FBSDKSwizzler + ++ (void)initialize +{ + swizzles = [NSMapTable mapTableWithKeyOptions:(NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality) + valueOptions:(NSPointerFunctionsStrongMemory | NSPointerFunctionsObjectPointerPersonality)]; + [FBSDKSwizzler resolveConflict]; +} + ++ (void)resolveConflict +{ + Class swizzler = objc_lookUpClass("MPSwizzler"); + if (swizzler) { + Method method = class_getClassMethod(swizzler, @selector(swizzleSelector:onClass:withBlock:named:)); + Method newMethod = class_getClassMethod(self, @selector(swizzleSelector:onClass:withBlock:named:)); + method_setImplementation(method, method_getImplementation(newMethod)); + } +} + ++ (void)printSwizzles +{ + NSEnumerator *en = [swizzles objectEnumerator]; + FBSDKSwizzle *swizzle; + while ((swizzle = (FBSDKSwizzle *)[en nextObject])) { + NSLog(@"%@", swizzle); + } +} + ++ (FBSDKSwizzle *)swizzleForMethod:(Method)aMethod +{ + return (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; +} + ++ (void)removeSwizzleForMethod:(Method)aMethod +{ + [swizzles removeObjectForKey:MAPTABLE_ID(aMethod)]; +} + ++ (void)setSwizzle:(FBSDKSwizzle *)swizzle forMethod:(Method)aMethod +{ + [swizzles setObject:swizzle forKey:MAPTABLE_ID(aMethod)]; +} + ++ (BOOL)isLocallyDefinedMethod:(Method)aMethod onClass:(Class)aClass +{ + uint count; + BOOL isLocal = NO; + Method *methods = class_copyMethodList(aClass, &count); + for (NSUInteger i = 0; i < count; i++) { + if (aMethod == methods[i]) { + isLocal = YES; + break; + } + } + free(methods); + return isLocal; +} + ++ (void)swizzleSelector:(SEL)aSelector onClass:(Class)aClass withBlock:(swizzleBlock)aBlock named:(NSString *)aName +{ + Method aMethod = class_getInstanceMethod(aClass, aSelector); + if (aMethod) { + uint numArgs = method_getNumberOfArguments(aMethod); + if (numArgs >= MIN_ARGS && numArgs <= MAX_ARGS) { + + BOOL isLocal = [FBSDKSwizzler isLocallyDefinedMethod:aMethod onClass:aClass]; + IMP swizzledMethod = (IMP)fb_swizzledMethods[numArgs - 2]; + // Check whether the first parameter is integer + if (4 == numArgs) { + char *type = method_copyArgumentType(aMethod, 2); + NSString *firstType = [NSString stringWithCString:type encoding:NSUTF8StringEncoding]; + NSString *integerTypes = @"islq"; + if ([integerTypes containsString:firstType.lowercaseString]) { + swizzledMethod = (IMP)fb_swizzleMethod_4_io; + } + free(type); + } + + FBSDKSwizzle *swizzle = [FBSDKSwizzler swizzleForMethod:aMethod]; + + if (isLocal) { + if (!swizzle) { + IMP originalMethod = method_getImplementation(aMethod); + + // Replace the local implementation of this method with the swizzled one + method_setImplementation(aMethod,swizzledMethod); + + // Create and add the swizzle + swizzle = [[FBSDKSwizzle alloc] initWithBlock:aBlock named:aName forClass:aClass selector:aSelector originalMethod:originalMethod withNumArgs:numArgs]; + [FBSDKSwizzler setSwizzle:swizzle forMethod:aMethod]; + + } else { + [swizzle.blocks setObject:aBlock forKey:aName]; + } + } else { + IMP originalMethod = swizzle ? swizzle.originalMethod : method_getImplementation(aMethod); + + // Add the swizzle as a new local method on the class. + if (!class_addMethod(aClass, aSelector, swizzledMethod, method_getTypeEncoding(aMethod))) { + return; + } + // Now re-get the Method, it should be the one we just added. + Method newMethod = class_getInstanceMethod(aClass, aSelector); + if (aMethod == newMethod) { + return; + } + + FBSDKSwizzle *newSwizzle = [[FBSDKSwizzle alloc] initWithBlock:aBlock named:aName forClass:aClass selector:aSelector originalMethod:originalMethod withNumArgs:numArgs]; + [FBSDKSwizzler setSwizzle:newSwizzle forMethod:newMethod]; + } + } + } +} + ++ (void)unswizzleSelector:(SEL)aSelector onClass:(Class)aClass +{ + Method aMethod = class_getInstanceMethod(aClass, aSelector); + FBSDKSwizzle *swizzle = [FBSDKSwizzler swizzleForMethod:aMethod]; + if (swizzle) { + method_setImplementation(aMethod, swizzle.originalMethod); + [FBSDKSwizzler removeSwizzleForMethod:aMethod]; + } +} + +/* + Remove the named swizzle from the given class/selector. If aName is nil, remove all + swizzles for this class/selector +*/ ++ (void)unswizzleSelector:(SEL)aSelector onClass:(Class)aClass named:(NSString *)aName +{ + Method aMethod = class_getInstanceMethod(aClass, aSelector); + FBSDKSwizzle *swizzle = [FBSDKSwizzler swizzleForMethod:aMethod]; + if (swizzle) { + if (aName) { + [swizzle.blocks removeObjectForKey:aName]; + } + if (!aName || swizzle.blocks.count == 0) { + method_setImplementation(aMethod, swizzle.originalMethod); + [FBSDKSwizzler removeSwizzleForMethod:aMethod]; + } + } +} + +@end + + +@implementation FBSDKSwizzle + +- (instancetype)init +{ + if ((self = [super init])) { + self.blocks = [NSMapTable mapTableWithKeyOptions:(NSPointerFunctionsStrongMemory + | NSPointerFunctionsObjectPersonality) + valueOptions:(NSPointerFunctionsStrongMemory + | NSPointerFunctionsObjectPointerPersonality)]; + } + return self; +} + +- (instancetype)initWithBlock:(swizzleBlock)aBlock + named:(NSString *)aName + forClass:(Class)aClass + selector:(SEL)aSelector + originalMethod:(IMP)aMethod + withNumArgs:(uint)numArgs +{ + if ((self = [self init])) { + self.class = aClass; + self.selector = aSelector; + self.numArgs = numArgs; + self.originalMethod = aMethod; + [_blocks setObject:aBlock forKey:aName]; + } + return self; +} + +- (NSString *)description +{ + NSString *descriptors = @""; + NSString *key; + NSEnumerator *keys = [_blocks keyEnumerator]; + while ((key = [keys nextObject])) { + descriptors = [descriptors stringByAppendingFormat:@"\t%@ : %@\n", key, [_blocks objectForKey:key]]; + } + return [NSString stringWithFormat:@"Swizzle on %@::%@ [\n%@]", NSStringFromClass(self.class), NSStringFromSelector(self.selector), descriptors]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h new file mode 100644 index 0000000000..b547dabcb9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h @@ -0,0 +1,76 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +typedef void (^FBSDKGraphRequestAccessToAccountsHandler)(NSString *oauthToken, NSError *accountStoreError); + +/* + @class + + Adapter around system account store APIs. Note this is only intended for internal + consumption. If publicized, consider moving declarations to an internal only header and + reconsider dispatching semantics. + */ +@interface FBSDKSystemAccountStoreAdapter : NSObject + +/* + s gets the oauth token stored in the account store credential, if available. If not empty, + this implies user has granted access. + */ +@property (nonatomic, readonly, copy) NSString *accessTokenString; + +/* + Gets or sets the flag indicating if the next requestAccess call should block + on a renew call. + */ +@property (nonatomic, assign) BOOL forceBlockingRenew; + +/* + A convenience getter to the Facebook account type in the account store, if available. + */ +@property (strong, nonatomic, readonly) ACAccountType *accountType; + +/* + The singleton instance. + */ +@property (class, nonatomic, strong) FBSDKSystemAccountStoreAdapter *sharedInstance; + +/* + Requests access to the device's Facebook account for the given parameters. + @param permissions the permissions + @param defaultAudience the default audience + @param isReauthorize a flag describing if this is a reauth request + @param appID the app id + @param handler the handler that will be invoked on completion (dispatched to the main thread). the oauthToken is nil on failure. + */ +- (void)requestAccessToFacebookAccountStore:(NSSet *)permissions + defaultAudience:(NSString *)defaultAudience + isReauthorize:(BOOL)isReauthorize + appID:(NSString *)appID + handler:(FBSDKGraphRequestAccessToAccountsHandler)handler; + +/* + Sends a message to the device account store to renew the Facebook account credentials + + @param handler the handler that is invoked on completion + */ +- (void)renewSystemAuthorization:(void(^)(ACAccountCredentialRenewResult result, NSError *error))handler; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m new file mode 100644 index 0000000000..4c1601fa1f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m @@ -0,0 +1,278 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKSystemAccountStoreAdapter.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKConstants.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKError.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings+Internal.h" + +@interface FBSDKSystemAccountStoreAdapter () + +@property (retain, nonatomic, readonly) ACAccountStore *accountStore; + +@end + +static NSString *const FBForceBlockingRenewKey = @"com.facebook.sdk:ForceBlockingRenewKey"; +static FBSDKSystemAccountStoreAdapter *_singletonInstance = nil; + +@implementation FBSDKSystemAccountStoreAdapter +{ + ACAccountStore *_accountStore; + ACAccountType *_accountType; +} + ++ (void)initialize +{ + if (self == [FBSDKSystemAccountStoreAdapter class]) { + _singletonInstance = [[self alloc] init]; + } +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + _forceBlockingRenew = [[NSUserDefaults standardUserDefaults] boolForKey:FBForceBlockingRenewKey]; + } + return self; +} + +#pragma mark - Properties + +- (ACAccountStore *)accountStore +{ + if (_accountStore == nil) { + _accountStore = [[fbsdkdfl_ACAccountStoreClass() alloc] init]; + } + return _accountStore; +} + +- (ACAccountType *)accountType +{ + if (_accountType == nil) { + _accountType = [self.accountStore accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"]; + } + return _accountType; +} + +- (void)setForceBlockingRenew:(BOOL)forceBlockingRenew +{ + if (_forceBlockingRenew != forceBlockingRenew) { + _forceBlockingRenew = forceBlockingRenew; + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + [userDefaults setBool:forceBlockingRenew forKey:FBForceBlockingRenewKey]; + [userDefaults synchronize]; + } +} + ++ (FBSDKSystemAccountStoreAdapter *)sharedInstance +{ + return _singletonInstance; +} + ++ (void)setSharedInstance:(FBSDKSystemAccountStoreAdapter *)instance +{ + _singletonInstance = instance; +} + +- (NSString *)accessTokenString +{ + if (self.accountType && self.accountType.accessGranted) { + NSArray *fbAccounts = [self.accountStore accountsWithAccountType:self.accountType]; + if (fbAccounts.count > 0) { + id account = fbAccounts[0]; + id credential = [account credential]; + + return [credential oauthToken]; + } + } + return nil; +} + +#pragma mark - Public properties and methods + +- (void)requestAccessToFacebookAccountStore:(NSSet *)permissions + defaultAudience:(NSString *)defaultAudience + isReauthorize:(BOOL)isReauthorize + appID:(NSString *)appID + handler:(FBSDKGraphRequestAccessToAccountsHandler)handler +{ + if (appID == nil) { + @throw [NSException exceptionWithName:NSInvalidArgumentException + reason:@"appID cannot be nil" + userInfo:nil]; + } + + // no publish_* permissions are permitted with a nil audience + if (!defaultAudience && isReauthorize) { + for (NSString *p in permissions) { + if ([p hasPrefix:@"publish"]) { + [[NSException exceptionWithName:NSInvalidArgumentException + reason:@"FBSDKLoginManager: One or more publish permission was requested " + @"without specifying an audience; use FBSDKDefaultAudienceOnlyMe, " + @"FBSDKDefaultAudienceFriends, or FBSDKDefaultAudienceEveryone" + userInfo:nil] + raise]; + } + } + } + + // Construct access options. Constructing this way is tolerant for nil values. + NSMutableDictionary *optionsMutable = [[NSMutableDictionary alloc] initWithCapacity:3]; + optionsMutable[fbsdkdfl_ACFacebookAppIdKey()] = appID; + optionsMutable[fbsdkdfl_ACFacebookPermissionsKey()] = permissions.allObjects; + optionsMutable[fbsdkdfl_ACFacebookAudienceKey()] = defaultAudience; + NSDictionary *options = [optionsMutable copy]; + + if (self.forceBlockingRenew + && [self.accountStore accountsWithAccountType:self.accountType].count > 0) { + // If the force renew flag is set and an iOS FB account is still set, + // chain the requestAccessBlock to a successful renew result + [self renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *error) { + if (result == ACAccountCredentialRenewResultRenewed) { + self.forceBlockingRenew = NO; + [self requestAccessToFacebookAccountStore:options retrying:NO handler:handler]; + } else if (handler) { + // Otherwise, invoke the caller's handler back on the main thread with an + // error that will trigger the password change user message. + dispatch_async(dispatch_get_main_queue(), ^{ + handler(nil, error); + }); + } + }]; + } else { + // Otherwise go ahead and invoke normal request. + [self requestAccessToFacebookAccountStore:options retrying:NO handler:handler]; + } +} + +- (void)requestAccessToFacebookAccountStore:(NSDictionary *)options + retrying:(BOOL)retrying + handler:(FBSDKGraphRequestAccessToAccountsHandler)handler +{ + if (!self.accountType) { + if (handler) { + handler(nil, [NSError fbErrorWithCode:FBSDKErrorUnknown message:@"Invalid request to account store"]); + } + return; + } + // we will attempt an iOS integrated facebook login + [self.accountStore + requestAccessToAccountsWithType:self.accountType + options:options + completion:^(BOOL granted, NSError *error) { + if (!granted && + error.code == ACErrorPermissionDenied && + [error.description rangeOfString:@"remote_app_id does not match stored id"].location != NSNotFound) { + + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors formatString: + @"System authorization failed:'%@'. This may be caused by a mismatch between" + @" the bundle identifier and your app configuration on the server" + @" at developers.facebook.com/apps.", + error.localizedDescription]; + } + + // requestAccessToAccountsWithType:options:completion: completes on an + // arbitrary thread; let's process this back on our main thread + dispatch_async(dispatch_get_main_queue(), ^{ + NSError *accountStoreError = error; + NSString *oauthToken = nil; + id account = nil; + if (granted) { + NSArray *fbAccounts = [self.accountStore accountsWithAccountType:self.accountType]; + if (fbAccounts.count > 0) { + account = fbAccounts[0]; + + id credential = [account credential]; + + oauthToken = [credential oauthToken]; + } + self.forceBlockingRenew = NO; + } + + if (!accountStoreError && !oauthToken) { + if (!retrying) { + // This can happen as a result of, e.g., restoring from iCloud to a different device. Try once to renew. + [self renewSystemAuthorization:^(ACAccountCredentialRenewResult renewResult, NSError *renewError) { + // Call block again, regardless of result -- either we'll get credentials or we'll fail with the + // exception below. We want to treat failure here the same regardless of whether it was before or after the refresh attempt. + [self requestAccessToFacebookAccountStore:options retrying:YES handler:handler]; + }]; + return; + } + // else call handler with nils. + } + handler(oauthToken, accountStoreError); + }); + }]; +} + +- (void)renewSystemAuthorization:(void(^)(ACAccountCredentialRenewResult, NSError *))handler +{ + // if the slider has been set to off, renew calls to iOS simply hang, so we must + // preemptively check for that condition. + if (self.accountStore && self.accountType && self.accountType.accessGranted) { + NSArray *fbAccounts = [self.accountStore accountsWithAccountType:self.accountType]; + id account; + if (fbAccounts && fbAccounts.count > 0 && + (account = fbAccounts[0])) { + + FBSDKAccessToken *currentToken = [FBSDKAccessToken currentAccessToken]; + if (![currentToken.tokenString isEqualToString:self.accessTokenString]) { + currentToken = nil; + } + [self.accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) { + if (error) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAccessTokens + logEntry:[NSString stringWithFormat:@"renewCredentialsForAccount result:%ld, error: %@", + (long)renewResult, + error]]; + } + if (renewResult == ACAccountCredentialRenewResultRenewed && + currentToken && + [currentToken isEqual:[FBSDKAccessToken currentAccessToken]]) { + // account store renewals can change the stored oauth token so we need to update the currentAccessToken + // so future comparisons to -[ accessTokenString] work correctly (e.g., error recovery). + FBSDKAccessToken *updatedToken = [[FBSDKAccessToken alloc] initWithTokenString:self.accessTokenString + permissions:currentToken.permissions.allObjects + declinedPermissions:currentToken.declinedPermissions.allObjects + appID:currentToken.appID + userID:currentToken.userID + expirationDate:[NSDate distantFuture] + refreshDate:[NSDate date] + dataAccessExpirationDate:[NSDate distantFuture]]; + [FBSDKAccessToken setCurrentAccessToken:updatedToken]; + } + if (handler) { + handler(renewResult, error); + } + }]; + return; + } + } + + if (handler) { + handler(ACAccountCredentialRenewResultFailed, nil); + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h new file mode 100644 index 0000000000..af06684de9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h @@ -0,0 +1,30 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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(NSInteger, FBSDKTriStateBOOL) +{ + FBSDKTriStateBOOLValueUnknown = -1, + FBSDKTriStateBOOLValueNO = 0, + FBSDKTriStateBOOLValueYES = 1, +}; + +FOUNDATION_EXPORT FBSDKTriStateBOOL FBSDKTriStateBOOLFromBOOL(BOOL value); +FOUNDATION_EXPORT FBSDKTriStateBOOL FBSDKTriStateBOOLFromNSNumber(NSNumber *value); +FOUNDATION_EXPORT BOOL BOOLFromFBSDKTriStateBOOL(FBSDKTriStateBOOL value, BOOL defaultValue); diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m new file mode 100644 index 0000000000..aafcb39355 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m @@ -0,0 +1,43 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKTriStateBOOL.h" + +FBSDKTriStateBOOL FBSDKTriStateBOOLFromBOOL(BOOL value) +{ + return value ? FBSDKTriStateBOOLValueYES : FBSDKTriStateBOOLValueNO; +} + +FBSDKTriStateBOOL FBSDKTriStateBOOLFromNSNumber(NSNumber *value) +{ + return ([value isKindOfClass:[NSNumber class]] ? + FBSDKTriStateBOOLFromBOOL(value.boolValue) : + FBSDKTriStateBOOLValueUnknown); +} + +BOOL BOOLFromFBSDKTriStateBOOL(FBSDKTriStateBOOL value, BOOL defaultValue) +{ + switch (value) { + case FBSDKTriStateBOOLValueYES: + return YES; + case FBSDKTriStateBOOLValueNO: + return NO; + case FBSDKTriStateBOOLValueUnknown: + return defaultValue; + } +} diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h new file mode 100644 index 0000000000..425b8556a2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h @@ -0,0 +1,36 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKTypeUtility : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + ++ (NSArray *)arrayValue:(id)object; ++ (BOOL)boolValue:(id)object; ++ (NSDictionary *)dictionaryValue:(id)object; ++ (NSInteger)integerValue:(id)object; ++ (id)objectValue:(id)object; ++ (NSString *)stringValue:(id)object; ++ (NSTimeInterval)timeIntervalValue:(id)object; ++ (NSUInteger)unsignedIntegerValue:(id)object; ++ (NSURL *)URLValue:(id)object; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m new file mode 100644 index 0000000000..fd6c7337f2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m @@ -0,0 +1,121 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKTypeUtility.h" + +@implementation FBSDKTypeUtility + +#pragma mark - Class Methods + ++ (NSArray *)arrayValue:(id)object +{ + return (NSArray *)[self _objectValue:object ofClass:[NSArray class]]; +} + ++ (BOOL)boolValue:(id)object +{ + if ([object isKindOfClass:[NSNumber class]]) { + // @0 or @NO returns NO, otherwise YES + return ((NSNumber *)object).boolValue; + } else if ([object isKindOfClass:[NSString class]]) { + // Returns YES on encountering one of "Y", "y", "T", "t", or a digit 1-9, otherwise NO + return ((NSString *)object).boolValue; + } else { + return ([self objectValue:object] != nil); + } +} + ++ (NSDictionary *)dictionaryValue:(id)object +{ + return (NSDictionary *)[self _objectValue:object ofClass:[NSDictionary class]]; +} + ++ (NSInteger)integerValue:(id)object +{ + if ([object isKindOfClass:[NSNumber class]]) { + return ((NSNumber *)object).integerValue; + } else if ([object isKindOfClass:[NSString class]]) { + return ((NSString *)object).integerValue; + } else { + return 0; + } +} + ++ (id)objectValue:(id)object +{ + return ([object isKindOfClass:[NSNull class]] ? nil : object); +} + ++ (NSString *)stringValue:(id)object +{ + if ([object isKindOfClass:[NSString class]]) { + return (NSString *)object; + } else if ([object isKindOfClass:[NSNumber class]]) { + return ((NSNumber *)object).stringValue; + } else if ([object isKindOfClass:[NSURL class]]) { + return ((NSURL *)object).absoluteString; + } else { + return nil; + } +} + ++ (NSTimeInterval)timeIntervalValue:(id)object +{ + if ([object isKindOfClass:[NSNumber class]]) { + return ((NSNumber *)object).doubleValue; + } else if ([object isKindOfClass:[NSString class]]) { + return ((NSString *)object).doubleValue; + } else { + return 0; + } +} + ++ (NSUInteger)unsignedIntegerValue:(id)object +{ + if ([object isKindOfClass:[NSNumber class]]) { + return ((NSNumber *)object).unsignedIntegerValue; + } else { + // there is no direct support for strings containing unsigned values > NSIntegerMax - not worth writing ourselves + // right now, so just cap unsigned values at NSIntegerMax until we have a need for larger + NSInteger integerValue = [self integerValue:object]; + if (integerValue < 0) { + integerValue = 0; + } + return (NSUInteger)integerValue; + } +} + ++ (NSURL *)URLValue:(id)object +{ + if ([object isKindOfClass:[NSURL class]]) { + return (NSURL *)object; + } else if ([object isKindOfClass:[NSString class]]) { + return [[NSURL alloc] initWithString:(NSString *)object]; + } else { + return nil; + } +} + +#pragma mark - Helper Methods + ++ (id)_objectValue:(id)object ofClass:(Class)expectedClass +{ + return ([object isKindOfClass:expectedClass] ? object : nil); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h new file mode 100644 index 0000000000..bb452f771a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h @@ -0,0 +1,23 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKURL.h" + +@interface FBSDKURL (Internal) ++ (FBSDKURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h new file mode 100644 index 0000000000..4d8ba91cd8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h @@ -0,0 +1,58 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +typedef NS_OPTIONS(NSUInteger, FBSDKGraphRequestFlags) +{ + FBSDKGraphRequestFlagNone = 0, + // indicates this request should not use a client token as its token parameter + FBSDKGraphRequestFlagSkipClientToken = 1 << 1, + // indicates this request should not close the session if its response is an oauth error + FBSDKGraphRequestFlagDoNotInvalidateTokenOnError = 1 << 2, + // indicates this request should not perform error recovery + FBSDKGraphRequestFlagDisableErrorRecovery = 1 << 3, +}; +@interface FBSDKGraphRequest (Internal) + +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + flags:(FBSDKGraphRequestFlags)flags; +- (instancetype)initWithGraphPath:(NSString *)graphPath + parameters:(NSDictionary *)parameters + tokenString:(NSString *)tokenString + HTTPMethod:(NSString *)HTTPMethod + flags:(FBSDKGraphRequestFlags)flags; +// Generally, requests automatically issued by the SDK +// should not invalidate the token and should disableErrorRecovery +// so that we don't cause a sudden change in token state or trigger recovery +// out of context of any user action. +@property (nonatomic, assign) FBSDKGraphRequestFlags flags; + +@property (nonatomic, readonly, getter=isGraphErrorRecoveryDisabled) BOOL graphErrorRecoveryDisabled; +@property (nonatomic, readonly) BOOL hasAttachments; + ++ (BOOL)isAttachment:(id)item; ++ (NSString *)serializeURL:(NSString *)baseUrl + params:(NSDictionary *)params + httpMethod:(NSString *)httpMethod + forBatch:(BOOL)forBatch; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h new file mode 100644 index 0000000000..c9a0b2b454 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h @@ -0,0 +1,47 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKGraphRequestDataAttachment; +@class FBSDKLogger; + +@interface FBSDKGraphRequestBody : NSObject + +@property (nonatomic, retain, readonly) NSData *data; + +- (void)appendWithKey:(NSString *)key + formValue:(NSString *)value + logger:(FBSDKLogger *)logger; + +- (void)appendWithKey:(NSString *)key + imageValue:(UIImage *)image + logger:(FBSDKLogger *)logger; + +- (void)appendWithKey:(NSString *)key + dataValue:(NSData *)data + logger:(FBSDKLogger *)logger; + +- (void)appendWithKey:(NSString *)key + dataAttachmentValue:(FBSDKGraphRequestDataAttachment *)dataAttachment + logger:(FBSDKLogger *)logger; + +- (NSString *)mimeContentType; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m new file mode 100644 index 0000000000..c454f95b37 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m @@ -0,0 +1,155 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGraphRequestBody.h" + +#import "FBSDKCrypto.h" +#import "FBSDKGraphRequestDataAttachment.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" + +#define kNewline @"\r\n" + +@implementation FBSDKGraphRequestBody +{ + NSMutableData *_data; + NSMutableDictionary *_json; + NSString *_stringBoundary; +} + +- (instancetype)init +{ + if ((self = [super init])) { + _stringBoundary = [FBSDKCrypto randomString:32]; + _data = [[NSMutableData alloc] init]; + _json = [NSMutableDictionary dictionary]; + } + + return self; +} + +- (NSString *)mimeContentType +{ + if (_json) { + return @"application/json"; + } else { + return [NSString stringWithFormat:@"multipart/form-data; boundary=%@", _stringBoundary]; + } +} + +- (void)appendUTF8:(NSString *)utf8 +{ + if (!_data.length) { + NSString *headerUTF8 = [NSString stringWithFormat:@"--%@%@", _stringBoundary, kNewline]; + NSData *headerData = [headerUTF8 dataUsingEncoding:NSUTF8StringEncoding]; + [_data appendData:headerData]; + } + NSData *data = [utf8 dataUsingEncoding:NSUTF8StringEncoding]; + [_data appendData:data]; +} + +- (void)appendWithKey:(NSString *)key + formValue:(NSString *)value + logger:(FBSDKLogger *)logger +{ + [self _appendWithKey:key filename:nil contentType:nil contentBlock:^{ + [self appendUTF8:value]; + }]; + if (key && value) { + _json[key] = value; + } + [logger appendFormat:@"\n %@:\t%@", key, (NSString *)value]; +} + +- (void)appendWithKey:(NSString *)key + imageValue:(UIImage *)image + logger:(FBSDKLogger *)logger +{ + NSData *data = UIImageJPEGRepresentation(image, [FBSDKSettings JPEGCompressionQuality]); + [self _appendWithKey:key filename:key contentType:@"image/jpeg" contentBlock:^{ + [self->_data appendData:data]; + }]; + _json = nil; + [logger appendFormat:@"\n %@:\t", key, (unsigned long)(data.length / 1024)]; +} + +- (void)appendWithKey:(NSString *)key + dataValue:(NSData *)data + logger:(FBSDKLogger *)logger +{ + [self _appendWithKey:key filename:key contentType:@"content/unknown" contentBlock:^{ + [self->_data appendData:data]; + }]; + _json = nil; + [logger appendFormat:@"\n %@:\t", key, (unsigned long)(data.length / 1024)]; +} + +- (void)appendWithKey:(NSString *)key + dataAttachmentValue:(FBSDKGraphRequestDataAttachment *)dataAttachment + logger:(FBSDKLogger *)logger +{ + NSString *filename = dataAttachment.filename ?: key; + NSString *contentType = dataAttachment.contentType ?: @"content/unknown"; + NSData *data = dataAttachment.data; + [self _appendWithKey:key filename:filename contentType:contentType contentBlock:^{ + [self->_data appendData:data]; + }]; + _json = nil; + [logger appendFormat:@"\n %@:\t", key, (unsigned long)(data.length / 1024)]; +} + +- (NSData *)data +{ + if (_json) { + NSData *jsonData; + if (_json.allKeys.count > 0) { + jsonData = [NSJSONSerialization dataWithJSONObject:_json options:0 error:nil]; + } else { + jsonData = [NSData data]; + } + + return jsonData; + } + return [_data copy]; +} + +- (void)_appendWithKey:(NSString *)key + filename:(NSString *)filename + contentType:(NSString *)contentType + contentBlock:(void(^)(void))contentBlock +{ + NSMutableArray *disposition = [[NSMutableArray alloc] init]; + [disposition addObject:@"Content-Disposition: form-data"]; + if (key) { + [disposition addObject:[[NSString alloc] initWithFormat:@"name=\"%@\"", key]]; + } + if (filename) { + [disposition addObject:[[NSString alloc] initWithFormat:@"filename=\"%@\"", filename]]; + } + [self appendUTF8:[[NSString alloc] initWithFormat:@"%@%@", [disposition componentsJoinedByString:@"; "], kNewline]]; + if (contentType) { + [self appendUTF8:[[NSString alloc] initWithFormat:@"Content-Type: %@%@", contentType, kNewline]]; + } + [self appendUTF8:kNewline]; + if (contentBlock != NULL) { + contentBlock(); + } + [self appendUTF8:[[NSString alloc] initWithFormat:@"%@--%@%@", kNewline, _stringBoundary, kNewline]]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h new file mode 100644 index 0000000000..c63688cd41 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKGraphRequestConnection(Internal) + +@property (nonatomic, readonly) NSMutableArray *requests; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h new file mode 100644 index 0000000000..75aa3dd83f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h @@ -0,0 +1,43 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +// Internal only class to facilitate FBSDKGraphRequest processing, specifically +// associating FBSDKGraphRequest and FBSDKGraphRequestHandler instances and necessary +// data for retry processing. +@interface FBSDKGraphRequestMetadata : NSObject + +@property (nonatomic, retain) FBSDKGraphRequest *request; +@property (nonatomic, copy) FBSDKGraphRequestHandler completionHandler; +@property (nonatomic, copy) NSDictionary *batchParameters; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchParameters:(NSDictionary *)batchParameters +NS_DESIGNATED_INITIALIZER; + +- (void)invokeCompletionHandlerForConnection:(FBSDKGraphRequestConnection *)connection + withResults:(id)results + error:(NSError *)error; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m new file mode 100644 index 0000000000..e87f9b4437 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m @@ -0,0 +1,55 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGraphRequestMetadata.h" + +#import "FBSDKGraphRequest.h" + +@implementation FBSDKGraphRequestMetadata + +- (instancetype)initWithRequest:(FBSDKGraphRequest *)request + completionHandler:(FBSDKGraphRequestHandler)handler + batchParameters:(NSDictionary *)batchParameters { + + if ((self = [super init])) { + _request = request; + _batchParameters = [batchParameters copy]; + _completionHandler = [handler copy]; + } + return self; +} + +- (void)invokeCompletionHandlerForConnection:(FBSDKGraphRequestConnection *)connection + withResults:(id)results + error:(NSError *)error { + if (self.completionHandler) { + self.completionHandler(connection, results, error); + } +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p, batchParameters: %@, completionHandler: %@, request: %@>", + NSStringFromClass([self class]), + self, + self.batchParameters, + self.completionHandler, + self.request.description]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h new file mode 100644 index 0000000000..567f8ecdba --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h @@ -0,0 +1,30 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCoreKit+Internal.h" + +@interface FBSDKGraphRequestPiggybackManager : NSObject + ++ (void)addPiggybackRequests:(FBSDKGraphRequestConnection *)connection; + ++ (void)addRefreshPiggyback:(FBSDKGraphRequestConnection *)connection permissionHandler:(FBSDKGraphRequestHandler)permissionHandler; + ++ (void)addRefreshPiggybackIfStale:(FBSDKGraphRequestConnection *)connection; + ++ (void)addServerConfigurationPiggyback:(FBSDKGraphRequestConnection *)connection; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m new file mode 100644 index 0000000000..bb85741832 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m @@ -0,0 +1,151 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGraphRequestPiggybackManager.h" + +#import "FBSDKCoreKit+Internal.h" + +static int const FBSDKTokenRefreshThresholdSeconds = 24 * 60 * 60; // day +static int const FBSDKTokenRefreshRetrySeconds = 60 * 60; // hour + +@implementation FBSDKGraphRequestPiggybackManager + ++ (void)addPiggybackRequests:(FBSDKGraphRequestConnection *)connection +{ + if ([FBSDKSettings appID].length > 0) { + BOOL safeForPiggyback = YES; + for (FBSDKGraphRequestMetadata *metadata in connection.requests) { + if (![metadata.request.version isEqualToString:[FBSDKSettings graphAPIVersion]] || + metadata.request.hasAttachments) { + safeForPiggyback = NO; + break; + } + } + if (safeForPiggyback) { + [[self class] addRefreshPiggybackIfStale:connection]; + [[self class] addServerConfigurationPiggyback:connection]; + } + } +} + ++ (void)addRefreshPiggyback:(FBSDKGraphRequestConnection *)connection permissionHandler:(FBSDKGraphRequestHandler)permissionHandler +{ + FBSDKAccessToken *expectedToken = [FBSDKAccessToken currentAccessToken]; + __block NSMutableSet *permissions = nil; + __block NSMutableSet *declinedPermissions = nil; + __block NSString *tokenString = nil; + __block NSNumber *expirationDateNumber = nil; + __block NSNumber *dataAccessExpirationDateNumber = nil; + __block int expectingCallbacksCount = 2; + void (^expectingCallbackComplete)(void) = ^{ + if (--expectingCallbacksCount == 0) { + FBSDKAccessToken *currentToken = [FBSDKAccessToken currentAccessToken]; + NSDate *expirationDate = currentToken.expirationDate; + if (expirationDateNumber) { + expirationDate = (expirationDateNumber.doubleValue > 0 ? + [NSDate dateWithTimeIntervalSince1970:expirationDateNumber.doubleValue] : + [NSDate distantFuture]); + } + NSDate *dataExpirationDate = currentToken.dataAccessExpirationDate; + if (dataAccessExpirationDateNumber) { + dataExpirationDate = (dataAccessExpirationDateNumber.doubleValue > 0 ? + [NSDate dateWithTimeIntervalSince1970:dataAccessExpirationDateNumber.doubleValue] : + [NSDate distantFuture]); + } + FBSDKAccessToken *refreshedToken = [[FBSDKAccessToken alloc] initWithTokenString:tokenString ?: currentToken.tokenString + permissions:(permissions ?: currentToken.permissions).allObjects + declinedPermissions:(declinedPermissions ?: currentToken.declinedPermissions).allObjects + appID:currentToken.appID + userID:currentToken.userID + expirationDate:expirationDate + refreshDate:[NSDate date] + dataAccessExpirationDate:dataExpirationDate]; + if (expectedToken == currentToken) { + [FBSDKAccessToken setCurrentAccessToken:refreshedToken]; + } + } + }; + FBSDKGraphRequest *extendRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"oauth/access_token" + parameters:@{@"grant_type" : @"fb_extend_sso_token", + @"fields": @"" + } + flags:FBSDKGraphRequestFlagDisableErrorRecovery]; + + [connection addRequest:extendRequest completionHandler:^(FBSDKGraphRequestConnection *innerConnection, id result, NSError *error) { + tokenString = result[@"access_token"]; + expirationDateNumber = result[@"expires_at"]; + dataAccessExpirationDateNumber = result[@"data_access_expiration_time"]; + expectingCallbackComplete(); + }]; + FBSDKGraphRequest *permissionsRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions" + parameters:@{@"fields": @""} + flags:FBSDKGraphRequestFlagDisableErrorRecovery]; + + [connection addRequest:permissionsRequest completionHandler:^(FBSDKGraphRequestConnection *innerConnection, id result, NSError *error) { + if (!error) { + permissions = [NSMutableSet set]; + declinedPermissions = [NSMutableSet set]; + + [FBSDKInternalUtility extractPermissionsFromResponse:result + grantedPermissions:permissions + declinedPermissions:declinedPermissions]; + } + expectingCallbackComplete(); + if (permissionHandler) { + permissionHandler(innerConnection, result, error); + } + }]; +} + ++ (void)addRefreshPiggybackIfStale:(FBSDKGraphRequestConnection *)connection +{ + // don't piggy back more than once an hour as a cheap way of + // retrying in cases of errors and preventing duplicate refreshes. + // obviously this is not foolproof but is simple and sufficient. + static NSDate *lastRefreshTry; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + lastRefreshTry = [NSDate distantPast]; + }); + + NSDate *now = [NSDate date]; + NSDate *tokenRefreshDate = [FBSDKAccessToken currentAccessToken].refreshDate; + if (tokenRefreshDate && + [now timeIntervalSinceDate:lastRefreshTry] > FBSDKTokenRefreshRetrySeconds && + [now timeIntervalSinceDate:tokenRefreshDate] > FBSDKTokenRefreshThresholdSeconds) { + [self addRefreshPiggyback:connection permissionHandler:NULL]; + lastRefreshTry = [NSDate date]; + } +} + ++ (void)addServerConfigurationPiggyback:(FBSDKGraphRequestConnection *)connection +{ + if (![FBSDKServerConfigurationManager cachedServerConfiguration].isDefaults + && [[NSDate date] timeIntervalSinceDate:[FBSDKServerConfigurationManager cachedServerConfiguration].timestamp] + < FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT) { + return; + } + NSString *appID = [FBSDKSettings appID]; + FBSDKGraphRequest *serverConfigurationRequest = [FBSDKServerConfigurationManager requestToLoadServerConfiguration:appID]; + [connection addRequest:serverConfigurationRequest + completionHandler:^(FBSDKGraphRequestConnection *conn, id result, NSError *error) { + [FBSDKServerConfigurationManager processLoadRequestResponse:result error:error appID:appID]; + }]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h new file mode 100644 index 0000000000..d0f35f762a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 void (^FBSDKURLSessionTaskHandler)(NSError *error, + NSURLResponse *response, + NSData *responseData); + +@interface FBSDKURLSessionTask : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithRequest:(NSURLRequest *)request + fromSession:(NSURLSession *)session + completionHandler:(FBSDKURLSessionTaskHandler)handler +NS_DESIGNATED_INITIALIZER; + +- (void)cancel; +- (void)start; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m new file mode 100644 index 0000000000..10019c30b1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m @@ -0,0 +1,150 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKURLSessionTask.h" + +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" + +@interface FBSDKURLSessionTask () + +@property (nonatomic, strong) NSURLSessionTask *task; +@property (nonatomic, copy) FBSDKURLSessionTaskHandler handler; +@property (nonatomic, assign) uint64_t requestStartTime; +@property (nonatomic, assign, readonly) NSUInteger loggerSerialNumber; + +@end + +@implementation FBSDKURLSessionTask + +- (instancetype)initWithRequest:(NSURLRequest *)request + fromSession:(NSURLSession *)session + completionHandler:(FBSDKURLSessionTaskHandler)handler +{ + if ((self = [super init])) { + _requestStartTime = [FBSDKInternalUtility currentTimeInMilliseconds]; + _loggerSerialNumber = [FBSDKLogger generateSerialNumber]; + _handler = [handler copy]; + __weak FBSDKURLSessionTask *weakSelf = self; + _task = [session dataTaskWithRequest:request + completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [weakSelf taskDidCompleteWithError:error]; + } else { + [weakSelf taskDidCompleteWithResponse:response data:data]; + } + }]; + } + return self; +} + +#pragma mark - Logging and Completion + +- (void)logAndInvokeHandler:(FBSDKURLSessionTaskHandler)handler + error:(NSError *)error { + if (error) { + NSString *logEntry = [NSString + stringWithFormat:@"FBSDKURLSessionTask <#%lu>:\n Error: '%@'\n%@\n", + (unsigned long)self.loggerSerialNumber, + error.localizedDescription, + error.userInfo]; + + [self logMessage:logEntry]; + } + + [self invokeHandler:handler error:error response:nil responseData:nil]; +} + +- (void)logAndInvokeHandler:(FBSDKURLSessionTaskHandler)handler + response:(NSURLResponse *)response + responseData:(NSData *)responseData { + // Basic FBSDKURLSessionTask logging just prints out the URL. FBSDKGraphRequest logging provides more details. + NSString *mimeType = response.MIMEType; + NSMutableString *mutableLogEntry = [NSMutableString stringWithFormat:@"FBSDKURLSessionTask <#%lu>:\n Duration: %llu msec\nResponse Size: %lu kB\n MIME type: %@\n", + (unsigned long)self.loggerSerialNumber, + [FBSDKInternalUtility currentTimeInMilliseconds] - self.requestStartTime, + (unsigned long)responseData.length / 1024, + mimeType]; + + if ([mimeType isEqualToString:@"text/javascript"]) { + NSString *responseUTF8 = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; + [mutableLogEntry appendFormat:@" Response:\n%@\n\n", responseUTF8]; + } + + [self logMessage:mutableLogEntry]; + + [self invokeHandler:handler error:nil response:response responseData:responseData]; +} + +- (void)invokeHandler:(FBSDKURLSessionTaskHandler)handler + error:(NSError *)error + response:(NSURLResponse *)response + responseData:(NSData *)responseData { + if (handler != nil) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error, response, responseData); + }); + } +} + +- (void)logMessage:(NSString *)message +{ + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorNetworkRequests formatString:@"%@", message]; +} + +- (void)taskDidCompleteWithResponse:(NSURLResponse *)response data:(NSData *)data +{ + @try { + [self logAndInvokeHandler:self.handler response:response responseData:data]; + } @finally { + self.handler = nil; + } +} + +- (void)taskDidCompleteWithError:(NSError *)error +{ + @try { + if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == kCFURLErrorSecureConnectionFailed) { + NSOperatingSystemVersion iOS9Version = { .majorVersion = 9, .minorVersion = 0, .patchVersion = 0 }; + if ([FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version]) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"WARNING: FBSDK secure network request failed. Please verify you have configured your " + "app for Application Transport Security compatibility described at https://developers.facebook.com/docs/ios/ios9"]; + } + } + [self logAndInvokeHandler:self.handler error:error]; + } @finally { + self.handler = nil; + } +} + +#pragma mark - Task State + +- (void)start +{ + [self.task resume]; +} + +- (void)cancel +{ + [self.task cancel]; + self.handler = nil; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h new file mode 100644 index 0000000000..f32959428f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h @@ -0,0 +1,37 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface FBSDKDialogConfiguration : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithName:(NSString *)name + URL:(NSURL *)URL + appVersions:(NSArray *)appVersions +NS_DESIGNATED_INITIALIZER; + +@property (nonatomic, copy, readonly) NSArray *appVersions; +@property (nonatomic, copy, readonly) NSString *name; +@property (nonatomic, copy, readonly) NSURL *URL; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m new file mode 100644 index 0000000000..9010fb99eb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m @@ -0,0 +1,70 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDialogConfiguration.h" + +#define FBSDK_DIALOG_CONFIGURATION_APP_VERSIONS_KEY @"appVersions" +#define FBSDK_DIALOG_CONFIGURATION_NAME_KEY @"name" +#define FBSDK_DIALOG_CONFIGURATION_URL_KEY @"url" + +@implementation FBSDKDialogConfiguration + +#pragma mark - Object Lifecycle + +- (instancetype)initWithName:(NSString *)name URL:(NSURL *)URL appVersions:(NSArray *)appVersions +{ + if ((self = [super init])) { + _name = [name copy]; + _URL = [URL copy]; + _appVersions = [appVersions copy]; + } + return self; +} + +#pragma mark NSCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder +{ + NSString *name = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_DIALOG_CONFIGURATION_NAME_KEY]; + NSURL *URL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDK_DIALOG_CONFIGURATION_URL_KEY]; + NSSet *appVersionsClasses = [NSSet setWithObjects:[NSArray class], [NSNumber class], nil]; + NSArray *appVersions = [decoder decodeObjectOfClasses:appVersionsClasses + forKey:FBSDK_DIALOG_CONFIGURATION_APP_VERSIONS_KEY]; + return [self initWithName:name URL:URL appVersions:appVersions]; +} + +- (void)encodeWithCoder:(NSCoder *)encoder +{ + [encoder encodeObject:_appVersions forKey:FBSDK_DIALOG_CONFIGURATION_APP_VERSIONS_KEY]; + [encoder encodeObject:_name forKey:FBSDK_DIALOG_CONFIGURATION_NAME_KEY]; + [encoder encodeObject:_URL forKey:FBSDK_DIALOG_CONFIGURATION_URL_KEY]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h new file mode 100644 index 0000000000..0c75bb8ccf --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h @@ -0,0 +1,39 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKErrorRecoveryConfiguration.h" + +@class FBSDKGraphRequest; + +// maps codes and subcodes pairs to FBSDKErrorRecoveryConfiguration instances. +@interface FBSDKErrorConfiguration : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +// initialize from optional dictionary of existing configurations. If not supplied a fallback will be created. +- (instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER; + +// parses the array (supplied from app settings endpoint) +- (void)parseArray:(NSArray *)array; + +// NSString "code" instances support "*" wildcard semantics (nil is treated as "*" also) +// 'request' is optional, typically for identifying special graph request semantics (e.g., no recovery for client token) +- (FBSDKErrorRecoveryConfiguration *)recoveryConfigurationForCode:(NSString *)code subcode:(NSString *)subcode request:(FBSDKGraphRequest *)request; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m new file mode 100644 index 0000000000..fb98e36770 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m @@ -0,0 +1,171 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKErrorConfiguration.h" + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKErrorRecoveryConfiguration.h" + +static NSString *const kErrorCategoryOther = @"other"; +static NSString *const kErrorCategoryTransient = @"transient"; +static NSString *const kErrorCategoryLogin = @"login"; + +#define FBSDKERRORCONFIGURATION_DICTIONARY_KEY @"configurationDictionary" + +@implementation FBSDKErrorConfiguration +{ + NSMutableDictionary *_configurationDictionary; +} + +- (instancetype)initWithDictionary:(NSDictionary *)dictionary +{ + if ((self = [super init])) { + if (dictionary) { + _configurationDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary]; + } else { + _configurationDictionary = [NSMutableDictionary dictionary]; + NSString *localizedOK = + NSLocalizedStringWithDefaultValue(@"ErrorRecovery.OK", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"OK", + @"The title of the label to start attempting error recovery"); + NSString *localizedCancel = + NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Cancel", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Cancel", + @"The title of the label to decline attempting error recovery"); + NSString *localizedTransientSuggestion = + NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Transient.Suggestion", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"The server is temporarily busy, please try again.", + @"The fallback message to display to retry transient errors"); + NSString *localizedLoginRecoverableSuggestion = + NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Login.Suggestion", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Please log into this app again to reconnect your Facebook account.", + @"The fallback message to display to recover invalidated tokens"); + NSArray *fallbackArray = @[ + @{ @"name" : @"login", + @"items" : @[ @{ @"code" : @102 }, + @{ @"code" : @190 } ], + @"recovery_message" : localizedLoginRecoverableSuggestion, + @"recovery_options" : @[ localizedOK, localizedCancel] + }, + @{ @"name" : @"transient", + @"items" : @[ @{ @"code" : @1 }, + @{ @"code" : @2 }, + @{ @"code" : @4 }, + @{ @"code" : @9 }, + @{ @"code" : @17 }, + @{ @"code" : @341 } ], + @"recovery_message" : localizedTransientSuggestion, + @"recovery_options" : @[ localizedOK] + }, + ]; + [self parseArray:fallbackArray]; + } + } + return self; +} + +- (FBSDKErrorRecoveryConfiguration *)recoveryConfigurationForCode:(NSString *)code subcode:(NSString *)subcode request:(FBSDKGraphRequest *)request +{ + code = code ?: @"*"; + subcode = subcode ?: @"*"; + FBSDKErrorRecoveryConfiguration *configuration = (_configurationDictionary[code][subcode] ?: + _configurationDictionary[code][@"*"] ?: + _configurationDictionary[@"*"][subcode] ?: + _configurationDictionary[@"*"][@"*"]); + if (configuration.errorCategory == FBSDKGraphRequestErrorRecoverable && + [FBSDKSettings clientToken] && + [request.parameters[@"access_token"] hasSuffix:[FBSDKSettings clientToken]]) { + // do not attempt to recovery client tokens. + return nil; + } + return configuration; +} + +- (void)parseArray:(NSArray *)array +{ + for (NSDictionary *dictionary in array) { + [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { + FBSDKGraphRequestError category; + NSString *action = dictionary[@"name"]; + if ([action isEqualToString:kErrorCategoryOther]) { + category = FBSDKGraphRequestErrorOther; + } else if ([action isEqualToString:kErrorCategoryTransient]) { + category = FBSDKGraphRequestErrorTransient; + } else { + category = FBSDKGraphRequestErrorRecoverable; + } + NSString *suggestion = dictionary[@"recovery_message"]; + NSArray *options = dictionary[@"recovery_options"]; + for (NSDictionary *codeSubcodesDictionary in dictionary[@"items"]) { + NSString *code = [codeSubcodesDictionary[@"code"] stringValue]; + + NSMutableDictionary *currentSubcodes = self->_configurationDictionary[code]; + if (!currentSubcodes) { + currentSubcodes = [NSMutableDictionary dictionary]; + self->_configurationDictionary[code] = currentSubcodes; + } + + NSArray *subcodes = codeSubcodesDictionary[@"subcodes"]; + if (subcodes.count > 0) { + for (NSNumber *subcodeNumber in subcodes) { + currentSubcodes[subcodeNumber.stringValue] = [[FBSDKErrorRecoveryConfiguration alloc] + initWithRecoveryDescription:suggestion + optionDescriptions:options + category:category + recoveryActionName:action]; + } + } else { + currentSubcodes[@"*"] = [[FBSDKErrorRecoveryConfiguration alloc] + initWithRecoveryDescription:suggestion + optionDescriptions:options + category:category + recoveryActionName:action]; + } + } + }]; + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder +{ + NSSet *classes = [[NSSet alloc] initWithObjects:[NSDictionary class], [FBSDKErrorRecoveryConfiguration class], nil]; + NSDictionary *configurationDictionary = [decoder decodeObjectOfClasses:classes + forKey:FBSDKERRORCONFIGURATION_DICTIONARY_KEY]; + return [self initWithDictionary:configurationDictionary]; +} + +- (void)encodeWithCoder:(NSCoder *)encoder +{ + [encoder encodeObject:_configurationDictionary forKey:FBSDKERRORCONFIGURATION_DICTIONARY_KEY]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h new file mode 100644 index 0000000000..9785985729 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +//immutable +@interface FBSDKErrorRecoveryConfiguration : NSObject + +@property (nonatomic, readonly) NSString *localizedRecoveryDescription; +@property (nonatomic, readonly) NSArray *localizedRecoveryOptionDescriptions; +@property (nonatomic, readonly) FBSDKGraphRequestError errorCategory; +@property (nonatomic, readonly) NSString *recoveryActionName; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithRecoveryDescription:(NSString *)description + optionDescriptions:(NSArray *)optionDescriptions + category:(FBSDKGraphRequestError)category + recoveryActionName:(NSString *)recoveryActionName NS_DESIGNATED_INITIALIZER; +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m new file mode 100644 index 0000000000..97eb061033 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m @@ -0,0 +1,77 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKErrorRecoveryConfiguration.h" + +#define FBSDK_ERROR_RECOVERY_CONFIGURATION_DESCRIPTION_KEY @"description" +#define FBSDK_ERROR_RECOVERY_CONFIGURATION_OPTIONS_KEY @"options" +#define FBSDK_ERROR_RECOVERY_CONFIGURATION_CATEGORY_KEY @"category" +#define FBSDK_ERROR_RECOVERY_CONFIGURATION_ACTION_KEY @"action" + +@implementation FBSDKErrorRecoveryConfiguration + +- (instancetype)initWithRecoveryDescription:(NSString *)description + optionDescriptions:(NSArray *)optionDescriptions + category:(FBSDKGraphRequestError)category + recoveryActionName:(NSString *)recoveryActionName { + if ((self = [super init])) { + _localizedRecoveryDescription = [description copy]; + _localizedRecoveryOptionDescriptions = [optionDescriptions copy]; + _errorCategory = category; + _recoveryActionName = [recoveryActionName copy]; + } + return self; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder +{ + NSString *description = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_DESCRIPTION_KEY]; + NSArray *options = [decoder decodeObjectOfClass:[NSArray class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_OPTIONS_KEY]; + NSNumber *category = [decoder decodeObjectOfClass:[NSNumber class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_CATEGORY_KEY]; + NSString *action = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_ACTION_KEY]; + + return [self initWithRecoveryDescription:description + optionDescriptions:options + category:category.unsignedIntegerValue + recoveryActionName:action]; +} + +- (void)encodeWithCoder:(NSCoder *)encoder +{ + [encoder encodeObject:_localizedRecoveryDescription forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_DESCRIPTION_KEY]; + [encoder encodeObject:_localizedRecoveryOptionDescriptions forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_OPTIONS_KEY]; + [encoder encodeObject:@(_errorCategory) forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_CATEGORY_KEY]; + [encoder encodeObject:_recoveryActionName forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_ACTION_KEY]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone +{ + //immutable + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h new file mode 100644 index 0000000000..e2a922823f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h @@ -0,0 +1,43 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#define FBSDK_GATEKEEPER_MANAGER_CACHE_TIMEOUT (60 * 60) + +NS_ASSUME_NONNULL_BEGIN + +@interface FBSDKGateKeeperManager : NSObject +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + Returns the locally cached configuration. + */ ++ (BOOL)boolForKey:(NSString *)key + appID:(NSString *)appID + defaultValue:(BOOL)defaultValue; + +/** + Load the gate keeper configurations from server + */ ++ (void)loadGateKeepers; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m new file mode 100644 index 0000000000..59224c7ac4 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m @@ -0,0 +1,176 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKGateKeeperManager.h" + +#import + +#import + +#import "FBSDKAppEventsUtility.h" +#import "FBSDKGraphRequest+Internal.h" +#import "FBSDKGraphRequest.h" +#import "FBSDKSettings.h" +#import "FBSDKTypeUtility.h" + +#define FBSDK_GATEKEEPER_USER_DEFAULTS_KEY @"com.facebook.sdk:gateKeeper%@" + +#define FBSDK_GATEKEEPER_APP_GATEKEEPER_EDGE @"mobile_sdk_gk" +#define FBSDK_GATEKEEPER_APP_GATEKEEPER_FIELDS @"gatekeepers" + +@implementation FBSDKGateKeeperManager + +static NSMutableDictionary *_gateKeepers; +static const NSTimeInterval kTimeout = 4.0; +static NSDate *_timestamp; +static BOOL _loadingGateKeepers; +static BOOL _requeryFinishedForAppStart; + +#pragma mark - Public Class Methods + ++ (BOOL)boolForKey:(NSString *)key + appID:(NSString *)appID + defaultValue:(BOOL)defaultValue +{ + [self loadGateKeepers]; + if (appID == nil || _gateKeepers == nil || _gateKeepers[appID] == nil) { + return defaultValue; + } + NSDictionary *gateKeeper = [FBSDKTypeUtility dictionaryValue:_gateKeepers[appID]]; + return gateKeeper[key] == nil ? defaultValue : [gateKeeper[key] boolValue]; +} + ++ (void)loadGateKeepers +{ + NSString *appID = [FBSDKSettings appID]; + @synchronized(self) { + if (_gateKeepers == nil) { + _gateKeepers = [[NSMutableDictionary alloc] init]; + } + // load the defaults + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *defaultKey = [NSString stringWithFormat:FBSDK_GATEKEEPER_USER_DEFAULTS_KEY, + appID]; + NSData *data = [defaults objectForKey:defaultKey]; + if ([data isKindOfClass:[NSData class]]) { + NSMutableDictionary *gatekeeper = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + if (gatekeeper != nil && [gatekeeper isKindOfClass:[NSMutableDictionary class]] && appID != nil) { + _gateKeepers[appID] = gatekeeper; + } + } + + // Query the server when the requery is not finished for app start or the timestamp is not valid + if (![self _gateKeeperIsValid]) { + if (!_loadingGateKeepers) { + _loadingGateKeepers = YES; + FBSDKGraphRequest *request = [[self class] requestToLoadGateKeepers:appID]; + + // start request with specified timeout instead of the default 180s + FBSDKGraphRequestConnection *requestConnection = [[FBSDKGraphRequestConnection alloc] init]; + requestConnection.timeout = kTimeout; + [requestConnection addRequest:request completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + _requeryFinishedForAppStart = YES; + [self processLoadRequestResponse:result error:error appID:appID]; + }]; + [requestConnection start]; + } + } + } +} + +#pragma mark - Internal Class Methods + ++ (FBSDKGraphRequest *)requestToLoadGateKeepers:(NSString *)appID +{ + NSString *sdkVersion = [FBSDKSettings sdkVersion]; + + NSDictionary *parameters = @{ @"platform": @"ios" , + @"sdk_version": sdkVersion, + @"fields": FBSDK_GATEKEEPER_APP_GATEKEEPER_FIELDS}; + + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/%@", + appID, FBSDK_GATEKEEPER_APP_GATEKEEPER_EDGE] + parameters:parameters + tokenString:nil + HTTPMethod:nil + flags:FBSDKGraphRequestFlagSkipClientToken | FBSDKGraphRequestFlagDisableErrorRecovery]; + return request; +} + +#pragma mark - Helper Class Methods + ++ (void)processLoadRequestResponse:(id)result error:(NSError *)error appID:(NSString *)appID +{ + @synchronized(self) { + _loadingGateKeepers = NO; + + if (error) { + return; + } + + // Update the timestamp only when there is no error + _timestamp = [NSDate date]; + + NSMutableDictionary *gateKeeper = _gateKeepers[appID]; + if (gateKeeper == nil) { + gateKeeper = [[NSMutableDictionary alloc] init]; + } + NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; + NSDictionary *fetchedData = [FBSDKTypeUtility dictionaryValue:[resultDictionary[@"data"] firstObject]]; + NSArray *gateKeeperList = fetchedData != nil ? [FBSDKTypeUtility arrayValue:fetchedData[FBSDK_GATEKEEPER_APP_GATEKEEPER_FIELDS]] : nil; + + if (gateKeeperList != nil) { + // updates gate keeper with fetched data + for (id gateKeeperEntry in gateKeeperList) { + NSDictionary *entry = [FBSDKTypeUtility dictionaryValue:gateKeeperEntry]; + NSString *key = [FBSDKTypeUtility stringValue:entry[@"key"]]; + id value = entry[@"value"]; + if (entry != nil && key != nil && value != nil) { + gateKeeper[key] = value; + } + } + _gateKeepers[appID] = gateKeeper; + } + + // update the cached copy in user defaults + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *defaultKey = [NSString stringWithFormat:FBSDK_GATEKEEPER_USER_DEFAULTS_KEY, + appID]; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:gateKeeper]; + [defaults setObject:data forKey:defaultKey]; + } +} + ++ (BOOL)_gateKeeperTimestampIsValid:(NSDate *)timestamp +{ + if (timestamp == nil) { + return NO; + } + return ([[NSDate date] timeIntervalSinceDate:timestamp] < FBSDK_GATEKEEPER_MANAGER_CACHE_TIMEOUT); +} + ++ (BOOL)_gateKeeperIsValid +{ + if (_requeryFinishedForAppStart && (_timestamp && [self _gateKeeperTimestampIsValid:_timestamp])) { + return YES; + } + return NO; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h new file mode 100644 index 0000000000..2e71d7be38 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameDefault; +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameSharing; + +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationFeatureUseNativeFlow; +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationFeatureUseSafariViewController; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h new file mode 100644 index 0000000000..b4e17baedd --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h @@ -0,0 +1,105 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDialogConfiguration.h" +#import "FBSDKErrorConfiguration.h" + +// login kit +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameLogin; + +// share kit +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameAppInvite; +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameGameRequest; +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameGroup; +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameLike; +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameMessage; +FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameShare; + +FOUNDATION_EXPORT const NSInteger FBSDKServerConfigurationVersion; + +typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationSmartLoginOptions) +{ + FBSDKServerConfigurationSmartLoginOptionsUnknown = 0, + FBSDKServerConfigurationSmartLoginOptionsEnabled = 1 << 0, + FBSDKServerConfigurationSmartLoginOptionsRequireConfirmation = 1 << 1, +}; + +@interface FBSDKServerConfiguration : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithAppID:(NSString *)appID + appName:(NSString *)appName + loginTooltipEnabled:(BOOL)loginTooltipEnabled + loginTooltipText:(NSString *)loginTooltipText + defaultShareMode:(NSString *)defaultShareMode + advertisingIDEnabled:(BOOL)advertisingIDEnabled + implicitLoggingEnabled:(BOOL)implicitLoggingEnabled +implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled + codelessEventsEnabled:(BOOL)codelessEventsEnabled + systemAuthenticationEnabled:(BOOL)systemAuthenticationEnabled + nativeAuthFlowEnabled:(BOOL)nativeAuthFlowEnabled + uninstallTrackingEnabled:(BOOL)uninstallTrackingEnabled + dialogConfigurations:(NSDictionary *)dialogConfigurations + dialogFlows:(NSDictionary *)dialogFlows + timestamp:(NSDate *)timestamp + errorConfiguration:(FBSDKErrorConfiguration *)errorConfiguration + sessionTimeoutInterval:(NSTimeInterval) sessionTimeoutInterval + defaults:(BOOL)defaults + loggingToken:(NSString *)loggingToken + smartLoginOptions:(FBSDKServerConfigurationSmartLoginOptions)smartLoginOptions + smartLoginBookmarkIconURL:(NSURL *)smartLoginBookmarkIconURL + smartLoginMenuIconURL:(NSURL *)smartLoginMenuIconURL + updateMessage:(NSString *)updateMessage + eventBindings:(NSArray *)eventBindings +NS_DESIGNATED_INITIALIZER; + +@property (nonatomic, assign, readonly, getter=isAdvertisingIDEnabled) BOOL advertisingIDEnabled; +@property (nonatomic, copy, readonly) NSString *appID; +@property (nonatomic, copy, readonly) NSString *appName; +@property (nonatomic, assign, readonly, getter=isDefaults) BOOL defaults; +@property (nonatomic, copy, readonly) NSString *defaultShareMode; +@property (nonatomic, strong, readonly) FBSDKErrorConfiguration *errorConfiguration; +@property (nonatomic, assign, readonly, getter=isImplicitLoggingSupported) BOOL implicitLoggingEnabled; +@property (nonatomic, assign, readonly, getter=isImplicitPurchaseLoggingSupported) BOOL implicitPurchaseLoggingEnabled; +@property (nonatomic, assign, readonly, getter=isCodelessEventsEnabled) BOOL codelessEventsEnabled; +@property (nonatomic, assign, readonly, getter=isLoginTooltipEnabled) BOOL loginTooltipEnabled; +@property (nonatomic, assign, readonly, getter=isNativeAuthFlowEnabled) BOOL nativeAuthFlowEnabled; +@property (nonatomic, assign, readonly, getter=isSystemAuthenticationEnabled) BOOL systemAuthenticationEnabled; +@property (nonatomic, assign, readonly, getter=isUninstallTrackingEnabled) BOOL uninstallTrackingEnabled; +@property (nonatomic, copy, readonly) NSString *loginTooltipText; +@property (nonatomic, copy, readonly) NSDate *timestamp; +@property (nonatomic, assign) NSTimeInterval sessionTimoutInterval; +@property (nonatomic, copy, readonly) NSString *loggingToken; +@property (nonatomic, assign, readonly) FBSDKServerConfigurationSmartLoginOptions smartLoginOptions; +@property (nonatomic, copy, readonly) NSURL *smartLoginBookmarkIconURL; +@property (nonatomic, copy, readonly) NSURL *smartLoginMenuIconURL; +@property (nonatomic, copy, readonly) NSString *updateMessage; +@property (nonatomic, copy, readonly) NSArray *eventBindings; +@property (nonatomic, readonly) NSInteger version; + +- (FBSDKDialogConfiguration *)dialogConfigurationForDialogName:(NSString *)dialogName; +- (BOOL)useNativeDialogForDialogName:(NSString *)dialogName; +- (BOOL)useSafariViewControllerForDialogName:(NSString *)dialogName; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m new file mode 100644 index 0000000000..d437d728ed --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m @@ -0,0 +1,283 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKServerConfiguration.h" +#import "FBSDKServerConfiguration+Internal.h" + +#import "FBSDKInternalUtility.h" + +#define FBSDK_SERVER_CONFIGURATION_ADVERTISING_ID_ENABLED_KEY @"advertisingIDEnabled" +#define FBSDK_SERVER_CONFIGURATION_APP_ID_KEY @"appID" +#define FBSDK_SERVER_CONFIGURATION_APP_NAME_KEY @"appName" +#define FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_KEY @"dialogConfigs" +#define FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_KEY @"dialogFlows" +#define FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGS_KEY @"errorConfigs" +#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY @"implicitLoggingEnabled" +#define FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_KEY @"defaultShareMode" +#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY @"implicitPurchaseLoggingEnabled" +#define FBSDK_SERVER_CONFIGURATION_CODELESS_EVENTS_ENABLED_KEY @"codelessEventsEnabled" +#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY @"loginTooltipEnabled" +#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY @"loginTooltipText" +#define FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_KEY @"systemAuthenticationEnabled" +#define FBSDK_SERVER_CONFIGURATION_NATIVE_AUTH_FLOW_ENABLED_KEY @"nativeAuthFlowEnabled" +#define FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY @"timestamp" +#define FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_INTERVAL @"sessionTimeoutInterval" +#define FBSDK_SERVER_CONFIGURATION_LOGGING_TOKEN @"loggingToken" +#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY @"smartLoginEnabled" +#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_KEY @"smarstLoginBookmarkIconURL" +#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_KEY @"smarstLoginBookmarkMenuURL" +#define FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_KEY @"SDKUpdateMessage" +#define FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS @"eventBindings" +#define FBSDK_SERVER_CONFIGURATION_VERSION_KEY @"version" +#define FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY @"trackAppUninstallEnabled" + +#pragma mark - Dialog Names + +NSString *const FBSDKDialogConfigurationNameDefault = @"default"; + +NSString *const FBSDKDialogConfigurationNameLogin = @"login"; + +NSString *const FBSDKDialogConfigurationNameSharing = @"sharing"; + +NSString *const FBSDKDialogConfigurationNameAppInvite = @"app_invite"; +NSString *const FBSDKDialogConfigurationNameGameRequest = @"game_request"; +NSString *const FBSDKDialogConfigurationNameGroup = @"group"; +NSString *const FBSDKDialogConfigurationNameLike = @"like"; +NSString *const FBSDKDialogConfigurationNameMessage = @"message"; +NSString *const FBSDKDialogConfigurationNameShare = @"share"; + +NSString *const FBSDKDialogConfigurationFeatureUseNativeFlow = @"use_native_flow"; +NSString *const FBSDKDialogConfigurationFeatureUseSafariViewController = @"use_safari_vc"; + +// Increase this value when adding new fields and previous cached configurations should be +// treated as stale. +const NSInteger FBSDKServerConfigurationVersion = 2; + +@implementation FBSDKServerConfiguration +{ + NSDictionary *_dialogConfigurations; + NSDictionary *_dialogFlows; + NSInteger _version; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithAppID:(NSString *)appID + appName:(NSString *)appName + loginTooltipEnabled:(BOOL)loginTooltipEnabled + loginTooltipText:(NSString *)loginTooltipText + defaultShareMode:(NSString*)defaultShareMode + advertisingIDEnabled:(BOOL)advertisingIDEnabled + implicitLoggingEnabled:(BOOL)implicitLoggingEnabled +implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled + codelessEventsEnabled:(BOOL)codelessEventsEnabled + systemAuthenticationEnabled:(BOOL)systemAuthenticationEnabled + nativeAuthFlowEnabled:(BOOL)nativeAuthFlowEnabled + uninstallTrackingEnabled:(BOOL)uninstallTrackingEnabled + dialogConfigurations:(NSDictionary *)dialogConfigurations + dialogFlows:(NSDictionary *)dialogFlows + timestamp:(NSDate *)timestamp + errorConfiguration:(FBSDKErrorConfiguration *)errorConfiguration + sessionTimeoutInterval:(NSTimeInterval) sessionTimeoutInterval + defaults:(BOOL)defaults + loggingToken:(NSString *)loggingToken + smartLoginOptions:(FBSDKServerConfigurationSmartLoginOptions)smartLoginOptions + smartLoginBookmarkIconURL:(NSURL *)smartLoginBookmarkIconURL + smartLoginMenuIconURL:(NSURL *)smartLoginMenuIconURL + updateMessage:(NSString *)updateMessage + eventBindings:(NSArray *)eventBindings +{ + if ((self = [super init])) { + _appID = [appID copy]; + _appName = [appName copy]; + _loginTooltipEnabled = loginTooltipEnabled; + _loginTooltipText = [loginTooltipText copy]; + _defaultShareMode = defaultShareMode; + _advertisingIDEnabled = advertisingIDEnabled; + _implicitLoggingEnabled = implicitLoggingEnabled; + _implicitPurchaseLoggingEnabled = implicitPurchaseLoggingEnabled; + _codelessEventsEnabled = codelessEventsEnabled; + _systemAuthenticationEnabled = systemAuthenticationEnabled; + _uninstallTrackingEnabled = uninstallTrackingEnabled; + _nativeAuthFlowEnabled = nativeAuthFlowEnabled; + _dialogConfigurations = [dialogConfigurations copy]; + _dialogFlows = [dialogFlows copy]; + _timestamp = [timestamp copy]; + _errorConfiguration = [errorConfiguration copy]; + _sessionTimoutInterval = sessionTimeoutInterval; + _defaults = defaults; + _loggingToken = loggingToken; + _smartLoginOptions = smartLoginOptions; + _smartLoginMenuIconURL = [smartLoginMenuIconURL copy]; + _smartLoginBookmarkIconURL = [smartLoginBookmarkIconURL copy]; + _updateMessage = [updateMessage copy]; + _eventBindings = eventBindings; + _version = FBSDKServerConfigurationVersion; + } + return self; +} + +#pragma mark - Public Methods + +- (FBSDKDialogConfiguration *)dialogConfigurationForDialogName:(NSString *)dialogName +{ + return _dialogConfigurations[dialogName]; +} + +- (BOOL)useNativeDialogForDialogName:(NSString *)dialogName +{ + return [self _useFeatureWithKey:FBSDKDialogConfigurationFeatureUseNativeFlow dialogName:dialogName]; +} + +- (BOOL)useSafariViewControllerForDialogName:(NSString *)dialogName +{ + return [self _useFeatureWithKey:FBSDKDialogConfigurationFeatureUseSafariViewController dialogName:dialogName]; +} + +#pragma mark - Helper Methods + +- (BOOL)_useFeatureWithKey:(NSString *)key dialogName:(NSString *)dialogName +{ + if ([dialogName isEqualToString:FBSDKDialogConfigurationNameLogin]) { + return ((NSNumber *)(_dialogFlows[dialogName][key] ?: + _dialogFlows[FBSDKDialogConfigurationNameDefault][key])).boolValue; + } else { + return ((NSNumber *)(_dialogFlows[dialogName][key] ?: + _dialogFlows[FBSDKDialogConfigurationNameSharing][key] ?: + _dialogFlows[FBSDKDialogConfigurationNameDefault][key])).boolValue; + } +} + +#pragma mark - NSCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder +{ + NSString *appID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_APP_ID_KEY]; + NSString *appName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_APP_NAME_KEY]; + BOOL loginTooltipEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY]; + NSString *loginTooltipText = [decoder decodeObjectOfClass:[NSString class] + forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY]; + NSString *defaultShareMode = [decoder decodeObjectOfClass:[NSString class] + forKey:FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_KEY]; + BOOL advertisingIDEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_ADVERTISING_ID_ENABLED_KEY]; + BOOL implicitLoggingEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY]; + BOOL implicitPurchaseLoggingEnabled = + [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY]; + BOOL codelessEventsEnabled = + [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_CODELESS_EVENTS_ENABLED_KEY]; + BOOL systemAuthenticationEnabled = + [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_KEY]; + BOOL uninstallTrackingEnabled = + [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY]; + FBSDKServerConfigurationSmartLoginOptions smartLoginOptions = [decoder decodeIntegerForKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY]; + BOOL nativeAuthFlowEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_NATIVE_AUTH_FLOW_ENABLED_KEY]; + NSDate *timestamp = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY]; + NSSet *dialogConfigurationsClasses = [[NSSet alloc] initWithObjects: + [NSDictionary class], + [FBSDKDialogConfiguration class], + nil]; + NSDictionary *dialogConfigurations = [decoder decodeObjectOfClasses:dialogConfigurationsClasses + forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_KEY]; + NSSet *dialogFlowsClasses = [[NSSet alloc] initWithObjects: + [NSDictionary class], + [NSString class], + [NSNumber class], + nil]; + NSDictionary *dialogFlows = [decoder decodeObjectOfClasses:dialogFlowsClasses + forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_KEY]; + FBSDKErrorConfiguration *errorConfiguration = [decoder decodeObjectOfClass:[FBSDKErrorConfiguration class] forKey:FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGS_KEY]; + NSTimeInterval sessionTimeoutInterval = [decoder decodeDoubleForKey:FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_INTERVAL]; + NSString *loggingToken = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_LOGGING_TOKEN]; + NSURL *smartLoginBookmarkIconURL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_KEY]; + NSURL *smartLoginMenuIconURL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_KEY]; + NSString *updateMessage = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_KEY]; + NSArray *eventBindings = [decoder decodeObjectOfClass:[NSArray class] forKey:FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS]; + NSInteger version = [decoder decodeIntegerForKey:FBSDK_SERVER_CONFIGURATION_VERSION_KEY]; + FBSDKServerConfiguration *configuration = [self initWithAppID:appID + appName:appName + loginTooltipEnabled:loginTooltipEnabled + loginTooltipText:loginTooltipText + defaultShareMode:defaultShareMode + advertisingIDEnabled:advertisingIDEnabled + implicitLoggingEnabled:implicitLoggingEnabled + implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled + codelessEventsEnabled:codelessEventsEnabled + systemAuthenticationEnabled:systemAuthenticationEnabled + nativeAuthFlowEnabled:nativeAuthFlowEnabled + uninstallTrackingEnabled:uninstallTrackingEnabled + dialogConfigurations:dialogConfigurations + dialogFlows:dialogFlows + timestamp:timestamp + errorConfiguration:errorConfiguration + sessionTimeoutInterval:sessionTimeoutInterval + defaults:NO + loggingToken:loggingToken + smartLoginOptions:smartLoginOptions + smartLoginBookmarkIconURL:smartLoginBookmarkIconURL + smartLoginMenuIconURL:smartLoginMenuIconURL + updateMessage:updateMessage + eventBindings:eventBindings + ]; + configuration->_version = version; + return configuration; +} + +- (void)encodeWithCoder:(NSCoder *)encoder +{ + [encoder encodeBool:_advertisingIDEnabled forKey:FBSDK_SERVER_CONFIGURATION_ADVERTISING_ID_ENABLED_KEY]; + [encoder encodeObject:_appID forKey:FBSDK_SERVER_CONFIGURATION_APP_ID_KEY]; + [encoder encodeObject:_appName forKey:FBSDK_SERVER_CONFIGURATION_APP_NAME_KEY]; + [encoder encodeObject:_defaultShareMode forKey:FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_KEY]; + [encoder encodeObject:_dialogConfigurations forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_KEY]; + [encoder encodeObject:_dialogFlows forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_KEY]; + [encoder encodeObject:_errorConfiguration forKey:FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGS_KEY]; + [encoder encodeBool:_implicitLoggingEnabled forKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY]; + [encoder encodeBool:_implicitPurchaseLoggingEnabled + forKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY]; + [encoder encodeBool:_codelessEventsEnabled + forKey:FBSDK_SERVER_CONFIGURATION_CODELESS_EVENTS_ENABLED_KEY]; + [encoder encodeBool:_loginTooltipEnabled forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY]; + [encoder encodeBool:_uninstallTrackingEnabled + forKey:FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY]; + [encoder encodeObject:_loginTooltipText forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY]; + [encoder encodeBool:_nativeAuthFlowEnabled forKey:FBSDK_SERVER_CONFIGURATION_NATIVE_AUTH_FLOW_ENABLED_KEY]; + [encoder encodeBool:_systemAuthenticationEnabled forKey:FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_KEY]; + [encoder encodeObject:_timestamp forKey:FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY]; + [encoder encodeDouble:_sessionTimoutInterval forKey:FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_INTERVAL]; + [encoder encodeObject:_loggingToken forKey:FBSDK_SERVER_CONFIGURATION_LOGGING_TOKEN]; + [encoder encodeInteger:_smartLoginOptions forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY]; + [encoder encodeObject:_smartLoginBookmarkIconURL forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_KEY]; + [encoder encodeObject:_smartLoginMenuIconURL forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_KEY]; + [encoder encodeObject:_updateMessage forKey:FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_KEY]; + [encoder encodeObject:_eventBindings forKey:FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS]; + [encoder encodeInteger:_version forKey:FBSDK_SERVER_CONFIGURATION_VERSION_KEY]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h new file mode 100644 index 0000000000..b84b02353e --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h @@ -0,0 +1,33 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKServerConfigurationManager.h" + +@class FBSDKGraphRequest; + +@interface FBSDKServerConfigurationManager () + ++ (void)processLoadRequestResponse:(id)result error:(NSError *)error appID:(NSString *)appID; + ++ (FBSDKGraphRequest *)requestToLoadServerConfiguration:(NSString *)appID; + ++ (void)clearCache; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h new file mode 100644 index 0000000000..d5b9240e6a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h @@ -0,0 +1,43 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKServerConfiguration.h" + +#define FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT (60 * 60) +typedef void(^FBSDKServerConfigurationManagerLoadBlock)(FBSDKServerConfiguration *serverConfiguration, NSError *error); + +@interface FBSDKServerConfigurationManager : NSObject + +/** + Returns the locally cached configuration. + + The result will be valid for the appID from FBSDKSettings, but may be expired. A network request will be + initiated to update the configuration if a valid and unexpired configuration is not available. + */ ++ (FBSDKServerConfiguration *)cachedServerConfiguration; + +/** + Executes the completionBlock with a valid and current configuration when it is available. + + This method will use a cached configuration if it is valid and not expired. + */ ++ (void)loadServerConfigurationWithCompletionBlock:(FBSDKServerConfigurationManagerLoadBlock)completionBlock; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m new file mode 100644 index 0000000000..5b0e548659 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m @@ -0,0 +1,456 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKServerConfigurationManager+Internal.h" + +#import + +#import "FBSDKAppEventsUtility.h" +#import "FBSDKGateKeeperManager.h" +#import "FBSDKGraphRequest+Internal.h" +#import "FBSDKGraphRequest.h" +#import "FBSDKImageDownloader.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKServerConfiguration+Internal.h" +#import "FBSDKServerConfiguration.h" +#import "FBSDKSettings.h" +#import "FBSDKTypeUtility.h" + +// one hour +#define DEFAULT_SESSION_TIMEOUT_INTERVAL 60 + +#define FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY @"com.facebook.sdk:serverConfiguration%@" + +#define FBSDK_SERVER_CONFIGURATION_APP_EVENTS_FEATURES_FIELD @"app_events_feature_bitmask" +#define FBSDK_SERVER_CONFIGURATION_APP_NAME_FIELD @"name" +#define FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_FIELD @"default_share_mode" +#define FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_FIELD @"ios_dialog_configs" +#define FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_FIELD @"ios_sdk_dialog_flows" +#define FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGURATION_FIELD @"ios_sdk_error_categories" +#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_FIELD @"supports_implicit_sdk_logging" +#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD @"gdpv4_nux_enabled" +#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD @"gdpv4_nux_content" +#define FBSDK_SERVER_CONFIGURATION_NATIVE_PROXY_AUTH_FLOW_ENABLED_FIELD @"ios_supports_native_proxy_auth_flow" +#define FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_FIELD @"ios_supports_system_auth" +#define FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_FIELD @"app_events_session_timeout" +#define FBSDK_SERVER_CONFIGURATION_LOGGIN_TOKEN_FIELD @"logging_token" +#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_FIELD @"seamless_login" +#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_FIELD @"smart_login_bookmark_icon_url" +#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_FIELD @"smart_login_menu_icon_url" +#define FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_FIELD @"sdk_update_message" +#define FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS_FIELD @"auto_event_mapping_ios" + +@implementation FBSDKServerConfigurationManager + +static NSMutableArray *_completionBlocks; +static BOOL _loadingServerConfiguration; +static FBSDKServerConfiguration *_serverConfiguration; +static NSError *_serverConfigurationError; +static NSDate *_serverConfigurationErrorTimestamp; +static const NSTimeInterval kTimeout = 4.0; +static BOOL _printedUpdateMessage; +static BOOL _requeryFinishedForAppStart; + +typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) +{ + FBSDKServerConfigurationManagerAppEventsFeaturesNone = 0, + FBSDKServerConfigurationManagerAppEventsFeaturesAdvertisingIDEnabled = 1 << 0, + FBSDKServerConfigurationManagerAppEventsFeaturesImplicitPurchaseLoggingEnabled = 1 << 1, + FBSDKServerConfigurationManagerAppEventsFeaturesCodelessEventsTriggerEnabled = 1 << 5, + FBSDKServerConfigurationManagerAppEventsFeaturesUninstallTrackingEnabled = 1 << 7, +}; + +#pragma mark - Public Class Methods + ++ (void)initialize +{ + if (self == [FBSDKServerConfigurationManager class]) { + _completionBlocks = [[NSMutableArray alloc] init]; + } +} + ++ (void)clearCache +{ + _serverConfiguration = nil; + _serverConfigurationError = nil; + _serverConfigurationErrorTimestamp = nil; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *defaultsKey = [NSString stringWithFormat:FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY, [FBSDKSettings appID]]; + [defaults removeObjectForKey:defaultsKey]; + [defaults synchronize]; +} + ++ (FBSDKServerConfiguration *)cachedServerConfiguration +{ + NSString *appID = [FBSDKSettings appID]; + @synchronized(self) { + // load the server configuration if we don't have it already + [self loadServerConfigurationWithCompletionBlock:NULL]; + + // use whatever configuration we have or the default + return _serverConfiguration ?: [self _defaultServerConfigurationForAppID:appID]; + } +} + ++ (void)loadServerConfigurationWithCompletionBlock:(FBSDKServerConfigurationManagerLoadBlock)completionBlock +{ + void (^loadBlock)(void) = NULL; + NSString *appID = [FBSDKSettings appID]; + @synchronized(self) { + // validate the cached configuration has the correct appID + if (_serverConfiguration && ![_serverConfiguration.appID isEqualToString:appID]) { + _serverConfiguration = nil; + _serverConfigurationError = nil; + _serverConfigurationErrorTimestamp = nil; + } + + // load the configuration from NSUserDefaults + if (!_serverConfiguration) { + // load the defaults + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *defaultsKey = [NSString stringWithFormat:FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY, appID]; + NSData *data = [defaults objectForKey:defaultsKey]; + if ([data isKindOfClass:[NSData class]]) { + // decode the configuration + FBSDKServerConfiguration *serverConfiguration = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + if ([serverConfiguration isKindOfClass:[FBSDKServerConfiguration class]]) { + // ensure that the configuration points to the current appID + if ([serverConfiguration.appID isEqualToString:appID]) { + _serverConfiguration = serverConfiguration; + } + } + } + } + + if (_requeryFinishedForAppStart && + ((_serverConfiguration && [self _serverConfigurationTimestampIsValid:_serverConfiguration.timestamp] && _serverConfiguration.version >= FBSDKServerConfigurationVersion) || + (_serverConfigurationErrorTimestamp && [self _serverConfigurationTimestampIsValid:_serverConfigurationErrorTimestamp]))) { + // we have a valid server configuration, use that + loadBlock = [self _wrapperBlockForLoadBlock:completionBlock]; + } else { + // hold onto the completion block + [FBSDKInternalUtility array:_completionBlocks addObject:[completionBlock copy]]; + + // check if we are already loading + if (!_loadingServerConfiguration) { + // load the configuration from the network + _loadingServerConfiguration = YES; + FBSDKGraphRequest *request = [[self class] requestToLoadServerConfiguration:appID]; + + // start request with specified timeout instead of the default 180s + FBSDKGraphRequestConnection *requestConnection = [[FBSDKGraphRequestConnection alloc] init]; + requestConnection.timeout = kTimeout; + [requestConnection addRequest:request completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + _requeryFinishedForAppStart = YES; + [self processLoadRequestResponse:result error:error appID:appID]; + }]; + [requestConnection start]; + } + } + } + + if (loadBlock != NULL) { + loadBlock(); + } + + // Fetch app gatekeepers + [FBSDKGateKeeperManager loadGateKeepers]; +} + +#pragma mark - Internal Class Methods + ++ (void)processLoadRequestResponse:(id)result error:(NSError *)error appID:(NSString *)appID +{ + if (error) { + [self _didProcessConfigurationFromNetwork:nil appID:appID error:error]; + return; + } + + NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; + NSUInteger appEventsFeatures = [FBSDKTypeUtility unsignedIntegerValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_APP_EVENTS_FEATURES_FIELD]]; + BOOL advertisingIDEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesAdvertisingIDEnabled) != 0; + BOOL implicitPurchaseLoggingEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesImplicitPurchaseLoggingEnabled) != 0; + BOOL codelessEventsEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesCodelessEventsTriggerEnabled) != 0; + BOOL uninstallTrackingEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesUninstallTrackingEnabled) != 0; + NSString *appName = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_APP_NAME_FIELD]]; + BOOL loginTooltipEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD]]; + NSString *loginTooltipText = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD]]; + NSString *defaultShareMode = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_FIELD]]; + BOOL implicitLoggingEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_FIELD]]; + BOOL systemAuthenticationEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_FIELD]]; + BOOL nativeAuthFlowEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_NATIVE_PROXY_AUTH_FLOW_ENABLED_FIELD]]; + NSDictionary *dialogConfigurations = [FBSDKTypeUtility dictionaryValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_FIELD]]; + dialogConfigurations = [self _parseDialogConfigurations:dialogConfigurations]; + NSDictionary *dialogFlows = [FBSDKTypeUtility dictionaryValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_FIELD]]; + FBSDKErrorConfiguration *errorConfiguration = [[FBSDKErrorConfiguration alloc] initWithDictionary:nil]; + [errorConfiguration parseArray:resultDictionary[FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGURATION_FIELD]]; + NSTimeInterval sessionTimeoutInterval = [FBSDKTypeUtility timeIntervalValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_FIELD]] ?: DEFAULT_SESSION_TIMEOUT_INTERVAL; + NSString *loggingToken = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGGIN_TOKEN_FIELD]]; + FBSDKServerConfigurationSmartLoginOptions smartLoginOptions = [FBSDKTypeUtility integerValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_FIELD]]; + NSURL *smartLoginBookmarkIconURL = [FBSDKTypeUtility URLValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_FIELD]]; + NSURL *smartLoginMenuIconURL = [FBSDKTypeUtility URLValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_FIELD]]; + NSString *updateMessage = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_FIELD]]; + NSArray *eventBindings = [FBSDKTypeUtility arrayValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS_FIELD]]; + FBSDKServerConfiguration *serverConfiguration = [[FBSDKServerConfiguration alloc] initWithAppID:appID + appName:appName + loginTooltipEnabled:loginTooltipEnabled + loginTooltipText:loginTooltipText + defaultShareMode:defaultShareMode + advertisingIDEnabled:advertisingIDEnabled + implicitLoggingEnabled:implicitLoggingEnabled + implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled + codelessEventsEnabled:codelessEventsEnabled + systemAuthenticationEnabled:systemAuthenticationEnabled + nativeAuthFlowEnabled:nativeAuthFlowEnabled + uninstallTrackingEnabled:uninstallTrackingEnabled + dialogConfigurations:dialogConfigurations + dialogFlows:dialogFlows + timestamp:[NSDate date] + errorConfiguration:errorConfiguration + sessionTimeoutInterval:sessionTimeoutInterval + defaults:NO + loggingToken:loggingToken + smartLoginOptions:smartLoginOptions + smartLoginBookmarkIconURL:smartLoginBookmarkIconURL + smartLoginMenuIconURL:smartLoginMenuIconURL + updateMessage:updateMessage + eventBindings:eventBindings + ]; +#if TARGET_OS_TV + // don't download icons more than once a day. + static const NSTimeInterval kSmartLoginIconsTTL = 60 * 60 * 24; + + BOOL smartLoginEnabled = (smartLoginOptions & FBSDKServerConfigurationSmartLoginOptionsEnabled); + // for TVs go ahead and prime the images + if (smartLoginEnabled && + smartLoginMenuIconURL && + smartLoginBookmarkIconURL) { + [[FBSDKImageDownloader sharedInstance] downloadImageWithURL:serverConfiguration.smartLoginBookmarkIconURL + ttl:kSmartLoginIconsTTL + completion:NULL]; + [[FBSDKImageDownloader sharedInstance] downloadImageWithURL:serverConfiguration.smartLoginMenuIconURL + ttl:kSmartLoginIconsTTL + completion:NULL]; + } +#endif + [self _didProcessConfigurationFromNetwork:serverConfiguration appID:appID error:nil]; +} + ++ (FBSDKGraphRequest *)requestToLoadServerConfiguration:(NSString *)appID +{ + NSOperatingSystemVersion operatingSystemVersion = [FBSDKInternalUtility operatingSystemVersion]; + NSString *dialogFlowsField = [NSString stringWithFormat:@"%@.os_version(%ti.%ti.%ti)", + FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_FIELD, + operatingSystemVersion.majorVersion, + operatingSystemVersion.minorVersion, + operatingSystemVersion.patchVersion]; + NSArray *fields = @[FBSDK_SERVER_CONFIGURATION_APP_EVENTS_FEATURES_FIELD, + FBSDK_SERVER_CONFIGURATION_APP_NAME_FIELD, + FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_FIELD, + FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_FIELD, + dialogFlowsField, + FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGURATION_FIELD, + FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_FIELD, + FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD, + FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD, + FBSDK_SERVER_CONFIGURATION_NATIVE_PROXY_AUTH_FLOW_ENABLED_FIELD, + FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_FIELD, + FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_FIELD, + FBSDK_SERVER_CONFIGURATION_LOGGIN_TOKEN_FIELD +#if !TARGET_OS_TV + ,FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS_FIELD +#endif +#ifdef DEBUG + ,FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_FIELD +#endif +#if TARGET_OS_TV + ,FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_FIELD, + FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_FIELD, + FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_FIELD +#endif + ]; + NSDictionary *parameters = @{ @"fields": [fields componentsJoinedByString:@","]}; + + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:appID + parameters:parameters + tokenString:nil + HTTPMethod:nil + flags:FBSDKGraphRequestFlagSkipClientToken | FBSDKGraphRequestFlagDisableErrorRecovery]; + return request; +} + +#pragma mark - Helper Class Methods + ++ (FBSDKServerConfiguration *)_defaultServerConfigurationForAppID:(NSString *)appID +{ + // Use a default configuration while we do not have a configuration back from the server. This allows us to set + // the default values for any of the dialog sets or anything else in a centralized location while we are waiting for + // the server to respond. + static FBSDKServerConfiguration *_defaultServerConfiguration = nil; + if (![_defaultServerConfiguration.appID isEqualToString:appID]) { + // Bypass the native dialog flow for iOS 9+, as it produces a series of additional confirmation dialogs that lead to + // extra friction that is not desirable. + NSOperatingSystemVersion iOS9Version = { .majorVersion = 9, .minorVersion = 0, .patchVersion = 0 }; + BOOL useNativeFlow = ![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version]; + // Also enable SFSafariViewController by default. + NSDictionary *dialogFlows = @{ + FBSDKDialogConfigurationNameDefault: @{ + FBSDKDialogConfigurationFeatureUseNativeFlow: @(useNativeFlow), + FBSDKDialogConfigurationFeatureUseSafariViewController: @YES, + }, + FBSDKDialogConfigurationNameMessage: @{ + FBSDKDialogConfigurationFeatureUseNativeFlow: @YES, + }, + }; + _defaultServerConfiguration = [[FBSDKServerConfiguration alloc] initWithAppID:appID + appName:nil + loginTooltipEnabled:NO + loginTooltipText:nil + defaultShareMode:nil + advertisingIDEnabled:NO + implicitLoggingEnabled:NO + implicitPurchaseLoggingEnabled:NO + codelessEventsEnabled:NO + systemAuthenticationEnabled:NO + nativeAuthFlowEnabled:NO + uninstallTrackingEnabled:NO + dialogConfigurations:nil + dialogFlows:dialogFlows + timestamp:nil + errorConfiguration:nil + sessionTimeoutInterval:DEFAULT_SESSION_TIMEOUT_INTERVAL + defaults:YES + loggingToken:nil + smartLoginOptions:FBSDKServerConfigurationSmartLoginOptionsUnknown + smartLoginBookmarkIconURL:nil + smartLoginMenuIconURL:nil + updateMessage:nil + eventBindings:nil + ]; + } + return _defaultServerConfiguration; +} + ++ (void)_didProcessConfigurationFromNetwork:(FBSDKServerConfiguration *)serverConfiguration + appID:(NSString *)appID + error:(NSError *)error +{ + NSMutableArray *completionBlocks = [[NSMutableArray alloc] init]; + @synchronized(self) { + if (error) { + // Only set the error if we don't have previously fetched app settings. + // (i.e., if we have app settings and a new call gets an error, we'll + // ignore the error and surface the last successfully fetched settings). + if (_serverConfiguration && [_serverConfiguration.appID isEqualToString:appID]) { + // We have older app settings but the refresh received an error. + // Log and ignore the error. + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational + formatString:@"loadServerConfigurationWithCompletionBlock failed with %@", error]; + } else { + _serverConfiguration = nil; + } + _serverConfigurationError = error; + _serverConfigurationErrorTimestamp = [NSDate date]; + } else { + _serverConfiguration = serverConfiguration; + _serverConfigurationError = nil; + _serverConfigurationErrorTimestamp = nil; + +#ifdef DEBUG + NSString *updateMessage = _serverConfiguration.updateMessage; + if (updateMessage && updateMessage.length > 0 && !_printedUpdateMessage) { + _printedUpdateMessage = YES; + NSLog(@"%@", updateMessage); + } +#endif + } + + // update the cached copy in NSUserDefaults + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *defaultsKey = [NSString stringWithFormat:FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY, appID]; + if (serverConfiguration) { + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:serverConfiguration]; + [defaults setObject:data forKey:defaultsKey]; + } + + // wrap the completion blocks + for (FBSDKServerConfigurationManagerLoadBlock completionBlock in _completionBlocks) { + [completionBlocks addObject:[self _wrapperBlockForLoadBlock:completionBlock]]; + } + [_completionBlocks removeAllObjects]; + _loadingServerConfiguration = NO; + } + + // release the lock before calling out of this class + for (void (^completionBlock)(void) in completionBlocks) { + completionBlock(); + } +} + ++ (NSDictionary *)_parseDialogConfigurations:(NSDictionary *)dictionary +{ + NSMutableDictionary *dialogConfigurations = [[NSMutableDictionary alloc] init]; + NSArray *dialogConfigurationsArray = [FBSDKTypeUtility arrayValue:dictionary[@"data"]]; + for (id dialogConfiguration in dialogConfigurationsArray) { + NSDictionary *dialogConfigurationDictionary = [FBSDKTypeUtility dictionaryValue:dialogConfiguration]; + if (dialogConfigurationDictionary) { + NSString *name = [FBSDKTypeUtility stringValue:dialogConfigurationDictionary[@"name"]]; + if (name.length) { + NSURL *URL = [FBSDKTypeUtility URLValue:dialogConfigurationDictionary[@"url"]]; + NSArray *appVersions = [FBSDKTypeUtility arrayValue:dialogConfigurationDictionary[@"versions"]]; + dialogConfigurations[name] = [[FBSDKDialogConfiguration alloc] initWithName:name + URL:URL + appVersions:appVersions]; + } + } + } + return dialogConfigurations; +} + ++ (BOOL)_serverConfigurationTimestampIsValid:(NSDate *)timestamp +{ + return ([[NSDate date] timeIntervalSinceDate:timestamp] < FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT); +} + ++ (void(^)(void))_wrapperBlockForLoadBlock:(FBSDKServerConfigurationManagerLoadBlock)loadBlock +{ + if (loadBlock == NULL) { + return NULL; + } + + // create local vars to capture the current values from the ivars to allow this wrapper to be called outside of a lock + FBSDKServerConfiguration *serverConfiguration; + NSError *serverConfigurationError; + @synchronized(self) { + serverConfiguration = _serverConfiguration; + serverConfigurationError = _serverConfigurationError; + } + return ^{ + loadBlock(serverConfiguration, serverConfigurationError); + }; +} + +#pragma mark - Object Lifecycle + +- (instancetype)init +{ + return nil; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h new file mode 100644 index 0000000000..0d7a49290f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h @@ -0,0 +1,27 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCaching.h" + +@interface FBSDKAccessTokenCache : NSObject + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m new file mode 100644 index 0000000000..b9acabb559 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m @@ -0,0 +1,82 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCache.h" + +#import "FBSDKAccessTokenCacheV3.h" +#import "FBSDKAccessTokenCacheV3_17.h" +#import "FBSDKAccessTokenCacheV3_21.h" +#import "FBSDKAccessTokenCacheV4.h" + +static BOOL g_tryDeprecatedCaches = YES; + +@implementation FBSDKAccessTokenCache + +- (FBSDKAccessToken*)accessToken +{ + FBSDKAccessToken *token = [[FBSDKAccessTokenCacheV4 alloc] init].accessToken; + if (token || !g_tryDeprecatedCaches) { + return token; + } + + g_tryDeprecatedCaches = NO; + NSArray *oldCacheClasses = [[self class] deprecatedCacheClasses]; + __block FBSDKAccessToken *oldToken = nil; + [oldCacheClasses enumerateObjectsUsingBlock:^(Class obj, NSUInteger idx, BOOL *stop) { + id cache = [[obj alloc] init]; + oldToken = cache.accessToken; + if (oldToken) { + *stop = YES; + [cache clearCache]; + } + }]; + if (oldToken) { + self.accessToken = oldToken; + } + return oldToken; +} + +- (void)setAccessToken:(FBSDKAccessToken *)token +{ + [[FBSDKAccessTokenCacheV4 alloc] init].accessToken = token; + if (g_tryDeprecatedCaches) { + g_tryDeprecatedCaches = NO; + NSArray *oldCacheClasses = [[self class] deprecatedCacheClasses]; + [oldCacheClasses enumerateObjectsUsingBlock:^(Class obj, NSUInteger idx, BOOL *stop) { + id cache = [[obj alloc] init]; + [cache clearCache]; + }]; + } +} + +- (void)clearCache +{ + [[[FBSDKAccessTokenCacheV4 alloc] init] clearCache]; +} + +// used by FBSDKAccessTokenCacheIntegrationTests ++ (void)resetV3CacheChecks +{ + g_tryDeprecatedCaches = YES; +} + ++ (NSArray *)deprecatedCacheClasses +{ + return @[ [FBSDKAccessTokenCacheV3_21 class], [FBSDKAccessTokenCacheV3_17 class], [FBSDKAccessTokenCacheV3 class]]; +} +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h new file mode 100644 index 0000000000..38158311bd --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h @@ -0,0 +1,29 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCaching.h" + +FOUNDATION_EXPORT NSString *const FBSDKTokenInformationUUIDKey; + +@interface FBSDKAccessTokenCacheV3 : NSObject + ++ (FBSDKAccessToken *)accessTokenForV3Dictionary:(NSDictionary *)dictionary; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m new file mode 100644 index 0000000000..f118b009c9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m @@ -0,0 +1,80 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCacheV3.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKSettings.h" +#import "FBSDKTypeUtility.h" + +NSString *const FBSDKTokenInformationUUIDKey = @"com.facebook.sdk:TokenInformationUUIDKey"; + +#define FBSDK_TOKEN_INFORMATION_TOKEN_KEY @"com.facebook.sdk:TokenInformationTokenKey" +#define FBSDK_TOKEN_INFORMATION_EXPIRATION_DATE_KEY @"com.facebook.sdk:TokenInformationExpirationDateKey" +#define FBSDK_TOKEN_INFORMATION_USER_FBID_KEY @"com.facebook.sdk:TokenInformationUserFBIDKey" +#define FBSDK_TOKEN_INFORMATION_PERMISSIONS_KEY @"com.facebook.sdk:TokenInformationPermissionsKey" +#define FBSDK_TOKEN_INFORMATION_DECLINED_PERMISSIONS_KEY @"com.facebook.sdk:TokenInformationDeclinedPermissionsKey" +#define FBSDK_TOKEN_INFORMATION_APP_ID_KEY @"com.facebook.sdk:TokenInformationAppIDKey" +#define FBSDK_TOKEN_INFORMATION_REFRESH_DATE_KEY @"com.facebook.sdk:TokenInformationRefreshDateKey" + + +@implementation FBSDKAccessTokenCacheV3 + +- (FBSDKAccessToken *)accessToken +{ + // Check NSUserDefaults ( <= v3.16 ) + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *tokenDictionary = [defaults objectForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; + return [[self class] accessTokenForV3Dictionary:tokenDictionary]; +} + +- (void)clearCache +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults removeObjectForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; + [defaults synchronize]; +} + +- (void)setAccessToken:(FBSDKAccessToken *)token +{ + //no-op. + NSAssert(NO, @"deprecated cache FBSDKAccessTokenCacheV3 should not be used to cache a token"); +} + ++ (FBSDKAccessToken *)accessTokenForV3Dictionary:(NSDictionary *)dictionary +{ + NSString *tokenString = [FBSDKTypeUtility stringValue:dictionary[FBSDK_TOKEN_INFORMATION_TOKEN_KEY]]; + if (tokenString.length > 0) { + NSDate *expirationDate = dictionary[FBSDK_TOKEN_INFORMATION_EXPIRATION_DATE_KEY]; + // Note we default to valid in cases where expiration date is missing. + BOOL isExpired = ([expirationDate compare:[NSDate date]] == NSOrderedAscending); + if (isExpired) { + return nil; + } + return [[FBSDKAccessToken alloc] initWithTokenString:tokenString + permissions:dictionary[FBSDK_TOKEN_INFORMATION_PERMISSIONS_KEY] + declinedPermissions:dictionary[FBSDK_TOKEN_INFORMATION_DECLINED_PERMISSIONS_KEY] + appID:dictionary[FBSDK_TOKEN_INFORMATION_APP_ID_KEY] + userID:dictionary[FBSDK_TOKEN_INFORMATION_USER_FBID_KEY] + expirationDate:expirationDate + refreshDate:dictionary[FBSDK_TOKEN_INFORMATION_REFRESH_DATE_KEY] + dataAccessExpirationDate:nil]; + } + return nil; +} +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h new file mode 100644 index 0000000000..7f486f3574 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCaching.h" + +@interface FBSDKAccessTokenCacheV3_17 : NSObject + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m new file mode 100644 index 0000000000..83f2cceb4d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m @@ -0,0 +1,63 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCacheV3_17.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKAccessTokenCacheV3.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKKeychainStoreViaBundleID.h" +#import "FBSDKSettings.h" + +@implementation FBSDKAccessTokenCacheV3_17 +{ + FBSDKKeychainStoreViaBundleID *_keychainStore; +} + +- (instancetype)init +{ + if ((self = [super init])) { + _keychainStore = [[FBSDKKeychainStoreViaBundleID alloc] init]; + } + return self; +} +- (FBSDKAccessToken *)accessToken +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *uuidKey = [[FBSDKSettings legacyUserDefaultTokenInformationKeyName] stringByAppendingString:@"UUID"]; + NSString *uuid = [defaults objectForKey:uuidKey]; + NSDictionary *tokenDictionary = [_keychainStore dictionaryForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; + if (![tokenDictionary[FBSDKTokenInformationUUIDKey] isEqualToString:uuid]) { + [self clearCache]; + } + + return [FBSDKAccessTokenCacheV3 accessTokenForV3Dictionary:tokenDictionary]; +} + +- (void)clearCache +{ + [_keychainStore setDictionary:nil forKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName] accessibility:nil]; +} + +- (void)setAccessToken:(FBSDKAccessToken *)token +{ + //no-op. + NSAssert(NO, @"deprecated cache FBSDKAccessTokenCacheV3_17 should not be used to cache a token"); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h new file mode 100644 index 0000000000..da1ac64dfc --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCaching.h" + +@interface FBSDKAccessTokenCacheV3_21 : NSObject + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m new file mode 100644 index 0000000000..6b25f0af90 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m @@ -0,0 +1,66 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCacheV3_21.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKAccessTokenCacheV3.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKKeychainStore.h" +#import "FBSDKSettings.h" + +@implementation FBSDKAccessTokenCacheV3_21 +{ + FBSDKKeychainStore *_keychainStore; +} + +- (instancetype)init +{ + if ((self = [super init])) { + NSString *keyChainServiceIdentifier = [NSString stringWithFormat:@"com.facebook.sdk.tokencache.%@", [NSBundle mainBundle].bundleIdentifier]; + _keychainStore = [[FBSDKKeychainStore alloc] initWithService:keyChainServiceIdentifier accessGroup:nil]; + } + return self; +} + +- (FBSDKAccessToken *)accessToken +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *uuidKey = [[FBSDKSettings legacyUserDefaultTokenInformationKeyName] stringByAppendingString:@"UUID"]; + NSString *uuid = [defaults objectForKey:uuidKey]; + NSDictionary *tokenDictionary = [_keychainStore dictionaryForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; + if (![tokenDictionary[FBSDKTokenInformationUUIDKey] isEqualToString:uuid]) { + [self clearCache]; + } + + return [FBSDKAccessTokenCacheV3 accessTokenForV3Dictionary:tokenDictionary]; +} + +- (void)clearCache +{ + [_keychainStore setDictionary:nil forKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName] accessibility:nil]; +} + +- (void)setAccessToken:(FBSDKAccessToken *)token +{ + //no-op. + NSAssert(NO, @"deprecated cache FBSDKAccessTokenCacheV3_21 should not be used to cache a token"); +} + + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h new file mode 100644 index 0000000000..7fa7d7f04d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h @@ -0,0 +1,26 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessToken.h" +#import "FBSDKAccessTokenCaching.h" + +@interface FBSDKAccessTokenCacheV4 : NSObject + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m new file mode 100644 index 0000000000..0de90e4f15 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m @@ -0,0 +1,99 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenCacheV4.h" + +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKKeychainStore.h" + +static NSString *const kFBSDKAccessTokenUserDefaultsKey = @"com.facebook.sdk.v4.FBSDKAccessTokenInformationKey"; +static NSString *const kFBSDKAccessTokenKeychainKey = @"com.facebook.sdk.v4.FBSDKAccessTokenInformationKeychainKey"; +static NSString *const kFBSDKAccessTokenUUIDKey = @"tokenUUID"; +static NSString *const kFBSDKAccessTokenEncodedKey = @"tokenEncoded"; + +@implementation FBSDKAccessTokenCacheV4 +{ + FBSDKKeychainStore *_keychainStore; +} + +- (instancetype)init +{ + if ((self = [super init])) { + NSString *keyChainServiceIdentifier = [NSString stringWithFormat:@"com.facebook.sdk.tokencache.%@", [NSBundle mainBundle].bundleIdentifier]; + _keychainStore = [[FBSDKKeychainStore alloc] initWithService:keyChainServiceIdentifier accessGroup:nil]; + } + return self; +} + +- (FBSDKAccessToken *)accessToken +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *uuid = [defaults objectForKey:kFBSDKAccessTokenUserDefaultsKey]; + + NSDictionary *dict = [_keychainStore dictionaryForKey:kFBSDKAccessTokenKeychainKey]; + if ([dict[kFBSDKAccessTokenUUIDKey] isKindOfClass:[NSString class]]) { + // there is a bug while running on simulator that the uuid stored in dict can be NSData, + // do a type check to make sure it is NSString + if ([dict[kFBSDKAccessTokenUUIDKey] isEqualToString:uuid]) { + id tokenData = dict[kFBSDKAccessTokenEncodedKey]; + if ([tokenData isKindOfClass:[NSData class]]) { + return [NSKeyedUnarchiver unarchiveObjectWithData:tokenData]; + } + } + } + // if the uuid doesn't match (including if there is no uuid in defaults which means uninstalled case) + // clear the keychain and return nil. + [self clearCache]; + return nil; +} + +- (void)setAccessToken:(FBSDKAccessToken *)token +{ + if (!token) { + [self clearCache]; + return; + } + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *uuid = [defaults objectForKey:kFBSDKAccessTokenUserDefaultsKey]; + if (!uuid) { + uuid = [NSUUID UUID].UUIDString; + [defaults setObject:uuid forKey:kFBSDKAccessTokenUserDefaultsKey]; + [defaults synchronize]; + } + NSData *tokenData = [NSKeyedArchiver archivedDataWithRootObject:token]; + NSDictionary *dict = @{ + kFBSDKAccessTokenUUIDKey : uuid, + kFBSDKAccessTokenEncodedKey : tokenData + }; + + [_keychainStore setDictionary:dict + forKey:kFBSDKAccessTokenKeychainKey + accessibility:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly]]; +} + +- (void)clearCache +{ + [_keychainStore setDictionary:nil + forKey:kFBSDKAccessTokenKeychainKey + accessibility:NULL]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults removeObjectForKey:kFBSDKAccessTokenUserDefaultsKey]; + [defaults synchronize]; +} +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h new file mode 100644 index 0000000000..ae780e30a1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h @@ -0,0 +1,29 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAccessToken; + +@protocol FBSDKAccessTokenCaching + +@property (nonatomic, copy) FBSDKAccessToken *accessToken; + +- (void)clearCache; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h new file mode 100644 index 0000000000..5754037fa9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h @@ -0,0 +1,23 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKAccessTokenExpirer : NSObject + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m new file mode 100644 index 0000000000..2744439258 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m @@ -0,0 +1,71 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKAccessTokenExpirer.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKApplicationDelegate+Internal.h" +#import "FBSDKInternalUtility.h" + +@implementation FBSDKAccessTokenExpirer +{ + NSTimer *_timer; +} + +- (instancetype)init +{ + if (self = [super init]) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_checkAccessTokenExpirationDate) name:FBSDKAccessTokenDidChangeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_checkAccessTokenExpirationDate) name:FBSDKApplicationDidBecomeActiveNotification object:nil]; + [self _checkAccessTokenExpirationDate]; + } + return self; +} + +- (void)dealloc +{ + [_timer invalidate]; + _timer = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)_checkAccessTokenExpirationDate +{ + [_timer invalidate]; + _timer = nil; + FBSDKAccessToken *accessToken = FBSDKAccessToken.currentAccessToken; + if (accessToken == nil || accessToken.isExpired) { + return; + } + _timer = [NSTimer scheduledTimerWithTimeInterval:accessToken.expirationDate.timeIntervalSinceNow target:self selector:@selector(_timerDidFire) userInfo:nil repeats:NO]; +} + +- (void)_timerDidFire +{ + FBSDKAccessToken *accessToken = FBSDKAccessToken.currentAccessToken; + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + [FBSDKInternalUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeNewKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeOldKey]; + userInfo[FBSDKAccessTokenDidExpireKey] = @YES; + + [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAccessTokenDidChangeNotification + object:[FBSDKAccessToken class] + userInfo:userInfo]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h new file mode 100644 index 0000000000..a99d5b3fba --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h @@ -0,0 +1,42 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKKeychainStore : NSObject + +@property (nonatomic, readonly, copy) NSString *service; +@property (nonatomic, readonly, copy) NSString *accessGroup; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup NS_DESIGNATED_INITIALIZER; + +- (BOOL)setDictionary:(NSDictionary *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility; +- (NSDictionary *)dictionaryForKey:(NSString *)key; + +- (BOOL)setString:(NSString *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility; +- (NSString *)stringForKey:(NSString *)key; + +- (BOOL)setData:(NSData *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility; +- (NSData *)dataForKey:(NSString *)key; + +// hook for subclasses to override keychain query construction. +- (NSMutableDictionary *)queryForKey:(NSString *)key; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m new file mode 100644 index 0000000000..81141ad7c2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m @@ -0,0 +1,168 @@ +/** + * Contains code from UICKeyChainStore + * + * Copyright (c) 2011 kishikawa katsumi + * + * 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 "FBSDKKeychainStore.h" + +#import "FBSDKDynamicFrameworkLoader.h" + +@implementation FBSDKKeychainStore + +- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup +{ + if ((self = [super init])) { + _service = service ? [service copy] : [NSBundle mainBundle].bundleIdentifier; + _accessGroup = [accessGroup copy]; + NSAssert(_service, @"Keychain must be initialized with service"); + } + + return self; +} + +- (BOOL)setDictionary:(NSDictionary *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility +{ + NSData *data = value == nil ? nil : [NSKeyedArchiver archivedDataWithRootObject:value]; + return [self setData:data forKey:key accessibility:accessibility]; +} + +- (NSDictionary *)dictionaryForKey:(NSString *)key +{ + NSData *data = [self dataForKey:key]; + if (!data) { + return nil; + } + + NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + if (![dict isKindOfClass:[NSDictionary class]]) { + return nil; + } + + return dict; +} + +- (BOOL)setString:(NSString *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility +{ + NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding]; + return [self setData:data forKey:key accessibility:accessibility]; +} + +- (NSString *)stringForKey:(NSString *)key +{ + NSData *data = [self dataForKey:key]; + if (!data) { + return nil; + } + + return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; +} + +- (BOOL)setData:(NSData *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility +{ + if (!key) { + return NO; + } + +#if TARGET_OS_SIMULATOR + NSLog(@"Falling back to storing access token in NSUserDefaults because of simulator bug"); + [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; + + return [[NSUserDefaults standardUserDefaults] synchronize]; +#else + NSMutableDictionary *query = [self queryForKey:key]; + + OSStatus status; + if (value) { + NSMutableDictionary *attributesToUpdate = [NSMutableDictionary dictionary]; + [attributesToUpdate setObject:value forKey:[FBSDKDynamicFrameworkLoader loadkSecValueData]]; + + status = fbsdkdfl_SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributesToUpdate); + if (status == errSecItemNotFound) { +#if !TARGET_OS_TV + if (@available(macOS 10.9, iOS 8, *)) { + if (accessibility) { + [query setObject:(__bridge id)(accessibility) forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessible]]; + } + } +#endif + [query setObject:value forKey:[FBSDKDynamicFrameworkLoader loadkSecValueData]]; + + status = fbsdkdfl_SecItemAdd((__bridge CFDictionaryRef)query, NULL); + } + } else { + status = fbsdkdfl_SecItemDelete((__bridge CFDictionaryRef)query); + if (status == errSecItemNotFound) { + status = errSecSuccess; + } + } + + return (status == errSecSuccess); +#endif +} + +- (NSData *)dataForKey:(NSString *)key +{ + if (!key) { + return nil; + } + +#if TARGET_OS_SIMULATOR + NSLog(@"Falling back to loading access token from NSUserDefaults because of simulator bug"); + return [[NSUserDefaults standardUserDefaults] dataForKey:key]; +#else + NSMutableDictionary *query = [self queryForKey:key]; + [query setObject:(id)kCFBooleanTrue forKey:[FBSDKDynamicFrameworkLoader loadkSecReturnData]]; + [query setObject:[FBSDKDynamicFrameworkLoader loadkSecMatchLimitOne] forKey:[FBSDKDynamicFrameworkLoader loadkSecMatchLimit]]; + + CFTypeRef data = nil; + OSStatus status = fbsdkdfl_SecItemCopyMatching((__bridge CFDictionaryRef)query, &data); + if (status != errSecSuccess) { + return nil; + } + + if (!data || CFGetTypeID(data) != CFDataGetTypeID()) { + return nil; + } + + NSData *ret = [NSData dataWithData:(__bridge NSData *)(data)]; + CFRelease(data); + + return ret; +#endif +} + +- (NSMutableDictionary *)queryForKey:(NSString *)key +{ + NSMutableDictionary *query = [NSMutableDictionary dictionary]; + [query setObject:[FBSDKDynamicFrameworkLoader loadkSecClassGenericPassword] forKey:[FBSDKDynamicFrameworkLoader loadkSecClass]]; + [query setObject:_service forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrService]]; + [query setObject:key forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccount]]; +#if !TARGET_IPHONE_SIMULATOR + if (_accessGroup) { + [query setObject:_accessGroup forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessGroup]]; + } +#endif + + return query; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h new file mode 100644 index 0000000000..0a0fb86bc0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h @@ -0,0 +1,29 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKKeychainStore.h" + +// This is the keychainstore defined in 3.17 that incorrectly used the bundle id as the service id +// and should NOT be used outside of this cache. +@interface FBSDKKeychainStoreViaBundleID : FBSDKKeychainStore + +// since this subclass represents the old keychainstore behavior, +// the designated initializer is just the `init`. +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m new file mode 100644 index 0000000000..78ed26f61f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m @@ -0,0 +1,50 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKKeychainStoreViaBundleID.h" + +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKInternalUtility.h" + +@implementation FBSDKKeychainStoreViaBundleID + +- (instancetype)init +{ + return [super initWithService:[NSBundle mainBundle].bundleIdentifier accessGroup:nil]; +} + +- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup +{ + return [self init]; +} + +- (NSMutableDictionary*)queryForKey:(NSString *)key +{ + NSMutableDictionary *query = [NSMutableDictionary dictionary]; + query[(__bridge id)[FBSDKDynamicFrameworkLoader loadkSecClass]] = (__bridge id)([FBSDKDynamicFrameworkLoader loadkSecClassGenericPassword]); + query[(__bridge id)[FBSDKDynamicFrameworkLoader loadkSecAttrService]] = self.service; + query[(__bridge id)[FBSDKDynamicFrameworkLoader loadkSecAttrGeneric]] = key; + +#if !TARGET_IPHONE_SIMULATOR + [FBSDKInternalUtility dictionary:query setObject:self.accessGroup forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessGroup]]; +#endif + + return query; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h new file mode 100644 index 0000000000..cd5afc85eb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h @@ -0,0 +1,61 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKIcon.h" + +@protocol FBSDKButtonImpressionTracking + +@property (nonatomic, readonly, copy) NSDictionary *analyticsParameters; +@property (nonatomic, readonly, copy) NSString *impressionTrackingEventName; +@property (nonatomic, readonly, copy) NSString *impressionTrackingIdentifier; + +@end + +@interface FBSDKButton () + +@property (nonatomic, readonly, getter=isImplicitlyDisabled) BOOL implicitlyDisabled; + +- (void)logTapEventWithEventName:(NSString *)eventName + parameters:(NSDictionary *)parameters; +- (void)checkImplicitlyDisabled; +- (void)configureButton; +- (void)configureWithIcon:(FBSDKIcon *)icon + title:(NSString *)title + backgroundColor:(UIColor *)backgroundColor + highlightedColor:(UIColor *)highlightedColor; +- (void)configureWithIcon:(FBSDKIcon *)icon + title:(NSString *)title + backgroundColor:(UIColor *)backgroundColor + highlightedColor:(UIColor *)highlightedColor + selectedTitle:(NSString *)selectedTitle + selectedIcon:(FBSDKIcon *)selectedIcon + selectedColor:(UIColor *)selectedColor + selectedHighlightedColor:(UIColor *)selectedHighlightedColor; +- (UIColor *)defaultBackgroundColor; +- (UIColor *)defaultDisabledColor; +- (UIFont *)defaultFont; +- (UIColor *)defaultHighlightedColor; +- (FBSDKIcon *)defaultIcon; +- (UIColor *)defaultSelectedColor; +- (CGSize)sizeThatFits:(CGSize)size title:(NSString *)title; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h new file mode 100644 index 0000000000..ec55385a77 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKCloseIcon : NSObject + +- (UIImage *)imageWithSize:(CGSize)size; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m new file mode 100644 index 0000000000..93b3ee192c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m @@ -0,0 +1,87 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCloseIcon.h" + +@implementation FBSDKCloseIcon + +#pragma mark - Public API + +- (UIImage *)imageWithSize:(CGSize)size +{ + CGFloat scale = [UIScreen mainScreen].scale; + UIGraphicsBeginImageContextWithOptions(size, NO, scale); + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGFloat iconSize = MIN(size.width, size.height); + + CGRect rect = CGRectMake((size.width - iconSize) / 2, (size.height - iconSize) / 2, iconSize, iconSize); + CGFloat step = iconSize / 12; + + // shadow + rect = CGRectIntegral(CGRectInset(rect, step, step)); + NSArray *colors = @[ + (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.7].CGColor, + (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.3].CGColor, + (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.1].CGColor, + (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.0].CGColor, + ]; + CGFloat locations[4] = { + 0.70, + 0.80, + 0.90, + 1.0, + }; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); + CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, locations); + CGColorSpaceRelease(colorSpace); + CGPoint center = CGPointMake(CGRectGetMidX(rect) - step / 6, CGRectGetMidY(rect) + step / 4); + CGContextDrawRadialGradient(context, gradient, center, 0.0, center, (CGRectGetWidth(rect) - step / 2) / 2, 0); + CGGradientRelease(gradient); + + // outer circle + rect = CGRectIntegral(CGRectInset(rect, step, step)); + [[UIColor whiteColor] setFill]; + CGContextFillEllipseInRect(context, rect); + + // inner circle + rect = CGRectIntegral(CGRectInset(rect, step, step)); + [[UIColor blackColor] setFill]; + CGContextFillEllipseInRect(context, rect); + + // cross + rect = CGRectIntegral(CGRectInset(rect, step, step)); + CGFloat lineWidth = step * 5 / 4; + rect.origin.y = CGRectGetMidY(rect) - lineWidth / 2; + rect.size.height = lineWidth; + [[UIColor whiteColor] setFill]; + CGContextTranslateCTM(context, size.width / 2, size.height / 2); + CGContextRotateCTM(context, M_PI_4); + CGContextTranslateCTM(context, -size.width / 2, -size.height / 2); + CGContextFillRect(context, rect); + CGContextTranslateCTM(context, size.width / 2, size.height / 2); + CGContextRotateCTM(context, M_PI_2); + CGContextTranslateCTM(context, -size.width / 2, -size.height / 2); + CGContextFillRect(context, rect); + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return image; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h new file mode 100644 index 0000000000..54825b6075 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h @@ -0,0 +1,22 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +UIColor *FBSDKUIColorWithRGBA(uint8_t r, uint8_t g, uint8_t b, CGFloat a); +UIColor *FBSDKUIColorWithRGB(uint8_t r, uint8_t g, uint8_t b); diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m new file mode 100644 index 0000000000..71b3d80e88 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m @@ -0,0 +1,31 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKColor.h" + +static const CGFloat kFBRGBMax = 255.0; + +UIColor *FBSDKUIColorWithRGBA(uint8_t r, uint8_t g, uint8_t b, CGFloat a) +{ + return [UIColor colorWithRed:(r / kFBRGBMax) green:(g / kFBRGBMax) blue:(b / kFBRGBMax) alpha:a]; +} + +UIColor *FBSDKUIColorWithRGB(uint8_t r, uint8_t g, uint8_t b) +{ + return FBSDKUIColorWithRGBA(r, g, b, 1.0); +} diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h new file mode 100644 index 0000000000..5be344554a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h @@ -0,0 +1,31 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKIcon : NSObject + +- (instancetype)initWithColor:(UIColor *)color NS_DESIGNATED_INITIALIZER; + +@property (nonatomic, strong, readonly) UIColor *color; + +- (UIImage *)imageWithSize:(CGSize)size; + +- (CGPathRef)pathWithSize:(CGSize)size; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m new file mode 100644 index 0000000000..b46a8d6c1b --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m @@ -0,0 +1,62 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKIcon.h" + +@implementation FBSDKIcon + +#pragma mark - Object Lifecycle + +- (instancetype)initWithColor:(UIColor *)color +{ + if ((self = [super init])) { + _color = [color copy]; + } + return self; +} + +- (instancetype)init +{ + return [self initWithColor:[UIColor whiteColor]]; +} + +#pragma mark - Public API + +- (UIImage *)imageWithSize:(CGSize)size +{ + if ((size.width == 0) || (size.height == 0)) { + return nil; + } + CGFloat scale = [UIScreen mainScreen].scale; + UIGraphicsBeginImageContextWithOptions(size, NO, scale); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGPathRef path = [self pathWithSize:size]; + CGContextAddPath(context, path); + CGContextSetFillColorWithColor(context, self.color.CGColor); + CGContextFillPath(context); + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return image; +} + +- (CGPathRef)pathWithSize:(CGSize)size +{ + return NULL; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h new file mode 100644 index 0000000000..76affe6806 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKIcon.h" + +@interface FBSDKLogo : FBSDKIcon + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m new file mode 100644 index 0000000000..47d0dc4650 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m @@ -0,0 +1,59 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLogo.h" + +@implementation FBSDKLogo + +- (CGPathRef)pathWithSize:(CGSize)size +{ + CGAffineTransform transformValue = CGAffineTransformMakeScale(size.width / 136.0, size.height / 136.0); + const CGAffineTransform *transform = &transformValue; + CGMutablePathRef path = CGPathCreateMutable(); + CGPathMoveToPoint(path, transform, 127.856, 0.676); + CGPathAddLineToPoint(path, transform, 7.469, 0.676); + CGPathAddCurveToPoint(path, transform, 3.344, 0.676, 0.0, 4.02, 0.0, 8.145); + CGPathAddLineToPoint(path, transform, 0.0, 128.531); + CGPathAddCurveToPoint(path, transform, 0.0, 132.656, 3.344, 136.0, 7.469, 136.0); + CGPathAddLineToPoint(path, transform, 72.282, 136.0); + CGPathAddLineToPoint(path, transform, 72.282, 83.596); + CGPathAddLineToPoint(path, transform, 54.646, 83.596); + CGPathAddLineToPoint(path, transform, 54.646, 63.173); + CGPathAddLineToPoint(path, transform, 72.282, 63.173); + CGPathAddLineToPoint(path, transform, 72.282, 48.112); + CGPathAddCurveToPoint(path, transform, 72.282, 30.633, 82.957, 21.116, 98.549, 21.116); + CGPathAddCurveToPoint(path, transform, 106.018, 21.116, 112.438, 21.671, 114.309, 21.92); + CGPathAddLineToPoint(path, transform, 114.309, 40.187); + CGPathAddLineToPoint(path, transform, 103.495, 40.191); + CGPathAddCurveToPoint(path, transform, 95.014, 40.191, 93.372, 44.221, 93.372, 50.133); + CGPathAddLineToPoint(path, transform, 93.372, 63.173); + CGPathAddLineToPoint(path, transform, 113.596, 63.173); + CGPathAddLineToPoint(path, transform, 110.963, 83.596); + CGPathAddLineToPoint(path, transform, 93.372, 83.596); + CGPathAddLineToPoint(path, transform, 93.372, 136.0); + CGPathAddLineToPoint(path, transform, 127.856, 136.0); + CGPathAddCurveToPoint(path, transform, 131.981, 136.0, 135.325, 132.656, 135.325, 128.531); + CGPathAddLineToPoint(path, transform, 135.325, 8.145); + CGPathAddCurveToPoint(path, transform, 135.325, 4.02, 131.981, 0.676, 127.856, 0.676); + CGPathCloseSubpath(path); + CGPathRef result = CGPathCreateCopy(path); + CGPathRelease(path); + return CFAutorelease(result); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h new file mode 100644 index 0000000000..1a44797403 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h @@ -0,0 +1,25 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKIcon.h" + +@interface FBSDKMaleSilhouetteIcon : FBSDKIcon + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m new file mode 100644 index 0000000000..6e0e1ede84 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m @@ -0,0 +1,51 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKMaleSilhouetteIcon.h" + +@implementation FBSDKMaleSilhouetteIcon + +- (CGPathRef)pathWithSize:(CGSize)size +{ + CGAffineTransform transformValue = CGAffineTransformMakeScale(size.width / 158.783, size.height / 158.783); + CGAffineTransform *transform = &transformValue; + CGMutablePathRef path = CGPathCreateMutable(); + CGPathMoveToPoint(path, transform, 158.783, 158.783); + CGPathAddCurveToPoint(path, transform, 156.39, 131.441, 144.912, 136.964, 105.607, 117.32); + CGPathAddCurveToPoint(path, transform, 103.811, 113.941, 103.348, 108.8965, 103.013, 107.4781); + CGPathAddLineToPoint(path, transform, 100.434, 106.7803); + CGPathAddCurveToPoint(path, transform, 97.2363, 82.7701, 100.67, 101.5845, 106.006, 75.2188); + CGPathAddCurveToPoint(path, transform, 107.949, 76.2959, 108.268, 70.7417, 108.971, 66.5743); + CGPathAddCurveToPoint(path, transform, 109.673, 62.4068, 110.864, 58.9082, 107.139, 58.9082); + CGPathAddCurveToPoint(path, transform, 107.94, 42.7652, 110.299, 31.3848, 101.335, 23.3072); + CGPathAddCurveToPoint(path, transform, 92.3808, 15.23781, 87.874, 15.52349, 95.0483, 9.6036128); + CGPathAddCurveToPoint(path, transform, 91.2319, 8.892613, 70.2036, 12.01861, 57.4487, 23.3072); + CGPathAddCurveToPoint(path, transform, 48.4121, 31.3042, 50.8437, 42.7652, 51.6445, 58.9082); + CGPathAddCurveToPoint(path, transform, 47.9194, 58.9082, 49.1108, 62.4068, 49.813, 66.5743); + CGPathAddCurveToPoint(path, transform, 50.5156, 70.7417, 50.8349, 76.2959, 52.7778, 75.2188); + CGPathAddCurveToPoint(path, transform, 58.1138, 110.1135, 61.5478, 82.7701, 58.3501, 106.7803); + CGPathAddLineToPoint(path, transform, 55.7705, 107.4781); + CGPathAddCurveToPoint(path, transform, 55.4355, 108.8965, 54.9722, 113.941, 53.1767, 117.32); + CGPathAddCurveToPoint(path, transform, 13.8711, 136.964, 2.3945, 131.441, 0.0, 158.783); + CGPathAddLineToPoint(path, transform, 158.783, 158.783); + CGPathRef result = CGPathCreateCopy(path); + CGPathRelease(path); + return CFAutorelease(result); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h new file mode 100644 index 0000000000..29e2912df0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h @@ -0,0 +1,79 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "../FBSDKMath.h" + +/** + Insets a CGSize with the insets in a UIEdgeInsets. + */ +static inline CGSize FBSDKEdgeInsetsInsetSize(CGSize size, UIEdgeInsets insets) +{ + CGRect rect = CGRectZero; + rect.size = size; + return UIEdgeInsetsInsetRect(rect, insets).size; +} + +/** + Outsets a CGSize with the insets in a UIEdgeInsets. + */ +static inline CGSize FBSDKEdgeInsetsOutsetSize(CGSize size, UIEdgeInsets insets) +{ + return CGSizeMake(insets.left + size.width + insets.right, + insets.top + size.height + insets.bottom); +} + +/** + Limits a CGFloat value, using the scale to limit to pixels (instead of points). + + + The limitFunction is frequention floorf, ceilf or roundf. If the scale is 2.0, + you may get back values of *.5 to correspond to pixels. + */ +typedef float (*FBSDKLimitFunctionType)(float); +static inline CGFloat FBSDKPointsForScreenPixels(FBSDKLimitFunctionType limitFunction, + CGFloat screenScale, + CGFloat pointValue) +{ + return limitFunction(pointValue * screenScale) / screenScale; +} + +static inline CGSize FBSDKTextSize(NSString *text, + UIFont *font, + CGSize constrainedSize, + NSLineBreakMode lineBreakMode) +{ + if (!text) { + return CGSizeZero; + } + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.lineBreakMode = lineBreakMode; + NSDictionary *attributes = @{ + NSFontAttributeName: font, + NSParagraphStyleAttributeName: paragraphStyle, + }; + NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text attributes:attributes]; + CGSize size = [FBSDKMath ceilForSize:[attributedString boundingRectWithSize:constrainedSize + options:(NSStringDrawingUsesDeviceMetrics | + NSStringDrawingUsesLineFragmentOrigin | + NSStringDrawingUsesFontLeading) + context:NULL].size]; + return [FBSDKMath ceilForSize:size]; +} diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h new file mode 100644 index 0000000000..f280228c42 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h @@ -0,0 +1,29 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKViewImpressionTracker : NSObject + ++ (instancetype)impressionTrackerWithEventName:(NSString *)eventName; + +@property (nonatomic, copy, readonly) NSString *eventName; + +- (void)logImpressionWithIdentifier:(NSString *)identifier parameters:(NSDictionary *)parameters; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m new file mode 100644 index 0000000000..4f95ad7be5 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m @@ -0,0 +1,97 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKViewImpressionTracker.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKAppEvents+Internal.h" + +@implementation FBSDKViewImpressionTracker +{ + NSMutableSet *_trackedImpressions; +} + +#pragma mark - Class Methods + ++ (instancetype)impressionTrackerWithEventName:(NSString *)eventName +{ + static NSMutableDictionary *_impressionTrackers = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _impressionTrackers = [[NSMutableDictionary alloc] init]; + }); + // Maintains a single instance of an impression tracker for each event name + FBSDKViewImpressionTracker *impressionTracker = _impressionTrackers[eventName]; + if (!impressionTracker) { + impressionTracker = [[self alloc] initWithEventName:eventName]; + _impressionTrackers[eventName] = impressionTracker; + } + return impressionTracker; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithEventName:(NSString *)eventName +{ + if ((self = [super init])) { + _eventName = [eventName copy]; + _trackedImpressions = [[NSMutableSet alloc] init]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_applicationDidEnterBackgroundNotification:) + name:UIApplicationDidEnterBackgroundNotification + object:[UIApplication sharedApplication]]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Public API + +- (void)logImpressionWithIdentifier:(NSString *)identifier parameters:(NSDictionary *)parameters +{ + NSMutableDictionary *keys = [NSMutableDictionary dictionary]; + keys[@"__view_impression_identifier__"] = identifier; + [keys addEntriesFromDictionary:parameters]; + NSDictionary *impressionKey = [keys copy]; + // Ensure that each impression is only tracked once + if ([_trackedImpressions containsObject:impressionKey]) { + return; + } + [_trackedImpressions addObject:impressionKey]; + + [FBSDKAppEvents logImplicitEvent:self.eventName + valueToSum:nil + parameters:parameters + accessToken:[FBSDKAccessToken currentAccessToken]]; +} + +#pragma mark - Helper Methods + +- (void)_applicationDidEnterBackgroundNotification:(NSNotification *)notification +{ + // reset all tracked impressions when the app backgrounds so we will start tracking them again the next time they + // are triggered. + [_trackedImpressions removeAllObjects]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h new file mode 100644 index 0000000000..84dcd6272f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h @@ -0,0 +1,44 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@protocol FBSDKWebDialogDelegate; + +@interface FBSDKWebDialog : NSObject + ++ (instancetype)showWithName:(NSString *)name + parameters:(NSDictionary *)parameters + delegate:(id)delegate; + +@property (nonatomic, assign) BOOL deferVisibility; +@property (nonatomic, weak) id delegate; +@property (nonatomic, copy) NSString *name; +@property (nonatomic, copy) NSDictionary *parameters; + +- (BOOL)show; + +@end + +@protocol FBSDKWebDialogDelegate + +- (void)webDialog:(FBSDKWebDialog *)webDialog didCompleteWithResults:(NSDictionary *)results; +- (void)webDialog:(FBSDKWebDialog *)webDialog didFailWithError:(NSError *)error; +- (void)webDialogDidCancel:(FBSDKWebDialog *)webDialog; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m new file mode 100644 index 0000000000..aa177b35c3 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m @@ -0,0 +1,342 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKWebDialog.h" + +#import "FBSDKAccessToken.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" +#import "FBSDKTypeUtility.h" +#import "FBSDKWebDialogView.h" + +#define FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION 0.2 +#define FBSDK_WEB_DIALOG_DISMISS_ANIMATION_DURATION 0.3 + +static FBSDKWebDialog *g_currentDialog = nil; + +@interface FBSDKWebDialog () +@end + +@implementation FBSDKWebDialog +{ + UIView *_backgroundView; + FBSDKWebDialogView *_dialogView; +} + +#pragma mark - Class Methods + ++ (instancetype)showWithName:(NSString *)name + parameters:(NSDictionary *)parameters + delegate:(id)delegate +{ + FBSDKWebDialog *dialog = [[self alloc] init]; + dialog.name = name; + dialog.parameters = parameters; + dialog.delegate = delegate; + [dialog show]; + return dialog; +} + +#pragma mark - Object Lifecycle + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + _dialogView.delegate = nil; + [_dialogView removeFromSuperview]; + [_backgroundView removeFromSuperview]; +} + +#pragma mark - Public Methods + +- (BOOL)show +{ + if (g_currentDialog == self) { + return NO; + } + [g_currentDialog _dismissAnimated:YES]; + + NSError *error; + NSURL *URL = [self _generateURL:&error]; + if (!URL) { + [self _failWithError:error]; + return NO; + } + + g_currentDialog = self; + + UIWindow *window = [FBSDKInternalUtility findWindow]; + if (!window) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"There are no valid ViewController to present FBSDKWebDialog", nil]; + [self _failWithError:nil]; + return NO; + } + + CGRect frame = [self _applicationFrameForOrientation]; + _dialogView = [[FBSDKWebDialogView alloc] initWithFrame:frame]; + + _dialogView.delegate = self; + [_dialogView loadURL:URL]; + + if (!_deferVisibility) { + [self _showWebView]; + } + + return YES; +} + +#pragma mark - FBSDKWebDialogViewDelegate + +- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didCompleteWithResults:(NSDictionary *)results +{ + [self _completeWithResults:results]; +} + +- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didFailWithError:(NSError *)error +{ + [self _failWithError:error]; +} + +- (void)webDialogViewDidCancel:(FBSDKWebDialogView *)webDialogView +{ + [self _cancel]; +} + +- (void)webDialogViewDidFinishLoad:(FBSDKWebDialogView *)webDialogView +{ + if (_deferVisibility) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + if (self->_dialogView) { + [self _showWebView]; + } + }); + } +} + +#pragma mark - Notifications + +- (void)_addObservers +{ + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(_deviceOrientationDidChangeNotification:) + name:UIDeviceOrientationDidChangeNotification + object:nil]; +} + +- (void)_deviceOrientationDidChangeNotification:(NSNotification *)notification +{ + BOOL animated = [FBSDKTypeUtility boolValue:notification.userInfo[@"UIDeviceOrientationRotateAnimatedUserInfoKey"]]; + Class CATransactionClass = fbsdkdfl_CATransactionClass(); + CFTimeInterval animationDuration = (animated ? [CATransactionClass animationDuration] : 0.0); + [self _updateViewsWithScale:1.0 alpha:1.0 animationDuration:animationDuration completion:^(BOOL finished) { + if (finished) { + [self->_dialogView setNeedsDisplay]; + } + }]; +} + +- (void)_removeObservers +{ + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; +} + +#pragma mark - Helper Methods + +- (void)_cancel +{ + FBSDKWebDialog *dialog = self; + [self _dismissAnimated:YES]; // may cause the receiver to be released + [_delegate webDialogDidCancel:dialog]; +} + +- (void)_completeWithResults:(NSDictionary *)results +{ + FBSDKWebDialog *dialog = self; + [self _dismissAnimated:YES]; // may cause the receiver to be released + [_delegate webDialog:dialog didCompleteWithResults:results]; +} + +- (void)_dismissAnimated:(BOOL)animated +{ + [self _removeObservers]; + UIView *backgroundView = _backgroundView; + _backgroundView = nil; + FBSDKWebDialogView *dialogView = _dialogView; + _dialogView.delegate = nil; + _dialogView = nil; + void(^didDismiss)(BOOL) = ^(BOOL finished){ + [backgroundView removeFromSuperview]; + [dialogView removeFromSuperview]; + }; + if (animated) { + [UIView animateWithDuration:FBSDK_WEB_DIALOG_DISMISS_ANIMATION_DURATION animations:^{ + dialogView.alpha = 0.0; + backgroundView.alpha = 0.0; + } completion:didDismiss]; + } else { + didDismiss(YES); + } + if (g_currentDialog == self) { + g_currentDialog = nil; + } +} + +- (void)_failWithError:(NSError *)error +{ + // defer so that the consumer is guaranteed to have an opportunity to set the delegate before we fail + dispatch_async(dispatch_get_main_queue(), ^{ + [self _dismissAnimated:YES]; + [self->_delegate webDialog:self didFailWithError:error]; + }); +} + +- (NSURL *)_generateURL:(NSError **)errorRef +{ + NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; + parameters[@"display"] = @"touch"; + parameters[@"sdk"] = [NSString stringWithFormat:@"ios-%@", [FBSDKSettings sdkVersion]]; + parameters[@"redirect_uri"] = @"fbconnect://success"; + [FBSDKInternalUtility dictionary:parameters setObject:[FBSDKSettings appID] forKey:@"app_id"]; + [FBSDKInternalUtility dictionary:parameters + setObject:[FBSDKAccessToken currentAccessToken].tokenString + forKey:@"access_token"]; + [parameters addEntriesFromDictionary:self.parameters]; + return [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" + path:[@"/dialog/" stringByAppendingString:self.name] + queryParameters:parameters + error:errorRef]; +} + +- (BOOL)_showWebView +{ + UIWindow *window = [FBSDKInternalUtility findWindow]; + if (!window) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"There are no valid ViewController to present FBSDKWebDialog", nil]; + [self _failWithError:nil]; + return NO; + } + + [self _addObservers]; + + _backgroundView = [[UIView alloc] initWithFrame:window.bounds]; + _backgroundView.alpha = 0.0; + _backgroundView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); + _backgroundView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:0.8]; + [window addSubview:_backgroundView]; + [window addSubview:_dialogView]; + + [_dialogView becomeFirstResponder]; // dismisses the keyboard if it there was another first responder with it + [self _updateViewsWithScale:0.001 alpha:0.0 animationDuration:0.0 completion:NULL]; + [self _updateViewsWithScale:1.1 alpha:1.0 animationDuration:FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION completion:^(BOOL finished1) { + [self _updateViewsWithScale:0.9 alpha:1.0 animationDuration:FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION completion:^(BOOL finished2) { + [self _updateViewsWithScale:1.0 alpha:1.0 animationDuration:FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION completion:NULL]; + }]; + }]; + return YES; +} + +- (CGAffineTransform)_transformForOrientation +{ + // iOS 8 simply adjusts the application frame to adapt to the current orientation and deprecated the concept of + // interface orientations + if ([FBSDKInternalUtility shouldManuallyAdjustOrientation]) { + switch ([UIApplication sharedApplication].statusBarOrientation) { + case UIInterfaceOrientationLandscapeLeft: + return CGAffineTransformMakeRotation(M_PI * 1.5); + case UIInterfaceOrientationLandscapeRight: + return CGAffineTransformMakeRotation(M_PI/2); + case UIInterfaceOrientationPortraitUpsideDown: + return CGAffineTransformMakeRotation(-M_PI); + case UIInterfaceOrientationPortrait: + case UIInterfaceOrientationUnknown: + // don't adjust the orientation + break; + } + } + return CGAffineTransformIdentity; +} + +- (CGRect)_applicationFrameForOrientation +{ + CGRect applicationFrame = _dialogView.window.screen.bounds; + + UIEdgeInsets insets = UIEdgeInsetsZero; +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0 + if (@available(iOS 11.0, *)) { + insets = _dialogView.window.safeAreaInsets; + } +#endif + + if (insets.top == 0.0) { + insets.top = [[UIApplication sharedApplication] statusBarFrame].size.height; + } + applicationFrame.origin.x += insets.left; + applicationFrame.origin.y += insets.top; + applicationFrame.size.width -= insets.left + insets.right; + applicationFrame.size.height -= insets.top + insets.bottom; + + if ([FBSDKInternalUtility shouldManuallyAdjustOrientation]) { + switch ([UIApplication sharedApplication].statusBarOrientation) { + case UIInterfaceOrientationLandscapeLeft: + case UIInterfaceOrientationLandscapeRight: + return CGRectMake(0, 0, CGRectGetHeight(applicationFrame), CGRectGetWidth(applicationFrame)); + case UIInterfaceOrientationPortraitUpsideDown: + case UIInterfaceOrientationPortrait: + case UIInterfaceOrientationUnknown: + return applicationFrame; + } + } else { + return applicationFrame; + } +} + +- (void)_updateViewsWithScale:(CGFloat)scale + alpha:(CGFloat)alpha + animationDuration:(CFTimeInterval)animationDuration + completion:(void(^)(BOOL finished))completion +{ + CGAffineTransform transform; + CGRect applicationFrame = [self _applicationFrameForOrientation]; + if (scale == 1.0) { + transform = _dialogView.transform; + _dialogView.transform = CGAffineTransformIdentity; + _dialogView.frame = applicationFrame; + _dialogView.transform = transform; + } + transform = CGAffineTransformScale([self _transformForOrientation], scale, scale); + void(^updateBlock)(void) = ^{ + self->_dialogView.transform = transform; + self->_dialogView.center = CGPointMake(CGRectGetMidX(applicationFrame), + CGRectGetMidY(applicationFrame)); + self->_dialogView.alpha = alpha; + self->_backgroundView.alpha = alpha; + }; + if (animationDuration == 0.0) { + updateBlock(); + } else { + [UIView animateWithDuration:animationDuration animations:updateBlock completion:completion]; + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h new file mode 100644 index 0000000000..08f17f6732 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h @@ -0,0 +1,39 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@protocol FBSDKWebDialogViewDelegate; + +@interface FBSDKWebDialogView : UIView + +@property (nonatomic, weak) id delegate; + +- (void)loadURL:(NSURL *)URL; +- (void)stopLoading; + +@end + +@protocol FBSDKWebDialogViewDelegate + +- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didCompleteWithResults:(NSDictionary *)results; +- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didFailWithError:(NSError *)error; +- (void)webDialogViewDidCancel:(FBSDKWebDialogView *)webDialogView; +- (void)webDialogViewDidFinishLoad:(FBSDKWebDialogView *)webDialogView; + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m new file mode 100644 index 0000000000..2836daf65c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m @@ -0,0 +1,193 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKWebDialogView.h" + +#import "FBSDKCloseIcon.h" +#import "FBSDKError.h" +#import "FBSDKTypeUtility.h" +#import "FBSDKUtility.h" + +#define FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH 10.0 + +@interface FBSDKWebDialogView () +@end + +@implementation FBSDKWebDialogView +{ + UIButton *_closeButton; + UIActivityIndicatorView *_loadingView; + UIWebView *_webView; +} + +#pragma mark - Object Lifecycle + +- (instancetype)initWithFrame:(CGRect)frame +{ + if ((self = [super initWithFrame:frame])) { + self.backgroundColor = [UIColor clearColor]; + self.opaque = NO; + + _webView = [[UIWebView alloc] initWithFrame:CGRectZero]; + _webView.delegate = self; + [self addSubview:_webView]; + + _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; + UIImage *closeImage = [[[FBSDKCloseIcon alloc] init] imageWithSize:CGSizeMake(29.0, 29.0)]; + [_closeButton setImage:closeImage forState:UIControlStateNormal]; + [_closeButton setTitleColor:[UIColor colorWithRed:167.0/255.0 + green:184.0/255.0 + blue:216.0/255.0 + alpha:1.0] forState:UIControlStateNormal]; + [_closeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; + _closeButton.showsTouchWhenHighlighted = YES; + [_closeButton sizeToFit]; + [self addSubview:_closeButton]; + [_closeButton addTarget:self action:@selector(_close:) forControlEvents:UIControlEventTouchUpInside]; + + _loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; + _loadingView.color = [UIColor grayColor]; + [_webView addSubview:_loadingView]; + } + return self; +} + +- (void)dealloc +{ + _webView.delegate = nil; +} + +#pragma mark - Public Methods + +- (void)loadURL:(NSURL *)URL +{ + [_loadingView startAnimating]; + [_webView loadRequest:[NSURLRequest requestWithURL:URL]]; +} + +- (void)stopLoading +{ + [_webView stopLoading]; +} + +#pragma mark - Layout + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSaveGState(context); + [self.backgroundColor setFill]; + CGContextFillRect(context, self.bounds); + [[UIColor blackColor] setStroke]; + CGContextSetLineWidth(context, 1.0 / self.layer.contentsScale); + CGContextStrokeRect(context, _webView.frame); + CGContextRestoreGState(context); + [super drawRect:rect]; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + CGRect bounds = self.bounds; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + CGFloat horizontalInset = CGRectGetWidth(bounds) * 0.2; + CGFloat verticalInset = CGRectGetHeight(bounds) * 0.2; + UIEdgeInsets iPadInsets = UIEdgeInsetsMake(verticalInset, horizontalInset, verticalInset, horizontalInset); + bounds = UIEdgeInsetsInsetRect(bounds, iPadInsets); + } + UIEdgeInsets webViewInsets = UIEdgeInsetsMake(FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH, + FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH, + FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH, + FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH); + _webView.frame = CGRectIntegral(UIEdgeInsetsInsetRect(bounds, webViewInsets)); + + CGRect webViewBounds = _webView.bounds; + _loadingView.center = CGPointMake(CGRectGetMidX(webViewBounds), CGRectGetMidY(webViewBounds)); + + if (CGRectGetHeight(webViewBounds) == 0.0) { + _closeButton.alpha = 0.0; + } else { + _closeButton.alpha = 1.0; + CGRect closeButtonFrame = _closeButton.bounds; + closeButtonFrame.origin = bounds.origin; + _closeButton.frame = CGRectIntegral(closeButtonFrame); + } +} + +#pragma mark - Actions + +- (void)_close:(id)sender +{ + [_delegate webDialogViewDidCancel:self]; +} + +#pragma mark - UIWebViewDelegate + +- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error +{ + [_loadingView stopAnimating]; + + // 102 == WebKitErrorFrameLoadInterruptedByPolicyChange + // NSURLErrorCancelled == "Operation could not be completed", note NSURLErrorCancelled occurs when the user clicks + // away before the page has completely loaded, if we find cases where we want this to result in dialog failure + // (usually this just means quick-user), then we should add something more robust here to account for differences in + // application needs + if (!(([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) || + ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102))) { + [_delegate webDialogView:self didFailWithError:error]; + } +} + +- (BOOL)webView:(UIWebView *)webView +shouldStartLoadWithRequest:(NSURLRequest *)request + navigationType:(UIWebViewNavigationType)navigationType +{ + NSURL *URL = request.URL; + + if ([URL.scheme isEqualToString:@"fbconnect"]) { + NSMutableDictionary *parameters = [[FBSDKUtility dictionaryWithQueryString:URL.query] mutableCopy]; + [parameters addEntriesFromDictionary:[FBSDKUtility dictionaryWithQueryString:URL.fragment]]; + if ([URL.resourceSpecifier hasPrefix:@"//cancel"]) { + NSInteger errorCode = [FBSDKTypeUtility integerValue:parameters[@"error_code"]]; + if (errorCode) { + NSString *errorMessage = [FBSDKTypeUtility stringValue:parameters[@"error_msg"]]; + NSError *error = [NSError fbErrorWithCode:errorCode message:errorMessage]; + [_delegate webDialogView:self didFailWithError:error]; + } else { + [_delegate webDialogViewDidCancel:self]; + } + } else { + [_delegate webDialogView:self didCompleteWithResults:parameters]; + } + return NO; + } else if (navigationType == UIWebViewNavigationTypeLinkClicked) { + [[UIApplication sharedApplication] openURL:request.URL]; + return NO; + } else { + return YES; + } +} + +- (void)webViewDidFinishLoad:(UIWebView *)webView +{ + [_loadingView stopAnimating]; + [_delegate webDialogViewDidFinishLoad:self]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m new file mode 100644 index 0000000000..234979dcc6 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m @@ -0,0 +1,589 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDynamicFrameworkLoader.h" + +#import + +#import +#import +#import + +#import "FBSDKLogger.h" +#import "FBSDKSettings.h" + +static NSString *const g_frameworkPathTemplate = @"/System/Library/Frameworks/%@.framework/%@"; + +#pragma mark - Library and Symbol Loading + +struct FBSDKDFLLoadSymbolContext +{ + void *(*library)(void); // function to retrieve the library handle (it's a function instead of void * so it can be staticlly bound) + const char *name; // name of the symbol to retrieve + void **address; // [out] address of the symbol in the process address space +}; + +// Retrieves the handle for a library for framework. The paths for each are constructed +// differently so the loading function passed to dispatch_once() calls this. +static void *fbsdkdfl_load_library_once(const char *path) +{ + void *handle = dlopen(path, RTLD_LAZY); + if (handle) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational formatString:@"Dynamically loaded library at %s", path]; + } else { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational formatString:@"Failed to load library at %s", path]; + } + return handle; +} + +// Constructs the path for a system framework with the given name and returns the handle for dlsym +static void *fbsdkdfl_load_framework_once(NSString *framework) +{ + NSString *path = [NSString stringWithFormat:g_frameworkPathTemplate, framework, framework]; + return fbsdkdfl_load_library_once(path.fileSystemRepresentation); +} + +// Implements the callback for dispatch_once() that loads the handle for specified framework name +#define _fbsdkdfl_load_framework_once_impl_(FRAMEWORK) \ + static void fbsdkdfl_load_##FRAMEWORK##_once(void *context) { \ + *(void **)context = fbsdkdfl_load_framework_once(@#FRAMEWORK); \ + } + +// Implements the framework/library retrieval function for the given name. +// It calls the loading function once and caches the handle in a local static variable +#define _fbsdkdfl_handle_get_impl_(LIBRARY) \ + static void *fbsdkdfl_handle_get_##LIBRARY(void) { \ + static void *LIBRARY##_handle; \ + static dispatch_once_t LIBRARY##_once; \ + dispatch_once_f(&LIBRARY##_once, &LIBRARY##_handle, &fbsdkdfl_load_##LIBRARY##_once); \ + return LIBRARY##_handle;\ + } + +// Callback from dispatch_once() to load a specific symbol +static void fbsdkdfl_load_symbol_once(void *context) +{ + struct FBSDKDFLLoadSymbolContext *ctx = context; + *ctx->address = dlsym(ctx->library(), ctx->name); +} + +// The boilerplate code for loading a symbol from a given library once and caching it in a static local +#define _fbsdkdfl_symbol_get(LIBRARY, PREFIX, SYMBOL, TYPE, VARIABLE_NAME) \ + static TYPE VARIABLE_NAME; \ + static dispatch_once_t SYMBOL##_once; \ + static struct FBSDKDFLLoadSymbolContext ctx = { .library = &fbsdkdfl_handle_get_##LIBRARY, .name = PREFIX #SYMBOL, .address = (void **)&VARIABLE_NAME }; \ + dispatch_once_f(&SYMBOL##_once, &ctx, &fbsdkdfl_load_symbol_once) + +#define _fbsdkdfl_symbol_get_c(LIBRARY, SYMBOL) _fbsdkdfl_symbol_get(LIBRARY, "OBJC_CLASS_$_", SYMBOL, Class, c) // convenience symbol retrieval macro for getting an Objective-C class symbol and storing it in the local static c +#define _fbsdkdfl_symbol_get_f(LIBRARY, SYMBOL) _fbsdkdfl_symbol_get(LIBRARY, "", SYMBOL, SYMBOL##_type, f) // convenience symbol retrieval macro for getting a function pointer and storing it in the local static f +#define _fbsdkdfl_symbol_get_k(LIBRARY, SYMBOL, TYPE) _fbsdkdfl_symbol_get(LIBRARY, "", SYMBOL, TYPE, k) // convenience symbol retrieval macro for getting a pointer to a named variable and storing it in the local static k + +// convenience macro for verifying a pointer to a named variable was successfully loaded and returns the value +#define _fbsdkdfl_return_k(FRAMEWORK, SYMBOL) \ + NSCAssert(k != NULL, @"Failed to load constant %@ in the %@ framework", @#SYMBOL, @#FRAMEWORK); \ + return *k + +// convenience macro for getting a pointer to a named NSString, verifying it loaded correctly, and returning it +#define _fbsdkdfl_get_and_return_NSString(LIBRARY, SYMBOL) \ + _fbsdkdfl_symbol_get_k(LIBRARY, SYMBOL, NSString **); \ + NSCAssert([*k isKindOfClass:[NSString class]], @"Loaded symbol %@ is not of type NSString *", @#SYMBOL); \ + _fbsdkdfl_return_k(LIBRARY, SYMBOL) + +#pragma mark - Security Framework + +_fbsdkdfl_load_framework_once_impl_(Security) +_fbsdkdfl_handle_get_impl_(Security) + +#pragma mark - Security Constants + +@implementation FBSDKDynamicFrameworkLoader + +#define _fbsdkdfl_Security_get_k(SYMBOL) _fbsdkdfl_symbol_get_k(Security, SYMBOL, CFTypeRef *) + +#define _fbsdkdfl_Security_get_and_return_k(SYMBOL) \ + _fbsdkdfl_Security_get_k(SYMBOL); \ + _fbsdkdfl_return_k(Security, SYMBOL) + ++ (SecRandomRef)loadkSecRandomDefault +{ + _fbsdkdfl_symbol_get_k(Security, kSecRandomDefault, SecRandomRef *); + _fbsdkdfl_return_k(Security, kSecRandomDefault); +} + ++ (CFTypeRef)loadkSecAttrAccessible +{ + _fbsdkdfl_Security_get_and_return_k(kSecAttrAccessible); +} + ++ (CFTypeRef)loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly +{ + _fbsdkdfl_Security_get_and_return_k(kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly); +} + ++ (CFTypeRef)loadkSecAttrAccount +{ + _fbsdkdfl_Security_get_and_return_k(kSecAttrAccount); +} + ++ (CFTypeRef)loadkSecAttrService +{ + _fbsdkdfl_Security_get_and_return_k(kSecAttrService); +} + ++ (CFTypeRef)loadkSecAttrGeneric +{ + _fbsdkdfl_Security_get_and_return_k(kSecAttrGeneric); +} + ++ (CFTypeRef)loadkSecValueData +{ + _fbsdkdfl_Security_get_and_return_k(kSecValueData); +} + ++ (CFTypeRef)loadkSecClassGenericPassword +{ + _fbsdkdfl_Security_get_and_return_k(kSecClassGenericPassword); +} + ++ (CFTypeRef)loadkSecAttrAccessGroup +{ + _fbsdkdfl_Security_get_and_return_k(kSecAttrAccessGroup); +} + ++ (CFTypeRef)loadkSecMatchLimitOne +{ + _fbsdkdfl_Security_get_and_return_k(kSecMatchLimitOne); +} + ++ (CFTypeRef)loadkSecMatchLimit +{ + _fbsdkdfl_Security_get_and_return_k(kSecMatchLimit); +} + ++ (CFTypeRef)loadkSecReturnData +{ + _fbsdkdfl_Security_get_and_return_k(kSecReturnData); +} + ++ (CFTypeRef)loadkSecClass +{ + _fbsdkdfl_Security_get_and_return_k(kSecClass); +} + +@end + +#pragma mark - Security APIs + +#define _fbsdkdfl_Security_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(Security, SYMBOL) + +typedef int (*SecRandomCopyBytes_type)(SecRandomRef, size_t, uint8_t *); +typedef OSStatus (*SecItemUpdate_type)(CFDictionaryRef, CFDictionaryRef); +typedef OSStatus (*SecItemAdd_type)(CFDictionaryRef, CFTypeRef); +typedef OSStatus (*SecItemCopyMatching_type)(CFDictionaryRef, CFTypeRef); +typedef OSStatus (*SecItemDelete_type)(CFDictionaryRef); + +int fbsdkdfl_SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes) +{ + _fbsdkdfl_Security_get_f(SecRandomCopyBytes); + return f(rnd, count, bytes); +} + +OSStatus fbsdkdfl_SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate) +{ + _fbsdkdfl_Security_get_f(SecItemUpdate); + return f(query, attributesToUpdate); +} + +OSStatus fbsdkdfl_SecItemAdd(CFDictionaryRef attributes, CFTypeRef *result) +{ + _fbsdkdfl_Security_get_f(SecItemAdd); + return f(attributes, result); +} + +OSStatus fbsdkdfl_SecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result) +{ + _fbsdkdfl_Security_get_f(SecItemCopyMatching); + return f(query, result); +} + +OSStatus fbsdkdfl_SecItemDelete(CFDictionaryRef query) +{ + _fbsdkdfl_Security_get_f(SecItemDelete); + return f(query); +} + +#pragma mark - Social Constants + +_fbsdkdfl_load_framework_once_impl_(Social) +_fbsdkdfl_handle_get_impl_(Social) + +#define _fbsdkdfl_Social_get_and_return_constant(SYMBOL) _fbsdkdfl_get_and_return_NSString(Social, SYMBOL) + +NSString *fbsdkdfl_SLServiceTypeFacebook(void) +{ + _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeFacebook); +} + +NSString *fbsdkdfl_SLServiceTypeTwitter(void) +{ + _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeTwitter); +} + +#pragma mark - Social Classes + +#define _fbsdkdfl_Social_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(Social, SYMBOL) + +Class fbsdkdfl_SLComposeViewControllerClass(void) +{ + _fbsdkdfl_Social_get_c(SLComposeViewController); + return c; +} + +#pragma mark - MessageUI Classes + +_fbsdkdfl_load_framework_once_impl_(MessageUI) +_fbsdkdfl_handle_get_impl_(MessageUI) + +#define _fbsdkdfl_MessageUI_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(MessageUI, SYMBOL) + +Class fbsdkdfl_MFMailComposeViewControllerClass(void) +{ + _fbsdkdfl_MessageUI_get_c(MFMailComposeViewController); + return c; +} + +Class fbsdkdfl_MFMessageComposeViewControllerClass(void) +{ + _fbsdkdfl_MessageUI_get_c(MFMessageComposeViewController); + return c; +} + +#pragma mark - QuartzCore Classes + +_fbsdkdfl_load_framework_once_impl_(QuartzCore) +_fbsdkdfl_handle_get_impl_(QuartzCore) + +#define _fbsdkdfl_QuartzCore_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(QuartzCore, SYMBOL); + +Class fbsdkdfl_CATransactionClass(void) +{ + _fbsdkdfl_QuartzCore_get_c(CATransaction); + return c; +} + +#pragma mark - QuartzCore APIs + +#define _fbsdkdfl_QuartzCore_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(QuartzCore, SYMBOL) + +typedef CATransform3D (*CATransform3DMakeScale_type)(CGFloat, CGFloat, CGFloat); +typedef CATransform3D (*CATransform3DMakeTranslation_type)(CGFloat, CGFloat, CGFloat); +typedef CATransform3D (*CATransform3DConcat_type)(CATransform3D, CATransform3D); + +const CATransform3D fbsdkdfl_CATransform3DIdentity = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; + +CATransform3D fbsdkdfl_CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz) +{ + _fbsdkdfl_QuartzCore_get_f(CATransform3DMakeScale); + return f(sx, sy, sz); +} + +CATransform3D fbsdkdfl_CATransform3DMakeTranslation(CGFloat tx, CGFloat ty, CGFloat tz) +{ + _fbsdkdfl_QuartzCore_get_f(CATransform3DMakeTranslation); + return f(tx, ty, tz); +} + +CATransform3D fbsdkdfl_CATransform3DConcat(CATransform3D a, CATransform3D b) +{ + _fbsdkdfl_QuartzCore_get_f(CATransform3DConcat); + return f(a, b); +} + +#pragma mark - AudioToolbox APIs + +_fbsdkdfl_load_framework_once_impl_(AudioToolbox) +_fbsdkdfl_handle_get_impl_(AudioToolbox) + +#define _fbsdkdfl_AudioToolbox_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(AudioToolbox, SYMBOL) + +typedef OSStatus (*AudioServicesCreateSystemSoundID_type)(CFURLRef, SystemSoundID *); +typedef OSStatus (*AudioServicesDisposeSystemSoundID_type)(SystemSoundID); +typedef void (*AudioServicesPlaySystemSound_type)(SystemSoundID); + +OSStatus fbsdkdfl_AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID) +{ + _fbsdkdfl_AudioToolbox_get_f(AudioServicesCreateSystemSoundID); + return f(inFileURL, outSystemSoundID); +} + +OSStatus fbsdkdfl_AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID) +{ + _fbsdkdfl_AudioToolbox_get_f(AudioServicesDisposeSystemSoundID); + return f(inSystemSoundID); +} + +void fbsdkdfl_AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID) +{ + _fbsdkdfl_AudioToolbox_get_f(AudioServicesPlaySystemSound); + return f(inSystemSoundID); +} + +#pragma mark - Ad Support Classes + +_fbsdkdfl_load_framework_once_impl_(AdSupport) +_fbsdkdfl_handle_get_impl_(AdSupport) + +#define _fbsdkdfl_AdSupport_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(AdSupport, SYMBOL); + +Class fbsdkdfl_ASIdentifierManagerClass(void) +{ + _fbsdkdfl_AdSupport_get_c(ASIdentifierManager); + return c; +} + +#pragma mark - Safari Services +_fbsdkdfl_load_framework_once_impl_(SafariServices) +_fbsdkdfl_handle_get_impl_(SafariServices) + +#define _fbsdkdfl_SafariServices_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(SafariServices, SYMBOL); + +Class fbsdkdfl_SFSafariViewControllerClass(void) +{ + _fbsdkdfl_SafariServices_get_c(SFSafariViewController); + return c; +} + +Class fbsdkdfl_SFAuthenticationSessionClass(void) +{ + _fbsdkdfl_SafariServices_get_c(SFAuthenticationSession); + return c; +} + +#pragma mark - Authentication Services +_fbsdkdfl_load_framework_once_impl_(AuthenticationServices) +_fbsdkdfl_handle_get_impl_(AuthenticationServices) + +#define _fbsdkdfl_AuthenticationServices_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(AuthenticationServices, SYMBOL); + +Class fbsdkdfl_ASWebAuthenticationSessionClass(void) +{ + _fbsdkdfl_AuthenticationServices_get_c(ASWebAuthenticationSession); + return c; +} + +#pragma mark - Accounts Constants + +_fbsdkdfl_load_framework_once_impl_(Accounts) +_fbsdkdfl_handle_get_impl_(Accounts) + +#define _fbsdkdfl_Accounts_get_and_return_NSString(SYMBOL) _fbsdkdfl_get_and_return_NSString(Accounts, SYMBOL) + +NSString *fbsdkdfl_ACFacebookAppIdKey(void) +{ + _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAppIdKey); +} + +NSString *fbsdkdfl_ACFacebookAudienceEveryone(void) +{ + _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceEveryone); +} + +NSString *fbsdkdfl_ACFacebookAudienceFriends(void) +{ + _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceFriends); +} + +NSString *fbsdkdfl_ACFacebookAudienceKey(void) +{ + _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceKey); +} + +NSString *fbsdkdfl_ACFacebookAudienceOnlyMe(void) +{ + _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceOnlyMe); +} + +NSString *fbsdkdfl_ACFacebookPermissionsKey(void) +{ + _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookPermissionsKey); +} + +#pragma mark - Accounts Classes + +#define _fbsdkdfl_Accounts_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(Accounts, SYMBOL); + +Class fbsdkdfl_ACAccountStoreClass(void) +{ + _fbsdkdfl_Accounts_get_c(ACAccountStore); + return c; +} + +#pragma mark - StoreKit Classes + +_fbsdkdfl_load_framework_once_impl_(StoreKit) +_fbsdkdfl_handle_get_impl_(StoreKit) + +#define _fbsdkdfl_StoreKit_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(StoreKit, SYMBOL); + +Class fbsdkdfl_SKPaymentQueueClass(void) +{ + _fbsdkdfl_StoreKit_get_c(SKPaymentQueue); + return c; +} + +Class fbsdkdfl_SKProductsRequestClass(void) +{ + _fbsdkdfl_StoreKit_get_c(SKProductsRequest); + return c; +} + +#pragma mark - AssetsLibrary Classes + +_fbsdkdfl_load_framework_once_impl_(AssetsLibrary) +_fbsdkdfl_handle_get_impl_(AssetsLibrary) + +#define _fbsdkdfl_AssetsLibrary_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(AssetsLibrary, SYMBOL); + +Class fbsdkdfl_ALAssetsLibraryClass(void) +{ + _fbsdkdfl_AssetsLibrary_get_c(ALAssetsLibrary); + return c; +} + +#pragma mark - CoreTelephony Classes + +_fbsdkdfl_load_framework_once_impl_(CoreTelephony) +_fbsdkdfl_handle_get_impl_(CoreTelephony) + +#define _fbsdkdfl_CoreTelephonyLibrary_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(CoreTelephony, SYMBOL); + +Class fbsdkdfl_CTTelephonyNetworkInfoClass(void) +{ + _fbsdkdfl_CoreTelephonyLibrary_get_c(CTTelephonyNetworkInfo); + return c; +} + +#pragma mark - CoreImage + +_fbsdkdfl_load_framework_once_impl_(CoreImage) +_fbsdkdfl_handle_get_impl_(CoreImage) + +#define _fbsdkdfl_CoreImage_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(CoreImage, SYMBOL); +#define _fbsdkdfl_CoreImage_get_and_return_NSString(SYMBOL) _fbsdkdfl_get_and_return_NSString(CoreImage, SYMBOL) + + +Class fbsdkdfl_CIImageClass(void) +{ + _fbsdkdfl_CoreImage_get_c(CIImage); + return c; +} + +Class fbsdkdfl_CIFilterClass(void) +{ + _fbsdkdfl_CoreImage_get_c(CIFilter); + return c; +} + +NSString *fbsdkdfl_kCIInputImageKey(void) +{ + _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputImageKey); +} + +NSString *fbsdkdfl_kCIInputRadiusKey(void) +{ + _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputRadiusKey); +} + +NSString *fbsdkdfl_kCIOutputImageKey(void) +{ + _fbsdkdfl_CoreImage_get_and_return_NSString(kCIOutputImageKey); +} + +#pragma mark - Photos.framework + +_fbsdkdfl_load_framework_once_impl_(Photos) +_fbsdkdfl_handle_get_impl_(Photos) + +#define _fbsdkdfl_Photos_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(Photos, SYMBOL); +#define _fbsdkdfl_Photos_get_and_return_NSString(SYMBOL) _fbsdkdfl_get_and_return_NSString(Photos, SYMBOL) + +Class fbsdkdfl_PHPhotoLibrary(void) +{ + _fbsdkdfl_Photos_get_c(PHPhotoLibrary); + return c; +} + +Class fbsdkdfl_PHAssetChangeRequest(void) +{ + _fbsdkdfl_Photos_get_c(PHAssetChangeRequest); + return c; +} + +#pragma mark - MobileCoreServices + +_fbsdkdfl_load_framework_once_impl_(MobileCoreServices) +_fbsdkdfl_handle_get_impl_(MobileCoreServices) + +#define _fbsdkdfl_MobileCoreServices_get_k(SYMBOL) _fbsdkdfl_symbol_get_k(MobileCoreServices, SYMBOL, CFStringRef *) + +#define _fbsdkdfl_MobileCoreServices_get_and_return_k(SYMBOL) \ +_fbsdkdfl_MobileCoreServices_get_k(SYMBOL); \ +_fbsdkdfl_return_k(MobileCoreServices, SYMBOL) + +#define _fbsdkdfl_MobileCoreServices_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(MobileCoreServices, SYMBOL) + +typedef CFStringRef (*UTTypeCopyPreferredTagWithClass_type)(CFStringRef inUTI, CFStringRef inTagClass); + +CFStringRef fbsdkdfl_UTTypeCopyPreferredTagWithClass(CFStringRef inUTI, + CFStringRef inTagClass) +{ + _fbsdkdfl_MobileCoreServices_get_f(UTTypeCopyPreferredTagWithClass); + return f(inUTI, inTagClass); +} + +CFStringRef fbsdkdfl_kUTTagClassMIMEType(void) +{ + _fbsdkdfl_MobileCoreServices_get_and_return_k(kUTTagClassMIMEType); +} + +CFStringRef fbsdkdfl_kUTTypeJPEG(void) +{ + _fbsdkdfl_MobileCoreServices_get_and_return_k(kUTTypeJPEG); +} + +CFStringRef fbsdkdfl_kUTTypePNG(void) +{ + _fbsdkdfl_MobileCoreServices_get_and_return_k(kUTTypePNG); +} + +#pragma mark - WebKit Classes +_fbsdkdfl_load_framework_once_impl_(WebKit) +_fbsdkdfl_handle_get_impl_(WebKit) + +#define _fbsdkdfl_WebKit_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(WebKit, SYMBOL); + +Class fbsdkdfl_WKWebViewClass(void) +{ + _fbsdkdfl_WebKit_get_c(WKWebView); + return c; +} + +Class fbsdkdfl_WKUserScriptClass(void) +{ + _fbsdkdfl_WebKit_get_c(WKUserScript); + return c; +} diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/af.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/af.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..e6bf3afa11 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/af.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Besoek %@ en voer die kode in wat hierbo vertoon word."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Om jou rekening te verbind, maak die Facebook-toepassing op jou mobiele toestel oop en kontroleer vir kennisgewings."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- OF -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "Goed"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Kanselleer"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Meld asseblief weer by hierdie toepassing aan om jou Facebook-rekening te herkoppel. "; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "Goed"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Die bediener is tydelik besig, probeer asseblief weer."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Hou van"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Hou van"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Kanselleer"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Meld af"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Met Facebook aangemeld"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "As %@ aangemeld"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Meld aan"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Gaan voort met Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Meld met Facebook aan"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Meld af"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Toegang is nie na die Facebook-rekening verleen nie. Verifieer toestelinstellings."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Kan nie aan Facebook koppel nie. Gaan jou netwerkverbinding na en probeer weer."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Jou Facebook-wagwoord het verander. Om jou wagwoord te bevestig, maak Instellings > Facebook oop en tik jou naam."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Die Facebook-rekening is nie op die toestel opgestel nie."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Jou rekening is nie bevestig nie. Meld asseblief by www.facebook.com aan en volg die gegewe instruksies."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Jy kan nie op die oomblik by toepassings aanmeld nie. Meld asseblief by www.facebook.com aan en volg die gegewe instruksies."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Jy is in beheer – kies watter inligting jy met toepassings wil deel."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Meld aan"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Stuur"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Deel"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Nie jy nie?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Bevestig aantekening"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Gaan voort as %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ar.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ar.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..0911c786b6 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ar.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "تفضل بزيارة %@ وإدخال الرمز الموضح أدناه."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "لربط حسابك، افتح تطبيق فيسبوك على جهازك المحمول ثم تفقد الإشعارات."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- أو -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "موافق"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "إلغاء"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "يرجى تسجيل الدخول إلى هذا التطبيق مرة أخرى لإعادة الاتصال بحساب فيسبوك."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "موافق"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "الخادم مشغول مؤقتًا، يرجى إعادة المحاولة."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "إعجاب"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "أعجبني"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "إلغاء"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "تسجيل الخروج"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "تم تسجيل الدخول بحساب فيسبوك"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "تم تسجيل الدخول باسم %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "تسجيل الدخول"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "متابعة بحساب فيسبوك"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "تسجيل الدخول بحساب فيسبوك"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "تسجيل الخروج"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "لم يتم منح إذن الوصول لحساب فيسبوك. تحقق من إعدادات الجهاز."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "تعذر الاتصال بفيسبوك. يُرجى التحقق من الاتصال بالإنترنت وإعادة المحاولة."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "تم تغيير كلمة سر فيسبوك الخاصة بك. لتأكيد كلمة السر، افتح الإعدادات > فيسبوك ثم اضغط على اسمك."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "لم تتم تهيئة حساب فيسبوك على الجهاز."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "لم يتم تأكيد حسابك. يُرجى تسجيل الدخول إلى www.facebook.com واتباع التعليمات الموضحة."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "لا يمكنك تسجيل الدخول إلى التطبيقات حاليًا. يُرجى تسجيل الدخول إلى www.facebook.com واتباع التعليمات الموضحة."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "أنت المتحكم - اختر المعلومات التي تريد مشاركتها مع التطبيقات."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "تسجيل الدخول"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "إرسال"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "مشاركة"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "لست أنت؟"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "تأكيد تسجيل الدخول"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "متابعة باسم %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/bn.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/bn.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..6570752307 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/bn.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ -এ যান এবং উপরে যে কোডটি দেখানো হয়েছে সেটি লিখুন।"; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "আপনার অ্যাকাউন্টে সংযোগ করতে, আপনার মোবাইল ডিভাইসে Facebook অ্যাপটি খুলুন এবং বিজ্ঞপ্তি চেক করুন।"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- অথবা -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ঠিক আছে"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "বাতিল করুন"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "আপনার Facebook অ্যাকাউন্টটিতে পুনরায় সংযোগ করার জন্য অনুগ্রহ করে এই অ্যাপটিতে লগ ইন করুন৷"; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ঠিক আছে"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "এই সার্ভারটি সাময়িকভাবে ব্যস্ত আছে, অনুগ্রহ করে পুনরায় চেষ্টা করুন৷"; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "পছন্দ করুন"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "পছন্দ করা হয়েছে"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "বাতিল করুন"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "লগ আউট করুন"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook ব্যবহার করে লগ ইন করা হয়েছে"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ হিসাবে লগ ইন করা হয়েছে"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "লগ ইন করুন"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook এর সাথে চালিয়ে যান"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook -এর সাথে লগ ইন করুন"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "লগ আউট করুন"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook অ্যাকাউন্টটিতে অ্যাক্সেস করার অনুমতি নেই৷ ডিভাইস সেটিংস যাচাই করুন৷"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook-এ সংযোগ করা যাচ্ছে না৷ আপনার নেটওয়ার্ক সংযোগটি পরীক্ষা করুন এবং পুনরায় চেষ্টা করুন৷"; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "আপনার Facebook পাসওয়ার্ডটি পরিবর্তিত হয়েছে৷ আপনার পাসওয়ার্ডটি নিশ্চিত করতে, সেটিংস > Facebook খুলুন এবং আপনার নামটি ট্যাপ করুন৷"; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook অ্যাকাউন্টটি এই ডিভাইসে কনফিগার করা যাযনি৷"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "আপনার অ্যাকাউন্টটি নিশ্চিত করা যায়নি৷ অনুগ্রহ করে www.facebook.com-এ লগ ইন করুন এবং উল্লিখিত নির্দেশাবলী অনুসরণ করুন৷"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "এই সময়ে আপনি অ্যাপসে লগ ইন করতে পারবেন না৷ অনুগ্রহ করে www.facebook.com-এ লগ ইন করুন এবং উল্লিখিত নির্দেশাবলী অনুসরণ করুন৷"; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "আপনি নিয়ন্ত্রণে আছেন - অ্যাপ্সের সাথে আপনি যে তথ্য শেয়ার করতে চান তা বাছুন৷"; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "লগ ইন করুন"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "পাঠান"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "ভাগ করুন"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "আপনি নন?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "লগ ইন নিশ্চিত করুন"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ হিসেবে চালিয়ে যান"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/cs.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/cs.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..1de061a656 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/cs.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Navštivte %@ a zadejte nahoře uvedený kód."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Účet si můžete připojit tak, že si na mobilním zařízení spustíte aplikaci Facebook a podíváte se do upozornění."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- NEBO -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Zrušit"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Pokud se chcete ke svému Facebook účtu znovu připojit, přihlaste se k této aplikaci ještě jednou."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Server je dočasně zaneprázdněný, zkuste to znovu."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "To se mi líbí"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Už se mi to líbí"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Zrušit"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Odhlásit"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Přihlášen(a) přes Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Přihlášen(a) jako %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Přihlásit"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Pokračovat přes Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Přihlásit se přes Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Odhlásit"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook účtu nebylo oprávnění uděleno. Ověřte nastavení zařízení."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "K Facebooku se nedá připojit. Zkontrolujte připojení k síti a zkuste to znovu."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Vaše heslo na Facebook je změněné. Pokud chcete heslo potvrdit, přejděte do Nastavení > Facebook a klepněte na své jméno."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "V tomto zařízení není Facebook účet konfigurovaný."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Váš účet není potvrzený. Přihlaste se na www. facebook.com a postupujte podle uvedených pokynů."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Do aplikací se v této chvíli přihlásit nemůžete. Přihlaste se na www. facebook.com a postupujte podle uvedených pokynů."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Je jen na vás, které informace chcete s aplikacemi sdílet."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Přihlásit"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Odeslat"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Sdílet"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Nejste to vy?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Potvrdit přihlášení"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Pokračovat jako %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/da.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/da.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..9a49bb5122 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/da.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Gå til %@, og indtast den kode, der er angivet ovenfor."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Du kan tilknytte din konto ved at åbne Facebook-appen på din mobilenhed og tjekke notifikationerne."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ELLER -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Annuller"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Log på denne app igen for at genoprette forbindelsen til din Facebook-konto."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Serveren er optaget i øjeblikket. Prøv igen."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Synes godt om"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Synes godt om"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Annuller"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Log af"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Logget på med Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Logget på som %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Log på"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Fortsæt med Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Log på med Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Log af"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Der er ikke blevet givet adgang til Facebook-kontoen. Kontrollér enhedsindstillingerne."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Kunne ikke oprette forbindelse til Facebook. Kontrollér din netværksforbindelse, og prøv igen."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Din Facebook-adgangskode er ændret. For at bekræfte din adgangskode skal du åbne Indstillinger > Facebook og trykke på dit navn."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook-kontoen er ikke blevet konfigureret på enheden."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Din konto er ikke bekræftet. Log på www.facebook.com, og følg instruktionerne."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Du kan ikke logge på apps på nuværende tidspunkt. Log på www.facebook.com, og følg instruktionerne."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Du har styringen – vælg de oplysninger, som du vil dele med apps."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Log på"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Send"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Del"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Ikke dig?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Bekræft login"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Fortsæt som %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/de.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/de.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..331aa9b1f2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/de.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Besuche %@ und gib den oben angezeigten Code ein."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Um dein Konto zu verbinden, öffne die Facebook-App auf deinem Mobilgerät und prüfe, ob du Benachrichtigungen erhalten hast."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "– ODER –"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Abbrechen"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Melde dich bitte erneut bei dieser App an, um die Verbindung mit deinem Facebook-Konto wiederherzustellen."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Der Server ist vorübergehend beschäftigt. Bitte versuche es erneut."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Gefällt mir"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Gefällt dir"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Abbrechen"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Abmelden"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Über Facebook angemeldet"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Als %@ angemeldet"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Anmelden"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Mit Facebook fortfahren"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Über Facebook anmelden"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Abmelden"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Auf das Facebook-Konto wurde kein Zugriff erteilt. Überprüfe bitte die Geräteeinstellungen."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Verbindung zu Facebook kann nicht hergestellt werden. Bitte überprüfe deine Netzwerkverbindung und versuche es erneut."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Dein Facebook-Passwort hat sich geändert. Öffne „Einstellungen“ > „Facebook“ und tippe auf deinen Namen, um dein Passwort zu bestätigen."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Das Facebook-Konto wurde für dieses Gerät nicht konfiguriert."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Dein Konto wurde nicht bestätigt. Bitte melde dich unter www.facebook.com an und folge den Anweisungen."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Du kannst dich zurzeit nicht bei Apps anmelden. Bitte melde dich unter www.facebook.com an und folge den Anweisungen."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Es liegt ganz an dir – du kannst dir aussuchen, was du mit Apps teilen möchtest."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Anmelden"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Senden"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Teilen"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Nicht du?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Login bestätigen"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Fortfahren als %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/el.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/el.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..9b7a3bdde9 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/el.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Επισκεφτείτε τη διεύθυνση %@ και συμπληρώστε τον παραπάνω κωδικό."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Για να συνδεθείτε στο λογαριασμό σας, ανοίξτε την εφαρμογή Facebook στη φορητή συσκευή σας και ελέγξτε τις ειδοποιήσεις."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- Ή -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Άκυρο"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Συνδεθείτε ξανά σε αυτή την εφαρμογή για να συνδέσετε και πάλι το λογαριασμό σας στο Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Ο διακομιστής είναι προσωρινά απασχολημένος, προσπαθήστε ξανά."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Μου αρέσει!"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Σας αρέσει"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Άκυρο"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Αποσύνδεση"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Έχει γίνει σύνδεση μέσω Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Έχει γίνει σύνδεση ως %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Σύνδεση"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Συνεχίστε με το Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Σύνδεση μέσω Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Αποσύνδεση"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Δεν έχει παραχωρηθεί πρόσβαση στο λογαριασμό Facebook. Επαληθεύστε τις ρυθμίσεις της συσκευής σας."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Δεν είναι δυνατή η σύνδεση στο Facebook. Ελέγξτε τη σύνδεση στο δίκτυο και προσπαθήστε ξανά."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Ο κωδικός πρόσβασής σας στο Facebook άλλαξε. Για να επιβεβαιώσετε τον κωδικό σας, πηγαίνετε στις Ρυθμίσεις > Facebook και πατήστε το όνομά σας."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Ο λογαριασμός Facebook δεν έχει διαμορφωθεί στη συσκευή."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Ο λογαριασμός σας δεν επιβεβαιώθηκε. Συνδεθείτε στο www.facebook.com και ακολουθήστε τις οδηγίες που εμφανίζονται."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Προς το παρόν δεν μπορείτε να συνδεθείτε σε εφαρμογές. Συνδεθείτε στο www.facebook.com και ακολουθήστε τις οδηγίες που εμφανίζονται."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Έχετε τον έλεγχο - επιλέξτε ποιες πληροφορίες θέλετε να κοινοποιούνται στις εφαρμογές."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Σύνδεση"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Αποστολή"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Κοινοποίηση"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Δεν είστε εσείς;"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Επιβεβαίωση σύνδεσης"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Συνέχεια ως %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..12df4c2757 Binary files /dev/null and b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings differ diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en_GB.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en_GB.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..358a92c5ad --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en_GB.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* The format string for device login instructions */ +"DeviceLogin.LogInPrompt" = "Visit %@ and enter the code shown above."; + +/* The 'or' string for smart login instructions */ +"DeviceLogin.SmartLogInOrLabel" = "-- OR --"; + +/* The string for smart login instructions */ +"DeviceLogin.SmartLogInPrompt" = "To connect your account, open the Facebook app on your mobile device and check for notifications."; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Cancel"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Please log in to this app again to reconnect your Facebook account."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "The server is temporarily busy, please try again."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Like"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Liked"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Cancel"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Log out"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Logged in using Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Logged in as %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Log in"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Continue with Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Log in with Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Log out"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Access has not been granted to the Facebook account. Verify device settings."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Unable to connect to Facebook. Please check your network connection and try again."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Your Facebook password has changed. To confirm your password, open Settings > Facebook and tap your name."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "The Facebook account has not been configured on the device."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Your account is not confirmed. Please log in to www.facebook.com and follow the instructions given."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "You cannot log in to apps at this time. Please log in to www.facebook.com and follow the instructions given."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "You're in control – choose what information you want to share with apps."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Log In"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Send"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Share"; + +/* The title for the alert when smart login requires confirmation */ +"SmartLogin.ConfirmationTitle" = "Confirm Login"; + +/* The format string to continue as for the alert when smart login requires confirmation */ +"SmartLogin.Continue" = "Continue as %@"; + +/* The cancel label for the alert when smart login requires confirmation */ +"SmartLogin.NotYou" = "Not you?"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..7038004d96 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Visita %@ e ingresa el código que se muestra arriba."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Para conectar tu cuenta, abre la aplicación de Facebook en tu dispositivo móvil y comprueba las notificaciones."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- O -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "Aceptar"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Cancelar"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Inicia sesión de nuevo en esta aplicación para volver a conectarte a tu cuenta de Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "Aceptar"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "El servidor está temporalmente ocupado. Vuelve a intentarlo."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Me gusta"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Te gusta"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Cancelar"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Cerrar sesión"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Sesión iniciada con Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Sesión iniciada como %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Inicio de sesión"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Continuar con Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Iniciar sesión con Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Salir"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "No se concedió acceso a la cuenta de Facebook. Verifica la configuración del dispositivo."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "No es posible conectarse a Facebook. Comprueba tu conexión a internet y vuelve a intentarlo."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Cambió tu contraseña de Facebook. Para confirmar tu contraseña, abre Configuración > Facebook y toca tu nombre."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "No se configuró la cuenta de Facebook en el dispositivo."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Tu cuenta no está confirmada. Inicia sesión en www.facebook.com y sigue las instrucciones."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "No puedes iniciar sesión en las aplicaciones en este momento. Inicia sesión en www.facebook.com y sigue las instrucciones."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Tú decides: elige qué información quieres compartir con las aplicaciones."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Inicio de sesión"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Enviar"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Compartir"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "¿No eres tú?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Confirmar inicio de sesión"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Continuar como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es_ES.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es_ES.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..963fa96f60 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es_ES.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Visita %@ e introduce el código que se muestra arriba."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Para conectar tu cuenta, abre la aplicación de Facebook en tu dispositivo móvil y comprueba las notificaciones."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- O -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "Aceptar"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Cancelar"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Vuelve a iniciar sesión en esta aplicación para volver a conectar tu cuenta de Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "Aceptar"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "El servidor está ocupado temporalmente. Vuelve a intentarlo más tarde."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Me gusta"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Te gusta"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Cancelar"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Salir"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Sesión iniciada con Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Sesión iniciada como %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Inicio de sesión"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Continuar con Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Iniciar sesión con Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Salir"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "No se ha otorgado acceso a la cuenta de Facebook. Verifica la configuración del dispositivo."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "No es posible conectarse a Facebook. Comprueba tu conexión de red y vuelve a intentarlo."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Tu contraseña de Facebook ha cambiado. Para confirmar tu contraseña, abre Configuración > Facebook y toca tu nombre."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "La cuenta de Facebook no se ha configurado en el dispositivo."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Tu cuenta no se ha confirmado. Inicia sesión en www.facebook.com y sigue las instrucciones."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "No puedes iniciar sesión en las aplicaciones en este momento. Inicia sesión en www.facebook.com y sigue las instrucciones."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Tú tienes el control: elige la información que quieres compartir con las aplicaciones."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Inicio de sesión"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Enviar"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Compartir"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "¿No eres tú?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Confirmar inicio de sesión"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Continuar como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fi.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fi.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..1f1cc78722 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fi.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Siirry osoitteeseen %@ ja kirjoita oheinen koodi sivulle."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Pääset liittämään käyttäjätilisi avaamalla Facebook-sovelluksen mobiililaitteellasi ja tarkistamalla ilmoitukset."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- TAI -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Peruuta"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Kirjaudu tähän sovellukseen uudelleen, jotta voit yhdistää Facebook-tilisi uudelleen."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Palvelin on tilapäisesti varattu, yritä uudelleen."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Tykkää"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Tykätty"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Peruuta"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Kirjaudu ulos"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Sisäänkirjautunut Facebookin avulla"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Sisäänkirjautunut nimellä %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Kirjaudu sisään"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Jatka Facebook-tunnuksilla"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Kirjaudu sisään Facebookin avulla"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Kirjaudu ulos"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Pääsyä Facebook-tiliin ei ole myönnetty. Tarkista laiteasetukset."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Yhteyttä Facebookiin ei voi muodostaa. Tarkista verkkoyhteys ja yritä sitten uudelleen."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Facebook-salasanasi on vaihdettu. Vahvista salasanasi avaamalla Asetukset > Facebook ja napauttamalla nimeäsi."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook-tiliä ei ole määritetty laitteessa."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Tiliäsi ei ole vahvistettu. Kirjaudu sisään osoitteeseen www.facebook.com ja noudata annettuja ohjeita."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Et pysty kirjautumaan sovelluksiin tällä hetkellä. Kirjaudu sisään osoitteeseen www.facebook.com ja noudata annettuja ohjeita."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Sinä voit valita, mitä tietoja jaat sovelluksille."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Kirjaudu sisään"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Lähetä"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Jaa"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Etkö tämä ole sinä?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Vahvista sisäänkirjautuminen"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Jatka nimellä %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fil.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fil.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..5daf341fdb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fil.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Pumunta sa %@ at ilagay ang code na ipinapakita sa itaas."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Para ikonekta ang iyong account, buksan ang Facebook app sa iyong cellphone at tumingin ng mga notification."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- O KAYA -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Kanselahin"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Mangyaring mag-log in muli sa app na ito para ikonekta muli ang iyong Facebook account."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Pansamantalang abala ang server, pakisubukan muli."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Gustuhin"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Nagustuhan"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Kanselahin"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Mag-log Out"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Naka-log in gamit ang Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Naka-log in bilang si %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Mag-log in"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Magatuloy sa Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Mag-log in sa pamamagitan ng Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Mag-log out"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Hindi binigyan ng access ang Facebook account. Beripikahin ang mga setting ng device."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Hindi nakakonekta sa Facebook. Tingnan ang iyong koneksyon sa network at subukan muli."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Nagbago ang iyong password sa Facebook. Para makumpirma ang iyong password, buksan ang Mga Setting > Facebook at i-tap ang iyong pangalan."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Hindi na-configure sa device ang Facebook account."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Hindi nakumpirma ang iyong account. Mangyaring mag-log in sa www.facebook.com at sundin ang mga ibinigay na tagubilin."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Hindi ka makakapag-log in sa mga app sa oras na ito. Mangyaring mag-log in sa www.facebook.com at sundin ang mga ibinigay na tagubilin."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Ikaw ang may kontrol - piliin kung anong impormasyon ang gusto mong ibahagi sa mga app."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Mag-log In"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Ipadala"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Ibahagi"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Hindi ikaw?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "I-confirm ang Pag-log in"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Magpatuloy bilang %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fr.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..65fb07c8d1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fr.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Consultez la page %@ et saisissez le code indiqué ci-dessus."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Pour connecter votre compte, lancez l’application Facebook sur votre appareil mobile et consultez les notifications."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- OU -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Annuler"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Veuillez vous connecter à nouveau à cette application pour reconnecter votre compte Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Le serveur est temporairement occupé. Veuillez réessayer plus tard."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "J’aime"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "J’aime déjà"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Annuler"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Déconnexion"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Connecté(e) à l’aide de Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Connecté(e) en tant que %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Connexion"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Continuer avec Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Connexion avec Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Déconnexion"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "L’accès au compte Facebook n’a pas été autorisé. Vérifiez les paramètres de l’appareil."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Connexion à Facebook impossible. Vérifiez votre connexion avant de réessayer."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Votre mot de passe Facebook a changé. Pour confirmer votre mot de passe, ouvrez Paramètres > Facebook et saisissez votre nom."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Le compte Facebook n’a pas été configuré sur l’appareil."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Votre compte n’est pas confirmé. Veuillez vous connecter à www.facebook.com et suivre les instructions indiquées."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Vous ne pouvez pas vous connecter à des applications pour le moment. Veuillez vous connecter à www.facebook.com et suivre les instructions indiquées."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Vous gardez le contrôle. Choisissez les informations que vous souhaitez partager avec les applications."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Connexion"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Envoyer"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Partager"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Ce n’est pas vous ?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Confirmer la connexion"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Continuer en tant que %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/gu.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/gu.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..a91785a83c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/gu.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ ની મુલાકાત લો અને ઉપર બતાવ્યા પ્રમાણે કોડ દાખલ કરો."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "તમારા એકાઉન્ટ સાથે જોડાવા માટે, તમારા મોબાઇલ ઉપકરણ પર Facebook એપ્લિકેશન ખોલો અને સૂચનો માટે તપાસો."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- અથવા -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ઠીક"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "રદ કરો"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "તમારા ફેસબુક ખાતાને ફરીથી કનેક્ટ કરવા માટે કૃપા કરીને આ એપ્લિકેશનમાં ફરી લૉગ ઇન કરો."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ઠીક"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "સર્વર અસ્થાયીરૂપે વ્યસ્ત છે, કૃપા કરીને ફરી પ્રયાસ કરો."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "પસંદ કરો"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "પસંદ કર્યું"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "રદ કરો"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "લૉગ આઉટ કરો"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "ફેસબુકનો ઉપયોગ કરીને લૉગ ઇન કરો"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ તરીકે લૉગ ઇન થયાં"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "લૉગ ઇન કરો"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook સાથે ચાલુ રાખો"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "ફેસબુક સાથે લૉગ ઇન કરો"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "લૉગ આઉટ કરો"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "ફેસબુક ખાતા પર ઍક્સેસ આપવામાં આવી નથી. ઉપકરણ સેટિંગ્સ ચકાસો"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "ફેસબુકથી કનેક્ટ કરવામાં અસમર્થ. તમારું નેટવર્ક કનેક્શન તપાસો અને ફરી પ્રયાસ કરો."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "તમારો ફેસબુક પાસવર્ડ બદલાઈ ગયો છે. તમારા પાસવર્ડની પુષ્ટિ કરવા માટે, સેટિંગ્સ > ફેસબુક ખોલો અને તમારા નામ પર ટૅપ કરો."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "ઉપકરણ પર ફેસબુક ખાતું કન્ફિગર કરવામાં આવ્યું નથી."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "તમારા ખાતાની પુષ્ટિ કરવામાં આવી નથી. કૃપા કરીને www.facebook.com પર લૉગ ઇન કરો અને આપેલા સૂચનોને અનુસરો."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "તમે આ સમયે એપ્લિકેશન્સમાં લૉગ ઇન કરી શકતાં નથી. કૃપા કરીને www.facebook.com પર લૉગ ઇન કરો અને આપેલા સૂચનોને અનુસરો."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "તમે નિયંત્રણ કરો છો - તમે એપ્લિકેશન્સ સાથે કઈ માહિતી શેર કરવા માંગો છો તે પસંદ કરો."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "લૉગ ઇન કરો"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "મોકલો"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "શેર કરો"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "તમે નહિ?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "લૉગિનની પુષ્ટિ કરો"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ તરીકે ચાલુ રાખો"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/he.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/he.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..2e2a3c56a8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/he.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "בקר ב-%@ והזן את הקוד המופיע למעלה."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "כדי לחבר את החשבון שלך, פתח את אפליקציית פייסבוק במכשיר הנייד שלך ובדוק אם יש התראות."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- או -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "אישור"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "ביטול"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "התחבר לאפליקציה זו שוב כדי לחבר מחדש את חשבון הפייסבוק שלך."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "אישור"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "השרת עמוס באופן זמני, נסה שוב."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "אהבתי"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "אהבתי"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "ביטול"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "התנתק"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "מחובר באמצעות פייסבוק"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "מחובר בתור %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "התחבר"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "המשך עם פייסבוק"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "התחבר באמצעות פייסבוק"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "התנתק"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "לא הוענקה גישה לחשבון הפייסבוק. אמת את הגדרות המכשיר."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "לא ניתן להתחבר לפייסבוק. בדוק את החיבור שלך לרשת ונסה שוב."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "סיסמת הפייסבוק שלך השתנתה. כדי לאשר את הסיסמה, פתח את 'הגדרות' > 'פייסבוק' והקש על שמך."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "חשבון הפייסבוק לא הוגדר במכשיר."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "החשבון שלך לא אושר. התחבר ל-www.facebook.com ופעל בהתאם להוראות שיוצגו."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "לא ניתן להתחבר לאפליקציות כעת. התחבר ל-www.facebook.com ופעל בהתאם להוראות שיוצגו."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "אתה מחליט - בחר איזה מידע אתה רוצה לשתף עם אפליקציות."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "התחבר"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "שלח"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "שתף"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "לא אתה?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "אשר התחברות"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "המשך כ-%@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hi.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hi.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..14b1b959ef --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hi.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ पर जाएँ और ऊपर दिया गया कोड दर्ज करें."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "अपने खाते को कनेक्ट करने के लिए, अपने मोबाइल एप्लिकेशन में Facebook एप्लिकेशन खोलें और सूचनाओं के लिए जाँच करें."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- या -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ठीक"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "रद्द करें"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "अपने Facebook खाते से फिर से कनेक्ट होने के लिए कृपया इस एप्लिकेशन में फिर से लॉग इन करें."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ठीक"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "सर्वर अस्थायी रूप से व्यस्त है, कृपया फिर से कोशिश करें."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "पसंद करें"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "पसंद किया"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "रद्द करें"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "लॉग आउट करें"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook का उपयोग करके लॉग इन किया हुआ है"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ के रूप में लॉग इन किया हुआ है"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "लॉग इन करें"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook के साथ जारी रखें"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook से लॉग इन करें"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "लॉग आउट"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook खाते को एक्सेस नहीं दी गई है. डिवाइस सेटिंग सत्यापित करें."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook से कनेक्ट होने में असमर्थ. कृपया अपने नेटवर्क कनेक्शन की जाँच करें फिर से प्रयास करें."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "आपका Facebook पासवर्ड बदल गया है. अपना पासवर्ड कन्फ़र्म करने के लिए, सेटिंग > Facebook खोलें और अपना नाम टैप करें."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "डिवाइस पर Facebook खाता कॉन्फ़िगर नहीं किया गया है."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "आपका खाता कन्फ़र्म नहीं किया गया है. कृपया www.facebook.com में लॉग इन करें और दिए गए निर्देशों का पालन करें."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "आप इस समय एप्लिकेशन में लॉग इन नहीं कर सकते. कृपया www.facebook.com में लॉग इन करें और दिए गए निर्देशों का पालन करें."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "आप नियंत्रण में हैं - चुनें कि आप एप्लिकेशन से कौन-सी जानकारी साझा करना चाहते हैं."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "लॉग इन करें"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "भेजें"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "साझा करें"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "आप नहीं हैं?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "लॉग इन कन्फ़र्म करें"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ के रूप में जारी रखें"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hr.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..45e3312642 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hr.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Posjetite adresu %@ i unesite gore prikazan kod."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Da biste povezali račun, otvorite aplikaciju Facebook na mobilnom uređaju i potražite obavijesti."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ILI -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "U redu"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Odustani"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Ponovo se prijavite u ovu aplikaciju kako biste se ponovo povezali s Facebook računom."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "U redu"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Poslužitelj je privremeno zauzet, pokušajte ponovo."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Sviđa mi se"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Označeno sa \"sviđa mi se\""; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Odustani"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Odjavi se"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Prijavljen putem Facebooka"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Prijavljen kao %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Prijavi se"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Nastavite s korištenjem Facebooka"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Prijava putem Facebooka"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Odjavi se"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Pristup Facebook računu nije odobren. Provjerite postavke uređaja."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Povezivanje s Facebookom nije uspjelo. Provjerite mrežnu vezu i pokušajte ponovo."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Promijenili ste lozinku za Facebook. Za potvrdu lozinke otvorite Postavke > Facebook i dodirnite svoje ime."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Na uređaju nije konfiguriran račun za Facebook."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Vaš račun nije potvrđen. Prijavite se na www.facebook.com i slijedite upute."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "U ovome trenutku prijava u aplikacije nije moguća. Prijavite se na www.facebook.com i slijedite upute."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Vi odlučujete – odaberite koje podatke želite dijeliti u aplikacijama."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Prijava"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Pošalji"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Dijeli"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "To niste vi?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Potvrda prijave"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Nastavi kao %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hu.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hu.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..6d74f46703 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hu.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Keresd fel a %@ címet, és írd be a fent megjelenített kódot."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "A fiók hozzákapcsolásához nyisd meg a Facebook alkalmazást a mobilkészülékeden, és nézd meg az értesítéseket."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- VAGY -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Mégsem"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Kérjük, jelentkezz be újra ebbe az alkalmazásba, ha szeretnéd ismét összekapcsolni a Facebook-fiókoddal."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "A kiszolgáló átmenetileg foglalt, próbáld meg újra."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Tetszik"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Kedveled"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Mégsem"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Kijelentkezés"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Bejelentkezve a Facebook használatával"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Bejelentkezve %@ néven"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Bejelentkezés"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Folytatás a Facebookkal"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Bejelentkezés a Facebook használatával"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Kijelentkezés"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "A Facebook-fiókhoz nincs megadva a hozzáférés. Ellenőrizd az eszköz beállításait."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Nem sikerült kapcsolódni a Facebookhoz. Ellenőrizd a hálózati kapcsolatot, majd próbáld meg újra."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Facebook-jelszavad megváltozott. A jelszó megerősítéséhez nyisd meg a Settings (Beállítások) > Facebook pontot, és koppints a nevedre."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "A készüléken nincs beállítva a Facebook-fiók."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "A fiókod nincs megerősítve. Jelentkezz be a www.facebook.com címre, és kövesd az utasításokat."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Jelenleg nem tudsz alkalmazásokba bejelentkezni. Jelentkezz be a www.facebook.com címre, és kövesd az utasításokat."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "A döntés a kezedben van: kiválaszthatod, hogy milyen adatokat osztasz meg az alkalmazásokkal."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Bejelentkezés"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Küldés"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Megosztás"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Nem te vagy az?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Bejelentkezés megerősítése"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Folytatás mint %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/id.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/id.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..651b51b22d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/id.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Kunjungi %@ dan masukkan kode yang ditampilkan di atas."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Untuk menghubungkan akun Anda, buka aplikasi Facebook di perangkat seluler Anda dan periksa pemberitahuan."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ATAU -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Batal"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Harap masuk ke aplikasi ini lagi untuk menghubungkan kembali akun Facebook Anda."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Server untuk sementara sedang sibuk, harap coba lagi."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Suka"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Disukai"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Batal"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Keluar"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Masuk menggunakan Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Masuk sebagai %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Masuk"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Lanjutkan dengan Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Masuk menggunakan Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Keluar"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Akses belum diberikan ke akun Facebook. Verifikasi pengaturan perangkat."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Tidak dapat terhubung ke Facebook. Periksa koneksi jaringan dan coba lagi."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Kata sandi Facebook Anda telah diubah. Untuk mengonfirmasi kata sandi Anda, buka Pengaturan > Facebook, lalu ketuk nama Anda."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Akun Facebook belum dikonfigurasikan di perangkat."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Akun Anda tidak dikonfirmasi. Masuk ke www.facebook.com dan ikuti petunjuknya."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Saat ini Anda tidak dapat masuk ke aplikasi. Masuk ke www.facebook.com dan ikuti petunjuknya."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Anda memegang kendali - pilih info yang ingin Anda bagikan dengan aplikasi."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Masuk"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Kirim"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Berbagi"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Bukan Anda?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Konfirmasikan Masuk"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Lanjutkan sebagai %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/it.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/it.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..469ea536a7 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/it.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Visita %@ e inserisci il codice mostrato sopra."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Per collegare il tuo account, apri l'app Facebook sul tuo dispositivo mobile e controlla se hai notifiche."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- OPPURE -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Annulla"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Effettua di nuovo l'accesso a questa applicazione per riconnettere il tuo account Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Il server è temporaneamente occupato, riprova."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Mi piace"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Ti piace"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Annulla"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Esci"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Accesso effettuato tramite Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Accesso effettuato come %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Accedi"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Continua con Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Accedi con Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Esci"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "All'account Facebook non è stato concesso l'accesso. Verifica le impostazioni del dispositivo."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Impossibile connettersi a Facebook. Controlla la tua connessione e riprova."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "La tua password di Facebook è stata modificata. Per confermare la password, apri Impostazioni > Facebook e tocca il tuo nome."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "L'account Facebook non è stato configurato nel dispositivo."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Il tuo account non è stato verificato. Accedi a www.facebook.com e segui le istruzioni fornite."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Impossibile accedere alle applicazioni al momento. Accedi a www.facebook.com e segui le istruzioni fornite."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Il controllo è nelle tue mani: scegli quali informazioni condividere con le app."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Accedi"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Invia"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Condividi"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Non sei tu?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Conferma l'accesso"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Continua come %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ja.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ja.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..fb08bd740b --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ja.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@にアクセスし、上に表示されているコードを入力してください。"; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "アカウントをリンクするには、お使いのモバイル機器でFacebookアプリを開き、お知らせをご確認ください。"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- または -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "キャンセル"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "このアプリにもう一度ログインして、Facebookアカウントを再接続してください。"; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "サーバーが一時的にビジーです。もう一度お試しください。"; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "いいね!"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "いいね!済み"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "キャンセル"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "ログアウト"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebookを使用してログイン中"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@としてログイン中"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "ログイン"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebookで続ける"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebookでログイン"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "ログアウト"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebookアカウントにアクセス権が与えられていません。デバイス設定を確認してください。"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebookに接続できませんでした。ネットワーク接続を確認してもう一度お試しください。"; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Facebookパスワードが変更されています。パスワードを確認するには、[設定] > [Facebook]の順に開き、名前をタップしてください。"; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "デバイスにFacebookアカウントが構成されていません。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "アカウントが確認されません。www.facebook.comにログインし、表示される説明に従ってください。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "今はアプリにログインできません。www.facebook.comにログインし、表示される説明に従ってください。"; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "アプリと共有する情報をコントロールできます。"; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "ログイン"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "送信"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "シェア"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "別のユーザーとしてログイン"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "ログインの確認"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@として続行"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/kn.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/kn.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..f743a2793c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/kn.lproj/FacebookSDK.strings @@ -0,0 +1,77 @@ +/* The format string for device login instructions */ +"DeviceLogin.LogInPrompt" = "ನಿಮ್ಮ ಸ್ಮಾರ್ಟ್‌ ಫೋನ್‌ ಅಥವಾ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ %@ ಗೆ ಭೇಟಿ ನೀಡಿ ಮತ್ತು ಈ ಕೋಡ್‌ ಅನ್ನು ನಮೂದಿಸಿ:"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ಸರಿ"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "ರದ್ದುಮಾಡು"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "ನಿಮ್ಮ Facebook ಖಾತೆಯನ್ನು ಮರುಸಂಪರ್ಕಗೊಳಿಸಲು ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಮತ್ತೊಮ್ಮೆ ಲಾಗಿನ್‌ ಮಾಡಿ."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ಸರಿ"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "ಸರ್ವರ್ ತಾತ್ಕಾಲಿಕವಾಗಿ ಕಾರ್ಯನಿರತವಾಗಿದೆ, ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "ಇಷ್ಟವಾಗಿದೆ"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "ಇಷ್ಟಪಟ್ಟಿದ್ದಾರೆ"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "ರದ್ದುಮಾಡು"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "ಲಾಗ್‌ ಔಟ್‌"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook ಬಳಸಿಕೊಂಡು ಲಾಗಿನ್‌ ಮಾಡಲಾಗಿದೆ"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ ರಂತೆ ಲಾಗಿನ್‌ ಮಾಡಲಾಗಿದೆ"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "ಲಾಗ್‌ ಇನ್‌"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook ಅನ್ನು ಮುಂದುವರಿಸಿ"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook ಮೂಲಕ ಲಾಗ್‌ ಇನ್‌ ಮಾಡಿ"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "ಲಾಗ್‌ ಔಟ್‌"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook ಖಾತೆಗೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ. ಸಾಧನದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "ನಿಮ್ಮ Facebook ಪಾಸ್‌ವರ್ಡ್‌ ಬದಲಿಸಲಾಗಿದೆ. ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಖಚಿತಪಡಿಸಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳು > Facebook ತೆರೆಯಿರಿ ಮತ್ತು ನಿಮ್ಮ ಹೆಸರನ್ನು ಟ್ಯಾಪ್‌ ಮಾಡಿ."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook ಖಾತೆಯನ್ನು ಸಾಧನದಲ್ಲಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿಲ್ಲ."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "ನಿಮ್ಮ ಖಾತೆಯನ್ನು ದೃಢೀಕರಿಸಿಲ್ಲ. ದಯವಿಟ್ಟು www.facebook.com ಗೆ ಲಾಗಿನ್‌ ಮಾಡಿ ಮತ್ತು ಕೆಳಗೆ ನೀಡಿದ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "ನೀವು ಈ ಸಮಯದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಲಾಗಿನ್‌ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು www.facebook.com ಗೆ ಲಾಗಿನ್‌ ಮಾಡಿ ಮತ್ತು ಕೆಳಗೆ ನೀಡಿದ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "ನೀವು ನಿಯಂತ್ರಣದಲ್ಲಿರುವಿರಿ - ನೀವು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಹಂಚಿಕೊಳ್ಳಲು ಬಯಸುವ ವಿಷಯವನ್ನು ಆರಿಸಿ."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "ಲಾಗ್‌ ಇನ್‌"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "ಕಳುಹಿಸಿ"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "ಹಂಚಿಕೊಳ್ಳಿ"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ko.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ko.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..0dbd73faa8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ko.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@를 방문하여 위에 표시된 코드를 입력하세요."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "계정을 연결하려면 모바일 기기에서 Facebook 앱을 열고 알림을 확인하세요."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- 또는 -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "확인"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "취소"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Facebook 계정을 다시 연결하려면 이 앱에 다시 로그인하세요."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "확인"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "일시적으로 서버 사용량이 많아졌습니다. 다시 시도하세요."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "좋아요"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "좋아요"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "취소"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "로그아웃"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook 계정으로 로그인함"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@(으)로 로그인함"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "로그인"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook으로 계속"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook으로 로그인"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "로그아웃"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook 계정에 대한 액세스가 승인되지 않았습니다. 기기 설정을 확인하세요."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook에 연결할 수 없습니다. 네트워크 연결을 확인하고 다시 시도하세요."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Facebook 비밀번호가 변경되었습니다. 비밀번호를 확인하려면 설정 > Facebook으로 이동하여 이름을 누르세요."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook 계정이 기기에 구성되어 있지 않습니다."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "계정이 확인되지 않았습니다. www.facebook.com에 로그인한 뒤 안내를 따라주세요."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "현재 앱에 로그인할 수 없습니다. www.facebook.com에 로그인한 뒤 안내를 따라주세요."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "원하는 정보를 선택하여 앱에 공유할 수 있습니다."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "로그인"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "보내기"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "공유하기"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "회원님이 아닌가요?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "로그인 확인"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@님으로 계속"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ml.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ml.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..e7a0189b59 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ml.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ സന്ദർശിച്ച്‌ മുകളിൽ കാണിച്ച‌ കോഡ്‌ നൽകുക."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "നിങ്ങളുടെ അക്കൗണ്ട്‌ കണക്‌റ്റുചെയ്യാൻ, നിങ്ങളുടെ മൊബൈൽ ഉപകരണത്തിലെ Facebook ആപ്പ്‌ തുറന്ന്‌ അറിയിപ്പുകൾ പരിശോധിക്കുക."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- അല്ലെങ്കിൽ -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ശരി"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "റദ്ദാക്കുക"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "നിങ്ങളുടെ Facebook അക്കൗണ്ടുമായി വീണ്ടും കണക്‌റ്റുചെയ്യുന്നതിന് ഈ ആപ്ലിക്കേഷനിൽ വീണ്ടും ലോഗിൻ ചെയ്യുക."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ശരി"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "സെർവർ താൽക്കാലികമായി തിരക്കിലാണ്, വീണ്ടും ശ്രമിക്കുക."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "ലൈക്കുചെയ്യുക"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "ലൈക്കുചെയ്‌‌തു"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "റദ്ദാക്കുക"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "ലോഗ്ഔട്ട് ചെയ്യുക"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook ഉപയോഗിച്ച് ലോഗിൻ ചെയ്‌തു"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ എന്നതായി ലോഗിൻ ചെയ്‌തു"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "ലോഗിൻ ചെയ്യുക"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook ഉപയോഗിച്ച് തുടരുക"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യുക"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "ലോഗ്ഔട്ട് ചെയ്യുക"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook അക്കൗണ്ടിലേക്ക് ആക്‌സസ് നൽകിയിട്ടില്ല. ഉപകരണ ക്രമീകരണങ്ങൾ പരിശോധിച്ചുറപ്പിക്കുക."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook-ലേക്ക് കണക്‌റ്റുചെയ്യാനായില്ല. നിങ്ങളുടെ നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "നിങ്ങളുടെ Facebook പാസ്‌വേഡ് മാറി. പാ‌സ്‌വേഡ് സ്ഥിരീകരിക്കുന്നതിന് ക്രമീകരണങ്ങൾ > Facebook എന്നത് തുറന്ന് പേര് ടാപ്പുചെയ്യുക."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "ഉപകരണത്തിൽ Facebook അക്കൗണ്ട് കോൺഫിഗർ ചെയ്‌തിട്ടില്ല."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "അക്കൗണ്ട് സ്ഥിരീകരിച്ചു. www.facebook.com എന്നതിലേക്ക് ലോഗിൻ ചെയ്‌ത് തന്നിരിക്കുന്ന നിർദ്ദേശങ്ങൾ പാലിക്കുക."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "നിങ്ങൾക്ക് ഈ സമയം ആപ്ലിക്കേഷനുകളിലേക്ക് ലോഗിൻ ചെയ്യാനാവില്ല. www.facebook.com എന്നതിലേക്ക് ലോഗിൻ ചെയ്‌ത് തന്നിരിക്കുന്ന നിർദ്ദേശങ്ങൾ പാലിക്കുക."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "നിങ്ങളുടെ നിയന്ത്രണത്തിലാണ് - നിങ്ങൾക്ക് ആപ്‌സുമായി ഏതെല്ലാം വിവരങ്ങൾ പങ്കിടണമെന്ന് തിരഞ്ഞെടുക്കുക."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "ലോഗിൻ ചെയ്യുക"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "അയയ്‌ക്കുക"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "പങ്കിടൂ"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "നിങ്ങൾ അല്ലേ?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "ലോഗിൻ സ്ഥിരീകരിക്കുക"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ ആയി തുടരുക"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/mr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/mr.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..246b69266c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/mr.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ वर भेट द्या आणि वर दर्शवलेला कोड प्रविष्ट करा."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "तुमचे खाते कनेक्ट करण्यासाठी, तुमच्या मोबाईल उपकरणावर Facebook अॅप उघडा आणि सूचना तपासा."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- किंवा -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ठीक"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "रद्द करा"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "कृपया आपले फेसबुक खाते रीकनेक्ट करण्यासाठी या अनुप्रयोगावर पुन्हा लॉग इन करा."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ठीक"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "सर्व्हर तात्पुरता व्यस्त आहे, कृपया पुन्हा प्रयत्न करा."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "आवडले"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "आवडलेले"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "रद्द करा"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "लॉग आउट करा"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "फेसबुक वापरून लॉग इन केले"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ म्हणून लॉग इन केले"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "लॉग इन करा"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook सह चालू ठेवा"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "फेसबुकसह लॉग इन करा"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "लॉग आउट करा"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "फेसबुक खात्यावर प्रवेशास मंजूरी दिली गेली नाही. डिव्हाइस सेटिंग्ज सत्यापित करा."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "फेसबुकशी कनेक्ट करण्यात अक्षम. आपले नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "आपला फेसबुक पासवर्ड बदलला आहे. आपल्या पासवर्डची पुष्टी करण्यासाठी, सेटिंग्ज > फेसबुक उघडा आणि आपले नाव टॅप करा."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "डिव्हाइसवर फेसबुक खाते कॉन्फिगर केले गेले नाही."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "आपल्या खात्याची पुष्टी झाली नाही. कृपया www.facebook.com वर लॉग इन करा आणि दिलेल्या सूचनांचे अनुसरण करा."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "आपण यावेळी अनुप्रयोगांवर लॉग इन करू शकत नाही. कृपया www.facebook.com वर लॉग इन करा आणि दिलेल्या सूचनांचे अनुसरण करा."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "तुम्ही नियंत्रणात आहात - तुम्ही कोणती माहिती अॅपसह सामायिक करू इच्छिता ते निवडा."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "लॉग इन करा"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "पाठवा"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "सामायिक करा"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "तुम्ही नाही?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "लॉग इन पुष्टी करा"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ म्हणून चालू ठेवा"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ms.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ms.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..20b212aa36 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ms.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Lawati %@ dan masukkan kod yang ditunjukkan di atas."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Untuk menghubungkan akaun anda, buka apl Facebook di peranti mudah alih anda dan semak pemberitahuan."; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Bukan anda?"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Batal"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Sila log masuk ke aplikasi ini sekali lagi untuk menyambung semula akaun Facebook anda."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Pelayan ini sibuk buat sementara waktu, sila cuba lagi."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Suka"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Disukai"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Batal"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Log Keluar"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Dilog masuk menggunakan Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Dilog masuk sebagai %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Log masuk"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Teruskan dengan Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Log masuk dengan Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Log keluar"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Akses ke akaun Facebook tidak diberikan. Sahkan tetapan peranti."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Tidak dapat menyambung ke Facebook. Semak sambungan rangkaian anda dan cuba lagi."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Kata laluan Facebook anda telah ditukar. Untuk mengesahkan kata laluan anda, buka Tetapan > Facebook dan ketik nama anda."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Akaun Facebook masih belum dikonfigurasikan pada peranti."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Akaun anda tidak disahkan. Sila log masuk ke www.facebook.com dan ikuti arahan yang diberi."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Anda tidak boleh log masuk ke aplikasi pada masa ini. Sila log masuk ke www.facebook.com dan ikuti arahan yang diberi."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Anda yang mengawal - pilih maklumat yang anda ingin kongsi dengan apl."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Log Masuk"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Hantar"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Kongsi"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Sahkan Log Masuk"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Teruskan sebagai %@"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ATAU -"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nb.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nb.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..2307ecb030 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nb.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Gå til %@, og oppgi koden som vises ovenfor."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Koble til kontoen din ved å åpne Facebook-appen på mobilenheten din og se etter varsler."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ELLER -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Avbryt"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Logg deg inn igjen på denne appen for å koble til Facebook-kontoen på nytt."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Serveren er midlertidig opptatt. Prøv på nytt."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Liker"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Likt"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Avbryt"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Logg ut"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Logget inn med Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Logget inn som %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Logg inn"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Fortsett med Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Logg inn med Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Logg ut"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Det er ikke gitt tilgang til Facebook-kontoen. Bekreft enhetsinnstillinger."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Kunne ikke koble til Facebook. Kontroller nettverkstilkoblingen, og prøv på nytt."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Facebook-passordet ditt er endret. Bekreft passordet ditt ved å gå til Innstillinger > Facebook og trykke på navnet ditt."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook-kontoen er ikke konfigurert på enheten."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Kontoen din er bekreftet. Logg deg inn på www.facebook.com, og følg instruksjonene."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Du kan ikke logge deg inn på apper for øyeblikket. Logg deg inn på www.facebook.com, og følg instruksjonene."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Du bestemmer – velg hvilke opplysninger du vil dele med appene."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Logg inn"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Send"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Del"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Ikke deg?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Bekreft innlogging"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Fortsett som %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nl.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nl.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..899870ef3f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nl.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Ga naar %@ en voer de bovenstaande code in."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Om je account te verbinden, open je de Facebook-app op je mobiele apparaat en controleer of je meldingen ziet."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- OF -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Annuleren"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Meld je nogmaals aan bij deze app om verbinding te maken met je Facebook-account."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "De server is tijdelijk niet beschikbaar. Probeer het opnieuw."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Vind ik leuk"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Vind ik leuk"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Annuleren"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Afmelden"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Aangemeld via Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Aangemeld als %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Aanmelden"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Doorgaan met Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Aanmelden met Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Afmelden"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Er is geen toegang verleend aan het Facebook-account. Verifieer de apparaatinstellingen."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Er kan geen verbinding worden gemaakt met Facebook. Controleer je netwerkverbinding en probeer het opnieuw."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Je Facebook-wachtwoord is gewijzigd. Open Instellingen > Facebook en tik op je naam om je wachtwoord te bevestigen."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Het Facebook-account is niet geconfigureerd op het apparaat."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Je account is niet bevestigd. Meld je aan bij www.facebook.com en volg de instructies."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Je kunt je momenteel niet aanmelden bij apps. Meld je aan bij www.facebook.com en volg de instructies."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Jij hebt de controle. Kies welke informatie je met apps wilt delen."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Aanmelden"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Verzenden"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Delen"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Ben jij dit niet?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Aanmelden bevestigen"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Doorgaan als %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pa.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pa.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..29ca536836 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pa.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ ਵਿੱਚ ਜਾਓ ਅਤੇ ਉੱਤੇ ਦਿਖਾਏ ਗਏ ਕੋਡ ਨੂੰ ਦਾਖ਼ਲ ਕਰੋ।"; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "ਆਪਣੇ ਖਾਤੇ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਲਈ, ਆਪਣੀ ਮੋਬਾਈਲ ਡਿਵਾਈਸ 'ਤੇ Facebook ਐਪ ਨੂੰ ਖੋਲ੍ਹੋ ਅਤੇ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦੇਖੋ।"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ਜਾਂ -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ਠੀਕ"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "ਰੱਦ ਕਰੋ"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ Facebook ਖਾਤੇ ਨਾਲ ਮੁੜ ਕਨੈਕਟ ਕਰਨ ਲਈ ਇਸ ਐਪ ਵਿੱਚ ਦੁਬਾਰਾ ਲੌਗ ਇਨ ਕਰੋ।"; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ਠੀਕ"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "ਇਹ ਸਰਵਰ ਅਸਥਾਈ ਰੂਪ ਵਿੱਚ ਵਿਅਸਤ ਹੈ, ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "ਪਸੰਦ ਕਰੋ"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "ਪਸੰਦ ਕੀਤਾ ਗਿਆ"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "ਰੱਦ ਕਰੋ"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "ਲੌਗ ਆਉਟ ਕਰੋ"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook ਦਾ ਉਪਯੋਗ ਕਰਕੇ ਲੌਗ ਇਨ ਕੀਤਾ ਗਿਆ"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ ਵੱਜੋਂ ਲੌਗ ਇਨ ਕੀਤਾ ਗਿਆ"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "ਲੌਗ ਇਨ ਕਰੋ"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook ਦੇ ਨਾਲ ਜਾਰੀ ਰੱਖੋ"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook ਦੇ ਨਾਲ ਲੌਗ ਇਨ ਕਰੋ"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "ਲੌਗ ਆਉਟ ਕਰੋ"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook ਖਾਤੇ ਨੂੰ ਐਕਸੈਸ ਪ੍ਰਦਾਨ ਨਹੀਂ ਕੀਤੀ ਗਈ। ਡਿਵਾਈਸ ਸੈੱਟਿੰਗਜ਼ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਵਿੱਚ ਅਸਮਰਥਿਤ ਆਪਣੇ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "ਤੁਹਾਡੇ Facebook ਪਾਸਵਰਡ ਨੂੰ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਹੈ। ਆਪਣੇ ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ, ਸੈੱਟਿੰਗਜ਼ > Facebook ਖੋਲ੍ਹੋ ਅਤੇ ਆਪਣੇ ਨਾਂ ਨੂੰ ਟੈਪ ਕਰੋ।"; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook ਖਾਤੇ ਨੂੰ ਡਿਵਾਈਸ 'ਤੇ ਕਨਫ਼ੀਗਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "ਤੁਹਾਡੇ ਖਾਤੇ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ www.facebook.com ਵਿੱਚ ਲੌਗ ਇਨ ਕਰੋ ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਨਿਰਦੇਸ਼ਾਂ ਦਾ ਪਾਲਣ ਕਰੋ।"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "ਤੁਸੀਂ ਇਸ ਸਮੇਂ ਐਪ ਵਿੱਚ ਲੌਗ ਇਨ ਨਹੀਂ ਕਰ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ www.facebook.com ਵਿੱਚ ਲੌਗ ਇਨ ਕਰੋ ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਨਿਰਦੇਸ਼ਾਂ ਦਾ ਪਾਲਣ ਕਰੋ।"; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "ਤੁ\ਸੀਂ ਨਿਯੰਤਰਣ ਵਿੱਚ ਹੋ - ਉਹ ਜਾਣਕਾਰੀ ਚੁਣੋ ਜੋ ਤੁਸੀਂ ਐਪਸ ਦੇ ਨਾਲ ਸਾਂਝੀ ਕਰਨੀ ਚਾਹੁੰਦੇ ਹੋ।"; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "ਲੌਗ ਇਨ ਕਰੋ"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "ਸਾਂਝਾ ਕਰੋ"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "ਭੇਜੋ"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "ਕੀ ਤੁਸੀਂ ਨਹੀਂ ਹੋ?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "ਲੌਗਇਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ ਵੱਜੋਂ ਜਾਰੀ ਰੱਖੋ"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pl.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pl.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..f7e86816c4 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pl.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Wejdź na stronę %@ i wprowadź podany powyżej kod."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Aby połączyć konto, otwórz aplikację Facebook na urządzeniu mobilnym i sprawdź powiadomienia."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- LUB -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Anuluj"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Zaloguj się jeszcze raz do aplikacji, aby ponownie przyłączyć swoje konto na Facebooku."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Serwer jest zajęty, spróbuj później."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Lubię to!"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Polubione"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Anuluj"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Wyloguj się"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Zalogowano przez Facebooka"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Zalogowano jako %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Zaloguj się"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Kontynuuj za pośrednictwem Facebooka"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Zaloguj się przez Facebooka"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Wyloguj się"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Brak dostępu z tego konta na Facebooku. Sprawdź ustawienia urządzenia."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Nie można połączyć się z Facebookiem. Sprawdź połączenie sieciowe i spróbuj ponownie."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Twoje hasło do Facebooka zostało zmienione. Aby potwierdzić hasło, otwórz Ustawienia > Facebook i dotknij swojego imienia i nazwiska."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Na tym urządzeniu nie skonfigurowano konta na Facebooku."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Konto niepotwierdzone. Zaloguj się przez stronę www.facebook.com i postępuj zgodnie ze wskazówkami."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Brak możliwości logowania się do aplikacji. Zaloguj się przez stronę www.facebook.com i postępuj zgodnie ze wskazówkami."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Masz pełną kontrolę – określ, jakie informacje chcesz udostępniać aplikacjom."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Zaloguj się"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Wyślij"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Udostępnij"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "To nie Ty?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Potwierdź logowanie"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Kontynuuj jako %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..781791229d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Acesse %@ e introduza o código mostrado acima."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Para conectar sua conta, abra o aplicativo Facebook em seu dispositivo móvel e verifique se tem notificações."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "– OU –"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Cancelar"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Entre nesse aplicativo novamente para reconectar sua conta do Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "O servidor está temporariamente ocupado. Tente novamente."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Curtir"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Curtiu"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Cancelar"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Sair"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Você entrou usando o Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Conectado como %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Entrar"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Continuar com o Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Entrar com o Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Sair"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "O acesso à conta do Facebook não foi permitido. Verifique as configurações do dispositivo."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Não foi possível se conectar ao Facebook. Verifique sua conexão de rede e tente novamente."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "A sua senha do Facebook foi alterada. Para confirmar a sua senha, abra Configurações > Facebook e toque no seu nome."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "A conta do Facebook não foi configurada no dispositivo."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "A sua conta não foi confirmada. Entre no site www.facebook.com e siga as instruções fornecidas."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Não é possível entrar em aplicativos neste momento. Entre no site www.facebook.com e siga as instruções fornecidas."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Você é quem controla — escolha quais informações você quer compartilhar com os aplicativos."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Entrar"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Envio"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Compartilhar"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Não é você?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Confirme o login"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Continue como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt_PT.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt_PT.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..1fd2d29ea4 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt_PT.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Visita %@ e introduz o código mostrado acima."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Para ligares a tua conta, abre a app Facebook no teu dispositivo móvel e verifica se tens notificações."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "– OU –"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Cancelar"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Volta a iniciar sessão nesta aplicação para te ligares novamente à tua conta do Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "O servidor está temporariamente ocupado. Tenta novamente."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Gosto"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Gostei"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Cancelar"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Terminar sessão"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Com sessão iniciada através do Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Com sessão iniciada como %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Iniciar sessão"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Continuar com o Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Iniciar sessão com o Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Terminar a sessão"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "O acesso não foi concedido à conta do Facebook. Verificar as definições do dispositivo."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Não é possível ligar ao Facebook. Verifica a tua ligação à rede e tenta novamente."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "A tua palavra-passe do Facebook foi alterada. Para confirmares a tua palavra-passe, abre as Definições > Facebook e toca no teu nome."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "A conta do Facebook não foi configurada no dispositivo."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "A tua conta não foi confirmada. Inicia sessão em www.facebook.com e segue as instruções indicadas."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Não podes iniciar sessão em aplicações neste momento. Inicia sessão em www.facebook.com e segue as instruções indicadas."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Tens o controlo: escolhe a informação que pretendes partilhar com as apps."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Iniciar sessão"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Enviar"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Partilhar"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Não és tu?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Confirmar Início de Sessão"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Continuar como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ru.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ru.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..114e0be23d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ru.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Откройте страницу %@ и введите представленный выше код."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Чтобы подключить аккаунт, откройте приложение Facebook на мобильном устройстве и проверьте уведомления."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ИЛИ -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Отменить"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Войдите в это приложение еще раз, чтобы повторно подключить ваш аккаунт Facebook."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Сервер временно загружен, повторите попытку."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Нравится"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Понравилось"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Отменить"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Выход"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Выполнен вход с помощью Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Вы вошли как %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Вход"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Продолжить с Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Вход через Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Выход"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Аккаунту Facebook доступ не предоставлен. Проверьте настройки устройства."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Не удалось подключиться к Facebook. Проверьте сетевое подключение и повторите попытку."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Ваш пароль Facebook изменен. Чтобы подтвердить пароль, откройте «Настройки» > Facebook и коснитесь вашего имени."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "На устройстве не настроен аккаунт Facebook."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Ваш аккаунт не подтвержден. Войдите на сайт www.facebook.com и следуйте инструкциям."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Сейчас нельзя войти в приложения. Войдите на сайт www.facebook.com и следуйте инструкциям."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Вы сами выбираете, какой информацией поделиться с приложениями."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Вход в систему"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Отправить"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Поделиться"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Это не вы?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Подтвердить вход"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Продолжить как %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sk.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sk.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..1c1e2a8363 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sk.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Navštívte stránku %@ a zadajte kód zobrazený vyššie."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Na pripojenie svojho účtu otvorte vo svojom mobilnom zariadení aplikáciu Facebook a skontrolujte upozornenia."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ALEBO -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Zrušiť"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Ak sa chcete znova pripojiť k svojmu účtu na Facebooku, prihláste sa znova do tejto aplikácie."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Server je dočasne zaneprázdnený – skúste znova."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Páči sa mi to"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Páči sa mi to"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Zrušiť"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Odhlásiť"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Prihlásený cez Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Prihlásený ako %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Prihlásiť sa"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Pokračovať s Facebookom"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Prihlásiť sa cez Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Odhlásiť sa"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Danému účtu na Facebooku nebol poskytnutý prístup. Skontrolujte nastavenia zariadenia."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Nedá sa pripojiť k Facebooku. Skontrolujte svoje sieťové pripojenie a skúste znova."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Vaše heslo pre Facebook sa zmenilo. Na potvrdenie svojho hesla otvorte Nastavenia > Facebook a ťuknite na svoje meno."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Daný účet na Facebooku nebol nastavený v zariadení."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Váš účet nie je potvrdený. Prihláste sa na stránke www.facebook.com a postupujte podľa pokynov."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Momentálne sa nemôžete prihlásiť do aplikácií. Prihláste sa na stránke www.facebook.com a postupujte podľa pokynov."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Máte to pod kontrolou: vyberte, ktoré informácie chcete zdieľať s aplikáciami."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Prihlásenie sa"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Odoslať"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Zdieľať"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Nie ste to vy?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Potvrdiť prihlásenie"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Pokračovať ako %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sv.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sv.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..3fd3107bfd --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sv.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Besök %@ och ange koden som visas ovan."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Koppla ditt konto genom att öppna Facebook-appen på din mobila enhet och söka efter aviseringar."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- ELLER -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Avbryt"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Logga in på den här appen igen om du vill ansluta ditt Facebook-konto på nytt."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Servern är upptagen för tillfället. Försök igen."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Gilla"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Gillade"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Avbryt"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Logga ut"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Inloggad med Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Inloggad som %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Logga in"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Fortsätt med Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Logga in med Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Logga ut"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Du har inte fått tillgång till Facebook-kontot. Verifiera enhetsinställningar."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Det går inte att ansluta till Facebook. Kontrollera nätverksanslutningen och försök igen."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Ditt Facebook-lösenord har ändrats. Bekräfta lösenordet genom att öppna Inställningar > Facebook och skriva in ditt namn."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook-konto har inte konfigurerats på enheten."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Ditt konto har inte bekräftats. Logga in på www.facebook.com och följ instruktionerna."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Du kan inte logga in på appar för närvarande. Logga in på www.facebook.com och följ instruktionerna."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Du bestämmer – välj vilken info du vill dela med appar."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Logga in"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Skicka"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Dela"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Inte du?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Bekräfta inloggning"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Fortsätt som %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ta.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ta.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..c0d2d08da8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ta.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ என்பதற்குச் சென்று மேலே தெரியும் குறியீட்டை உள்ளிடவும்."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "உங்கள் கணக்குடன் இணைக்க, உங்கள் மொபைல் சாதனத்தில் Facebook பயன்பாட்டைத் திறந்து அறிவிப்புகளைப் பார்க்கவும்."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- அல்லது -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "சரி"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "ரத்துசெய்"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "உங்கள் Facebook கணக்கில் மீண்டும் இணைய, இந்தப் பயன்பாட்டில் மீண்டும் உள்நுழையவும்."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "சரி"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "சேவையகம் தற்காலிகமாக பிஸியாக உள்ளது, மீண்டும் முயற்சிக்கவும்."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "விருப்பம்"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "விரும்பப்பட்டது"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "ரத்துசெய்"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "வெளியேறு"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook மூலம் உள்நுழையப்பட்டுள்ளது"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ இல் உள்நுழைந்துள்ளீர்கள்"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "உள்நுழைவு"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook இல் தொடரவும்"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook மூலம் உள்நுழையவும்"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "வெளியேறு"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook கணக்கிற்கு அணுகல் வழங்கப்படவில்லை. சாதன அமைப்புகளைச் சரிபார்க்கவும்."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook இல் இணைய முடியவில்லை. இணைய இணைப்பைச் சரிபார்த்து, மீண்டும் முயற்சிக்கவும்."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Facebook கடவுச்சொல் மாற்றப்பட்டது. கடவுச்சொல்லை உறுதிசெய்ய, அமைப்புகள் > Facebook க்கு சென்று உங்கள் பெயரைத் தட்டவும்."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "சாதனத்தில் Facebook கணக்கு உள்ளமைக்கப்படவில்லை."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "உங்கள் கணக்கு உறுதிசெய்யப்படவில்லை. www.facebook.com இல் உள்நுழைந்து, வழங்கப்பட்டுள்ள வழிமுறைகளைப் பின்பற்றவும்."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "இப்போது பயன்பாடுகளில் உள்நுழைய முடியாது. www.facebook.com இல் உள்நுழைந்து, வழங்கப்பட்டுள்ள வழிமுறைகளைப் பின்பற்றவும்."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "பயன்பாடுகளில் எந்தத் தகவலைப் பகிர விரும்புகிறீர்கள் என்பதை நீங்கள் கட்டுப்படுத்தலாம்."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "உள்நுழைவு"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "அனுப்பு"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "பகிர்"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "நீங்கள் இல்லையா?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "உள்நுழைவை உறுதிப்படுத்தவும்"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ ஆகத் தொடரவும்"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/te.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/te.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..7605c9b5e8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/te.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ లింక్‌ను సందర్శించి, ఎగువ చూపిన కోడ్‌ను నమోదు చేయండి."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "మీ ఖాతాను అనుసంధానించడానికి, మీ మొబైల్ పరికరంలో Facebook అనువర్తనాన్ని తెరిచి, నోటిఫికేషన్‌లను తనిఖీ చేయండి."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- లేదా -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ఒప్పుకుంటున్నాను"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "రద్దు చేయి"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "దయచేసి మీ Facebook ఖాతాను మళ్లీ కనెక్ట్ చేయడానికి ఈ అప్లికేషన్‌కు మళ్లీ లాగిన్ చేయండి."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ఒప్పుకుంటున్నాను"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "సర్వర్ తాత్కాలికంగా బిజీగా ఉంది, దయచేసి మళ్లీ ప్రయత్నించండి."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "ఇష్టంగా గుర్తు పెట్టు"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "ఇష్టంగా గుర్తు పెట్టబడింది"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "రద్దు చేయి"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "లాగ్ అవుట్ చేయి"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook ఉపయోగించి లాగిన్ చేసారు"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@గా లాగిన్ చేసారు"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "లాగిన్ చేయి"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebookతో కొనసాగించండి"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebookతో లాగిన్ చేయి"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "లాగ్ అవుట్ చేయి"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook ఖాతాకు ప్రాప్యత మంజూరు చేయలేదు. పరికర సెట్టింగ్‌లను సరిచూడండి."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebookకి కనెక్ట్ చేయడం సాధ్యపడలేదు. మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "మీ Facebook పాస్‌వర్డ్ మారింది. మీ పాస్‌వర్డ్‌ను నిర్ధారించడానికి, సెట్టింగ్‌లు > Facebook తెరిచి, మీ పేరు నొక్కండి."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "పరికరంలో Facebook ఖాతా కాన్ఫిగర్ చేయబడలేదు."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "మీ ఖాతా నిర్ధారించబడలేదు. దయచేసి www.facebook.comకి లాగిన్ చేసి, అందించిన సూచనలను అనుసరించండి."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "ప్రస్తుతం మీరు అప్లికేషన్‌లకు లాగిన్ చేయలేరు. దయచేసి www.facebook.comకి లాగిన్ చేసి, అందించిన సూచనలను అనుసరించండి."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "మీకు నియంత్రణ ఉంది - మీరు అనువర్తనాలతో భాగస్వామ్యం చేయాలనుకునే సమాచారాన్ని ఎంచుకోండి."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "లాగిన్ చేయండి"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "పంపు"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "భాగస్వామ్యం చేయండి"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "మీరు కాదా?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "లాగిన్‌ను నిర్ధారించండి"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ వలె కొనసాగండి"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/th.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/th.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..8c5c9fde49 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/th.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "ไปที่ %@ และใส่โค้ดที่แสดงด้านบน"; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "หากต้องการเชื่อมต่อบัญชีผู้ใช้ของคุณ ให้เปิดแอพ Facebook บนอุปกรณ์มือถือของคุณและตรวจสอบการแจ้งเตือน"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- หรือ -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "ตกลง"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "ยกเลิก"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "โปรดลงชื่อเข้าใช้แอพนี้อีกครั้งเพื่อเชื่อมต่อบัญชีผู้ใช้ Facebook ของคุณใหม่"; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "ตกลง"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "เซิร์ฟเวอร์ไม่พร้อมให้บริการชั่วคราว โปรดลองใหม่อีกครั้ง"; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "ถูกใจ"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "ถูกใจแล้ว"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "ยกเลิก"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "ออกจากระบบ"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "เข้าสู่ระบบโดยใช้ Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "เข้าสู่ระบบในชื่อ %@"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "เข้าสู่ระบบ"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "ดำเนินการต่อด้วย Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "เข้าสู่ระบบด้วย Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "ออกจากระบบ"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "บัญชีผู้ใช้ Facebook ไม่ได้รับอนุญาตให้เข้าถึง ตรวจสอบการตั้งค่าของอุปกรณ์"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "ไม่สามารถเชื่อมต่อกับ Facebook ตรวจสอบการเชื่อมต่อเครือข่ายและลองอีกครั้ง"; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "เปลี่ยนรหัสผ่าน Facebook ของคุณแล้ว เพื่อยืนยันรหัสผ่านของคุณ ให้เปิด การตั้งค่า > Facebook แล้วแตะชื่อของคุณ"; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "บัญชีผู้ใช้ Facebook ไม่ได้รับการกำหนดค่าบนอุปกรณ์เครื่องนี้"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "บัญชีผู้ใช้ของคุณไม่ได้รับการยืนยัน โปรดเข้าสู่ระบบที่ www.facebook.com และทำตามคำแนะนำที่ปรากฏ"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "คุณไม่สามารถเข้าสู่ระบบของแอพได้ในตอนนี้ โปรดเข้าสู่ระบบที่ www.facebook.com และทำตามคำแนะนำที่ปรากฏ"; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "คุณเป็นฝ่ายควบคุม โปรดเลือกข้อมูลที่คุณต้องการแชร์ด้วยแอพ"; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "เข้าสู่ระบบ"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "ส่ง"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "แชร์"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "หากไม่ใช่คุณ"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "ยืนยันการเข้าสู่ระบบ"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "ดำเนินการต่อในชื่อ %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/tr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/tr.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..3d57b8f219 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/tr.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "%@ adresini ziyaret edin ve yukarıda görülen kodu girin."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Hesabınızı bağlamak için, mobil cihazınızda Facebook uygulamasını açın ve bildirimlerinizi kontrol edin."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- YA DA -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "Tamam"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "İptal"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Facebook hesabına yeniden bağlanmak için lütfen bu uygulamaya tekrar giriş yap."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "Tamam"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Sunucu geçici olarak meşgul. Lütfen tekrar dene."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Beğen"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Beğendin"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "İptal"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Çıkış Yap"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Facebook ile giriş yapıldı"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "%@ olarak giriş yapıldı"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Giriş yap"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Facebook ile Devam Et"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Facebook ile giriş yap"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Çıkış yap"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Facebook hesabına erişim izni verilmedi. Cihaz ayarlarını doğrula."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Facebook'a bağlanılamıyor. Ağ bağlantını kontrol edip tekrar dene."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Facebook şifren değiştirildi. Şifreni onaylamak için Ayarlar > Facebook'u aç ve adına dokunun."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook hesabı cihaz üzerinde yapılandırılmadı."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Hesabın onaylanmadı. Lütfen www.facebook.com adresine giriş yap ve verilen talimatları izle."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Şu an için uygulamalara giriş yapamazsın. Lütfen www.facebook.com adresine giriş yap ve verilen talimatları izle."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Kontrol sende. Uygulamalarla paylaşmak istediğin bilgileri seç."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Giriş Yap"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Gönder"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Paylaş"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Sen değil misin?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Girişi Onayla"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "%@ olarak devam et"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/vi.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/vi.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..e7b69465ef --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/vi.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "Truy cập %@ và nhập mã hiển thị ở trên."; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "Để kết nối tài khoản của bạn, hãy mở ứng dụng Facebook trên thiết bị di động và kiểm tra thông báo."; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- HOẶC -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "OK"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "Hủy"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "Vui lòng đăng nhập lại vào ứng dụng này để kết nối lại tài khoản Facebook của bạn."; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "OK"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "Máy chủ hiện đang bận, vui lòng thử lại sau."; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "Thích"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "Đã thích"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "Hủy"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "Đăng xuất"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "Đã đăng nhập bằng Facebook"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "Đã đăng nhập với tư cách là"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "Đăng nhập"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "Tiếp tục với Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "Đăng nhập bằng Facebook"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "Đăng xuất"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "Quyền truy cập chưa được cấp cho tài khoản Facebook. Xác minh thiết lập của thiết bị."; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "Không thể kết nối với Facebook. Vui lòng kiểm tra kết nối mạng của bạn và thử lại."; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "Mật khẩu Facebook của bạn đã thay đổi. Để xác nhận mật khẩu của bạn, hãy mở Thiết lập > Facebook và nhấn vào tên bạn."; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Tài khoản Facebook chưa được định cấu hình trên thiết bị."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "Tài khoản của bạn không được xác nhận. Vui lòng đăng nhập vào www.facebook.com và làm theo hướng dẫn được cung cấp."; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "Bạn không thể đăng nhập vào các ứng dụng lúc này. Vui lòng đăng nhập vào www.facebook.com và làm theo hướng dẫn được cung cấp."; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "Bạn đang có quyền kiểm soát - hãy chọn thông tin bạn muốn chia sẻ với ứng dụng."; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "Đăng nhập"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "Gửi"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "Chia sẻ"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "Không phải bạn?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "Xác nhận đăng nhập"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "Tiếp tục với tư cách %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..e153685846 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "请访问 %@ 并输入上方显示的验证码。"; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "要关联你的帐户,请在移动设备上打开 Facebook 应用,并查看通知。"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- 或者 -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "确定"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "取消"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "请再次登录此应用,以便重新连接您的 Facebook 帐户。"; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "确定"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "服务器暂时繁忙,请重试。"; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "赞"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "赞了"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "取消"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "退出"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "已使用 Facebook 登录"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "已以 %@ 身份登录"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "登录"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "继续使用 Facebook 登录"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "使用 Facebook 登录"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "退出"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "未授予该 Facebook 帐户访问权限。验证设备设置。"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "无法连接到 Facebook。检查网络连接并重试。"; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "您的 Facebook 密码已更改。要确认密码,请打开设置 > Facebook,并轻触您的姓名。"; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "未在设备上配置 Facebook 帐户。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "您的帐户未确认。请登录 www.facebook.com,并按照提供的说明操作。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "您此时不能登录应用。请登录 www.facebook.com,并按照提供的说明操作。"; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "一切任您掌控 — 选择您想通过应用分享的信息。"; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "登录"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "发送"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "分享"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "不是你?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "确认登录"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "以%@的身份继续"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_HK.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_HK.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..fcf0c3ed3b --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_HK.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "前往 %@ 並輸入上方的程式碼。"; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "若要連結您的帳戶,請在您的流動裝置上開啟 Facebook 應用程式並查看通知。"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- 或 -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "確定"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "取消"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "請再次登入此應用程式以重新連接您的 Facebook 帳戶。"; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "確定"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "伺服器暫時忙碌中,請再試一次。"; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "讚好"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "已讚好"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "取消"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "登出"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "使用 Facebook 登入"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "以 %@ 身分登入"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "登入"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "繼續使用 Facebook"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "使用 Facebook 登入"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "登出"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "沒有獲得 Facebook 帳戶的存取授權。確認裝置設定。"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "無法與 Facebook 連線。請檢查網絡連線,然後再試一次。"; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "您的 Facebook 密碼已經變更。要確認密碼,請開啟設定 > Facebook,然後點按您的名稱。"; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "Facebook 帳戶尚未在此裝置上設定。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "您的帳戶尚未確認。請登入 www.facebook.com 並依據指示操作。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "您現時無法登入應用程式。請登入 www.facebook.com 並依據指示操作。"; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "控制權在您 - 選擇您要與應用程式分享的資訊。"; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "登入"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "傳送"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "分享"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "這不是您?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "確認登入"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "以%@的身分繼續"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_TW.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_TW.lproj/FacebookSDK.strings new file mode 100644 index 0000000000..f02b0c86de --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_TW.lproj/FacebookSDK.strings @@ -0,0 +1,92 @@ +/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ +"DeviceLogin.LogInPrompt" = "請前往 %@ 並輸入上方顯示的代碼。"; + +/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ +"DeviceLogin.SmartLogInPrompt" = "若要連結帳號,請從行動裝置開啟 Facebook 應用程式,並查看通知。"; + +/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ +"DeviceLogin.SmartLogInOrLabel" = "- 或 -"; + +/* The title of the label to dismiss the alert when presenting user facing error messages */ +"ErrorRecovery.Alert.OK" = "是"; + +/* The title of the label to decline attempting error recovery */ +"ErrorRecovery.Cancel" = "取消"; + +/* The fallback message to display to recover invalidated tokens */ +"ErrorRecovery.Login.Suggestion" = "請重新登入此應用程式以重新連結您的 Facebook 帳號。"; + +/* The title of the label to start attempting error recovery */ +"ErrorRecovery.OK" = "是"; + +/* The fallback message to display to retry transient errors */ +"ErrorRecovery.Transient.Suggestion" = "伺服器暫時忙碌中,請再試一次。"; + +/* The label for the FBSDKLikeButton when the object is not currently liked. */ +"LikeButton.Like" = "讚"; + +/* The label for the FBSDKLikeButton when the object is currently liked. */ +"LikeButton.Liked" = "說讚"; + +/* The label for the FBSDKLoginButton action sheet to cancel logging out */ +"LoginButton.CancelLogout" = "取消"; + +/* The label for the FBSDKLoginButton action sheet to confirm logging out */ +"LoginButton.ConfirmLogOut" = "登出"; + +/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ +"LoginButton.LoggedIn" = "已使用 Facebook 登入"; + +/* The format string for the FBSDKLoginButton label when the user is logged in */ +"LoginButton.LoggedInAs" = "以 %@ 身分登入"; + +/* The short label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogIn" = "登入"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInContinue" = "繼續使用 Facebook 帳號"; + +/* The long label for the FBSDKLoginButton when the user is currently logged out */ +"LoginButton.LogInLong" = "使用 Facebook 登入"; + +/* The label for the FBSDKLoginButton when the user is currently logged in */ +"LoginButton.LogOut" = "登出"; + +/* The user facing error message when the app slider has been disabled and login fails. */ +"LoginError.SystemAccount.Disabled" = "尚未取得授權,無法存取 Facebook 帳號。請確認裝置設定。"; + +/* The user facing error message when the Accounts framework encounters a network error. */ +"LoginError.SystemAccount.Network" = "無法連線到 Facebook。請檢查網路連線,然後再試一次。"; + +/* The user facing error message when the device Facebook account password is incorrect and login fails. */ +"LoginError.SystemAccount.PasswordChange" = "您的 Facebook 密碼已經更改。若要確認您的密碼,請開啟「設定」>「Facebook」,然後點按您的姓名。"; + +/* The user facing error message when the device Facebook account is unavailable and login fails. */ +"LoginError.SystemAccount.Unavailable" = "尚未透過裝置設定 Facebook 帳號。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ +"LoginError.SystemAccount.UnconfirmedUser" = "您的帳號尚未確認。請登入 www.facebook.com,然後按照指示操作。"; + +/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ +"LoginError.SystemAccount.UserCheckpointed" = "您目前無法登入應用程式。請登入 www.facebook.com,然後按照指示操作。"; + +/* The message of the FBSDKLoginTooltipView */ +"LoginTooltip.Message" = "您可以全盤掌控!選擇您想和應用程式分享的資訊內容。"; + +/* Title of the web dialog that prompts the user to log in to Facebook. */ +"LoginWeb.LogInTitle" = "登入"; + +/* The label for FBSDKSendButton */ +"SendButton.Send" = "傳送"; + +/* The label for FBSDKShareButton */ +"ShareButton.Share" = "分享"; + +/* Prompts a person if this is their current account */ +"SmartLogin.NotYou" = "這不是您?"; + +/* Text on a button that a person presses to confirm that they are finished with the login experience */ +"SmartLogin.ConfirmationTitle" = "確認登入"; + +/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ +"SmartLogin.Continue" = "以 %@ 身分繼續"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/LICENSE b/iphone/Maps/Pods/FBSDKCoreKit/LICENSE new file mode 100644 index 0000000000..bdb9fc54be --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/LICENSE @@ -0,0 +1,17 @@ +Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. + +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. 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/iphone/Maps/Pods/FBSDKCoreKit/README.md b/iphone/Maps/Pods/FBSDKCoreKit/README.md new file mode 100644 index 0000000000..1d8dcaefa0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/README.md @@ -0,0 +1,60 @@ +# Facebook SDK for iOS + +[![Platforms](https://img.shields.io/cocoapods/p/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) +[![Build Status](https://travis-ci.org/facebook/facebook-objc-sdk.svg?branch=master)](https://travis-ci.org/facebook/facebook-objc-sdk) + +[![CocoaPods](https://img.shields.io/cocoapods/v/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +This open-source library allows you to integrate Facebook into your iOS app. + +Learn more about the provided samples, documentation, integrating the SDK into your app, accessing source code, and more +at https://developers.facebook.com/docs/ios + +NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookSDK + +## TRY IT OUT + +1. Download the SDK at or via CocoaPods by adding the 'FBSDKCoreKit', + 'FBSDKLoginKit', and 'FBSDKShareKit' pods. +2. Test your install: build and run the project at `~/Documents/FacebookSDK/Samples/Scrumptious/Scrumptious.xcodeproj` +3. Check-out the tutorials available online at: +4. Start coding! Visit for tutorials and reference documentation. + +## FEATURES + +- Login - +- Sharing - +- App Links - +- Graph API - +- Analytics - + +## GIVE FEEDBACK + +Please report bugs or issues to + +You can also join the [Facebook Developers Group on Facebook](https://www.facebook.com/groups/fbdevelopers/) or ask +questions on [Stack Overflow](http://facebook.stackoverflow.com) + +## LICENSE + +See the [LICENSE](LICENSE) file. + +## DEVELOPER TERMS + +- By enabling Facebook integrations, including through this SDK, you can share information with Facebook, including + information about people’s use of your app. Facebook will use information received in accordance with our + [Data Use Policy](https://www.facebook.com/about/privacy/), including to provide you with insights about the + effectiveness of your ads and the use of your app. These integrations also enable us and our partners to serve ads on + and off Facebook. +- You may limit your sharing of information with us by updating the Insights control in the developer tool + `https://developers.facebook.com/apps/{app_id}/settings/advanced`. +- If you use a Facebook integration, including to share information with us, you agree and confirm that you have + provided appropriate and sufficiently prominent notice to and obtained the appropriate consent from your users + regarding such collection, use, and disclosure (including, at a minimum, through your privacy policy). You further + agree that you will not share information with us about children under the age of 13. +- You agree to comply with all applicable laws and regulations and also agree to our Terms + , including our Platform Policies .and + Advertising Guidelines, as applicable . + +By using the Facebook SDK for iOS you agree to these terms. diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h new file mode 100644 index 0000000000..52c1de7600 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h @@ -0,0 +1,62 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/*! + @abstract Describes the initial response when starting the device login flow. + @discussion This is used by `FBSDKDeviceLoginManager`. + */ +@interface FBSDKDeviceLoginCodeInfo : NSObject + +/*! + @abstract There is no public initializer. + */ +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/*! + @abstract the unique id for this login flow. +*/ +@property (nonatomic, copy, readonly) NSString *identifier; + +/*! + @abstract the short "user_code" that should be presented to the user. +*/ +@property (nonatomic, copy, readonly) NSString *loginCode; + +/*! + @abstract the verification URL. +*/ +@property (nonatomic, copy, readonly) NSURL *verificationURL; + +/*! + @abstract the expiration date. +*/ +@property (nonatomic, copy, readonly) NSDate *expirationDate; + +/*! + @abstract the polling interval +*/ +@property (nonatomic, assign, readonly) NSUInteger pollingInterval; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m new file mode 100644 index 0000000000..edb94b3d00 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDeviceLoginCodeInfo+Internal.h" + +@implementation FBSDKDeviceLoginCodeInfo + +- (instancetype) initWithIdentifier:(NSString *)identifier + loginCode:(NSString *)loginCode + verificationURL:(NSURL *)verificationURL + expirationDate:(NSDate *)expirationDate + pollingInterval:(NSUInteger)pollingInterval +{ + if ((self = [super init])) { + _identifier = [identifier copy]; + _loginCode = [loginCode copy]; + _verificationURL = [verificationURL copy]; + _expirationDate = [expirationDate copy]; + _pollingInterval = pollingInterval; + } + return self; +} +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h new file mode 100644 index 0000000000..3f6f0360b2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h @@ -0,0 +1,105 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 FBSDKDeviceLoginManager; + +/*! + @abstract A delegate for `FBSDKDeviceLoginManager`. + */ +@protocol FBSDKDeviceLoginManagerDelegate + +/*! + @abstract Indicates the device login flow has started. You should parse `codeInfo` to + present the code to the user to enter. + @param loginManager the login manager instance. + @param codeInfo the code info data. + */ +- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager startedWithCodeInfo:(FBSDKDeviceLoginCodeInfo *)codeInfo; + +/*! + @abstract Indicates the device login flow has finished. + @param loginManager the login manager instance. + @param result the results of the login flow. + @param error the error, if available. + @discussion The flow can be finished if the user completed the flow, cancelled, or if the code has expired. + */ +- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager + completedWithResult:(nullable FBSDKDeviceLoginManagerResult *)result + error:(nullable NSError *)error; + +@end + +/*! + @abstract Use this class to perform a device login flow. + @discussion The device login flow starts by requesting a code from the device login API. + This class informs the delegate when this code is received. You should then present the + code to the user to enter. In the meantime, this class polls the device login API + periodically and informs the delegate of the results. + + See [Facebook Device Login](https://developers.facebook.com/docs/facebook-login/for-devices). + */ +@interface FBSDKDeviceLoginManager : NSObject + +/*! + @abstract Initializes a new instance. + @param permissions permissions to request. + */ +- (instancetype)initWithPermissions:(nullable NSArray *)permissions + enableSmartLogin:(BOOL)enableSmartLogin +NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/*! + @abstract the delegate. + */ +@property (nonatomic, weak) id delegate; + +/*! + @abstract the requested permissions. + */ +@property (nullable, nonatomic, copy, readonly) NSArray *permissions; + +/*! + @abstract the optional URL to redirect the user to after they complete the login. + @discussion the URL must be configured in your App Settings -> Advanced -> OAuth Redirect URIs + */ +@property (nullable, nonatomic, copy) NSURL *redirectURL; + +/*! + @abstract Starts the device login flow + @discussion This instance will retain self until the flow is finished or cancelled. + */ +- (void)start; + +/*! + @abstract Attempts to cancel the device login flow. + */ +- (void)cancel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m new file mode 100644 index 0000000000..f293c260f6 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m @@ -0,0 +1,235 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDeviceLoginManager.h" +#import "FBSDKDeviceLoginManagerResult+Internal.h" + +#import + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKDeviceLoginCodeInfo+Internal.h" +#import "FBSDKLoginConstants.h" + +static NSMutableArray *g_loginManagerInstances; + +@implementation FBSDKDeviceLoginManager { + FBSDKDeviceLoginCodeInfo *_codeInfo; + BOOL _isCancelled; + NSNetService * _loginAdvertisementService; + BOOL _isSmartLoginEnabled; +} + ++ (void)initialize +{ + if (self == [FBSDKDeviceLoginManager class]) { + g_loginManagerInstances = [NSMutableArray array]; + } +} + +- (instancetype)initWithPermissions:(NSArray *)permissions enableSmartLogin:(BOOL)enableSmartLogin +{ + if ((self = [super init])) { + _permissions = [permissions copy]; + _isSmartLoginEnabled = enableSmartLogin; + } + return self; +} + +- (void)start +{ + [FBSDKInternalUtility validateAppID]; + [g_loginManagerInstances addObject:self]; + + NSDictionary *parameters = @{ + @"scope": [self.permissions componentsJoinedByString:@","] ?: @"", + @"redirect_uri": self.redirectURL.absoluteString ?: @"", + FBSDK_DEVICE_INFO_PARAM: [FBSDKDeviceRequestsHelper getDeviceInfo], + }; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"device/login" + parameters:parameters + tokenString:[FBSDKInternalUtility validateRequiredClientAccessToken] + HTTPMethod:@"POST" + flags:FBSDKGraphRequestFlagNone]; + [request setGraphErrorRecoveryDisabled:YES]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (error) { + [self _processError:error]; + return; + } + + self->_codeInfo = [[FBSDKDeviceLoginCodeInfo alloc] + initWithIdentifier:result[@"code"] + loginCode:result[@"user_code"] + verificationURL:[NSURL URLWithString:result[@"verification_uri"]] + expirationDate:[[NSDate date] dateByAddingTimeInterval:[result[@"expires_in"] doubleValue]] + pollingInterval:[result[@"interval"] integerValue]]; + + if (self->_isSmartLoginEnabled) { + [FBSDKDeviceRequestsHelper startAdvertisementService:self->_codeInfo.loginCode + withDelegate:self + ]; + } + + [self.delegate deviceLoginManager:self startedWithCodeInfo:self->_codeInfo]; + [self _schedulePoll:self->_codeInfo.pollingInterval]; + }]; + } + +- (void)cancel +{ + [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; + _isCancelled = YES; + [g_loginManagerInstances removeObject:self]; +} + +#pragma mark - Private impl + +- (void)_notifyError:(NSError *)error +{ + [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; + [self.delegate deviceLoginManager:self + completedWithResult:nil + error:error]; + [g_loginManagerInstances removeObject:self]; +} + +- (void)_notifyToken:(NSString *)tokenString +{ + [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; + void(^completeWithResult)(FBSDKDeviceLoginManagerResult *) = ^(FBSDKDeviceLoginManagerResult *result) { + [self.delegate deviceLoginManager:self completedWithResult:result error:nil]; + [g_loginManagerInstances removeObject:self]; + }; + + if (tokenString) { + FBSDKGraphRequest *permissionsRequest = + [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" + parameters:@{@"fields": @"id,permissions"} + tokenString:tokenString + HTTPMethod:@"GET" + flags:FBSDKGraphRequestFlagDisableErrorRecovery]; + [permissionsRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id permissionRawResult, NSError *error) { + NSString *userID = permissionRawResult[@"id"]; + NSDictionary *permissionResult = permissionRawResult[@"permissions"]; + if (error || + !userID || + !permissionResult) { +#if TARGET_TV_OS + NSError *wrappedError = [NSError fbErrorWithDomain:FBSDKShareErrorDomain + code:FBSDKErrorTVOSUnknown + message:@"Unable to fetch permissions for token" + underlyingError:error]; +#else + NSError *wrappedError = [NSError fbErrorWithDomain:FBSDKLoginErrorDomain + code:FBSDKErrorUnknown + message:@"Unable to fetch permissions for token" + underlyingError:error]; +#endif + [self _notifyError:wrappedError]; + } else { + NSMutableSet *permissions = [NSMutableSet set]; + NSMutableSet *declinedPermissions = [NSMutableSet set]; + + [FBSDKInternalUtility extractPermissionsFromResponse:permissionResult + grantedPermissions:permissions + declinedPermissions:declinedPermissions]; + FBSDKAccessToken *accessToken = [[FBSDKAccessToken alloc] initWithTokenString:tokenString + permissions:permissions.allObjects + declinedPermissions:declinedPermissions.allObjects + appID:[FBSDKSettings appID] + userID:userID + expirationDate:nil + refreshDate:nil + dataAccessExpirationDate:nil]; + FBSDKDeviceLoginManagerResult *result = [[FBSDKDeviceLoginManagerResult alloc] initWithToken:accessToken + isCancelled:NO]; + completeWithResult(result); + } + }]; + } else { + _isCancelled = YES; + FBSDKDeviceLoginManagerResult *result = [[FBSDKDeviceLoginManagerResult alloc] initWithToken:nil isCancelled:YES]; + completeWithResult(result); + } +} + +- (void)_processError:(NSError *)error +{ + FBSDKDeviceLoginError code = [error.userInfo[FBSDKGraphRequestErrorGraphErrorSubcodeKey] unsignedIntegerValue]; + switch (code) { + case FBSDKDeviceLoginErrorAuthorizationPending: + [self _schedulePoll:_codeInfo.pollingInterval]; + break; + case FBSDKDeviceLoginErrorCodeExpired: + case FBSDKDeviceLoginErrorAuthorizationDeclined: + [self _notifyToken:nil]; + break; + case FBSDKDeviceLoginErrorExcessivePolling: + [self _schedulePoll:_codeInfo.pollingInterval * 2]; + default: + [self _notifyError:error]; + break; + } +} + +- (void)_schedulePoll:(NSUInteger)interval +{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(interval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + if (self->_isCancelled) { + return; + } + + NSDictionary *parameters = @{ @"code": self->_codeInfo.identifier }; + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"device/login_status" + parameters:parameters + tokenString:[FBSDKInternalUtility validateRequiredClientAccessToken] + HTTPMethod:@"POST" + flags:FBSDKGraphRequestFlagNone]; + [request setGraphErrorRecoveryDisabled:YES]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (self->_isCancelled) { + return; + } + if (error) { + [self _processError:error]; + } else { + NSString *tokenString = result[@"access_token"]; + if (tokenString) { + [self _notifyToken:tokenString]; + } else { + NSError *unknownError = [NSError fbErrorWithDomain:FBSDKLoginErrorDomain + code:FBSDKErrorUnknown + message:@"Device Login poll failed. No token nor error was found."]; + [self _notifyError:unknownError]; + } + } + }]; + }); +} + +- (void)netService:(NSNetService *)sender + didNotPublish:(NSDictionary *)errorDict +{ + // Only cleanup if the publish error is from our advertising service + if ([FBSDKDeviceRequestsHelper isDelegate:self forAdvertisementService:sender]) + { + [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h new file mode 100644 index 0000000000..ccce552328 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h @@ -0,0 +1,50 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/*! + @abstract Represents the results of the a device login flow. + @discussion This is used by `FBSDKDeviceLoginManager`. + */ +@interface FBSDKDeviceLoginManagerResult : NSObject + +/*! + @abstract There is no public initializer. + */ +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/*! + @abstract The token. + */ +@property (nullable, nonatomic, strong, readonly) FBSDKAccessToken *accessToken; + +/*! + @abstract Indicates if the login was cancelled by the user, or if the device + login code has expired. + */ +@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m new file mode 100644 index 0000000000..a95f1cfe46 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m @@ -0,0 +1,33 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDeviceLoginManagerResult+Internal.h" + +@implementation FBSDKDeviceLoginManagerResult + +- (instancetype)initWithToken:(FBSDKAccessToken *)token + isCancelled:(BOOL)cancelled +{ + if ((self = [super init])) { + _accessToken = token; + _cancelled = cancelled; + } + return self; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h new file mode 100644 index 0000000000..afa4029f3c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h @@ -0,0 +1,131 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKTooltipView.h" + +@protocol FBSDKLoginButtonDelegate; + +/** + NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) + Indicates the desired login tooltip behavior. + */ +typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) +{ + /** The default behavior. The tooltip will only be displayed if + the app is eligible (determined by possible server round trip) */ + FBSDKLoginButtonTooltipBehaviorAutomatic = 0, + /** Force display of the tooltip (typically for UI testing) */ + FBSDKLoginButtonTooltipBehaviorForceDisplay = 1, + /** Force disable. In this case you can still exert more refined + control by manually constructing a `FBSDKLoginTooltipView` instance. */ + FBSDKLoginButtonTooltipBehaviorDisable = 2 +}; + +/** + A button that initiates a log in or log out flow upon tapping. + + `FBSDKLoginButton` works with `[FBSDKAccessToken currentAccessToken]` to + determine what to display, and automatically starts authentication when tapped (i.e., + you do not need to manually subscribe action targets). + + Like `FBSDKLoginManager`, you should make sure your app delegate is connected to + `FBSDKApplicationDelegate` in order for the button's delegate to receive messages. + + `FBSDKLoginButton` has a fixed height of @c 30 pixels, but you may change the width. `initWithFrame:CGRectZero` + will size the button to its minimum frame. +*/ +@interface FBSDKLoginButton : FBSDKButton + +/** + The default audience to use, if publish permissions are requested at login time. + */ +@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; +/** + Gets or sets the delegate. + */ +@property (weak, nonatomic) IBOutlet id delegate; +/** + Gets or sets the login behavior to use + */ +@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; +/** + The publish permissions to request. + + + Use `defaultAudience` to specify the default audience to publish to. + Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + */ +@property (copy, nonatomic) NSArray *publishPermissions; +/** + The read permissions to request. + + + Note, that if read permissions are specified, then publish permissions should not be specified. This is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + */ +@property (copy, nonatomic) NSArray *readPermissions; +/** + Gets or sets the desired tooltip behavior. + */ +@property (assign, nonatomic) FBSDKLoginButtonTooltipBehavior tooltipBehavior; +/** + Gets or sets the desired tooltip color style. + */ +@property (assign, nonatomic) FBSDKTooltipColorStyle tooltipColorStyle; + +@end + +/** + @protocol + A delegate for `FBSDKLoginButton` + */ +@protocol FBSDKLoginButtonDelegate + +@required +/** + Sent to the delegate when the button was used to login. + @param loginButton the sender + @param result The results of the login + @param error The error (if any) from the login + */ +- (void)loginButton:(FBSDKLoginButton *)loginButton +didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result + error:(NSError *)error; + +/** + Sent to the delegate when the button was used to logout. + @param loginButton The button that was clicked. +*/ +- (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton; + +@optional +/** + Sent to the delegate when the button is about to login. + @param loginButton the sender + @return YES if the login should be allowed to proceed, NO otherwise + */ +- (BOOL)loginButtonWillLogin:(FBSDKLoginButton *)loginButton; + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m new file mode 100644 index 0000000000..672f70b5df --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m @@ -0,0 +1,333 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginButton.h" + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKLoginTooltipView.h" + +static const CGFloat kFBLogoSize = 16.0; +static const CGFloat kFBLogoLeftMargin = 6.0; +static const CGFloat kButtonHeight = 28.0; +static const CGFloat kRightMargin = 8.0; +static const CGFloat kPaddingBetweenLogoTitle = 8.0; + +@interface FBSDKLoginButton() +@end + +@implementation FBSDKLoginButton +{ + BOOL _hasShownTooltipBubble; + FBSDKLoginManager *_loginManager; + NSString *_userID; + NSString *_userName; +} + +#pragma mark - Object Lifecycle + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Properties + +- (FBSDKDefaultAudience)defaultAudience +{ + return _loginManager.defaultAudience; +} + +- (void)setDefaultAudience:(FBSDKDefaultAudience)defaultAudience +{ + _loginManager.defaultAudience = defaultAudience; +} + +- (FBSDKLoginBehavior)loginBehavior +{ + return _loginManager.loginBehavior; +} + +- (void)setLoginBehavior:(FBSDKLoginBehavior)loginBehavior +{ + _loginManager.loginBehavior = loginBehavior; +} + +- (UIFont *)defaultFont +{ + return [UIFont systemFontOfSize:13]; +} + +- (UIColor *)backgroundColor +{ + return [UIColor colorWithRed:66.0/255.0 green:103.0/255.0 blue:178.0/255.0 alpha:1.0]; +} + +#pragma mark - UIView + +- (void)didMoveToWindow +{ + [super didMoveToWindow]; + + if (self.window && + ((self.tooltipBehavior == FBSDKLoginButtonTooltipBehaviorForceDisplay) || !_hasShownTooltipBubble)) { + [self performSelector:@selector(_showTooltipIfNeeded) withObject:nil afterDelay:0]; + _hasShownTooltipBubble = YES; + } +} + +#pragma mark - Layout + +- (CGRect)imageRectForContentRect:(CGRect)contentRect +{ + CGFloat centerY = CGRectGetMidY(contentRect); + CGFloat y = centerY - (kFBLogoSize / 2.0); + return CGRectMake(kFBLogoLeftMargin, y, kFBLogoSize, kFBLogoSize); +} + +- (CGRect)titleRectForContentRect:(CGRect)contentRect +{ + if (self.hidden || CGRectIsEmpty(self.bounds)) { + return CGRectZero; + } + CGRect imageRect = [self imageRectForContentRect:contentRect]; + CGFloat titleX = CGRectGetMaxX(imageRect) + kPaddingBetweenLogoTitle; + CGRect titleRect = CGRectMake(titleX, 0, CGRectGetWidth(contentRect) - titleX - kRightMargin, CGRectGetHeight(contentRect)); + + return titleRect; +} + +- (void)layoutSubviews +{ + CGSize size = self.bounds.size; + CGSize longTitleSize = [self sizeThatFits:size title:[self _longLogInTitle]]; + NSString *title = (longTitleSize.width <= size.width ? + [self _longLogInTitle] : + [self _shortLogInTitle]); + if (![title isEqualToString:[self titleForState:UIControlStateNormal]]) { + [self setTitle:title forState:UIControlStateNormal]; + } + + [super layoutSubviews]; +} + +- (CGSize)sizeThatFits:(CGSize)size +{ + if (self.hidden) { + return CGSizeZero; + } + UIFont *font = self.titleLabel.font; + + CGSize selectedSize = FBSDKTextSize([self _logOutTitle], font, size, self.titleLabel.lineBreakMode); + CGSize normalSize = FBSDKTextSize([self _longLogInTitle], font, size, self.titleLabel.lineBreakMode); + if (normalSize.width > size.width) { + normalSize = FBSDKTextSize([self _shortLogInTitle], font, size, self.titleLabel.lineBreakMode); + } + + CGFloat titleWidth = MAX(normalSize.width, selectedSize.width); + CGFloat buttonWidth = kFBLogoLeftMargin + kFBLogoSize + kPaddingBetweenLogoTitle + titleWidth + kRightMargin; + return CGSizeMake(buttonWidth, kButtonHeight); +} + +#pragma mark - FBSDKButtonImpressionTracking + +- (NSDictionary *)analyticsParameters +{ + return nil; +} + +- (NSString *)impressionTrackingEventName +{ + return FBSDKAppEventNameFBSDKLoginButtonImpression; +} + +- (NSString *)impressionTrackingIdentifier +{ + return @"login"; +} + +#pragma mark - FBSDKButton + +- (void)configureButton +{ + _loginManager = [[FBSDKLoginManager alloc] init]; + + NSString *logInTitle = [self _shortLogInTitle]; + NSString *logOutTitle = [self _logOutTitle]; + + [self configureWithIcon:nil + title:logInTitle + backgroundColor:self.backgroundColor + highlightedColor:nil + selectedTitle:logOutTitle + selectedIcon:nil + selectedColor:self.backgroundColor + selectedHighlightedColor:nil]; + self.titleLabel.textAlignment = NSTextAlignmentCenter; + [self addConstraint:[NSLayoutConstraint constraintWithItem:self + attribute:NSLayoutAttributeHeight + relatedBy:NSLayoutRelationEqual + toItem:nil + attribute:NSLayoutAttributeNotAnAttribute + multiplier:1 + constant:28]]; + [self _updateContent]; + + [self addTarget:self action:@selector(_buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_accessTokenDidChangeNotification:) + name:FBSDKAccessTokenDidChangeNotification + object:nil]; +} + +#pragma mark - Helper Methods + +- (void)_accessTokenDidChangeNotification:(NSNotification *)notification +{ + if (notification.userInfo[FBSDKAccessTokenDidChangeUserIDKey] || notification.userInfo[FBSDKAccessTokenDidExpireKey]) { + [self _updateContent]; + } +} + +- (void)_buttonPressed:(id)sender +{ + [self logTapEventWithEventName:FBSDKAppEventNameFBSDKLoginButtonDidTap parameters:self.analyticsParameters]; + if ([FBSDKAccessToken currentAccessTokenIsActive]) { + NSString *title = nil; + + if (_userName) { + NSString *localizedFormatString = + NSLocalizedStringWithDefaultValue(@"LoginButton.LoggedInAs", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Logged in as %@", + @"The format string for the FBSDKLoginButton label when the user is logged in"); + title = [NSString localizedStringWithFormat:localizedFormatString, _userName]; + } else { + NSString *localizedLoggedIn = + NSLocalizedStringWithDefaultValue(@"LoginButton.LoggedIn", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Logged in using Facebook", + @"The fallback string for the FBSDKLoginButton label when the user name is not available yet"); + title = localizedLoggedIn; + } + NSString *cancelTitle = + NSLocalizedStringWithDefaultValue(@"LoginButton.CancelLogout", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Cancel", + @"The label for the FBSDKLoginButton action sheet to cancel logging out"); + NSString *logOutTitle = + NSLocalizedStringWithDefaultValue(@"LoginButton.ConfirmLogOut", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Log Out", + @"The label for the FBSDKLoginButton action sheet to confirm logging out"); + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title + message:nil + preferredStyle:UIAlertControllerStyleActionSheet]; + alertController.popoverPresentationController.sourceView = self; + alertController.popoverPresentationController.sourceRect = self.bounds; + UIAlertAction *cancel = [UIAlertAction actionWithTitle:cancelTitle + style:UIAlertActionStyleCancel + handler:nil]; + UIAlertAction *logout = [UIAlertAction actionWithTitle:logOutTitle + style:UIAlertActionStyleDestructive + handler:^(UIAlertAction * _Nonnull action) { + [self->_loginManager logOut]; + [self.delegate loginButtonDidLogOut:self]; + }]; + [alertController addAction:cancel]; + [alertController addAction:logout]; + UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; + [topMostViewController presentViewController:alertController + animated:YES + completion:nil]; + } else { + if ([self.delegate respondsToSelector:@selector(loginButtonWillLogin:)]) { + if (![self.delegate loginButtonWillLogin:self]) { + return; + } + } + + FBSDKLoginManagerRequestTokenHandler handler = ^(FBSDKLoginManagerLoginResult *result, NSError *error) { + if ([self.delegate respondsToSelector:@selector(loginButton:didCompleteWithResult:error:)]) { + [self.delegate loginButton:self didCompleteWithResult:result error:error]; + } + }; + + if (self.publishPermissions.count > 0) { + [_loginManager logInWithPublishPermissions:self.publishPermissions + fromViewController:[FBSDKInternalUtility viewControllerForView:self] + handler:handler]; + } else { + [_loginManager logInWithReadPermissions:self.readPermissions + fromViewController:[FBSDKInternalUtility viewControllerForView:self] + handler:handler]; + } + } +} + +- (NSString *)_logOutTitle +{ + return NSLocalizedStringWithDefaultValue(@"LoginButton.LogOut", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Log out", + @"The label for the FBSDKLoginButton when the user is currently logged in"); +} + +- (NSString *)_longLogInTitle +{ + return NSLocalizedStringWithDefaultValue(@"LoginButton.LogInContinue", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Continue with Facebook", + @"The long label for the FBSDKLoginButton when the user is currently logged out"); +} + +- (NSString *)_shortLogInTitle +{ + return NSLocalizedStringWithDefaultValue(@"LoginButton.LogIn", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Log in", + @"The short label for the FBSDKLoginButton when the user is currently logged out"); +} + +- (void)_showTooltipIfNeeded +{ + if ([FBSDKAccessToken currentAccessToken] || self.tooltipBehavior == FBSDKLoginButtonTooltipBehaviorDisable) { + return; + } else { + FBSDKLoginTooltipView *tooltipView = [[FBSDKLoginTooltipView alloc] init]; + tooltipView.colorStyle = self.tooltipColorStyle; + if (self.tooltipBehavior == FBSDKLoginButtonTooltipBehaviorForceDisplay) { + tooltipView.forceDisplay = YES; + } + [tooltipView presentFromView:self]; + } +} + +- (void)_updateContent +{ + BOOL accessTokenIsValid = [FBSDKAccessToken currentAccessTokenIsActive]; + self.selected = accessTokenIsValid; + if (accessTokenIsValid) { + if (![[FBSDKAccessToken currentAccessToken].userID isEqualToString:_userID]) { + FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name" + parameters:nil + flags:FBSDKGraphRequestFlagDisableErrorRecovery]; + [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + NSString *userID = [FBSDKTypeUtility stringValue:result[@"id"]]; + if (!error && [[FBSDKAccessToken currentAccessToken].userID isEqualToString:userID]) { + self->_userName = [FBSDKTypeUtility stringValue:result[@"name"]]; + self->_userID = userID; + } + }]; + } + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h new file mode 100644 index 0000000000..bcbf9d6697 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h @@ -0,0 +1,142 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#import + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +/** + The error domain for all errors from FBSDKLoginKit + + Error codes from the SDK in the range 300-399 are reserved for this domain. + */ +FOUNDATION_EXPORT NSErrorDomain const FBSDKLoginErrorDomain; + +#else + +/** + The error domain for all errors from FBSDKLoginKit + + Error codes from the SDK in the range 300-399 are reserved for this domain. + */ +FOUNDATION_EXPORT NSString *const FBSDKLoginErrorDomain; + +#endif + +#ifndef NS_ERROR_ENUM +#define NS_ERROR_ENUM(_domain, _name) \ +enum _name: NSInteger _name; \ +enum __attribute__((ns_error_domain(_domain))) _name: NSInteger +#endif + +/** + FBSDKLoginError + Error codes for FBSDKLoginErrorDomain. + */ +typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginError) +{ + /** + Reserved. + */ + FBSDKLoginErrorReserved = 300, + /** + The error code for unknown errors. + */ + FBSDKLoginErrorUnknown, + + /** + The user's password has changed and must log in again + */ + FBSDKLoginErrorPasswordChanged, + /** + The user must log in to their account on www.facebook.com to restore access + */ + FBSDKLoginErrorUserCheckpointed, + /** + Indicates a failure to request new permissions because the user has changed. + */ + FBSDKLoginErrorUserMismatch, + /** + The user must confirm their account with Facebook before logging in + */ + FBSDKLoginErrorUnconfirmedUser, + + /** + The Accounts framework failed without returning an error, indicating the + app's slider in the iOS Facebook Settings (device Settings -> Facebook -> App Name) has + been disabled. + */ + FBSDKLoginErrorSystemAccountAppDisabled, + /** + An error occurred related to Facebook system Account store + */ + FBSDKLoginErrorSystemAccountUnavailable, + /** + The login response was missing a valid challenge string. + */ + FBSDKLoginErrorBadChallengeString, +}; + +/** + FBSDKDeviceLoginError + Error codes for FBSDKDeviceLoginErrorDomain. + */ +typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKDeviceLoginError) { + /** + Your device is polling too frequently. + */ + FBSDKDeviceLoginErrorExcessivePolling = 1349172, + /** + User has declined to authorize your application. + */ + FBSDKDeviceLoginErrorAuthorizationDeclined = 1349173, + /** + User has not yet authorized your application. Continue polling. + */ + FBSDKDeviceLoginErrorAuthorizationPending = 1349174, + /** + The code you entered has expired. + */ + FBSDKDeviceLoginErrorCodeExpired = 1349152 +}; + +/** + Deprecated + */ +typedef NS_ENUM(NSInteger, FBSDKLoginErrorCode) +{ + FBSDKLoginReservedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorReserved instead") = FBSDKLoginErrorReserved, + FBSDKLoginUnknownErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUnknown instead"), + FBSDKLoginPasswordChangedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorPasswordChanged instead"), + FBSDKLoginUserCheckpointedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUserCheckpointed instead"), + FBSDKLoginUserMismatchErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUserMismatch instead"), + FBSDKLoginUnconfirmedUserErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUnconfirmedUser instead"), + FBSDKLoginSystemAccountAppDisabledErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorSystemAccountAppDisabled instead"), + FBSDKLoginSystemAccountUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorSystemAccountUnavailable instead"), + FBSDKLoginBadChallengeString DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorBadChallengeString instead"), +} DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginError instead"); + +/** + Deprecated + */ +typedef NS_ENUM(NSUInteger, FBSDKDeviceLoginErrorSubcode) { + FBSDKDeviceLoginExcessivePollingErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorExcessivePolling instead") = FBSDKDeviceLoginErrorExcessivePolling, + FBSDKDeviceLoginAuthorizationDeclinedErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorAuthorizationDeclined instead") = FBSDKDeviceLoginErrorAuthorizationDeclined, + FBSDKDeviceLoginAuthorizationPendingErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorAuthorizationPending instead") = FBSDKDeviceLoginErrorAuthorizationPending, + FBSDKDeviceLoginCodeExpiredErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorCodeExpired instead") = FBSDKDeviceLoginErrorCodeExpired +} DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginError instead"); diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m new file mode 100644 index 0000000000..0e6e6e5edb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m @@ -0,0 +1,29 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginConstants.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSErrorDomain const FBSDKLoginErrorDomain = @"com.facebook.sdk.login"; + +#else + +NSString *const FBSDKLoginErrorDomain = @"com.facebook.sdk.login"; + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h new file mode 100644 index 0000000000..aafc5779c6 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h @@ -0,0 +1,31 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +#if !TARGET_TV_OS +#import +#import +#import +#import +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h new file mode 100644 index 0000000000..7b579d08c8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h @@ -0,0 +1,227 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKLoginManagerLoginResult; + +/** + Describes the call back to the FBSDKLoginManager + @param result the result of the authorization + @param error the authorization error, if any. + */ +typedef void (^FBSDKLoginManagerRequestTokenHandler)(FBSDKLoginManagerLoginResult *result, NSError *error); + + +/** + FBSDKDefaultAudience enum + + Passed to open to indicate which default audience to use for sessions that post data to Facebook. + + + + Certain operations such as publishing a status or publishing a photo require an audience. When the user + grants an application permission to perform a publish operation, a default audience is selected as the + publication ceiling for the application. This enumerated value allows the application to select which + audience to ask the user to grant publish permission for. + */ +typedef NS_ENUM(NSUInteger, FBSDKDefaultAudience) +{ + /** Indicates that the user's friends are able to see posts made by the application */ + FBSDKDefaultAudienceFriends = 0, + /** Indicates that only the user is able to see posts made by the application */ + FBSDKDefaultAudienceOnlyMe, + /** Indicates that all Facebook users are able to see posts made by the application */ + FBSDKDefaultAudienceEveryone, +}; + +/** + FBSDKLoginBehavior enum + + Passed to the \c FBSDKLoginManager to indicate how Facebook Login should be attempted. + + + + Facebook Login authorizes the application to act on behalf of the user, using the user's + Facebook account. Usually a Facebook Login will rely on an account maintained outside of + the application, by the native Facebook application, the browser, or perhaps the device + itself. This avoids the need for a user to enter their username and password directly, and + provides the most secure and lowest friction way for a user to authorize the application to + interact with Facebook. + + The \c FBSDKLoginBehavior enum specifies which log-in methods may be used. The SDK + will determine the best behavior based on the current device (such as iOS version). + */ +typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior) +{ + /** + This is the default behavior, and indicates logging in through the native + Facebook app may be used. The SDK may still use Safari instead. + */ + FBSDKLoginBehaviorNative = 0, + /** + Attempts log in through the Safari or SFSafariViewController, if available. + */ + FBSDKLoginBehaviorBrowser, + /** + Attempts log in through the Facebook account currently signed in through + the device Settings. + @note If the account is not available to the app (either not configured by user or + as determined by the SDK) this behavior falls back to \c FBSDKLoginBehaviorNative. + */ + FBSDKLoginBehaviorSystemAccount, + /** + Attempts log in through a modal \c UIWebView pop up + + @note This behavior is only available to certain types of apps. Please check the Facebook + Platform Policy to verify your app meets the restrictions. + */ + FBSDKLoginBehaviorWeb, +}; + +/** + `FBSDKLoginManager` provides methods for logging the user in and out. + + `FBSDKLoginManager` works directly with `[FBSDKAccessToken currentAccessToken]` and + sets the "currentAccessToken" upon successful authorizations (or sets `nil` in case of `logOut`). + + You should check `[FBSDKAccessToken currentAccessToken]` before calling logIn* to see if there is + a cached token available (typically in your viewDidLoad). + + If you are managing your own token instances outside of "currentAccessToken", you will need to set + "currentAccessToken" before calling logIn* to authorize further permissions on your tokens. + */ +@interface FBSDKLoginManager : NSObject + +/** + Auth type + */ +@property (strong, nonatomic) NSString *authType; +/** + the default audience. + + you should set this if you intend to ask for publish permissions. + */ +@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; + +/** + the login behavior + */ +@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; + +/** + +@warning use logInWithReadPermissions:fromViewController:handler: instead + */ +- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +DEPRECATED_MSG_ATTRIBUTE("use logInWithReadPermissions:fromViewController:handler: instead"); + +/** + +@warning use logInWithPublishPermissions:fromViewController:handler: instead + */ +- (void)logInWithPublishPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +DEPRECATED_MSG_ATTRIBUTE("use logInWithPublishPermissions:fromViewController:handler: instead"); + +/** + Logs the user in or authorizes additional permissions. + @param permissions the optional array of permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param fromViewController the view controller to present from. If nil, the topmost view controller will be + automatically determined as best as possible. + @param handler the callback. + + Use this method when asking for read permissions. You should only ask for permissions when they + are needed and explain the value to the user. You can inspect the result.declinedPermissions to also + provide more information to the user if they decline permissions. + + This method will present UI the user. You typically should check if `[FBSDKAccessToken currentAccessToken]` + already contains the permissions you need before asking to reduce unnecessary app switching. For example, + you could make that check at viewDidLoad. + You can only do one login call at a time. Calling a login method before the completion handler is called + on a previous login will return an error. + */ +- (void)logInWithReadPermissions:(NSArray *)permissions + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerRequestTokenHandler)handler; + +/** + Logs the user in or authorizes additional permissions. + @param permissions the optional array of permissions. Note this is converted to NSSet and is only + an NSArray for the convenience of literal syntax. + @param fromViewController the view controller to present from. If nil, the topmost view controller will be + automatically determined as best as possible. + @param handler the callback. + + Use this method when asking for publish permissions. You should only ask for permissions when they + are needed and explain the value to the user. You can inspect the result.declinedPermissions to also + provide more information to the user if they decline permissions. + + This method will present UI the user. You typically should check if `[FBSDKAccessToken currentAccessToken]` + already contains the permissions you need before asking to reduce unnecessary app switching. For example, + you could make that check at viewDidLoad. + You can only do one login call at a time. Calling a login method before the completion handler is called + on a previous login will return an error. + */ +- (void)logInWithPublishPermissions:(NSArray *)permissions + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerRequestTokenHandler)handler; + + +/** + Requests user's permission to reathorize application's data access, after it has expired due to inactivity. + @param fromViewController the view controller to present from. If nil, the topmost view controller will be + automatically determined as best as possible. + @param handler the callback. + Use this method when you need to reathorize your app's access to user data via Graph API, after such an access has expired. + You should provide as much context to the user as possible as to why you need to reauthorize the access, the scope of + access being reathorized, and what added value your app provides when the access is reathorized. + You can inspect the result.declinedPermissions to also provide more information to the user if they decline permissions. + This method will present UI the user. You typically should call this if `[FBSDKAccessToken isDataAccessExpired]` returns true. + */ +- (void)reauthorizeDataAccess:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerRequestTokenHandler)handler; + +/** + Logs the user out + + This calls [FBSDKAccessToken setCurrentAccessToken:nil] and [FBSDKProfile setCurrentProfile:nil]. + */ +- (void)logOut; + +/** + @method + + Issues an asynchronous renewCredentialsForAccount call to the device's Facebook account store. + + @param handler The completion handler to call when the renewal is completed. This can be invoked on an arbitrary thread. + + + This can be used to explicitly renew account credentials and is provided as a convenience wrapper around + `[ACAccountStore renewCredentialsForAccount:completion]`. Note the method will not issue the renewal call if the the + Facebook account has not been set on the device, or if access had not been granted to the account (though the handler + wil receive an error). + + If the `[FBSDKAccessToken currentAccessToken]` was from the account store, a succesful renewal will also set + a new "currentAccessToken". + */ ++ (void)renewSystemCredentials:(void (^)(ACAccountCredentialRenewResult result, NSError *error))handler; + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m new file mode 100644 index 0000000000..0acccca8a1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m @@ -0,0 +1,885 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginManager+Internal.h" +#import "FBSDKLoginManagerLoginResult+Internal.h" + +#import +#import + +#import "_FBSDKLoginRecoveryAttempter.h" +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKLoginCompletion.h" +#import "FBSDKLoginConstants.h" +#import "FBSDKLoginError.h" +#import "FBSDKLoginManagerLogger.h" +#import "FBSDKLoginUtility.h" + +static int const FBClientStateChallengeLength = 20; +static NSString *const FBSDKExpectedChallengeKey = @"expected_login_challenge"; +static NSString *const FBSDKOauthPath = @"/dialog/oauth"; +static NSString *const SFVCCanceledLogin = @"com.apple.SafariServices.Authentication"; +static NSString *const ASCanceledLogin = @"com.apple.AuthenticationServices.WebAuthenticationSession"; + +typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { + FBSDKLoginManagerStateIdle, + // We received a call to start login. + FBSDKLoginManagerStateStart, + // We're calling out to the Facebook app or Safari to perform a log in + FBSDKLoginManagerStatePerformingLogin, +}; + +@implementation FBSDKLoginManager +{ + FBSDKLoginManagerRequestTokenHandler _handler; + FBSDKLoginManagerLogger *_logger; + FBSDKLoginManagerState _state; + FBSDKKeychainStore *_keychainStore; + BOOL _usedSFAuthSession; +} + ++ (void)initialize +{ + if (self == [FBSDKLoginManager class]) { + [_FBSDKLoginRecoveryAttempter class]; + [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:NULL]; + } +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + self.authType = @"rerequest"; + NSString *keyChainServiceIdentifier = [NSString stringWithFormat:@"com.facebook.sdk.loginmanager.%@", [NSBundle mainBundle].bundleIdentifier]; + _keychainStore = [[FBSDKKeychainStore alloc] initWithService:keyChainServiceIdentifier accessGroup:nil]; + } + return self; +} + +- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +{ + [self logInWithReadPermissions:permissions + fromViewController:nil + handler:handler]; +} +- (void)logInWithReadPermissions:(NSArray *)permissions + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerRequestTokenHandler)handler +{ + if (![self validateLoginStartState]) { + return; + } + [self assertPermissions:permissions]; + NSSet *permissionSet = [NSSet setWithArray:permissions]; + if (![FBSDKInternalUtility areAllPermissionsReadPermissions:permissionSet]) { + [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException + reason:@"Publish or manage permissions are not permitted to be requested with read permissions." + userInfo:nil]]; + } + self.fromViewController = fromViewController; + [self logInWithPermissions:permissionSet handler:handler]; +} + +- (void)logInWithPublishPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +{ + [self logInWithPublishPermissions:permissions + fromViewController:nil + handler:handler]; +} + +- (void)logInWithPublishPermissions:(NSArray *)permissions + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerRequestTokenHandler)handler +{ + if (![self validateLoginStartState]) { + return; + } + [self assertPermissions:permissions]; + NSSet *permissionSet = [NSSet setWithArray:permissions]; + if (![FBSDKInternalUtility areAllPermissionsPublishPermissions:permissionSet]) { + [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException + reason:@"Read permissions are not permitted to be requested with publish or manage permissions." + userInfo:nil]]; + } + self.fromViewController = fromViewController; + [self logInWithPermissions:permissionSet handler:handler]; +} + +- (void)reauthorizeDataAccess:(UIViewController *)fromViewController handler:(FBSDKLoginManagerRequestTokenHandler)handler +{ + if (![self validateLoginStartState]) { + return; + } + self.fromViewController = fromViewController; + [self reauthorizeDataAccess:handler]; +} + + +- (void)logOut +{ + [FBSDKAccessToken setCurrentAccessToken:nil]; + [FBSDKProfile setCurrentProfile:nil]; +} + ++ (void)renewSystemCredentials:(void (^)(ACAccountCredentialRenewResult result, NSError *error))handler +{ + FBSDKSystemAccountStoreAdapter *adapter = [FBSDKSystemAccountStoreAdapter sharedInstance]; + + if (!adapter.accountType) { + handler(ACAccountCredentialRenewResultFailed, [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorSystemAccountUnavailable]); + } else if (!adapter.accountType.accessGranted) { + handler(ACAccountCredentialRenewResultFailed, [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorSystemAccountAppDisabled]); + } else { + [[FBSDKSystemAccountStoreAdapter sharedInstance] renewSystemAuthorization:handler]; + } +} + +#pragma mark - Private + +- (void)raiseLoginException:(NSException *)exception +{ + _state = FBSDKLoginManagerStateIdle; + [exception raise]; +} + +- (void)handleImplicitCancelOfLogIn +{ + FBSDKLoginManagerLoginResult *result = [[FBSDKLoginManagerLoginResult alloc] initWithToken:nil + isCancelled:YES + grantedPermissions:nil + declinedPermissions:nil]; + [result addLoggingExtra:@YES forKey:@"implicit_cancel"]; + [self invokeHandler:result error:nil]; +} + +- (BOOL)validateLoginStartState +{ + switch (_state) { + case FBSDKLoginManagerStateStart: { + if (self->_usedSFAuthSession) { + // Using SFAuthenticationSession makes an interestitial dialog that blocks the app, but in certain situations such as + // screen lock it can be dismissed and have the control returned to the app without invoking the completionHandler. + // In this case, the viewcontroller has the control back and tried to reinvoke the login. This is acceptable behavior + // and we should pop up the dialog again + return YES; + } + + NSString *errorStr = @"** WARNING: You are trying to start a login while a previous login has not finished yet." + "This is unsupported behavior. You should wait until the previous login handler gets called to start a new login."; + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"%@", errorStr]; + return NO; + } + case FBSDKLoginManagerStatePerformingLogin:{ + [self handleImplicitCancelOfLogIn]; + return YES; + } + case FBSDKLoginManagerStateIdle: + _state = FBSDKLoginManagerStateStart; + return YES; + } +} + +- (BOOL)isPerformingLogin +{ + return _state == FBSDKLoginManagerStatePerformingLogin; +} + +- (void)assertPermissions:(NSArray *)permissions +{ + for (NSString *permission in permissions) { + if (![permission isKindOfClass:[NSString class]]) { + [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException + reason:@"Permissions must be string values." + userInfo:nil]]; + } + if ([permission rangeOfString:@","].location != NSNotFound) { + [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException + reason:@"Permissions should each be specified in separate string values in the array." + userInfo:nil]]; + } + } +} + +- (void)completeAuthentication:(FBSDKLoginCompletionParameters *)parameters expectChallenge:(BOOL)expectChallenge +{ + NSSet *recentlyGrantedPermissions = nil; + NSSet *recentlyDeclinedPermissions = nil; + FBSDKLoginManagerLoginResult *result = nil; + NSError *error = parameters.error; + + NSString *tokenString = parameters.accessTokenString; + BOOL cancelled = (tokenString == nil); + + BOOL challengePassed = YES; + if (expectChallenge) { + // Perform this check early so we be sure to clear expected challenge in all cases. + NSString *challengeReceived = parameters.challenge; + NSString *challengeExpected = [[self loadExpectedChallenge] stringByReplacingOccurrencesOfString:@"+" withString:@" "]; + if (![challengeExpected isEqualToString:challengeReceived]) { + challengePassed = NO; + } + + // Don't overwrite an existing error, if any. + if (!error && !cancelled && !challengePassed) { + error = [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorBadChallengeString]; + } + } + + [self storeExpectedChallenge:nil]; + + if (!error) { + if (!cancelled) { + NSSet *grantedPermissions = parameters.permissions; + NSSet *declinedPermissions = parameters.declinedPermissions; + + [self determineRecentlyGrantedPermissions:&recentlyGrantedPermissions + recentlyDeclinedPermissions:&recentlyDeclinedPermissions + forGrantedPermission:grantedPermissions + declinedPermissions:declinedPermissions]; + + if (recentlyGrantedPermissions.count > 0) { + FBSDKAccessToken *token = [[FBSDKAccessToken alloc] initWithTokenString:tokenString + permissions:grantedPermissions.allObjects + declinedPermissions:declinedPermissions.allObjects + appID:parameters.appID + userID:parameters.userID + expirationDate:parameters.expirationDate + refreshDate:[NSDate date] + dataAccessExpirationDate:parameters.dataAccessExpirationDate]; + result = [[FBSDKLoginManagerLoginResult alloc] initWithToken:token + isCancelled:NO + grantedPermissions:recentlyGrantedPermissions + declinedPermissions:recentlyDeclinedPermissions]; + + if ([FBSDKAccessToken currentAccessToken]) { + [self validateReauthentication:[FBSDKAccessToken currentAccessToken] withResult:result]; + // in a reauth, short circuit and let the login handler be called when the validation finishes. + return; + } + } + } + + if (cancelled || recentlyGrantedPermissions.count == 0) { + NSSet *declinedPermissions = nil; + if ([FBSDKAccessToken currentAccessToken] != nil) { + if (parameters.isSystemAccount) { + // If a System Account reauthorization was cancelled by the user tapping Don't Allow + // then add the declined permissions to the login result. The Accounts framework + // doesn't register the decline with Facebook, which is why we don't update the + // access token. + declinedPermissions = parameters.declinedPermissions; + } else { + // Always include the list of declined permissions from this login request + // if an access token is already cached by the SDK + declinedPermissions = recentlyDeclinedPermissions; + } + } + + result = [[FBSDKLoginManagerLoginResult alloc] initWithToken:nil + isCancelled:cancelled + grantedPermissions:nil + declinedPermissions:declinedPermissions]; + } + } + + if (result.token) { + [FBSDKAccessToken setCurrentAccessToken:result.token]; + } + + [self invokeHandler:result error:error]; +} + +- (void)determineRecentlyGrantedPermissions:(NSSet **)recentlyGrantedPermissionsRef + recentlyDeclinedPermissions:(NSSet **)recentlyDeclinedPermissionsRef + forGrantedPermission:(NSSet *)grantedPermissions + declinedPermissions:(NSSet *)declinedPermissions +{ + NSMutableSet *recentlyGrantedPermissions = [grantedPermissions mutableCopy]; + NSSet *previouslyGrantedPermissions = ([FBSDKAccessToken currentAccessToken] ? + [FBSDKAccessToken currentAccessToken].permissions : + nil); + if (previouslyGrantedPermissions.count > 0) { + // If there were no requested permissions for this auth - treat all permissions as granted. + // Otherwise this is a reauth, so recentlyGranted should be a subset of what was requested. + if (_requestedPermissions.count != 0) { + [recentlyGrantedPermissions intersectSet:_requestedPermissions]; + } + } + + NSMutableSet *recentlyDeclinedPermissions = [_requestedPermissions mutableCopy]; + [recentlyDeclinedPermissions intersectSet:declinedPermissions]; + + if (recentlyGrantedPermissionsRef != NULL) { + *recentlyGrantedPermissionsRef = [recentlyGrantedPermissions copy]; + } + if (recentlyDeclinedPermissionsRef != NULL) { + *recentlyDeclinedPermissionsRef = [recentlyDeclinedPermissions copy]; + } +} + +- (void)invokeHandler:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error +{ + [_logger endLoginWithResult:result error:error]; + [_logger endSession]; + _logger = nil; + _state = FBSDKLoginManagerStateIdle; + + if (_handler) { + FBSDKLoginManagerRequestTokenHandler handler = _handler; + _handler(result, error); + if (handler == _handler) { + _handler = nil; + } else { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"** WARNING: You are requesting permissions inside the completion block of an existing login." + "This is unsupported behavior. You should request additional permissions only when they are needed, such as requesting for publish_actions" + "when the user performs a sharing action."]; + } + } +} + +- (NSString *)loadExpectedChallenge +{ + return [_keychainStore stringForKey:FBSDKExpectedChallengeKey]; +} + +- (NSDictionary *)logInParametersWithPermissions:(NSSet *)permissions serverConfiguration:(FBSDKServerConfiguration *)serverConfiguration +{ + [FBSDKInternalUtility validateURLSchemes]; + + NSMutableDictionary *loginParams = [NSMutableDictionary dictionary]; + loginParams[@"client_id"] = [FBSDKSettings appID]; + loginParams[@"response_type"] = @"token,signed_request"; + loginParams[@"redirect_uri"] = @"fbconnect://success"; + loginParams[@"display"] = @"touch"; + loginParams[@"sdk"] = @"ios"; + loginParams[@"return_scopes"] = @"true"; + loginParams[@"sdk_version"] = FBSDK_VERSION_STRING; + loginParams[@"fbapp_pres"] = @([FBSDKInternalUtility isFacebookAppInstalled]); + loginParams[@"auth_type"] = self.authType; + loginParams[@"logging_token"] = serverConfiguration.loggingToken; + + [FBSDKInternalUtility dictionary:loginParams setObject:[FBSDKSettings appURLSchemeSuffix] forKey:@"local_client_id"]; + [FBSDKInternalUtility dictionary:loginParams setObject:[FBSDKLoginUtility stringForAudience:self.defaultAudience] forKey:@"default_audience"]; + [FBSDKInternalUtility dictionary:loginParams setObject:[permissions.allObjects componentsJoinedByString:@","] forKey:@"scope"]; + + NSString *expectedChallenge = [FBSDKLoginManager stringForChallenge]; + NSDictionary *state = @{@"challenge": [FBSDKUtility URLEncode:expectedChallenge]}; + loginParams[@"state"] = [FBSDKInternalUtility JSONStringForObject:state error:NULL invalidObjectHandler:nil]; + + [self storeExpectedChallenge:expectedChallenge]; + + return loginParams; +} + +- (void)logInWithPermissions:(NSSet *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +{ + FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; + _logger = [[FBSDKLoginManagerLogger alloc] initWithLoggingToken:serverConfiguration.loggingToken]; + + _handler = [handler copy]; + _requestedPermissions = permissions; + + [_logger startSessionForLoginManager:self]; + + [self logInWithBehavior:self.loginBehavior]; +} + +- (void)reauthorizeDataAccess:(FBSDKLoginManagerRequestTokenHandler)handler +{ + FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; + _logger = [[FBSDKLoginManagerLogger alloc] initWithLoggingToken:serverConfiguration.loggingToken]; + _handler = [handler copy]; + // Don't need to pass permissions for data reauthorization. + _requestedPermissions = [NSSet set]; + self.authType = @"reauthorize"; + [_logger startSessionForLoginManager:self]; + [self logInWithBehavior:self.loginBehavior]; +} + +- (void)logInWithBehavior:(FBSDKLoginBehavior)loginBehavior +{ + FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; + NSDictionary *loginParams = [self logInParametersWithPermissions:_requestedPermissions serverConfiguration:serverConfiguration]; + self->_usedSFAuthSession = NO; + + void(^completion)(BOOL, NSString *, NSError *) = ^void(BOOL didPerformLogIn, NSString *authMethod, NSError *error) { + if (didPerformLogIn) { + [self->_logger startAuthMethod:authMethod]; + self->_state = FBSDKLoginManagerStatePerformingLogin; + } else if ([error.domain isEqualToString:SFVCCanceledLogin] || + [error.domain isEqualToString:ASCanceledLogin]) { + [self handleImplicitCancelOfLogIn]; + } else { + if (!error) { + error = [NSError errorWithDomain:FBSDKLoginErrorDomain code:FBSDKLoginErrorUnknown userInfo:nil]; + } + [self invokeHandler:nil error:error]; + } + }; + + switch (loginBehavior) { + case FBSDKLoginBehaviorNative: { + if ([FBSDKInternalUtility isFacebookAppInstalled]) { + BOOL useNativeDialog = [serverConfiguration useNativeDialogForDialogName:FBSDKDialogConfigurationNameLogin]; + if (useNativeDialog) { + [self performNativeLogInWithParameters:loginParams handler:^(BOOL openedURL, NSError *openedURLError) { + if (openedURLError) { + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + formatString:@"FBSDKLoginBehaviorNative failed : %@\nTrying FBSDKLoginBehaviorBrowser", openedURLError]; + } + if (openedURL) { + completion(YES, FBSDKLoginManagerLoggerAuthMethod_Native, openedURLError); + } else { + [self logInWithBehavior:FBSDKLoginBehaviorBrowser]; + } + }]; + } else { + [self logInWithBehavior:FBSDKLoginBehaviorBrowser]; + } + break; + } + // Intentional fall through. Switching to browser login instead. + } + case FBSDKLoginBehaviorBrowser: { + [self performBrowserLogInWithParameters:loginParams handler:^(BOOL openedURL, + NSString *authMethod, + NSError *openedURLError) { + completion(openedURL, authMethod, openedURLError); + }]; + break; + } + case FBSDKLoginBehaviorSystemAccount: { + if (serverConfiguration.isSystemAuthenticationEnabled) { + [self beginSystemLogIn]; + } else { + [self logInWithBehavior:FBSDKLoginBehaviorNative]; + } + completion(YES, FBSDKLoginManagerLoggerAuthMethod_System, nil); + break; + } + case FBSDKLoginBehaviorWeb: + [self performWebLogInWithParameters:loginParams handler:^(BOOL openedURL, NSError *openedURLError) { + completion(openedURL, FBSDKLoginManagerLoggerAuthMethod_Webview, openedURLError); + }]; + break; + } +} + +- (void)storeExpectedChallenge:(NSString *)challengeExpected +{ + [_keychainStore setString:challengeExpected + forKey:FBSDKExpectedChallengeKey + accessibility:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly]]; +} + ++ (NSString *)stringForChallenge { + NSString *challenge = [FBSDKCrypto randomString:FBClientStateChallengeLength]; + + return [challenge stringByReplacingOccurrencesOfString:@"+" withString:@"="]; +} + +- (void)validateReauthentication:(FBSDKAccessToken *)currentToken withResult:(FBSDKLoginManagerLoginResult *)loginResult +{ + FBSDKGraphRequest *requestMe = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" + parameters:@{@"fields":@""} + tokenString:loginResult.token.tokenString + HTTPMethod:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + [requestMe startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + NSString *actualID = result[@"id"]; + if ([currentToken.userID isEqualToString:actualID]) { + [FBSDKAccessToken setCurrentAccessToken:loginResult.token]; + [self invokeHandler:loginResult error:nil]; + } else { + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + [FBSDKInternalUtility dictionary:userInfo setObject:error forKey:NSUnderlyingErrorKey]; + NSError *resultError = [NSError errorWithDomain:FBSDKLoginErrorDomain + code:FBSDKLoginErrorUserMismatch + userInfo:userInfo]; + [self invokeHandler:nil error:resultError]; + } + }]; +} + +#pragma mark - Test Methods + +- (void)setHandler:(FBSDKLoginManagerRequestTokenHandler)handler +{ + _handler = [handler copy]; +} + +- (void)setRequestedPermissions:(NSSet *)requestedPermissions +{ + _requestedPermissions = [requestedPermissions copy]; +} + +@end + +#pragma mark - + +@implementation FBSDKLoginManager (Native) + +- (void)performNativeLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))handler +{ + [_logger willAttemptAppSwitchingBehavior]; + loginParams = [_logger parametersWithTimeStampAndClientState:loginParams forAuthMethod:FBSDKLoginManagerLoggerAuthMethod_Native]; + + NSString *scheme = ([FBSDKSettings appURLSchemeSuffix] ? @"fbauth2" : @"fbauth"); + NSMutableDictionary *mutableParams = [NSMutableDictionary dictionaryWithDictionary:loginParams]; + mutableParams[@"legacy_override"] = FBSDK_TARGET_PLATFORM_VERSION; + NSError *error; + NSURL *authURL = [FBSDKInternalUtility URLWithScheme:scheme host:@"authorize" path:@"" queryParameters:mutableParams error:&error]; + + NSDate *start = [NSDate date]; + [[FBSDKBridgeAPI sharedInstance] openURL:authURL sender:self handler:^(BOOL openedURL, NSError *anError) { + [self->_logger logNativeAppDialogResult:openedURL dialogDuration:-start.timeIntervalSinceNow]; + if (handler) { + handler(openedURL, anError); + } + }]; +} + +// change bool to auth method string. +- (void)performBrowserLogInWithParameters:(NSDictionary *)loginParams + handler:(void(^)(BOOL didOpen, NSString *authMethod, NSError *error))handler +{ + [_logger willAttemptAppSwitchingBehavior]; + + FBSDKServerConfiguration *configuration = [FBSDKServerConfigurationManager cachedServerConfiguration]; + BOOL useSafariViewController = [configuration useSafariViewControllerForDialogName:FBSDKDialogConfigurationNameLogin]; + NSString *authMethod = (useSafariViewController ? FBSDKLoginManagerLoggerAuthMethod_SFVC : FBSDKLoginManagerLoggerAuthMethod_Browser); + + loginParams = [_logger parametersWithTimeStampAndClientState:loginParams forAuthMethod:authMethod]; + + NSURL *authURL = nil; + NSError *error; + NSURL *redirectURL = [FBSDKInternalUtility appURLWithHost:@"authorize" path:nil queryParameters:nil error:&error]; + if (!error) { + NSMutableDictionary *browserParams = [loginParams mutableCopy]; + [FBSDKInternalUtility dictionary:browserParams + setObject:redirectURL + forKey:@"redirect_uri"]; + authURL = [FBSDKInternalUtility facebookURLWithHostPrefix:@"m." + path:FBSDKOauthPath + queryParameters:browserParams + error:&error]; + } + if (authURL) { + void(^handlerWrapper)(BOOL, NSError*) = ^(BOOL didOpen, NSError *anError) { + if (handler) { + handler(didOpen, authMethod, anError); + } + }; + + if (useSafariViewController) { + // Note based on above, authURL must be a http scheme. If that changes, add a guard, otherwise SFVC can throw + self->_usedSFAuthSession = YES; + [[FBSDKBridgeAPI sharedInstance] openURLWithSafariViewController:authURL + sender:self + fromViewController:self.fromViewController + handler:handlerWrapper]; + } else { + [[FBSDKBridgeAPI sharedInstance] openURL:authURL sender:self handler:handlerWrapper]; + } + } else { + error = error ?: [NSError fbErrorWithCode:FBSDKLoginErrorUnknown message:@"Failed to construct oauth browser url"]; + if (handler) { + handler(NO, nil, error); + } + } +} + +- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation +{ + BOOL isFacebookURL = [self canOpenURL:url forApplication:application sourceApplication:sourceApplication annotation:annotation]; + + if (!isFacebookURL && [self isPerformingLogin]) { + [self handleImplicitCancelOfLogIn]; + } + + if (isFacebookURL) { + NSDictionary *urlParameters = [FBSDKLoginUtility queryParamsFromLoginURL:url]; + id completer = [[FBSDKLoginURLCompleter alloc] initWithURLParameters:urlParameters appID:[FBSDKSettings appID]]; + + if (_logger == nil) { + _logger = [FBSDKLoginManagerLogger loggerFromParameters:urlParameters]; + } + + // any necessary strong reference is maintained by the FBSDKLoginURLCompleter handler + [completer completeLogIn:self withHandler:^(FBSDKLoginCompletionParameters *parameters) { + [self completeAuthentication:parameters expectChallenge:YES]; + }]; + } + + return isFacebookURL; +} + +- (BOOL)canOpenURL:(NSURL *)url + forApplication:(UIApplication *)application + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation +{ + // verify the URL is intended as a callback for the SDK's log in + BOOL isFacebookURL = [url.scheme hasPrefix:[NSString stringWithFormat:@"fb%@", [FBSDKSettings appID]]] && + [url.host isEqualToString:@"authorize"]; + + BOOL isExpectedSourceApplication = [sourceApplication hasPrefix:@"com.facebook"] || [sourceApplication hasPrefix:@"com.apple"] || [sourceApplication hasPrefix:@"com.burbn"]; + + return isFacebookURL && isExpectedSourceApplication; +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + if ([self isPerformingLogin]) { + [self handleImplicitCancelOfLogIn]; + } +} + +- (BOOL)isAuthenticationURL:(NSURL *)url +{ + return [url.path hasSuffix:FBSDKOauthPath]; +} + +@end + +@implementation FBSDKLoginManager (Accounts) + +- (void)beginSystemLogIn +{ + // First, we need to validate the current access token. The user may have uninstalled the + // app, changed their password, etc., or the access token may have expired, which + // requires us to renew the account before asking for additional permissions. + NSString *accessTokenString = [FBSDKSystemAccountStoreAdapter sharedInstance].accessTokenString; + if (accessTokenString.length > 0) { + FBSDKGraphRequest *meRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" + parameters:@{ @"fields" : @"id" } + tokenString:accessTokenString + HTTPMethod:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + [meRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { + if (!error) { + // If there was no error, make an explicit renewal call anyway to cover cases where user has revoked some read permission like email. + // Otherwise, iOS system account may continue to think email was granted and never prompt UI again. + [[FBSDKSystemAccountStoreAdapter sharedInstance] renewSystemAuthorization:^(ACAccountCredentialRenewResult renewResult, NSError *renewError) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self performSystemLogIn]; + }); + }]; + } else { + // If there was an error, FBSDKGraphRequestConnection would have already done work already (like renewal calls) + [self performSystemLogIn]; + } + }]; + } else { + [self performSystemLogIn]; + } +} + +- (void)performSystemLogIn +{ + if (![FBSDKSystemAccountStoreAdapter sharedInstance].accountType) { + // There is no Facebook system account type. Fallback to Native behavior + [self fallbackToNativeBehavior]; + return; + } + BOOL isReauthorize = [FBSDKAccessToken currentAccessToken] != nil; + + // app may be asking for nothing, but we will always have a set here + NSMutableSet *permissionsToUse = _requestedPermissions ? [_requestedPermissions mutableCopy] : [NSMutableSet set]; + // Only add basic info if this is not reauthorize case, if it is the app should already have basic info ToSed + if (!isReauthorize) { + // Ensure that basic info is among the permissions requested so that the app will install if necessary. + // "email" is used as a proxy for basic_info permission. + [permissionsToUse addObject:@"email"]; + } + + [permissionsToUse removeObject:@"public_profile"]; + [permissionsToUse removeObject:@"user_friends"]; + + NSString *audience; + switch (self.defaultAudience) { + case FBSDKDefaultAudienceOnlyMe: + audience = fbsdkdfl_ACFacebookAudienceOnlyMe(); + break; + case FBSDKDefaultAudienceFriends: + audience = fbsdkdfl_ACFacebookAudienceFriends(); + break; + case FBSDKDefaultAudienceEveryone: + audience = fbsdkdfl_ACFacebookAudienceEveryone(); + break; + default: + audience = nil; + } + + uint64_t timePriorToSystemAuthUI = [FBSDKInternalUtility currentTimeInMilliseconds]; + + // the FBSDKSystemAccountStoreAdapter completion handler maintains the strong reference during the the asynchronous operation + [[FBSDKSystemAccountStoreAdapter sharedInstance] + requestAccessToFacebookAccountStore:permissionsToUse + defaultAudience:audience + isReauthorize:isReauthorize + appID:[FBSDKSettings appID] + handler:^(NSString *oauthToken, NSError *accountStoreError) { + + // There doesn't appear to be a reliable way to determine whether UI was shown or + // whether the cached token was sufficient. So we use a timer heuristic assuming that + // human response time couldn't complete a dialog in under the interval given here, but + // the process will return here fast enough if the token is cached. The threshold was + // chosen empirically, so there may be some edge cases that are false negatives or + // false positives. + BOOL didShowDialog = [FBSDKInternalUtility currentTimeInMilliseconds] - timePriorToSystemAuthUI > 350; + BOOL isUnTOSedDevice = !oauthToken && accountStoreError.code == ACErrorAccountNotFound; + [self->_logger systemAuthDidShowDialog:didShowDialog isUnTOSedDevice:isUnTOSedDevice]; + + if (accountStoreError && [FBSDKSystemAccountStoreAdapter sharedInstance].forceBlockingRenew) { + accountStoreError = [NSError fbErrorForSystemPasswordChange:accountStoreError]; + } + if (!oauthToken && !accountStoreError) { + // This means iOS did not give an error nor granted, even after a renew. In order to + // surface this to users, stuff in our own error that can be inspected. + accountStoreError = [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorSystemAccountAppDisabled]; + } + + FBSDKLoginManagerSystemAccountState *state = [[FBSDKLoginManagerSystemAccountState alloc] init]; + state.didShowDialog = didShowDialog; + state.reauthorize = isReauthorize; + state.unTOSedDevice = isUnTOSedDevice; + + [self continueSystemLogInWithTokenString:oauthToken error:accountStoreError state:state]; + }]; +} + +- (void)continueSystemLogInWithTokenString:(NSString *)oauthToken error:(NSError *)accountStoreError state:(FBSDKLoginManagerSystemAccountState *)state +{ + id completer = nil; + + if (!oauthToken && accountStoreError.code == ACErrorAccountNotFound) { + // Even with the Accounts framework we use the Facebook app or Safari to log in if + // the user has not signed in. This condition can only be detected by attempting to + // log in because the framework does not otherwise indicate whether a Facebook account + // exists on the device unless the user has granted the app permissions. + + // Do this asynchronously so the logger correctly notes the system account was skipped + dispatch_async(dispatch_get_main_queue(), ^{ + [self fallbackToNativeBehavior]; + }); + } else if (oauthToken) { + completer = [[FBSDKLoginSystemAccountCompleter alloc] initWithTokenString:oauthToken appID:[FBSDKSettings appID]]; + } else { + completer = [[FBSDKLoginSystemAccountErrorCompleter alloc] initWithError:accountStoreError permissions:_requestedPermissions]; + } + + // any necessary strong reference is maintained by the FBSDKLoginSystemAccount[Error]Completer handler + [completer completeLogIn:self withHandler:^(FBSDKLoginCompletionParameters *parameters) { + NSString *eventName = [NSString stringWithFormat:@"%@ %@", + (state.isReauthorize ? @"Reauthorization" : @"Authorization"), + (parameters.error ? @"Error" : (parameters.accessTokenString ? @"succeeded" : @"cancelled")) + ]; + + [self completeAuthentication:parameters expectChallenge:NO]; + + if (eventName != nil) { + NSString *sortedPermissions = (parameters.permissions.count == 0) + ? @"" + : [[parameters.permissions.allObjects sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] componentsJoinedByString:@","]; + + [FBSDKAppEvents logImplicitEvent:FBSDKAppEventNamePermissionsUILaunch + valueToSum:nil + parameters:@{ @"ui_dialog_type" : @"iOS integrated auth", + @"permissions_requested" : sortedPermissions } + accessToken:nil]; + + [FBSDKAppEvents logImplicitEvent:FBSDKAppEventNamePermissionsUIDismiss + valueToSum:nil + parameters:@{ @"ui_dialog_type" : @"iOS integrated auth", + FBSDKAppEventParameterDialogOutcome : eventName, + @"permissions_requested" : sortedPermissions } + accessToken:nil]; + } + }]; +} + +- (void)fallbackToNativeBehavior +{ + FBSDKLoginManagerLoginResult *skippedResult = [[FBSDKLoginManagerLoginResult alloc] initWithToken:nil + isCancelled:NO + grantedPermissions:nil + declinedPermissions:nil]; + skippedResult.isSkipped = YES; + [_logger endLoginWithResult:skippedResult error:nil]; + // any necessary strong reference will be maintained by the mechanism that is used + [self logInWithBehavior:FBSDKLoginBehaviorNative]; +} + +@end + +@implementation FBSDKLoginManager (WebDialog) + +- (void)performWebLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))handler +{ + [FBSDKInternalUtility registerTransientObject:self]; + [FBSDKInternalUtility deleteFacebookCookies]; + NSMutableDictionary *parameters = [[NSMutableDictionary alloc] initWithDictionary:loginParams]; + parameters[@"title"] = NSLocalizedStringWithDefaultValue(@"LoginWeb.LogInTitle", + @"FacebookSDK", + [FBSDKInternalUtility bundleForStrings], + @"Log In", + @"Title of the web dialog that prompts the user to log in to Facebook."); + [FBSDKWebDialog showWithName:@"oauth" parameters:parameters delegate:self]; + + if (handler) { + handler(YES, nil); + } +} + +- (void)webDialog:(FBSDKWebDialog *)webDialog didCompleteWithResults:(NSDictionary *)results +{ + NSString *token = results[@"access_token"]; + + if (token.length == 0) { + [self webDialogDidCancel:webDialog]; + } else { + id completer = [[FBSDKLoginURLCompleter alloc] initWithURLParameters:results appID:[FBSDKSettings appID]]; + [completer completeLogIn:self withHandler:^(FBSDKLoginCompletionParameters *parameters) { + [self completeAuthentication:parameters expectChallenge:YES]; + }]; + [FBSDKInternalUtility unregisterTransientObject:self]; + } +} + +- (void)webDialog:(FBSDKWebDialog *)webDialog didFailWithError:(NSError *)error +{ + FBSDKLoginCompletionParameters *parameters = [[FBSDKLoginCompletionParameters alloc] initWithError:error]; + [self completeAuthentication:parameters expectChallenge:YES]; + [FBSDKInternalUtility unregisterTransientObject:self]; +} + +- (void)webDialogDidCancel:(FBSDKWebDialog *)webDialog +{ + FBSDKLoginCompletionParameters *parameters = [[FBSDKLoginCompletionParameters alloc] init]; + [self completeAuthentication:parameters expectChallenge:YES]; + [FBSDKInternalUtility unregisterTransientObject:self]; +} + +@end + +@implementation FBSDKLoginManagerSystemAccountState +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h new file mode 100644 index 0000000000..6601011d91 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h @@ -0,0 +1,67 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKAccessToken; + +/** + Describes the result of a login attempt. + */ +@interface FBSDKLoginManagerLoginResult : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + the access token. + */ +@property (copy, nonatomic) FBSDKAccessToken *token; + +/** + whether the login was cancelled by the user. + */ +@property (readonly, nonatomic) BOOL isCancelled; + +/** + the set of permissions granted by the user in the associated request. + + inspect the token's permissions set for a complete list. + */ +@property (copy, nonatomic) NSSet *grantedPermissions; + +/** + the set of permissions declined by the user in the associated request. + + inspect the token's permissions set for a complete list. + */ +@property (copy, nonatomic) NSSet *declinedPermissions; + +/** + Initializes a new instance. + @param token the access token + @param isCancelled whether the login was cancelled by the user + @param grantedPermissions the set of granted permissions + @param declinedPermissions the set of declined permissions + */ +- (instancetype)initWithToken:(FBSDKAccessToken *)token + isCancelled:(BOOL)isCancelled + grantedPermissions:(NSSet *)grantedPermissions + declinedPermissions:(NSSet *)declinedPermissions +NS_DESIGNATED_INITIALIZER; +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m new file mode 100644 index 0000000000..ce3969bd2f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m @@ -0,0 +1,51 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginManagerLoginResult+Internal.h" + +#import "FBSDKCoreKit+Internal.h" + +@implementation FBSDKLoginManagerLoginResult { + NSMutableDictionary *_mutableLoggingExtras; +} + +- (instancetype)initWithToken:(FBSDKAccessToken *)token + isCancelled:(BOOL)isCancelled + grantedPermissions:(NSSet *)grantedPermissions + declinedPermissions:(NSSet *)declinedPermissions { + if ((self = [super init])) { + _mutableLoggingExtras = [NSMutableDictionary dictionary]; + _token = [token copy]; + _isCancelled = isCancelled; + _grantedPermissions = [grantedPermissions copy]; + _declinedPermissions = [declinedPermissions copy]; + }; + return self; +} + +- (void)addLoggingExtra:(id)object forKey:(id)key +{ + [FBSDKInternalUtility dictionary:_mutableLoggingExtras setObject:object forKey:key]; +} + +- (NSDictionary *)loggingExtras +{ + return [_mutableLoggingExtras copy]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h new file mode 100644 index 0000000000..179219710d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h @@ -0,0 +1,90 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@protocol FBSDKLoginTooltipViewDelegate; + +/** + + Represents a tooltip to be displayed next to a Facebook login button + to highlight features for new users. + + + The `FBSDKLoginButton` may display this view automatically. If you do + not use the `FBSDKLoginButton`, you can manually call one of the `present*` methods + as appropriate and customize behavior via `FBSDKLoginTooltipViewDelegate` delegate. + + By default, the `FBSDKLoginTooltipView` is not added to the superview until it is + determined the app has migrated to the new login experience. You can override this + (e.g., to test the UI layout) by implementing the delegate or setting `forceDisplay` to YES. + + */ +@interface FBSDKLoginTooltipView : FBSDKTooltipView + +/** the delegate */ +@property (nonatomic, weak) id delegate; + +/** if set to YES, the view will always be displayed and the delegate's + `loginTooltipView:shouldAppear:` will NOT be called. */ +@property (nonatomic, assign) BOOL forceDisplay; + +@end + +/** + @protocol + + The `FBSDKLoginTooltipViewDelegate` protocol defines the methods used to receive event + notifications from `FBSDKLoginTooltipView` objects. + */ +@protocol FBSDKLoginTooltipViewDelegate + +@optional + +/** + Asks the delegate if the tooltip view should appear + + @param view The tooltip view. + @param appIsEligible The value fetched from the server identifying if the app + is eligible for the new login experience. + + + Use this method to customize display behavior. + */ +- (BOOL)loginTooltipView:(FBSDKLoginTooltipView *)view shouldAppear:(BOOL)appIsEligible; + +/** + Tells the delegate the tooltip view will appear, specifically after it's been + added to the super view but before the fade in animation. + + @param view The tooltip view. + */ +- (void)loginTooltipViewWillAppear:(FBSDKLoginTooltipView *)view; + +/** + Tells the delegate the tooltip view will not appear (i.e., was not + added to the super view). + + @param view The tooltip view. + */ +- (void)loginTooltipViewWillNotAppear:(FBSDKLoginTooltipView *)view; + + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m new file mode 100644 index 0000000000..e1a17d4868 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m @@ -0,0 +1,62 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginTooltipView.h" + +#import "FBSDKCoreKit+Internal.h" + +@interface FBSDKLoginTooltipView () +@end + +@implementation FBSDKLoginTooltipView + +- (instancetype)init +{ + NSString *tooltipMessage = + NSLocalizedStringWithDefaultValue(@"LoginTooltip.Message", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"You're in control - choose what info you want to share with apps.", + @"The message of the FBSDKLoginTooltipView"); + return [super initWithTagline:nil message:tooltipMessage colorStyle:FBSDKTooltipColorStyleFriendlyBlue]; +} + +- (void)presentInView:(UIView *)view withArrowPosition:(CGPoint)arrowPosition direction:(FBSDKTooltipViewArrowDirection)arrowDirection +{ + if (self.forceDisplay) { + [super presentInView:view withArrowPosition:arrowPosition direction:arrowDirection]; + } else { + + [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *error) { + self.message = serverConfiguration.loginTooltipText; + BOOL shouldDisplay = serverConfiguration.loginTooltipEnabled; + if ([self.delegate respondsToSelector:@selector(loginTooltipView:shouldAppear:)]) { + shouldDisplay = [self.delegate loginTooltipView:self shouldAppear:shouldDisplay]; + } + if (shouldDisplay) { + [super presentInView:view withArrowPosition:arrowPosition direction:arrowDirection]; + if ([self.delegate respondsToSelector:@selector(loginTooltipViewWillAppear:)]) { + [self.delegate loginTooltipViewWillAppear:self]; + } + } else { + if ([self.delegate respondsToSelector:@selector(loginTooltipViewWillNotAppear:)]) { + [self.delegate loginTooltipViewWillNotAppear:self]; + } + } + }]; + } +} +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h new file mode 100644 index 0000000000..d77392cfd1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h @@ -0,0 +1,136 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +/** + FBSDKTooltipViewArrowDirection enum + + Passed on construction to determine arrow orientation. + */ +typedef NS_ENUM(NSUInteger, FBSDKTooltipViewArrowDirection) +{ + /** View is located above given point, arrow is pointing down. */ + FBSDKTooltipViewArrowDirectionDown = 0, + /** View is located below given point, arrow is pointing up. */ + FBSDKTooltipViewArrowDirectionUp = 1, +}; + +/** + FBSDKTooltipColorStyle enum + + Passed on construction to determine color styling. + */ +typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) +{ + /** Light blue background, white text, faded blue close button. */ + FBSDKTooltipColorStyleFriendlyBlue = 0, + /** Dark gray background, white text, light gray close button. */ + FBSDKTooltipColorStyleNeutralGray = 1, +}; + +/** + + Tooltip bubble with text in it used to display tips for UI elements, + with a pointed arrow (to refer to the UI element). + + + + The tooltip fades in and will automatically fade out. See `displayDuration`. + */ +@interface FBSDKTooltipView : UIView + +/** + Gets or sets the amount of time in seconds the tooltip should be displayed. + Set this to zero to make the display permanent until explicitly dismissed. + Defaults to six seconds. + */ +@property (nonatomic, assign) CFTimeInterval displayDuration; + +/** + Gets or sets the color style after initialization. + Defaults to value passed to -initWithTagline:message:colorStyle:. + */ +@property (nonatomic, assign) FBSDKTooltipColorStyle colorStyle; + +/** + Gets or sets the message. + */ +@property (nonatomic, copy) NSString *message; + +/** + Gets or sets the optional phrase that comprises the first part of the label (and is highlighted differently). + */ +@property (nonatomic, copy) NSString *tagline; + +/** + Designated initializer. + + @param tagline First part of the label, that will be highlighted with different color. Can be nil. + + @param message Main message to display. + + @param colorStyle Color style to use for tooltip. + + + + If you need to show a tooltip for login, consider using the `FBSDKLoginTooltipView` view. + + + @see FBSDKLoginTooltipView + */ +- (instancetype)initWithTagline:(NSString *)tagline message:(NSString *)message colorStyle:(FBSDKTooltipColorStyle)colorStyle; + +/** + Show tooltip at the top or at the bottom of given view. + Tooltip will be added to anchorView.window.rootViewController.view + + @param anchorView view to show at, must be already added to window view hierarchy, in order to decide + where tooltip will be shown. (If there's not enough space at the top of the anchorView in window bounds - + tooltip will be shown at the bottom of it) + + + + Use this method to present the tooltip with automatic positioning or + use -presentInView:withArrowPosition:direction: for manual positioning + If anchorView is nil or has no window - this method does nothing. + */ +- (void)presentFromView:(UIView *)anchorView; + +/** + Adds tooltip to given view, with given position and arrow direction. + + @param view View to be used as superview. + + @param arrowPosition Point in view's cordinates, where arrow will be pointing + + @param arrowDirection whenever arrow should be pointing up (message bubble is below the arrow) or + down (message bubble is above the arrow). + */ +- (void)presentInView:(UIView *)view withArrowPosition:(CGPoint)arrowPosition direction:(FBSDKTooltipViewArrowDirection)arrowDirection; + +/** + Remove tooltip manually. + + + + Calling this method isn't necessary - tooltip will dismiss itself automatically after the `displayDuration`. + */ +- (void)dismiss; + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m new file mode 100644 index 0000000000..22f8f89917 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m @@ -0,0 +1,603 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKTooltipView.h" + +#import + +#import "FBSDKCoreKit+Internal.h" + +static const CGFloat kTransitionDuration = 0.3; +static const CGFloat kZoomOutScale = 0.001f; +static const CGFloat kZoomInScale = 1.1f; +static const CGFloat kZoomBounceScale = 0.98f; + +static const CGFloat kNUXRectInset = 6; +static const CGFloat kNUXBubbleMargin = 17 - kNUXRectInset; +static const CGFloat kNUXPointMargin = -3; +static const CGFloat kNUXCornerRadius = 4; +static const CGFloat kNUXStrokeLineWidth = 0.5f; +static const CGFloat kNUXSideCap = 6; +static const CGFloat kNUXFontSize = 10; +static const CGFloat kNUXCrossGlyphSize = 11; + +static CGMutablePathRef _fbsdkCreateUpPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius); +static CGMutablePathRef _fbsdkCreateDownPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius); + +#pragma mark - + +@implementation FBSDKTooltipView +{ + CGPoint _positionInView; + CFAbsoluteTime _displayTime; + CFTimeInterval _minimumDisplayDuration; + UILabel *_textLabel; + UITapGestureRecognizer *_insideTapGestureRecognizer; + CGFloat _leftWidth; + CGFloat _rightWidth; + CGFloat _arrowMidpoint; + BOOL _pointingUp; + BOOL _isFadingOut; + // style + UIColor *_innerStrokeColor; + CGFloat _arrowHeight; + CGFloat _textPadding; + CGFloat _maximumTextWidth; + CGFloat _verticalTextOffset; + CGFloat _verticalCrossOffset; + FBSDKTooltipColorStyle _colorStyle; + NSArray *_gradientColors; + UIColor *_crossCloseGlyphColor; +} + +- (instancetype)initWithTagline:(NSString *)tagline message:(NSString *)message colorStyle:(FBSDKTooltipColorStyle)colorStyle +{ + self = [super initWithFrame:CGRectZero]; + if (self) { + // Define style + _textLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _textLabel.backgroundColor = [UIColor clearColor]; + _textLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin; + _textLabel.numberOfLines = 0; + _textLabel.font = [UIFont boldSystemFontOfSize: kNUXFontSize]; + _textLabel.textAlignment = NSTextAlignmentLeft; + _arrowHeight = 7; + _textPadding = 10; + _maximumTextWidth = 185; + _verticalCrossOffset = - 2.5f; + _verticalTextOffset = 0; + _displayDuration = 6.0; + self.colorStyle = colorStyle; + + _message = [message copy]; + _tagline = [tagline copy]; + [self setMessage:message tagline:tagline]; + [self addSubview:_textLabel]; + + _insideTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapInTooltip:)]; + [self addGestureRecognizer:_insideTapGestureRecognizer]; + + self.opaque = NO; + self.backgroundColor = [UIColor clearColor]; + self.layer.needsDisplayOnBoundsChange = YES; + self.layer.shadowColor = [UIColor blackColor].CGColor; + self.layer.shadowOpacity = 0.5f; + self.layer.shadowOffset = CGSizeMake(0.0f, 2.0f); + self.layer.shadowRadius = 5.0f; + self.layer.masksToBounds = NO; + } + return self; +} + +- (void)dealloc +{ + [_insideTapGestureRecognizer removeTarget:self action:NULL]; +} + +#pragma mark - Public Methods + +- (void)setMessage:(NSString *)message +{ + if (![message isEqualToString:_message]) { + _message = [message copy]; + [self setMessage:_message tagline:self.tagline]; + } +} + +- (void)setTagline:(NSString *)tagline +{ + if (![tagline isEqualToString:_tagline]) { + _tagline = [tagline copy]; + [self setMessage:self.message tagline:_tagline]; + } +} + +#pragma mark Presentation + +- (void)presentFromView:(UIView *)anchorView +{ + UIView *superview = anchorView.window.rootViewController.view; + if (!superview) { + return; + } + + // By default - attach to the top, pointing down + CGPoint position = CGPointMake(CGRectGetMidX(anchorView.bounds), CGRectGetMinY(anchorView.bounds)); + CGPoint positionInSuperview = [superview convertPoint:position fromView:anchorView]; + FBSDKTooltipViewArrowDirection direction = FBSDKTooltipViewArrowDirectionDown; + + // If not enough space to point up from top of anchor view - point up to it's bottom + CGFloat bubbleHeight = CGRectGetHeight(_textLabel.bounds) + _verticalTextOffset + _textPadding * 2; + if (positionInSuperview.y - bubbleHeight - kNUXBubbleMargin < CGRectGetMinY(superview.bounds)) { + direction = FBSDKTooltipViewArrowDirectionUp; + position = CGPointMake(CGRectGetMidX(anchorView.bounds), CGRectGetMaxY(anchorView.bounds)); + positionInSuperview = [superview convertPoint:position fromView:anchorView]; + } + + [self presentInView:superview withArrowPosition:positionInSuperview direction:direction]; +} + +- (void)presentInView:(UIView *)view withArrowPosition:(CGPoint)arrowPosition direction:(FBSDKTooltipViewArrowDirection)arrowDirection +{ + _pointingUp = arrowDirection == FBSDKTooltipViewArrowDirectionUp; + _positionInView = arrowPosition; + self.frame = [self layoutSubviewsAndDetermineFrame]; + + // Add to view, while invisible. + self.hidden = YES; + if (self.superview) { + [self removeFromSuperview]; + } + [view addSubview:self]; + + // Layout & schedule dismissal. + _displayTime = CFAbsoluteTimeGetCurrent(); + _isFadingOut = NO; + [self scheduleAutomaticFadeout]; + [self layoutSubviews]; + + [self animateFadeIn]; +} + +- (void)dismiss +{ + if (_isFadingOut) { + return; + } + _isFadingOut = YES; + + [self animateFadeOutWithCompletion:^{ + [self removeFromSuperview]; + [self cancelAllScheduledFadeOutMethods]; + self->_isFadingOut = NO; + }]; +} + +#pragma mark Style + +- (FBSDKTooltipColorStyle)colorStyle +{ + return _colorStyle; +} + +- (void)setColorStyle:(FBSDKTooltipColorStyle)colorStyle +{ + _colorStyle = colorStyle; + switch (colorStyle) { + case FBSDKTooltipColorStyleNeutralGray: + _gradientColors = @[ + (id)(FBSDKUIColorWithRGB(0x51, 0x50, 0x4f).CGColor), + (id)(FBSDKUIColorWithRGB(0x2d, 0x2c, 0x2c).CGColor) + ]; + _innerStrokeColor = [UIColor colorWithWhite:0.13f alpha:1.0f]; + _crossCloseGlyphColor = [UIColor colorWithWhite:0.69f alpha:1.0f]; + break; + + case FBSDKTooltipColorStyleFriendlyBlue: + default: + _gradientColors = @[ + (id)(FBSDKUIColorWithRGB(0x6e, 0x9c, 0xf5).CGColor), + (id)(FBSDKUIColorWithRGB(0x49, 0x74, 0xc6).CGColor) + ]; + _innerStrokeColor = [UIColor colorWithRed:0.12f green:0.26f blue:0.55f alpha:1.0f]; + _crossCloseGlyphColor = [UIColor colorWithRed:0.60f green:0.73f blue:1.0f alpha:1.0f]; + break; + } + + _textLabel.textColor = [UIColor whiteColor]; +} + +#pragma mark - Private Methods +#pragma mark Animation + +- (void)animateFadeIn +{ + // Prepare Animation: Zoom in with bounce. Keep the arrow point in place. + // Set initial transform (zoomed out) & become visible. + CGFloat centerPos = self.bounds.size.width / 2.0; + CGFloat zoomOffsetX = (centerPos - _arrowMidpoint) * (kZoomOutScale - 1.0f); + CGFloat zoomOffsetY = -0.5f * self.bounds.size.height * (kZoomOutScale - 1.0f); + if (_pointingUp) { + zoomOffsetY = -zoomOffsetY; + } + self.layer.transform = fbsdkdfl_CATransform3DConcat(fbsdkdfl_CATransform3DMakeScale(kZoomOutScale, kZoomOutScale, kZoomOutScale), + fbsdkdfl_CATransform3DMakeTranslation(zoomOffsetX, zoomOffsetY, 0)); + self.hidden = NO; + + // Prepare animation steps + // 1st Step. + void (^zoomIn)(void) = ^{ + self.alpha = 1.0; + + CGFloat newZoomOffsetX = (centerPos - self->_arrowMidpoint) * (kZoomInScale - 1.0f); + CGFloat newZoomOffsetY = -0.5f * self.bounds.size.height * (kZoomInScale - 1.0f); + if (self->_pointingUp) { + newZoomOffsetY = -newZoomOffsetY; + } + + CATransform3D scale = fbsdkdfl_CATransform3DMakeScale(kZoomInScale, kZoomInScale, kZoomInScale); + CATransform3D translate =fbsdkdfl_CATransform3DMakeTranslation(newZoomOffsetX, newZoomOffsetY, 0); + self.layer.transform = fbsdkdfl_CATransform3DConcat(scale, translate); + }; + + // 2nd Step. + void (^bounceZoom)(void) = ^{ + CGFloat centerPos2 = self.bounds.size.width / 2.0; + CGFloat zoomOffsetX2 = (centerPos2 - self->_arrowMidpoint) * (kZoomBounceScale - 1.0f); + CGFloat zoomOffsetY2 = -0.5f * self.bounds.size.height * (kZoomBounceScale - 1.0f); + if (self->_pointingUp) { + zoomOffsetY2 = -zoomOffsetY2; + } + self.layer.transform = fbsdkdfl_CATransform3DConcat(fbsdkdfl_CATransform3DMakeScale(kZoomBounceScale, kZoomBounceScale, kZoomBounceScale), + fbsdkdfl_CATransform3DMakeTranslation(zoomOffsetX2, zoomOffsetY2, 0)); + }; + + // 3rd Step. + void (^normalizeZoom)(void) = ^{ + self.layer.transform = fbsdkdfl_CATransform3DIdentity; + }; + + // Animate 3 steps sequentially + [UIView animateWithDuration:kTransitionDuration/1.5 + delay:0 + options:UIViewAnimationOptionCurveEaseInOut + animations:zoomIn + completion:^(BOOL finished) { + [UIView animateWithDuration:kTransitionDuration/2.2 + animations:bounceZoom + completion:^(BOOL innerFinished) { + [UIView animateWithDuration:kTransitionDuration/5 + animations:normalizeZoom]; + }]; + }]; +} + +- (void) animateFadeOutWithCompletion: (void(^)(void)) completionHandler +{ + [UIView animateWithDuration:0.3 + delay:0 + options:UIViewAnimationOptionCurveEaseInOut + animations:^{ + self.alpha = 0.0; + } + completion:^(BOOL complete) { + if(completionHandler) + completionHandler(); + }]; +} + +#pragma mark Gestures + +- (void)onTapInTooltip:(UIGestureRecognizer*)sender +{ + // ignore incomplete tap gestures + if (sender.state != UIGestureRecognizerStateEnded) { + return; + } + + // fade out the tooltip view right away + [self dismiss]; +} + +#pragma mark Drawing + +CGMutablePathRef _fbsdkCreateUpPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius) +{ + CGMutablePathRef path = CGPathCreateMutable(); + CGFloat arrowHalfWidth = arrowHeight; + // start with arrow + CGPathMoveToPoint(path, NULL, arrowMidpoint - arrowHalfWidth, CGRectGetMinY(rect)); + CGPathAddLineToPoint(path, NULL, arrowMidpoint, CGRectGetMinY(rect) - arrowHeight); + CGPathAddLineToPoint(path, NULL, arrowMidpoint + arrowHalfWidth, CGRectGetMinY(rect)); + + // rest of curved rectangle + CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMaxY(rect), radius); + CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMaxY(rect), radius); + CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMinY(rect), radius); + CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMinY(rect), radius); + CGPathCloseSubpath(path); + return path; +} + +CGMutablePathRef _fbsdkCreateDownPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius) +{ + CGMutablePathRef path = CGPathCreateMutable(); + CGFloat arrowHalfWidth = arrowHeight; + + // start with arrow + CGPathMoveToPoint(path, NULL, arrowMidpoint + arrowHalfWidth, CGRectGetMaxY(rect)); + CGPathAddLineToPoint(path, NULL, arrowMidpoint, CGRectGetMaxY(rect) + arrowHeight); + CGPathAddLineToPoint(path, NULL, arrowMidpoint - arrowHalfWidth, CGRectGetMaxY(rect)); + + // rest of curved rectangle + CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMinY(rect), radius); + CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMinY(rect), radius); + CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMaxY(rect), radius); + CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMaxY(rect), radius); + CGPathCloseSubpath(path); + return path; +} + +static CGMutablePathRef _createCloseCrossGlyphWithRect(CGRect rect) +{ + CGFloat lineThickness = 0.20f * CGRectGetHeight(rect); + + // One rectangle + CGMutablePathRef path1 = CGPathCreateMutable(); + CGPathMoveToPoint(path1, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect) + lineThickness); + CGPathAddLineToPoint(path1, NULL, CGRectGetMinX(rect) + lineThickness, CGRectGetMinY(rect)); + CGPathAddLineToPoint(path1, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect) - lineThickness); + CGPathAddLineToPoint(path1, NULL, CGRectGetMaxX(rect) - lineThickness, CGRectGetMaxY(rect)); + CGPathCloseSubpath(path1); + + // 2nd rectangle - mirrored horizontally + CGMutablePathRef path2 = CGPathCreateMutable(); + CGPathMoveToPoint(path2, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect) - lineThickness); + CGPathAddLineToPoint(path2, NULL, CGRectGetMaxX(rect) - lineThickness, CGRectGetMinY(rect)); + CGPathAddLineToPoint(path2, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect) + lineThickness); + CGPathAddLineToPoint(path2, NULL, CGRectGetMinX(rect) + lineThickness, CGRectGetMaxY(rect)); + CGPathCloseSubpath(path2); + + CGMutablePathRef groupedPath = CGPathCreateMutable(); + CGPathAddPath(groupedPath, NULL, path1); + CGPathAddPath(groupedPath, NULL, path2); + CFRelease(path1); + CFRelease(path2); + + return groupedPath; +} + +- (void)drawRect:(CGRect)rect +{ + // Ignore dirty rect and just redraw the entire nux bubble + CGFloat arrowSideMargin = 1 + 0.5f * MAX(kNUXRectInset, _arrowHeight); + CGFloat arrowYMarginOffset = _pointingUp ? arrowSideMargin : kNUXRectInset; + CGFloat halfStroke = kNUXStrokeLineWidth / 2.0; + CGRect outerRect = CGRectMake(kNUXRectInset + halfStroke, + arrowYMarginOffset + halfStroke, + self.bounds.size.width - 2 * kNUXRectInset - kNUXStrokeLineWidth, + self.bounds.size.height - kNUXRectInset - arrowSideMargin - kNUXStrokeLineWidth); + outerRect = CGRectInset(outerRect, 5, 5); + CGRect innerRect = CGRectInset(outerRect, kNUXStrokeLineWidth, kNUXStrokeLineWidth); + CGRect fillRect = CGRectInset(innerRect, kNUXStrokeLineWidth/2.0, kNUXStrokeLineWidth/2.0); + CGFloat closeCrossGlyphPositionY = MIN(CGRectGetMinY(fillRect) + _textPadding + _verticalCrossOffset, + CGRectGetMidY(fillRect) - 0.5f * kNUXCrossGlyphSize); + CGRect closeCrossGlyphRect = CGRectMake(CGRectGetMaxX(fillRect) - 2 * kNUXFontSize, closeCrossGlyphPositionY, + kNUXCrossGlyphSize, kNUXCrossGlyphSize); + + // setup and get paths + CGContextRef context = UIGraphicsGetCurrentContext(); + CGMutablePathRef outerPath; + CGMutablePathRef innerPath; + CGMutablePathRef fillPath; + CGMutablePathRef crossCloseGlyphPath = _createCloseCrossGlyphWithRect(closeCrossGlyphRect); + CGRect gradientRect = fillRect; + if (_pointingUp) { + outerPath = _fbsdkCreateUpPointingBubbleWithRect(outerRect, + _arrowMidpoint, _arrowHeight, + kNUXCornerRadius + kNUXStrokeLineWidth); + innerPath = _fbsdkCreateUpPointingBubbleWithRect(innerRect, + _arrowMidpoint, _arrowHeight, + kNUXCornerRadius); + fillPath = _fbsdkCreateUpPointingBubbleWithRect(fillRect, + _arrowMidpoint, _arrowHeight, + kNUXCornerRadius - kNUXStrokeLineWidth); + gradientRect.origin.y -= _arrowHeight; + gradientRect.size.height += _arrowHeight; + } else { + outerPath = _fbsdkCreateDownPointingBubbleWithRect(outerRect, + _arrowMidpoint, _arrowHeight, + kNUXCornerRadius + kNUXStrokeLineWidth); + innerPath = _fbsdkCreateDownPointingBubbleWithRect(innerRect, + _arrowMidpoint, _arrowHeight, + kNUXCornerRadius); + fillPath = _fbsdkCreateDownPointingBubbleWithRect(fillRect, + _arrowMidpoint, _arrowHeight, + kNUXCornerRadius - kNUXStrokeLineWidth); + gradientRect.size.height += _arrowHeight; + } + self.layer.shadowPath = outerPath; + + // This tooltip has two borders, so draw two strokes and a fill. + CGColorRef strokeColor = _innerStrokeColor.CGColor; + CGContextSaveGState(context); + CGContextSetStrokeColorWithColor(context, strokeColor); + CGContextSetLineWidth(context, kNUXStrokeLineWidth); + CGContextAddPath(context, innerPath); + CGContextStrokePath(context); + CGContextAddPath(context, fillPath); + CGContextClip(context); + CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB(); + CGGradientRef gradient = CGGradientCreateWithColors(rgbColorspace, (CFArrayRef)_gradientColors, nil); + CGColorSpaceRelease(rgbColorspace); + CGPoint start = CGPointMake(gradientRect.origin.x, gradientRect.origin.y); + CGPoint end = CGPointMake(gradientRect.origin.x, CGRectGetMaxY(gradientRect)); + CGContextDrawLinearGradient(context, gradient, start, end, 0); + CGContextAddPath(context, crossCloseGlyphPath); + CGContextSetFillColorWithColor(context, _crossCloseGlyphColor.CGColor); + CGContextFillPath(context); + CGGradientRelease(gradient); + CGContextRestoreGState(context); + CFRelease(outerPath); + CFRelease(innerPath); + CFRelease(fillPath); + CFRelease(crossCloseGlyphPath); +} + +#pragma mark Layout + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + // We won't set the frame in layoutSubviews to avoid potential infinite loops. + // Frame is set in -presentInView:withArrowPosition:direction: method. + [self layoutSubviewsAndDetermineFrame]; +} + +- (CGRect)layoutSubviewsAndDetermineFrame +{ + // Compute the positioning of the arrow. + CGRect screenBounds = [UIScreen mainScreen].bounds; + UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; + if (!UIInterfaceOrientationIsPortrait(orientation)) { + screenBounds = CGRectMake(0, 0, screenBounds.size.height, screenBounds.size.width); + } + CGFloat arrowHalfWidth = _arrowHeight; + CGFloat arrowXPos = _positionInView.x - arrowHalfWidth; + arrowXPos = MAX(arrowXPos, kNUXSideCap + kNUXBubbleMargin); + arrowXPos = MIN(arrowXPos, screenBounds.size.width - kNUXBubbleMargin - kNUXSideCap - 2 * arrowHalfWidth); + _positionInView = CGPointMake(arrowXPos + arrowHalfWidth, _positionInView.y); + + CGFloat arrowYMarginOffset = _pointingUp ? MAX(kNUXRectInset, _arrowHeight) : kNUXRectInset; + + // Set the lock image frame. + CGFloat xPos = kNUXRectInset + _textPadding + kNUXStrokeLineWidth; + CGFloat yPos = arrowYMarginOffset + kNUXStrokeLineWidth + _textPadding; + + // Set the text label frame. + _textLabel.frame = CGRectMake(xPos, + yPos + _verticalTextOffset, // sizing function may not return desired height exactly + CGRectGetWidth(_textLabel.bounds), + CGRectGetHeight(_textLabel.bounds)); + + // Determine the size of the nux bubble. + CGFloat bubbleHeight = CGRectGetHeight(_textLabel.bounds) + _verticalTextOffset + _textPadding * 2; + CGFloat crossGlyphWidth = 2 * kNUXFontSize; + CGFloat bubbleWidth = CGRectGetWidth(_textLabel.bounds) + _textPadding * 2 + kNUXStrokeLineWidth * 2 + crossGlyphWidth; + + // Compute the widths to the left and right of the arrow. + _leftWidth = roundf(0.5f * (bubbleWidth - 2 * arrowHalfWidth)); + _rightWidth = _leftWidth; + CGFloat originX = arrowXPos - _leftWidth; + if (originX < kNUXBubbleMargin) { + CGFloat xShift = kNUXBubbleMargin - originX; + originX += xShift; + _leftWidth -= xShift; + _rightWidth += xShift; + } else if (originX + bubbleWidth > screenBounds.size.width - kNUXBubbleMargin) { + CGFloat xShift = originX + bubbleWidth - (screenBounds.size.width - kNUXBubbleMargin); + originX -= xShift; + _leftWidth += xShift; + _rightWidth -= xShift; + } + + _arrowMidpoint = _positionInView.x - originX + kNUXRectInset; + + // Set the frame for the view. + CGFloat nuxWidth = bubbleWidth + 2 * kNUXRectInset; + CGFloat nuxHeight = bubbleHeight + kNUXRectInset + MAX(kNUXRectInset, _arrowHeight) + 2 * kNUXStrokeLineWidth; + CGFloat yOrigin = 0; + if (_pointingUp) { + yOrigin = _positionInView.y + kNUXPointMargin - MAX(0, kNUXRectInset - _arrowHeight); + } else { + yOrigin = _positionInView.y - nuxHeight - kNUXPointMargin + MAX(0, kNUXRectInset - _arrowHeight); + } + + return CGRectMake(originX - kNUXRectInset, + yOrigin, + nuxWidth, + nuxHeight); +} + +#pragma mark Message & Tagline + +- (void)setMessage:(NSString *)message tagline:(NSString *)tagline +{ + message = message ?: @""; + // Ensure tagline is empty string or ends with space + tagline = tagline ?: @""; + if (tagline.length && ![tagline hasSuffix:@" "]) + tagline = [tagline stringByAppendingString:@" "]; + + // Concatenate tagline & main message + message = [tagline stringByAppendingString:message]; + + NSRange fullRange = NSMakeRange(0, message.length); + NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString: message]; + + UIFont *font=[UIFont boldSystemFontOfSize:kNUXFontSize]; + [attrString addAttribute:NSFontAttributeName value:font range:fullRange]; + [attrString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:fullRange]; + if (tagline.length) { + [attrString addAttribute:NSForegroundColorAttributeName value: FBSDKUIColorWithRGB(0x6D, 0x87, 0xC7) range:NSMakeRange(0, tagline.length)]; + } + + _textLabel.attributedText = attrString; + + CGSize textLabelSize = [_textLabel sizeThatFits:CGSizeMake(_maximumTextWidth, MAXFLOAT)]; + _textLabel.bounds = CGRectMake(0, 0, textLabelSize.width, textLabelSize.height); + self.frame = [self layoutSubviewsAndDetermineFrame]; + [self setNeedsDisplay]; +} + +#pragma mark Auto Dismiss Timeout + +- (void)scheduleAutomaticFadeout +{ + [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(scheduleFadeoutRespectingMinimumDisplayDuration) object:nil]; + + if (_displayDuration > 0.0 && self.superview) { + CFTimeInterval intervalAlreadyDisplaying = CFAbsoluteTimeGetCurrent() - _displayTime; + CFTimeInterval timeRemainingBeforeAutomaticFadeout = _displayDuration - intervalAlreadyDisplaying; + if (timeRemainingBeforeAutomaticFadeout > 0.0) { + [self performSelector:@selector(scheduleFadeoutRespectingMinimumDisplayDuration) withObject:nil afterDelay:timeRemainingBeforeAutomaticFadeout]; + } else { + [self scheduleFadeoutRespectingMinimumDisplayDuration]; + } + } +} + +- (void)scheduleFadeoutRespectingMinimumDisplayDuration +{ + CFTimeInterval intervalAlreadyDisplaying = CFAbsoluteTimeGetCurrent() - _displayTime; + CFTimeInterval remainingDisplayTime = _minimumDisplayDuration - intervalAlreadyDisplaying; + if (remainingDisplayTime > 0.0) { + [self performSelector:@selector(dismiss) withObject:nil afterDelay:remainingDisplayTime]; + } else { + [self dismiss]; + } +} + +- (void)cancelAllScheduledFadeOutMethods +{ + [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(scheduleFadeoutRespectingMinimumDisplayDuration) object:nil]; + [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismiss) object:nil]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h new file mode 100644 index 0000000000..cf021e1101 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h @@ -0,0 +1,43 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDeviceLoginCodeInfo.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBSDKDeviceLoginCodeInfo () + +/*! + @abstract Initializes a new instance + @param identifier the unique id for this login flow instance. + @param loginCode the short "user_code". + @param verificationURL the verification URL. + @param expirationDate expiration date. + @param pollingInterval time between polling. + */ +- (instancetype)initWithIdentifier:(NSString *)identifier + loginCode:(NSString *)loginCode + verificationURL:(NSURL *)verificationURL + expirationDate:(NSDate *)expirationDate + pollingInterval:(NSUInteger)pollingInterval NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h new file mode 100644 index 0000000000..cc9e4ae591 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h @@ -0,0 +1,39 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKDeviceLoginManagerResult.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FBSDKDeviceLoginManagerResult () + +/*! + @abstract Initializes a new instance + @param token The token + @param cancelled Indicates if the flow was cancelled. + */ +- (instancetype)initWithToken:(nullable FBSDKAccessToken *)token + isCancelled:(BOOL)cancelled NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h new file mode 100644 index 0000000000..6ddfa0db06 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h @@ -0,0 +1,39 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginCompletion.h" + +@interface FBSDKLoginCompletionParameters () + +@property (nonatomic, copy) NSString *accessTokenString; + +@property (nonatomic, copy) NSSet *permissions; +@property (nonatomic, copy) NSSet *declinedPermissions; + +@property (nonatomic, copy) NSString *appID; +@property (nonatomic, copy) NSString *userID; + +@property (nonatomic, copy) NSError *error; + +@property (nonatomic, assign, getter=isSystemAccount) BOOL systemAccount; +@property (nonatomic, copy) NSDate *expirationDate; +@property (nonatomic, copy) NSDate *dataAccessExpirationDate; + +@property (nonatomic, copy) NSString *challenge; + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h new file mode 100644 index 0000000000..30e0015097 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h @@ -0,0 +1,104 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@class FBSDKLoginManager; + +/** + Structured interface for accessing the parameters used to complete a log in request. + If \c accessTokenString is non-nil, the authentication succeeded. If \c error is + non-nil the request failed. If both are \c nil, the request was cancelled. + */ +@interface FBSDKLoginCompletionParameters : NSObject + +- (instancetype)init NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithError:(NSError *)error; + +@property (nonatomic, copy, readonly) NSString *accessTokenString; + +@property (nonatomic, copy, readonly) NSSet *permissions; +@property (nonatomic, copy, readonly) NSSet *declinedPermissions; + +@property (nonatomic, copy, readonly) NSString *appID; +@property (nonatomic, copy, readonly) NSString *userID; + +@property (nonatomic, copy, readonly) NSError *error; + +@property (nonatomic, readonly, getter=isSystemAccount) BOOL systemAccount; +@property (nonatomic, copy, readonly) NSDate *expirationDate; +@property (nonatomic, copy, readonly) NSDate *dataAccessExpirationDate; + +@property (nonatomic, copy, readonly) NSString *challenge; +@end + +@protocol FBSDKLoginCompleting + +/** + Invoke \p handler with the login parameters derived from the authentication result. + See the implementing class's documentation for whether it completes synchronously or asynchronously. + */ +- (void)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler; + +@end + +#pragma mark - Completers + +/** + Extracts the log in completion parameters from the \p parameters dictionary, + which must contain the parsed result of the return URL query string. + + The \c user_id key is first used to derive the User ID. If that fails, \c signed_request + is used. + + Completion occurs synchronously. + */ +@interface FBSDKLoginURLCompleter : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithURLParameters:(NSDictionary *)parameters appID:(NSString *)appID NS_DESIGNATED_INITIALIZER; + +@end + +/** + Requests the User ID, granted permissions and declined permissions from the server + using the given access token, which must occur before authentication can be completed. + + Completion occurs asynchronously. + */ +@interface FBSDKLoginSystemAccountCompleter : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithTokenString:(NSString *)tokenString appID:(NSString *)appID NS_DESIGNATED_INITIALIZER; + +@end + +/** + Converts an Accounts framework error in to an error or cancellation result + + Completion occurs synchronously. + */ +@interface FBSDKLoginSystemAccountErrorCompleter : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithError:(NSError *)accountStoreError permissions:(NSSet *)permissions NS_DESIGNATED_INITIALIZER; + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m new file mode 100644 index 0000000000..4ac8e1949e --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m @@ -0,0 +1,317 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginCompletion+Internal.h" + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKLoginConstants.h" +#import "FBSDKLoginError.h" +#import "FBSDKLoginManager+Internal.h" +#import "FBSDKLoginUtility.h" + +static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *parameters, void(^completionBlock)(void)) +{ + __block NSUInteger pendingCount = 1; + void(^didCompleteBlock)(void) = ^{ + if (--pendingCount == 0) { + completionBlock(); + } + }; + + NSString *tokenString = parameters.accessTokenString; + FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; + + pendingCount++; + FBSDKGraphRequest *userIDRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" + parameters:@{ @"fields" : @"id" } + tokenString:tokenString + HTTPMethod:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + + [connection addRequest:userIDRequest completionHandler:^(FBSDKGraphRequestConnection *requestConnection, + id result, + NSError *error) { + parameters.userID = result[@"id"]; + if (error) { + parameters.error = error; + } + didCompleteBlock(); + }]; + + pendingCount++; + FBSDKGraphRequest *permissionsRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions" + parameters:@{@"fields":@""} + tokenString:tokenString + HTTPMethod:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + + [connection addRequest:permissionsRequest completionHandler:^(FBSDKGraphRequestConnection *requestConnection, + id result, + NSError *error) { + NSMutableSet *grantedPermissions = [NSMutableSet set]; + NSMutableSet *declinedPermissions = [NSMutableSet set]; + + [FBSDKInternalUtility extractPermissionsFromResponse:result + grantedPermissions:grantedPermissions + declinedPermissions:declinedPermissions]; + + parameters.permissions = [grantedPermissions copy]; + parameters.declinedPermissions = [declinedPermissions copy]; + if (error) { + parameters.error = error; + } + didCompleteBlock(); + }]; + + [connection start]; + didCompleteBlock(); +} + +@implementation FBSDKLoginCompletionParameters + +- (instancetype)init +{ + return [super init]; +} + +- (instancetype)initWithError:(NSError *)error +{ + if ((self = [self init]) != nil) { + self.error = error; + } + return self; +} + +@end + +#pragma mark - Completers + +@implementation FBSDKLoginURLCompleter +{ + FBSDKLoginCompletionParameters *_parameters; + id _observer; + BOOL _performExplicitFallback; +} + +- (instancetype)initWithURLParameters:(NSDictionary *)parameters appID:(NSString *)appID +{ + if ((self = [super init]) != nil) { + _parameters = [[FBSDKLoginCompletionParameters alloc] init]; + + _parameters.accessTokenString = parameters[@"access_token"]; + + if (_parameters.accessTokenString.length > 0) { + [self setParametersWithDictionary:parameters appID:appID]; + } else { + _parameters.accessTokenString = nil; + [self setErrorWithDictionary:parameters]; + } + } + return self; +} + +- (void)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler +{ + if (_performExplicitFallback && loginManager.loginBehavior == FBSDKLoginBehaviorNative) { + // UIKit and iOS don't like an application opening a URL during a URL open callback, so + // we need to wait until *at least* the next turn of the run loop to open the URL to + // perform the browser log in behavior. However we also need to wait for the application + // to become active so FBSDKApplicationDelegate doesn't erroneously call back the URL + // opener before the URL has been opened. + if ([FBSDKBridgeAPI sharedInstance].isActive) { + // The application is active so there's no need to wait. + [loginManager logInWithBehavior:FBSDKLoginBehaviorBrowser]; + } else { + // use the block version to guarantee there's a strong reference to self + _observer = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^ (NSNotification *notification) { + [self attemptBrowserLogIn:loginManager]; + }]; + } + return; + } + + if (_parameters.accessTokenString && !_parameters.userID) { + void(^handlerCopy)(FBSDKLoginCompletionParameters *) = [handler copy]; + FBSDKLoginRequestMeAndPermissions(_parameters, ^{ + handlerCopy(self->_parameters); + }); + return; + } + + handler(_parameters); +} + +- (void)setParametersWithDictionary:(NSDictionary *)parameters appID:(NSString *)appID +{ + NSString *grantedPermissionsString = parameters[@"granted_scopes"]; + NSString *declinedPermissionsString = parameters[@"denied_scopes"]; + + NSString *signedRequest = parameters[@"signed_request"]; + NSString *userID = parameters[@"user_id"]; + + // check the string length so that we assign an empty set rather than a set with an empty string + _parameters.permissions = (grantedPermissionsString.length > 0) + ? [NSSet setWithArray:[grantedPermissionsString componentsSeparatedByString:@","]] + : [NSSet set]; + _parameters.declinedPermissions = (declinedPermissionsString.length > 0) + ? [NSSet setWithArray:[declinedPermissionsString componentsSeparatedByString:@","]] + : [NSSet set]; + + _parameters.appID = appID; + + if (userID.length == 0 && signedRequest.length > 0) { + _parameters.userID = [FBSDKLoginUtility userIDFromSignedRequest:signedRequest]; + } else { + _parameters.userID = userID; + } + + NSString *expirationDateString = parameters[@"expires"] ?: parameters[@"expires_at"]; + NSDate *expirationDate = [NSDate distantFuture]; + if (expirationDateString && expirationDateString.doubleValue > 0) { + expirationDate = [NSDate dateWithTimeIntervalSince1970:expirationDateString.doubleValue]; + } else if (parameters[@"expires_in"] && [parameters[@"expires_in"] integerValue] > 0) { + expirationDate = [NSDate dateWithTimeIntervalSinceNow:[parameters[@"expires_in"] integerValue]]; + } + _parameters.expirationDate = expirationDate; + + NSDate *dataAccessExpirationDate = [NSDate distantFuture]; + if (parameters[@"data_access_expiration_time"] && [parameters[@"data_access_expiration_time"] integerValue] > 0) { + dataAccessExpirationDate = [NSDate dateWithTimeIntervalSince1970:[parameters[@"data_access_expiration_time"] integerValue]]; + } + _parameters.dataAccessExpirationDate = dataAccessExpirationDate; + + NSError *error = nil; + NSDictionary *state = [FBSDKInternalUtility objectForJSONString:parameters[@"state"] error:&error]; + _parameters.challenge = [FBSDKUtility URLDecode:state[@"challenge"]]; +} + +- (void)setErrorWithDictionary:(NSDictionary *)parameters +{ + NSString *legacyErrorReason = parameters[@"error"]; + + if ([legacyErrorReason isEqualToString:@"service_disabled_use_browser"] || + [legacyErrorReason isEqualToString:@"service_disabled"]) { + _performExplicitFallback = YES; + } + + // if error is nil, then this should be processed as a cancellation unless + // _performExplicitFallback is set to YES and the log in behavior is Native. + _parameters.error = [NSError fbErrorFromReturnURLParameters:parameters]; +} + +- (void)attemptBrowserLogIn:(FBSDKLoginManager *)loginManager { + if (_observer != nil) { + [[NSNotificationCenter defaultCenter] removeObserver:_observer]; + _observer = nil; + } + + if ([FBSDKBridgeAPI sharedInstance].isActive) { + [loginManager logInWithBehavior:FBSDKLoginBehaviorBrowser]; + } else { + // The application is active but due to notification ordering the FBSDKApplicationDelegate + // doesn't know it yet. Wait one more turn of the run loop. + dispatch_async(dispatch_get_main_queue(), ^{ + [self attemptBrowserLogIn:loginManager]; + }); + } +} + +@end + +@implementation FBSDKLoginSystemAccountCompleter +{ + FBSDKLoginCompletionParameters *_parameters; +} + +- (instancetype)initWithTokenString:(NSString *)tokenString appID:(NSString *)appID +{ + if ((self = [super init]) != nil) { + _parameters = [[FBSDKLoginCompletionParameters alloc] init]; + + _parameters.accessTokenString = tokenString; + _parameters.appID = appID; + + _parameters.systemAccount = YES; + } + return self; +} + +- (void)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler +{ + void(^handlerCopy)(FBSDKLoginCompletionParameters *) = [handler copy]; + FBSDKLoginRequestMeAndPermissions(_parameters, ^{ + // Transform the FBSDKCoreKit error in to an FBSDKLoginKit error, if necessary. This specializes + // the graph errors in to User Checkpointed, Password Changed or Unconfirmed User. + // + // It's possible the graph error has a value set for NSRecoveryAttempterErrorKey but we don't + // have any login-specific attempter to provide since system auth succeeded and the error is a + // graph API error. + NSError *serverError = self->_parameters.error; + NSError *error = [NSError fbErrorFromServerError:serverError]; + if (error != nil) { + // In the event the user's password changed the Accounts framework will still return + // an access token but API calls will fail. Clear the access token from the result + // and use the special-case System Password changed error, which has different text + // to display to the user. + if (error.code == FBSDKLoginErrorPasswordChanged) { + [FBSDKSystemAccountStoreAdapter sharedInstance].forceBlockingRenew = YES; + + self->_parameters.accessTokenString = nil; + self->_parameters.appID = nil; + + error = [NSError fbErrorForSystemPasswordChange:serverError]; + } + + self->_parameters.error = error; + } + + handlerCopy(self->_parameters); + }); +} + +@end + +@implementation FBSDKLoginSystemAccountErrorCompleter +{ + FBSDKLoginCompletionParameters *_parameters; +} + +- (instancetype)initWithError:(NSError *)accountStoreError permissions:(NSSet *)permissions +{ + if ((self = [super init]) != nil) { + _parameters = [[FBSDKLoginCompletionParameters alloc] init]; + + NSError *error = [NSError fbErrorForSystemAccountStoreError:accountStoreError]; + if (error != nil) { + _parameters.error = error; + } else { + // The lack of an error indicates the user declined permissions + _parameters.declinedPermissions = permissions; + } + + _parameters.systemAccount = YES; + } + return self; +} + +- (void)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler +{ + handler(_parameters); +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h new file mode 100644 index 0000000000..922cf68e8d --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h @@ -0,0 +1,36 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface NSError (FBSDKLoginError) + ++ (NSError *)fbErrorForFailedLoginWithCode:(FBSDKLoginError)code; ++ (NSError *)fbErrorForSystemAccountStoreError:(NSError *)accountStoreError; ++ (NSError *)fbErrorForSystemPasswordChange:(NSError *)innerError; + ++ (nullable NSError *)fbErrorFromReturnURLParameters:(NSDictionary *)parameters; ++ (nullable NSError *)fbErrorFromServerError:(NSError *)serverError; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m new file mode 100644 index 0000000000..91e23f355a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m @@ -0,0 +1,248 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginError.h" + +#import "FBSDKCoreKit+Internal.h" + +#ifndef NS_ERROR_ENUM +#define NS_ERROR_ENUM(_domain, _name) \ +enum _name: NSInteger _name; \ +enum __attribute__((ns_error_domain(_domain))) _name: NSInteger +#endif + +typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginErrorSubcode) +{ + FBSDKLoginErrorSubcodeUserCheckpointed = 459, + FBSDKLoginErrorSubcodePasswordChanged = 460, + FBSDKLoginErrorSubcodeUnconfirmedUser = 464, +}; + +@implementation NSError (FBSDKLoginError) + ++ (NSError *)fbErrorForFailedLoginWithCode:(FBSDKLoginError)code +{ + return [self fbErrorForFailedLoginWithCode:code innerError:nil]; +} + ++ (NSError *)fbErrorForFailedLoginWithCode:(FBSDKLoginError)code + innerError:(NSError *)innerError +{ + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + + [FBSDKInternalUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; + + NSString *errorDomain = FBSDKLoginErrorDomain; + NSString *localizedDescription = nil; + + switch ((NSInteger)code) { + case FBSDKErrorNetwork: + errorDomain = FBSDKErrorDomain; + localizedDescription = + NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.Network", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Unable to connect to Facebook. Check your network connection and try again.", + @"The user facing error message when the Accounts framework encounters a network error."); + break; + case FBSDKLoginErrorUserCheckpointed: + localizedDescription = + NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.UserCheckpointed", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"You cannot log in to apps at this time. Please log in to www.facebook.com and follow the instructions given.", + @"The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed."); + break; + case FBSDKLoginErrorUnconfirmedUser: + localizedDescription = + NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.UnconfirmedUser", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Your account is not confirmed. Please log in to www.facebook.com and follow the instructions given.", + @"The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed."); + break; + case FBSDKLoginErrorSystemAccountAppDisabled: + localizedDescription = + NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.Disabled", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Access has not been granted to the Facebook account. Verify device settings.", + @"The user facing error message when the app slider has been disabled and login fails."); + break; + case FBSDKLoginErrorSystemAccountUnavailable: + localizedDescription = + NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.Unavailable", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"The Facebook account has not been configured on the device.", + @"The user facing error message when the device Facebook account is unavailable and login fails."); + break; + default: + break; + } + + [FBSDKInternalUtility dictionary:userInfo setObject:localizedDescription forKey:NSLocalizedDescriptionKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:localizedDescription forKey:FBSDKErrorLocalizedDescriptionKey]; + + return [NSError errorWithDomain:errorDomain + code:code + userInfo:userInfo]; +} + ++ (NSError *)fbErrorForSystemAccountStoreError:(NSError *)accountStoreError +{ + NSError *err = nil; + BOOL cancellation = NO; + + if ([accountStoreError.domain isEqualToString:FBSDKLoginErrorDomain] || + [accountStoreError.domain isEqualToString:FBSDKErrorDomain]) { + // If the requestAccess call results in a Facebook error, surface it as a top-level + // error. This implies it is not the typical user "disallows" case. + err = accountStoreError; + } else if ([accountStoreError.domain isEqualToString:@"com.apple.accounts"] && accountStoreError.code == 7) { + err = [self fbErrorWithSystemAccountStoreDeniedError:accountStoreError isCancellation:&cancellation]; + } + + if (err == nil && !cancellation) { + // create an error object with additional info regarding failed login + NSInteger errorCode = FBSDKLoginErrorSystemAccountUnavailable; + + NSString *errorDomain = accountStoreError.domain; + if ([errorDomain isEqualToString:NSURLErrorDomain] || + [errorDomain isEqualToString:@"kCFErrorDomainCFNetwork"]) { + errorCode = FBSDKErrorNetwork; + } + + err = [self fbErrorForFailedLoginWithCode:errorCode + innerError:accountStoreError]; + } + + return err; +} + ++ (NSError *)fbErrorForSystemPasswordChange:(NSError *)innerError +{ + NSString *failureReasonAndDescription = + NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.PasswordChange", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], + @"Your Facebook password has changed. To confirm your password, open Settings > Facebook and tap your name.", + @"The user facing error message when the device Facebook account password is incorrect and login fails."); + NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys: + failureReasonAndDescription, FBSDKErrorLocalizedDescriptionKey, + failureReasonAndDescription, NSLocalizedDescriptionKey, + nil]; + + [FBSDKInternalUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; + + return [NSError errorWithDomain:FBSDKLoginErrorDomain + code:FBSDKLoginErrorPasswordChanged + userInfo:userInfo]; +} + ++ (NSError *)fbErrorFromReturnURLParameters:(NSDictionary *)parameters +{ + NSError *error = nil; + + NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; + [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error_message"] forKey:FBSDKErrorDeveloperMessageKey]; + + if (userInfo.count > 0) { + [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error"] forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error_code"] forKey:FBSDKGraphRequestErrorGraphErrorCodeKey]; + + if (!userInfo[FBSDKErrorDeveloperMessageKey]) { + [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error_reason"] forKey:FBSDKErrorDeveloperMessageKey]; + } + + userInfo[FBSDKGraphRequestErrorKey] = @(FBSDKGraphRequestErrorOther); + + error = [NSError errorWithDomain:FBSDKErrorDomain + code:FBSDKErrorGraphRequestGraphAPI + userInfo:userInfo]; + } + + return error; +} + ++ (NSError *)fbErrorFromServerError:(NSError *)serverError +{ + NSError *loginError = nil; + + if ([serverError.domain isEqualToString:FBSDKErrorDomain]) { + NSDictionary *response = [FBSDKTypeUtility dictionaryValue:serverError.userInfo[FBSDKGraphRequestErrorParsedJSONResponseKey]]; + NSDictionary *body = [FBSDKTypeUtility dictionaryValue:response[@"body"]]; + NSDictionary *error = [FBSDKTypeUtility dictionaryValue:body[@"error"]]; + NSInteger subcode = [FBSDKTypeUtility integerValue:error[@"error_subcode"]]; + + switch (subcode) { + case FBSDKLoginErrorSubcodeUserCheckpointed: + loginError = [self fbErrorForFailedLoginWithCode:FBSDKLoginErrorUserCheckpointed + innerError:serverError]; + break; + case FBSDKLoginErrorSubcodePasswordChanged: + loginError = [self fbErrorForFailedLoginWithCode:FBSDKLoginErrorPasswordChanged + innerError:serverError]; + break; + case FBSDKLoginErrorSubcodeUnconfirmedUser: + loginError = [self fbErrorForFailedLoginWithCode:FBSDKLoginErrorUnconfirmedUser + innerError:serverError]; + break; + } + } + + return loginError; +} + ++ (NSError *)fbErrorWithSystemAccountStoreDeniedError:(NSError *)accountStoreError + isCancellation:(BOOL *)cancellation +{ + // The Accounts framework returns an ACErrorPermissionDenied error for both user denied errors, + // Facebook denied errors, and other things. Unfortunately examining the contents of the + // description is the only means available to determine the reason for the error. + NSString *description = accountStoreError.userInfo[NSLocalizedDescriptionKey]; + NSError *err = nil; + + if (description) { + // If a parenthetical error code exists, map it ot a Facebook server error + FBSDKLoginError errorCode = FBSDKLoginErrorReserved; + if ([description rangeOfString:@"(459)"].location != NSNotFound) { + // The Facebook server could not fulfill this access request: Error validating access token: + // You cannot access the app till you log in to www.facebook.com and follow the instructions given. (459) + + // The OAuth endpoint directs people to www.facebook.com when an account has been + // checkpointed. If the web address is present, assume it's due to a checkpoint. + errorCode = FBSDKLoginErrorUserCheckpointed; + } else if ([description rangeOfString:@"(452)"].location != NSNotFound || + [description rangeOfString:@"(460)"].location != NSNotFound) { + // The Facebook server could not fulfill this access request: Error validating access token: + // Session does not match current stored session. This may be because the user changed the password since + // the time the session was created or Facebook has changed the session for security reasons. (452)or(460) + + // If the login failed due to the session changing, maybe it's due to the password + // changing. Direct the user to update the password in the Settings > Facebook. + err = [self fbErrorForSystemPasswordChange:accountStoreError]; + } else if ([description rangeOfString:@"(464)"].location != NSNotFound) { + // The Facebook server could not fulfill this access request: Error validating access token: + // Sessions for the user are not allowed because the user is not a confirmed user. (464) + errorCode = FBSDKLoginErrorUnconfirmedUser; + } + + if (errorCode != FBSDKLoginErrorReserved) { + err = [self fbErrorForFailedLoginWithCode:errorCode]; + } + } else { + // If there is no description, assume this is a user cancellation. No error object is + // returned for a cancellation. + if (cancellation != NULL) { + *cancellation = YES; + } + } + + return err; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h new file mode 100644 index 0000000000..74b65971eb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h @@ -0,0 +1,24 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginCompletion+Internal.h" +#import "FBSDKLoginError.h" +#import "FBSDKLoginManager+Internal.h" +#import "FBSDKLoginUtility.h" diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h new file mode 100644 index 0000000000..77ddb6d7bd --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h @@ -0,0 +1,81 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCoreKit+Internal.h" + +@class FBSDKAccessToken; +@class FBSDKLoginCompletionParameters; + +@interface FBSDKLoginManagerSystemAccountState : NSObject +@property (nonatomic, assign) BOOL didShowDialog; +@property (nonatomic, getter=isReauthorize) BOOL reauthorize; +@property (nonatomic, getter=isUnTOSedDevice) BOOL unTOSedDevice; +@end + +@interface FBSDKLoginManager () +@property (nonatomic, weak) UIViewController *fromViewController; +@property (nonatomic, readonly) NSSet *requestedPermissions; + +- (void)completeAuthentication:(FBSDKLoginCompletionParameters *)parameters expectChallenge:(BOOL)expectChallenge; + +// available to internal types to trigger login without checking read/publish mixtures. +- (void)logInWithPermissions:(NSSet *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler; +- (void)logInWithBehavior:(FBSDKLoginBehavior)loginBehavior; + +// made available for testing only +- (NSDictionary *)logInParametersWithPermissions:(NSSet *)permissions serverConfiguration:(FBSDKServerConfiguration *)serverConfiguration; +// made available for testing only +- (void)validateReauthentication:(FBSDKAccessToken *)currentToken withResult:(FBSDKLoginManagerLoginResult *)loginResult; + +// for testing only +- (void)setHandler:(FBSDKLoginManagerRequestTokenHandler)handler; +// for testing only +- (void)setRequestedPermissions:(NSSet *)requestedPermissions; +// for testing only +- (NSString *)loadExpectedChallenge; +@end + +// the category is made available for testing only +@interface FBSDKLoginManager (Native) + +- (void)performNativeLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))handler; +- (void)performBrowserLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSString *,NSError*))handler; + +@end + +// the category is made available for testing only +@interface FBSDKLoginManager (Accounts) + +- (void)beginSystemLogIn; +- (void)performSystemLogIn; +- (void)continueSystemLogInWithTokenString:(NSString *)oauthToken error:(NSError *)accountStoreError state:(FBSDKLoginManagerSystemAccountState *)state; + +- (void)fallbackToNativeBehavior; + +@end + +// the category is made available for testing only +@interface FBSDKLoginManager (WebDialog) + +- (void)performWebLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))handler; + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h new file mode 100644 index 0000000000..640d47b109 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h @@ -0,0 +1,48 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginManager+Internal.h" + +FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_Native; +FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_Browser; +FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_System; +FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_Webview; +FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_SFVC; + + +@interface FBSDKLoginManagerLogger : NSObject ++ (FBSDKLoginManagerLogger *)loggerFromParameters:(NSDictionary *)parameters; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithLoggingToken:(NSString *)loggingToken; + +// this must not retain loginManager - only used to conveniently grab various properties to log. +- (void)startSessionForLoginManager:(FBSDKLoginManager *)loginManager; +- (void)endSession; + +- (void)startAuthMethod:(NSString *)authMethod; +- (void)endLoginWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error; + +- (NSDictionary *)parametersWithTimeStampAndClientState:(NSDictionary *)loginParams forAuthMethod:(NSString *)authMethod; +- (void)willAttemptAppSwitchingBehavior; +- (void)systemAuthDidShowDialog:(BOOL)didShowDialog isUnTOSedDevice:(BOOL)isUnTOSedDevice; + +- (void)logNativeAppDialogResult:(BOOL)result dialogDuration:(NSTimeInterval)dialogDuration; +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m new file mode 100644 index 0000000000..a47015c828 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m @@ -0,0 +1,309 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginManagerLogger.h" + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKLoginError.h" +#import "FBSDKLoginManagerLoginResult+Internal.h" +#import "FBSDKLoginUtility.h" + +NSString *const FBSDKLoginManagerLoggerAuthMethod_Native = @"fb_application_web_auth"; +NSString *const FBSDKLoginManagerLoggerAuthMethod_Browser = @"browser_auth"; +NSString *const FBSDKLoginManagerLoggerAuthMethod_System = @"integrated_auth"; +NSString *const FBSDKLoginManagerLoggerAuthMethod_Webview = @"fallback_auth"; +NSString *const FBSDKLoginManagerLoggerAuthMethod_SFVC = @"sfvc_auth"; + +static NSString *const FBSDKLoginManagerLoggingClientStateKey = @"state"; +static NSString *const FBSDKLoginManagerLoggingClientStateIsClientState = @"com.facebook.sdk_client_state"; + +static NSString *const FBSDKLoginManagerLoggerParamIdentifierKey = @"0_auth_logger_id"; +static NSString *const FBSDKLoginManagerLoggerParamTimestampKey = @"1_timestamp_ms"; +static NSString *const FBSDKLoginManagerLoggerParamResultKey = @"2_result"; +static NSString *const FBSDKLoginManagerLoggerParamAuthMethodKey = @"3_method"; +static NSString *const FBSDKLoginManagerLoggerParamErrorCodeKey = @"4_error_code"; +static NSString *const FBSDKLoginManagerLoggerParamErrorMessageKey = @"5_error_message"; +static NSString *const FBSDKLoginManagerLoggerParamExtrasKey = @"6_extras"; +static NSString *const FBSDKLoginManagerLoggerParamLoggingTokenKey = @"7_logging_token"; + +static NSString *const FBSDKLoginManagerLoggerValueEmpty = @""; + +static NSString *const FBSDKLoginManagerLoggerResultSuccessString = @"success"; +static NSString *const FBSDKLoginManagerLoggerResultCancelString = @"cancelled"; +static NSString *const FBSDKLoginManagerLoggerResultErrorString = @"error"; +static NSString *const FBSDKLoginManagerLoggerResultSkippedString = @"skipped"; + +static NSString *const FBSDKLoginManagerLoggerTryNative = @"tryFBAppAuth"; +static NSString *const FBSDKLoginManagerLoggerTryBrowser = @"trySafariAuth"; +static NSString *const FBSDKLoginManagerLoggerTrySystemAccount = @"tryIntegratedAuth"; +static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; + +@implementation FBSDKLoginManagerLogger +{ +@private + NSString *_identifier; + NSMutableDictionary *_extras; + + NSString *_lastResult; + NSError *_lastError; + + NSString *_authMethod; + NSString *_loggingToken; +} + ++ (FBSDKLoginManagerLogger *)loggerFromParameters:(NSDictionary *)parameters +{ + NSDictionary *clientState = [FBSDKInternalUtility objectForJSONString:parameters[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; + + id isClientState = clientState[FBSDKLoginManagerLoggingClientStateIsClientState]; + if ([isClientState isKindOfClass:[NSNumber class]] && [isClientState boolValue]) { + FBSDKLoginManagerLogger *logger = [[self alloc] initWithLoggingToken:nil]; + if (logger != nil) { + logger->_identifier = clientState[FBSDKLoginManagerLoggerParamIdentifierKey]; + logger->_authMethod = clientState[FBSDKLoginManagerLoggerParamAuthMethodKey]; + logger->_loggingToken = clientState[FBSDKLoginManagerLoggerParamLoggingTokenKey]; + return logger; + } + } + return nil; +} + +- (instancetype)initWithLoggingToken:(NSString *)loggingToken +{ + if ((self = [super init]) != nil) { + _identifier = [NSUUID UUID].UUIDString; + _extras = [NSMutableDictionary dictionary]; + _loggingToken = [loggingToken copy]; + } + return self; +} + +- (void)startSessionForLoginManager:(FBSDKLoginManager *)loginManager +{ + BOOL isReauthorize = ([FBSDKAccessToken currentAccessToken] != nil); + BOOL willTryNative = NO; + BOOL willTryBrowser = NO; + BOOL willTrySystemAccount = NO; + BOOL willTryWebView = NO; + NSString *behaviorString = nil; + + switch (loginManager.loginBehavior) { + case FBSDKLoginBehaviorNative: + willTryNative = YES; + willTryBrowser = YES; + behaviorString = @"FBSDKLoginBehaviorNative"; + break; + case FBSDKLoginBehaviorBrowser: + willTryBrowser = YES; + behaviorString = @"FBSDKLoginBehaviorBrowser"; + break; + case FBSDKLoginBehaviorSystemAccount: + willTryNative = YES; + willTryBrowser = YES; + willTrySystemAccount = YES; + behaviorString = @"FBSDKLoginBehaviorSystemAccount"; + break; + case FBSDKLoginBehaviorWeb: + willTryWebView = YES; + behaviorString = @"FBSDKLoginBehaviorWeb"; + break; + } + + [_extras addEntriesFromDictionary:@{ + FBSDKLoginManagerLoggerTryNative : @(willTryNative), + FBSDKLoginManagerLoggerTryBrowser : @(willTryBrowser), + FBSDKLoginManagerLoggerTrySystemAccount : @(willTrySystemAccount), + FBSDKLoginManagerLoggerTryWebView : @(willTryWebView), + @"isReauthorize" : @(isReauthorize), + @"login_behavior" : behaviorString, + @"default_audience" : [FBSDKLoginUtility stringForAudience:loginManager.defaultAudience], + @"permissions" : [loginManager.requestedPermissions.allObjects componentsJoinedByString:@","] ?: @"" + }]; + + [self logEvent:FBSDKAppEventNameFBSessionAuthStart params:[self _parametersForNewEvent]]; +} + +- (void)endSession +{ + [self logEvent:FBSDKAppEventNameFBSessionAuthEnd result:_lastResult error:_lastError]; +} + +- (void)startAuthMethod:(NSString *)authMethod +{ + _authMethod = [authMethod copy]; + [self logEvent:FBSDKAppEventNameFBSessionAuthMethodStart params:[self _parametersForNewEvent]]; +} + +- (void)endLoginWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error +{ + NSString *resultString = @""; + + if (error != nil) { + resultString = FBSDKLoginManagerLoggerResultErrorString; + } else if (result.isCancelled) { + resultString = FBSDKLoginManagerLoggerResultCancelString; + } else if (result.isSkipped) { + resultString = FBSDKLoginManagerLoggerResultSkippedString; + } else if (result.token) { + resultString = FBSDKLoginManagerLoggerResultSuccessString; + if (result.declinedPermissions.count) { + _extras[@"declined_permissions"] = [result.declinedPermissions.allObjects componentsJoinedByString:@","]; + } + } + + _lastResult = resultString; + _lastError = error; + [_extras addEntriesFromDictionary:result.loggingExtras]; + + [self logEvent:FBSDKAppEventNameFBSessionAuthMethodEnd result:resultString error:error]; +} + +- (NSDictionary *)parametersWithTimeStampAndClientState:(NSDictionary *)loginParams forAuthMethod:(NSString *)authMethod +{ + NSMutableDictionary *params = [loginParams mutableCopy]; + + NSTimeInterval timeValue = (NSTimeInterval)FBSDKMonotonicTimeGetCurrentSeconds(); + NSString *e2eTimestampString = [FBSDKInternalUtility JSONStringForObject:@{ @"init" : @(timeValue) } + error:NULL + invalidObjectHandler:NULL]; + params[@"e2e"] = e2eTimestampString; + + NSDictionary *existingState = [FBSDKInternalUtility objectForJSONString:params[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; + params[FBSDKLoginManagerLoggingClientStateKey] = [self clientStateForAuthMethod:authMethod andExistingState:existingState]; + + return params; +} + +- (void)willAttemptAppSwitchingBehavior +{ + NSString *defaultUrlScheme = [NSString stringWithFormat:@"fb%@%@", [FBSDKSettings appID], [FBSDKSettings appURLSchemeSuffix] ?: @""]; + BOOL isURLSchemeRegistered = [FBSDKInternalUtility isRegisteredURLScheme:defaultUrlScheme]; + + BOOL isFacebookAppCanOpenURLSchemeRegistered = [FBSDKInternalUtility isRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_FACEBOOK]; + BOOL isMessengerAppCanOpenURLSchemeRegistered = [FBSDKInternalUtility isRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_MESSENGER]; + + [_extras addEntriesFromDictionary:@{ + @"isURLSchemeRegistered" : @(isURLSchemeRegistered), + @"isFacebookAppCanOpenURLSchemeRegistered" : @(isFacebookAppCanOpenURLSchemeRegistered), + @"isMessengerAppCanOpenURLSchemeRegistered" : @(isMessengerAppCanOpenURLSchemeRegistered), + }]; +} + +- (void)systemAuthDidShowDialog:(BOOL)didShowDialog isUnTOSedDevice:(BOOL)isUnTOSedDevice +{ + [_extras addEntriesFromDictionary:@{ + @"isUntosedDevice" : @(isUnTOSedDevice), + @"dialogShown" : @(didShowDialog), + }]; +} + +- (void)logNativeAppDialogResult:(BOOL)result dialogDuration:(NSTimeInterval)dialogDuration +{ + NSOperatingSystemVersion iOS10Version = { .majorVersion = 10, .minorVersion = 0, .patchVersion = 0 }; + if ([FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS10Version]) { + _extras[@"native_app_login_dialog_duration"] = @(dialogDuration); + _extras[@"native_app_login_dialog_result"] = @(result); + [self logEvent:FBSDKAppEventNameFBSessionFASLoginDialogResult params:[self _parametersForNewEvent]]; + } +} + +#pragma mark - Private + +- (NSString *)clientStateForAuthMethod:(NSString *)authMethod andExistingState:(NSDictionary *)existingState +{ + NSDictionary *clientState = @{ + FBSDKLoginManagerLoggerParamAuthMethodKey: authMethod ?: @"", + FBSDKLoginManagerLoggerParamIdentifierKey: _identifier, + FBSDKLoginManagerLoggingClientStateIsClientState: @YES, + }; + + if (existingState) { + NSMutableDictionary *mutableState = [clientState mutableCopy]; + [mutableState addEntriesFromDictionary:existingState]; + clientState = mutableState; + } + + return [FBSDKInternalUtility JSONStringForObject:clientState error:NULL invalidObjectHandler:NULL]; +} + +- (NSMutableDictionary *)_parametersForNewEvent +{ + NSMutableDictionary *eventParameters = [[NSMutableDictionary alloc] init]; + + // NOTE: We ALWAYS add all params to each event, to ensure predictable mapping on the backend. + eventParameters[FBSDKLoginManagerLoggerParamIdentifierKey] = _identifier ?: FBSDKLoginManagerLoggerValueEmpty; + eventParameters[FBSDKLoginManagerLoggerParamTimestampKey] = @(round(1000 * [NSDate date].timeIntervalSince1970)); + eventParameters[FBSDKLoginManagerLoggerParamResultKey] = FBSDKLoginManagerLoggerValueEmpty; + [FBSDKInternalUtility dictionary:eventParameters setObject:_authMethod forKey:FBSDKLoginManagerLoggerParamAuthMethodKey]; + eventParameters[FBSDKLoginManagerLoggerParamErrorCodeKey] = FBSDKLoginManagerLoggerValueEmpty; + eventParameters[FBSDKLoginManagerLoggerParamErrorMessageKey] = FBSDKLoginManagerLoggerValueEmpty; + eventParameters[FBSDKLoginManagerLoggerParamExtrasKey] = FBSDKLoginManagerLoggerValueEmpty; + eventParameters[FBSDKLoginManagerLoggerParamLoggingTokenKey] = _loggingToken ?: FBSDKLoginManagerLoggerValueEmpty; + + return eventParameters; +} + +- (void)logEvent:(NSString *)eventName params:(NSMutableDictionary *)params +{ + if (_identifier) { + NSString *extrasJSONString = [FBSDKInternalUtility JSONStringForObject:_extras + error:NULL + invalidObjectHandler:NULL]; + if (extrasJSONString) { + params[FBSDKLoginManagerLoggerParamExtrasKey] = extrasJSONString; + } + [_extras removeAllObjects]; + + [FBSDKAppEvents logImplicitEvent:eventName valueToSum:nil parameters:params accessToken:nil]; + } +} + +- (void)logEvent:(NSString *)eventName result:(NSString *)result error:(NSError *)error +{ + NSMutableDictionary *params = [self _parametersForNewEvent]; + + params[FBSDKLoginManagerLoggerParamResultKey] = result; + + if ([error.domain isEqualToString:FBSDKErrorDomain] || [error.domain isEqualToString:FBSDKLoginErrorDomain]) { + // tease apart the structure. + + // first see if there is an explicit message in the error's userInfo. If not, default to the reason, + // which is less useful. + NSString *value = error.userInfo[@"error_message"] ?: error.userInfo[FBSDKErrorLocalizedDescriptionKey]; + [FBSDKInternalUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorMessageKey]; + + value = error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] ?: [NSString stringWithFormat:@"%ld", (long)error.code]; + [FBSDKInternalUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorCodeKey]; + + NSError *innerError = error.userInfo[NSUnderlyingErrorKey]; + if (innerError != nil) { + value = innerError.userInfo[@"error_message"] ?: innerError.userInfo[NSLocalizedDescriptionKey]; + [FBSDKInternalUtility dictionary:_extras setObject:value forKey:@"inner_error_message"]; + + value = innerError.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] ?: [NSString stringWithFormat:@"%ld", (long)innerError.code]; + [FBSDKInternalUtility dictionary:_extras setObject:value forKey:@"inner_error_code"]; + } + } else if (error) { + params[FBSDKLoginManagerLoggerParamErrorCodeKey] = @(error.code); + params[FBSDKLoginManagerLoggerParamErrorMessageKey] = error.localizedDescription; + } + + [self logEvent:eventName params:params]; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h new file mode 100644 index 0000000000..545ef0e3d2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h @@ -0,0 +1,32 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface FBSDKLoginManagerLoginResult() + +@property (nonatomic, readonly) NSDictionary *loggingExtras; + +// legacy flag indicating this is an intermediary result only for logging purposes. +@property (nonatomic, assign) BOOL isSkipped; + +// adds additional logging entry to extras - only sent as part of `endLoginWithResult:` +-(void)addLoggingExtra:(id)object forKey:(id)key; +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h new file mode 100644 index 0000000000..b8dcc4c8bc --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h @@ -0,0 +1,33 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 + +@interface FBSDKLoginUtility : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + ++ (NSString *)stringForAudience:(FBSDKDefaultAudience)audience; ++ (NSDictionary *)queryParamsFromLoginURL:(NSURL *)url; + ++ (NSString *)userIDFromSignedRequest:(NSString *)signedRequest; + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m new file mode 100644 index 0000000000..10592ba602 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m @@ -0,0 +1,80 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKLoginUtility.h" + +#import +#import + +#import "FBSDKCoreKit+Internal.h" +#import "FBSDKLoginConstants.h" + +@implementation FBSDKLoginUtility + ++ (NSString *)stringForAudience:(FBSDKDefaultAudience)audience +{ + switch (audience) { + case FBSDKDefaultAudienceOnlyMe: + return @"only_me"; + case FBSDKDefaultAudienceFriends: + return @"friends"; + case FBSDKDefaultAudienceEveryone: + return @"everyone"; + } +} + ++ (NSDictionary *)queryParamsFromLoginURL:(NSURL *)url +{ + NSString *expectedUrlPrefix = [FBSDKInternalUtility appURLWithHost:@"authorize" path:nil queryParameters:nil error:NULL].absoluteString; + if (![url.absoluteString hasPrefix:expectedUrlPrefix]) { + // Don't have an App ID, just verify path. + NSString *host = url.host; + if (![host isEqualToString:@"authorize"]) { + return nil; + } + } + NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:[FBSDKInternalUtility dictionaryFromFBURL:url]]; + + NSString *userID = [[self class] userIDFromSignedRequest:params[@"signed_request"]]; + if (userID) { + params[@"user_id"] = userID; + } + + return params; +} + ++ (NSString *)userIDFromSignedRequest:(NSString *)signedRequest +{ + if (!signedRequest) { + return nil; + } + + NSArray *signatureAndPayload = [signedRequest componentsSeparatedByString:@"."]; + NSString *userID = nil; + + if (signatureAndPayload.count == 2) { + NSData *data = [FBSDKBase64 decodeAsData:signatureAndPayload[1]]; + if (data) { + NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + userID = dictionary[@"user_id"]; + } + } + return userID; +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h new file mode 100644 index 0000000000..b9791388f2 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h @@ -0,0 +1,23 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "FBSDKCoreKit+Internal.h" + +@interface _FBSDKLoginRecoveryAttempter : FBSDKErrorRecoveryAttempter + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m new file mode 100644 index 0000000000..3152cef260 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m @@ -0,0 +1,47 @@ +// Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. 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 "_FBSDKLoginRecoveryAttempter.h" + +#import "FBSDKLoginKit+Internal.h" + +@implementation _FBSDKLoginRecoveryAttempter + +- (void)attemptRecoveryFromError:(NSError *)error + optionIndex:(NSUInteger)recoveryOptionIndex + delegate:(id)delegate + didRecoverSelector:(SEL)didRecoverSelector + contextInfo:(void *)contextInfo { + + void(^handler)(BOOL) = ^(BOOL didRecover) { + [super completeRecovery:didRecover delegate:delegate didRecoverSelector:didRecoverSelector contextInfo:contextInfo]; + }; + NSSet *currentPermissions = [FBSDKAccessToken currentAccessToken].permissions; + if (recoveryOptionIndex == 0 && currentPermissions.count > 0) { + FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; + [login logInWithPermissions:currentPermissions handler:^(FBSDKLoginManagerLoginResult *result, NSError *loginError) { + // we can only consider a recovery successful if there are no declines + // (note this could still set an updated currentAccessToken). + handler(!loginError && !result.isCancelled && result.declinedPermissions.count == 0); + }]; + } else { + handler(NO); + } +} + +@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/LICENSE b/iphone/Maps/Pods/FBSDKLoginKit/LICENSE new file mode 100644 index 0000000000..bdb9fc54be --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/LICENSE @@ -0,0 +1,17 @@ +Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. + +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. 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/iphone/Maps/Pods/FBSDKLoginKit/README.md b/iphone/Maps/Pods/FBSDKLoginKit/README.md new file mode 100644 index 0000000000..1d8dcaefa0 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKLoginKit/README.md @@ -0,0 +1,60 @@ +# Facebook SDK for iOS + +[![Platforms](https://img.shields.io/cocoapods/p/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) +[![Build Status](https://travis-ci.org/facebook/facebook-objc-sdk.svg?branch=master)](https://travis-ci.org/facebook/facebook-objc-sdk) + +[![CocoaPods](https://img.shields.io/cocoapods/v/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +This open-source library allows you to integrate Facebook into your iOS app. + +Learn more about the provided samples, documentation, integrating the SDK into your app, accessing source code, and more +at https://developers.facebook.com/docs/ios + +NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookSDK + +## TRY IT OUT + +1. Download the SDK at or via CocoaPods by adding the 'FBSDKCoreKit', + 'FBSDKLoginKit', and 'FBSDKShareKit' pods. +2. Test your install: build and run the project at `~/Documents/FacebookSDK/Samples/Scrumptious/Scrumptious.xcodeproj` +3. Check-out the tutorials available online at: +4. Start coding! Visit for tutorials and reference documentation. + +## FEATURES + +- Login - +- Sharing - +- App Links - +- Graph API - +- Analytics - + +## GIVE FEEDBACK + +Please report bugs or issues to + +You can also join the [Facebook Developers Group on Facebook](https://www.facebook.com/groups/fbdevelopers/) or ask +questions on [Stack Overflow](http://facebook.stackoverflow.com) + +## LICENSE + +See the [LICENSE](LICENSE) file. + +## DEVELOPER TERMS + +- By enabling Facebook integrations, including through this SDK, you can share information with Facebook, including + information about people’s use of your app. Facebook will use information received in accordance with our + [Data Use Policy](https://www.facebook.com/about/privacy/), including to provide you with insights about the + effectiveness of your ads and the use of your app. These integrations also enable us and our partners to serve ads on + and off Facebook. +- You may limit your sharing of information with us by updating the Insights control in the developer tool + `https://developers.facebook.com/apps/{app_id}/settings/advanced`. +- If you use a Facebook integration, including to share information with us, you agree and confirm that you have + provided appropriate and sufficiently prominent notice to and obtained the appropriate consent from your users + regarding such collection, use, and disclosure (including, at a minimum, through your privacy policy). You further + agree that you will not share information with us about children under the age of 13. +- You agree to comply with all applicable laws and regulations and also agree to our Terms + , including our Platform Policies .and + Advertising Guidelines, as applicable . + +By using the Facebook SDK for iOS you agree to these terms. diff --git a/iphone/Maps/Pods/Manifest.lock b/iphone/Maps/Pods/Manifest.lock new file mode 100644 index 0000000000..34a03eba2c --- /dev/null +++ b/iphone/Maps/Pods/Manifest.lock @@ -0,0 +1,41 @@ +PODS: + - ActionSheetPicker-3.0 (2.3.0) + - AppsFlyerFramework (4.8.9) + - Bolts (1.9.0): + - Bolts/AppLinks (= 1.9.0) + - Bolts/Tasks (= 1.9.0) + - Bolts/AppLinks (1.9.0): + - Bolts/Tasks + - Bolts/Tasks (1.9.0) + - FBSDKCoreKit (4.42.0): + - Bolts (~> 1.9) + - FBSDKLoginKit (4.42.0): + - FBSDKCoreKit + - Pushwoosh (5.9.0) + +DEPENDENCIES: + - ActionSheetPicker-3.0 (= 2.3.0) + - AppsFlyerFramework (= 4.8.9) + - FBSDKLoginKit (= 4.42.0) + - Pushwoosh (= 5.9.0) + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - ActionSheetPicker-3.0 + - AppsFlyerFramework + - Bolts + - FBSDKCoreKit + - FBSDKLoginKit + - Pushwoosh + +SPEC CHECKSUMS: + ActionSheetPicker-3.0: eef157d75e151f255c5333d26656c7fbfe905a51 + AppsFlyerFramework: 0fc823ec9b77f913e4108caa82c969be033058b1 + Bolts: ac6567323eac61e203f6a9763667d0f711be34c8 + FBSDKCoreKit: aa42f1c384775f8b075f53a43080474278e9701d + FBSDKLoginKit: 373830c68aa48c9e8f0bfed93a3e32d2ca8963a0 + Pushwoosh: 8eda99efebf90e44a53b55976db51c5da9b18deb + +PODFILE CHECKSUM: c14eb7e3b15fcc412e5bfd713ad86281c4417a12 + +COCOAPODS: 1.6.1 diff --git a/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj b/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..e9d83e3100 --- /dev/null +++ b/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,2800 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 106364887199D3E9FF7B854AE4F020F4 /* Pushwoosh */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 6FEAB02AE1C9E18DA46D560BC39B4027 /* Build configuration list for PBXAggregateTarget "Pushwoosh" */; + buildPhases = ( + ); + dependencies = ( + ); + name = Pushwoosh; + }; + 96173E80FA991F6EE9415F67D21963FD /* AppsFlyerFramework */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 5418348C4E12C2FA948C40C515696052 /* Build configuration list for PBXAggregateTarget "AppsFlyerFramework" */; + buildPhases = ( + ); + dependencies = ( + ); + name = AppsFlyerFramework; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 005C0762029A50B083FA6BA100C580B5 /* BFWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CB515EA5B403B27658DC22B82046CE0 /* BFWebViewAppLinkResolver.m */; }; + 009DA4299AB76253D88DD20328599318 /* FBSDKViewHierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = F3472270CFDC48FF5F8D6F894C7AA5AE /* FBSDKViewHierarchy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0121BA922AFD6D7168982A23B9524646 /* FBSDKBridgeAPIProtocolWebV2.m in Sources */ = {isa = PBXBuildFile; fileRef = E22747A08AF1288EFAFE00E99C7D3C3F /* FBSDKBridgeAPIProtocolWebV2.m */; }; + 024958D4C78D687193595E24913AC528 /* FBSDKLoginConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 218F53C4F3854CD087C0C0A6D8306C2A /* FBSDKLoginConstants.m */; }; + 026D18B6C274AB984480AF050CFD902B /* FBSDKGraphRequestConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = FD29AFC7900D19074E1F809228552B7D /* FBSDKGraphRequestConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02B713BD93003813EDA7EB6CD8AA0B29 /* FBSDKError.m in Sources */ = {isa = PBXBuildFile; fileRef = 3989F572C0F73EE84A32F4BCE28FE20E /* FBSDKError.m */; }; + 02DB1CA292DB4D35599E281328D3101E /* FBSDKLoginUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = A921967D737D38E4B1C08A1308910BDE /* FBSDKLoginUtility.m */; }; + 035FAD4570D147C0360ECB57D785ABC5 /* FBSDKGraphRequestConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FBF08C2477D0A863C2E46B4785DBEF9 /* FBSDKGraphRequestConnection.m */; }; + 061EA524B535197E98AD2516B329F018 /* BFAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F08FBE811C27F612A8A3C14CC02ED38 /* BFAppLink.m */; }; + 065FF1436AF80D1A24608980892A5FA2 /* FBSDKGraphRequestBody.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C2F21330F0D55875466873D329350F8 /* FBSDKGraphRequestBody.m */; }; + 0692B27D249702ED612E99508B2EDADC /* FBSDKCodelessPathComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D6914C566D251A55EEFAA417D6A836E /* FBSDKCodelessPathComponent.m */; }; + 08030279DBE3D477EFA34EF29A11AFEA /* FBSDKBridgeAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 84506500D99E43DF1740CADEECC86CAA /* FBSDKBridgeAPI.m */; }; + 0928CE3A53F6D04C70BE9A8A9CCEA03D /* FBSDKBridgeAPIProtocolType.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C7B0187F4AC9ED8726C0F2A7DFF8150 /* FBSDKBridgeAPIProtocolType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A53DA959D13C0254D3FDC2DAA109A10 /* FBSDKURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F0CF3FB705ECCDE142C46BB87EA62BD /* FBSDKURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AC8340C8C789912DA6D69E8E672BB52 /* FBSDKWebDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = 128165CE6EA850C1FD749960B8F30A39 /* FBSDKWebDialogView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B7BC02AE1BAB98A366B3877A216EEB5 /* FBSDKGraphRequestMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = B14CEBA829519E9627C159925FF88F7A /* FBSDKGraphRequestMetadata.m */; }; + 0C3D8CEAEB8240382938582EDBFC0AA0 /* FBSDKSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA28C04515EACA48FE0AB49963EDDEF /* FBSDKSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0DDF24B3F018D337C54B6A94947F30BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED635F35B70DA7C626200C7E1CF841BE /* Foundation.framework */; }; + 0E6AD240F6FE70D709F97B9D21E5FD00 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED635F35B70DA7C626200C7E1CF841BE /* Foundation.framework */; }; + 0E821B541BDB8E08E7E62C71A422A2A5 /* FBSDKProfilePictureView.h in Headers */ = {isa = PBXBuildFile; fileRef = 505E5F104D466EAF3C60003033F0BB34 /* FBSDKProfilePictureView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FCB9ACBAD1CB5D33E554EE4975C30FD /* FBSDKLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 93720A9C4341F4E1616392A07A7F1761 /* FBSDKLoginManager.m */; }; + 10D455ABEC40A28AC197DE088BB33390 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED635F35B70DA7C626200C7E1CF841BE /* Foundation.framework */; }; + 10EAB040554BC39A7F0823FB62FF0B2E /* FBSDKGraphErrorRecoveryProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 46067ADDB6B2890FE414FFEDCD01BE24 /* FBSDKGraphErrorRecoveryProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 116D57AF5F95AE3B548C516C383A7E2B /* FBSDKBridgeAPIProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B3D2AB06A4E4B1752048CA3CD06F0FD /* FBSDKBridgeAPIProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 11B62E37CFAB4CC2BD81038EA66FC89F /* FBSDKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 74A9930C1D7A1AA9B2436EF3AD52F913 /* FBSDKIcon.m */; }; + 12307A8C7B7ED50B58EEFA3876779578 /* FBSDKDeviceLoginManagerResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FBE1484BA24B1335B9AF160C6A7BBA /* FBSDKDeviceLoginManagerResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 134DA3E801B574EBD7FF5FD36C1FB31B /* FBSDKCoreKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 91A066593CB57319C1C84843BF2CCBE9 /* FBSDKCoreKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 140881E88363B960CD238CAE6323A1C6 /* FBSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = CB81C3F12580E545869CEA501861ED32 /* FBSDKError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1490C7BC70CBFD72E1B207ABF758E00D /* ActionSheetPicker-3.0-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C769B45EF946AAEA6D08EBD2C9E9F51B /* ActionSheetPicker-3.0-dummy.m */; }; + 15F163462322D19BDD05FD6A4D02DA63 /* FBSDKLoginManagerLoginResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D95201A0A17FAE6F0B804370690A73DE /* FBSDKLoginManagerLoginResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16812CF0F0A17E07CF04D4B55F7AA887 /* FBSDKBoltsMeasurementEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D53018EBDAAB8718BD2D00D89E53E10 /* FBSDKBoltsMeasurementEventListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1701A2D59448E5E0EA7BFA9A2F0965DF /* FBSDKDeviceLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE48A67930DC88473D2A522CC776EA5 /* FBSDKDeviceLoginManager.m */; }; + 178336539D0DA3954CF9057CFA7D5934 /* FBSDKAccessTokenExpirer.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE153C4FD6D8E9644BEC3DCD35DD394 /* FBSDKAccessTokenExpirer.m */; }; + 185D055C8285D3A89CF5979A0AED0B1F /* FBSDKKeychainStoreViaBundleID.m in Sources */ = {isa = PBXBuildFile; fileRef = 06EBA8F289B47E5BAECCEECD375EA028 /* FBSDKKeychainStoreViaBundleID.m */; }; + 1ACBBE97DEFF51C2121970AD3153C43A /* FBSDKWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD86C38E46FAFCAAB13869766C9C77C /* FBSDKWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1AD372BE5FEB01B2E270F0B8D03A634D /* FBSDKSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = FFDFF54406EA421D1E0EDA7D57CAF380 /* FBSDKSwizzler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B6B7A37B08FF36CB623F008C3DEB0A5 /* FBSDKProfile+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B56E8666BD40B61E4290D9FCFD396DD /* FBSDKProfile+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C4AA26B685FC73303B2F776922F1040 /* FBSDKURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8F01AC08B7F25F8FED21D8287AA23E /* FBSDKURL.m */; }; + 1D03D970441EC1ED00D48B28471F049F /* FBSDKBridgeAPICrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E91A75CD8CC7BB4C2D8AD1C5211B74 /* FBSDKBridgeAPICrypto.m */; }; + 1DEDD45B32BD71B16444AC09E4018147 /* FBSDKUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A984B41AA4783FD394B8A45FF11A79E /* FBSDKUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E5D3BA686D00C3D0FE01BA5FE07D102 /* FBSDKMaleSilhouetteIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 886AB37C4A5B9DB83C856FBF832645FF /* FBSDKMaleSilhouetteIcon.m */; }; + 1E8E71DE7A9AE75F18B2FA6D0B4B8FE2 /* FBSDKTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23809299B5FB13CE35B0B911DFF5E8BD /* FBSDKTooltipView.m */; }; + 1F3C537B9ACE670ADE252F9E7F8D394A /* AbstractActionSheetPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 283C5165B8874B683ED2911585297B02 /* AbstractActionSheetPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1F408BFB714C7B69C8B0662FCBC44E7D /* ActionSheetDistancePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = AB16DBDEEB648EEA7620CEF72A35F9BB /* ActionSheetDistancePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F79222AEDF5302A0D2F1376F135777D /* ActionSheetMultipleStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = D1AC9823949E800367F15A7228B95B75 /* ActionSheetMultipleStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21D1719C9792C4AB4CDCFB21CC25F006 /* BFAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 01878201FB3576225EE82027791B1197 /* BFAppLink_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2318A0175B177D0341614BFADB34C2D0 /* FBSDKAccessTokenCacheV3_17.m in Sources */ = {isa = PBXBuildFile; fileRef = 26165DF7D809C93DC074433258549883 /* FBSDKAccessTokenCacheV3_17.m */; }; + 257A63239B74294F843C2A25105D77D6 /* FBSDKEventBindingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84423BF1361CC6D8ED67EF86D1937464 /* FBSDKEventBindingManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 259D76C568335CBB65F77CE50A060DEE /* FBSDKAccessTokenCacheV3_21.m in Sources */ = {isa = PBXBuildFile; fileRef = 97731C9828665FA46D7CAFB5ED483F32 /* FBSDKAccessTokenCacheV3_21.m */; }; + 27AA3E0A0B3D88C7E993D93A4A837EB7 /* FBSDKTriStateBOOL.h in Headers */ = {isa = PBXBuildFile; fileRef = D11B4649B82A725E4610A0B270C7624D /* FBSDKTriStateBOOL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27FA3A3EDE77327D53E1EA9A75AC2C64 /* BFMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C8B1AFF6B34D15D6984FBA231976B833 /* BFMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B580EFC285EC7137C3F1A731C4E90C3 /* FBSDKGateKeeperManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 24B6FD058296AB724F92904FA38F7B28 /* FBSDKGateKeeperManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C2F46ED1B3DAC8FC72CF376E9184CC5 /* FBSDKKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C7D19FE4452DE832F8EA22235DCA08A3 /* FBSDKKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C8FC2498105A60F19B6B62D12A5256D /* FBSDKTypeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = CF70E08FAD9C95686A6FD6D495C6D3E0 /* FBSDKTypeUtility.m */; }; + 2CBD582EBE7933D6215AE8A0F6CD6720 /* FBSDKBridgeAPIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = D4B751E56CAA5E9AB448346C596B7E8A /* FBSDKBridgeAPIResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2CDA69DD6E616B38EB173AC330502796 /* FBSDKBoltsMeasurementEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 556F88B694E03BCEC7CB9AB6E4D2222F /* FBSDKBoltsMeasurementEventListener.m */; }; + 2CE24B4B426A23C95F5DA7E86C6AC0D3 /* FBSDKAppEventsDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C27589E176D7A03FD59165039C9C81B /* FBSDKAppEventsDeviceInfo.m */; }; + 2D42853D32FB0A8239E63E9F9D0C8BEE /* FBSDKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 489CDF339EF9B92E3E56A9C962C5B095 /* FBSDKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D4B28E736CC828768FA27427B9E084B /* FBSDKViewHierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = F3B89FFE8B1F9F336125E4C89A00956A /* FBSDKViewHierarchy.m */; }; + 2D574C311B6BAC3C114EF4A08E8A6AED /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = E22D5681BEA92F26CFCA6F286316C8A7 /* BFCancellationToken.m */; }; + 2F502BBD72471DDE0F1A4AADE37B318A /* FBSDKAppEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 30550597C7B73B85C22D7F484C650334 /* FBSDKAppEvents.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F6842BB723B92B037545A3205CEE099 /* FBSDKAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = D50127072C993F42409BF6F6FE32101E /* FBSDKAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F8E430CC7B7B1E17F8FE2AE6C38FA41 /* FBSDKServerConfigurationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E3D80F97B0FCDAF349EC03A2128168A7 /* FBSDKServerConfigurationManager.m */; }; + 2F9580ADAFE0DF0FC5C9EC16D08568F0 /* FBSDKServerConfigurationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA1E45E61D35535E9BE674C2A73F289E /* FBSDKServerConfigurationManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 324EFD095397CE7C3C7619580B019028 /* FBSDKLoginError.m in Sources */ = {isa = PBXBuildFile; fileRef = 944DDFC5D11510FD899ED546259F40B4 /* FBSDKLoginError.m */; }; + 32FE1220E118DF6ECFD86B3AC6349065 /* BFMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A304021137125635947AAFEA9150F5E /* BFMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 330ED0D27C7047F8D8A5120C307D8784 /* ActionSheetMultipleStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 543EE49034EFFF775ECEBE8BC5724E7B /* ActionSheetMultipleStringPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 350938F3F19B6A6D8C4BCA827FF962D2 /* FBSDKLoginCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7F946A654AEFDDD07C93AE24B1794D /* FBSDKLoginCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 368A0D534063C18951492FA0DC502D94 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = F079E936DF52DE1F038BEB709F63B8EB /* Bolts.m */; }; + 36E77403AC7EDCEA368ABF45674C1D55 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B45CD944FA49268F72373EDFA99E3F0 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38C3940239CA007DC8F7B1DA149B4964 /* FBSDKViewImpressionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = A47206A49E0313CCE2C3F5AC068C126B /* FBSDKViewImpressionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39289D3FCE24C08BAF5116638A635579 /* FBSDKBridgeAPIProtocolWebV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 26DD2EF4A6E8BAEFD67ECCB96B6BCE9C /* FBSDKBridgeAPIProtocolWebV1.m */; }; + 39336D282C8DED18E0EC3AB2A5115AD6 /* FBSDKLoginKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F42BE789BB47A2138DE866481943B20 /* FBSDKLoginKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3AFE3A4493265D45E5636E62C18185E2 /* FBSDKServerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 64344FE8ABEBE0C396B8038FFF881E35 /* FBSDKServerConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3CAE35F17046D7E442B7CC72528921F9 /* FBSDKAccessTokenCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D243F024EF97A377FA7185517801413 /* FBSDKAccessTokenCaching.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D67A341BB01A011A1DFB20485DDEB91 /* FBSDKGraphRequestPiggybackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF2227F9EDA813A7C475C0A19861054 /* FBSDKGraphRequestPiggybackManager.m */; }; + 3D9CCD3C2F8B8FE575842147DE850098 /* DistancePickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 610EF5BE33965B15FAB91B3892C81D8B /* DistancePickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E08B9EF82D4DEB66C4EF3D7E97AC975 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = CB87FEF69C043BF34C033AC4AFA1D59A /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 41C3C140C245DECD59757C5561B53E88 /* FBSDKServerConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B53885BD6BEB7B9F0961BF4F47D2CFE8 /* FBSDKServerConfiguration+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 41D135CD2F590CD4312F4BC06C493840 /* FBSDKDeviceLoginManagerResult.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFF221474767A561253D03648F0A226 /* FBSDKDeviceLoginManagerResult.m */; }; + 42F287DC4A5F42CDD017922C239B6023 /* FBSDKApplicationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C0B06BC7040B7FEEF8DBCE8BCD1C39BC /* FBSDKApplicationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45D07878FF25850E71081A4D81EC9282 /* FBSDKMonotonicTime.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E815DFA3213ED9A38531D38874219F /* FBSDKMonotonicTime.m */; }; + 46573B41F7928ACFD418536D9A6E1E3C /* FBSDKBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = AA52A813C60EB939A325CA4651B6C85D /* FBSDKBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4690E60E89A07767872CC1F7261F8AF2 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2EC8AE0C467498151AA5ABFD2512B2 /* FBSDKGraphErrorRecoveryProcessor.m */; }; + 46E7F4148B6DB5100E111A21EE9982C4 /* FBSDKDeviceLoginCodeInfo+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C5EC7842BB820F991A3CBAA92C38B148 /* FBSDKDeviceLoginCodeInfo+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 473B7E253253B25B80CAE220DEF24E9C /* FBSDKLogo.m in Sources */ = {isa = PBXBuildFile; fileRef = DCB09787E3A9718D992D3468B2212B28 /* FBSDKLogo.m */; }; + 47776E7563604354F311C49D10C17488 /* FBSDKTestUsersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 343A25E11F5B5AD1677ECDF7FB2DD473 /* FBSDKTestUsersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4874732A0A01E1D633FF84D3D3D46667 /* FBSDKAccessToken.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC811D46449AFD35151A41E6EEF0103 /* FBSDKAccessToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48F87822E6F18C3E66ABAC4DAB16532D /* BFWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ACA1AD937A6C119920E5932148DF77A /* BFWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4910A564D07876657FB9F8859CD67A9C /* FBSDKSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 106AB17E3EA072EBD0E7297C9D0963C4 /* FBSDKSettings.m */; }; + 492121EE72DD5A81A4FA81BC83515304 /* FBSDKAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = E5588D94D52332D9BB779D37EDE486B7 /* FBSDKAppLinkTarget.m */; }; + 49784896AB56A5A781D5D1203B056A02 /* FBSDKTestUsersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A47EC1D0404C60C2D79718FEF66452E /* FBSDKTestUsersManager.m */; }; + 49E2797E278BDA0B618150434A73889D /* FBSDKLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = D5F3F796CC08CE4630684E734B578B3B /* FBSDKLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C3CCAE4B5CA3EE7B3BAB57ACBFAF6D5 /* FBSDKSystemAccountStoreAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = C4DC38204553780BE926E3B1A2B5DEF7 /* FBSDKSystemAccountStoreAdapter.m */; }; + 4C8CF456ED701C62893B26287A1AC522 /* FBSDKAppEventsState.m in Sources */ = {isa = PBXBuildFile; fileRef = AA890B95BAAF26BEC5390EAB9B6CF319 /* FBSDKAppEventsState.m */; }; + 4C9809F5B2000F8C9851CA6B10CB1B26 /* FBSDKGraphRequest+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FAB6DDE6665B719F329627C936C8D93 /* FBSDKGraphRequest+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DC73808000FD91BA6FD31D28C651CA9 /* ActionSheetCustomPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = C7F09C50F3B4BFCB93D28ABFFB861E93 /* ActionSheetCustomPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E528594216C9DD8C33994FF2A253B67 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED635F35B70DA7C626200C7E1CF841BE /* Foundation.framework */; }; + 4F20F3931CAB83CE90D110994CA08E42 /* FBSDKBridgeAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 73EA6A58FBCCB932419773C521432CCE /* FBSDKBridgeAPIRequest.m */; }; + 50256954FE7A83EE52B93CC798F2B15B /* FBSDKAppEventsStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 997B82DBFB6E8D3DABA5B8B6B1C1294C /* FBSDKAppEventsStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50B18AC1309D20A808ABAC4954B3EBFC /* BFAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B0780172E95A7228F400F2E98BD0091 /* BFAppLinkReturnToRefererController.m */; }; + 512C7AEA702B039F267C42994D6F5675 /* SWActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B0BD855A61C31AF83272F115F6050FF /* SWActionSheet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 540FF29BE62067E39305716997AE622A /* FBSDKLoginButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DD09C5C20CA2D676942AC8AE8F712A /* FBSDKLoginButton.m */; }; + 54A86E72B0D601C832A22575AAB0C5F5 /* FBSDKViewImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB0266C81E8B89BE01AA4C3EE71BBE9 /* FBSDKViewImpressionTracker.m */; }; + 5555373DA60F82CD9E9F73D802A3089F /* FBSDKPaymentObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = FC351EF044DE2F5989BBB68076710059 /* FBSDKPaymentObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55D4C850567948FC7F54A1C4F59EA341 /* FBSDKDialogConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = A8AEFC54AC54ED030BC4E324762BDAEE /* FBSDKDialogConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 560B5676791022C547A8622CD6DA9C1D /* FBSDKLoginCompletion+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FE551455685414EA71E8AFBCCDF0EF4E /* FBSDKLoginCompletion+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 566D17E02F06CE69FB37B3E8EC47F707 /* FBSDKAppEventsDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F5EECAC2543E0818C9A08F972818614 /* FBSDKAppEventsDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 572170558100064F869849D32F1A25D3 /* FBSDKErrorConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 953F7B09BBCFB6CE7A860F52E077F7A1 /* FBSDKErrorConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 599D68ECF9611F7E1E4801ED176F25CF /* FBSDKButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 297FA42D6FBDB5786452DD9ADD8590B0 /* FBSDKButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5A420BFDA62AD601A9D5B1949CBB7661 /* FBSDKServerConfigurationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FC8548DC462698726CE70757D0CA2F /* FBSDKServerConfigurationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5AECF245E545380FC3637DAC1D30F3F9 /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBC1F5CE43471967DCE5BBBC718605AB /* FBSDKCoreKit.framework */; }; + 5B28DC88DB822F472DF5D34047C0DE65 /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2373F71DDE61FE3D5075F0EF8A6E61E8 /* _FBSDKTemporaryErrorRecoveryAttempter.m */; }; + 5BE96714076A16A5CC13C95DD8A6DF1D /* FBSDKAccessTokenCacheV3.m in Sources */ = {isa = PBXBuildFile; fileRef = 827BA6755E09F441C4866FE4D2006F1F /* FBSDKAccessTokenCacheV3.m */; }; + 5D3B0E524C59AB83B0ED2EB4AC939416 /* FBSDKAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD2831D912D7E5599FE3E61C887D754 /* FBSDKAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D3B5A19E083BE541E3FBB7906C3115C /* FBSDKKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A2524F04A4795064C82B7EB45DD5EF0C /* FBSDKKeychainStore.m */; }; + 5EEB0AFF34553450A4999AD74DA62F25 /* FBSDKKeychainStoreViaBundleID.h in Headers */ = {isa = PBXBuildFile; fileRef = 245AA3E71AE207A3B0E1A2813152E02B /* FBSDKKeychainStoreViaBundleID.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F0F1C205478C5DB539D4DCC3089706E /* FBSDKLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 6972F211CE75952E3AF8FED7735197EC /* FBSDKLogger.m */; }; + 5F2BA6F85C8BF20F5498179FF47D743D /* FBSDKContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F04020A0AE59FDD5A2729E498AF368 /* FBSDKContainerViewController.m */; }; + 5F431DC0101A1E41A829F5267FA5ECEE /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B1A7EF266E5A2FA16B2077C33C74AA /* BFTaskCompletionSource.m */; }; + 60CA7FF7B61A68A2DE3DD0C737FD7A73 /* FBSDKDeviceLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 46474CD6748E50D84D8BFEA57406851D /* FBSDKDeviceLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 616A011EC63D46889291BE546C3FD5BE /* FBSDKContainerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 654F7F3D16AF8C21D1B228322F82B27F /* FBSDKContainerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6177A3DCF1175321E9F32155EB13EC0B /* FBSDKCodelessMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = B1F99E3A78E6BD521678A09B3B2E64B3 /* FBSDKCodelessMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 621E9E2DBEC5CB2DEC0017A98F79F5E3 /* _FBSDKLoginRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 059ADE3B6E7551A0A396E6D28A00CE2C /* _FBSDKLoginRecoveryAttempter.m */; }; + 62B312DDDE53E3F55E8BB3065F594206 /* ActionSheetDistancePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D4F1770EC3FA2312196667E137CCB89 /* ActionSheetDistancePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 668D7C75E886D28526876EEC4BFC12EE /* FBSDKLoginManagerLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A15B0A7BC40DEB7D045982844E9BC44 /* FBSDKLoginManagerLogger.m */; }; + 6805517216D64EF1F44BA31E8347855E /* FBSDKLoginKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F3F15354612AE3235224FFD1C03851 /* FBSDKLoginKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6866BF966C891D21913B2B6DB18226BF /* FBSDKCodelessIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = CAA69DB2945C5C32B860C623485A7E2C /* FBSDKCodelessIndexer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 69EAA307BA8B366C552B33625EAF04F7 /* FBSDKCoreKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AAE0D8B45DE7B6A68947444E93AFAB33 /* FBSDKCoreKit-dummy.m */; }; + 6A053695BAE7721BB80CFCCAB24A3A55 /* FBSDKApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 16D49EDE2D1FA5E335F563DC5E5587EA /* FBSDKApplicationDelegate.m */; }; + 6B67A0928D0B1077883E01617DD52EE3 /* BFAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = D514150BD825EA8705813AF292546355 /* BFAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C695359B18D581229DF67E113C0120B /* FBSDKGraphRequestPiggybackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DA78264F475E68CF8BC67AB194C023 /* FBSDKGraphRequestPiggybackManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C6D61B2CE51383C366D578CA8A76933 /* ActionSheetStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = D5CFBAB8D8F7ED949AE09BB51BD73449 /* ActionSheetStringPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6D723D1E74BC578BB6F0CE822672B388 /* FBSDKErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 23D8CB4E13798A5E39105295A333551B /* FBSDKErrorRecoveryAttempter.m */; }; + 6DAA48F080FEBDEED2D1BD9D59C2401B /* ActionSheetPicker-3.0-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A97F470802D9B6B09063BE87CD1316 /* ActionSheetPicker-3.0-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6DB24D82741AE7A5D00FBF838284410B /* ActionSheetStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE644F5C7029C1072D0CB81FB01FE42 /* ActionSheetStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6E817A4C4561C6B470D936512790850D /* FacebookSDKStrings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C14D01E835CDB9CBE4672170A97FC2BB /* FacebookSDKStrings.bundle */; }; + 6F75243E4DF9DEFE46C54190A01A2DE2 /* FBSDKSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = BBDE1D5C729107CBEEAD3B84A5E4C518 /* FBSDKSwizzler.m */; }; + 7123FE3B72925F67C209E4AEA86A95B8 /* FBSDKBridgeAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E158DA7063F1035B34171843CD6FD071 /* FBSDKBridgeAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 723A7DF68A95975CE8826976472C34D3 /* FBSDKURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AF69B80B2E3C76389F9D25681FD7C63 /* FBSDKURL_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7290C89836505DF7408734413D5C2858 /* FBSDKLoginManagerLoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA4C3E6DBFA8E8BBC56E7D2CD7D50A0 /* FBSDKLoginManagerLoginResult.m */; }; + 72E93C77BB4F1091FF10BB8A7EA8908F /* FBSDKCodelessPathComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 128DDE4AC9A1E340948EC71FFB494A11 /* FBSDKCodelessPathComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 736666A6E2C4E1D9D77C6A956755B19C /* FBSDKLoginConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA72319AC39F91580408B4FC967201F /* FBSDKLoginConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74420904FDB6BD5BF8A2FE5ADF11C9B6 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = A93E6DDAB061778D66DB56D43F7213A8 /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74D6DE5FE9CFFCAF8A902783E81A52E2 /* FBSDKTypeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = DA542D9A8FAFAA9C1C4AA575C714D629 /* FBSDKTypeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74E5FB48232BE513C24B695D4949C313 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1BDC6CE38FCAB954323E59FCD3C10D /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7664E0CB024EA1472B5E500A9DAA7716 /* FBSDKAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 09941671BA6DE586358CBF53B7690D1A /* FBSDKAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76B71CDE8EEE819266E3F75008A4CB1B /* FBSDKAppEventsStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B396156F6A7F9464E6E269E2735405 /* FBSDKAppEventsStateManager.m */; }; + 79DBD25C469B8A49637F011614DB5820 /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 65E2624E8579D80DDE0525AB259D0E5F /* FBSDKHybridAppEventsScriptMessageHandler.m */; }; + 7A92D5C3952A6AED6688C625138FCFE4 /* FBSDKURLOpening.h in Headers */ = {isa = PBXBuildFile; fileRef = 233EB1B490DAAB45661DD070EF24DA3A /* FBSDKURLOpening.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AE96E9003935C015358A9E7B540205E /* FBSDKAppLinkUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 569AD8380636D022B129F024A6027258 /* FBSDKAppLinkUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C169DB08C8C07D5795AFCDDFC11438B /* BFAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = A6DFE5E9654AF7A2DCF4B304AE42AFB8 /* BFAppLinkReturnToRefererView.m */; }; + 7DBC99863A2258771F7C4C0C0A1CD686 /* FBSDKTimeSpentData.m in Sources */ = {isa = PBXBuildFile; fileRef = D43870183BE1294CF94F0B9FE91B377C /* FBSDKTimeSpentData.m */; }; + 7EA6F28226F67B122199FF69219A5A46 /* FBSDKMath.h in Headers */ = {isa = PBXBuildFile; fileRef = D924DDBCBB652F4A19756657681E5565 /* FBSDKMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7EAA3F1F6C21494F91B7D08E0ADAECBA /* FBSDKCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 10AA0212B7EEFBCD4AD54D69B620C445 /* FBSDKCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F2E5071194A2CDBFCC1152AC1C59A3E /* FBSDKAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = A6FC7265FBE18D31F978C009C85E80A5 /* FBSDKAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F8C0F902F32CCE964EC8F664AF99F21 /* FBSDKInternalUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 0948D3E3933218AD0A0F3AF2BC79D9A8 /* FBSDKInternalUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 81FB2DB8B2BCF8E6CF68F4D9D4EBADB6 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 1168D5661DDFF3EA95C14D49E1D98A36 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 821D8E16D2A2B7CBDD62BF9A363AB483 /* FBSDKDynamicFrameworkLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BED41C9F3919D4C10585F2D0B5B719A /* FBSDKDynamicFrameworkLoader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 82B7862FD6CC08BFFA0091DFA770B8FD /* FBSDKAppEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 41FF50E9463711E495A391847EF7AB8A /* FBSDKAppEvents.m */; }; + 834F17E8A3ED8AD6AB70FBFAE6F3BAE5 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F8961E4EC5A785D18985266880734312 /* Bolts-dummy.m */; }; + 843DA9A912826CC737BA01CDA2F8EA21 /* FBSDKCodelessParameterComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B99398062E741A3D69FDF7F8B16B93 /* FBSDKCodelessParameterComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8465091ABEAA4435987A96A59DC142F2 /* FBSDKMonotonicTime.h in Headers */ = {isa = PBXBuildFile; fileRef = CB3A33D569D79F70BC14257E9212B7AF /* FBSDKMonotonicTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 84DEB7A963CD3A94A7CC2686C6F8C60F /* FBSDKUserDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E97E00F381A51627081631960D82D5C4 /* FBSDKUserDataStore.m */; }; + 86B94950B09C784488AE876B7C301808 /* FBSDKDialogConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C43A97884BAA96BF06C3BCADE681A9B /* FBSDKDialogConfiguration.m */; }; + 86E32DF7D981CF6AA97178F9FD67EBEB /* FBSDKUserDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E6B15EDF4AC5EFF096F6CB3306683706 /* FBSDKUserDataStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86E6375789A4E84177F30097B3ED803F /* FBSDKDeviceLoginCodeInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 680D4A8F01292F4D92DFE9BB5969455E /* FBSDKDeviceLoginCodeInfo.m */; }; + 871143A3D556C04878D5E1EBCB971BFE /* _FBSDKLoginRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ACC420E980787C480D02CFA88F3ADA3 /* _FBSDKLoginRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AB7A6910B9816B7B6838C5C9B9D5676 /* FBSDKAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = C4EA2DED691103287EEEFF8272C0CD82 /* FBSDKAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B1753A3C7A6377E104065636CF79B0B /* ActionSheetLocalePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = FCC82708831361AE78AA946ABE8BD539 /* ActionSheetLocalePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C56D3ACDCBF40BF56828651DDA211B9 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D4FADF73BFAE70F109F1A0637BA6876 /* Bolts.framework */; }; + 8E3A618EE9DED3CEC25F108480A9D08C /* FBSDKCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = CC589219C128FC872E343E74CBFB945B /* FBSDKCrypto.m */; }; + 8ECC762DB03C45EFC0D93389CD5A2BAE /* FBSDKAccessTokenCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7800622A0913B4D341E7F9BA1DD8C1D3 /* FBSDKAccessTokenCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F08FC91FE71B5DB1ACCE740AAE5E2D7 /* FBSDKLoginManagerLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = BC83D95960C6CAFBC6849FA7373A63AD /* FBSDKLoginManagerLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F3FFEAB9314D01B304E3955011D64A5 /* FBSDKAppEventsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E3B5CEF30DBBE2410C40E5F55CEB980 /* FBSDKAppEventsState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 91429F12FA4784EC6F71281D57FE04E4 /* FBSDKAccessTokenCacheV3.h in Headers */ = {isa = PBXBuildFile; fileRef = E53725F9922256640F815FAC2B8CBF26 /* FBSDKAccessTokenCacheV3.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 91EE91383A199D7157975323ACC7B8A9 /* FBSDKWebDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = FFCDFF10DAC812E47587DF71C683FC70 /* FBSDKWebDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92C3B3093703EDFE52108485AC3F0CFA /* FBSDKGraphRequestBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 28C51E095CF12E83792C2AD90BBECB48 /* FBSDKGraphRequestBody.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92C757E57B49074733C52CE0CE2458E5 /* BFGeneric.h in Headers */ = {isa = PBXBuildFile; fileRef = 00BF07AC71F791F7EB60BD6A1E6792D4 /* BFGeneric.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94780DBB0AE798F7F8E26435F057ADF9 /* FBSDKProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = A12CE30673DA3C2A0511A5EB326189C5 /* FBSDKProfile.m */; }; + 957CC314623F94736099135DCC528D9D /* FBSDKCoreKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EE2157AC8D0F90AE03BEC1C12E81C838 /* FBSDKCoreKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96A1540FA543689E483FF0C21CE0C3E3 /* FBSDKBridgeAPIRequest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 36099C8F5D272B952E8EC6E7A37462BD /* FBSDKBridgeAPIRequest+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 973E58C0D24B05EDD13065170AB2BEAD /* FBSDKUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 0874C0488C8451A6B9634A704AFC4D0C /* FBSDKUtility.m */; }; + 9760703887E2E9974935EA2F87C7879A /* FBSDKSystemAccountStoreAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = E5142391F374EE911B89F202FB2ED401 /* FBSDKSystemAccountStoreAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97F52C830707CF1CDA85321283B0D2FC /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 088C49767334386E2EAA774FE20679E2 /* BFCancellationTokenSource.m */; }; + 9868D4EF57780477D11FCD064F7A706D /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 52BD726A8148305607B1A9BCB39FFE06 /* FBSDKBridgeAPIProtocolNativeV1.m */; }; + 997F3BE8210B1862CDB239A46628C3C8 /* FBSDKGraphRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0C6E871715CE90C5F19CCC32B64B95 /* FBSDKGraphRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B5E4DBE329421E3CFA7B080A01EA8BD /* FBSDKCoreKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E7CAA9FAF82142B31152F69C021D648A /* FBSDKCoreKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CAB710499461F49B7E020796FBC8997 /* FBSDKPaymentObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 1832C45982600120D4A8C2F9CC4ED618 /* FBSDKPaymentObserver.m */; }; + 9E5CE1E4B639A38FAFA86440F4D8F034 /* SWActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD3E0646B3D4C3B2880FFAA11FAAFDE /* SWActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9EF404A531C47B4A913EFE8CE3649BEB /* FBSDKAudioResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 283F446B7617CD86E47150E7B94CB8FE /* FBSDKAudioResourceLoader.m */; }; + 9F5BFFF8CA86E94D452FB10AA8BA10A0 /* FBSDKAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = FABD3E5B1026611A3909CA4ACA5A5B2A /* FBSDKAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A09D1124B6CFA106EE92D272471B8FDD /* FBSDKAccessTokenCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 32F632D24D99D0060769BB52A046B5F4 /* FBSDKAccessTokenCache.m */; }; + A1489709B5816B580597F81852A8DC07 /* FBSDKAccessTokenCacheV4.h in Headers */ = {isa = PBXBuildFile; fileRef = 219B9D5BDA16E3D01CA7444387DA6AF0 /* FBSDKAccessTokenCacheV4.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1E49A533D04CCFEC2C5ACFA5F71A522 /* FBSDKCodelessParameterComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 55A828E7BCA5B125D98B9D1BA469CF34 /* FBSDKCodelessParameterComponent.m */; }; + A32141E29CD70D3DD33D509C99D9679D /* FBSDKButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F10A5BAE8D0A3CE8303169710F7E80C2 /* FBSDKButton.m */; }; + A5B8F7C5E18EB54AD17662C603B38104 /* BFAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AA6F8D08CF2257E4C28D8F1B639C0E1 /* BFAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5DE74EF02C61250FD61A42724FE2B6F /* FBSDKMaleSilhouetteIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 33A9556D4B8B268ADC318BE07E97EBA3 /* FBSDKMaleSilhouetteIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8D87471F6D9366AC11E0C70929C263E /* ActionSheetCustomPickerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DABF448158B0F0239097079C5853060C /* ActionSheetCustomPickerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8EA037327241DB709F1290FA253E6EE /* FBSDKAccessTokenCacheV3_17.h in Headers */ = {isa = PBXBuildFile; fileRef = 911F65347EDB02D9BE193670D71F57EA /* FBSDKAccessTokenCacheV3_17.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A909B5C2F4D8BE464C22DA5BA1EF53BB /* FBSDKColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AA6065F1465E98292976D3231F4E484 /* FBSDKColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9D3CAE3BD389AF1FAC83AEC9B5AC45A /* FBSDKLogo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA26F12078F209BB979B9654B7BCEC66 /* FBSDKLogo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA2FD5B81E455B72231B5EEA16C2DA23 /* Pods-MAPS.ME-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4C1FC309C6E0B70A69EA4E24109911 /* Pods-MAPS.ME-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AB5EEB72464834DBBFAEB43819E51CFB /* ActionSheetCustomPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D577BE1F6FC56DEB1362D3ED5ACEF40 /* ActionSheetCustomPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AEE366509DA4EA559E84A298E0B13E6C /* FBSDKAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E7E9684CACC5CF3D2561A3F9CE7F43 /* FBSDKAppLink_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1B99D9C153CCC0888776ACE42F6C42A /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A60E6613C3082CF963A52311937E694 /* BFCancellationTokenRegistration.m */; }; + B1D02452BB561B5A4294FDBE149D7A76 /* FBSDKBridgeAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 49C3F0F49FA79793B0D451BEA10B2F6F /* FBSDKBridgeAPIRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1E78E195E1B766DD884A6877FD1D44F /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 10491C97615A25AC11D8513E58ADDE22 /* FBSDKBridgeAPIProtocolNativeV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B29E67B3AA2F522772C9F13476CA2ABE /* FBSDKBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = C1290C6E9B4D65AB127501F164461D3A /* FBSDKBase64.m */; }; + B2D0C7222CAD59249FD00D141E1B95E7 /* FBSDKAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B9EFCFC4938A13C8CEECBFFDD0784F /* FBSDKAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B48A8553C7849CC3A8B24509D4DEC42A /* FBSDKApplicationObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = 409A923F70B0917394727B9168E892BA /* FBSDKApplicationObserving.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4A19D9D12BAD6B3057DAF56AFE18CCE /* DistancePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FE127178CA122E699E4368D0CF1AF48 /* DistancePickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B4C8F0C438878E8CDCFCA9DC92476BDF /* BFAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = 7544973673FD9F19FB5AEDE0B570CD1C /* BFAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5383849852219134435A8AD045E204F /* FBSDKErrorRecoveryConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = C98179269BA85865DF3984FE44C2795F /* FBSDKErrorRecoveryConfiguration.m */; }; + B5897AD85FC1572FFAE94CE73EB47A8A /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC3404CFFA9CF86D01E85896A3D2D76 /* _FBSDKTemporaryErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5A8C60E0B5D1421A12B1A31E83F3EE0 /* FBSDKURLSessionTask.h in Headers */ = {isa = PBXBuildFile; fileRef = F23ED63F117550D4F8618B020D711995 /* FBSDKURLSessionTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B68E586342D161360C8BB519DB8DE169 /* FBSDKEventBindingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 366F20C24FA930BC7305CFE298C566E7 /* FBSDKEventBindingManager.m */; }; + B7105E76695936754EB51CA8FF3CAA78 /* FBSDKConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B169E8A0D902175976E6228FBEC85F8 /* FBSDKConstants.m */; }; + BAF09EA9362B1ABE419C6CF37FA9B62E /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = A57339C8BE06038F4BA6C36075500A12 /* BFExecutor.m */; }; + BC801884ECBEB064A7EB68EF49DBCC8B /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = BF274C5D73C6EB58B1C8351D44035C07 /* BFTask.m */; }; + BCA7C16371B98312FDD58CBCE6B2142F /* FBSDKLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DD573AD5F074197FD07CA0856FB81B67 /* FBSDKLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCBE0CD694389012268CE7D4604B6A48 /* BFURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 89BC36198072F3B1C8FD3E52C9C2C2A1 /* BFURL_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD0B152E3D34802036875AE77A69BBFF /* FBSDKLoginKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D9E7124360178F1CF4A63DE69AF14E57 /* FBSDKLoginKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD8CC0A5B314275E5F10412CF7A7F458 /* FBSDKGateKeeperManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EB9E1D5BCC7EDCBBD3F19267FF7B894 /* FBSDKGateKeeperManager.m */; }; + BE10CD1903259B7EFE0441F356699377 /* FBSDKAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C133772B1806C3FC04EF459E712A53D /* FBSDKAppLinkNavigation.m */; }; + BF53DFFE1919B010888A62BA0F49F07D /* FBSDKAccessTokenExpirer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6013EDF181F7814A34202FD701D30297 /* FBSDKAccessTokenExpirer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFA1A7E41B35A6EEF12C887F42D00690 /* ActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 719F98A5A6E294F412E15A64339010F7 /* ActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C06ECB66CA1947D8774AB2A73764B01B /* FBSDKLoginButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1886A29257CD3C76A4994AB179562BF9 /* FBSDKLoginButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0A13B3C34159B33E31B0CEDE815A302 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = FBD6B43D2E5081D9407F8D0A67C16F20 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1460BF0F284387568D03F86C2E8C973 /* BFAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5629209B6FC8EE4E4A0B6426939E45D4 /* BFAppLinkNavigation.m */; }; + C2944E41E658B522BB40C825A60DE2F8 /* BFAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BFA16EC0105B73CA2998C24BA97F29B /* BFAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3FD629CDEF847D9447216A970EC9510 /* FBSDKAccessTokenCacheV4.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A8CBF8CC6BEB063E2FE79ECAB58935 /* FBSDKAccessTokenCacheV4.m */; }; + C3FD9AFF13841C1D29896EB3F40445B9 /* FBSDKColor.m in Sources */ = {isa = PBXBuildFile; fileRef = A78324EA7507D96D76AE5B6915C5A653 /* FBSDKColor.m */; }; + C44AF2A92E1E42CB9E33FD3E2A46830E /* FBSDKCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = E1DE2D79A361ECBA92D970FFC7DE1518 /* FBSDKCrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C44EC8CD658E91302C7DB056972A470E /* FBSDKGraphRequestConnection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B2B749671D33A85590560B59BF24416 /* FBSDKGraphRequestConnection+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C6559960A5A92D4FC6C50ED41CCEEA83 /* FBSDKImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 1709E15109BB16F3763C3D39907C9821 /* FBSDKImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C6EB709B215E5D5B93EBD69B7EC12699 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 40DF7EC0D7E58DFBE91210BE69EC23BE /* FBSDKBridgeAPIProtocolWebV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C8C77D2E6DAA13B16E483CB14C08589B /* FBSDKLoginTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = 118F77D3E1BBD540B94FAAB7B7B25B9A /* FBSDKLoginTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C94745C9CF9F573E9AAE091FC456ECE3 /* FBSDKMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1247C95C75601F1C0280C6DA0F963384 /* FBSDKMeasurementEvent.m */; }; + CA1CEBE799B514D5417E22CC94CD2328 /* BFAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E04F24CF8B46516E6C964BF68083C22 /* BFAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAAD713C1E3D8CD7C27559FD8F5E6099 /* FBSDKCloseIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 370B7512967BA75C02A013FF324177A0 /* FBSDKCloseIcon.m */; }; + CD2D99E66B4247AC776060648BFC8C65 /* FBSDKApplicationDelegate+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 94575A01EB6BF8EC2F29F424861E9FC8 /* FBSDKApplicationDelegate+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CDBBB00D9FB693426D03EA7FA98C9AE9 /* FBSDKGraphRequestDataAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B06CD3C1ECA5339B1148E9AFDF62BCB /* FBSDKGraphRequestDataAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CDEF53C22EA911BAA379A94EEC7E622C /* ActionSheetDatePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F774FB409773EFCC1EDC7310A7C5AE4 /* ActionSheetDatePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CFC3D9CE77353081F6E078CFF8F2F5CE /* FBSDKMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E077C836E17156EE07AA743FCC6D02F /* FBSDKMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D005BB972F102B2B1D2CF0BD28B30DC6 /* FBSDKAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAAE56E9869D289609E52157E33E908A /* FBSDKAppLinkReturnToRefererController.m */; }; + D00808760C7A9686FC88771D8EF7C0BA /* FBSDKAppEvents+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F09C464664DA506E5F815B6D81D8CF /* FBSDKAppEvents+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0364CF5F9035F40042AFB2878D92B48 /* BFAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = FB7F8BB6FB48A164C8B12A7D2530DDDB /* BFAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0E72A1B87D018ED0925D56E14DA45AE /* FBSDKDynamicFrameworkLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 65625F63721323CD8FA3FCDE1F6D84E2 /* FBSDKDynamicFrameworkLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1CA8397831B96F617C154647C26770A /* FBSDKWebDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E78F8C26D8FC2B6A0263F341508A9D6 /* FBSDKWebDialog.m */; }; + D276245D1C3FFB5233925ECC04F4E5E4 /* FBSDKServerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 32F26AC3B25844644BCE71223EEFD98A /* FBSDKServerConfiguration.m */; }; + D32261B2E042643DEFF04F5AFD7B8370 /* FBSDKURLSessionTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 366E2725AF2F56B7D16DE007003A1F26 /* FBSDKURLSessionTask.m */; }; + D34E7077C93D236C2804A0F13C7129BB /* FBSDKAppEventsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F62080B06AB79B8BE3572FBC33152E2 /* FBSDKAppEventsUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3D99759B513820058940B3115C086E9 /* FBSDKCodelessIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = 284114C1E6DAF45DBE1038E104F1EC3E /* FBSDKCodelessIndexer.m */; }; + D50DCCF9D702F01127C28701C71D45F7 /* FBSDKBridgeAPIProtocolWebV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BDE07CBF9C7B0D784C23859255F6073 /* FBSDKBridgeAPIProtocolWebV2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5422A9275006AB44B17410ABFE9FFB4 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B4EF7C0639BAFB7E337431E07406505F /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D54698383D3E2735D5D11B668F892F7A /* FBSDKAppLinkUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 10117BE40260B7A990DA5A9ACDF601AA /* FBSDKAppLinkUtility.m */; }; + D5DE700C90D39F5BF291601CC06E456D /* FBSDKTimeSpentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 98A483DD41E81A22DDD5B500475CEA8F /* FBSDKTimeSpentData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D66711D3E4C51A63309D630CDE86EDBF /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A5BA29CA01F9C53055A9F546C0275F9 /* FBSDKHybridAppEventsScriptMessageHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D808F5E7BF406B483D04BE1212A11917 /* BFMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 53416AEB99C4D9CC57B340BA460E86F5 /* BFMeasurementEvent.m */; }; + D824EB95B686A6D5B75B34520A8FE93C /* FBSDKAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65A11A721C262AB777990570E09BF915 /* FBSDKAppLinkReturnToRefererView.m */; }; + D89E2B04EDBAEAE93E32699740013A23 /* AbstractActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = F07C2BA696DD225046A9D7FD83446B76 /* AbstractActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D91C06C52666AD939CB90C98AC27820F /* FBSDKLoginKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01A276FD8428EDCB645C91902304CFF0 /* FBSDKLoginKit-dummy.m */; }; + D9F3FF1B14FDD6F9AFE487DE60A3F8C8 /* FBSDKAccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7E65CB75610FCCB534AF3DC36E6632 /* FBSDKAccessToken.m */; }; + DA3AF97371EC81C12939342F562210C9 /* FBSDKWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EF531283417FB7F4585FD257A844E04 /* FBSDKWebViewAppLinkResolver.m */; }; + DAEBEC4FFA71BDB56F419F25C942CF3A /* FBSDKLoginUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F09DE8D7BDC85E518FB2B93373E645 /* FBSDKLoginUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB7949815781CAC21CD17B777049EFC4 /* FBSDKAppEventsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 937B40C0611B0F417CBC17EB3DB58BBB /* FBSDKAppEventsUtility.m */; }; + DB99AC12DC3972773A8B85B95D141B89 /* FBSDKLoginManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CF56D25BAE233004E3CD09ED36E2DFC6 /* FBSDKLoginManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DBCD17D0DF034CEA8850C8ADFAA4CA81 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED635F35B70DA7C626200C7E1CF841BE /* Foundation.framework */; }; + DC16A69C697E1C0CCDBE8B4AC42AD528 /* FBSDKAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C6336DA0FD17FA2763231EEBD257A0 /* FBSDKAppLink.m */; }; + DC5C0B5E58DE25998808F6E34BDB6F67 /* FBSDKMutableCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 049240B656A3EB481D6C6868E06D166B /* FBSDKMutableCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DCB2E7A4109B1921C7542F27D8E4BCE1 /* FBSDKDeviceLoginCodeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CE17C43112EE4C57F9BD1F7F32A98590 /* FBSDKDeviceLoginCodeInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DCD26550E12020443DCF6ED5435B7BF2 /* FBSDKSettings+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D880B113709C73B9E0E23BDB9F893A6 /* FBSDKSettings+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DCF00D4B9EC21B5575CEA7A477DBC0B9 /* FBSDKErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F4CA5395DABE0AE1D7CCD49120F070D /* FBSDKErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE5A31DCB4BE43413B6C2CAD0AC54223 /* ActionSheetDatePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 6331C263691739C3C3EED352D702600D /* ActionSheetDatePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E03038B45AA8E248B71CEEB4EFEFED5C /* FBSDKLoginCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = B92E8F974EB838E561ED0FA3B3FAF08D /* FBSDKLoginCompletion.m */; }; + E1ADCD9F44B1BD0EC097ABBFF93FD369 /* FBSDKDeviceRequestsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = FDD154F1898BB26E16D70F6BB2C43BA5 /* FBSDKDeviceRequestsHelper.m */; }; + E2986AE483C0B9946A8BD1E579E2577C /* FBSDKConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFC316632CCC90C5752D83D10585BC8 /* FBSDKConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2ECBC6D920FBE8B4CA00314AE5BF753 /* FBSDKImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A4ED8B0ABD42E7AB34D20DFA67CF8B /* FBSDKImageDownloader.m */; }; + E336E53A67665DD4F62B9BAF09A93501 /* FBSDKErrorConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ABCF80F642A5943A696E4B0ABAC4A2D /* FBSDKErrorConfiguration.m */; }; + E428FCEFEA4339C9903C5CB6A6437841 /* FBSDKEventBinding.m in Sources */ = {isa = PBXBuildFile; fileRef = 354F01B5AD19F6D9DE4294BAB84ED787 /* FBSDKEventBinding.m */; }; + E4BFCD2FBA15ADFE831EF2BD2F9234B5 /* FBSDKDeviceLoginManagerResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D7C7FB160F80CBAC45A6950852D8103 /* FBSDKDeviceLoginManagerResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4CDECD7967C2202AEEC12CBECADAEA6 /* FBSDKAccessTokenCacheV3_21.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E092CA2AE29397CAE4D60C3CD96333 /* FBSDKAccessTokenCacheV3_21.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4F617407C954C2B0636655ADCBA1052 /* FBSDKBridgeAPICrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 606959428054A2A3F109336975433B22 /* FBSDKBridgeAPICrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5338EDB3783EBDD84B99E1C20318ECF /* FBSDKBridgeAPIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = ED95C6722CB4CBED05DB13DB6570B9FC /* FBSDKBridgeAPIResponse.m */; }; + E5431B7875CB8472AAF152A64BA81FC3 /* FBSDKLoginError.h in Headers */ = {isa = PBXBuildFile; fileRef = 80FF9842E437C57C930E867CFC801EEC /* FBSDKLoginError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E54CB935F9288B8C15B9F2A7FF180A5F /* FBSDKCloseIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AB66D2209080CE07C727E8EEB50C2BDA /* FBSDKCloseIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E56DA86B08EF85B0362CE90BB9B4F0B2 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE4073F1FF5506A064C3312D2BFB7D4 /* FBSDKAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E575C0E7D1D7E0C6CB33D4C5D7EB1743 /* ActionSheetLocalePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 2435DBDA6753B8E1CB5D2B2AAEB8CE58 /* ActionSheetLocalePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E5D8F2DDAA1FFCF479A719A567266A4C /* FBSDKTriStateBOOL.m in Sources */ = {isa = PBXBuildFile; fileRef = EB7C4C4F613A3F72F139B13408256262 /* FBSDKTriStateBOOL.m */; }; + E64450ACCD3925620357A8768564DDCB /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = F11BB0AFEA2E669C9774F1212A021ABB /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E73D242A2D5FEEA6D99DDE750FA3B5F5 /* FBSDKMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 90CC1348DC26E425A075A74D260C40B4 /* FBSDKMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E73F5C86DADD7A307D4E2764EBB5B9E4 /* FBSDKTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = AA598B86D44B7FD68D6574C88FC944A0 /* FBSDKTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E8D4930236B16E71D5017AE83408BA4D /* FBSDKGraphRequestDataAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = D8275E0B0EABFF01FBC45E9F87E344DC /* FBSDKGraphRequestDataAttachment.m */; }; + E8D860CB4546B0450620C483BB0F06FD /* FBSDKProfilePictureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 60B86E97AF59D419113382650B080015 /* FBSDKProfilePictureView.m */; }; + E978F1DD8602C970A845C55343F3CB54 /* FBSDKLoginManagerLoginResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FE66A2D321AB26489E3F9F96B83DE75 /* FBSDKLoginManagerLoginResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9D0EED7C0BC7F7F7591F1F688A75C33 /* FBSDKDeviceRequestsHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 625891336096DE020A2C72E0C0E1D1AF /* FBSDKDeviceRequestsHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE0E9D2D147026F13AECB3799BFC9964 /* FBSDKInternalUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 37B484032C63D9B88B5FA30EA4C37B02 /* FBSDKInternalUtility.m */; }; + EED76D62C2DA81162F4EF479DB003E77 /* BFAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DD4B0708BA6E5ED45276428E7194021 /* BFAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF411DBCDB25987C2C78CA27A839E573 /* FBSDKMath.m in Sources */ = {isa = PBXBuildFile; fileRef = D068BE85851CA0BEB9E3CAE43A5F82CA /* FBSDKMath.m */; }; + F01DC48E70E3F73AB107FE6041CC0675 /* BFURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 673100001490CB1B3696D6083060E59C /* BFURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F05A6412AB3CD3AC0AC280F1E010BB6A /* BFAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = B3BBA670C2F885C3E5ED8C403698FFB0 /* BFAppLinkTarget.m */; }; + F15B83F597A6466FD4A8987EA74E3586 /* FBSDKGraphRequestMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 2734CCCA5E08ABF04FA6580FF76CF376 /* FBSDKGraphRequestMetadata.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F1D79F2AA68BA17CD01903DDC6E730A0 /* FBSDKProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B06844304E3E581AF74B5FBBD35394F /* FBSDKProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2441AB0FA94D89FC01C2FD7FCEA4ADD /* FBSDKWebDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 91DA8811FAC26A49A6B6A33ADDA076E9 /* FBSDKWebDialogView.m */; }; + F3C77166564B1956A263AAEA7D439D5F /* FBSDKAudioResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E09A5F42AE4CD0C33087D6EAE026265 /* FBSDKAudioResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F52E67E8CB86DB884A8679D6B4A2652B /* FBSDKUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C5701C075B79C36FE1C3A4A47480F29D /* FBSDKUIUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F860FD375B9A1D3A08669C61CE8BDE3B /* FBSDKEventBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 82E8237FD822EE38613A7D9D445F9E1F /* FBSDKEventBinding.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F89CF95AFE58DB317FFF4326DA4034F7 /* FBSDKGraphRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0151391679D109E928C1D43477F5920E /* FBSDKGraphRequest.m */; }; + F8F56FD71771BB2EA61643A69699A8CA /* BFURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 78430C5C81DB8A18233B28F3AA4AC91D /* BFURL.m */; }; + FA4725CD2742DCB0986B5A07C2275658 /* FBSDKLoginTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BD11C72BC0DC5CE7761E396C27FBC01 /* FBSDKLoginTooltipView.m */; }; + FAB3D6FDEC98C4E1C9C5B25BD0C138E2 /* FBSDKErrorRecoveryConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 226D38AF5F8B140FD05AFD60E90472E1 /* FBSDKErrorRecoveryConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB7ACE56C6FA4B600069728925CD3144 /* FBSDKIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EBB25F009A33A0C3C1D67C97906DD32 /* FBSDKIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC8DB3B66FF72CCCB856AAA64C0EB450 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37CF1DD020CCAD7E687BE1700EF0BBE5 /* UIKit.framework */; }; + FDE892E3526040B4322B8A08FD195AF7 /* FBSDKAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A3857E10D78E66AA1BE24443D598199 /* FBSDKAppLinkResolver.m */; }; + FE22460F81494C76BC7419383BBBDB54 /* FBSDKButton+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 8241BD96C9868C6E76A3DA9004372F06 /* FBSDKButton+Subclass.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FEDE02EF4C36D1F5D6B8464B46B62380 /* Pods-MAPS.ME-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 194ECC22F2FF174C734DDC86B2F9F39C /* Pods-MAPS.ME-dummy.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1242CF4A38EE8DDBA754C2AC4F6A538E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 596A054FD49BB13216E978B57737B33F; + remoteInfo = "ActionSheetPicker-3.0"; + }; + 23C92E672D08F9E00F267639C20D365D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA0C2A723DAAE0C6703D4A1AD7AA4169; + remoteInfo = FBSDKCoreKit; + }; + 6D6FCA9B21258BCFB0312085C3679E63 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F2B796974E3872C56B5EEFC43654E606; + remoteInfo = Bolts; + }; + 879AAC3176B1CD7D822F5E98736516A0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 96173E80FA991F6EE9415F67D21963FD; + remoteInfo = AppsFlyerFramework; + }; + A965B3C765C63A5A261B43E58CA589CE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D233D9588EF1DD6F9BFC33405B92B64A; + remoteInfo = FBSDKLoginKit; + }; + ABFBE23E2F7648C4EE2AD7EA857CEB97 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA0C2A723DAAE0C6703D4A1AD7AA4169; + remoteInfo = FBSDKCoreKit; + }; + B7BAD9E19FEC7F5BECA2AA91D53817A0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 106364887199D3E9FF7B854AE4F020F4; + remoteInfo = Pushwoosh; + }; + C23D62DB06EDD1CF665ACEEC678331CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F2B796974E3872C56B5EEFC43654E606; + remoteInfo = Bolts; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 001058A206DAAA3ADB6F667BC329C1FA /* Pods-MAPS.ME.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MAPS.ME.modulemap"; sourceTree = ""; }; + 00BF07AC71F791F7EB60BD6A1E6792D4 /* BFGeneric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFGeneric.h; path = Bolts/Common/BFGeneric.h; sourceTree = ""; }; + 00F04020A0AE59FDD5A2729E498AF368 /* FBSDKContainerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKContainerViewController.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m; sourceTree = ""; }; + 0151391679D109E928C1D43477F5920E /* FBSDKGraphRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m; sourceTree = ""; }; + 01878201FB3576225EE82027791B1197 /* BFAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink_Internal.h; path = Bolts/iOS/Internal/BFAppLink_Internal.h; sourceTree = ""; }; + 01A276FD8428EDCB645C91902304CFF0 /* FBSDKLoginKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKLoginKit-dummy.m"; sourceTree = ""; }; + 049240B656A3EB481D6C6868E06D166B /* FBSDKMutableCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMutableCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h; sourceTree = ""; }; + 059ADE3B6E7551A0A396E6D28A00CE2C /* _FBSDKLoginRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKLoginRecoveryAttempter.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m; sourceTree = ""; }; + 06EBA8F289B47E5BAECCEECD375EA028 /* FBSDKKeychainStoreViaBundleID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStoreViaBundleID.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m; sourceTree = ""; }; + 07F09DE8D7BDC85E518FB2B93373E645 /* FBSDKLoginUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginUtility.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h; sourceTree = ""; }; + 0874C0488C8451A6B9634A704AFC4D0C /* FBSDKUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m; sourceTree = ""; }; + 088C49767334386E2EAA774FE20679E2 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + 08DA78264F475E68CF8BC67AB194C023 /* FBSDKGraphRequestPiggybackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestPiggybackManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h; sourceTree = ""; }; + 0948D3E3933218AD0A0F3AF2BC79D9A8 /* FBSDKInternalUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInternalUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h; sourceTree = ""; }; + 09941671BA6DE586358CBF53B7690D1A /* FBSDKAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkNavigation.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h; sourceTree = ""; }; + 0E3B5CEF30DBBE2410C40E5F55CEB980 /* FBSDKAppEventsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsState.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h; sourceTree = ""; }; + 0E78F8C26D8FC2B6A0263F341508A9D6 /* FBSDKWebDialog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialog.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m; sourceTree = ""; }; + 0EBB25F009A33A0C3C1D67C97906DD32 /* FBSDKIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h; sourceTree = ""; }; + 0F0CF3FB705ECCDE142C46BB87EA62BD /* FBSDKURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h; sourceTree = ""; }; + 0FD2831D912D7E5599FE3E61C887D754 /* FBSDKAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkTarget.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h; sourceTree = ""; }; + 10117BE40260B7A990DA5A9ACDF601AA /* FBSDKAppLinkUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m; sourceTree = ""; }; + 10491C97615A25AC11D8513E58ADDE22 /* FBSDKBridgeAPIProtocolNativeV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolNativeV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h; sourceTree = ""; }; + 106AB17E3EA072EBD0E7297C9D0963C4 /* FBSDKSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSettings.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m; sourceTree = ""; }; + 10AA0212B7EEFBCD4AD54D69B620C445 /* FBSDKCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h; sourceTree = ""; }; + 1168D5661DDFF3EA95C14D49E1D98A36 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + 118F77D3E1BBD540B94FAAB7B7B25B9A /* FBSDKLoginTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h; sourceTree = ""; }; + 1247C95C75601F1C0280C6DA0F963384 /* FBSDKMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMeasurementEvent.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m; sourceTree = ""; }; + 128165CE6EA850C1FD749960B8F30A39 /* FBSDKWebDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h; sourceTree = ""; }; + 128DDE4AC9A1E340948EC71FFB494A11 /* FBSDKCodelessPathComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessPathComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h; sourceTree = ""; }; + 13A8CBF8CC6BEB063E2FE79ECAB58935 /* FBSDKAccessTokenCacheV4.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV4.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m; sourceTree = ""; }; + 14E092CA2AE29397CAE4D60C3CD96333 /* FBSDKAccessTokenCacheV3_21.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_21.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h; sourceTree = ""; }; + 168C3A7E93D8CF3C57E3F8341A3EB3EC /* Pods-MAPS.ME-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-Info.plist"; sourceTree = ""; }; + 16D49EDE2D1FA5E335F563DC5E5587EA /* FBSDKApplicationDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKApplicationDelegate.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m; sourceTree = ""; }; + 1709E15109BB16F3763C3D39907C9821 /* FBSDKImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKImageDownloader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h; sourceTree = ""; }; + 1832C45982600120D4A8C2F9CC4ED618 /* FBSDKPaymentObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKPaymentObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m; sourceTree = ""; }; + 1886A29257CD3C76A4994AB179562BF9 /* FBSDKLoginButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginButton.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h; sourceTree = ""; }; + 194ECC22F2FF174C734DDC86B2F9F39C /* Pods-MAPS.ME-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MAPS.ME-dummy.m"; sourceTree = ""; }; + 1A0C6E871715CE90C5F19CCC32B64B95 /* FBSDKGraphRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h; sourceTree = ""; }; + 1A47EC1D0404C60C2D79718FEF66452E /* FBSDKTestUsersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTestUsersManager.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m; sourceTree = ""; }; + 1A60E6613C3082CF963A52311937E694 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + 1AA6065F1465E98292976D3231F4E484 /* FBSDKColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKColor.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h; sourceTree = ""; }; + 1B06CD3C1ECA5339B1148E9AFDF62BCB /* FBSDKGraphRequestDataAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestDataAttachment.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h; sourceTree = ""; }; + 1B0BD855A61C31AF83272F115F6050FF /* SWActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWActionSheet.m; path = Pickers/SWActionSheet.m; sourceTree = ""; }; + 1B3D2AB06A4E4B1752048CA3CD06F0FD /* FBSDKBridgeAPIProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocol.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h; sourceTree = ""; }; + 1DB0266C81E8B89BE01AA4C3EE71BBE9 /* FBSDKViewImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewImpressionTracker.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m; sourceTree = ""; }; + 218F53C4F3854CD087C0C0A6D8306C2A /* FBSDKLoginConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginConstants.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m; sourceTree = ""; }; + 219B9D5BDA16E3D01CA7444387DA6AF0 /* FBSDKAccessTokenCacheV4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV4.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h; sourceTree = ""; }; + 226D38AF5F8B140FD05AFD60E90472E1 /* FBSDKErrorRecoveryConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h; sourceTree = ""; }; + 233EB1B490DAAB45661DD070EF24DA3A /* FBSDKURLOpening.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLOpening.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h; sourceTree = ""; }; + 2373F71DDE61FE3D5075F0EF8A6E61E8 /* _FBSDKTemporaryErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKTemporaryErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m; sourceTree = ""; }; + 23809299B5FB13CE35B0B911DFF5E8BD /* FBSDKTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m; sourceTree = ""; }; + 23D8CB4E13798A5E39105295A333551B /* FBSDKErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m; sourceTree = ""; }; + 2435DBDA6753B8E1CB5D2B2AAEB8CE58 /* ActionSheetLocalePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetLocalePicker.m; path = Pickers/ActionSheetLocalePicker.m; sourceTree = ""; }; + 245AA3E71AE207A3B0E1A2813152E02B /* FBSDKKeychainStoreViaBundleID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStoreViaBundleID.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h; sourceTree = ""; }; + 24B6FD058296AB724F92904FA38F7B28 /* FBSDKGateKeeperManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGateKeeperManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h; sourceTree = ""; }; + 26165DF7D809C93DC074433258549883 /* FBSDKAccessTokenCacheV3_17.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_17.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m; sourceTree = ""; }; + 26DD2EF4A6E8BAEFD67ECCB96B6BCE9C /* FBSDKBridgeAPIProtocolWebV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m; sourceTree = ""; }; + 2734CCCA5E08ABF04FA6580FF76CF376 /* FBSDKGraphRequestMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestMetadata.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h; sourceTree = ""; }; + 283C5165B8874B683ED2911585297B02 /* AbstractActionSheetPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractActionSheetPicker.m; path = Pickers/AbstractActionSheetPicker.m; sourceTree = ""; }; + 283F446B7617CD86E47150E7B94CB8FE /* FBSDKAudioResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAudioResourceLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m; sourceTree = ""; }; + 284114C1E6DAF45DBE1038E104F1EC3E /* FBSDKCodelessIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m; sourceTree = ""; }; + 28C51E095CF12E83792C2AD90BBECB48 /* FBSDKGraphRequestBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestBody.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h; sourceTree = ""; }; + 297FA42D6FBDB5786452DD9ADD8590B0 /* FBSDKButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKButton.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h; sourceTree = ""; }; + 2ABCF80F642A5943A696E4B0ABAC4A2D /* FBSDKErrorConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m; sourceTree = ""; }; + 2AF69B80B2E3C76389F9D25681FD7C63 /* FBSDKURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h; sourceTree = ""; }; + 2BD11C72BC0DC5CE7761E396C27FBC01 /* FBSDKLoginTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m; sourceTree = ""; }; + 2C133772B1806C3FC04EF459E712A53D /* FBSDKAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkNavigation.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m; sourceTree = ""; }; + 2C3D4FDD1C1E1B4ACB496CA63ACA6455 /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Bolts.modulemap; sourceTree = ""; }; + 2C714C1ED6057F55F66C952D9B51EA2E /* Pods-MAPS.ME-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MAPS.ME-frameworks.sh"; sourceTree = ""; }; + 2C7B0187F4AC9ED8726C0F2A7DFF8150 /* FBSDKBridgeAPIProtocolType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolType.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h; sourceTree = ""; }; + 2D0C54765DC0B21E2071A0DF64BBC534 /* ActionSheetPicker-3.0-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ActionSheetPicker-3.0-Info.plist"; sourceTree = ""; }; + 2D6914C566D251A55EEFAA417D6A836E /* FBSDKCodelessPathComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessPathComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m; sourceTree = ""; }; + 2EC2E275802C827578EA2BCFA8586A19 /* FBSDKLoginKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-prefix.pch"; sourceTree = ""; }; + 30550597C7B73B85C22D7F484C650334 /* FBSDKAppEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEvents.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h; sourceTree = ""; }; + 32F26AC3B25844644BCE71223EEFD98A /* FBSDKServerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m; sourceTree = ""; }; + 32F632D24D99D0060769BB52A046B5F4 /* FBSDKAccessTokenCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCache.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m; sourceTree = ""; }; + 33A9556D4B8B268ADC318BE07E97EBA3 /* FBSDKMaleSilhouetteIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMaleSilhouetteIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h; sourceTree = ""; }; + 343A25E11F5B5AD1677ECDF7FB2DD473 /* FBSDKTestUsersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTestUsersManager.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h; sourceTree = ""; }; + 34766ACB915D8998C57382640F59D509 /* FBSDKLoginKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKLoginKit.modulemap; sourceTree = ""; }; + 354F01B5AD19F6D9DE4294BAB84ED787 /* FBSDKEventBinding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBinding.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m; sourceTree = ""; }; + 36099C8F5D272B952E8EC6E7A37462BD /* FBSDKBridgeAPIRequest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKBridgeAPIRequest+Private.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h"; sourceTree = ""; }; + 366E2725AF2F56B7D16DE007003A1F26 /* FBSDKURLSessionTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLSessionTask.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m; sourceTree = ""; }; + 366F20C24FA930BC7305CFE298C566E7 /* FBSDKEventBindingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBindingManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m; sourceTree = ""; }; + 370B7512967BA75C02A013FF324177A0 /* FBSDKCloseIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCloseIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m; sourceTree = ""; }; + 37B484032C63D9B88B5FA30EA4C37B02 /* FBSDKInternalUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInternalUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m; sourceTree = ""; }; + 37CF1DD020CCAD7E687BE1700EF0BBE5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 37E7E9684CACC5CF3D2561A3F9CE7F43 /* FBSDKAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h; sourceTree = ""; }; + 3831565C24953AA1BC757003002F8091 /* ActionSheetPicker_3_0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ActionSheetPicker_3_0.framework; path = "ActionSheetPicker-3.0.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3989F572C0F73EE84A32F4BCE28FE20E /* FBSDKError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKError.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m; sourceTree = ""; }; + 3A304021137125635947AAFEA9150F5E /* BFMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent.h; path = Bolts/iOS/BFMeasurementEvent.h; sourceTree = ""; }; + 3AD3E0646B3D4C3B2880FFAA11FAAFDE /* SWActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWActionSheet.h; path = Pickers/SWActionSheet.h; sourceTree = ""; }; + 3BDE07CBF9C7B0D784C23859255F6073 /* FBSDKBridgeAPIProtocolWebV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV2.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h; sourceTree = ""; }; + 3C43A97884BAA96BF06C3BCADE681A9B /* FBSDKDialogConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDialogConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m; sourceTree = ""; }; + 3CB515EA5B403B27658DC22B82046CE0 /* BFWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFWebViewAppLinkResolver.m; path = Bolts/iOS/BFWebViewAppLinkResolver.m; sourceTree = ""; }; + 3D577BE1F6FC56DEB1362D3ED5ACEF40 /* ActionSheetCustomPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetCustomPicker.m; path = Pickers/ActionSheetCustomPicker.m; sourceTree = ""; }; + 3DE644F5C7029C1072D0CB81FB01FE42 /* ActionSheetStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetStringPicker.h; path = Pickers/ActionSheetStringPicker.h; sourceTree = ""; }; + 3EB9E1D5BCC7EDCBBD3F19267FF7B894 /* FBSDKGateKeeperManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGateKeeperManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m; sourceTree = ""; }; + 3EF531283417FB7F4585FD257A844E04 /* FBSDKWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebViewAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m; sourceTree = ""; }; + 3F5EECAC2543E0818C9A08F972818614 /* FBSDKAppEventsDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsDeviceInfo.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h; sourceTree = ""; }; + 409A923F70B0917394727B9168E892BA /* FBSDKApplicationObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h; sourceTree = ""; }; + 40DF7EC0D7E58DFBE91210BE69EC23BE /* FBSDKBridgeAPIProtocolWebV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h; sourceTree = ""; }; + 41FF50E9463711E495A391847EF7AB8A /* FBSDKAppEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEvents.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m; sourceTree = ""; }; + 46067ADDB6B2890FE414FFEDCD01BE24 /* FBSDKGraphErrorRecoveryProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphErrorRecoveryProcessor.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h; sourceTree = ""; }; + 46474CD6748E50D84D8BFEA57406851D /* FBSDKDeviceLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h; sourceTree = ""; }; + 489CDF339EF9B92E3E56A9C962C5B095 /* FBSDKMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h; sourceTree = ""; }; + 49B99398062E741A3D69FDF7F8B16B93 /* FBSDKCodelessParameterComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessParameterComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h; sourceTree = ""; }; + 49C3F0F49FA79793B0D451BEA10B2F6F /* FBSDKBridgeAPIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h; sourceTree = ""; }; + 4A15B0A7BC40DEB7D045982844E9BC44 /* FBSDKLoginManagerLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLogger.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m; sourceTree = ""; }; + 4ACC420E980787C480D02CFA88F3ADA3 /* _FBSDKLoginRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKLoginRecoveryAttempter.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h; sourceTree = ""; }; + 4B06844304E3E581AF74B5FBBD35394F /* FBSDKProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfile.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h; sourceTree = ""; }; + 4B169E8A0D902175976E6228FBEC85F8 /* FBSDKConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKConstants.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m; sourceTree = ""; }; + 4D1BDC6CE38FCAB954323E59FCD3C10D /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 4D243F024EF97A377FA7185517801413 /* FBSDKAccessTokenCaching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCaching.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h; sourceTree = ""; }; + 4FBF08C2477D0A863C2E46B4785DBEF9 /* FBSDKGraphRequestConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m; sourceTree = ""; }; + 505E5F104D466EAF3C60003033F0BB34 /* FBSDKProfilePictureView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfilePictureView.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h; sourceTree = ""; }; + 52523D0D6E8906BBC72740CA8383D87E /* Pushwoosh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pushwoosh.framework; path = Framework/Pushwoosh.framework; sourceTree = ""; }; + 52BD726A8148305607B1A9BCB39FFE06 /* FBSDKBridgeAPIProtocolNativeV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolNativeV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m; sourceTree = ""; }; + 53416AEB99C4D9CC57B340BA460E86F5 /* BFMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFMeasurementEvent.m; path = Bolts/iOS/BFMeasurementEvent.m; sourceTree = ""; }; + 543EE49034EFFF775ECEBE8BC5724E7B /* ActionSheetMultipleStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetMultipleStringPicker.m; path = Pickers/ActionSheetMultipleStringPicker.m; sourceTree = ""; }; + 556F88B694E03BCEC7CB9AB6E4D2222F /* FBSDKBoltsMeasurementEventListener.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBoltsMeasurementEventListener.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m; sourceTree = ""; }; + 55A828E7BCA5B125D98B9D1BA469CF34 /* FBSDKCodelessParameterComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessParameterComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m; sourceTree = ""; }; + 55A97F470802D9B6B09063BE87CD1316 /* ActionSheetPicker-3.0-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-umbrella.h"; sourceTree = ""; }; + 55AF246447E3B4C5470632BD6B990168 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKCoreKit.framework; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5629209B6FC8EE4E4A0B6426939E45D4 /* BFAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkNavigation.m; path = Bolts/iOS/BFAppLinkNavigation.m; sourceTree = ""; }; + 569AD8380636D022B129F024A6027258 /* FBSDKAppLinkUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h; sourceTree = ""; }; + 57B1A7EF266E5A2FA16B2077C33C74AA /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + 5A3857E10D78E66AA1BE24443D598199 /* FBSDKAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m; sourceTree = ""; }; + 5A984B41AA4783FD394B8A45FF11A79E /* FBSDKUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h; sourceTree = ""; }; + 5B45CD944FA49268F72373EDFA99E3F0 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 5BA4C3E6DBFA8E8BBC56E7D2CD7D50A0 /* FBSDKLoginManagerLoginResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLoginResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m; sourceTree = ""; }; + 5D53018EBDAAB8718BD2D00D89E53E10 /* FBSDKBoltsMeasurementEventListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBoltsMeasurementEventListener.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h; sourceTree = ""; }; + 5D8F01AC08B7F25F8FED21D8287AA23E /* FBSDKURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURL.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m; sourceTree = ""; }; + 5DD4B0708BA6E5ED45276428E7194021 /* BFAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkTarget.h; path = Bolts/iOS/BFAppLinkTarget.h; sourceTree = ""; }; + 5E04F24CF8B46516E6C964BF68083C22 /* BFAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView_Internal.h; path = Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; + 5E5850847CBB9B1DEE852CC1D8B4EA8E /* Pods-MAPS.ME-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-acknowledgements.plist"; sourceTree = ""; }; + 5EE4073F1FF5506A064C3312D2BFB7D4 /* FBSDKAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; + 5F62080B06AB79B8BE3572FBC33152E2 /* FBSDKAppEventsUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h; sourceTree = ""; }; + 6013EDF181F7814A34202FD701D30297 /* FBSDKAccessTokenExpirer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenExpirer.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h; sourceTree = ""; }; + 606959428054A2A3F109336975433B22 /* FBSDKBridgeAPICrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPICrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h; sourceTree = ""; }; + 60B86E97AF59D419113382650B080015 /* FBSDKProfilePictureView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfilePictureView.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m; sourceTree = ""; }; + 610EF5BE33965B15FAB91B3892C81D8B /* DistancePickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DistancePickerView.h; path = Pickers/DistancePickerView.h; sourceTree = ""; }; + 625891336096DE020A2C72E0C0E1D1AF /* FBSDKDeviceRequestsHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceRequestsHelper.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h; sourceTree = ""; }; + 6331C263691739C3C3EED352D702600D /* ActionSheetDatePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDatePicker.h; path = Pickers/ActionSheetDatePicker.h; sourceTree = ""; }; + 63A4ED8B0ABD42E7AB34D20DFA67CF8B /* FBSDKImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKImageDownloader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m; sourceTree = ""; }; + 63E91A75CD8CC7BB4C2D8AD1C5211B74 /* FBSDKBridgeAPICrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPICrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m; sourceTree = ""; }; + 64344FE8ABEBE0C396B8038FFF881E35 /* FBSDKServerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h; sourceTree = ""; }; + 654F7F3D16AF8C21D1B228322F82B27F /* FBSDKContainerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKContainerViewController.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h; sourceTree = ""; }; + 65625F63721323CD8FA3FCDE1F6D84E2 /* FBSDKDynamicFrameworkLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDynamicFrameworkLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h; sourceTree = ""; }; + 65A11A721C262AB777990570E09BF915 /* FBSDKAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererView.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m; sourceTree = ""; }; + 65E2624E8579D80DDE0525AB259D0E5F /* FBSDKHybridAppEventsScriptMessageHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKHybridAppEventsScriptMessageHandler.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m; sourceTree = ""; }; + 66C6336DA0FD17FA2763231EEBD257A0 /* FBSDKAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLink.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m; sourceTree = ""; }; + 673100001490CB1B3696D6083060E59C /* BFURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL.h; path = Bolts/iOS/BFURL.h; sourceTree = ""; }; + 680D4A8F01292F4D92DFE9BB5969455E /* FBSDKDeviceLoginCodeInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginCodeInfo.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m; sourceTree = ""; }; + 6972F211CE75952E3AF8FED7735197EC /* FBSDKLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogger.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m; sourceTree = ""; }; + 69A75EBD9345B8E159F6838CCDE87917 /* FBSDKLoginKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKLoginKit-Info.plist"; sourceTree = ""; }; + 69F09C464664DA506E5F815B6D81D8CF /* FBSDKAppEvents+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKAppEvents+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h"; sourceTree = ""; }; + 6AA6F8D08CF2257E4C28D8F1B639C0E1 /* BFAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView.h; path = Bolts/iOS/BFAppLinkReturnToRefererView.h; sourceTree = ""; }; + 6B2B749671D33A85590560B59BF24416 /* FBSDKGraphRequestConnection+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequestConnection+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h"; sourceTree = ""; }; + 6C2F21330F0D55875466873D329350F8 /* FBSDKGraphRequestBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestBody.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m; sourceTree = ""; }; + 6D7C7FB160F80CBAC45A6950852D8103 /* FBSDKDeviceLoginManagerResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginManagerResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h"; sourceTree = ""; }; + 6DFC316632CCC90C5752D83D10585BC8 /* FBSDKConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKConstants.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h; sourceTree = ""; }; + 6E09A5F42AE4CD0C33087D6EAE026265 /* FBSDKAudioResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAudioResourceLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h; sourceTree = ""; }; + 6F08FBE811C27F612A8A3C14CC02ED38 /* BFAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLink.m; path = Bolts/iOS/BFAppLink.m; sourceTree = ""; }; + 6F42BE789BB47A2138DE866481943B20 /* FBSDKLoginKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginKit+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h"; sourceTree = ""; }; + 719F98A5A6E294F412E15A64339010F7 /* ActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetPicker.h; path = Pickers/ActionSheetPicker.h; sourceTree = ""; }; + 72FBE1484BA24B1335B9AF160C6A7BBA /* FBSDKDeviceLoginManagerResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManagerResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h; sourceTree = ""; }; + 73EA6A58FBCCB932419773C521432CCE /* FBSDKBridgeAPIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m; sourceTree = ""; }; + 74A9930C1D7A1AA9B2436EF3AD52F913 /* FBSDKIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m; sourceTree = ""; }; + 74EF0840A6CC19F0523F69DCE8EEDB57 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + 7544973673FD9F19FB5AEDE0B570CD1C /* BFAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkResolving.h; path = Bolts/iOS/BFAppLinkResolving.h; sourceTree = ""; }; + 76B396156F6A7F9464E6E269E2735405 /* FBSDKAppEventsStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsStateManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m; sourceTree = ""; }; + 7800622A0913B4D341E7F9BA1DD8C1D3 /* FBSDKAccessTokenCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCache.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h; sourceTree = ""; }; + 78430C5C81DB8A18233B28F3AA4AC91D /* BFURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFURL.m; path = Bolts/iOS/BFURL.m; sourceTree = ""; }; + 7A5BA29CA01F9C53055A9F546C0275F9 /* FBSDKHybridAppEventsScriptMessageHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKHybridAppEventsScriptMessageHandler.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h; sourceTree = ""; }; + 7B18D7A9D7727350A4FDE2701818D0B7 /* Pods-MAPS.ME.production full.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.production full.xcconfig"; sourceTree = ""; }; + 7B56E8666BD40B61E4290D9FCFD396DD /* FBSDKProfile+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKProfile+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h"; sourceTree = ""; }; + 7B6A85F169B6A9D24AAE9014DE53A166 /* AppsFlyerFramework.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppsFlyerFramework.xcconfig; sourceTree = ""; }; + 7C27589E176D7A03FD59165039C9C81B /* FBSDKAppEventsDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsDeviceInfo.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m; sourceTree = ""; }; + 7C4C1FC309C6E0B70A69EA4E24109911 /* Pods-MAPS.ME-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MAPS.ME-umbrella.h"; sourceTree = ""; }; + 7E077C836E17156EE07AA743FCC6D02F /* FBSDKMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h; sourceTree = ""; }; + 7FE66A2D321AB26489E3F9F96B83DE75 /* FBSDKLoginManagerLoginResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManagerLoginResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h"; sourceTree = ""; }; + 80A976D787E1C409A9419E72936C6F6D /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts.framework; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 80FF9842E437C57C930E867CFC801EEC /* FBSDKLoginError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginError.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h; sourceTree = ""; }; + 811134F946A2225EB4EECBCA5726A2A3 /* Pods-MAPS.ME-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MAPS.ME-acknowledgements.markdown"; sourceTree = ""; }; + 8241BD96C9868C6E76A3DA9004372F06 /* FBSDKButton+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKButton+Subclass.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h"; sourceTree = ""; }; + 827BA6755E09F441C4866FE4D2006F1F /* FBSDKAccessTokenCacheV3.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m; sourceTree = ""; }; + 82E8237FD822EE38613A7D9D445F9E1F /* FBSDKEventBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBinding.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h; sourceTree = ""; }; + 84423BF1361CC6D8ED67EF86D1937464 /* FBSDKEventBindingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBindingManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h; sourceTree = ""; }; + 84506500D99E43DF1740CADEECC86CAA /* FBSDKBridgeAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPI.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m; sourceTree = ""; }; + 886AB37C4A5B9DB83C856FBF832645FF /* FBSDKMaleSilhouetteIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMaleSilhouetteIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m; sourceTree = ""; }; + 89BC36198072F3B1C8FD3E52C9C2C2A1 /* BFURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL_Internal.h; path = Bolts/iOS/Internal/BFURL_Internal.h; sourceTree = ""; }; + 8B0780172E95A7228F400F2E98BD0091 /* BFAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererController.m; path = Bolts/iOS/BFAppLinkReturnToRefererController.m; sourceTree = ""; }; + 8BA28C04515EACA48FE0AB49963EDDEF /* FBSDKSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSettings.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h; sourceTree = ""; }; + 8BED41C9F3919D4C10585F2D0B5B719A /* FBSDKDynamicFrameworkLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDynamicFrameworkLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m; sourceTree = ""; }; + 8BFA16EC0105B73CA2998C24BA97F29B /* BFAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererController.h; path = Bolts/iOS/BFAppLinkReturnToRefererController.h; sourceTree = ""; }; + 8EC3404CFFA9CF86D01E85896A3D2D76 /* _FBSDKTemporaryErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKTemporaryErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h; sourceTree = ""; }; + 8EFDE53D17ECE7F5302E2FC6EF469A19 /* FBSDKCoreKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKCoreKit-Info.plist"; sourceTree = ""; }; + 8F774FB409773EFCC1EDC7310A7C5AE4 /* ActionSheetDatePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDatePicker.m; path = Pickers/ActionSheetDatePicker.m; sourceTree = ""; }; + 8FAB6DDE6665B719F329627C936C8D93 /* FBSDKGraphRequest+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequest+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h"; sourceTree = ""; }; + 8FE127178CA122E699E4368D0CF1AF48 /* DistancePickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DistancePickerView.m; path = Pickers/DistancePickerView.m; sourceTree = ""; }; + 90CC1348DC26E425A075A74D260C40B4 /* FBSDKMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h; sourceTree = ""; }; + 911F65347EDB02D9BE193670D71F57EA /* FBSDKAccessTokenCacheV3_17.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_17.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h; sourceTree = ""; }; + 91A066593CB57319C1C84843BF2CCBE9 /* FBSDKCoreKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-umbrella.h"; sourceTree = ""; }; + 91DA8811FAC26A49A6B6A33ADDA076E9 /* FBSDKWebDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m; sourceTree = ""; }; + 93720A9C4341F4E1616392A07A7F1761 /* FBSDKLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m; sourceTree = ""; }; + 937B40C0611B0F417CBC17EB3DB58BBB /* FBSDKAppEventsUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m; sourceTree = ""; }; + 944DDFC5D11510FD899ED546259F40B4 /* FBSDKLoginError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginError.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m; sourceTree = ""; }; + 94575A01EB6BF8EC2F29F424861E9FC8 /* FBSDKApplicationDelegate+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKApplicationDelegate+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h"; sourceTree = ""; }; + 94FC8548DC462698726CE70757D0CA2F /* FBSDKServerConfigurationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfigurationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h; sourceTree = ""; }; + 953F7B09BBCFB6CE7A860F52E077F7A1 /* FBSDKErrorConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h; sourceTree = ""; }; + 97731C9828665FA46D7CAFB5ED483F32 /* FBSDKAccessTokenCacheV3_21.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_21.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m; sourceTree = ""; }; + 98A483DD41E81A22DDD5B500475CEA8F /* FBSDKTimeSpentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTimeSpentData.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h; sourceTree = ""; }; + 997B82DBFB6E8D3DABA5B8B6B1C1294C /* FBSDKAppEventsStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsStateManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h; sourceTree = ""; }; + 9ACA1AD937A6C119920E5932148DF77A /* BFWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFWebViewAppLinkResolver.h; path = Bolts/iOS/BFWebViewAppLinkResolver.h; sourceTree = ""; }; + 9D4F1770EC3FA2312196667E137CCB89 /* ActionSheetDistancePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDistancePicker.m; path = Pickers/ActionSheetDistancePicker.m; sourceTree = ""; }; + 9D4FADF73BFAE70F109F1A0637BA6876 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D880B113709C73B9E0E23BDB9F893A6 /* FBSDKSettings+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKSettings+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.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; }; + 9F4CA5395DABE0AE1D7CCD49120F070D /* FBSDKErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h; sourceTree = ""; }; + A12CE30673DA3C2A0511A5EB326189C5 /* FBSDKProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfile.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m; sourceTree = ""; }; + A1B9EFCFC4938A13C8CEECBFFDD0784F /* FBSDKAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h; sourceTree = ""; }; + A2524F04A4795064C82B7EB45DD5EF0C /* FBSDKKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStore.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m; sourceTree = ""; }; + A47206A49E0313CCE2C3F5AC068C126B /* FBSDKViewImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewImpressionTracker.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h; sourceTree = ""; }; + A55C0068BBBE309BB7C5C44E0E9292D9 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKLoginKit.framework; path = FBSDKLoginKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A57339C8BE06038F4BA6C36075500A12 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + A691756115AFFC0FE1C0666BAE413CC5 /* ActionSheetPicker-3.0.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ActionSheetPicker-3.0.xcconfig"; sourceTree = ""; }; + A6DFE5E9654AF7A2DCF4B304AE42AFB8 /* BFAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererView.m; path = Bolts/iOS/BFAppLinkReturnToRefererView.m; sourceTree = ""; }; + A6FC7265FBE18D31F978C009C85E80A5 /* FBSDKAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h; sourceTree = ""; }; + A78324EA7507D96D76AE5B6915C5A653 /* FBSDKColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKColor.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m; sourceTree = ""; }; + A8AEFC54AC54ED030BC4E324762BDAEE /* FBSDKDialogConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDialogConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h; sourceTree = ""; }; + A921967D737D38E4B1C08A1308910BDE /* FBSDKLoginUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginUtility.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m; sourceTree = ""; }; + A93E6DDAB061778D66DB56D43F7213A8 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + AA52A813C60EB939A325CA4651B6C85D /* FBSDKBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBase64.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h; sourceTree = ""; }; + AA598B86D44B7FD68D6574C88FC944A0 /* FBSDKTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h; sourceTree = ""; }; + AA890B95BAAF26BEC5390EAB9B6CF319 /* FBSDKAppEventsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsState.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m; sourceTree = ""; }; + AAE0D8B45DE7B6A68947444E93AFAB33 /* FBSDKCoreKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKCoreKit-dummy.m"; sourceTree = ""; }; + AB16DBDEEB648EEA7620CEF72A35F9BB /* ActionSheetDistancePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDistancePicker.h; path = Pickers/ActionSheetDistancePicker.h; sourceTree = ""; }; + AB66D2209080CE07C727E8EEB50C2BDA /* FBSDKCloseIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCloseIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h; sourceTree = ""; }; + AC1EFDD1A4ACD6C26AD6E857461629DC /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + ACD86C38E46FAFCAAB13869766C9C77C /* FBSDKWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebViewAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h; sourceTree = ""; }; + AD22552D86A03AE913DDD7A621104FE1 /* Pods-MAPS.ME.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.debug.xcconfig"; sourceTree = ""; }; + B0A3006B64B76811C9F555532CFEDAC2 /* Pods-MAPS.ME.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.release.xcconfig"; sourceTree = ""; }; + B14CEBA829519E9627C159925FF88F7A /* FBSDKGraphRequestMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestMetadata.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m; sourceTree = ""; }; + B1F99E3A78E6BD521678A09B3B2E64B3 /* FBSDKCodelessMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h; sourceTree = ""; }; + B3BBA670C2F885C3E5ED8C403698FFB0 /* BFAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkTarget.m; path = Bolts/iOS/BFAppLinkTarget.m; sourceTree = ""; }; + B4EF7C0639BAFB7E337431E07406505F /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; + B53885BD6BEB7B9F0961BF4F47D2CFE8 /* FBSDKServerConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfiguration+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h"; sourceTree = ""; }; + B92E8F974EB838E561ED0FA3B3FAF08D /* FBSDKLoginCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginCompletion.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m; sourceTree = ""; }; + BBBD11E3A7E1306130F0A8A2D3990876 /* FBSDKLoginKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.xcconfig; sourceTree = ""; }; + BBDE1D5C729107CBEEAD3B84A5E4C518 /* FBSDKSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSwizzler.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m; sourceTree = ""; }; + BC2EC8AE0C467498151AA5ABFD2512B2 /* FBSDKGraphErrorRecoveryProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphErrorRecoveryProcessor.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m; sourceTree = ""; }; + BC83D95960C6CAFBC6849FA7373A63AD /* FBSDKLoginManagerLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLogger.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h; sourceTree = ""; }; + BEF2227F9EDA813A7C475C0A19861054 /* FBSDKGraphRequestPiggybackManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestPiggybackManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m; sourceTree = ""; }; + BF274C5D73C6EB58B1C8351D44035C07 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + C0B06BC7040B7FEEF8DBCE8BCD1C39BC /* FBSDKApplicationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationDelegate.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h; sourceTree = ""; }; + C1290C6E9B4D65AB127501F164461D3A /* FBSDKBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBase64.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m; sourceTree = ""; }; + C14D01E835CDB9CBE4672170A97FC2BB /* FacebookSDKStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = FacebookSDKStrings.bundle; sourceTree = ""; }; + C3BAD223DB4A025F06DEC2CE96A34772 /* ActionSheetPicker-3.0-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-prefix.pch"; sourceTree = ""; }; + C4DC38204553780BE926E3B1A2B5DEF7 /* FBSDKSystemAccountStoreAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSystemAccountStoreAdapter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m; sourceTree = ""; }; + C4EA2DED691103287EEEFF8272C0CD82 /* FBSDKAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolving.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h; sourceTree = ""; }; + C5701C075B79C36FE1C3A4A47480F29D /* FBSDKUIUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUIUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h; sourceTree = ""; }; + C5C531CBE54BED6D99BC7D0524D4B815 /* FBSDKCoreKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKCoreKit.xcconfig; sourceTree = ""; }; + C5EC7842BB820F991A3CBAA92C38B148 /* FBSDKDeviceLoginCodeInfo+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginCodeInfo+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h"; sourceTree = ""; }; + C769B45EF946AAEA6D08EBD2C9E9F51B /* ActionSheetPicker-3.0-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ActionSheetPicker-3.0-dummy.m"; sourceTree = ""; }; + C7D19FE4452DE832F8EA22235DCA08A3 /* FBSDKKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStore.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h; sourceTree = ""; }; + C7F09C50F3B4BFCB93D28ABFFB861E93 /* ActionSheetCustomPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPicker.h; path = Pickers/ActionSheetCustomPicker.h; sourceTree = ""; }; + C8B1AFF6B34D15D6984FBA231976B833 /* BFMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent_Internal.h; path = Bolts/iOS/Internal/BFMeasurementEvent_Internal.h; sourceTree = ""; }; + C98179269BA85865DF3984FE44C2795F /* FBSDKErrorRecoveryConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m; sourceTree = ""; }; + C9E48330DEDB17419695D56BD9295BB7 /* Bolts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Bolts-Info.plist"; sourceTree = ""; }; + CAA69DB2945C5C32B860C623485A7E2C /* FBSDKCodelessIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h; sourceTree = ""; }; + CB3A33D569D79F70BC14257E9212B7AF /* FBSDKMonotonicTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMonotonicTime.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h; sourceTree = ""; }; + CB81C3F12580E545869CEA501861ED32 /* FBSDKError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKError.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h; sourceTree = ""; }; + CB87FEF69C043BF34C033AC4AFA1D59A /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + CC589219C128FC872E343E74CBFB945B /* FBSDKCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m; sourceTree = ""; }; + CE17C43112EE4C57F9BD1F7F32A98590 /* FBSDKDeviceLoginCodeInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginCodeInfo.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h; sourceTree = ""; }; + CF37449CD930DA1810A99999215AE6E8 /* Pushwoosh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pushwoosh.xcconfig; sourceTree = ""; }; + CF56D25BAE233004E3CD09ED36E2DFC6 /* FBSDKLoginManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManager+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h"; sourceTree = ""; }; + CF70E08FAD9C95686A6FD6D495C6D3E0 /* FBSDKTypeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTypeUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m; sourceTree = ""; }; + D068BE85851CA0BEB9E3CAE43A5F82CA /* FBSDKMath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMath.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m; sourceTree = ""; }; + D0A6622C9107C6A26E3BC14D53BEDB15 /* FBSDKCoreKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKCoreKit.modulemap; sourceTree = ""; }; + D11B4649B82A725E4610A0B270C7624D /* FBSDKTriStateBOOL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTriStateBOOL.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h; sourceTree = ""; }; + D1AC9823949E800367F15A7228B95B75 /* ActionSheetMultipleStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetMultipleStringPicker.h; path = Pickers/ActionSheetMultipleStringPicker.h; sourceTree = ""; }; + D43870183BE1294CF94F0B9FE91B377C /* FBSDKTimeSpentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTimeSpentData.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m; sourceTree = ""; }; + D4B751E56CAA5E9AB448346C596B7E8A /* FBSDKBridgeAPIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIResponse.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h; sourceTree = ""; }; + D4F3F15354612AE3235224FFD1C03851 /* FBSDKLoginKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-umbrella.h"; sourceTree = ""; }; + D50127072C993F42409BF6F6FE32101E /* FBSDKAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h; sourceTree = ""; }; + D514150BD825EA8705813AF292546355 /* BFAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkNavigation.h; path = Bolts/iOS/BFAppLinkNavigation.h; sourceTree = ""; }; + D5CFBAB8D8F7ED949AE09BB51BD73449 /* ActionSheetStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetStringPicker.m; path = Pickers/ActionSheetStringPicker.m; sourceTree = ""; }; + D5E815DFA3213ED9A38531D38874219F /* FBSDKMonotonicTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMonotonicTime.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m; sourceTree = ""; }; + D5F3F796CC08CE4630684E734B578B3B /* FBSDKLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogger.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h; sourceTree = ""; }; + D8275E0B0EABFF01FBC45E9F87E344DC /* FBSDKGraphRequestDataAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestDataAttachment.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m; sourceTree = ""; }; + D8AEB95723C0D433CB81A979706881AB /* AppsFlyerLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AppsFlyerLib.framework; sourceTree = ""; }; + D924DDBCBB652F4A19756657681E5565 /* FBSDKMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMath.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h; sourceTree = ""; }; + D95201A0A17FAE6F0B804370690A73DE /* FBSDKLoginManagerLoginResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLoginResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h; sourceTree = ""; }; + D9E7124360178F1CF4A63DE69AF14E57 /* FBSDKLoginKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginKit.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h; sourceTree = ""; }; + DA26F12078F209BB979B9654B7BCEC66 /* FBSDKLogo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h; sourceTree = ""; }; + DA542D9A8FAFAA9C1C4AA575C714D629 /* FBSDKTypeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTypeUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h; sourceTree = ""; }; + DA7F946A654AEFDDD07C93AE24B1794D /* FBSDKLoginCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginCompletion.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h; sourceTree = ""; }; + DAAE56E9869D289609E52157E33E908A /* FBSDKAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererController.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m; sourceTree = ""; }; + DABF448158B0F0239097079C5853060C /* ActionSheetCustomPickerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPickerDelegate.h; path = Pickers/ActionSheetCustomPickerDelegate.h; sourceTree = ""; }; + DAE48A67930DC88473D2A522CC776EA5 /* FBSDKDeviceLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m; sourceTree = ""; }; + DBAE6DE2D162F7F8F9A2D9B56B81B9CA /* FBSDKCoreKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-prefix.pch"; sourceTree = ""; }; + DBFF221474767A561253D03648F0A226 /* FBSDKDeviceLoginManagerResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManagerResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m; sourceTree = ""; }; + DCB09787E3A9718D992D3468B2212B28 /* FBSDKLogo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m; sourceTree = ""; }; + DD573AD5F074197FD07CA0856FB81B67 /* FBSDKLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h; sourceTree = ""; }; + E158DA7063F1035B34171843CD6FD071 /* FBSDKBridgeAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPI.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h; sourceTree = ""; }; + E1DE2D79A361ECBA92D970FFC7DE1518 /* FBSDKCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h; sourceTree = ""; }; + E22747A08AF1288EFAFE00E99C7D3C3F /* FBSDKBridgeAPIProtocolWebV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV2.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m; sourceTree = ""; }; + E22D5681BEA92F26CFCA6F286316C8A7 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + E3D80F97B0FCDAF349EC03A2128168A7 /* FBSDKServerConfigurationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfigurationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m; sourceTree = ""; }; + E5142391F374EE911B89F202FB2ED401 /* FBSDKSystemAccountStoreAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSystemAccountStoreAdapter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h; sourceTree = ""; }; + E53725F9922256640F815FAC2B8CBF26 /* FBSDKAccessTokenCacheV3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h; sourceTree = ""; }; + E5588D94D52332D9BB779D37EDE486B7 /* FBSDKAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkTarget.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m; sourceTree = ""; }; + E6B15EDF4AC5EFF096F6CB3306683706 /* FBSDKUserDataStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUserDataStore.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h; sourceTree = ""; }; + E7CAA9FAF82142B31152F69C021D648A /* FBSDKCoreKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKCoreKit+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h"; sourceTree = ""; }; + E97E00F381A51627081631960D82D5C4 /* FBSDKUserDataStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUserDataStore.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m; sourceTree = ""; }; + EA7E65CB75610FCCB534AF3DC36E6632 /* FBSDKAccessToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessToken.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m; sourceTree = ""; }; + EAA72319AC39F91580408B4FC967201F /* FBSDKLoginConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginConstants.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h; sourceTree = ""; }; + EB7C4C4F613A3F72F139B13408256262 /* FBSDKTriStateBOOL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTriStateBOOL.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m; sourceTree = ""; }; + EBC1F5CE43471967DCE5BBBC718605AB /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED635F35B70DA7C626200C7E1CF841BE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + ED95C6722CB4CBED05DB13DB6570B9FC /* FBSDKBridgeAPIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIResponse.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m; sourceTree = ""; }; + EE2157AC8D0F90AE03BEC1C12E81C838 /* FBSDKCoreKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCoreKit.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h; sourceTree = ""; }; + EEC811D46449AFD35151A41E6EEF0103 /* FBSDKAccessToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessToken.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h; sourceTree = ""; }; + F079E936DF52DE1F038BEB709F63B8EB /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + F07C2BA696DD225046A9D7FD83446B76 /* AbstractActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractActionSheetPicker.h; path = Pickers/AbstractActionSheetPicker.h; sourceTree = ""; }; + F10A5BAE8D0A3CE8303169710F7E80C2 /* FBSDKButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m; sourceTree = ""; }; + F11BB0AFEA2E669C9774F1212A021ABB /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + F23ED63F117550D4F8618B020D711995 /* FBSDKURLSessionTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLSessionTask.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h; sourceTree = ""; }; + F3472270CFDC48FF5F8D6F894C7AA5AE /* FBSDKViewHierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewHierarchy.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h; sourceTree = ""; }; + F3B89FFE8B1F9F336125E4C89A00956A /* FBSDKViewHierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewHierarchy.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m; sourceTree = ""; }; + F679678E496274C86DA2789705DD9275 /* ActionSheetPicker-3.0.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "ActionSheetPicker-3.0.modulemap"; sourceTree = ""; }; + F8961E4EC5A785D18985266880734312 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + F8DD09C5C20CA2D676942AC8AE8F712A /* FBSDKLoginButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginButton.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m; sourceTree = ""; }; + FA1E45E61D35535E9BE674C2A73F289E /* FBSDKServerConfigurationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfigurationManager+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h"; sourceTree = ""; }; + FABD3E5B1026611A3909CA4ACA5A5B2A /* FBSDKAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererController.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h; sourceTree = ""; }; + FB7F8BB6FB48A164C8B12A7D2530DDDB /* BFAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink.h; path = Bolts/iOS/BFAppLink.h; sourceTree = ""; }; + FBD6B43D2E5081D9407F8D0A67C16F20 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + FC351EF044DE2F5989BBB68076710059 /* FBSDKPaymentObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKPaymentObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h; sourceTree = ""; }; + FCC82708831361AE78AA946ABE8BD539 /* ActionSheetLocalePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetLocalePicker.h; path = Pickers/ActionSheetLocalePicker.h; sourceTree = ""; }; + FD29AFC7900D19074E1F809228552B7D /* FBSDKGraphRequestConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h; sourceTree = ""; }; + FDD154F1898BB26E16D70F6BB2C43BA5 /* FBSDKDeviceRequestsHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceRequestsHelper.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m; sourceTree = ""; }; + FE551455685414EA71E8AFBCCDF0EF4E /* FBSDKLoginCompletion+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginCompletion+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h"; sourceTree = ""; }; + FFCDFF10DAC812E47587DF71C683FC70 /* FBSDKWebDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialog.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h; sourceTree = ""; }; + FFDFF54406EA421D1E0EDA7D57CAF380 /* FBSDKSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSwizzler.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h; sourceTree = ""; }; + FFE153C4FD6D8E9644BEC3DCD35DD394 /* FBSDKAccessTokenExpirer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenExpirer.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m; sourceTree = ""; }; + FFE39CF5CA53503CBF529A3390C2CD1C /* Pods_MAPS_ME.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_MAPS_ME.framework; path = "Pods-MAPS.ME.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0018779BB8ADB891AC17BD05150F39B2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0E6AD240F6FE70D709F97B9D21E5FD00 /* Foundation.framework in Frameworks */, + FC8DB3B66FF72CCCB856AAA64C0EB450 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 56CA50251C17C98D5392C04E767862F6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8C56D3ACDCBF40BF56828651DDA211B9 /* Bolts.framework in Frameworks */, + 0DDF24B3F018D337C54B6A94947F30BF /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 87B6B4C9D1F54B5604D04605EA208C04 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DBCD17D0DF034CEA8850C8ADFAA4CA81 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9D35C3AF9624D5783E86BFE137B62DF1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5AECF245E545380FC3637DAC1D30F3F9 /* FBSDKCoreKit.framework in Frameworks */, + 10D455ABEC40A28AC197DE088BB33390 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B4D733136C17B5B13A34A3E4BE35EF96 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4E528594216C9DD8C33994FF2A253B67 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0069C7BFD86D441D85FEBB4290ECB47F /* Pods-MAPS.ME */ = { + isa = PBXGroup; + children = ( + 001058A206DAAA3ADB6F667BC329C1FA /* Pods-MAPS.ME.modulemap */, + 811134F946A2225EB4EECBCA5726A2A3 /* Pods-MAPS.ME-acknowledgements.markdown */, + 5E5850847CBB9B1DEE852CC1D8B4EA8E /* Pods-MAPS.ME-acknowledgements.plist */, + 194ECC22F2FF174C734DDC86B2F9F39C /* Pods-MAPS.ME-dummy.m */, + 2C714C1ED6057F55F66C952D9B51EA2E /* Pods-MAPS.ME-frameworks.sh */, + 168C3A7E93D8CF3C57E3F8341A3EB3EC /* Pods-MAPS.ME-Info.plist */, + 7C4C1FC309C6E0B70A69EA4E24109911 /* Pods-MAPS.ME-umbrella.h */, + AD22552D86A03AE913DDD7A621104FE1 /* Pods-MAPS.ME.debug.xcconfig */, + 7B18D7A9D7727350A4FDE2701818D0B7 /* Pods-MAPS.ME.production full.xcconfig */, + B0A3006B64B76811C9F555532CFEDAC2 /* Pods-MAPS.ME.release.xcconfig */, + ); + name = "Pods-MAPS.ME"; + path = "Target Support Files/Pods-MAPS.ME"; + sourceTree = ""; + }; + 030995B3FC59D31D8D622E27E5D5835D /* Support Files */ = { + isa = PBXGroup; + children = ( + 7B6A85F169B6A9D24AAE9014DE53A166 /* AppsFlyerFramework.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/AppsFlyerFramework"; + sourceTree = ""; + }; + 151BC55C1FB8D733B891963E704519D5 /* Products */ = { + isa = PBXGroup; + children = ( + 3831565C24953AA1BC757003002F8091 /* ActionSheetPicker_3_0.framework */, + 80A976D787E1C409A9419E72936C6F6D /* Bolts.framework */, + 55AF246447E3B4C5470632BD6B990168 /* FBSDKCoreKit.framework */, + A55C0068BBBE309BB7C5C44E0E9292D9 /* FBSDKLoginKit.framework */, + FFE39CF5CA53503CBF529A3390C2CD1C /* Pods_MAPS_ME.framework */, + ); + name = Products; + sourceTree = ""; + }; + 1E2DB2F26B3FFB9ABE0BB0B1BEE3EEF4 /* Bolts */ = { + isa = PBXGroup; + children = ( + 77F99EF2B1DDFCDF7A2F25534DE6D5D6 /* AppLinks */, + 3C3647EDA43771D98FB6EE7BA880D094 /* Support Files */, + DE7E5B567525FD9500D5F27CA7D807DC /* Tasks */, + ); + name = Bolts; + path = Bolts; + sourceTree = ""; + }; + 31F6070FA034E900EDB8A0FD37644343 /* AppsFlyerFramework */ = { + isa = PBXGroup; + children = ( + EEAC2AB298525FB0DD6800D9A0564525 /* Frameworks */, + 030995B3FC59D31D8D622E27E5D5835D /* Support Files */, + ); + name = AppsFlyerFramework; + path = AppsFlyerFramework; + sourceTree = ""; + }; + 3C3647EDA43771D98FB6EE7BA880D094 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2C3D4FDD1C1E1B4ACB496CA63ACA6455 /* Bolts.modulemap */, + AC1EFDD1A4ACD6C26AD6E857461629DC /* Bolts.xcconfig */, + F8961E4EC5A785D18985266880734312 /* Bolts-dummy.m */, + C9E48330DEDB17419695D56BD9295BB7 /* Bolts-Info.plist */, + 74EF0840A6CC19F0523F69DCE8EEDB57 /* Bolts-prefix.pch */, + B4EF7C0639BAFB7E337431E07406505F /* Bolts-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Bolts"; + sourceTree = ""; + }; + 49C380857C26A530C88E146819A584ED /* Frameworks */ = { + isa = PBXGroup; + children = ( + 52523D0D6E8906BBC72740CA8383D87E /* Pushwoosh.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 4C4AE3F5A403DF8A2530F6BF7FC38373 /* Pods */ = { + isa = PBXGroup; + children = ( + D3EC533F6C663C7F07251CF1F995307E /* ActionSheetPicker-3.0 */, + 31F6070FA034E900EDB8A0FD37644343 /* AppsFlyerFramework */, + 1E2DB2F26B3FFB9ABE0BB0B1BEE3EEF4 /* Bolts */, + 6503F9E10E4E01F5B6C9CD9F2A3A8822 /* FBSDKCoreKit */, + A44EB128F3052248637FD02E649A2C6F /* FBSDKLoginKit */, + CB4712D94F0E84B5657FE4084EFC4BE3 /* Pushwoosh */, + ); + name = Pods; + sourceTree = ""; + }; + 6503F9E10E4E01F5B6C9CD9F2A3A8822 /* FBSDKCoreKit */ = { + isa = PBXGroup; + children = ( + 8EC3404CFFA9CF86D01E85896A3D2D76 /* _FBSDKTemporaryErrorRecoveryAttempter.h */, + 2373F71DDE61FE3D5075F0EF8A6E61E8 /* _FBSDKTemporaryErrorRecoveryAttempter.m */, + EEC811D46449AFD35151A41E6EEF0103 /* FBSDKAccessToken.h */, + EA7E65CB75610FCCB534AF3DC36E6632 /* FBSDKAccessToken.m */, + 7800622A0913B4D341E7F9BA1DD8C1D3 /* FBSDKAccessTokenCache.h */, + 32F632D24D99D0060769BB52A046B5F4 /* FBSDKAccessTokenCache.m */, + E53725F9922256640F815FAC2B8CBF26 /* FBSDKAccessTokenCacheV3.h */, + 827BA6755E09F441C4866FE4D2006F1F /* FBSDKAccessTokenCacheV3.m */, + 911F65347EDB02D9BE193670D71F57EA /* FBSDKAccessTokenCacheV3_17.h */, + 26165DF7D809C93DC074433258549883 /* FBSDKAccessTokenCacheV3_17.m */, + 14E092CA2AE29397CAE4D60C3CD96333 /* FBSDKAccessTokenCacheV3_21.h */, + 97731C9828665FA46D7CAFB5ED483F32 /* FBSDKAccessTokenCacheV3_21.m */, + 219B9D5BDA16E3D01CA7444387DA6AF0 /* FBSDKAccessTokenCacheV4.h */, + 13A8CBF8CC6BEB063E2FE79ECAB58935 /* FBSDKAccessTokenCacheV4.m */, + 4D243F024EF97A377FA7185517801413 /* FBSDKAccessTokenCaching.h */, + 6013EDF181F7814A34202FD701D30297 /* FBSDKAccessTokenExpirer.h */, + FFE153C4FD6D8E9644BEC3DCD35DD394 /* FBSDKAccessTokenExpirer.m */, + 30550597C7B73B85C22D7F484C650334 /* FBSDKAppEvents.h */, + 41FF50E9463711E495A391847EF7AB8A /* FBSDKAppEvents.m */, + 69F09C464664DA506E5F815B6D81D8CF /* FBSDKAppEvents+Internal.h */, + 3F5EECAC2543E0818C9A08F972818614 /* FBSDKAppEventsDeviceInfo.h */, + 7C27589E176D7A03FD59165039C9C81B /* FBSDKAppEventsDeviceInfo.m */, + 0E3B5CEF30DBBE2410C40E5F55CEB980 /* FBSDKAppEventsState.h */, + AA890B95BAAF26BEC5390EAB9B6CF319 /* FBSDKAppEventsState.m */, + 997B82DBFB6E8D3DABA5B8B6B1C1294C /* FBSDKAppEventsStateManager.h */, + 76B396156F6A7F9464E6E269E2735405 /* FBSDKAppEventsStateManager.m */, + 5F62080B06AB79B8BE3572FBC33152E2 /* FBSDKAppEventsUtility.h */, + 937B40C0611B0F417CBC17EB3DB58BBB /* FBSDKAppEventsUtility.m */, + C0B06BC7040B7FEEF8DBCE8BCD1C39BC /* FBSDKApplicationDelegate.h */, + 16D49EDE2D1FA5E335F563DC5E5587EA /* FBSDKApplicationDelegate.m */, + 94575A01EB6BF8EC2F29F424861E9FC8 /* FBSDKApplicationDelegate+Internal.h */, + 409A923F70B0917394727B9168E892BA /* FBSDKApplicationObserving.h */, + A6FC7265FBE18D31F978C009C85E80A5 /* FBSDKAppLink.h */, + 66C6336DA0FD17FA2763231EEBD257A0 /* FBSDKAppLink.m */, + 37E7E9684CACC5CF3D2561A3F9CE7F43 /* FBSDKAppLink_Internal.h */, + 09941671BA6DE586358CBF53B7690D1A /* FBSDKAppLinkNavigation.h */, + 2C133772B1806C3FC04EF459E712A53D /* FBSDKAppLinkNavigation.m */, + D50127072C993F42409BF6F6FE32101E /* FBSDKAppLinkResolver.h */, + 5A3857E10D78E66AA1BE24443D598199 /* FBSDKAppLinkResolver.m */, + C4EA2DED691103287EEEFF8272C0CD82 /* FBSDKAppLinkResolving.h */, + FABD3E5B1026611A3909CA4ACA5A5B2A /* FBSDKAppLinkReturnToRefererController.h */, + DAAE56E9869D289609E52157E33E908A /* FBSDKAppLinkReturnToRefererController.m */, + A1B9EFCFC4938A13C8CEECBFFDD0784F /* FBSDKAppLinkReturnToRefererView.h */, + 65A11A721C262AB777990570E09BF915 /* FBSDKAppLinkReturnToRefererView.m */, + 5EE4073F1FF5506A064C3312D2BFB7D4 /* FBSDKAppLinkReturnToRefererView_Internal.h */, + 0FD2831D912D7E5599FE3E61C887D754 /* FBSDKAppLinkTarget.h */, + E5588D94D52332D9BB779D37EDE486B7 /* FBSDKAppLinkTarget.m */, + 569AD8380636D022B129F024A6027258 /* FBSDKAppLinkUtility.h */, + 10117BE40260B7A990DA5A9ACDF601AA /* FBSDKAppLinkUtility.m */, + 6E09A5F42AE4CD0C33087D6EAE026265 /* FBSDKAudioResourceLoader.h */, + 283F446B7617CD86E47150E7B94CB8FE /* FBSDKAudioResourceLoader.m */, + AA52A813C60EB939A325CA4651B6C85D /* FBSDKBase64.h */, + C1290C6E9B4D65AB127501F164461D3A /* FBSDKBase64.m */, + 5D53018EBDAAB8718BD2D00D89E53E10 /* FBSDKBoltsMeasurementEventListener.h */, + 556F88B694E03BCEC7CB9AB6E4D2222F /* FBSDKBoltsMeasurementEventListener.m */, + E158DA7063F1035B34171843CD6FD071 /* FBSDKBridgeAPI.h */, + 84506500D99E43DF1740CADEECC86CAA /* FBSDKBridgeAPI.m */, + 606959428054A2A3F109336975433B22 /* FBSDKBridgeAPICrypto.h */, + 63E91A75CD8CC7BB4C2D8AD1C5211B74 /* FBSDKBridgeAPICrypto.m */, + 1B3D2AB06A4E4B1752048CA3CD06F0FD /* FBSDKBridgeAPIProtocol.h */, + 10491C97615A25AC11D8513E58ADDE22 /* FBSDKBridgeAPIProtocolNativeV1.h */, + 52BD726A8148305607B1A9BCB39FFE06 /* FBSDKBridgeAPIProtocolNativeV1.m */, + 2C7B0187F4AC9ED8726C0F2A7DFF8150 /* FBSDKBridgeAPIProtocolType.h */, + 40DF7EC0D7E58DFBE91210BE69EC23BE /* FBSDKBridgeAPIProtocolWebV1.h */, + 26DD2EF4A6E8BAEFD67ECCB96B6BCE9C /* FBSDKBridgeAPIProtocolWebV1.m */, + 3BDE07CBF9C7B0D784C23859255F6073 /* FBSDKBridgeAPIProtocolWebV2.h */, + E22747A08AF1288EFAFE00E99C7D3C3F /* FBSDKBridgeAPIProtocolWebV2.m */, + 49C3F0F49FA79793B0D451BEA10B2F6F /* FBSDKBridgeAPIRequest.h */, + 73EA6A58FBCCB932419773C521432CCE /* FBSDKBridgeAPIRequest.m */, + 36099C8F5D272B952E8EC6E7A37462BD /* FBSDKBridgeAPIRequest+Private.h */, + D4B751E56CAA5E9AB448346C596B7E8A /* FBSDKBridgeAPIResponse.h */, + ED95C6722CB4CBED05DB13DB6570B9FC /* FBSDKBridgeAPIResponse.m */, + 297FA42D6FBDB5786452DD9ADD8590B0 /* FBSDKButton.h */, + F10A5BAE8D0A3CE8303169710F7E80C2 /* FBSDKButton.m */, + 8241BD96C9868C6E76A3DA9004372F06 /* FBSDKButton+Subclass.h */, + AB66D2209080CE07C727E8EEB50C2BDA /* FBSDKCloseIcon.h */, + 370B7512967BA75C02A013FF324177A0 /* FBSDKCloseIcon.m */, + CAA69DB2945C5C32B860C623485A7E2C /* FBSDKCodelessIndexer.h */, + 284114C1E6DAF45DBE1038E104F1EC3E /* FBSDKCodelessIndexer.m */, + B1F99E3A78E6BD521678A09B3B2E64B3 /* FBSDKCodelessMacros.h */, + 49B99398062E741A3D69FDF7F8B16B93 /* FBSDKCodelessParameterComponent.h */, + 55A828E7BCA5B125D98B9D1BA469CF34 /* FBSDKCodelessParameterComponent.m */, + 128DDE4AC9A1E340948EC71FFB494A11 /* FBSDKCodelessPathComponent.h */, + 2D6914C566D251A55EEFAA417D6A836E /* FBSDKCodelessPathComponent.m */, + 1AA6065F1465E98292976D3231F4E484 /* FBSDKColor.h */, + A78324EA7507D96D76AE5B6915C5A653 /* FBSDKColor.m */, + 6DFC316632CCC90C5752D83D10585BC8 /* FBSDKConstants.h */, + 4B169E8A0D902175976E6228FBEC85F8 /* FBSDKConstants.m */, + 654F7F3D16AF8C21D1B228322F82B27F /* FBSDKContainerViewController.h */, + 00F04020A0AE59FDD5A2729E498AF368 /* FBSDKContainerViewController.m */, + 10AA0212B7EEFBCD4AD54D69B620C445 /* FBSDKCopying.h */, + EE2157AC8D0F90AE03BEC1C12E81C838 /* FBSDKCoreKit.h */, + E7CAA9FAF82142B31152F69C021D648A /* FBSDKCoreKit+Internal.h */, + E1DE2D79A361ECBA92D970FFC7DE1518 /* FBSDKCrypto.h */, + CC589219C128FC872E343E74CBFB945B /* FBSDKCrypto.m */, + 625891336096DE020A2C72E0C0E1D1AF /* FBSDKDeviceRequestsHelper.h */, + FDD154F1898BB26E16D70F6BB2C43BA5 /* FBSDKDeviceRequestsHelper.m */, + A8AEFC54AC54ED030BC4E324762BDAEE /* FBSDKDialogConfiguration.h */, + 3C43A97884BAA96BF06C3BCADE681A9B /* FBSDKDialogConfiguration.m */, + 65625F63721323CD8FA3FCDE1F6D84E2 /* FBSDKDynamicFrameworkLoader.h */, + 8BED41C9F3919D4C10585F2D0B5B719A /* FBSDKDynamicFrameworkLoader.m */, + CB81C3F12580E545869CEA501861ED32 /* FBSDKError.h */, + 3989F572C0F73EE84A32F4BCE28FE20E /* FBSDKError.m */, + 953F7B09BBCFB6CE7A860F52E077F7A1 /* FBSDKErrorConfiguration.h */, + 2ABCF80F642A5943A696E4B0ABAC4A2D /* FBSDKErrorConfiguration.m */, + 9F4CA5395DABE0AE1D7CCD49120F070D /* FBSDKErrorRecoveryAttempter.h */, + 23D8CB4E13798A5E39105295A333551B /* FBSDKErrorRecoveryAttempter.m */, + 226D38AF5F8B140FD05AFD60E90472E1 /* FBSDKErrorRecoveryConfiguration.h */, + C98179269BA85865DF3984FE44C2795F /* FBSDKErrorRecoveryConfiguration.m */, + 82E8237FD822EE38613A7D9D445F9E1F /* FBSDKEventBinding.h */, + 354F01B5AD19F6D9DE4294BAB84ED787 /* FBSDKEventBinding.m */, + 84423BF1361CC6D8ED67EF86D1937464 /* FBSDKEventBindingManager.h */, + 366F20C24FA930BC7305CFE298C566E7 /* FBSDKEventBindingManager.m */, + 24B6FD058296AB724F92904FA38F7B28 /* FBSDKGateKeeperManager.h */, + 3EB9E1D5BCC7EDCBBD3F19267FF7B894 /* FBSDKGateKeeperManager.m */, + 46067ADDB6B2890FE414FFEDCD01BE24 /* FBSDKGraphErrorRecoveryProcessor.h */, + BC2EC8AE0C467498151AA5ABFD2512B2 /* FBSDKGraphErrorRecoveryProcessor.m */, + 1A0C6E871715CE90C5F19CCC32B64B95 /* FBSDKGraphRequest.h */, + 0151391679D109E928C1D43477F5920E /* FBSDKGraphRequest.m */, + 8FAB6DDE6665B719F329627C936C8D93 /* FBSDKGraphRequest+Internal.h */, + 28C51E095CF12E83792C2AD90BBECB48 /* FBSDKGraphRequestBody.h */, + 6C2F21330F0D55875466873D329350F8 /* FBSDKGraphRequestBody.m */, + FD29AFC7900D19074E1F809228552B7D /* FBSDKGraphRequestConnection.h */, + 4FBF08C2477D0A863C2E46B4785DBEF9 /* FBSDKGraphRequestConnection.m */, + 6B2B749671D33A85590560B59BF24416 /* FBSDKGraphRequestConnection+Internal.h */, + 1B06CD3C1ECA5339B1148E9AFDF62BCB /* FBSDKGraphRequestDataAttachment.h */, + D8275E0B0EABFF01FBC45E9F87E344DC /* FBSDKGraphRequestDataAttachment.m */, + 2734CCCA5E08ABF04FA6580FF76CF376 /* FBSDKGraphRequestMetadata.h */, + B14CEBA829519E9627C159925FF88F7A /* FBSDKGraphRequestMetadata.m */, + 08DA78264F475E68CF8BC67AB194C023 /* FBSDKGraphRequestPiggybackManager.h */, + BEF2227F9EDA813A7C475C0A19861054 /* FBSDKGraphRequestPiggybackManager.m */, + 7A5BA29CA01F9C53055A9F546C0275F9 /* FBSDKHybridAppEventsScriptMessageHandler.h */, + 65E2624E8579D80DDE0525AB259D0E5F /* FBSDKHybridAppEventsScriptMessageHandler.m */, + 0EBB25F009A33A0C3C1D67C97906DD32 /* FBSDKIcon.h */, + 74A9930C1D7A1AA9B2436EF3AD52F913 /* FBSDKIcon.m */, + 1709E15109BB16F3763C3D39907C9821 /* FBSDKImageDownloader.h */, + 63A4ED8B0ABD42E7AB34D20DFA67CF8B /* FBSDKImageDownloader.m */, + 0948D3E3933218AD0A0F3AF2BC79D9A8 /* FBSDKInternalUtility.h */, + 37B484032C63D9B88B5FA30EA4C37B02 /* FBSDKInternalUtility.m */, + C7D19FE4452DE832F8EA22235DCA08A3 /* FBSDKKeychainStore.h */, + A2524F04A4795064C82B7EB45DD5EF0C /* FBSDKKeychainStore.m */, + 245AA3E71AE207A3B0E1A2813152E02B /* FBSDKKeychainStoreViaBundleID.h */, + 06EBA8F289B47E5BAECCEECD375EA028 /* FBSDKKeychainStoreViaBundleID.m */, + D5F3F796CC08CE4630684E734B578B3B /* FBSDKLogger.h */, + 6972F211CE75952E3AF8FED7735197EC /* FBSDKLogger.m */, + DA26F12078F209BB979B9654B7BCEC66 /* FBSDKLogo.h */, + DCB09787E3A9718D992D3468B2212B28 /* FBSDKLogo.m */, + 489CDF339EF9B92E3E56A9C962C5B095 /* FBSDKMacros.h */, + 33A9556D4B8B268ADC318BE07E97EBA3 /* FBSDKMaleSilhouetteIcon.h */, + 886AB37C4A5B9DB83C856FBF832645FF /* FBSDKMaleSilhouetteIcon.m */, + D924DDBCBB652F4A19756657681E5565 /* FBSDKMath.h */, + D068BE85851CA0BEB9E3CAE43A5F82CA /* FBSDKMath.m */, + 7E077C836E17156EE07AA743FCC6D02F /* FBSDKMeasurementEvent.h */, + 1247C95C75601F1C0280C6DA0F963384 /* FBSDKMeasurementEvent.m */, + 90CC1348DC26E425A075A74D260C40B4 /* FBSDKMeasurementEvent_Internal.h */, + CB3A33D569D79F70BC14257E9212B7AF /* FBSDKMonotonicTime.h */, + D5E815DFA3213ED9A38531D38874219F /* FBSDKMonotonicTime.m */, + 049240B656A3EB481D6C6868E06D166B /* FBSDKMutableCopying.h */, + FC351EF044DE2F5989BBB68076710059 /* FBSDKPaymentObserver.h */, + 1832C45982600120D4A8C2F9CC4ED618 /* FBSDKPaymentObserver.m */, + 4B06844304E3E581AF74B5FBBD35394F /* FBSDKProfile.h */, + A12CE30673DA3C2A0511A5EB326189C5 /* FBSDKProfile.m */, + 7B56E8666BD40B61E4290D9FCFD396DD /* FBSDKProfile+Internal.h */, + 505E5F104D466EAF3C60003033F0BB34 /* FBSDKProfilePictureView.h */, + 60B86E97AF59D419113382650B080015 /* FBSDKProfilePictureView.m */, + 64344FE8ABEBE0C396B8038FFF881E35 /* FBSDKServerConfiguration.h */, + 32F26AC3B25844644BCE71223EEFD98A /* FBSDKServerConfiguration.m */, + B53885BD6BEB7B9F0961BF4F47D2CFE8 /* FBSDKServerConfiguration+Internal.h */, + 94FC8548DC462698726CE70757D0CA2F /* FBSDKServerConfigurationManager.h */, + E3D80F97B0FCDAF349EC03A2128168A7 /* FBSDKServerConfigurationManager.m */, + FA1E45E61D35535E9BE674C2A73F289E /* FBSDKServerConfigurationManager+Internal.h */, + 8BA28C04515EACA48FE0AB49963EDDEF /* FBSDKSettings.h */, + 106AB17E3EA072EBD0E7297C9D0963C4 /* FBSDKSettings.m */, + 9D880B113709C73B9E0E23BDB9F893A6 /* FBSDKSettings+Internal.h */, + FFDFF54406EA421D1E0EDA7D57CAF380 /* FBSDKSwizzler.h */, + BBDE1D5C729107CBEEAD3B84A5E4C518 /* FBSDKSwizzler.m */, + E5142391F374EE911B89F202FB2ED401 /* FBSDKSystemAccountStoreAdapter.h */, + C4DC38204553780BE926E3B1A2B5DEF7 /* FBSDKSystemAccountStoreAdapter.m */, + 343A25E11F5B5AD1677ECDF7FB2DD473 /* FBSDKTestUsersManager.h */, + 1A47EC1D0404C60C2D79718FEF66452E /* FBSDKTestUsersManager.m */, + 98A483DD41E81A22DDD5B500475CEA8F /* FBSDKTimeSpentData.h */, + D43870183BE1294CF94F0B9FE91B377C /* FBSDKTimeSpentData.m */, + D11B4649B82A725E4610A0B270C7624D /* FBSDKTriStateBOOL.h */, + EB7C4C4F613A3F72F139B13408256262 /* FBSDKTriStateBOOL.m */, + DA542D9A8FAFAA9C1C4AA575C714D629 /* FBSDKTypeUtility.h */, + CF70E08FAD9C95686A6FD6D495C6D3E0 /* FBSDKTypeUtility.m */, + C5701C075B79C36FE1C3A4A47480F29D /* FBSDKUIUtility.h */, + 0F0CF3FB705ECCDE142C46BB87EA62BD /* FBSDKURL.h */, + 5D8F01AC08B7F25F8FED21D8287AA23E /* FBSDKURL.m */, + 2AF69B80B2E3C76389F9D25681FD7C63 /* FBSDKURL_Internal.h */, + 233EB1B490DAAB45661DD070EF24DA3A /* FBSDKURLOpening.h */, + F23ED63F117550D4F8618B020D711995 /* FBSDKURLSessionTask.h */, + 366E2725AF2F56B7D16DE007003A1F26 /* FBSDKURLSessionTask.m */, + E6B15EDF4AC5EFF096F6CB3306683706 /* FBSDKUserDataStore.h */, + E97E00F381A51627081631960D82D5C4 /* FBSDKUserDataStore.m */, + 5A984B41AA4783FD394B8A45FF11A79E /* FBSDKUtility.h */, + 0874C0488C8451A6B9634A704AFC4D0C /* FBSDKUtility.m */, + F3472270CFDC48FF5F8D6F894C7AA5AE /* FBSDKViewHierarchy.h */, + F3B89FFE8B1F9F336125E4C89A00956A /* FBSDKViewHierarchy.m */, + A47206A49E0313CCE2C3F5AC068C126B /* FBSDKViewImpressionTracker.h */, + 1DB0266C81E8B89BE01AA4C3EE71BBE9 /* FBSDKViewImpressionTracker.m */, + FFCDFF10DAC812E47587DF71C683FC70 /* FBSDKWebDialog.h */, + 0E78F8C26D8FC2B6A0263F341508A9D6 /* FBSDKWebDialog.m */, + 128165CE6EA850C1FD749960B8F30A39 /* FBSDKWebDialogView.h */, + 91DA8811FAC26A49A6B6A33ADDA076E9 /* FBSDKWebDialogView.m */, + ACD86C38E46FAFCAAB13869766C9C77C /* FBSDKWebViewAppLinkResolver.h */, + 3EF531283417FB7F4585FD257A844E04 /* FBSDKWebViewAppLinkResolver.m */, + A45C8169EA25C6F5EE52FC3F79FD2969 /* Resources */, + 7ABE17490640EB9E75AC99DBC6712F3D /* Support Files */, + ); + name = FBSDKCoreKit; + path = FBSDKCoreKit; + sourceTree = ""; + }; + 728D7914EE782560420398DFE7D06209 /* iOS */ = { + isa = PBXGroup; + children = ( + ED635F35B70DA7C626200C7E1CF841BE /* Foundation.framework */, + 37CF1DD020CCAD7E687BE1700EF0BBE5 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 77F99EF2B1DDFCDF7A2F25534DE6D5D6 /* AppLinks */ = { + isa = PBXGroup; + children = ( + FB7F8BB6FB48A164C8B12A7D2530DDDB /* BFAppLink.h */, + 6F08FBE811C27F612A8A3C14CC02ED38 /* BFAppLink.m */, + 01878201FB3576225EE82027791B1197 /* BFAppLink_Internal.h */, + D514150BD825EA8705813AF292546355 /* BFAppLinkNavigation.h */, + 5629209B6FC8EE4E4A0B6426939E45D4 /* BFAppLinkNavigation.m */, + 7544973673FD9F19FB5AEDE0B570CD1C /* BFAppLinkResolving.h */, + 8BFA16EC0105B73CA2998C24BA97F29B /* BFAppLinkReturnToRefererController.h */, + 8B0780172E95A7228F400F2E98BD0091 /* BFAppLinkReturnToRefererController.m */, + 6AA6F8D08CF2257E4C28D8F1B639C0E1 /* BFAppLinkReturnToRefererView.h */, + A6DFE5E9654AF7A2DCF4B304AE42AFB8 /* BFAppLinkReturnToRefererView.m */, + 5E04F24CF8B46516E6C964BF68083C22 /* BFAppLinkReturnToRefererView_Internal.h */, + 5DD4B0708BA6E5ED45276428E7194021 /* BFAppLinkTarget.h */, + B3BBA670C2F885C3E5ED8C403698FFB0 /* BFAppLinkTarget.m */, + 3A304021137125635947AAFEA9150F5E /* BFMeasurementEvent.h */, + 53416AEB99C4D9CC57B340BA460E86F5 /* BFMeasurementEvent.m */, + C8B1AFF6B34D15D6984FBA231976B833 /* BFMeasurementEvent_Internal.h */, + 673100001490CB1B3696D6083060E59C /* BFURL.h */, + 78430C5C81DB8A18233B28F3AA4AC91D /* BFURL.m */, + 89BC36198072F3B1C8FD3E52C9C2C2A1 /* BFURL_Internal.h */, + 9ACA1AD937A6C119920E5932148DF77A /* BFWebViewAppLinkResolver.h */, + 3CB515EA5B403B27658DC22B82046CE0 /* BFWebViewAppLinkResolver.m */, + ); + name = AppLinks; + sourceTree = ""; + }; + 7ABE17490640EB9E75AC99DBC6712F3D /* Support Files */ = { + isa = PBXGroup; + children = ( + D0A6622C9107C6A26E3BC14D53BEDB15 /* FBSDKCoreKit.modulemap */, + C5C531CBE54BED6D99BC7D0524D4B815 /* FBSDKCoreKit.xcconfig */, + AAE0D8B45DE7B6A68947444E93AFAB33 /* FBSDKCoreKit-dummy.m */, + 8EFDE53D17ECE7F5302E2FC6EF469A19 /* FBSDKCoreKit-Info.plist */, + DBAE6DE2D162F7F8F9A2D9B56B81B9CA /* FBSDKCoreKit-prefix.pch */, + 91A066593CB57319C1C84843BF2CCBE9 /* FBSDKCoreKit-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/FBSDKCoreKit"; + sourceTree = ""; + }; + A3AEA15A8E21CBB82F209C398F1657F8 /* Support Files */ = { + isa = PBXGroup; + children = ( + CF37449CD930DA1810A99999215AE6E8 /* Pushwoosh.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Pushwoosh"; + sourceTree = ""; + }; + A44EB128F3052248637FD02E649A2C6F /* FBSDKLoginKit */ = { + isa = PBXGroup; + children = ( + 4ACC420E980787C480D02CFA88F3ADA3 /* _FBSDKLoginRecoveryAttempter.h */, + 059ADE3B6E7551A0A396E6D28A00CE2C /* _FBSDKLoginRecoveryAttempter.m */, + CE17C43112EE4C57F9BD1F7F32A98590 /* FBSDKDeviceLoginCodeInfo.h */, + 680D4A8F01292F4D92DFE9BB5969455E /* FBSDKDeviceLoginCodeInfo.m */, + C5EC7842BB820F991A3CBAA92C38B148 /* FBSDKDeviceLoginCodeInfo+Internal.h */, + 46474CD6748E50D84D8BFEA57406851D /* FBSDKDeviceLoginManager.h */, + DAE48A67930DC88473D2A522CC776EA5 /* FBSDKDeviceLoginManager.m */, + 72FBE1484BA24B1335B9AF160C6A7BBA /* FBSDKDeviceLoginManagerResult.h */, + DBFF221474767A561253D03648F0A226 /* FBSDKDeviceLoginManagerResult.m */, + 6D7C7FB160F80CBAC45A6950852D8103 /* FBSDKDeviceLoginManagerResult+Internal.h */, + 1886A29257CD3C76A4994AB179562BF9 /* FBSDKLoginButton.h */, + F8DD09C5C20CA2D676942AC8AE8F712A /* FBSDKLoginButton.m */, + DA7F946A654AEFDDD07C93AE24B1794D /* FBSDKLoginCompletion.h */, + B92E8F974EB838E561ED0FA3B3FAF08D /* FBSDKLoginCompletion.m */, + FE551455685414EA71E8AFBCCDF0EF4E /* FBSDKLoginCompletion+Internal.h */, + EAA72319AC39F91580408B4FC967201F /* FBSDKLoginConstants.h */, + 218F53C4F3854CD087C0C0A6D8306C2A /* FBSDKLoginConstants.m */, + 80FF9842E437C57C930E867CFC801EEC /* FBSDKLoginError.h */, + 944DDFC5D11510FD899ED546259F40B4 /* FBSDKLoginError.m */, + D9E7124360178F1CF4A63DE69AF14E57 /* FBSDKLoginKit.h */, + 6F42BE789BB47A2138DE866481943B20 /* FBSDKLoginKit+Internal.h */, + DD573AD5F074197FD07CA0856FB81B67 /* FBSDKLoginManager.h */, + 93720A9C4341F4E1616392A07A7F1761 /* FBSDKLoginManager.m */, + CF56D25BAE233004E3CD09ED36E2DFC6 /* FBSDKLoginManager+Internal.h */, + BC83D95960C6CAFBC6849FA7373A63AD /* FBSDKLoginManagerLogger.h */, + 4A15B0A7BC40DEB7D045982844E9BC44 /* FBSDKLoginManagerLogger.m */, + D95201A0A17FAE6F0B804370690A73DE /* FBSDKLoginManagerLoginResult.h */, + 5BA4C3E6DBFA8E8BBC56E7D2CD7D50A0 /* FBSDKLoginManagerLoginResult.m */, + 7FE66A2D321AB26489E3F9F96B83DE75 /* FBSDKLoginManagerLoginResult+Internal.h */, + 118F77D3E1BBD540B94FAAB7B7B25B9A /* FBSDKLoginTooltipView.h */, + 2BD11C72BC0DC5CE7761E396C27FBC01 /* FBSDKLoginTooltipView.m */, + 07F09DE8D7BDC85E518FB2B93373E645 /* FBSDKLoginUtility.h */, + A921967D737D38E4B1C08A1308910BDE /* FBSDKLoginUtility.m */, + AA598B86D44B7FD68D6574C88FC944A0 /* FBSDKTooltipView.h */, + 23809299B5FB13CE35B0B911DFF5E8BD /* FBSDKTooltipView.m */, + E54AC160FD5A8B736A1809437BE1E5E7 /* Support Files */, + ); + name = FBSDKLoginKit; + path = FBSDKLoginKit; + sourceTree = ""; + }; + A45C8169EA25C6F5EE52FC3F79FD2969 /* Resources */ = { + isa = PBXGroup; + children = ( + C14D01E835CDB9CBE4672170A97FC2BB /* FacebookSDKStrings.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + A63A2B447009A5A97C0662CF8AE39BD1 /* Support Files */ = { + isa = PBXGroup; + children = ( + F679678E496274C86DA2789705DD9275 /* ActionSheetPicker-3.0.modulemap */, + A691756115AFFC0FE1C0666BAE413CC5 /* ActionSheetPicker-3.0.xcconfig */, + C769B45EF946AAEA6D08EBD2C9E9F51B /* ActionSheetPicker-3.0-dummy.m */, + 2D0C54765DC0B21E2071A0DF64BBC534 /* ActionSheetPicker-3.0-Info.plist */, + C3BAD223DB4A025F06DEC2CE96A34772 /* ActionSheetPicker-3.0-prefix.pch */, + 55A97F470802D9B6B09063BE87CD1316 /* ActionSheetPicker-3.0-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/ActionSheetPicker-3.0"; + sourceTree = ""; + }; + B9F6EDD484558527B39B506C34B424E3 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9D4FADF73BFAE70F109F1A0637BA6876 /* Bolts.framework */, + EBC1F5CE43471967DCE5BBBC718605AB /* FBSDKCoreKit.framework */, + 728D7914EE782560420398DFE7D06209 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + BDE0D5FDCD80D5FC2D88642960D810F9 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 0069C7BFD86D441D85FEBB4290ECB47F /* Pods-MAPS.ME */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + CB4712D94F0E84B5657FE4084EFC4BE3 /* Pushwoosh */ = { + isa = PBXGroup; + children = ( + 49C380857C26A530C88E146819A584ED /* Frameworks */, + A3AEA15A8E21CBB82F209C398F1657F8 /* Support Files */, + ); + name = Pushwoosh; + path = Pushwoosh; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + B9F6EDD484558527B39B506C34B424E3 /* Frameworks */, + 4C4AE3F5A403DF8A2530F6BF7FC38373 /* Pods */, + 151BC55C1FB8D733B891963E704519D5 /* Products */, + BDE0D5FDCD80D5FC2D88642960D810F9 /* Targets Support Files */, + ); + sourceTree = ""; + }; + D3EC533F6C663C7F07251CF1F995307E /* ActionSheetPicker-3.0 */ = { + isa = PBXGroup; + children = ( + F07C2BA696DD225046A9D7FD83446B76 /* AbstractActionSheetPicker.h */, + 283C5165B8874B683ED2911585297B02 /* AbstractActionSheetPicker.m */, + C7F09C50F3B4BFCB93D28ABFFB861E93 /* ActionSheetCustomPicker.h */, + 3D577BE1F6FC56DEB1362D3ED5ACEF40 /* ActionSheetCustomPicker.m */, + DABF448158B0F0239097079C5853060C /* ActionSheetCustomPickerDelegate.h */, + 6331C263691739C3C3EED352D702600D /* ActionSheetDatePicker.h */, + 8F774FB409773EFCC1EDC7310A7C5AE4 /* ActionSheetDatePicker.m */, + AB16DBDEEB648EEA7620CEF72A35F9BB /* ActionSheetDistancePicker.h */, + 9D4F1770EC3FA2312196667E137CCB89 /* ActionSheetDistancePicker.m */, + FCC82708831361AE78AA946ABE8BD539 /* ActionSheetLocalePicker.h */, + 2435DBDA6753B8E1CB5D2B2AAEB8CE58 /* ActionSheetLocalePicker.m */, + D1AC9823949E800367F15A7228B95B75 /* ActionSheetMultipleStringPicker.h */, + 543EE49034EFFF775ECEBE8BC5724E7B /* ActionSheetMultipleStringPicker.m */, + 719F98A5A6E294F412E15A64339010F7 /* ActionSheetPicker.h */, + 3DE644F5C7029C1072D0CB81FB01FE42 /* ActionSheetStringPicker.h */, + D5CFBAB8D8F7ED949AE09BB51BD73449 /* ActionSheetStringPicker.m */, + 610EF5BE33965B15FAB91B3892C81D8B /* DistancePickerView.h */, + 8FE127178CA122E699E4368D0CF1AF48 /* DistancePickerView.m */, + 3AD3E0646B3D4C3B2880FFAA11FAAFDE /* SWActionSheet.h */, + 1B0BD855A61C31AF83272F115F6050FF /* SWActionSheet.m */, + A63A2B447009A5A97C0662CF8AE39BD1 /* Support Files */, + ); + name = "ActionSheetPicker-3.0"; + path = "ActionSheetPicker-3.0"; + sourceTree = ""; + }; + DE7E5B567525FD9500D5F27CA7D807DC /* Tasks */ = { + isa = PBXGroup; + children = ( + 5B45CD944FA49268F72373EDFA99E3F0 /* BFCancellationToken.h */, + E22D5681BEA92F26CFCA6F286316C8A7 /* BFCancellationToken.m */, + F11BB0AFEA2E669C9774F1212A021ABB /* BFCancellationTokenRegistration.h */, + 1A60E6613C3082CF963A52311937E694 /* BFCancellationTokenRegistration.m */, + 4D1BDC6CE38FCAB954323E59FCD3C10D /* BFCancellationTokenSource.h */, + 088C49767334386E2EAA774FE20679E2 /* BFCancellationTokenSource.m */, + A93E6DDAB061778D66DB56D43F7213A8 /* BFExecutor.h */, + A57339C8BE06038F4BA6C36075500A12 /* BFExecutor.m */, + 00BF07AC71F791F7EB60BD6A1E6792D4 /* BFGeneric.h */, + CB87FEF69C043BF34C033AC4AFA1D59A /* BFTask.h */, + BF274C5D73C6EB58B1C8351D44035C07 /* BFTask.m */, + FBD6B43D2E5081D9407F8D0A67C16F20 /* BFTaskCompletionSource.h */, + 57B1A7EF266E5A2FA16B2077C33C74AA /* BFTaskCompletionSource.m */, + 1168D5661DDFF3EA95C14D49E1D98A36 /* Bolts.h */, + F079E936DF52DE1F038BEB709F63B8EB /* Bolts.m */, + ); + name = Tasks; + sourceTree = ""; + }; + E54AC160FD5A8B736A1809437BE1E5E7 /* Support Files */ = { + isa = PBXGroup; + children = ( + 34766ACB915D8998C57382640F59D509 /* FBSDKLoginKit.modulemap */, + BBBD11E3A7E1306130F0A8A2D3990876 /* FBSDKLoginKit.xcconfig */, + 01A276FD8428EDCB645C91902304CFF0 /* FBSDKLoginKit-dummy.m */, + 69A75EBD9345B8E159F6838CCDE87917 /* FBSDKLoginKit-Info.plist */, + 2EC2E275802C827578EA2BCFA8586A19 /* FBSDKLoginKit-prefix.pch */, + D4F3F15354612AE3235224FFD1C03851 /* FBSDKLoginKit-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/FBSDKLoginKit"; + sourceTree = ""; + }; + EEAC2AB298525FB0DD6800D9A0564525 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D8AEB95723C0D433CB81A979706881AB /* AppsFlyerLib.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 01FD4ACA3F1225A78601A724B3D94957 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D89E2B04EDBAEAE93E32699740013A23 /* AbstractActionSheetPicker.h in Headers */, + 4DC73808000FD91BA6FD31D28C651CA9 /* ActionSheetCustomPicker.h in Headers */, + A8D87471F6D9366AC11E0C70929C263E /* ActionSheetCustomPickerDelegate.h in Headers */, + DE5A31DCB4BE43413B6C2CAD0AC54223 /* ActionSheetDatePicker.h in Headers */, + 1F408BFB714C7B69C8B0662FCBC44E7D /* ActionSheetDistancePicker.h in Headers */, + 8B1753A3C7A6377E104065636CF79B0B /* ActionSheetLocalePicker.h in Headers */, + 1F79222AEDF5302A0D2F1376F135777D /* ActionSheetMultipleStringPicker.h in Headers */, + 6DAA48F080FEBDEED2D1BD9D59C2401B /* ActionSheetPicker-3.0-umbrella.h in Headers */, + BFA1A7E41B35A6EEF12C887F42D00690 /* ActionSheetPicker.h in Headers */, + 6DB24D82741AE7A5D00FBF838284410B /* ActionSheetStringPicker.h in Headers */, + 3D9CCD3C2F8B8FE575842147DE850098 /* DistancePickerView.h in Headers */, + 9E5CE1E4B639A38FAFA86440F4D8F034 /* SWActionSheet.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9ED5B5A64CE540A8C7157CBE79ACD796 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0364CF5F9035F40042AFB2878D92B48 /* BFAppLink.h in Headers */, + 21D1719C9792C4AB4CDCFB21CC25F006 /* BFAppLink_Internal.h in Headers */, + 6B67A0928D0B1077883E01617DD52EE3 /* BFAppLinkNavigation.h in Headers */, + B4C8F0C438878E8CDCFCA9DC92476BDF /* BFAppLinkResolving.h in Headers */, + C2944E41E658B522BB40C825A60DE2F8 /* BFAppLinkReturnToRefererController.h in Headers */, + A5B8F7C5E18EB54AD17662C603B38104 /* BFAppLinkReturnToRefererView.h in Headers */, + CA1CEBE799B514D5417E22CC94CD2328 /* BFAppLinkReturnToRefererView_Internal.h in Headers */, + EED76D62C2DA81162F4EF479DB003E77 /* BFAppLinkTarget.h in Headers */, + 36E77403AC7EDCEA368ABF45674C1D55 /* BFCancellationToken.h in Headers */, + E64450ACCD3925620357A8768564DDCB /* BFCancellationTokenRegistration.h in Headers */, + 74E5FB48232BE513C24B695D4949C313 /* BFCancellationTokenSource.h in Headers */, + 74420904FDB6BD5BF8A2FE5ADF11C9B6 /* BFExecutor.h in Headers */, + 92C757E57B49074733C52CE0CE2458E5 /* BFGeneric.h in Headers */, + 32FE1220E118DF6ECFD86B3AC6349065 /* BFMeasurementEvent.h in Headers */, + 27FA3A3EDE77327D53E1EA9A75AC2C64 /* BFMeasurementEvent_Internal.h in Headers */, + 3E08B9EF82D4DEB66C4EF3D7E97AC975 /* BFTask.h in Headers */, + C0A13B3C34159B33E31B0CEDE815A302 /* BFTaskCompletionSource.h in Headers */, + F01DC48E70E3F73AB107FE6041CC0675 /* BFURL.h in Headers */, + BCBE0CD694389012268CE7D4604B6A48 /* BFURL_Internal.h in Headers */, + 48F87822E6F18C3E66ABAC4DAB16532D /* BFWebViewAppLinkResolver.h in Headers */, + D5422A9275006AB44B17410ABFE9FFB4 /* Bolts-umbrella.h in Headers */, + 81FB2DB8B2BCF8E6CF68F4D9D4EBADB6 /* Bolts.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A896A988A809DB90B55C54820ACE0E5F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 871143A3D556C04878D5E1EBCB971BFE /* _FBSDKLoginRecoveryAttempter.h in Headers */, + 46E7F4148B6DB5100E111A21EE9982C4 /* FBSDKDeviceLoginCodeInfo+Internal.h in Headers */, + DCB2E7A4109B1921C7542F27D8E4BCE1 /* FBSDKDeviceLoginCodeInfo.h in Headers */, + 60CA7FF7B61A68A2DE3DD0C737FD7A73 /* FBSDKDeviceLoginManager.h in Headers */, + E4BFCD2FBA15ADFE831EF2BD2F9234B5 /* FBSDKDeviceLoginManagerResult+Internal.h in Headers */, + 12307A8C7B7ED50B58EEFA3876779578 /* FBSDKDeviceLoginManagerResult.h in Headers */, + C06ECB66CA1947D8774AB2A73764B01B /* FBSDKLoginButton.h in Headers */, + 560B5676791022C547A8622CD6DA9C1D /* FBSDKLoginCompletion+Internal.h in Headers */, + 350938F3F19B6A6D8C4BCA827FF962D2 /* FBSDKLoginCompletion.h in Headers */, + 736666A6E2C4E1D9D77C6A956755B19C /* FBSDKLoginConstants.h in Headers */, + E5431B7875CB8472AAF152A64BA81FC3 /* FBSDKLoginError.h in Headers */, + 39336D282C8DED18E0EC3AB2A5115AD6 /* FBSDKLoginKit+Internal.h in Headers */, + 6805517216D64EF1F44BA31E8347855E /* FBSDKLoginKit-umbrella.h in Headers */, + BD0B152E3D34802036875AE77A69BBFF /* FBSDKLoginKit.h in Headers */, + DB99AC12DC3972773A8B85B95D141B89 /* FBSDKLoginManager+Internal.h in Headers */, + BCA7C16371B98312FDD58CBCE6B2142F /* FBSDKLoginManager.h in Headers */, + 8F08FC91FE71B5DB1ACCE740AAE5E2D7 /* FBSDKLoginManagerLogger.h in Headers */, + E978F1DD8602C970A845C55343F3CB54 /* FBSDKLoginManagerLoginResult+Internal.h in Headers */, + 15F163462322D19BDD05FD6A4D02DA63 /* FBSDKLoginManagerLoginResult.h in Headers */, + C8C77D2E6DAA13B16E483CB14C08589B /* FBSDKLoginTooltipView.h in Headers */, + DAEBEC4FFA71BDB56F419F25C942CF3A /* FBSDKLoginUtility.h in Headers */, + E73F5C86DADD7A307D4E2764EBB5B9E4 /* FBSDKTooltipView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BD04BBF2D76D5E5EEF1683BE2B2D67A2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA2FD5B81E455B72231B5EEA16C2DA23 /* Pods-MAPS.ME-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EF9AC7D73F302275F4F864DF884330A7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B5897AD85FC1572FFAE94CE73EB47A8A /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */, + 4874732A0A01E1D633FF84D3D3D46667 /* FBSDKAccessToken.h in Headers */, + 8ECC762DB03C45EFC0D93389CD5A2BAE /* FBSDKAccessTokenCache.h in Headers */, + 91429F12FA4784EC6F71281D57FE04E4 /* FBSDKAccessTokenCacheV3.h in Headers */, + A8EA037327241DB709F1290FA253E6EE /* FBSDKAccessTokenCacheV3_17.h in Headers */, + E4CDECD7967C2202AEEC12CBECADAEA6 /* FBSDKAccessTokenCacheV3_21.h in Headers */, + A1489709B5816B580597F81852A8DC07 /* FBSDKAccessTokenCacheV4.h in Headers */, + 3CAE35F17046D7E442B7CC72528921F9 /* FBSDKAccessTokenCaching.h in Headers */, + BF53DFFE1919B010888A62BA0F49F07D /* FBSDKAccessTokenExpirer.h in Headers */, + D00808760C7A9686FC88771D8EF7C0BA /* FBSDKAppEvents+Internal.h in Headers */, + 2F502BBD72471DDE0F1A4AADE37B318A /* FBSDKAppEvents.h in Headers */, + 566D17E02F06CE69FB37B3E8EC47F707 /* FBSDKAppEventsDeviceInfo.h in Headers */, + 8F3FFEAB9314D01B304E3955011D64A5 /* FBSDKAppEventsState.h in Headers */, + 50256954FE7A83EE52B93CC798F2B15B /* FBSDKAppEventsStateManager.h in Headers */, + D34E7077C93D236C2804A0F13C7129BB /* FBSDKAppEventsUtility.h in Headers */, + CD2D99E66B4247AC776060648BFC8C65 /* FBSDKApplicationDelegate+Internal.h in Headers */, + 42F287DC4A5F42CDD017922C239B6023 /* FBSDKApplicationDelegate.h in Headers */, + B48A8553C7849CC3A8B24509D4DEC42A /* FBSDKApplicationObserving.h in Headers */, + 7F2E5071194A2CDBFCC1152AC1C59A3E /* FBSDKAppLink.h in Headers */, + AEE366509DA4EA559E84A298E0B13E6C /* FBSDKAppLink_Internal.h in Headers */, + 7664E0CB024EA1472B5E500A9DAA7716 /* FBSDKAppLinkNavigation.h in Headers */, + 2F6842BB723B92B037545A3205CEE099 /* FBSDKAppLinkResolver.h in Headers */, + 8AB7A6910B9816B7B6838C5C9B9D5676 /* FBSDKAppLinkResolving.h in Headers */, + 9F5BFFF8CA86E94D452FB10AA8BA10A0 /* FBSDKAppLinkReturnToRefererController.h in Headers */, + B2D0C7222CAD59249FD00D141E1B95E7 /* FBSDKAppLinkReturnToRefererView.h in Headers */, + E56DA86B08EF85B0362CE90BB9B4F0B2 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */, + 5D3B0E524C59AB83B0ED2EB4AC939416 /* FBSDKAppLinkTarget.h in Headers */, + 7AE96E9003935C015358A9E7B540205E /* FBSDKAppLinkUtility.h in Headers */, + F3C77166564B1956A263AAEA7D439D5F /* FBSDKAudioResourceLoader.h in Headers */, + 46573B41F7928ACFD418536D9A6E1E3C /* FBSDKBase64.h in Headers */, + 16812CF0F0A17E07CF04D4B55F7AA887 /* FBSDKBoltsMeasurementEventListener.h in Headers */, + 7123FE3B72925F67C209E4AEA86A95B8 /* FBSDKBridgeAPI.h in Headers */, + E4F617407C954C2B0636655ADCBA1052 /* FBSDKBridgeAPICrypto.h in Headers */, + 116D57AF5F95AE3B548C516C383A7E2B /* FBSDKBridgeAPIProtocol.h in Headers */, + B1E78E195E1B766DD884A6877FD1D44F /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */, + 0928CE3A53F6D04C70BE9A8A9CCEA03D /* FBSDKBridgeAPIProtocolType.h in Headers */, + C6EB709B215E5D5B93EBD69B7EC12699 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */, + D50DCCF9D702F01127C28701C71D45F7 /* FBSDKBridgeAPIProtocolWebV2.h in Headers */, + 96A1540FA543689E483FF0C21CE0C3E3 /* FBSDKBridgeAPIRequest+Private.h in Headers */, + B1D02452BB561B5A4294FDBE149D7A76 /* FBSDKBridgeAPIRequest.h in Headers */, + 2CBD582EBE7933D6215AE8A0F6CD6720 /* FBSDKBridgeAPIResponse.h in Headers */, + FE22460F81494C76BC7419383BBBDB54 /* FBSDKButton+Subclass.h in Headers */, + 599D68ECF9611F7E1E4801ED176F25CF /* FBSDKButton.h in Headers */, + E54CB935F9288B8C15B9F2A7FF180A5F /* FBSDKCloseIcon.h in Headers */, + 6866BF966C891D21913B2B6DB18226BF /* FBSDKCodelessIndexer.h in Headers */, + 6177A3DCF1175321E9F32155EB13EC0B /* FBSDKCodelessMacros.h in Headers */, + 843DA9A912826CC737BA01CDA2F8EA21 /* FBSDKCodelessParameterComponent.h in Headers */, + 72E93C77BB4F1091FF10BB8A7EA8908F /* FBSDKCodelessPathComponent.h in Headers */, + A909B5C2F4D8BE464C22DA5BA1EF53BB /* FBSDKColor.h in Headers */, + E2986AE483C0B9946A8BD1E579E2577C /* FBSDKConstants.h in Headers */, + 616A011EC63D46889291BE546C3FD5BE /* FBSDKContainerViewController.h in Headers */, + 7EAA3F1F6C21494F91B7D08E0ADAECBA /* FBSDKCopying.h in Headers */, + 9B5E4DBE329421E3CFA7B080A01EA8BD /* FBSDKCoreKit+Internal.h in Headers */, + 134DA3E801B574EBD7FF5FD36C1FB31B /* FBSDKCoreKit-umbrella.h in Headers */, + 957CC314623F94736099135DCC528D9D /* FBSDKCoreKit.h in Headers */, + C44AF2A92E1E42CB9E33FD3E2A46830E /* FBSDKCrypto.h in Headers */, + E9D0EED7C0BC7F7F7591F1F688A75C33 /* FBSDKDeviceRequestsHelper.h in Headers */, + 55D4C850567948FC7F54A1C4F59EA341 /* FBSDKDialogConfiguration.h in Headers */, + D0E72A1B87D018ED0925D56E14DA45AE /* FBSDKDynamicFrameworkLoader.h in Headers */, + 140881E88363B960CD238CAE6323A1C6 /* FBSDKError.h in Headers */, + 572170558100064F869849D32F1A25D3 /* FBSDKErrorConfiguration.h in Headers */, + DCF00D4B9EC21B5575CEA7A477DBC0B9 /* FBSDKErrorRecoveryAttempter.h in Headers */, + FAB3D6FDEC98C4E1C9C5B25BD0C138E2 /* FBSDKErrorRecoveryConfiguration.h in Headers */, + F860FD375B9A1D3A08669C61CE8BDE3B /* FBSDKEventBinding.h in Headers */, + 257A63239B74294F843C2A25105D77D6 /* FBSDKEventBindingManager.h in Headers */, + 2B580EFC285EC7137C3F1A731C4E90C3 /* FBSDKGateKeeperManager.h in Headers */, + 10EAB040554BC39A7F0823FB62FF0B2E /* FBSDKGraphErrorRecoveryProcessor.h in Headers */, + 4C9809F5B2000F8C9851CA6B10CB1B26 /* FBSDKGraphRequest+Internal.h in Headers */, + 997F3BE8210B1862CDB239A46628C3C8 /* FBSDKGraphRequest.h in Headers */, + 92C3B3093703EDFE52108485AC3F0CFA /* FBSDKGraphRequestBody.h in Headers */, + C44EC8CD658E91302C7DB056972A470E /* FBSDKGraphRequestConnection+Internal.h in Headers */, + 026D18B6C274AB984480AF050CFD902B /* FBSDKGraphRequestConnection.h in Headers */, + CDBBB00D9FB693426D03EA7FA98C9AE9 /* FBSDKGraphRequestDataAttachment.h in Headers */, + F15B83F597A6466FD4A8987EA74E3586 /* FBSDKGraphRequestMetadata.h in Headers */, + 6C695359B18D581229DF67E113C0120B /* FBSDKGraphRequestPiggybackManager.h in Headers */, + D66711D3E4C51A63309D630CDE86EDBF /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */, + FB7ACE56C6FA4B600069728925CD3144 /* FBSDKIcon.h in Headers */, + C6559960A5A92D4FC6C50ED41CCEEA83 /* FBSDKImageDownloader.h in Headers */, + 7F8C0F902F32CCE964EC8F664AF99F21 /* FBSDKInternalUtility.h in Headers */, + 2C2F46ED1B3DAC8FC72CF376E9184CC5 /* FBSDKKeychainStore.h in Headers */, + 5EEB0AFF34553450A4999AD74DA62F25 /* FBSDKKeychainStoreViaBundleID.h in Headers */, + 49E2797E278BDA0B618150434A73889D /* FBSDKLogger.h in Headers */, + A9D3CAE3BD389AF1FAC83AEC9B5AC45A /* FBSDKLogo.h in Headers */, + 2D42853D32FB0A8239E63E9F9D0C8BEE /* FBSDKMacros.h in Headers */, + A5DE74EF02C61250FD61A42724FE2B6F /* FBSDKMaleSilhouetteIcon.h in Headers */, + 7EA6F28226F67B122199FF69219A5A46 /* FBSDKMath.h in Headers */, + CFC3D9CE77353081F6E078CFF8F2F5CE /* FBSDKMeasurementEvent.h in Headers */, + E73D242A2D5FEEA6D99DDE750FA3B5F5 /* FBSDKMeasurementEvent_Internal.h in Headers */, + 8465091ABEAA4435987A96A59DC142F2 /* FBSDKMonotonicTime.h in Headers */, + DC5C0B5E58DE25998808F6E34BDB6F67 /* FBSDKMutableCopying.h in Headers */, + 5555373DA60F82CD9E9F73D802A3089F /* FBSDKPaymentObserver.h in Headers */, + 1B6B7A37B08FF36CB623F008C3DEB0A5 /* FBSDKProfile+Internal.h in Headers */, + F1D79F2AA68BA17CD01903DDC6E730A0 /* FBSDKProfile.h in Headers */, + 0E821B541BDB8E08E7E62C71A422A2A5 /* FBSDKProfilePictureView.h in Headers */, + 41C3C140C245DECD59757C5561B53E88 /* FBSDKServerConfiguration+Internal.h in Headers */, + 3AFE3A4493265D45E5636E62C18185E2 /* FBSDKServerConfiguration.h in Headers */, + 2F9580ADAFE0DF0FC5C9EC16D08568F0 /* FBSDKServerConfigurationManager+Internal.h in Headers */, + 5A420BFDA62AD601A9D5B1949CBB7661 /* FBSDKServerConfigurationManager.h in Headers */, + DCD26550E12020443DCF6ED5435B7BF2 /* FBSDKSettings+Internal.h in Headers */, + 0C3D8CEAEB8240382938582EDBFC0AA0 /* FBSDKSettings.h in Headers */, + 1AD372BE5FEB01B2E270F0B8D03A634D /* FBSDKSwizzler.h in Headers */, + 9760703887E2E9974935EA2F87C7879A /* FBSDKSystemAccountStoreAdapter.h in Headers */, + 47776E7563604354F311C49D10C17488 /* FBSDKTestUsersManager.h in Headers */, + D5DE700C90D39F5BF291601CC06E456D /* FBSDKTimeSpentData.h in Headers */, + 27AA3E0A0B3D88C7E993D93A4A837EB7 /* FBSDKTriStateBOOL.h in Headers */, + 74D6DE5FE9CFFCAF8A902783E81A52E2 /* FBSDKTypeUtility.h in Headers */, + F52E67E8CB86DB884A8679D6B4A2652B /* FBSDKUIUtility.h in Headers */, + 0A53DA959D13C0254D3FDC2DAA109A10 /* FBSDKURL.h in Headers */, + 723A7DF68A95975CE8826976472C34D3 /* FBSDKURL_Internal.h in Headers */, + 7A92D5C3952A6AED6688C625138FCFE4 /* FBSDKURLOpening.h in Headers */, + B5A8C60E0B5D1421A12B1A31E83F3EE0 /* FBSDKURLSessionTask.h in Headers */, + 86E32DF7D981CF6AA97178F9FD67EBEB /* FBSDKUserDataStore.h in Headers */, + 1DEDD45B32BD71B16444AC09E4018147 /* FBSDKUtility.h in Headers */, + 009DA4299AB76253D88DD20328599318 /* FBSDKViewHierarchy.h in Headers */, + 38C3940239CA007DC8F7B1DA149B4964 /* FBSDKViewImpressionTracker.h in Headers */, + 91EE91383A199D7157975323ACC7B8A9 /* FBSDKWebDialog.h in Headers */, + 0AC8340C8C789912DA6D69E8E672BB52 /* FBSDKWebDialogView.h in Headers */, + 1ACBBE97DEFF51C2121970AD3153C43A /* FBSDKWebViewAppLinkResolver.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 596A054FD49BB13216E978B57737B33F /* ActionSheetPicker-3.0 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 91F6FCFFC358412F50A08DD1FD0BEACF /* Build configuration list for PBXNativeTarget "ActionSheetPicker-3.0" */; + buildPhases = ( + 01FD4ACA3F1225A78601A724B3D94957 /* Headers */, + 44EB93E123964AA56E8F004138E7C94C /* Sources */, + 0018779BB8ADB891AC17BD05150F39B2 /* Frameworks */, + F10A16C146FFB116AD7D4385CBA88358 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ActionSheetPicker-3.0"; + productName = "ActionSheetPicker-3.0"; + productReference = 3831565C24953AA1BC757003002F8091 /* ActionSheetPicker_3_0.framework */; + productType = "com.apple.product-type.framework"; + }; + AA0C2A723DAAE0C6703D4A1AD7AA4169 /* FBSDKCoreKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9BE8418BC4F513A78E4E63B5192CD92F /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */; + buildPhases = ( + EF9AC7D73F302275F4F864DF884330A7 /* Headers */, + 517607E79F627C2CDDA09FC67ACE2B4E /* Sources */, + 56CA50251C17C98D5392C04E767862F6 /* Frameworks */, + 0D3D96E51C41B2AD553987B77BE7EB3C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 19B62CB25874E661D4D6035A26A5EE4C /* PBXTargetDependency */, + ); + name = FBSDKCoreKit; + productName = FBSDKCoreKit; + productReference = 55AF246447E3B4C5470632BD6B990168 /* FBSDKCoreKit.framework */; + productType = "com.apple.product-type.framework"; + }; + D233D9588EF1DD6F9BFC33405B92B64A /* FBSDKLoginKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 09BB41010B8B1F5810DF16F8A2FC32B7 /* Build configuration list for PBXNativeTarget "FBSDKLoginKit" */; + buildPhases = ( + A896A988A809DB90B55C54820ACE0E5F /* Headers */, + 039EB2923B5097A32E8FE09BD2C94366 /* Sources */, + 9D35C3AF9624D5783E86BFE137B62DF1 /* Frameworks */, + 1EEAC7D6E46B3BFCF15CA3F45011AAB9 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D3917C64BFB50B01F5247D559F30F030 /* PBXTargetDependency */, + ); + name = FBSDKLoginKit; + productName = FBSDKLoginKit; + productReference = A55C0068BBBE309BB7C5C44E0E9292D9 /* FBSDKLoginKit.framework */; + productType = "com.apple.product-type.framework"; + }; + E4C3219CC41056984CE5CB0EA81690E0 /* Pods-MAPS.ME */ = { + isa = PBXNativeTarget; + buildConfigurationList = DC64E0EACB44B725545A61CDF63252F7 /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */; + buildPhases = ( + BD04BBF2D76D5E5EEF1683BE2B2D67A2 /* Headers */, + 3CDD6A0012659DF712CC17BBB6B7294E /* Sources */, + 87B6B4C9D1F54B5604D04605EA208C04 /* Frameworks */, + 61996B8113E6E1EAC6B67CF6C71BC4FC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EAA1ECDF45DC02C247613CDFFEFA58C3 /* PBXTargetDependency */, + 375DF34318565FB24F7EE7C347FD3FAB /* PBXTargetDependency */, + 235AA637BFD0CAA6801BC29D1C3940B0 /* PBXTargetDependency */, + BDEA062786724520D48241C8BC941110 /* PBXTargetDependency */, + 0D64D28D2B78E65B1A33D47D3434B1DF /* PBXTargetDependency */, + A91E524817CFC8B4D1ED2AC487CBB907 /* PBXTargetDependency */, + ); + name = "Pods-MAPS.ME"; + productName = "Pods-MAPS.ME"; + productReference = FFE39CF5CA53503CBF529A3390C2CD1C /* Pods_MAPS_ME.framework */; + productType = "com.apple.product-type.framework"; + }; + F2B796974E3872C56B5EEFC43654E606 /* Bolts */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6C8BCCB283DD8CAD074F105BF8ACBCE2 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildPhases = ( + 9ED5B5A64CE540A8C7157CBE79ACD796 /* Headers */, + 6CAEBD8D0F04703448EDCD8AD933ED31 /* Sources */, + B4D733136C17B5B13A34A3E4BE35EF96 /* Frameworks */, + C866C51B37A79C79C514E6E051884CB9 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Bolts; + productName = Bolts; + productReference = 80A976D787E1C409A9419E72936C6F6D /* Bolts.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 151BC55C1FB8D733B891963E704519D5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 596A054FD49BB13216E978B57737B33F /* ActionSheetPicker-3.0 */, + 96173E80FA991F6EE9415F67D21963FD /* AppsFlyerFramework */, + F2B796974E3872C56B5EEFC43654E606 /* Bolts */, + AA0C2A723DAAE0C6703D4A1AD7AA4169 /* FBSDKCoreKit */, + D233D9588EF1DD6F9BFC33405B92B64A /* FBSDKLoginKit */, + E4C3219CC41056984CE5CB0EA81690E0 /* Pods-MAPS.ME */, + 106364887199D3E9FF7B854AE4F020F4 /* Pushwoosh */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0D3D96E51C41B2AD553987B77BE7EB3C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6E817A4C4561C6B470D936512790850D /* FacebookSDKStrings.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1EEAC7D6E46B3BFCF15CA3F45011AAB9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 61996B8113E6E1EAC6B67CF6C71BC4FC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C866C51B37A79C79C514E6E051884CB9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F10A16C146FFB116AD7D4385CBA88358 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 039EB2923B5097A32E8FE09BD2C94366 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 621E9E2DBEC5CB2DEC0017A98F79F5E3 /* _FBSDKLoginRecoveryAttempter.m in Sources */, + 86E6375789A4E84177F30097B3ED803F /* FBSDKDeviceLoginCodeInfo.m in Sources */, + 1701A2D59448E5E0EA7BFA9A2F0965DF /* FBSDKDeviceLoginManager.m in Sources */, + 41D135CD2F590CD4312F4BC06C493840 /* FBSDKDeviceLoginManagerResult.m in Sources */, + 540FF29BE62067E39305716997AE622A /* FBSDKLoginButton.m in Sources */, + E03038B45AA8E248B71CEEB4EFEFED5C /* FBSDKLoginCompletion.m in Sources */, + 024958D4C78D687193595E24913AC528 /* FBSDKLoginConstants.m in Sources */, + 324EFD095397CE7C3C7619580B019028 /* FBSDKLoginError.m in Sources */, + D91C06C52666AD939CB90C98AC27820F /* FBSDKLoginKit-dummy.m in Sources */, + 0FCB9ACBAD1CB5D33E554EE4975C30FD /* FBSDKLoginManager.m in Sources */, + 668D7C75E886D28526876EEC4BFC12EE /* FBSDKLoginManagerLogger.m in Sources */, + 7290C89836505DF7408734413D5C2858 /* FBSDKLoginManagerLoginResult.m in Sources */, + FA4725CD2742DCB0986B5A07C2275658 /* FBSDKLoginTooltipView.m in Sources */, + 02DB1CA292DB4D35599E281328D3101E /* FBSDKLoginUtility.m in Sources */, + 1E8E71DE7A9AE75F18B2FA6D0B4B8FE2 /* FBSDKTooltipView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3CDD6A0012659DF712CC17BBB6B7294E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FEDE02EF4C36D1F5D6B8464B46B62380 /* Pods-MAPS.ME-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 44EB93E123964AA56E8F004138E7C94C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1F3C537B9ACE670ADE252F9E7F8D394A /* AbstractActionSheetPicker.m in Sources */, + AB5EEB72464834DBBFAEB43819E51CFB /* ActionSheetCustomPicker.m in Sources */, + CDEF53C22EA911BAA379A94EEC7E622C /* ActionSheetDatePicker.m in Sources */, + 62B312DDDE53E3F55E8BB3065F594206 /* ActionSheetDistancePicker.m in Sources */, + E575C0E7D1D7E0C6CB33D4C5D7EB1743 /* ActionSheetLocalePicker.m in Sources */, + 330ED0D27C7047F8D8A5120C307D8784 /* ActionSheetMultipleStringPicker.m in Sources */, + 1490C7BC70CBFD72E1B207ABF758E00D /* ActionSheetPicker-3.0-dummy.m in Sources */, + 6C6D61B2CE51383C366D578CA8A76933 /* ActionSheetStringPicker.m in Sources */, + B4A19D9D12BAD6B3057DAF56AFE18CCE /* DistancePickerView.m in Sources */, + 512C7AEA702B039F267C42994D6F5675 /* SWActionSheet.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 517607E79F627C2CDDA09FC67ACE2B4E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5B28DC88DB822F472DF5D34047C0DE65 /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */, + D9F3FF1B14FDD6F9AFE487DE60A3F8C8 /* FBSDKAccessToken.m in Sources */, + A09D1124B6CFA106EE92D272471B8FDD /* FBSDKAccessTokenCache.m in Sources */, + 5BE96714076A16A5CC13C95DD8A6DF1D /* FBSDKAccessTokenCacheV3.m in Sources */, + 2318A0175B177D0341614BFADB34C2D0 /* FBSDKAccessTokenCacheV3_17.m in Sources */, + 259D76C568335CBB65F77CE50A060DEE /* FBSDKAccessTokenCacheV3_21.m in Sources */, + C3FD629CDEF847D9447216A970EC9510 /* FBSDKAccessTokenCacheV4.m in Sources */, + 178336539D0DA3954CF9057CFA7D5934 /* FBSDKAccessTokenExpirer.m in Sources */, + 82B7862FD6CC08BFFA0091DFA770B8FD /* FBSDKAppEvents.m in Sources */, + 2CE24B4B426A23C95F5DA7E86C6AC0D3 /* FBSDKAppEventsDeviceInfo.m in Sources */, + 4C8CF456ED701C62893B26287A1AC522 /* FBSDKAppEventsState.m in Sources */, + 76B71CDE8EEE819266E3F75008A4CB1B /* FBSDKAppEventsStateManager.m in Sources */, + DB7949815781CAC21CD17B777049EFC4 /* FBSDKAppEventsUtility.m in Sources */, + 6A053695BAE7721BB80CFCCAB24A3A55 /* FBSDKApplicationDelegate.m in Sources */, + DC16A69C697E1C0CCDBE8B4AC42AD528 /* FBSDKAppLink.m in Sources */, + BE10CD1903259B7EFE0441F356699377 /* FBSDKAppLinkNavigation.m in Sources */, + FDE892E3526040B4322B8A08FD195AF7 /* FBSDKAppLinkResolver.m in Sources */, + D005BB972F102B2B1D2CF0BD28B30DC6 /* FBSDKAppLinkReturnToRefererController.m in Sources */, + D824EB95B686A6D5B75B34520A8FE93C /* FBSDKAppLinkReturnToRefererView.m in Sources */, + 492121EE72DD5A81A4FA81BC83515304 /* FBSDKAppLinkTarget.m in Sources */, + D54698383D3E2735D5D11B668F892F7A /* FBSDKAppLinkUtility.m in Sources */, + 9EF404A531C47B4A913EFE8CE3649BEB /* FBSDKAudioResourceLoader.m in Sources */, + B29E67B3AA2F522772C9F13476CA2ABE /* FBSDKBase64.m in Sources */, + 2CDA69DD6E616B38EB173AC330502796 /* FBSDKBoltsMeasurementEventListener.m in Sources */, + 08030279DBE3D477EFA34EF29A11AFEA /* FBSDKBridgeAPI.m in Sources */, + 1D03D970441EC1ED00D48B28471F049F /* FBSDKBridgeAPICrypto.m in Sources */, + 9868D4EF57780477D11FCD064F7A706D /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */, + 39289D3FCE24C08BAF5116638A635579 /* FBSDKBridgeAPIProtocolWebV1.m in Sources */, + 0121BA922AFD6D7168982A23B9524646 /* FBSDKBridgeAPIProtocolWebV2.m in Sources */, + 4F20F3931CAB83CE90D110994CA08E42 /* FBSDKBridgeAPIRequest.m in Sources */, + E5338EDB3783EBDD84B99E1C20318ECF /* FBSDKBridgeAPIResponse.m in Sources */, + A32141E29CD70D3DD33D509C99D9679D /* FBSDKButton.m in Sources */, + CAAD713C1E3D8CD7C27559FD8F5E6099 /* FBSDKCloseIcon.m in Sources */, + D3D99759B513820058940B3115C086E9 /* FBSDKCodelessIndexer.m in Sources */, + A1E49A533D04CCFEC2C5ACFA5F71A522 /* FBSDKCodelessParameterComponent.m in Sources */, + 0692B27D249702ED612E99508B2EDADC /* FBSDKCodelessPathComponent.m in Sources */, + C3FD9AFF13841C1D29896EB3F40445B9 /* FBSDKColor.m in Sources */, + B7105E76695936754EB51CA8FF3CAA78 /* FBSDKConstants.m in Sources */, + 5F2BA6F85C8BF20F5498179FF47D743D /* FBSDKContainerViewController.m in Sources */, + 69EAA307BA8B366C552B33625EAF04F7 /* FBSDKCoreKit-dummy.m in Sources */, + 8E3A618EE9DED3CEC25F108480A9D08C /* FBSDKCrypto.m in Sources */, + E1ADCD9F44B1BD0EC097ABBFF93FD369 /* FBSDKDeviceRequestsHelper.m in Sources */, + 86B94950B09C784488AE876B7C301808 /* FBSDKDialogConfiguration.m in Sources */, + 821D8E16D2A2B7CBDD62BF9A363AB483 /* FBSDKDynamicFrameworkLoader.m in Sources */, + 02B713BD93003813EDA7EB6CD8AA0B29 /* FBSDKError.m in Sources */, + E336E53A67665DD4F62B9BAF09A93501 /* FBSDKErrorConfiguration.m in Sources */, + 6D723D1E74BC578BB6F0CE822672B388 /* FBSDKErrorRecoveryAttempter.m in Sources */, + B5383849852219134435A8AD045E204F /* FBSDKErrorRecoveryConfiguration.m in Sources */, + E428FCEFEA4339C9903C5CB6A6437841 /* FBSDKEventBinding.m in Sources */, + B68E586342D161360C8BB519DB8DE169 /* FBSDKEventBindingManager.m in Sources */, + BD8CC0A5B314275E5F10412CF7A7F458 /* FBSDKGateKeeperManager.m in Sources */, + 4690E60E89A07767872CC1F7261F8AF2 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */, + F89CF95AFE58DB317FFF4326DA4034F7 /* FBSDKGraphRequest.m in Sources */, + 065FF1436AF80D1A24608980892A5FA2 /* FBSDKGraphRequestBody.m in Sources */, + 035FAD4570D147C0360ECB57D785ABC5 /* FBSDKGraphRequestConnection.m in Sources */, + E8D4930236B16E71D5017AE83408BA4D /* FBSDKGraphRequestDataAttachment.m in Sources */, + 0B7BC02AE1BAB98A366B3877A216EEB5 /* FBSDKGraphRequestMetadata.m in Sources */, + 3D67A341BB01A011A1DFB20485DDEB91 /* FBSDKGraphRequestPiggybackManager.m in Sources */, + 79DBD25C469B8A49637F011614DB5820 /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */, + 11B62E37CFAB4CC2BD81038EA66FC89F /* FBSDKIcon.m in Sources */, + E2ECBC6D920FBE8B4CA00314AE5BF753 /* FBSDKImageDownloader.m in Sources */, + EE0E9D2D147026F13AECB3799BFC9964 /* FBSDKInternalUtility.m in Sources */, + 5D3B5A19E083BE541E3FBB7906C3115C /* FBSDKKeychainStore.m in Sources */, + 185D055C8285D3A89CF5979A0AED0B1F /* FBSDKKeychainStoreViaBundleID.m in Sources */, + 5F0F1C205478C5DB539D4DCC3089706E /* FBSDKLogger.m in Sources */, + 473B7E253253B25B80CAE220DEF24E9C /* FBSDKLogo.m in Sources */, + 1E5D3BA686D00C3D0FE01BA5FE07D102 /* FBSDKMaleSilhouetteIcon.m in Sources */, + EF411DBCDB25987C2C78CA27A839E573 /* FBSDKMath.m in Sources */, + C94745C9CF9F573E9AAE091FC456ECE3 /* FBSDKMeasurementEvent.m in Sources */, + 45D07878FF25850E71081A4D81EC9282 /* FBSDKMonotonicTime.m in Sources */, + 9CAB710499461F49B7E020796FBC8997 /* FBSDKPaymentObserver.m in Sources */, + 94780DBB0AE798F7F8E26435F057ADF9 /* FBSDKProfile.m in Sources */, + E8D860CB4546B0450620C483BB0F06FD /* FBSDKProfilePictureView.m in Sources */, + D276245D1C3FFB5233925ECC04F4E5E4 /* FBSDKServerConfiguration.m in Sources */, + 2F8E430CC7B7B1E17F8FE2AE6C38FA41 /* FBSDKServerConfigurationManager.m in Sources */, + 4910A564D07876657FB9F8859CD67A9C /* FBSDKSettings.m in Sources */, + 6F75243E4DF9DEFE46C54190A01A2DE2 /* FBSDKSwizzler.m in Sources */, + 4C3CCAE4B5CA3EE7B3BAB57ACBFAF6D5 /* FBSDKSystemAccountStoreAdapter.m in Sources */, + 49784896AB56A5A781D5D1203B056A02 /* FBSDKTestUsersManager.m in Sources */, + 7DBC99863A2258771F7C4C0C0A1CD686 /* FBSDKTimeSpentData.m in Sources */, + E5D8F2DDAA1FFCF479A719A567266A4C /* FBSDKTriStateBOOL.m in Sources */, + 2C8FC2498105A60F19B6B62D12A5256D /* FBSDKTypeUtility.m in Sources */, + 1C4AA26B685FC73303B2F776922F1040 /* FBSDKURL.m in Sources */, + D32261B2E042643DEFF04F5AFD7B8370 /* FBSDKURLSessionTask.m in Sources */, + 84DEB7A963CD3A94A7CC2686C6F8C60F /* FBSDKUserDataStore.m in Sources */, + 973E58C0D24B05EDD13065170AB2BEAD /* FBSDKUtility.m in Sources */, + 2D4B28E736CC828768FA27427B9E084B /* FBSDKViewHierarchy.m in Sources */, + 54A86E72B0D601C832A22575AAB0C5F5 /* FBSDKViewImpressionTracker.m in Sources */, + D1CA8397831B96F617C154647C26770A /* FBSDKWebDialog.m in Sources */, + F2441AB0FA94D89FC01C2FD7FCEA4ADD /* FBSDKWebDialogView.m in Sources */, + DA3AF97371EC81C12939342F562210C9 /* FBSDKWebViewAppLinkResolver.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6CAEBD8D0F04703448EDCD8AD933ED31 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 061EA524B535197E98AD2516B329F018 /* BFAppLink.m in Sources */, + C1460BF0F284387568D03F86C2E8C973 /* BFAppLinkNavigation.m in Sources */, + 50B18AC1309D20A808ABAC4954B3EBFC /* BFAppLinkReturnToRefererController.m in Sources */, + 7C169DB08C8C07D5795AFCDDFC11438B /* BFAppLinkReturnToRefererView.m in Sources */, + F05A6412AB3CD3AC0AC280F1E010BB6A /* BFAppLinkTarget.m in Sources */, + 2D574C311B6BAC3C114EF4A08E8A6AED /* BFCancellationToken.m in Sources */, + B1B99D9C153CCC0888776ACE42F6C42A /* BFCancellationTokenRegistration.m in Sources */, + 97F52C830707CF1CDA85321283B0D2FC /* BFCancellationTokenSource.m in Sources */, + BAF09EA9362B1ABE419C6CF37FA9B62E /* BFExecutor.m in Sources */, + D808F5E7BF406B483D04BE1212A11917 /* BFMeasurementEvent.m in Sources */, + BC801884ECBEB064A7EB68EF49DBCC8B /* BFTask.m in Sources */, + 5F431DC0101A1E41A829F5267FA5ECEE /* BFTaskCompletionSource.m in Sources */, + F8F56FD71771BB2EA61643A69699A8CA /* BFURL.m in Sources */, + 005C0762029A50B083FA6BA100C580B5 /* BFWebViewAppLinkResolver.m in Sources */, + 834F17E8A3ED8AD6AB70FBFAE6F3BAE5 /* Bolts-dummy.m in Sources */, + 368A0D534063C18951492FA0DC502D94 /* Bolts.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0D64D28D2B78E65B1A33D47D3434B1DF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FBSDKLoginKit; + target = D233D9588EF1DD6F9BFC33405B92B64A /* FBSDKLoginKit */; + targetProxy = A965B3C765C63A5A261B43E58CA589CE /* PBXContainerItemProxy */; + }; + 19B62CB25874E661D4D6035A26A5EE4C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Bolts; + target = F2B796974E3872C56B5EEFC43654E606 /* Bolts */; + targetProxy = 6D6FCA9B21258BCFB0312085C3679E63 /* PBXContainerItemProxy */; + }; + 235AA637BFD0CAA6801BC29D1C3940B0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Bolts; + target = F2B796974E3872C56B5EEFC43654E606 /* Bolts */; + targetProxy = C23D62DB06EDD1CF665ACEEC678331CD /* PBXContainerItemProxy */; + }; + 375DF34318565FB24F7EE7C347FD3FAB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AppsFlyerFramework; + target = 96173E80FA991F6EE9415F67D21963FD /* AppsFlyerFramework */; + targetProxy = 879AAC3176B1CD7D822F5E98736516A0 /* PBXContainerItemProxy */; + }; + A91E524817CFC8B4D1ED2AC487CBB907 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Pushwoosh; + target = 106364887199D3E9FF7B854AE4F020F4 /* Pushwoosh */; + targetProxy = B7BAD9E19FEC7F5BECA2AA91D53817A0 /* PBXContainerItemProxy */; + }; + BDEA062786724520D48241C8BC941110 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FBSDKCoreKit; + target = AA0C2A723DAAE0C6703D4A1AD7AA4169 /* FBSDKCoreKit */; + targetProxy = ABFBE23E2F7648C4EE2AD7EA857CEB97 /* PBXContainerItemProxy */; + }; + D3917C64BFB50B01F5247D559F30F030 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FBSDKCoreKit; + target = AA0C2A723DAAE0C6703D4A1AD7AA4169 /* FBSDKCoreKit */; + targetProxy = 23C92E672D08F9E00F267639C20D365D /* PBXContainerItemProxy */; + }; + EAA1ECDF45DC02C247613CDFFEFA58C3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ActionSheetPicker-3.0"; + target = 596A054FD49BB13216E978B57737B33F /* ActionSheetPicker-3.0 */; + targetProxy = 1242CF4A38EE8DDBA754C2AC4F6A538E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 02133A1C4F4D1BF1E5B54B931786ABEC /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7B18D7A9D7727350A4FDE2701818D0B7 /* Pods-MAPS.ME.production full.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.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 = "Production Full"; + }; + 0DC9C1D7D31970709DCEC44372B83DD5 /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7B6A85F169B6A9D24AAE9014DE53A166 /* AppsFlyerFramework.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Production Full"; + }; + 3048B0C5C704DFFF688DA57F5380ED58 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.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 = 4.2; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 3320BBA16F7AA9E06CB75309CCF4F379 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AD22552D86A03AE913DDD7A621104FE1 /* Pods-MAPS.ME.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.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; + }; + 3949D166BBF5625534AC68F25B473366 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B0A3006B64B76811C9F555532CFEDAC2 /* Pods-MAPS.ME.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.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; + }; + 40C2B9150AA2C94E2D6EA53133AC2263 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC1EFDD1A4ACD6C26AD6E857461629DC /* Bolts.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/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) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 4510C63432773DD3A0097C91FF2F987F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A691756115AFFC0FE1C0666BAE413CC5 /* ActionSheetPicker-3.0.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-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/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap"; + PRODUCT_MODULE_NAME = ActionSheetPicker_3_0; + PRODUCT_NAME = ActionSheetPicker_3_0; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 4C0CAA54A15F0C70B1B17912C2EC3AD9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CF37449CD930DA1810A99999215AE6E8 /* Pushwoosh.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 55C9FE8CB604BD767D11CE36FD0B772C /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C5C531CBE54BED6D99BC7D0524D4B815 /* FBSDKCoreKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-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/FBSDKCoreKit/FBSDKCoreKit.modulemap"; + PRODUCT_MODULE_NAME = FBSDKCoreKit; + PRODUCT_NAME = FBSDKCoreKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Production Full"; + }; + 5B0C8287D755FD95091CF35D87FB8B2D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.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 = 4.2; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 7A605606AB5BD35BE26F7F9D9C16FDE6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C5C531CBE54BED6D99BC7D0524D4B815 /* FBSDKCoreKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-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/FBSDKCoreKit/FBSDKCoreKit.modulemap"; + PRODUCT_MODULE_NAME = FBSDKCoreKit; + PRODUCT_NAME = FBSDKCoreKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 80B93B7A61396A8699775E96EE68DCD0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7B6A85F169B6A9D24AAE9014DE53A166 /* AppsFlyerFramework.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 84A169E7735EEC3D12B282874C63D63A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BBBD11E3A7E1306130F0A8A2D3990876 /* FBSDKLoginKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-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/FBSDKLoginKit/FBSDKLoginKit.modulemap"; + PRODUCT_MODULE_NAME = FBSDKLoginKit; + PRODUCT_NAME = FBSDKLoginKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 85F72EB625DE2E53386FDD1BB2390839 /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC1EFDD1A4ACD6C26AD6E857461629DC /* Bolts.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/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) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Production Full"; + }; + 8A7C10874E8E68670E6396AC65500ECB /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BBBD11E3A7E1306130F0A8A2D3990876 /* FBSDKLoginKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-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/FBSDKLoginKit/FBSDKLoginKit.modulemap"; + PRODUCT_MODULE_NAME = FBSDKLoginKit; + PRODUCT_NAME = FBSDKLoginKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + AA06AF615BC2402F9764683B3446A467 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7B6A85F169B6A9D24AAE9014DE53A166 /* AppsFlyerFramework.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B73771AD5D9E2C25C5DB31E68F88054D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AC1EFDD1A4ACD6C26AD6E857461629DC /* Bolts.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/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) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + B7465D283FBB025ADE19AEBB5699FBD0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C5C531CBE54BED6D99BC7D0524D4B815 /* FBSDKCoreKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-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/FBSDKCoreKit/FBSDKCoreKit.modulemap"; + PRODUCT_MODULE_NAME = FBSDKCoreKit; + PRODUCT_NAME = FBSDKCoreKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + D0EF94EAA425124C4B79C85B12F0DD87 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CF37449CD930DA1810A99999215AE6E8 /* Pushwoosh.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + D234CE798F89327DB757C2C05BFF5C8B /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BBBD11E3A7E1306130F0A8A2D3990876 /* FBSDKLoginKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-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/FBSDKLoginKit/FBSDKLoginKit.modulemap"; + PRODUCT_MODULE_NAME = FBSDKLoginKit; + PRODUCT_NAME = FBSDKLoginKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Production Full"; + }; + D7F00BC8E51147B06C5E178FE5464964 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A691756115AFFC0FE1C0666BAE413CC5 /* ActionSheetPicker-3.0.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-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/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap"; + PRODUCT_MODULE_NAME = ActionSheetPicker_3_0; + PRODUCT_NAME = ActionSheetPicker_3_0; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E54980B8B6612113035FD126C2D09257 /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CF37449CD930DA1810A99999215AE6E8 /* Pushwoosh.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Production Full"; + }; + ED28E57849C13CBBCB4FFE36528E47FE /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A691756115AFFC0FE1C0666BAE413CC5 /* ActionSheetPicker-3.0.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-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/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap"; + PRODUCT_MODULE_NAME = ActionSheetPicker_3_0; + PRODUCT_NAME = ActionSheetPicker_3_0; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Production Full"; + }; + FEF8A765E30A9348962ECD50DEC93AAD /* Production Full */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_PRODUCTION_FULL=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 = 10.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 = 4.2; + SYMROOT = "${SRCROOT}/../build"; + }; + name = "Production Full"; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 09BB41010B8B1F5810DF16F8A2FC32B7 /* Build configuration list for PBXNativeTarget "FBSDKLoginKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8A7C10874E8E68670E6396AC65500ECB /* Debug */, + D234CE798F89327DB757C2C05BFF5C8B /* Production Full */, + 84A169E7735EEC3D12B282874C63D63A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5B0C8287D755FD95091CF35D87FB8B2D /* Debug */, + FEF8A765E30A9348962ECD50DEC93AAD /* Production Full */, + 3048B0C5C704DFFF688DA57F5380ED58 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5418348C4E12C2FA948C40C515696052 /* Build configuration list for PBXAggregateTarget "AppsFlyerFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA06AF615BC2402F9764683B3446A467 /* Debug */, + 0DC9C1D7D31970709DCEC44372B83DD5 /* Production Full */, + 80B93B7A61396A8699775E96EE68DCD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6C8BCCB283DD8CAD074F105BF8ACBCE2 /* Build configuration list for PBXNativeTarget "Bolts" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B73771AD5D9E2C25C5DB31E68F88054D /* Debug */, + 85F72EB625DE2E53386FDD1BB2390839 /* Production Full */, + 40C2B9150AA2C94E2D6EA53133AC2263 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6FEAB02AE1C9E18DA46D560BC39B4027 /* Build configuration list for PBXAggregateTarget "Pushwoosh" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C0CAA54A15F0C70B1B17912C2EC3AD9 /* Debug */, + E54980B8B6612113035FD126C2D09257 /* Production Full */, + D0EF94EAA425124C4B79C85B12F0DD87 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 91F6FCFFC358412F50A08DD1FD0BEACF /* Build configuration list for PBXNativeTarget "ActionSheetPicker-3.0" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D7F00BC8E51147B06C5E178FE5464964 /* Debug */, + ED28E57849C13CBBCB4FFE36528E47FE /* Production Full */, + 4510C63432773DD3A0097C91FF2F987F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9BE8418BC4F513A78E4E63B5192CD92F /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7A605606AB5BD35BE26F7F9D9C16FDE6 /* Debug */, + 55C9FE8CB604BD767D11CE36FD0B772C /* Production Full */, + B7465D283FBB025ADE19AEBB5699FBD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DC64E0EACB44B725545A61CDF63252F7 /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3320BBA16F7AA9E06CB75309CCF4F379 /* Debug */, + 02133A1C4F4D1BF1E5B54B931786ABEC /* Production Full */, + 3949D166BBF5625534AC68F25B473366 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Headers b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Headers new file mode 120000 index 0000000000..a177d2a6b9 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Modules/module.modulemap b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Modules/module.modulemap new file mode 100644 index 0000000000..a31d09abdb --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module Pushwoosh { + umbrella header "Pushwoosh.h" + + export * + module * { export * } +} diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Pushwoosh b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Pushwoosh new file mode 120000 index 0000000000..b002d72473 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Pushwoosh @@ -0,0 +1 @@ +Versions/Current/Pushwoosh \ No newline at end of file diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWAppDelegate.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWAppDelegate.h new file mode 100644 index 0000000000..82c86a1990 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWAppDelegate.h @@ -0,0 +1,16 @@ +// +// PWAppDelegate.h +// Pushwoosh SDK +// (c) Pushwoosh 2018 +// + +#import + +/* + Base AppDelegate class for easier integration. + */ +@interface PWAppDelegate : UIResponder + +@property (nonatomic, strong) UIWindow *window; + +@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h new file mode 100644 index 0000000000..c9210b24d7 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h @@ -0,0 +1,42 @@ +// +// PWGDPRManager.h +// Pushwoosh SDK +// (c) Pushwoosh 2018 +// + +#import + +/* + `PWGDPRManager` class offers access to the singleton-instance of the manager responsible for channels management required by GDPR. + */ + +FOUNDATION_EXPORT NSString * const PWGDPRStatusDidChangeNotification; + +@interface PWGDPRManager : NSObject + +/** +Indicates availability of the GDPR compliance solution. +*/ +@property (nonatomic, readonly, getter=isAvailable) BOOL available; + +@property (nonatomic, readonly, getter=isCommunicationEnabled) BOOL communicationEnabled; + +@property (nonatomic, readonly, getter=isDeviceDataRemoved) BOOL deviceDataRemoved; + ++ (instancetype)sharedManager; + +/** + Enable/disable all communication with Pushwoosh. Enabled by default. + */ +- (void)setCommunicationEnabled:(BOOL)enabled completion:(void (^)(NSError *error))completion; + +/** + Removes all device data from Pushwoosh and stops all interactions and communication permanently. + */ +- (void)removeAllDeviceDataWithCompletion:(void (^)(NSError *error))completion; + +- (void)showGDPRConsentUI; + +- (void)showGDPRDeletionUI; + +@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h new file mode 100644 index 0000000000..dfaf01c2f2 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h @@ -0,0 +1,140 @@ +// +// PWInAppManager.h +// Pushwoosh SDK +// (c) Pushwoosh 2017 +// + +#import + +#if TARGET_OS_IPHONE + +/** + `PWJavaScriptInterface` protocol is a representation of Javascript object that can be added at runtime into In-App Message HTML page + to provide native calls and callbacks to Objective-C/Swift. + + Example: + + ```ObjC + @implementation JavaScriptInterface + + - (void)nativeCall:(NSString*)str :(PWJavaScriptCallback*)callback { + [callback executeWithParam:str]; + } + + @end + + ... + + [[PWInAppManager sharedManager] addJavascriptInterface:[JavaScriptInterface new] withName:@"ObjC"]; + ``` + + ```javascript + ObjC.nativeCall("exampleString", function(str) { + console.log(str); + }); + ``` + */ +@protocol PWJavaScriptInterface + +@optional + +/** + Tells the delegate that In-App Message load stated + */ +- (void)onWebViewStartLoad:(UIWebView*)webView; + +/** + Tells the delegate that In-App Message load finished + */ +- (void)onWebViewFinishLoad:(UIWebView*)webView; + +/** + Tells the delegate that In-App Message is closing + */ +- (void)onWebViewStartClose:(UIWebView*)webView; + +@end + +/** + `PWJavaScriptCallback` is a representation of Javascript function + */ +@interface PWJavaScriptCallback : NSObject + +/** + Invokes callback with no arguments + */ +- (NSString*) execute; + +/** + Invokes callback with one argument + */ +- (NSString*) executeWithParam: (NSString*) param; + +/** + Invokes callback with multiple arguments + */ +- (NSString*) executeWithParams: (NSArray*) params; + +@end + +#endif + + +/* + `PWInAppManager` class offers access to the singleton-instance of the inapp messages manager responsible for sending events and managing inapp message notifications. + */ +@interface PWInAppManager : NSObject + + ++ (instancetype)sharedManager; + +/** + Resets capping of the Pushwoosh out-of-the-box In-App solutions. + */ +- (void)resetBusinessCasesFrequencyCapping; + +/** + Set User indentifier. This could be Facebook ID, username or email, or any other user ID. + This allows data and events to be matched across multiple user devices. + */ +- (void)setUserId:(NSString *)userId; + +/** + Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. + + @param oldUserId source user + @param newUserId destination user + @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId + @param completion callback + */ +- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion; + +/** + Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. + + Example: + + [[PWInAppManager sharedManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; + [[PWInAppManager sharedManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; + + @param event name of the event + @param attributes NSDictionary of event attributes + @param completion function to call after posting event + */ +- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion; + +/** + See `postEvent:withAttributes:completion:` + */ +- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes; + +#if TARGET_OS_IPHONE + +/** + Adds javascript interface for In-App Messages. Interface will be accessible from javascript as object with specified `name` and functions defined in `interface` class. + */ +- (void)addJavascriptInterface:(NSObject*)interface withName:(NSString*)name; + +#endif + +@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInbox.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInbox.h new file mode 100644 index 0000000000..8cc23f37aa --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInbox.h @@ -0,0 +1,127 @@ +// +// PWInbox.h +// Pushwoosh SDK +// (c) Pushwoosh 2017 +// + +#import + + +/** + The notification arriving on the Inbox messages renewal + */ +FOUNDATION_EXPORT NSString * const PWInboxMessagesDidUpdateNotification; + +/** + The notification arriving when a push message is added to Inbox + */ +FOUNDATION_EXPORT NSString * const PWInboxMessagesDidReceiveInPushNotification; + +/** + The Inbox message type. Plain = without any action, Richmedia = contains a Rich media page, URL = contains remote URL, Deeplink = contains Deeplink + */ +typedef NS_ENUM(NSInteger, PWInboxMessageType) { + PWInboxMessageTypePlain = 0, + PWInboxMessageTypeRichmedia = 1, + PWInboxMessageTypeURL = 2, + PWInboxMessageTypeDeeplink = 3 +}; + + +/** + `PWInboxMessageProtocol` The protocol describing the Inbox message. + */ +@protocol PWInboxMessageProtocol + +@required + +@property (readonly, nonatomic) NSString *code; +@property (readonly, nonatomic) NSString *title; +@property (readonly, nonatomic) NSString *imageUrl; +@property (readonly, nonatomic) NSString *message; +@property (readonly, nonatomic) NSDate *sendDate; +@property (readonly, nonatomic) PWInboxMessageType type; +//! Inbox Message which is read, see + (void)readMessagesWithCodes:(NSArray *)codes +@property (readonly, nonatomic) BOOL isRead; +//! Action of the Inbox Message is performed (if true, an action was performed in the Inbox see + (void)performActionForMessageWithCode:(NSString *)code or an action was performed on the push tap ) +@property (readonly, nonatomic) BOOL isActionPerformed; + +@end + +@interface PWInbox : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** + Get the number of the PWInboxMessageProtocol with no action performed + + @param completion - if successful, return the number of the InboxMessages with no action performed. Otherwise, return error + */ ++ (void)messagesWithNoActionPerformedCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; + +/** + Get the number of the unread PWInboxMessageProtocol + + @param completion - if successful, return the number of the unread InboxMessages. Otherwise, return error + */ ++ (void)unreadMessagesCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; + +/** + Get the total number of the PWInboxMessageProtocol + + @param completion - if successful, return the total number of the InboxMessages. Otherwise, return error + */ ++ (void)messagesCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; + +/** + Get the collection of the PWInboxMessageProtocol that the user received + + @param completion - if successful, return the collection of the InboxMessages. Otherwise, return error + */ ++ (void)loadMessagesWithCompletion:(void (^)(NSArray *> *messages, NSError *error))completion; + +/** + Call this method to mark the list of InboxMessageProtocol as read + + @param codes of the inboxMessages + */ ++ (void)readMessagesWithCodes:(NSArray *)codes; + +/** + Call this method, when the user clicks on the InboxMessageProtocol and the message’s action is performed + + @param code of the inboxMessage that the user tapped + */ ++ (void)performActionForMessageWithCode:(NSString *)code; + +/** + Call this method, when the user deletes the list of InboxMessageProtocol manually + + @param codes of the list of InboxMessageProtocol.code that the user deleted + */ ++ (void)deleteMessagesWithCodes:(NSArray *)codes; + +/** + Subscribe for messages arriving with push notifications. @warning You need to unsubscribe by calling the removeObserver method, if you don't want to receive notifications + + @param completion - return the collection of the InboxMessages. + */ ++ (id)addObserverForDidReceiveInPushNotificationCompletion:(void (^)(NSArray *> *messagesAdded))completion; + +/** + Subscribe for messages arriving when a message is deleted, added, or updated. @warning You need to unsubscribe by calling the removeObserver method, if you don't want to receive notifications + + @param completion - return the collection of the InboxMessages. + */ ++ (id)addObserverForUpdateInboxMessagesCompletion:(void (^)(NSArray *messagesDeleted, + NSArray *> *messagesAdded, + NSArray *> *messagesUpdated))completion; + +/** + Unsubscribes from notifications + + @param observer - Unsubscribes observer + */ ++ (void)removeObserver:(id)observer; + +@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWLog.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWLog.h new file mode 100644 index 0000000000..7d83acfa70 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWLog.h @@ -0,0 +1,23 @@ +// +// PWLog.h +// Pushwoosh SDK +// (c) Pushwoosh 2016 +// + +#import + +typedef NSString *PWLogLevel NS_EXTENSIBLE_STRING_ENUM; + +extern PWLogLevel const PWLogLevelNone; +extern PWLogLevel const PWLogLevelError; +extern PWLogLevel const PWLogLevelWarning; +extern PWLogLevel const PWLogLevelInfo; +extern PWLogLevel const PWLogLevelDebug; +extern PWLogLevel const PWLogLevelVerbose; + +@interface PWLog : NSObject + ++ (void)setLogsHandler:(void(^)(PWLogLevel level, NSString *description))logsHandler; ++ (void)removeLogsHandler; + +@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaManager.h new file mode 100644 index 0000000000..18e3290466 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaManager.h @@ -0,0 +1,98 @@ +// +// PWRichMediaManager.h +// Pushwoosh SDK +// (c) Pushwoosh 2018 +// + +#import + +typedef NS_ENUM(NSUInteger, PWRichMediaSource) { + /** + RichMedia is presented from push notification. + */ + PWRichMediaSourcePush, + + /** + RichMedia is presented from In-App. + */ + PWRichMediaSourceInApp +}; + + +/* + `PWRichMedia` class represents Rich Media page object. + */ +@interface PWRichMedia: NSObject + +/** + Rich Media presenter type. + */ +@property (nonatomic, readonly) PWRichMediaSource source; + +/** + Content of the Rich Media. For PWRichMediaSourceInApp it's equal to In-App code, for PWRichMediaSourcePush it's equal to Rich Media code. + */ +@property (nonatomic, readonly) NSString *content; + +/** + Checks if PWRichMediaSourceInApp is a required In-App. Always returns YES for PWRichMediaSourcePush. + */ +@property (nonatomic, readonly, getter=isRequired) BOOL required; + +@end + + +@class PWRichMediaManager; + +/** + Interface for Rich Media presentation managing. + */ +@protocol PWRichMediaPresentingDelegate + +@optional + +/** + Checks the delegate whether the Rich Media should be displayed. + */ +- (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia; + +/** + Tells the delegate that Rich Media has been displayed. + */ +- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia; + +/** + Tells the delegate that Rich Media has been closed. + */ +- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia; + +/** + Tells the delegate that error during Rich Media presenting has been occured. + */ +- (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error; + +@end + + +/* + `PWRichMediaManager` class offers access to the singleton-instance of the manager responsible for Rich Media presentation. + */ +@interface PWRichMediaManager : NSObject + +/** + Delegate for Rich Media presentation managing. + */ +@property (nonatomic) id delegate; + +/** + A singleton object that represents the rich media manager. + */ ++ (instancetype)sharedManager; + +/** + Presents the rich media object. + */ +- (void)presentRichMedia:(PWRichMedia *)richMedia; + +@end + diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h new file mode 100644 index 0000000000..8874332c1e --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h @@ -0,0 +1,521 @@ +// +// PushNotificationManager.h +// Pushwoosh SDK +// (c) Pushwoosh 2014 +// + +#import + +#if TARGET_OS_IPHONE +#import +#import +#import +#endif + +#define PUSHWOOSH_VERSION @"5.9.0" + + +@class PushNotificationManager; + +#if TARGET_OS_IPHONE +@class CLLocation; +#endif + +typedef void (^PushwooshGetTagsHandler)(NSDictionary *tags); +typedef void (^PushwooshErrorHandler)(NSError *error); + +/** + `PushNotificationDelegate` protocol defines the methods that can be implemented in the delegate of the `PushNotificationManager` class' singleton object. + These methods provide information about the key events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. + These methods implementation allows to react on these events properly. + */ +@protocol PushNotificationDelegate + +@optional +/** + Tells the delegate that the application has registered with Apple Push Service (APS) successfully. + + @param token A token used for identifying the device with APS. + */ +- (void)onDidRegisterForRemoteNotificationsWithDeviceToken:(NSString *)token; + +/** + Sent to the delegate when Apple Push Service (APS) could not complete the registration process successfully. + + @param error An NSError object encapsulating the information about the reason of the registration failure. Within this method you can define application's behaviour in case of registration failure. + */ +- (void)onDidFailToRegisterForRemoteNotificationsWithError:(NSError *)error; + +/** + Tells the delegate that the push manager has received a remote notification. + + @param pushManager The push manager that received the remote notification. + @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. + The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. +@param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. + */ +- (void)onPushReceived:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; + +/** + Tells the delegate that the user has pressed OK on the push notification. + IMPORTANT: This method is used for backwards compatibility and is deprecated. Please use the `onPushAccepted:withNotification:onStart:` method instead + + @param pushManager The push manager that received the remote notification. + @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. + The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. + Push dictionary sample: + + { + aps = { + alert = "Some text."; + sound = default; + }; + p = 1pb; + } + + */ +- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification DEPRECATED_ATTRIBUTE; + +/** + Tells the delegate that the user has pressed on the push notification banner. + + @param pushManager The push manager that received the remote notification. + @param pushNotification A dictionary that contains information about the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. + The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. + Push dictionary sample: + + { + aps = { + alert = "Some text."; + sound = default; + }; + p = 1pb; + } + + @param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. + */ +- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; + +/** + Tells the delegate that the push manager has received tags from the server. + + @param tags Dictionary representation of received tags. + Dictionary example: + + { + Country = ru; + Language = ru; + } + + */ +- (void)onTagsReceived:(NSDictionary *)tags; + +/** + Sent to the delegate when push manager could not complete the tags receiving process successfully. + + @param error An NSError object that encapsulates information why receiving tags did not succeed. + */ +- (void)onTagsFailedToReceive:(NSError *)error; + +/** + Tells the delegate that In-App with specified code has been closed + + @param code In-App code + */ +- (void)onInAppClosed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); + +/** + Tells the delegate that In-App with specified code has been displayed + + @param code In-App code + */ +- (void)onInAppDisplayed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); + + +#if TARGET_OS_IPHONE +/** + The method will be called on the delegate when the application is launched in response to the user's request to view in-app notification settings. + Add UNAuthorizationOptionProvidesAppNotificationSettings as an option in [PushNotificationManager pushManager].additionalAuthorizationOptions to add a button to inline notification settings view and the notification settings view in Settings. + The notification will be nil when opened from Settings. + + @param pushManager PushNotificationManager instance + @param notification Source notification + */ +- (void)pushManager:(PushNotificationManager *)pushManager openSettingsForNotification:(UNNotification *)notification __IOS_AVAILABLE(12.0); + +#endif + +@end + +/** + `PWTags` class encapsulates the methods for creating tags parameters for sending them to the server. + */ +@interface PWTags : NSObject + +/** + Creates a dictionary for incrementing/decrementing a numeric tag on the server. + + Example: + + NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: + aliasField.text, @"Alias", + [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", + [PWTags incrementalTagWithInteger:5], @"price", + nil]; + + [[PushNotificationManager pushManager] setTags:tags]; + + @param delta Difference that needs to be applied to the tag's counter. + + @return Dictionary, that needs to be sent as the value for the tag + */ ++ (NSDictionary *)incrementalTagWithInteger:(NSInteger)delta; + +@end + +/** + `PushNotificationManager` class offers access to the singleton-instance of the push manager responsible for registering the device with the APS servers, receiving and processing push notifications. + */ +@interface PushNotificationManager : NSObject { +} + +/** + Pushwoosh Application ID. Usually retrieved automatically from Info.plist parameter `Pushwoosh_APPID` + */ +@property (nonatomic, copy, readonly) NSString *appCode; + +/** + Application name. Usually retrieved automatically from Info.plist bundle name (CFBundleDisplayName). Could be used to override bundle name. In addition could be set in Info.plist as `Pushwoosh_APPNAME` parameter. + */ +@property (nonatomic, copy, readonly) NSString *appName; + +/** + `PushNotificationDelegate` protocol delegate that would receive the information about events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. + Pushwoosh Runtime sets it to ApplicationDelegate by default + */ +@property (nonatomic, weak) NSObject *delegate; + +#if TARGET_OS_IPHONE + +/** + Show push notifications alert when push notification is received while the app is running, default is `YES` + */ +@property (nonatomic, assign) BOOL showPushnotificationAlert; + +/** + Authorization options in addition to UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay. + */ +@property (nonatomic) UNAuthorizationOptions additionalAuthorizationOptions __IOS_AVAILABLE(12.0); + +#endif + +/** + Returns push notification payload if the app was started in response to push notification or null otherwise + */ +@property (nonatomic, copy, readonly) NSDictionary *launchNotification; + +#if TARGET_OS_IPHONE + +/** + Returns UNUserNotificationCenterDelegate that handles foreground push notifications on iOS10 + */ +@property (nonatomic, strong, readonly) id notificationCenterDelegate; + +#else + +@property (nonatomic, strong, readonly) id notificationCenterDelegate; + +#endif + +/** + Initializes PushNotificationManager. Usually called by Pushwoosh Runtime internally. + @param appCode Pushwoosh App ID. + @param appName Application name. + */ ++ (void)initializeWithAppCode:(NSString *)appCode appName:(NSString *)appName; + +/** + Returns an object representing the current push manager. + + @return A singleton object that represents the push manager. + */ ++ (PushNotificationManager *)pushManager; + +/** + Registers for push notifications. By default registeres for "UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert" flags. + Automatically detects if you have "newsstand-content" in "UIBackgroundModes" and adds "UIRemoteNotificationTypeNewsstandContentAvailability" flag. + */ +- (void)registerForPushNotifications; + +/** + Unregisters from push notifications. + */ +- (void)unregisterForPushNotificationsWithCompletion:(void (^)(NSError *error))completion; + +/** + Deprecated. Use unregisterForPushNotificationsWithCompletion: method instead + */ +- (void)unregisterForPushNotifications __attribute__((deprecated)); + +/** + Deprecated. Use initializeWithAppCode:appName: method instead + */ +- (instancetype)initWithApplicationCode:(NSString *)appCode appName:(NSString *)appName __attribute__((deprecated)); + +#if TARGET_OS_IPHONE + +/** + Deprecated. Use initializeWithAppCode:appName: method instead + */ +- (id)initWithApplicationCode:(NSString *)appCode navController:(UIViewController *)navController appName:(NSString *)appName __attribute__((deprecated)); + +/** + Sends geolocation to the server for GeoFencing push technology. Called internally, please use `startLocationTracking` and `stopLocationTracking` functions. + + @param location Location to be sent. + */ +- (void)sendLocation:(CLLocation *)location; + +/** + Start location tracking. + */ +- (void)startLocationTracking; + +/** + Stops location tracking + */ +- (void)stopLocationTracking; + +#endif + +/** + Send tags to server. Tag names have to be created in the Pushwoosh Control Panel. Possible tag types: Integer, String, Incremental (integer only), List tags (array of values). + + Example: + + NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: + aliasField.text, @"Alias", + [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", + [PWTags incrementalTagWithInteger:5], @"price", + [NSArray arrayWithObjects:@"Item1", @"Item2", @"Item3", nil], @"List", + nil]; + + [[PushNotificationManager pushManager] setTags:tags]; + + @param tags Dictionary representation of tags to send. + */ +- (void)setTags:(NSDictionary *)tags; + +/** + Send tags to server with completion block. If setTags succeeds competion is called with nil argument. If setTags fails completion is called with error. + */ +- (void)setTags:(NSDictionary *)tags withCompletion:(void (^)(NSError *error))completion; + +/** + Get tags from the server. Calls delegate method `onTagsReceived:` or `onTagsFailedToReceive:` depending on the results. + */ +- (void)loadTags; + +/** + Get tags from server. Calls delegate method if exists and handler (block). + + @param successHandler The block is executed on the successful completion of the request. This block has no return value and takes one argument: the dictionary representation of the recieved tags. + Example of the dictionary representation of the received tags: + + { + Country = ru; + Language = ru; + } + + @param errorHandler The block is executed on the unsuccessful completion of the request. This block has no return value and takes one argument: the error that occurred during the request. + */ +- (void)loadTags:(PushwooshGetTagsHandler)successHandler error:(PushwooshErrorHandler)errorHandler; + +/** + Informs the Pushwoosh about the app being launched. Usually called internally by SDK Runtime. + */ +- (void)sendAppOpen; + +/** + Sends current badge value to server. Called internally by SDK Runtime when `UIApplication` `setApplicationBadgeNumber:` is set. This function is used for "auto-incremeting" badges to work. + This way Pushwoosh server can know what current badge value is set for the application. + + @param badge Current badge value. + */ +- (void)sendBadges:(NSInteger)badge; + ++ (NSString *)pushwooshVersion; + +#if TARGET_OS_IPHONE +/** + Sends in-app purchases to Pushwoosh. Use in paymentQueue:updatedTransactions: payment queue method (see example). + + Example: + + - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { + [[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions]; + } + + @param transactions Array of SKPaymentTransaction items as received in the payment queue. + */ +- (void)sendSKPaymentTransactions:(NSArray *)transactions; +#endif + +/** + Tracks individual in-app purchase. See recommended `sendSKPaymentTransactions:` method. + + @param productIdentifier purchased product ID + @param price price for the product + @param currencyCode currency of the price (ex: @"USD") + @param date time of the purchase (ex: [NSDate now]) + */ +- (void)sendPurchase:(NSString *)productIdentifier withPrice:(NSDecimalNumber *)price currencyCode:(NSString *)currencyCode andDate:(NSDate *)date; + +/** + Gets current push token. + + @return Current push token. May be nil if no push token is available yet. + */ +- (NSString *)getPushToken; + +/** + Gets HWID. Unique device identifier that used in all API calls with Pushwoosh. + This is identifierForVendor for iOS >= 7. + + @return Unique device identifier. + */ +- (NSString *)getHWID; + +- (void)handlePushRegistration:(NSData *)devToken; +- (void)handlePushRegistrationString:(NSString *)deviceID; + +- (void)handlePushRegistrationFailure:(NSError *)error; + +//If the push is received while the app is running. Call it only for iOS version < 10. For iOS 10 and higher use notificationCenterDelegate. +- (BOOL)handlePushReceived:(NSDictionary *)userInfo; + +/** + Gets APN payload from push notifications dictionary. + + Example: + + - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { + NSDictionary * apnPayload = [[PushNotificationsManager pushManager] getApnPayload:pushNotification]; + NSLog(@"%@", apnPayload); + } + + For Push dictionary sample: + + { + aps = { + alert = "Some text."; + sound = default; + }; + p = 1pb; + } + + Result is: + + { + alert = "Some text."; + sound = default; + }; + + @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` + */ +- (NSDictionary *)getApnPayload:(NSDictionary *)pushNotification; + +/** + Gets custom JSON string data from push notifications dictionary as specified in Pushwoosh Control Panel. + + Example: + + - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { + NSString * customData = [[PushNotificationsManager pushManager] getCustomPushData:pushNotification]; + NSLog(@"%@", customData); + } + + @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` + */ +- (NSString *)getCustomPushData:(NSDictionary *)pushNotification; + +/** + The same as getCustomPushData but returns NSDictionary rather than JSON string (converts JSON string into NSDictionary). + */ +- (NSDictionary *)getCustomPushDataAsNSDict:(NSDictionary *)pushNotification; + +/** + Returns dictionary with enabled remove notificaton types. + Example enabled push: + { + enabled = 1; + pushAlert = 1; + pushBadge = 1; + pushSound = 1; + type = 7; + } + + where "type" field is UIUserNotificationType + + Disabled push: + { + enabled = 1; + pushAlert = 0; + pushBadge = 0; + pushSound = 0; + type = 0; + } + + Note: In the latter example "enabled" field means that device can receive push notification but could not display alerts (ex: silent push) + */ ++ (NSMutableDictionary *)getRemoteNotificationStatus; + +/** + Clears the notifications from the notification center. + */ ++ (void)clearNotificationCenter; + +/** + Set User indentifier. This could be Facebook ID, username or email, or any other user ID. + This allows data and events to be matched across multiple user devices. + + Deprecated. Use PWInAppManager setUserId method instead + */ +- (void)setUserId:(NSString *)userId __attribute__ ((deprecated));; + +/** + Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. + + @param oldUserId source user + @param newUserId destination user + @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId + @param completion callback + + Deprecated. Use PWInAppManager mergeUserId method instead + */ +- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); + +/** + Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. + + Example: + + [[PushNotificationManager pushManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; + [[PushNotificationManager pushManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; + + @param event name of the event + @param attributes NSDictionary of event attributes + @param completion function to call after posting event + + Deprecated. Use PWInAppManager postEvent method instead + */ +- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); + +/** + See `postEvent:withAttributes:completion:` + + Deprecated. Use PWInAppManager postEvent method instead + */ +- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes __attribute__ ((deprecated)); + +@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h new file mode 100644 index 0000000000..88d10edd58 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h @@ -0,0 +1,14 @@ +// +// Pushwoosh.h +// Pushwoosh SDK +// (c) Pushwoosh 2016 +// + +#import "PushNotificationManager.h" +#import "PWInAppManager.h" +#import "PWLog.h" +#import "PWGDPRManager.h" + +#if TARGET_OS_IPHONE + #import "PWInbox.h" +#endif diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Pushwoosh b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Pushwoosh new file mode 100644 index 0000000000..1924275e37 Binary files /dev/null and b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Pushwoosh differ diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/Current b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/Current new file mode 120000 index 0000000000..8c7e5a667f --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/iphone/Maps/Pods/Pushwoosh/LICENSE b/iphone/Maps/Pods/Pushwoosh/LICENSE new file mode 100644 index 0000000000..0f64c06476 --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.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: + +(i) the original and/or modified Software should be used exclusively to work with Pushwoosh services, + +(ii) 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/iphone/Maps/Pods/Pushwoosh/README.md b/iphone/Maps/Pods/Pushwoosh/README.md new file mode 100644 index 0000000000..8405dba19e --- /dev/null +++ b/iphone/Maps/Pods/Pushwoosh/README.md @@ -0,0 +1,21 @@ +Pushwoosh iOS SDK +===================== + +[![GitHub release](https://img.shields.io/github/release/Pushwoosh/pushwoosh-ios-sdk.svg?style=flat-square)](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases) +[![CocoaPods compatible](https://img.shields.io/cocoapods/v/Pushwoosh.svg)](https://cocoapods.org/?q=pushwoosh) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +[![Guide](https://img.shields.io/badge/guide-latest-brightgreen.svg?style=flat-square)](http://docs.pushwoosh.com/docs/native-ios-sdk) +[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat-square)](https://github.com/Pushwoosh/pushwoosh-ios-sdk/tree/master/Documentation) + +The guide for SDK integration is available on Pushwoosh website: +http://docs.pushwoosh.com/docs/native-ios-sdk + +The sample project is available here: +https://github.com/Pushwoosh/pushwoosh-ios-sdk/tree/master/Samples/iPhone + +Documentation: +https://github.com/Pushwoosh/pushwoosh-ios-sdk/tree/master/Documentation + +Pushwoosh team +http://www.pushwoosh.com diff --git a/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist new file mode 100644 index 0000000000..d135faf189 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-dummy.m b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-dummy.m new file mode 100644 index 0000000000..aa2e50d611 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ActionSheetPicker_3_0 : NSObject +@end +@implementation PodsDummy_ActionSheetPicker_3_0 +@end diff --git a/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch new file mode 100644 index 0000000000..beb2a24418 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-umbrella.h b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-umbrella.h new file mode 100644 index 0000000000..2f1af7c33a --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-umbrella.h @@ -0,0 +1,27 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "AbstractActionSheetPicker.h" +#import "ActionSheetCustomPicker.h" +#import "ActionSheetCustomPickerDelegate.h" +#import "ActionSheetDatePicker.h" +#import "ActionSheetDistancePicker.h" +#import "ActionSheetLocalePicker.h" +#import "ActionSheetMultipleStringPicker.h" +#import "ActionSheetPicker.h" +#import "ActionSheetStringPicker.h" +#import "DistancePickerView.h" +#import "SWActionSheet.h" + +FOUNDATION_EXPORT double ActionSheetPicker_3_0VersionNumber; +FOUNDATION_EXPORT const unsigned char ActionSheetPicker_3_0VersionString[]; + diff --git a/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap new file mode 100644 index 0000000000..49be3be91e --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap @@ -0,0 +1,6 @@ +framework module ActionSheetPicker_3_0 { + umbrella header "ActionSheetPicker-3.0-umbrella.h" + + export * + module * { export * } +} diff --git a/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.xcconfig b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.xcconfig new file mode 100644 index 0000000000..bc56a6ec7b --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -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}/ActionSheetPicker-3.0 +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.xcconfig b/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.xcconfig new file mode 100644 index 0000000000..f560613893 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppsFlyerFramework +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AppsFlyerFramework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "AdSupport" -framework "Security" -framework "SystemConfiguration" -framework "iAd" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppsFlyerFramework +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-Info.plist b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-Info.plist new file mode 100644 index 0000000000..62cf7b2f99 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.9.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-dummy.m b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-dummy.m new file mode 100644 index 0000000000..aeabf61a7c --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts : NSObject +@end +@implementation PodsDummy_Bolts +@end diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-prefix.pch b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-prefix.pch new file mode 100644 index 0000000000..beb2a24418 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-umbrella.h b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-umbrella.h new file mode 100644 index 0000000000..8a92beb888 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-umbrella.h @@ -0,0 +1,33 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "BFAppLink.h" +#import "BFAppLinkNavigation.h" +#import "BFAppLinkResolving.h" +#import "BFAppLinkReturnToRefererController.h" +#import "BFAppLinkReturnToRefererView.h" +#import "BFAppLinkTarget.h" +#import "BFMeasurementEvent.h" +#import "BFURL.h" +#import "BFWebViewAppLinkResolver.h" +#import "BFCancellationToken.h" +#import "BFCancellationTokenRegistration.h" +#import "BFCancellationTokenSource.h" +#import "BFExecutor.h" +#import "BFGeneric.h" +#import "BFTask.h" +#import "BFTaskCompletionSource.h" +#import "Bolts.h" + +FOUNDATION_EXPORT double BoltsVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; + diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.modulemap b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.modulemap new file mode 100644 index 0000000000..712e2c8de7 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.modulemap @@ -0,0 +1,6 @@ +framework module Bolts { + umbrella header "Bolts-umbrella.h" + + export * + module * { export * } +} diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.xcconfig b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.xcconfig new file mode 100644 index 0000000000..a01766d7d2 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.xcconfig @@ -0,0 +1,8 @@ +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 +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist new file mode 100644 index 0000000000..7ba8bd35fc --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 4.42.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-dummy.m b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-dummy.m new file mode 100644 index 0000000000..eb4f9dff86 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_FBSDKCoreKit : NSObject +@end +@implementation PodsDummy_FBSDKCoreKit +@end diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch new file mode 100644 index 0000000000..beb2a24418 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h new file mode 100644 index 0000000000..d8cdcdbc3b --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h @@ -0,0 +1,45 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBSDKAccessToken.h" +#import "FBSDKApplicationDelegate.h" +#import "FBSDKButton.h" +#import "FBSDKConstants.h" +#import "FBSDKCopying.h" +#import "FBSDKCoreKit.h" +#import "FBSDKGraphErrorRecoveryProcessor.h" +#import "FBSDKGraphRequest.h" +#import "FBSDKGraphRequestConnection.h" +#import "FBSDKGraphRequestDataAttachment.h" +#import "FBSDKMacros.h" +#import "FBSDKMeasurementEvent.h" +#import "FBSDKMutableCopying.h" +#import "FBSDKProfile.h" +#import "FBSDKProfilePictureView.h" +#import "FBSDKSettings.h" +#import "FBSDKTestUsersManager.h" +#import "FBSDKURL.h" +#import "FBSDKUtility.h" +#import "FBSDKAppEvents.h" +#import "FBSDKAppLink.h" +#import "FBSDKAppLinkNavigation.h" +#import "FBSDKAppLinkResolver.h" +#import "FBSDKAppLinkResolving.h" +#import "FBSDKAppLinkReturnToRefererController.h" +#import "FBSDKAppLinkReturnToRefererView.h" +#import "FBSDKAppLinkTarget.h" +#import "FBSDKAppLinkUtility.h" +#import "FBSDKWebViewAppLinkResolver.h" + +FOUNDATION_EXPORT double FBSDKCoreKitVersionNumber; +FOUNDATION_EXPORT const unsigned char FBSDKCoreKitVersionString[]; + diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap new file mode 100644 index 0000000000..f9847ad6f8 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap @@ -0,0 +1,6 @@ +framework module FBSDKCoreKit { + umbrella header "FBSDKCoreKit-umbrella.h" + + export * + module * { export * } +} diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig new file mode 100644 index 0000000000..f0b961b943 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_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}/FBSDKCoreKit +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist new file mode 100644 index 0000000000..7ba8bd35fc --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 4.42.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-dummy.m b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-dummy.m new file mode 100644 index 0000000000..ff16b395f4 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_FBSDKLoginKit : NSObject +@end +@implementation PodsDummy_FBSDKLoginKit +@end diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch new file mode 100644 index 0000000000..beb2a24418 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-umbrella.h b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-umbrella.h new file mode 100644 index 0000000000..b68b38c507 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-umbrella.h @@ -0,0 +1,26 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FBSDKDeviceLoginCodeInfo.h" +#import "FBSDKDeviceLoginManager.h" +#import "FBSDKDeviceLoginManagerResult.h" +#import "FBSDKLoginButton.h" +#import "FBSDKLoginConstants.h" +#import "FBSDKLoginKit.h" +#import "FBSDKLoginManager.h" +#import "FBSDKLoginManagerLoginResult.h" +#import "FBSDKLoginTooltipView.h" +#import "FBSDKTooltipView.h" + +FOUNDATION_EXPORT double FBSDKLoginKitVersionNumber; +FOUNDATION_EXPORT const unsigned char FBSDKLoginKitVersionString[]; + diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap new file mode 100644 index 0000000000..ce4ca1eba8 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap @@ -0,0 +1,6 @@ +framework module FBSDKLoginKit { + umbrella header "FBSDKLoginKit-umbrella.h" + + export * + module * { export * } +} diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig new file mode 100644 index 0000000000..1f33b135dc --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig @@ -0,0 +1,11 @@ +CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_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}/FBSDKLoginKit +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist new file mode 100644 index 0000000000..2243fe6e27 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown new file mode 100644 index 0000000000..004765fd82 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown @@ -0,0 +1,135 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## ActionSheetPicker-3.0 + +Copyright (c) 2011, Tim Cinel (see AUTHORS) +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 of the 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 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. + + +## AppsFlyerFramework + +Copyright 2014 AppsFlyer Ltd. All rights reserved. + +## 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. + +## FBSDKCoreKit + +Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. + +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. 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. + + +## FBSDKLoginKit + +Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. + +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. 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. + + +## Pushwoosh + +Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.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: + +(i) the original and/or modified Software should be used exclusively to work with Pushwoosh services, + +(ii) 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/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist new file mode 100644 index 0000000000..2cd28af6fa --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist @@ -0,0 +1,197 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011, Tim Cinel (see AUTHORS) +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 of the <organization> 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 <COPYRIGHT HOLDER> 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 + ActionSheetPicker-3.0 + Type + PSGroupSpecifier + + + FooterText + Copyright 2014 AppsFlyer Ltd. All rights reserved. + License + Proprietary + Title + AppsFlyerFramework + 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 + Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. + +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. 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 + Facebook Platform License + Title + FBSDKCoreKit + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2014-present, Facebook, Inc. 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 Facebook. + +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. 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 + Facebook Platform License + Title + FBSDKLoginKit + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.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: + +(i) the original and/or modified Software should be used exclusively to work with Pushwoosh services, + +(ii) 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 + Pushwoosh + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-dummy.m b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-dummy.m new file mode 100644 index 0000000000..3dfc603616 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_MAPS_ME : NSObject +@end +@implementation PodsDummy_Pods_MAPS_ME +@end diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh new file mode 100755 index 0000000000..6d1e64af7f --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh @@ -0,0 +1,175 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework" +fi +if [[ "$CONFIGURATION" == "Production Full" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-umbrella.h b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-umbrella.h new file mode 100644 index 0000000000..4e3930f292 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-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_MAPS_MEVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_MAPS_MEVersionString[]; + diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig new file mode 100644 index 0000000000..aa194e6be2 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig @@ -0,0 +1,9 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/Pushwoosh/Framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -ObjC -l"stdc++" -l"z" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "Bolts" -framework "CoreLocation" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Pushwoosh" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" +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 diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap new file mode 100644 index 0000000000..d1a7456f84 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap @@ -0,0 +1,6 @@ +framework module Pods_MAPS_ME { + umbrella header "Pods-MAPS.ME-umbrella.h" + + export * + module * { export * } +} diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig new file mode 100644 index 0000000000..aa194e6be2 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig @@ -0,0 +1,9 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/Pushwoosh/Framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -ObjC -l"stdc++" -l"z" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "Bolts" -framework "CoreLocation" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Pushwoosh" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" +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 diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig new file mode 100644 index 0000000000..aa194e6be2 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig @@ -0,0 +1,9 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/Pushwoosh/Framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -ObjC -l"stdc++" -l"z" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "Bolts" -framework "CoreLocation" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Pushwoosh" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" +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 diff --git a/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.xcconfig b/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.xcconfig new file mode 100644 index 0000000000..c63d9feb2c --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Pushwoosh +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Pushwoosh/Framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -ObjC -l"stdc++" -l"z" -framework "CoreLocation" -framework "Security" -framework "StoreKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Pushwoosh +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/iphone/Maps/UI/Search/Filters/MWMSearchHotelsFilterViewController.mm b/iphone/Maps/UI/Search/Filters/MWMSearchHotelsFilterViewController.mm index 7b9aebcdfa..ff79905105 100644 --- a/iphone/Maps/UI/Search/Filters/MWMSearchHotelsFilterViewController.mm +++ b/iphone/Maps/UI/Search/Filters/MWMSearchHotelsFilterViewController.mm @@ -1,5 +1,5 @@ #import "MWMSearchHotelsFilterViewController.h" -#import +#import "ActionSheetPicker.h" #import "MWMEye.h" #import "MWMSearchFilterViewController_Protected.h" #import "Statistics.h" -- cgit v1.2.3