diff --git a/Podfile b/Podfile old mode 100644 new mode 100755 index a831e3ffa5..13e0f51c91 --- a/Podfile +++ b/Podfile @@ -14,7 +14,7 @@ def ui_pods end def diff_pods - pod 'DifferenceKit', '~> 1.0' + pod 'DifferenceKit/Core', '~> 1.1.3' end def shared_pods @@ -32,17 +32,17 @@ def shared_pods pod 'RocketChatViewController', :git => 'https://github.com/RocketChat/RocketChatViewController' pod 'MobilePlayer', :git => 'https://github.com/RocketChat/RCiOSMobilePlayer' pod 'SimpleImageViewer', :git => 'https://github.com/cardoso/SimpleImageViewer.git' - pod 'SwipeCellKit' + pod 'SwipeCellKit', '~> 2.7.1' ui_pods # Text Processing - pod 'RCMarkdownParser', :git => 'https://github.com/RocketChat/RCMarkdownParser.git' + pod "RCMarkdownParser" # Database database_pods # Network - pod 'Nuke', '~> 7.6' + pod 'Nuke', '~> 7.3' pod 'Nuke-FLAnimatedImage-Plugin' pod 'Starscream', '~> 3' pod 'ReachabilitySwift' @@ -72,7 +72,8 @@ target 'Rocket.ChatTests' do end post_install do |installer| - swift42Targets = ['RCMarkdownParser', 'MobilePlayer'] +# swift3Targets = ['MobilePlayer', 'RCMarkdownParser'] + swift42Targets = ['SwipeCellKit', 'MobilePlayer', 'RCMarkdownParser'] installer.pods_project.targets.each do |target| target.build_configurations.each do |config| @@ -85,6 +86,13 @@ post_install do |installer| config.build_settings['SWIFT_OPTIMIZATION_LEVEL'] = '-Owholemodule' end end + +# if swift3Targets.include? target.name +# target.build_configurations.each do |config| +# config.build_settings['SWIFT_VERSION'] = '3.1' +# end +# end + if swift42Targets.include? target.name target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '4.2' diff --git a/Podfile.lock b/Podfile.lock old mode 100644 new mode 100755 index 5fe29f4436..0fbb8a28b9 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,106 +1,120 @@ PODS: - 1PasswordExtension (1.8.5) - - Crashlytics (3.11.1): - - Fabric (~> 1.8.1) + - Crashlytics (3.14.0): + - Fabric (~> 1.10.2) - DifferenceKit (1.1.3): - DifferenceKit/Core (= 1.1.3) - DifferenceKit/UIKitExtension (= 1.1.3) - DifferenceKit/Core (1.1.3) - DifferenceKit/UIKitExtension (1.1.3): - DifferenceKit/Core - - Fabric (1.8.2) - - Firebase/Core (5.12.0): + - Fabric (1.10.2) + - Firebase/Core (6.11.0): - Firebase/CoreOnly - - FirebaseAnalytics (= 5.3.0) - - Firebase/CoreOnly (5.12.0): - - FirebaseCore (= 5.1.7) - - FirebaseAnalytics (5.3.0): - - FirebaseCore (~> 5.1) - - FirebaseInstanceID (~> 3.3) - - GoogleAppMeasurement (~> 5.3) - - GoogleUtilities/AppDelegateSwizzler (~> 5.2) - - GoogleUtilities/MethodSwizzler (~> 5.2) - - GoogleUtilities/Network (~> 5.2) - - "GoogleUtilities/NSData+zlib (~> 5.2)" - - nanopb (~> 0.3) - - FirebaseCore (5.1.7): - - GoogleUtilities/Logger (~> 5.2) - - FirebaseInstanceID (3.3.0): - - FirebaseCore (~> 5.1) - - GoogleUtilities/Environment (~> 5.3) - - GoogleUtilities/UserDefaults (~> 5.3) + - FirebaseAnalytics (= 6.1.3) + - Firebase/CoreOnly (6.11.0): + - FirebaseCore (= 6.3.2) + - FirebaseAnalytics (6.1.3): + - FirebaseCore (~> 6.3) + - FirebaseInstanceID (~> 4.2) + - GoogleAppMeasurement (= 6.1.3) + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (~> 0.3.901) + - FirebaseCore (6.3.2): + - FirebaseCoreDiagnostics (~> 1.0) + - FirebaseCoreDiagnosticsInterop (~> 1.0) + - GoogleUtilities/Environment (~> 6.2) + - GoogleUtilities/Logger (~> 6.2) + - FirebaseCoreDiagnostics (1.1.1): + - FirebaseCoreDiagnosticsInterop (~> 1.0) + - GoogleDataTransportCCTSupport (~> 1.0) + - GoogleUtilities/Environment (~> 6.2) + - GoogleUtilities/Logger (~> 6.2) + - nanopb (~> 0.3.901) + - FirebaseCoreDiagnosticsInterop (1.0.0) + - FirebaseInstanceID (4.2.6): + - FirebaseCore (~> 6.0) + - GoogleUtilities/Environment (~> 6.0) + - GoogleUtilities/UserDefaults (~> 6.0) - FLAnimatedImage (1.0.12) - FLEX (2.4.0) - - GoogleAppMeasurement (5.3.0): - - GoogleUtilities/AppDelegateSwizzler (~> 5.2) - - GoogleUtilities/MethodSwizzler (~> 5.2) - - GoogleUtilities/Network (~> 5.2) - - "GoogleUtilities/NSData+zlib (~> 5.2)" - - nanopb (~> 0.3) - - GoogleUtilities/AppDelegateSwizzler (5.3.4): + - GoogleAppMeasurement (6.1.3): + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (~> 0.3.901) + - GoogleDataTransport (3.0.1) + - GoogleDataTransportCCTSupport (1.2.1): + - GoogleDataTransport (~> 3.0) + - nanopb (~> 0.3.901) + - GoogleUtilities/AppDelegateSwizzler (6.3.1): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (5.3.4) - - GoogleUtilities/Logger (5.3.4): + - GoogleUtilities/Environment (6.3.1) + - GoogleUtilities/Logger (6.3.1): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (5.3.4): + - GoogleUtilities/MethodSwizzler (6.3.1): - GoogleUtilities/Logger - - GoogleUtilities/Network (5.3.4): + - GoogleUtilities/Network (6.3.1): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (5.3.4)" - - GoogleUtilities/Reachability (5.3.4): + - "GoogleUtilities/NSData+zlib (6.3.1)" + - GoogleUtilities/Reachability (6.3.1): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (5.3.4): + - GoogleUtilities/UserDefaults (6.3.1): - GoogleUtilities/Logger - MBProgressHUD (1.1.0) - MobilePlayer (1.4.0) - - nanopb (0.3.901): - - nanopb/decode (= 0.3.901) - - nanopb/encode (= 0.3.901) - - nanopb/decode (0.3.901) - - nanopb/encode (0.3.901) + - nanopb (0.3.9011): + - nanopb/decode (= 0.3.9011) + - nanopb/encode (= 0.3.9011) + - nanopb/decode (0.3.9011) + - nanopb/encode (0.3.9011) - Nuke (7.6.3) - - Nuke-FLAnimatedImage-Plugin (6.0): + - Nuke-FLAnimatedImage-Plugin (6.1): - FLAnimatedImage (~> 1.0) - Nuke (~> 7.5) - - OAuthSwift (1.2.2) - - RCMarkdownParser (3.0.7) - - ReachabilitySwift (4.2.1) - - Realm (3.12.0): - - Realm/Headers (= 3.12.0) - - Realm/Headers (3.12.0) - - RealmSwift (3.12.0): - - Realm (= 3.12.0) - - RocketChatViewController (1.0.0): - - RocketChatViewController/Composer (= 1.0.0) - - RocketChatViewController/ViewController (= 1.0.0) - - RocketChatViewController/Composer (1.0.0) - - RocketChatViewController/ViewController (1.0.0): - - DifferenceKit (~> 1.0) + - OAuthSwift (2.0.0) + - RCMarkdownParser (3.0.6) + - ReachabilitySwift (5.0.0) + - Realm (3.20.0): + - Realm/Headers (= 3.20.0) + - Realm/Headers (3.20.0) + - RealmSwift (3.20.0): + - Realm (= 3.20.0) + - RocketChatViewController (1.0.1): + - RocketChatViewController/Composer (= 1.0.1) + - RocketChatViewController/ViewController (= 1.0.1) + - RocketChatViewController/Composer (1.0.1) + - RocketChatViewController/ViewController (1.0.1): + - DifferenceKit (~> 1.1) - semver (1.1.0) - SimpleImageViewer (1.2.0): - FLAnimatedImage - - Starscream (3.0.6) - - SwiftLint (0.27.0) - - SwiftyJSON (4.2.0) - - SwipeCellKit (2.6.0) + - Starscream (3.1.1) + - SwiftLint (0.36.0) + - SwiftyJSON (5.0.0) + - SwipeCellKit (2.7.1) DEPENDENCIES: - 1PasswordExtension - Crashlytics - - DifferenceKit (~> 1.0) + - DifferenceKit/Core (~> 1.1.3) - Fabric - Firebase/Core - FLEX (~> 2.0) - MBProgressHUD (~> 1.1.0) - MobilePlayer (from `https://github.com/RocketChat/RCiOSMobilePlayer`) - - Nuke (~> 7.6) + - Nuke (~> 7.3) - Nuke-FLAnimatedImage-Plugin - OAuthSwift - - RCMarkdownParser (from `https://github.com/RocketChat/RCMarkdownParser.git`) + - RCMarkdownParser - ReachabilitySwift - RealmSwift - RocketChatViewController (from `https://github.com/RocketChat/RocketChatViewController`) @@ -109,10 +123,10 @@ DEPENDENCIES: - Starscream (~> 3) - SwiftLint - SwiftyJSON - - SwipeCellKit + - SwipeCellKit (~> 2.7.1) SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - 1PasswordExtension - Crashlytics - DifferenceKit @@ -120,16 +134,21 @@ SPEC REPOS: - Firebase - FirebaseAnalytics - FirebaseCore + - FirebaseCoreDiagnostics + - FirebaseCoreDiagnosticsInterop - FirebaseInstanceID - FLAnimatedImage - FLEX - GoogleAppMeasurement + - GoogleDataTransport + - GoogleDataTransportCCTSupport - GoogleUtilities - MBProgressHUD - nanopb - Nuke - Nuke-FLAnimatedImage-Plugin - OAuthSwift + - RCMarkdownParser - ReachabilitySwift - Realm - RealmSwift @@ -142,8 +161,6 @@ SPEC REPOS: EXTERNAL SOURCES: MobilePlayer: :git: https://github.com/RocketChat/RCiOSMobilePlayer - RCMarkdownParser: - :git: https://github.com/RocketChat/RCMarkdownParser.git RocketChatViewController: :git: https://github.com/RocketChat/RocketChatViewController SimpleImageViewer: @@ -153,11 +170,8 @@ CHECKOUT OPTIONS: MobilePlayer: :commit: 7ecd958711875a302d3ccfcb2607488b6fbde11b :git: https://github.com/RocketChat/RCiOSMobilePlayer - RCMarkdownParser: - :commit: 7c4ec046817df378b694bebdbcfe3565869ce82e - :git: https://github.com/RocketChat/RCMarkdownParser.git RocketChatViewController: - :commit: ff8b2f080e05e10286f1d84304f0713375c3f952 + :commit: 20b09477f1e15173c10b99a8b67e78b04102546c :git: https://github.com/RocketChat/RocketChatViewController SimpleImageViewer: :commit: 8222c338de0f285ca0c2d556c5d8dedd4a365b52 @@ -165,35 +179,39 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: 1PasswordExtension: 0e95bdea64ec8ff2f4f693be5467a09fac42a83d - Crashlytics: ca7ab4bc304aa216bdc2e4c1a96389ee77252203 + Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df DifferenceKit: 5018791b6c1fc839921a3c171a0a539ace6ea60c - Fabric: d2b22f443ba195d8a7cc204da230977c72733b40 - Firebase: 9190018e296139d938b99521cde0c15a6e8d2946 - FirebaseAnalytics: 63202d2665de4e6adcbdce189135255d8b5962ba - FirebaseCore: 027d350adc039aa5483357c6f56556f117c5170e - FirebaseInstanceID: e2fa4cb35ef5558c200f7f0ad8a53e212215f93e + Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74 + Firebase: bc9cfc7a96c73268656d5aaab453ff1b4b530e0e + FirebaseAnalytics: 0e3ecff2c5d86070f7d4325e21f1edabfbd558dc + FirebaseCore: beeff42c07c30ea94702471d99db2089b594fbbd + FirebaseCoreDiagnostics: af29e43048607588c050889d19204f4d7b758c9f + FirebaseCoreDiagnosticsInterop: 6829da2b8d1fc795ff1bd99df751d3788035d2cb + FirebaseInstanceID: d0eafcd8bdbd3447cd694594734078c3e3e77d8b FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31 FLEX: bd1a39e55b56bb413b6f1b34b3c10a0dc44ef079 - GoogleAppMeasurement: 5029d78f2b438bd30ffb44e6c558b57c21622727 - GoogleUtilities: abb092d2c12e817fa3e0e7b274987dd72fb86ec3 + GoogleAppMeasurement: 434cc7be25e71dc04b8d0e3079125127b330e84a + GoogleDataTransport: 166f9b9f82cbf60a204e8fe2daa9db3e3ec1fb15 + GoogleDataTransportCCTSupport: f6ab1962e9dc05ab1fb938b795e5b310209edeec + GoogleUtilities: f895fde57977df4e0233edda0dbeac490e3703b6 MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 MobilePlayer: 6c1df67588b247f80554ba60e67734215ab31a87 - nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 + nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd Nuke: 44130e95e09463f8773ae4b96b90de1eba6b3350 - Nuke-FLAnimatedImage-Plugin: e4c39d13061a08ac0bdcb0cd7a23882f4a43f4a6 - OAuthSwift: 27b34fe80b76b67cd8f45571e0be2432bc9f6de1 - RCMarkdownParser: f107c58b83065d001e20c988443e6eab9c0a1e26 - ReachabilitySwift: 35720ffea59c1c76d15f885be77fd33e33985427 - Realm: cdaef23c4ddb36ab1ddffed23f5a7f3332fc5585 - RealmSwift: 5576324033f0aa5ef1e0a839a3da2281dff47a7f - RocketChatViewController: 8c9fa96502913d268bcecf6d15830f1ffd711e7b + Nuke-FLAnimatedImage-Plugin: bee60907311da45dd291463f41a176d50de68122 + OAuthSwift: 6805456763cf1c7ae0c16765257ed430b7aacae7 + RCMarkdownParser: 518b616a4f48bb02247243544d4fd55c048288a4 + ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + Realm: 8b2ca5bc6479a91f379b6b42b5922e396cd5ba5a + RealmSwift: 1949ef26a279e1845bd51d591b9103adfcd121df + RocketChatViewController: ab532fa2810a165dc4f8e79a337253c09434cce6 semver: 11ae3bc4a6036efbc86b5863ef5fa32c065c8bbd SimpleImageViewer: 6ed0d2acf7c166a5b4e795bccc7b9ea1b225ff9b - Starscream: ef3ece99d765eeccb67de105bfa143f929026cf5 - SwiftLint: 3207c1faa2240bf8973b191820a116113cd11073 - SwiftyJSON: c4bcba26dd9ec7a027fc8eade48e2c911f229e96 - SwipeCellKit: 935ca28c187ec6e1ffb2b578cf8ddca842bfdcbb + Starscream: 4bb2f9942274833f7b4d296a55504dcfc7edb7b0 + SwiftLint: fc9859e4e1752340664851f667bb1898b9c90114 + SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7 + SwipeCellKit: 3972254a826da74609926daf59b08d6c72e619ea -PODFILE CHECKSUM: 5e8b4d7a4a0d585c2085855ac86f7b4bf26230b7 +PODFILE CHECKSUM: 073c49c07817379e9a38016e18fbd1c604474b9a -COCOAPODS: 1.6.1 +COCOAPODS: 1.5.3 diff --git a/Pods/Crashlytics/README.md b/Pods/Crashlytics/README.md index 2715a06b7c..996af5078b 100644 --- a/Pods/Crashlytics/README.md +++ b/Pods/Crashlytics/README.md @@ -1,39 +1,23 @@ -![Crashlytics Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-crashlytics-header.png) -Part of [Google Fabric](https://get.fabric.io), [Crashlytics](http://try.crashlytics.com/) offers the most powerful, yet lightest weight crash reporting solution for iOS. Crashlytics also provides real-time analytics through [Answers](https://answers.io/) and app distributions to testers using [Beta](http://try.crashlytics.com/beta/). +# Crashlytics -## Setup - -1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. - -1. Open Fabric.app, login and select the Crashlytics SDK. - - ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) +## Overview -1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. +[Crashlytics](https://firebase.google.com/docs/crashlytics/get-started?platform=ios) offers the most powerful, yet lightest weight crash reporting solution for iOS. - ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) -1. Select the Podfile option and follow the installation instructions to update your Podfile. **Note:** the Crashlytics Pod includes Answers. If you have Answers included as a separate Pod it should be removed from your Podfile to avoid duplicate symbol errors. - - ``` - pod 'Fabric' - pod 'Crashlytics' - ``` - -1. Run `pod install` +## Setup -1. Add a Run Script Build Phase and build your app. +To start using Crashlytics, there are two options: - ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) +1) The recommended way is to go to the [Firebase Crashlytics Docs](https://firebase.google.com/docs/crashlytics/get-started?platform=ios) and follow the directions there. -1. Initialize the SDK by inserting code outlined in the Fabric.app. +2) If you aren't using Firebase yet, go to [Fabric Kits](https://fabric.io/kits), and follow the directions for Crashlytics. -1. Run your app to finish the installation. ## Resources -* [Documentation](https://docs.fabric.io/apple/crashlytics/overview.html) +* [API Reference](https://firebase.google.com/docs/reference/ios/crashlytics/api/reference/Classes) * [Forums](https://stackoverflow.com/questions/tagged/google-fabric) -* [Website](http://try.crashlytics.com/) -* Follow us on Twitter: [@fabric](https://twitter.com/fabric) and [@crashlytics](https://twitter.com/crashlytics) +* [Website](https://firebase.google.com/docs/crashlytics) +* Follow us on Twitter: [@crashlytics](https://twitter.com/crashlytics) diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics b/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics index 79eb5165e0..214fb90513 100755 Binary files a/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics and b/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics differ diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist b/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist index bfa283150d..d86059be5c 100644 Binary files a/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist and b/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist differ diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/run b/Pods/Crashlytics/iOS/Crashlytics.framework/run index 9058ea62c0..736cd2ff57 100755 --- a/Pods/Crashlytics/iOS/Crashlytics.framework/run +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/run @@ -3,26 +3,71 @@ # run # # Copyright (c) 2015 Crashlytics. All rights reserved. +# +# +# This script is meant to be run as a Run Script in the "Build Phases" section +# of your Xcode project. It sends debug symbols to symbolicate stacktraces, +# sends build events to track versions, and onboard apps for Crashlytics. +# +# This script calls upload-symbols twice: +# +# 1) First it calls upload-symbols synchronously in "validation" mode. If the +# script finds issues with the build environment, it will report errors to Xcode. +# In validation mode it exits before doing any time consuming work. +# +# 2) Then it calls upload-symbols in the background to actually send the build +# event and upload symbols. It does this in the background so that it doesn't +# slow down your builds. If an error happens here, you won't see it in Xcode. +# +# You can find the output for the background execution in Console.app, by +# searching for "upload-symbols". +# +# If you want verbose output, you can pass the --debug flag to this script +# # Figure out where we're being called from DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -# Quote path in case of spaces or special chars -DIR="\"${DIR}" +# If the first argument is specified without a dash, treat it as the Fabric API +# Key and add it as an argument +if [ -z "$1" ] || [[ $1 == -* ]]; then + API_KEY_ARG="" +else + API_KEY_ARG="-a $1"; shift +fi + +# If a second argument is specified without a dash, treat it as the Build Secret +# and add it as an argument +if [ -z "$1" ] || [[ $1 == -* ]]; then + BUILD_SECRET_ARG="" +else + BUILD_SECRET_ARG="-bs $1"; shift +fi + +# Build up the arguments list, passing through any flags added after the +# API Key and Build Secret +ARGUMENTS="$API_KEY_ARG $BUILD_SECRET_ARG $@" +VALIDATE_ARGUMENTS="$ARGUMENTS --build-phase --validate" +UPLOAD_ARGUMENTS="$ARGUMENTS --build-phase" -PATH_SEP="/" -VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" -UPLOAD_COMMAND="uploadDSYM\" $@ run-script" +# Quote the path to handle folders with special characters +COMMAND_PATH="\"$DIR/upload-symbols\" " -# Ensure params are as expected, run in sync mode to validate -eval $DIR$PATH_SEP$VALIDATE_COMMAND +# Ensure params are as expected, run in sync mode to validate, +# and cause a build error if validation fails +eval $COMMAND_PATH$VALIDATE_ARGUMENTS return_code=$? if [[ $return_code != 0 ]]; then exit $return_code fi -# Verification passed, upload dSYM in background to prevent Xcode from waiting -# Note: Validation is performed again before upload. -# Output can still be found in Console.app -eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & +# Verification passed, convert and upload cSYMs in the background to prevent +# build delays +# +# Note: Validation is performed again at this step before upload +# +# Note: Output can still be found in Console.app, by searching for +# "upload-symbols" +# +eval $COMMAND_PATH$UPLOAD_ARGUMENTS > /dev/null 2>&1 & diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/upload-symbols b/Pods/Crashlytics/iOS/Crashlytics.framework/upload-symbols new file mode 100755 index 0000000000..5af65deccc Binary files /dev/null and b/Pods/Crashlytics/iOS/Crashlytics.framework/upload-symbols differ diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM b/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM deleted file mode 100755 index 8deb7c9c38..0000000000 Binary files a/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM and /dev/null differ diff --git a/Pods/Fabric/README.md b/Pods/Fabric/README.md index 9eca6105ad..e99ce8344f 100644 --- a/Pods/Fabric/README.md +++ b/Pods/Fabric/README.md @@ -1,38 +1,23 @@ -![Fabric Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-header.png) # Fabric ## Overview -[Fabric](https://get.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Google and the team that built Crashlytics, Fabric provides an easy way to manage all your SDKs so that you’ll never have to worry about tedious configurations or juggling different accounts. We let you get right into coding and building the next big app. +[Fabric](https://get.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Google and the team that built Crashlytics. -For a full list of SDK provided through Fabric visit [https://fabric.io/kits](https://fabric.io/kits). +For a full list of SDKs provided through Fabric visit [https://fabric.io/kits](https://fabric.io/kits). -## Setup - -The Fabric Pod is a dependency for all Fabric SDKs and is included when installing any Fabric related Pods. General setup instructions are shown below; however, these vary depending on the selected SDK. - -1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. - -1. Open Fabric.app, login and select an SDK to install. +To follow the migration to Firebase, check out the [Fabric Roadmap](https://get.fabric.io/roadmap). - ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) -1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. - - ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) - -1. Select the Podfile option and follow the installation instructions to update your Podfile. Note: the example below is for the Crashlytics SDK. The instructions will vary based on the selected SDK. - - ![Fabric Podfile Instructions](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-podfile-instructions.png) +## Setup -1. Add a Run Script Build Phase and build your app. +Fabric is a dependency for the Crashlytics SDK. To start using Crashlytics, there are two options: - ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) +1) The recommended way is to go to the [Firebase Crashlytics Docs](https://firebase.google.com/docs/crashlytics/get-started?platform=ios) and follow the directions there. -1. Initialize the SDK by inserting code outlined in Fabric.app. +2) If you aren't using Firebase yet, go to [Fabric Kits](https://fabric.io/kits), and follow the directions for Crashlytics. -1. Run your app to finish the installation. ## Resources diff --git a/Pods/Fabric/iOS/Fabric.framework/Fabric b/Pods/Fabric/iOS/Fabric.framework/Fabric index 3057fdf419..aa394a3de9 100755 Binary files a/Pods/Fabric/iOS/Fabric.framework/Fabric and b/Pods/Fabric/iOS/Fabric.framework/Fabric differ diff --git a/Pods/Fabric/iOS/Fabric.framework/Info.plist b/Pods/Fabric/iOS/Fabric.framework/Info.plist index 46b5064836..a617b035fa 100644 Binary files a/Pods/Fabric/iOS/Fabric.framework/Info.plist and b/Pods/Fabric/iOS/Fabric.framework/Info.plist differ diff --git a/Pods/Fabric/iOS/Fabric.framework/run b/Pods/Fabric/iOS/Fabric.framework/run index 9058ea62c0..736cd2ff57 100755 --- a/Pods/Fabric/iOS/Fabric.framework/run +++ b/Pods/Fabric/iOS/Fabric.framework/run @@ -3,26 +3,71 @@ # run # # Copyright (c) 2015 Crashlytics. All rights reserved. +# +# +# This script is meant to be run as a Run Script in the "Build Phases" section +# of your Xcode project. It sends debug symbols to symbolicate stacktraces, +# sends build events to track versions, and onboard apps for Crashlytics. +# +# This script calls upload-symbols twice: +# +# 1) First it calls upload-symbols synchronously in "validation" mode. If the +# script finds issues with the build environment, it will report errors to Xcode. +# In validation mode it exits before doing any time consuming work. +# +# 2) Then it calls upload-symbols in the background to actually send the build +# event and upload symbols. It does this in the background so that it doesn't +# slow down your builds. If an error happens here, you won't see it in Xcode. +# +# You can find the output for the background execution in Console.app, by +# searching for "upload-symbols". +# +# If you want verbose output, you can pass the --debug flag to this script +# # Figure out where we're being called from DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -# Quote path in case of spaces or special chars -DIR="\"${DIR}" +# If the first argument is specified without a dash, treat it as the Fabric API +# Key and add it as an argument +if [ -z "$1" ] || [[ $1 == -* ]]; then + API_KEY_ARG="" +else + API_KEY_ARG="-a $1"; shift +fi + +# If a second argument is specified without a dash, treat it as the Build Secret +# and add it as an argument +if [ -z "$1" ] || [[ $1 == -* ]]; then + BUILD_SECRET_ARG="" +else + BUILD_SECRET_ARG="-bs $1"; shift +fi + +# Build up the arguments list, passing through any flags added after the +# API Key and Build Secret +ARGUMENTS="$API_KEY_ARG $BUILD_SECRET_ARG $@" +VALIDATE_ARGUMENTS="$ARGUMENTS --build-phase --validate" +UPLOAD_ARGUMENTS="$ARGUMENTS --build-phase" -PATH_SEP="/" -VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" -UPLOAD_COMMAND="uploadDSYM\" $@ run-script" +# Quote the path to handle folders with special characters +COMMAND_PATH="\"$DIR/upload-symbols\" " -# Ensure params are as expected, run in sync mode to validate -eval $DIR$PATH_SEP$VALIDATE_COMMAND +# Ensure params are as expected, run in sync mode to validate, +# and cause a build error if validation fails +eval $COMMAND_PATH$VALIDATE_ARGUMENTS return_code=$? if [[ $return_code != 0 ]]; then exit $return_code fi -# Verification passed, upload dSYM in background to prevent Xcode from waiting -# Note: Validation is performed again before upload. -# Output can still be found in Console.app -eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & +# Verification passed, convert and upload cSYMs in the background to prevent +# build delays +# +# Note: Validation is performed again at this step before upload +# +# Note: Output can still be found in Console.app, by searching for +# "upload-symbols" +# +eval $COMMAND_PATH$UPLOAD_ARGUMENTS > /dev/null 2>&1 & diff --git a/Pods/Fabric/iOS/Fabric.framework/upload-symbols b/Pods/Fabric/iOS/Fabric.framework/upload-symbols new file mode 100755 index 0000000000..a18d0b68f2 Binary files /dev/null and b/Pods/Fabric/iOS/Fabric.framework/upload-symbols differ diff --git a/Pods/Fabric/iOS/Fabric.framework/uploadDSYM b/Pods/Fabric/iOS/Fabric.framework/uploadDSYM deleted file mode 100755 index 2e823acfc2..0000000000 Binary files a/Pods/Fabric/iOS/Fabric.framework/uploadDSYM and /dev/null differ diff --git a/Pods/Fabric/run b/Pods/Fabric/run index 9058ea62c0..736cd2ff57 100755 --- a/Pods/Fabric/run +++ b/Pods/Fabric/run @@ -3,26 +3,71 @@ # run # # Copyright (c) 2015 Crashlytics. All rights reserved. +# +# +# This script is meant to be run as a Run Script in the "Build Phases" section +# of your Xcode project. It sends debug symbols to symbolicate stacktraces, +# sends build events to track versions, and onboard apps for Crashlytics. +# +# This script calls upload-symbols twice: +# +# 1) First it calls upload-symbols synchronously in "validation" mode. If the +# script finds issues with the build environment, it will report errors to Xcode. +# In validation mode it exits before doing any time consuming work. +# +# 2) Then it calls upload-symbols in the background to actually send the build +# event and upload symbols. It does this in the background so that it doesn't +# slow down your builds. If an error happens here, you won't see it in Xcode. +# +# You can find the output for the background execution in Console.app, by +# searching for "upload-symbols". +# +# If you want verbose output, you can pass the --debug flag to this script +# # Figure out where we're being called from DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -# Quote path in case of spaces or special chars -DIR="\"${DIR}" +# If the first argument is specified without a dash, treat it as the Fabric API +# Key and add it as an argument +if [ -z "$1" ] || [[ $1 == -* ]]; then + API_KEY_ARG="" +else + API_KEY_ARG="-a $1"; shift +fi + +# If a second argument is specified without a dash, treat it as the Build Secret +# and add it as an argument +if [ -z "$1" ] || [[ $1 == -* ]]; then + BUILD_SECRET_ARG="" +else + BUILD_SECRET_ARG="-bs $1"; shift +fi + +# Build up the arguments list, passing through any flags added after the +# API Key and Build Secret +ARGUMENTS="$API_KEY_ARG $BUILD_SECRET_ARG $@" +VALIDATE_ARGUMENTS="$ARGUMENTS --build-phase --validate" +UPLOAD_ARGUMENTS="$ARGUMENTS --build-phase" -PATH_SEP="/" -VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" -UPLOAD_COMMAND="uploadDSYM\" $@ run-script" +# Quote the path to handle folders with special characters +COMMAND_PATH="\"$DIR/upload-symbols\" " -# Ensure params are as expected, run in sync mode to validate -eval $DIR$PATH_SEP$VALIDATE_COMMAND +# Ensure params are as expected, run in sync mode to validate, +# and cause a build error if validation fails +eval $COMMAND_PATH$VALIDATE_ARGUMENTS return_code=$? if [[ $return_code != 0 ]]; then exit $return_code fi -# Verification passed, upload dSYM in background to prevent Xcode from waiting -# Note: Validation is performed again before upload. -# Output can still be found in Console.app -eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & +# Verification passed, convert and upload cSYMs in the background to prevent +# build delays +# +# Note: Validation is performed again at this step before upload +# +# Note: Output can still be found in Console.app, by searching for +# "upload-symbols" +# +eval $COMMAND_PATH$UPLOAD_ARGUMENTS > /dev/null 2>&1 & diff --git a/Pods/Fabric/upload-symbols b/Pods/Fabric/upload-symbols index b41105957c..a18d0b68f2 100755 Binary files a/Pods/Fabric/upload-symbols and b/Pods/Fabric/upload-symbols differ diff --git a/Pods/Fabric/uploadDSYM b/Pods/Fabric/uploadDSYM deleted file mode 100755 index 2e823acfc2..0000000000 Binary files a/Pods/Fabric/uploadDSYM and /dev/null differ diff --git a/Pods/Firebase/CoreOnly/Sources/Firebase.h b/Pods/Firebase/CoreOnly/Sources/Firebase.h index 6461547d8e..b785c8a718 100755 --- a/Pods/Firebase/CoreOnly/Sources/Firebase.h +++ b/Pods/Firebase/CoreOnly/Sources/Firebase.h @@ -1,3 +1,17 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + #import #if !defined(__has_include) @@ -6,28 +20,25 @@ #else #if __has_include() #import - #else - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Core` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase services work as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING #endif #if __has_include() #import #endif - #if __has_include() - #import - #endif - #if __has_include() #import #endif #if __has_include() #import + #if !__has_include() + #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #warning "FirebaseAnalytics.framework is not included in your target. Please add \ +`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ +Firebase Dynamic Links works as intended." + #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #endif #endif #if __has_include() @@ -40,28 +51,62 @@ Firebase services work as intended." #if __has_include() #import + #if !__has_include() + #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #warning "FirebaseAnalytics.framework is not included in your target. Please add \ +`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ +Firebase In App Messaging works as intended." + #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #endif #endif #if __has_include() #import #endif - #if __has_include() - #import - #endif - #if __has_include() #import + #if !__has_include() + #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #warning "FirebaseAnalytics.framework is not included in your target. Please add \ +`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ +Firebase Messaging works as intended." + #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #endif +#endif + + #if __has_include() + #import #endif #if __has_include() #import #endif + #if __has_include() + #import + #endif + + #if __has_include() + #import + #endif + + #if __has_include() + #import + #endif + + #if __has_include() + #import + #endif + #if __has_include() #import #endif + #if __has_include() + #import + #endif + #if __has_include() #import #endif @@ -74,16 +119,34 @@ Firebase services work as intended." #import #endif + #if __has_include() + #import + #endif + #if __has_include() #import #endif #if __has_include() #import + #if !__has_include() + #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #warning "FirebaseAnalytics.framework is not included in your target. Please add \ +`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ +Firebase Performance works as intended." + #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #endif #endif #if __has_include() #import + #if !__has_include() + #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #warning "FirebaseAnalytics.framework is not included in your target. Please add \ +`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ +Firebase Remote Config works as intended." + #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING + #endif #endif #if __has_include() diff --git a/Pods/Firebase/LICENSE b/Pods/Firebase/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/Pods/Firebase/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/Firebase/README.md b/Pods/Firebase/README.md old mode 100755 new mode 100644 index 49aa2ee0c8..d0f46e02d5 --- a/Pods/Firebase/README.md +++ b/Pods/Firebase/README.md @@ -1,87 +1,233 @@ -# Firebase APIs for iOS +# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) -Simplify your iOS development, grow your user base, and monetize more -effectively with Firebase services. +This repository contains a subset of the Firebase iOS SDK source. It currently +includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, +FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and +FirebaseStorage. -Much more information can be found at [https://firebase.google.com](https://firebase.google.com). +The repository also includes GoogleUtilities source. The +[GoogleUtilities](GoogleUtilities/README.md) pod is +a set of utilities used by Firebase and other Google products. -## Install a Firebase SDK using CocoaPods +Firebase is an app development platform with tools to help you build, grow and +monetize your app. More information about Firebase can be found at +[https://firebase.google.com](https://firebase.google.com). -Firebase distributes several iOS specific APIs and SDKs via CocoaPods. -You can install the CocoaPods tool on OS X by running the following command from -the terminal. Detailed information is available in the [Getting Started -guide](https://guides.cocoapods.org/using/getting-started.html#getting-started). +## Installation + +See the three subsections for details about three different installation methods. +1. [Standard pod install](README.md#standard-pod-install) +1. [Installing from the GitHub repo](README.md#installing-from-github) +1. [Experimental Carthage](README.md#carthage-ios-only) + +### Standard pod install + +Go to +[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). + +### Installing from GitHub + +For releases starting with 5.0.0, the source for each release is also deployed +to CocoaPods master and available via standard +[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). + +These instructions can be used to access the Firebase repo at other branches, +tags, or commits. + +#### Background + +See +[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) +for instructions and options about overriding pod source locations. + +#### Accessing Firebase Source Snapshots + +All of the official releases are tagged in this repo and available via CocoaPods. To access a local +source snapshot or unreleased branch, use Podfile directives like the following: + +To access FirebaseFirestore via a branch: +``` +pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +``` + +To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: + +``` +pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' +pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' +``` + +### Carthage (iOS only) + +Instructions for the experimental Carthage distribution are at +[Carthage](Carthage.md). + +### Rome + +Instructions for installing binary frameworks via +[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). + +## Development + +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Note: If the CocoaPods cache is out of date, you may need to run +`pod repo update` before the `pod gen` command. + +Firestore has a self contained Xcode project. See +[Firestore/README.md](Firestore/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: ``` -$ sudo gem install cocoapods +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb ``` -## Try out an SDK +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. -You can try any of the SDKs with `pod try`. Run the following command and select -the SDK you are interested in when prompted: +To update this section, find the versions of clang-format and swiftformat.rb to +match the versions in the CI failure logs +[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). + +### Running Unit Tests + +Select a scheme and press Command-u to build a component and run its unit tests. + +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + +### Running Sample Apps +In order to run the sample apps and integration tests, you'll need valid +`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist +files without real values, but can be replaced with real plist files. To get your own +`GoogleService-Info.plist` files: + +1. Go to the [Firebase Console](https://console.firebase.google.com/) +2. Create a new Firebase project, if you don't already have one +3. For each sample app you want to test, create a new Firebase app with the sample app's bundle +identifier (e.g. `com.google.Database-Example`) +4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file +(e.g. in [Example/Database/App/](Example/Database/App/)); + +Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require +special Apple capabilities, and you will have to change the sample app to use a unique bundle +identifier that you can control in your own Apple Developer account. + +## Specific Component Instructions +See the sections below for any special instructions for those components. + +### Firebase Auth + +If you're doing specific Firebase Auth development, see +[the Auth Sample README](Example/Auth/README.md) for instructions about +building and running the FirebaseAuth pod along with various samples and tests. + +### Firebase Database + +To run the Database Integration tests, make your database authentication rules +[public](https://firebase.google.com/docs/database/security/quickstart). + +### Firebase Storage + +To run the Storage Integration tests, follow the instructions in +[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). + +#### Push Notifications + +Push notifications can only be delivered to specially provisioned App IDs in the developer portal. +In order to actually test receiving push notifications, you will need to: + +1. Change the bundle identifier of the sample app to something you own in your Apple Developer +account, and enable that App ID for push notifications. +2. You'll also need to +[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) +at **Project Settings > Cloud Messaging > [Your Firebase App]**. +3. Ensure your iOS device is added to your Apple Developer portal as a test device. + +#### iOS Simulator + +The iOS Simulator cannot register for remote notifications, and will not receive push notifications. +In order to receive push notifications, you'll have to follow the steps above and run the app on a +physical device. + +## Community Supported Efforts + +We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are +very grateful! We'd like to empower as many developers as we can to be able to use Firebase and +participate in the Firebase community. + +### macOS and tvOS +Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, +FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, +FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. + +For tvOS, checkout the [Sample](Example/tvOSSample). + +Keep in mind that macOS and tvOS are not officially supported by Firebase, and this repository is +actively developed primarily for iOS. While we can catch basic unit test issues with Travis, there +may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter +this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). + +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: ``` -$ pod try Firebase +pod 'FirebaseABTesting' +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseRemoteConfig' +pod 'FirebaseStorage' ``` -Note that some SDKs may require credentials. More information is available in -the SDK-specific documentation at [https://firebase.google.com/docs/](https://firebase.google.com/docs/). - -## Add a Firebase SDK to your iOS app - -CocoaPods is used to install and manage dependencies in existing Xcode projects. - -1. Create an Xcode project, and save it to your local machine. -2. Create a file named `Podfile` in your project directory. This file defines - your project's dependencies, and is commonly referred to as a Podspec. -3. Open `Podfile`, and add your dependencies. A simple Podspec is shown here: - - ``` - platform :ios, '8.0' - pod 'Firebase' - ``` - -4. Save the file. - -5. Open a terminal and `cd` to the directory containing the Podfile. - - ``` - $ cd /project/ - ``` - -6. Run the `pod install` command. This will install the SDKs specified in the - Podspec, along with any dependencies they may have. - - ``` - $ pod install - ``` - -7. Open your app's `.xcworkspace` file to launch Xcode. Use this file for all - development on your app. - -8. You can also install other Firebase SDKs by adding the subspecs in the - Podfile. - - ``` - pod 'Firebase/AdMob' - pod 'Firebase/Analytics' - pod 'Firebase/Auth' - pod 'Firebase/Crash' - pod 'Firebase/Database' - pod 'Firebase/DynamicLinks' - pod 'Firebase/Firestore' - pod 'Firebase/Functions' - pod 'Firebase/Invites' - pod 'Firebase/Messaging' - pod 'Firebase/MLCommon' - pod 'Firebase/MLModelInterpreter' - pod 'Firebase/MLVision' - pod 'Firebase/MLVisionBarcodeModel' - pod 'Firebase/MLVisionFaceModel' - pod 'Firebase/MLVisionLabelModel' - pod 'Firebase/MLVisionTextModel' - pod 'Firebase/Performance' - pod 'Firebase/RemoteConfig' - pod 'Firebase/Storage' - ``` +## Roadmap + +See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +plans and directions. + +## Contributing + +See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase +iOS SDK. + +## License + +The contents of this repository is licensed under the +[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +Your use of Firebase is governed by the +[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector b/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector index 897b5da29e..f59083c4ad 100755 Binary files a/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector and b/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector differ diff --git a/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap b/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap index 73fb1d7a0f..99a4b1dc23 100755 --- a/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap +++ b/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap @@ -1,5 +1,11 @@ framework module FIRAnalyticsConnector { export * - module * { export *} + module * { export * } + link "sqlite3" + link "z" + link framework "CoreData" link framework "Security" - link framework "SystemConfiguration"} + link framework "StoreKit" + link framework "SystemConfiguration" + link framework "UIKit" +} diff --git a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics index b20d5d25c2..bfd07d01d3 100755 Binary files a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics and b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics differ diff --git a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h index 39d23f18f2..afb9f820b5 100755 --- a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +++ b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h @@ -107,6 +107,19 @@ NS_SWIFT_NAME(Analytics) + (void)setScreenName:(nullable NSString *)screenName screenClass:(nullable NSString *)screenClassOverride; +/// Sets whether analytics collection is enabled for this app on this device. This setting is +/// persisted across app sessions. By default it is enabled. +/// +/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. ++ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; + +/// Sets the interval of inactivity in seconds that terminates the current session. The default +/// value is 1800 seconds (30 minutes). +/// +/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current +/// session terminates. ++ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; + /// The unique ID for this instance of the application. + (NSString *)appInstanceID; diff --git a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h index 4e1366ce91..ad9fff71f9 100755 --- a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +++ b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h @@ -392,9 +392,21 @@ static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShi /// // ... /// }; /// +/// +/// This constant has been deprecated. Use Method constant instead. static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = @"sign_up_method"; +/// A particular approach used in an operation; for example, "facebook" or "email" in the context +/// of a sign_up or login event. (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMethod : @"google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; + /// The origin of your traffic, such as an Ad network (for example, google) or partner (urban /// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your /// property. Highly recommended (NSString). @@ -505,3 +517,16 @@ static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLe /// }; /// static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; + +/// Indicates that the associated event should either extend the current session +/// or start a new session if no session was active when the event was logged. +/// Specify YES to extend the current session or to start a new session; any +/// other value will not extend or start a session. +///
+///     NSDictionary *params = @{
+///       kFIRParameterExtendSession : @YES,
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = + @"extend_session"; diff --git a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h index f50707fa15..132aef770c 100755 --- a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +++ b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h @@ -15,3 +15,15 @@ /// The method used to sign in. For example, "google", "facebook" or "twitter". static NSString *const kFIRUserPropertySignUpMethod NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; + +/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. +/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the +/// documentation for +/// more details and information about related settings. +/// +///
+///     [FIRAnalytics setUserPropertyString:@"NO"
+///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
+/// 
+static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals + NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; diff --git a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap index ef80595cd7..d7c59054aa 100755 --- a/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap +++ b/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap @@ -1,10 +1,12 @@ framework module FirebaseAnalytics { umbrella header "FirebaseAnalytics.h" export * - module * { export *} + module * { export * } link "sqlite3" link "z" + link framework "CoreData" link framework "Security" link framework "StoreKit" link framework "SystemConfiguration" - link framework "UIKit"} + link framework "UIKit" +} diff --git a/Pods/FirebaseAnalytics/Frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics b/Pods/FirebaseAnalytics/Frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics deleted file mode 100755 index 8384856183..0000000000 Binary files a/Pods/FirebaseAnalytics/Frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics and /dev/null differ diff --git a/Pods/FirebaseAnalytics/Frameworks/FirebaseCoreDiagnostics.framework/Modules/module.modulemap b/Pods/FirebaseAnalytics/Frameworks/FirebaseCoreDiagnostics.framework/Modules/module.modulemap deleted file mode 100755 index bbcb94e31d..0000000000 --- a/Pods/FirebaseAnalytics/Frameworks/FirebaseCoreDiagnostics.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseCoreDiagnostics { - export * - module * { export *} - link "z" - link framework "Security" - link framework "SystemConfiguration"} diff --git a/Pods/FirebaseCore/Firebase/Core/FIRAnalyticsConfiguration.m b/Pods/FirebaseCore/Firebase/Core/FIRAnalyticsConfiguration.m index 33aa1687f5..a57936b9bc 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIRAnalyticsConfiguration.m +++ b/Pods/FirebaseCore/Firebase/Core/FIRAnalyticsConfiguration.m @@ -12,11 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#import "FIRAnalyticsConfiguration.h" +#import -#import "Private/FIRAnalyticsConfiguration+Internal.h" +#import "Private/FIRAnalyticsConfiguration.h" +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation FIRAnalyticsConfiguration +#pragma clang diagnostic pop + (FIRAnalyticsConfiguration *)sharedInstance { static FIRAnalyticsConfiguration *sharedInstance = nil; @@ -36,16 +39,6 @@ - (void)postNotificationName:(NSString *)name value:(id)value { userInfo:@{name : value}]; } -- (void)setMinimumSessionInterval:(NSTimeInterval)minimumSessionInterval { - [self postNotificationName:kFIRAnalyticsConfigurationSetMinimumSessionIntervalNotification - value:@(minimumSessionInterval)]; -} - -- (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval { - [self postNotificationName:kFIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification - value:@(sessionTimeoutInterval)]; -} - - (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled { [self setAnalyticsCollectionEnabled:analyticsCollectionEnabled persistSetting:YES]; } diff --git a/Pods/FirebaseCore/Firebase/Core/FIRApp.m b/Pods/FirebaseCore/Firebase/Core/FIRApp.m index 3b352fa7d1..da8917ed50 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIRApp.m +++ b/Pods/FirebaseCore/Firebase/Core/FIRApp.m @@ -14,33 +14,45 @@ #include +#if __has_include() +#import +#endif + +#if __has_include() +#import +#endif + #import "FIRApp.h" -#import "FIRConfiguration.h" -#import "Private/FIRAnalyticsConfiguration+Internal.h" + +#import "Private/FIRAnalyticsConfiguration.h" #import "Private/FIRAppInternal.h" #import "Private/FIRBundleUtil.h" #import "Private/FIRComponentContainerInternal.h" -#import "Private/FIRCoreConfigurable.h" +#import "Private/FIRConfigurationInternal.h" +#import "Private/FIRCoreDiagnosticsConnector.h" +#import "Private/FIRLibrary.h" #import "Private/FIRLogger.h" #import "Private/FIROptionsInternal.h" -NSString *const kFIRServiceAdMob = @"AdMob"; -NSString *const kFIRServiceAuth = @"Auth"; -NSString *const kFIRServiceAuthUI = @"AuthUI"; -NSString *const kFIRServiceCrash = @"Crash"; -NSString *const kFIRServiceDatabase = @"Database"; -NSString *const kFIRServiceDynamicLinks = @"DynamicLinks"; -NSString *const kFIRServiceFirestore = @"Firestore"; -NSString *const kFIRServiceFunctions = @"Functions"; -NSString *const kFIRServiceInstanceID = @"InstanceID"; -NSString *const kFIRServiceInvites = @"Invites"; -NSString *const kFIRServiceMessaging = @"Messaging"; -NSString *const kFIRServiceMeasurement = @"Measurement"; -NSString *const kFIRServicePerformance = @"Performance"; -NSString *const kFIRServiceRemoteConfig = @"RemoteConfig"; -NSString *const kFIRServiceStorage = @"Storage"; -NSString *const kGGLServiceAnalytics = @"Analytics"; -NSString *const kGGLServiceSignIn = @"SignIn"; +// The kFIRService strings are only here while transitioning CoreDiagnostics from the Analytics +// pod to a Core dependency. These symbols are not used and should be deleted after the transition. +NSString *const kFIRServiceAdMob; +NSString *const kFIRServiceAuth; +NSString *const kFIRServiceAuthUI; +NSString *const kFIRServiceCrash; +NSString *const kFIRServiceDatabase; +NSString *const kFIRServiceDynamicLinks; +NSString *const kFIRServiceFirestore; +NSString *const kFIRServiceFunctions; +NSString *const kFIRServiceInstanceID; +NSString *const kFIRServiceInvites; +NSString *const kFIRServiceMessaging; +NSString *const kFIRServiceMeasurement; +NSString *const kFIRServicePerformance; +NSString *const kFIRServiceRemoteConfig; +NSString *const kFIRServiceStorage; +NSString *const kGGLServiceAnalytics; +NSString *const kGGLServiceSignIn; NSString *const kFIRDefaultAppName = @"__FIRAPP_DEFAULT"; NSString *const kFIRAppReadyToConfigureSDKNotification = @"FIRAppReadyToConfigureSDKNotification"; @@ -81,7 +93,7 @@ * An array of all classes that registered as `FIRCoreConfigurable` in order to receive lifecycle * events from Core. */ -static NSMutableArray> *gRegisteredAsConfigurable; +static NSMutableArray> *sRegisteredAsConfigurable; @interface FIRApp () @@ -103,25 +115,11 @@ @implementation FIRApp + (void)configure { FIROptions *options = [FIROptions defaultOptions]; if (!options) { - // Read the Info.plist to see if the flag is set. At this point we can't check any user defaults - // since the app isn't configured at all, so only rely on the Info.plist value. - NSNumber *collectionEnabledPlistValue = [[self class] readDataCollectionSwitchFromPlist]; - if (collectionEnabledPlistValue == nil || [collectionEnabledPlistValue boolValue]) { - [[NSNotificationCenter defaultCenter] - postNotificationName:kFIRAppDiagnosticsNotification - object:nil - userInfo:@{ - kFIRAppDiagnosticsConfigurationTypeKey : @(FIRConfigTypeCore), - kFIRAppDiagnosticsErrorKey : [FIRApp errorForMissingOptions] - }]; - } - [NSException raise:kFirebaseCoreErrorDomain - format: - @"`[FIRApp configure];` (`FirebaseApp.configure()` in Swift) could not find " - @"a valid GoogleService-Info.plist in your project. Please download one " - @"from %@.", - kPlistURL]; + format:@"`[FIRApp configure];` (`FirebaseApp.configure()` in Swift) could not find " + @"a valid GoogleService-Info.plist in your project. Please download one " + @"from %@.", + kPlistURL]; } [FIRApp configureWithOptions:options]; #if TARGET_OS_OSX || TARGET_OS_TV @@ -140,6 +138,17 @@ + (void)configureWithOptions:(FIROptions *)options { [FIRApp configureWithName:kFIRDefaultAppName options:options]; } ++ (NSCharacterSet *)applicationNameAllowedCharacters { + static NSCharacterSet *applicationNameAllowedCharacters; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSMutableCharacterSet *allowedNameCharacters = [NSMutableCharacterSet alphanumericCharacterSet]; + [allowedNameCharacters addCharactersInString:@"-_"]; + applicationNameAllowedCharacters = [allowedNameCharacters copy]; + }); + return applicationNameAllowedCharacters; +} + + (void)configureWithName:(NSString *)name options:(FIROptions *)options { if (!name || !options) { [NSException raise:kFirebaseCoreErrorDomain format:@"Neither name nor options can be nil."]; @@ -157,20 +166,19 @@ + (void)configureWithName:(NSString *)name options:(FIROptions *)options { FIRLogDebug(kFIRLoggerCore, @"I-COR000001", @"Configuring the default app."); } else { // Validate the app name and ensure it hasn't been configured already. - for (NSUInteger charIndex = 0; charIndex < name.length; charIndex++) { - char character = [name characterAtIndex:charIndex]; - if (!((character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z') || - (character >= '0' && character <= '9') || character == '_' || character == '-')) { - [NSException raise:kFirebaseCoreErrorDomain - format: - @"App name should only contain Letters, " - @"Numbers, Underscores, and Dashes."]; - } - } + NSCharacterSet *nameCharacters = [NSCharacterSet characterSetWithCharactersInString:name]; - if (sAllApps && sAllApps[name]) { + if (![[self applicationNameAllowedCharacters] isSupersetOfSet:nameCharacters]) { [NSException raise:kFirebaseCoreErrorDomain - format:@"App named %@ has already been configured.", name]; + format:@"App name can only contain alphanumeric, " + @"hyphen (-), and underscore (_) characters"]; + } + + @synchronized(self) { + if (sAllApps && sAllApps[name]) { + [NSException raise:kFirebaseCoreErrorDomain + format:@"App named %@ has already been configured.", name]; + } } FIRLogDebug(kFIRLoggerCore, @"I-COR000002", @"Configuring app named %@", name); @@ -183,6 +191,10 @@ + (void)configureWithName:(NSString *)name options:(FIROptions *)options { } [FIRApp addAppToAppDictionary:app]; + + // The FIRApp instance is ready to go, `sDefaultApp` is assigned, other SDKs are now ready to be + // instantiated. + [app.container instantiateEagerComponents]; [FIRApp sendNotificationsToSDKs:app]; } } @@ -216,18 +228,19 @@ + (NSDictionary *)allApps { if (!sAllApps) { FIRLogError(kFIRLoggerCore, @"I-COR000005", @"No app has been configured yet."); } - NSDictionary *dict = [NSDictionary dictionaryWithDictionary:sAllApps]; - return dict; + return [sAllApps copy]; } } // Public only for tests + (void)resetApps { - sDefaultApp = nil; - [sAllApps removeAllObjects]; - sAllApps = nil; - [sLibraryVersions removeAllObjects]; - sLibraryVersions = nil; + @synchronized(self) { + sDefaultApp = nil; + [sAllApps removeAllObjects]; + sAllApps = nil; + [sLibraryVersions removeAllObjects]; + sLibraryVersions = nil; + } } - (void)deleteApp:(FIRAppVoidBoolCallback)completion { @@ -263,9 +276,8 @@ + (void)addAppToAppDictionary:(FIRApp *)app { sAllApps[app.name] = app; } else { [NSException raise:kFirebaseCoreErrorDomain - format: - @"Configuration fails. It may be caused by an invalid GOOGLE_APP_ID in " - @"GoogleService-Info.plist or set in the customized options."]; + format:@"Configuration fails. It may be caused by an invalid GOOGLE_APP_ID in " + @"GoogleService-Info.plist or set in the customized options."]; } } @@ -281,50 +293,24 @@ - (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)opti return self; } -- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback { - if (!_getTokenImplementation) { - callback(nil, nil); - return; - } - - _getTokenImplementation(forceRefresh, callback); +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (BOOL)configureCore { [self checkExpectedBundleID]; if (![self isAppIDValid]) { - if (_options.usingOptionsFromDefaultPlist && [self isDataCollectionDefaultEnabled]) { - [[NSNotificationCenter defaultCenter] - postNotificationName:kFIRAppDiagnosticsNotification - object:nil - userInfo:@{ - kFIRAppDiagnosticsConfigurationTypeKey : @(FIRConfigTypeCore), - kFIRAppDiagnosticsErrorKey : [FIRApp errorForInvalidAppID], - }]; - } return NO; } - if ([self isDataCollectionDefaultEnabled]) { - [[NSNotificationCenter defaultCenter] - postNotificationName:kFIRAppDiagnosticsNotification - object:nil - userInfo:@{ - kFIRAppDiagnosticsConfigurationTypeKey : @(FIRConfigTypeCore), - kFIRAppDiagnosticsFIRAppKey : self - }]; - } + [self logCoreTelemetryIfEnabled]; #if TARGET_OS_IOS // Initialize the Analytics once there is a valid options under default app. Analytics should // always initialize first by itself before the other SDKs. if ([self.name isEqualToString:kFIRDefaultAppName]) { Class firAnalyticsClass = NSClassFromString(@"FIRAnalytics"); - if (!firAnalyticsClass) { - FIRLogWarning(kFIRLoggerCore, @"I-COR000022", - @"Firebase Analytics is not available. To add it, include Firebase/Core in the " - @"Podfile or add FirebaseAnalytics.framework to the Link Build Phase"); - } else { + if (firAnalyticsClass) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wundeclared-selector" SEL startWithConfigurationSelector = @selector(startWithConfiguration:options:); @@ -332,6 +318,7 @@ - (BOOL)configureCore { if ([firAnalyticsClass respondsToSelector:startWithConfigurationSelector]) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [firAnalyticsClass performSelector:startWithConfigurationSelector withObject:[FIRConfiguration sharedInstance].analyticsConfiguration withObject:_options]; @@ -341,6 +328,8 @@ - (BOOL)configureCore { } #endif + [self subscribeForAppDidBecomeActiveNotifications]; + return YES; } @@ -367,14 +356,17 @@ - (void)setDataCollectionDefaultEnabled:(BOOL)dataCollectionDefaultEnabled { } // Check if the Analytics flag is explicitly set. If so, no further actions are necessary. - if ([self.options isAnalyticsCollectionExpicitlySet]) { + if ([self.options isAnalyticsCollectionExplicitlySet]) { return; } // The Analytics flag has not been explicitly set, so update with the value being set. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [[FIRAnalyticsConfiguration sharedInstance] setAnalyticsCollectionEnabled:dataCollectionDefaultEnabled persistSetting:NO]; +#pragma clang diagnostic pop } - (BOOL)isDataCollectionDefaultEnabled { @@ -431,8 +423,10 @@ + (void)sendNotificationsToSDKs:(FIRApp *)app { // This is the new way of sending information to SDKs. // TODO: Do we want this on a background thread, maybe? - for (Class library in gRegisteredAsConfigurable) { - [library configureWithApp:app]; + @synchronized(self) { + for (Class library in sRegisteredAsConfigurable) { + [library configureWithApp:app]; + } } } @@ -471,52 +465,71 @@ + (NSError *)errorForInvalidAppID { userInfo:errorDict]; } -+ (void)registerAsConfigurable:(Class)klass { - // This is called at +load time, keep the work to a minimum. - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gRegisteredAsConfigurable = [[NSMutableArray alloc] initWithCapacity:1]; - }); - - NSAssert([(Class)klass conformsToProtocol:@protocol(FIRCoreConfigurable)], - @"The class being registered (%@) must conform to `FIRCoreConfigurable`.", klass); - [gRegisteredAsConfigurable addObject:klass]; -} - + (BOOL)isDefaultAppConfigured { return (sDefaultApp != nil); } -+ (void)registerLibrary:(nonnull NSString *)library withVersion:(nonnull NSString *)version { ++ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version { // Create the set of characters which aren't allowed, only if this feature is used. NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet alphanumericCharacterSet]; [allowedSet addCharactersInString:@"-_."]; NSCharacterSet *disallowedSet = [allowedSet invertedSet]; // Make sure the library name and version strings do not contain unexpected characters, and // add the name/version pair to the dictionary. - if ([library rangeOfCharacterFromSet:disallowedSet].location == NSNotFound && + if ([name rangeOfCharacterFromSet:disallowedSet].location == NSNotFound && [version rangeOfCharacterFromSet:disallowedSet].location == NSNotFound) { - if (!sLibraryVersions) { - sLibraryVersions = [[NSMutableDictionary alloc] init]; + @synchronized(self) { + if (!sLibraryVersions) { + sLibraryVersions = [[NSMutableDictionary alloc] init]; + } + sLibraryVersions[name] = version; } - sLibraryVersions[library] = version; } else { FIRLogError(kFIRLoggerCore, @"I-COR000027", - @"The library name (%@) or version number (%@) contain illegal characters. " + @"The library name (%@) or version number (%@) contain invalid characters. " @"Only alphanumeric, dash, underscore and period characters are allowed.", - library, version); + name, version); + } +} + ++ (void)registerInternalLibrary:(nonnull Class)library + withName:(nonnull NSString *)name + withVersion:(nonnull NSString *)version { + // This is called at +load time, keep the work to a minimum. + + // Ensure the class given conforms to the proper protocol. + if (![(Class)library conformsToProtocol:@protocol(FIRLibrary)] || + ![(Class)library respondsToSelector:@selector(componentsToRegister)]) { + [NSException raise:NSInvalidArgumentException + format:@"Class %@ attempted to register components, but it does not conform to " + @"`FIRLibrary or provide a `componentsToRegister:` method.", + library]; + } + + [FIRComponentContainer registerAsComponentRegistrant:library]; + if ([(Class)library respondsToSelector:@selector(configureWithApp:)]) { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sRegisteredAsConfigurable = [[NSMutableArray alloc] init]; + }); + @synchronized(self) { + [sRegisteredAsConfigurable addObject:library]; + } } + [self registerLibrary:name withVersion:version]; } + (NSString *)firebaseUserAgent { - NSMutableArray *libraries = - [[NSMutableArray alloc] initWithCapacity:sLibraryVersions.count]; - for (NSString *libraryName in sLibraryVersions) { - [libraries - addObject:[NSString stringWithFormat:@"%@/%@", libraryName, sLibraryVersions[libraryName]]]; + @synchronized(self) { + NSMutableArray *libraries = + [[NSMutableArray alloc] initWithCapacity:sLibraryVersions.count]; + for (NSString *libraryName in sLibraryVersions) { + [libraries addObject:[NSString stringWithFormat:@"%@/%@", libraryName, + sLibraryVersions[libraryName]]]; + } + [libraries sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; + return [libraries componentsJoinedByString:@" "]; } - [libraries sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; - return [libraries componentsJoinedByString:@" "]; } - (void)checkExpectedBundleID { @@ -524,8 +537,8 @@ - (void)checkExpectedBundleID { NSString *expectedBundleID = [self expectedBundleID]; // The checking is only done when the bundle ID is provided in the serviceInfo dictionary for // backward compatibility. - if (expectedBundleID != nil && - ![FIRBundleUtil hasBundleIdentifier:expectedBundleID inBundles:bundles]) { + if (expectedBundleID != nil && ![FIRBundleUtil hasBundleIdentifierPrefix:expectedBundleID + inBundles:bundles]) { FIRLogError(kFIRLoggerCore, @"I-COR000008", @"The project's Bundle ID is inconsistent with " @"either the Bundle ID in '%@.%@', or the Bundle ID in the options if you are " @@ -538,15 +551,6 @@ - (void)checkExpectedBundleID { } } -// TODO: Remove once SDKs transition to Auth interop library. -- (nullable NSString *)getUID { - if (!_getUIDImplementation) { - FIRLogWarning(kFIRLoggerCore, @"I-COR000025", @"FIRAuth getUID implementation wasn't set."); - return nil; - } - return _getUIDImplementation(); -} - #pragma mark - private - App ID Validation /** @@ -579,33 +583,32 @@ + (BOOL)validateAppID:(NSString *)appID { return NO; } - // All app IDs must start with at least ":". - NSString *const versionPattern = @"^\\d+:"; - NSRegularExpression *versionRegex = - [NSRegularExpression regularExpressionWithPattern:versionPattern options:0 error:NULL]; - if (!versionRegex) { + NSScanner *stringScanner = [NSScanner scannerWithString:appID]; + stringScanner.charactersToBeSkipped = nil; + + NSString *appIDVersion; + if (![stringScanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] + intoString:&appIDVersion]) { return NO; } - NSRange appIDRange = NSMakeRange(0, appID.length); - NSArray *versionMatches = [versionRegex matchesInString:appID options:0 range:appIDRange]; - if (versionMatches.count != 1) { + if (![stringScanner scanString:@":" intoString:NULL]) { + // appIDVersion must be separated by ":" return NO; } - NSRange versionRange = [(NSTextCheckingResult *)versionMatches.firstObject range]; - NSString *appIDVersion = [appID substringWithRange:versionRange]; - NSArray *knownVersions = @[ @"1:" ]; + NSArray *knownVersions = @[ @"1" ]; if (![knownVersions containsObject:appIDVersion]) { // Permit unknown yet properly formatted app ID versions. + FIRLogInfo(kFIRLoggerCore, @"I-COR000010", @"Unknown GOOGLE_APP_ID version: %@", appIDVersion); return YES; } - if (![FIRApp validateAppIDFormat:appID withVersion:appIDVersion]) { + if (![self validateAppIDFormat:appID withVersion:appIDVersion]) { return NO; } - if (![FIRApp validateAppIDFingerprint:appID withVersion:appIDVersion]) { + if (![self validateAppIDFingerprint:appID withVersion:appIDVersion]) { return NO; } @@ -635,32 +638,76 @@ + (BOOL)validateAppIDFormat:(NSString *)appID withVersion:(NSString *)version { return NO; } - if (![version hasSuffix:@":"]) { + NSScanner *stringScanner = [NSScanner scannerWithString:appID]; + stringScanner.charactersToBeSkipped = nil; + + // Skip version part + // '**::ios:' + if (![stringScanner scanString:version intoString:NULL]) { + // The version part is missing or mismatched + return NO; + } + + // Validate version part (see part between '*' symbols below) + // '*:*:ios:' + if (![stringScanner scanString:@":" intoString:NULL]) { + // appIDVersion must be separated by ":" + return NO; + } + + // Validate version part (see part between '*' symbols below) + // ':**:ios:'. + NSInteger projectNumber = NSNotFound; + if (![stringScanner scanInteger:&projectNumber]) { + // NO project number found. + return NO; + } + + // Validate version part (see part between '*' symbols below) + // ':*:*ios:'. + if (![stringScanner scanString:@":" intoString:NULL]) { + // The project number must be separated by ":" + return NO; + } + + // Validate version part (see part between '*' symbols below) + // '::*ios*:'. + NSString *platform; + if (![stringScanner scanUpToString:@":" intoString:&platform]) { + return NO; + } + + if (![platform isEqualToString:@"ios"]) { + // The platform must be @"ios" return NO; } - if (![appID hasPrefix:version]) { + // Validate version part (see part between '*' symbols below) + // '::ios*:*'. + if (![stringScanner scanString:@":" intoString:NULL]) { + // The platform must be separated by ":" return NO; } - NSString *const pattern = @"^\\d+:ios:[a-f0-9]+$"; - NSRegularExpression *regex = - [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL]; - if (!regex) { + // Validate version part (see part between '*' symbols below) + // '::ios:**'. + unsigned long long fingerprint = NSNotFound; + if (![stringScanner scanHexLongLong:&fingerprint]) { + // Fingerprint part is missing return NO; } - NSRange localRange = NSMakeRange(version.length, appID.length - version.length); - NSUInteger numberOfMatches = [regex numberOfMatchesInString:appID options:0 range:localRange]; - if (numberOfMatches != 1) { + if (!stringScanner.isAtEnd) { + // There are not allowed characters in the fingerprint part return NO; } + return YES; } /** * Validates that the fingerprint of the app ID string is what is expected based on the supplied - * version. The version must end in ":". + * version. * * Note that the v1 hash algorithm is not permitted on the client and cannot be fully validated. * @@ -670,18 +717,6 @@ + (BOOL)validateAppIDFormat:(NSString *)appID withVersion:(NSString *)version { * otherwise. */ + (BOOL)validateAppIDFingerprint:(NSString *)appID withVersion:(NSString *)version { - if (!appID.length || !version.length) { - return NO; - } - - if (![version hasSuffix:@":"]) { - return NO; - } - - if (![appID hasPrefix:version]) { - return NO; - } - // Extract the supplied fingerprint from the supplied app ID. // This assumes the app ID format is the same for all known versions below. If the app ID format // changes in future versions, the tokenizing of the app ID format will need to take into account @@ -702,7 +737,7 @@ + (BOOL)validateAppIDFingerprint:(NSString *)appID withVersion:(NSString *)versi return NO; } - if ([version isEqual:@"1:"]) { + if ([version isEqual:@"1"]) { // The v1 hash algorithm is not permitted on the client so the actual hash cannot be validated. return YES; } @@ -766,26 +801,40 @@ + (nullable NSNumber *)readDataCollectionSwitchFromPlist { #pragma mark - Sending Logs +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-parameter" - (void)sendLogsWithServiceName:(NSString *)serviceName version:(NSString *)version error:(NSError *)error { - // If the user has manually turned off data collection, return and don't send logs. - if (![self isDataCollectionDefaultEnabled]) { - return; - } + // Do nothing. Please remove calls to this method. +} +#pragma clang diagnostic pop + +#pragma mark - App Life Cycle + +- (void)subscribeForAppDidBecomeActiveNotifications { +#if TARGET_OS_IOS || TARGET_OS_TV + NSNotificationName notificationName = UIApplicationDidBecomeActiveNotification; +#endif + +#if TARGET_OS_OSX + NSNotificationName notificationName = NSApplicationDidBecomeActiveNotification; +#endif + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(appDidBecomeActive:) + name:notificationName + object:nil]; +} - NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] initWithDictionary:@{ - kFIRAppDiagnosticsConfigurationTypeKey : @(FIRConfigTypeSDK), - kFIRAppDiagnosticsSDKNameKey : serviceName, - kFIRAppDiagnosticsSDKVersionKey : version, - kFIRAppDiagnosticsFIRAppKey : self - }]; - if (error) { - userInfo[kFIRAppDiagnosticsErrorKey] = error; +- (void)appDidBecomeActive:(NSNotification *)notification { + [self logCoreTelemetryIfEnabled]; +} + +- (void)logCoreTelemetryIfEnabled { + if ([self isDataCollectionDefaultEnabled]) { + [FIRCoreDiagnosticsConnector logCoreTelemetryWithOptions:_options]; } - [[NSNotificationCenter defaultCenter] postNotificationName:kFIRAppDiagnosticsNotification - object:nil - userInfo:userInfo]; } @end diff --git a/Pods/FirebaseCore/Firebase/Core/FIRBundleUtil.m b/Pods/FirebaseCore/Firebase/Core/FIRBundleUtil.m index 93ee02e97d..65fc309f17 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIRBundleUtil.m +++ b/Pods/FirebaseCore/Firebase/Core/FIRBundleUtil.m @@ -14,6 +14,8 @@ #import "Private/FIRBundleUtil.h" +#import + @implementation FIRBundleUtil + (NSArray *)relevantBundles { @@ -45,13 +47,29 @@ + (NSArray *)relevantURLSchemes { return result; } -+ (BOOL)hasBundleIdentifier:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles { ++ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles { for (NSBundle *bundle in bundles) { - if ([bundle.bundleIdentifier isEqualToString:bundleIdentifier]) { + // This allows app extensions that have the app's bundle as their prefix to pass this test. + NSString *applicationBundleIdentifier = + [GULAppEnvironmentUtil isAppExtension] + ? [self bundleIdentifierByRemovingLastPartFrom:bundle.bundleIdentifier] + : bundle.bundleIdentifier; + + if ([applicationBundleIdentifier isEqualToString:bundleIdentifier]) { return YES; } } return NO; } ++ (NSString *)bundleIdentifierByRemovingLastPartFrom:(NSString *)bundleIdentifier { + NSString *bundleIDComponentsSeparator = @"."; + + NSMutableArray *bundleIDComponents = + [[bundleIdentifier componentsSeparatedByString:bundleIDComponentsSeparator] mutableCopy]; + [bundleIDComponents removeLastObject]; + + return [bundleIDComponents componentsJoinedByString:bundleIDComponentsSeparator]; +} + @end diff --git a/Pods/FirebaseCore/Firebase/Core/FIRComponentContainer.m b/Pods/FirebaseCore/Firebase/Core/FIRComponentContainer.m index 381c95c431..0aeac805b9 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIRComponentContainer.m +++ b/Pods/FirebaseCore/Firebase/Core/FIRComponentContainer.m @@ -18,7 +18,7 @@ #import "Private/FIRAppInternal.h" #import "Private/FIRComponent.h" -#import "Private/FIRComponentRegistrant.h" +#import "Private/FIRLibrary.h" #import "Private/FIRLogger.h" NS_ASSUME_NONNULL_BEGIN @@ -32,49 +32,36 @@ @interface FIRComponentContainer () /// Cached instances of components that requested to be cached. @property(nonatomic, strong) NSMutableDictionary *cachedInstances; +/// Protocols of components that have requested to be eagerly instantiated. +@property(nonatomic, strong, nullable) NSMutableArray *eagerProtocolsToInstantiate; + @end @implementation FIRComponentContainer // Collection of all classes that register to provide components. -static NSMutableSet *gFIRComponentRegistrants; +static NSMutableSet *sFIRComponentRegistrants; #pragma mark - Public Registration -+ (void)registerAsComponentRegistrant:(Class)klass { ++ (void)registerAsComponentRegistrant:(Class)klass { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - gFIRComponentRegistrants = [[NSMutableSet alloc] init]; + sFIRComponentRegistrants = [[NSMutableSet alloc] init]; }); - [self registerAsComponentRegistrant:klass inSet:gFIRComponentRegistrants]; + [self registerAsComponentRegistrant:klass inSet:sFIRComponentRegistrants]; } -+ (void)registerAsComponentRegistrant:(Class)klass inSet:(NSMutableSet *)allRegistrants { - // Validate the array to store the components is initialized. - if (!allRegistrants) { - FIRLogWarning(kFIRLoggerCore, @"I-COR000025", - @"Attempted to store registered components in an empty set."); - return; - } - - // Ensure the class given conforms to the proper protocol. - if (![klass conformsToProtocol:@protocol(FIRComponentRegistrant)] || - ![klass respondsToSelector:@selector(componentsToRegister)]) { - [NSException raise:NSInvalidArgumentException - format: - @"Class %@ attempted to register components, but it does not conform to " - @"`FIRComponentRegistrant` or provide a `componentsToRegister:` method.", - klass]; - } - ++ (void)registerAsComponentRegistrant:(Class)klass + inSet:(NSMutableSet *)allRegistrants { [allRegistrants addObject:klass]; } #pragma mark - Internal Initialization - (instancetype)initWithApp:(FIRApp *)app { - return [self initWithApp:app registrants:gFIRComponentRegistrants]; + return [self initWithApp:app registrants:sFIRComponentRegistrants]; } - (instancetype)initWithApp:(FIRApp *)app registrants:(NSMutableSet *)allRegistrants { @@ -90,8 +77,11 @@ - (instancetype)initWithApp:(FIRApp *)app registrants:(NSMutableSet *)all } - (void)populateComponentsFromRegisteredClasses:(NSSet *)classes forApp:(FIRApp *)app { + // Keep track of any components that need to eagerly instantiate after all components are added. + self.eagerProtocolsToInstantiate = [[NSMutableArray alloc] init]; + // Loop through the verified component registrants and populate the components array. - for (Class klass in classes) { + for (Class klass in classes) { // Loop through all the components being registered and store them as appropriate. // Classes which do not provide functionality should use a dummy FIRComponentRegistrant // protocol. @@ -108,14 +98,16 @@ - (void)populateComponentsFromRegisteredClasses:(NSSet *)classes forApp:( // Store the creation block for later usage. self.components[protocolName] = component.creationBlock; - // Instantiate the + // Queue any protocols that should be eagerly instantiated. Don't instantiate them yet + // because they could depend on other components that haven't been added to the components + // array yet. BOOL shouldInstantiateEager = (component.instantiationTiming == FIRInstantiationTimingAlwaysEager); BOOL shouldInstantiateDefaultEager = (component.instantiationTiming == FIRInstantiationTimingEagerInDefaultApp && [app isDefaultApp]); if (shouldInstantiateEager || shouldInstantiateDefaultEager) { - [self instantiateInstanceForProtocol:component.protocol withBlock:component.creationBlock]; + [self.eagerProtocolsToInstantiate addObject:component.protocol]; } } } @@ -123,11 +115,28 @@ - (void)populateComponentsFromRegisteredClasses:(NSSet *)classes forApp:( #pragma mark - Instance Creation +- (void)instantiateEagerComponents { + // After all components are registered, instantiate the ones that are requesting eager + // instantiation. + @synchronized(self) { + for (Protocol *protocol in self.eagerProtocolsToInstantiate) { + // Get an instance for the protocol, which will instantiate it since it couldn't have been + // cached yet. Ignore the instance coming back since we don't need it. + __unused id unusedInstance = [self instanceForProtocol:protocol]; + } + + // All eager instantiation is complete, clear the stored property now. + self.eagerProtocolsToInstantiate = nil; + } +} + /// Instantiate an instance of a class that conforms to the specified protocol. /// This will: /// - Call the block to create an instance if possible, /// - Validate that the instance returned conforms to the protocol it claims to, /// - Cache the instance if the block requests it +/// +/// Note that this method assumes the caller already has @sychronized on self. - (nullable id)instantiateInstanceForProtocol:(Protocol *)protocol withBlock:(FIRComponentCreationBlock)creationBlock { if (!creationBlock) { @@ -163,41 +172,35 @@ - (nullable id)instantiateInstanceForProtocol:(Protocol *)protocol - (nullable id)instanceForProtocol:(Protocol *)protocol { // Check if there is a cached instance, and return it if so. NSString *protocolName = NSStringFromProtocol(protocol); - id cachedInstance = self.cachedInstances[protocolName]; - if (cachedInstance) { - return cachedInstance; - } - // Use the creation block to instantiate an instance and return it. - FIRComponentCreationBlock creationBlock = self.components[protocolName]; - return [self instantiateInstanceForProtocol:protocol withBlock:creationBlock]; + id cachedInstance; + @synchronized(self) { + cachedInstance = self.cachedInstances[protocolName]; + if (!cachedInstance) { + // Use the creation block to instantiate an instance and return it. + FIRComponentCreationBlock creationBlock = self.components[protocolName]; + cachedInstance = [self instantiateInstanceForProtocol:protocol withBlock:creationBlock]; + } + } + return cachedInstance; } #pragma mark - Lifecycle - (void)removeAllCachedInstances { - // Loop through the cache and notify each instance that is a maintainer to clean up after itself. - for (id instance in self.cachedInstances.allValues) { - if ([instance conformsToProtocol:@protocol(FIRComponentLifecycleMaintainer)] && - [instance respondsToSelector:@selector(appWillBeDeleted:)]) { - [instance appWillBeDeleted:self.app]; + @synchronized(self) { + // Loop through the cache and notify each instance that is a maintainer to clean up after + // itself. + for (id instance in self.cachedInstances.allValues) { + if ([instance conformsToProtocol:@protocol(FIRComponentLifecycleMaintainer)] && + [instance respondsToSelector:@selector(appWillBeDeleted:)]) { + [instance appWillBeDeleted:self.app]; + } } - } - [self.cachedInstances removeAllObjects]; -} - -#pragma mark - Testing Initializers - -// TODO(wilsonryan): Set up a testing flag so this only is compiled in with unit tests. -/// Initialize an instance with an app and existing components. -- (instancetype)initWithApp:(FIRApp *)app - components:(NSDictionary *)components { - self = [self initWithApp:app registrants:[[NSMutableSet alloc] init]]; - if (self) { - _components = [components mutableCopy]; + // Empty the cache. + [self.cachedInstances removeAllObjects]; } - return self; } @end diff --git a/Pods/FirebaseCore/Firebase/Core/FIRConfiguration.m b/Pods/FirebaseCore/Firebase/Core/FIRConfiguration.m index cd6486257e..869f73d7f6 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIRConfiguration.m +++ b/Pods/FirebaseCore/Firebase/Core/FIRConfiguration.m @@ -12,7 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#import "FIRConfiguration.h" +#import "Private/FIRConfigurationInternal.h" + +#import "Private/FIRAnalyticsConfiguration.h" extern void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel); diff --git a/Pods/FirebaseCore/Firebase/Core/FIRCoreDiagnosticsConnector.m b/Pods/FirebaseCore/Firebase/Core/FIRCoreDiagnosticsConnector.m new file mode 100644 index 0000000000..7d504e86b1 --- /dev/null +++ b/Pods/FirebaseCore/Firebase/Core/FIRCoreDiagnosticsConnector.m @@ -0,0 +1,61 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "Private/FIRCoreDiagnosticsConnector.h" + +#import + +#import + +#import "Private/FIRAppInternal.h" +#import "Private/FIRDiagnosticsData.h" +#import "Private/FIROptionsInternal.h" + +// Define the interop class symbol declared as an extern in FIRCoreDiagnosticsInterop. +Class FIRCoreDiagnosticsImplementation; + +@implementation FIRCoreDiagnosticsConnector + ++ (void)initialize { + if (!FIRCoreDiagnosticsImplementation) { + FIRCoreDiagnosticsImplementation = NSClassFromString(@"FIRCoreDiagnostics"); + if (FIRCoreDiagnosticsImplementation) { + NSAssert([FIRCoreDiagnosticsImplementation + conformsToProtocol:@protocol(FIRCoreDiagnosticsInterop)], + @"If FIRCoreDiagnostics is implemented, it must conform to the interop protocol."); + NSAssert( + [FIRCoreDiagnosticsImplementation respondsToSelector:@selector(sendDiagnosticsData:)], + @"If FIRCoreDiagnostics is implemented, it must implement +sendDiagnosticsData."); + } + } +} + ++ (void)logCoreTelemetryWithOptions:(FIROptions *)options { + if (FIRCoreDiagnosticsImplementation) { + FIRDiagnosticsData *diagnosticsData = [[FIRDiagnosticsData alloc] init]; + [diagnosticsData insertValue:@(YES) forKey:kFIRCDIsDataCollectionDefaultEnabledKey]; + [diagnosticsData insertValue:[FIRApp firebaseUserAgent] forKey:kFIRCDFirebaseUserAgentKey]; + [diagnosticsData insertValue:@(FIRConfigTypeCore) forKey:kFIRCDConfigurationTypeKey]; + [diagnosticsData insertValue:options.googleAppID forKey:kFIRCDGoogleAppIDKey]; + [diagnosticsData insertValue:options.bundleID forKey:kFIRCDBundleIDKey]; + [diagnosticsData insertValue:@(options.usingOptionsFromDefaultPlist) + forKey:kFIRCDUsingOptionsFromDefaultPlistKey]; + [diagnosticsData insertValue:options.libraryVersionID forKey:kFIRCDLibraryVersionIDKey]; + [FIRCoreDiagnosticsImplementation sendDiagnosticsData:diagnosticsData]; + } +} + +@end diff --git a/Pods/FirebaseCore/Firebase/Core/FIRDiagnosticsData.m b/Pods/FirebaseCore/Firebase/Core/FIRDiagnosticsData.m new file mode 100644 index 0000000000..04769737f5 --- /dev/null +++ b/Pods/FirebaseCore/Firebase/Core/FIRDiagnosticsData.m @@ -0,0 +1,66 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "Private/FIRDiagnosticsData.h" + +#import + +#import "Private/FIRAppInternal.h" +#import "Private/FIROptionsInternal.h" + +@implementation FIRDiagnosticsData { + /** Backing ivar for the diagnosticObjects property. */ + NSMutableDictionary *_diagnosticObjects; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _diagnosticObjects = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)insertValue:(nullable id)value forKey:(NSString *)key { + if (key) { + _diagnosticObjects[key] = value; + } +} + +#pragma mark - FIRCoreDiagnosticsData + +- (NSDictionary *)diagnosticObjects { + if (!_diagnosticObjects[kFIRCDllAppsCountKey]) { + _diagnosticObjects[kFIRCDllAppsCountKey] = @([FIRApp allApps].count); + } + if (!_diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey]) { + _diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey] = + @([[FIRApp defaultApp] isDataCollectionDefaultEnabled]); + } + if (!_diagnosticObjects[kFIRCDFirebaseUserAgentKey]) { + _diagnosticObjects[kFIRCDFirebaseUserAgentKey] = [FIRApp firebaseUserAgent]; + } + return _diagnosticObjects; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-parameter" +- (void)setDiagnosticObjects:(NSDictionary *)diagnosticObjects { + NSAssert(NO, @"Please use -insertValue:forKey:"); +} +#pragma clang diagnostic pop + +@end diff --git a/Pods/FirebaseCore/Firebase/Core/FIRErrors.m b/Pods/FirebaseCore/Firebase/Core/FIRErrors.m index 6d6d52d2ce..72120c5c98 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIRErrors.m +++ b/Pods/FirebaseCore/Firebase/Core/FIRErrors.m @@ -15,15 +15,7 @@ #import "Private/FIRErrors.h" NSString *const kFirebaseErrorDomain = @"com.firebase"; -NSString *const kFirebaseAdMobErrorDomain = @"com.firebase.admob"; -NSString *const kFirebaseAppInviteErrorDomain = @"com.firebase.appinvite"; -NSString *const kFirebaseAuthErrorDomain = @"com.firebase.auth"; -NSString *const kFirebaseCloudMessagingErrorDomain = @"com.firebase.cloudmessaging"; NSString *const kFirebaseConfigErrorDomain = @"com.firebase.config"; NSString *const kFirebaseCoreErrorDomain = @"com.firebase.core"; -NSString *const kFirebaseCrashReportingErrorDomain = @"com.firebase.crashreporting"; -NSString *const kFirebaseDatabaseErrorDomain = @"com.firebase.database"; -NSString *const kFirebaseDurableDeepLinkErrorDomain = @"com.firebase.durabledeeplink"; -NSString *const kFirebaseInstanceIDErrorDomain = @"com.firebase.instanceid"; NSString *const kFirebasePerfErrorDomain = @"com.firebase.perf"; NSString *const kFirebaseStorageErrorDomain = @"com.firebase.storage"; diff --git a/Pods/FirebaseCore/Firebase/Core/FIRLogger.m b/Pods/FirebaseCore/Firebase/Core/FIRLogger.m index d1e3b37382..532a96c294 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIRLogger.m +++ b/Pods/FirebaseCore/Firebase/Core/FIRLogger.m @@ -20,23 +20,17 @@ #import "Private/FIRVersion.h" +FIRLoggerService kFIRLoggerCore = @"[Firebase/Core]"; + +// All the FIRLoggerService definitions should be migrated to clients. Do not add new ones! FIRLoggerService kFIRLoggerABTesting = @"[Firebase/ABTesting]"; FIRLoggerService kFIRLoggerAdMob = @"[Firebase/AdMob]"; FIRLoggerService kFIRLoggerAnalytics = @"[Firebase/Analytics]"; FIRLoggerService kFIRLoggerAuth = @"[Firebase/Auth]"; -FIRLoggerService kFIRLoggerCore = @"[Firebase/Core]"; FIRLoggerService kFIRLoggerCrash = @"[Firebase/Crash]"; -FIRLoggerService kFIRLoggerDatabase = @"[Firebase/Database]"; -FIRLoggerService kFIRLoggerDynamicLinks = @"[Firebase/DynamicLinks]"; -FIRLoggerService kFIRLoggerFirestore = @"[Firebase/Firestore]"; -FIRLoggerService kFIRLoggerInstanceID = @"[Firebase/InstanceID]"; -FIRLoggerService kFIRLoggerInvites = @"[Firebase/Invites]"; FIRLoggerService kFIRLoggerMLKit = @"[Firebase/MLKit]"; -FIRLoggerService kFIRLoggerMessaging = @"[Firebase/Messaging]"; FIRLoggerService kFIRLoggerPerf = @"[Firebase/Performance]"; FIRLoggerService kFIRLoggerRemoteConfig = @"[Firebase/RemoteConfig]"; -FIRLoggerService kFIRLoggerStorage = @"[Firebase/Storage]"; -FIRLoggerService kFIRLoggerSwizzler = @"[FirebaseSwizzlingUtilities]"; /// Arguments passed on launch. NSString *const kFIRDisableDebugModeApplicationArgument = @"-FIRDebugDisabled"; diff --git a/Pods/FirebaseCore/Firebase/Core/FIROptions.m b/Pods/FirebaseCore/Firebase/Core/FIROptions.m index db83d9c654..e259bf8b33 100644 --- a/Pods/FirebaseCore/Firebase/Core/FIROptions.m +++ b/Pods/FirebaseCore/Firebase/Core/FIROptions.m @@ -17,6 +17,7 @@ #import "Private/FIRErrors.h" #import "Private/FIRLogger.h" #import "Private/FIROptionsInternal.h" +#import "Private/FIRVersion.h" // Keys for the strings in the plist file. NSString *const kFIRAPIKey = @"API_KEY"; @@ -39,12 +40,13 @@ NSString *const kFIRIsAnalyticsEnabled = @"IS_ANALYTICS_ENABLED"; NSString *const kFIRIsSignInEnabled = @"IS_SIGNIN_ENABLED"; -// Library version ID. -NSString *const kFIRLibraryVersionID = - @"5" // Major version (one or more digits) - @"01" // Minor version (exactly 2 digits) - @"07" // Build number (exactly 2 digits) - @"000"; // Fixed "000" +// Library version ID formatted like: +// @"5" // Major version (one or more digits) +// @"04" // Minor version (exactly 2 digits) +// @"01" // Build number (exactly 2 digits) +// @"000"; // Fixed "000" +NSString *kFIRLibraryVersionID; + // Plist file name. NSString *const kServiceInfoFileName = @"GoogleService-Info"; // Plist file type. @@ -110,17 +112,9 @@ + (FIROptions *)defaultOptions { + (void)initialize { // Report FirebaseCore version for useragent string - NSRange major = NSMakeRange(0, 1); - NSRange minor = NSMakeRange(1, 2); - NSRange patch = NSMakeRange(3, 2); - [FIRApp - registerLibrary:@"fire-ios" - withVersion:[NSString stringWithFormat:@"%@.%d.%d", - [kFIRLibraryVersionID substringWithRange:major], - [[kFIRLibraryVersionID substringWithRange:minor] - intValue], - [[kFIRLibraryVersionID substringWithRange:patch] - intValue]]]; + [FIRApp registerLibrary:@"fire-ios" + withVersion:[NSString stringWithUTF8String:FIRCoreVersionString]]; + NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; NSString *xcodeVersion = info[@"DTXcodeBuild"]; NSString *sdkVersion = info[@"DTSDKBuild"]; @@ -185,6 +179,7 @@ - (id)copyWithZone:(NSZone *)zone { if (newOptions) { newOptions.optionsDictionary = self.optionsDictionary; newOptions.deepLinkURLScheme = self.deepLinkURLScheme; + newOptions.appGroupID = self.appGroupID; newOptions.editingLocked = self.isEditingLocked; newOptions.usingOptionsFromDefaultPlist = self.usingOptionsFromDefaultPlist; } @@ -296,6 +291,16 @@ - (void)setGoogleAppID:(NSString *)googleAppID { } - (NSString *)libraryVersionID { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // The unit tests are set up to catch anything that does not properly convert. + NSString *version = [NSString stringWithUTF8String:FIRCoreVersionString]; + NSArray *components = [version componentsSeparatedByString:@"."]; + NSString *major = [components objectAtIndex:0]; + NSString *minor = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:1] intValue]]; + NSString *patch = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:2] intValue]]; + kFIRLibraryVersionID = [NSString stringWithFormat:@"%@%@%@000", major, minor, patch]; + }); return kFIRLibraryVersionID; } @@ -336,6 +341,11 @@ - (void)setBundleID:(NSString *)bundleID { _optionsDictionary[kFIRBundleID] = [bundleID copy]; } +- (void)setAppGroupID:(NSString *)appGroupID { + [self checkEditingLocked]; + _appGroupID = [appGroupID copy]; +} + #pragma mark - Internal instance methods - (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)infoDictionary { @@ -389,7 +399,7 @@ - (BOOL)isMeasurementEnabled { return [value boolValue]; } -- (BOOL)isAnalyticsCollectionExpicitlySet { +- (BOOL)isAnalyticsCollectionExplicitlySet { // If it's de-activated, it classifies as explicity set. If not, it's not a good enough indication // that the developer wants FirebaseAnalytics enabled so continue checking. if (self.isAnalyticsCollectionDeactivated) { diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRAnalyticsConfiguration+Internal.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRAnalyticsConfiguration.h similarity index 83% rename from Pods/FirebaseCore/Firebase/Core/Private/FIRAnalyticsConfiguration+Internal.h rename to Pods/FirebaseCore/Firebase/Core/Private/FIRAnalyticsConfiguration.h index be624b4941..6429ac70ea 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRAnalyticsConfiguration+Internal.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRAnalyticsConfiguration.h @@ -14,7 +14,7 @@ * limitations under the License. */ -#import "FIRAnalyticsConfiguration.h" +#import /// Values stored in analyticsEnabledState. Never alter these constants since they must match with /// values persisted to disk. @@ -38,7 +38,14 @@ static NSString *const kFIRAnalyticsConfigurationSetMinimumSessionIntervalNotifi static NSString *const kFIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification = @"FIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification"; -@interface FIRAnalyticsConfiguration (Internal) +@interface FIRAnalyticsConfiguration : NSObject + +/// Returns the shared instance of FIRAnalyticsConfiguration. ++ (FIRAnalyticsConfiguration *)sharedInstance; + +// Sets whether analytics collection is enabled for this app on this device. This setting is +// persisted across app sessions. By default it is enabled. +- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; /// Sets whether analytics collection is enabled for this app on this device, and a flag to persist /// the value or not. The setting should not be persisted if being set by the global data collection diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRAppInternal.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRAppInternal.h index e1aa65d0ba..ad1a186b93 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRAppInternal.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRAppInternal.h @@ -14,11 +14,11 @@ * limitations under the License. */ -#import "FIRApp.h" -#import "FIRErrors.h" +#import +#import @class FIRComponentContainer; -@protocol FIRCoreConfigurable; +@protocol FIRLibrary; /** * The internal interface to FIRApp. This is meant for first-party integrators, who need to receive @@ -34,28 +34,6 @@ typedef NS_ENUM(NSInteger, FIRConfigType) { FIRConfigTypeSDK = 2, }; -/** - * Names of services provided by Firebase. - */ -extern NSString *const kFIRServiceAdMob; -extern NSString *const kFIRServiceAuth; -extern NSString *const kFIRServiceAuthUI; -extern NSString *const kFIRServiceCrash; -extern NSString *const kFIRServiceDatabase; -extern NSString *const kFIRServiceDynamicLinks; -extern NSString *const kFIRServiceInstanceID; -extern NSString *const kFIRServiceInvites; -extern NSString *const kFIRServiceMessaging; -extern NSString *const kFIRServiceMeasurement; -extern NSString *const kFIRServiceRemoteConfig; -extern NSString *const kFIRServiceStorage; - -/** - * Names of services provided by the Google pod, but logged by the Firebase pod. - */ -extern NSString *const kGGLServiceAnalytics; -extern NSString *const kGGLServiceSignIn; - extern NSString *const kFIRDefaultAppName; extern NSString *const kFIRAppReadyToConfigureSDKNotification; extern NSString *const kFIRAppDeleteNotification; @@ -109,24 +87,6 @@ extern NSString *const FIRAuthStateDidChangeInternalNotificationAppKey; */ extern NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey; -/** @typedef FIRTokenCallback - @brief The type of block which gets called when a token is ready. - */ -typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error); - -/** @typedef FIRAppGetTokenImplementation - @brief The type of block which can provide an implementation for the @c getTokenWithCallback: - method. - @param forceRefresh Forces the token to be refreshed. - @param callback The block which should be invoked when the async call completes. - */ -typedef void (^FIRAppGetTokenImplementation)(BOOL forceRefresh, FIRTokenCallback callback); - -/** @typedef FIRAppGetUID - @brief The type of block which can provide an implementation for the @c getUID method. - */ -typedef NSString *_Nullable (^FIRAppGetUIDImplementation)(void); - @interface FIRApp () /** @@ -134,17 +94,6 @@ typedef NSString *_Nullable (^FIRAppGetUIDImplementation)(void); */ @property(nonatomic, readonly) BOOL isDefaultApp; -/** @property getTokenImplementation - @brief Gets or sets the block to use for the implementation of - @c getTokenForcingRefresh:withCallback: - */ -@property(nonatomic, copy) FIRAppGetTokenImplementation getTokenImplementation; - -/** @property getUIDImplementation - @brief Gets or sets the block to use for the implementation of @c getUID. - */ -@property(nonatomic, copy) FIRAppGetUIDImplementation getUIDImplementation; - /* * The container of interop SDKs for this app. */ @@ -164,23 +113,25 @@ typedef NSString *_Nullable (^FIRAppGetUIDImplementation)(void); + (BOOL)isDefaultAppConfigured; /** - * Register a class that conforms to `FIRCoreConfigurable`. Each SDK should have one class that - * registers in order to provide critical information for interoperability and lifecycle events. - * TODO(wilsonryan): Write more documentation. + * Registers a given third-party library with the given version number to be reported for + * analytics. + * + * @param name Name of the library. + * @param version Version of the library. */ -+ (void)registerAsConfigurable:(Class)klass; ++ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version; /** - * Registers a given third-party library with the given version number to be reported for - * analyitcs. + * Registers a given internal library with the given version number to be reported for + * analytics. * - * @param library Name of the library - * @param version Version of the library + * @param library Optional parameter for component registration. + * @param name Name of the library. + * @param version Version of the library. */ -// clang-format off -+ (void)registerLibrary:(NSString *)library - withVersion:(NSString *)version NS_SWIFT_NAME(registerLibrary(_:version:)); -// clang-format on ++ (void)registerInternalLibrary:(nonnull Class)library + withName:(nonnull NSString *)name + withVersion:(nonnull NSString *)version; /** * A concatenated string representing all the third-party libraries and version numbers. @@ -189,6 +140,8 @@ typedef NSString *_Nullable (^FIRAppGetUIDImplementation)(void); /** * Used by each SDK to send logs about SDK configuration status to Clearcut. + * + * @note This API is a no-op, please remove calls to it. */ - (void)sendLogsWithServiceName:(NSString *)serviceName version:(NSString *)version @@ -204,19 +157,6 @@ typedef NSString *_Nullable (^FIRAppGetUIDImplementation)(void); */ - (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options; -/** @fn getTokenForcingRefresh:withCallback: - @brief Retrieves the Firebase authentication token, possibly refreshing it. - @param forceRefresh Forces a token refresh. Useful if the token becomes invalid for some reason - other than an expiration. - @param callback The block to invoke when the token is available. - */ -- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback; - -/** - * Expose the UID of the current user for Firestore. - */ -- (nullable NSString *)getUID; - @end NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRBundleUtil.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRBundleUtil.h index c458a2c4c6..d9475dd29e 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRBundleUtil.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRBundleUtil.h @@ -45,8 +45,9 @@ + (NSArray *)relevantURLSchemes; /** - * Checks if the bundle identifier exists in the given bundles. + * Checks if any of the given bundles have a matching bundle identifier prefix (removing extension + * suffixes). */ -+ (BOOL)hasBundleIdentifier:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles; ++ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles; @end diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainer.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainer.h index 10e2255389..f3dc356d6c 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainer.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainer.h @@ -16,6 +16,7 @@ #import #import "FIRComponentType.h" +#import "FIRLibrary.h" NS_ASSUME_NONNULL_BEGIN @@ -38,10 +39,6 @@ NS_SWIFT_NAME(FirebaseComponentContainer) /// Unavailable. Use the `container` property on `FIRApp`. - (instancetype)init NS_UNAVAILABLE; -/// Register a class to provide components for the interoperability system. The class should conform -/// to `FIRComponentRegistrant` and provide an array of `FIRComponent` objects. -+ (void)registerAsComponentRegistrant:(Class)klass; - @end NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainerInternal.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainerInternal.h index bb73e7bab5..f745f6a473 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainerInternal.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainerInternal.h @@ -31,9 +31,16 @@ NS_ASSUME_NONNULL_BEGIN /// protocol wasn't registered, or if the instance couldn't instantiate for the provided app. - (nullable id)instanceForProtocol:(Protocol *)protocol NS_SWIFT_NAME(instance(for:)); +/// Instantiates all the components that have registered as "eager" after initialization. +- (void)instantiateEagerComponents; + /// Remove all of the cached instances stored and allow them to clean up after themselves. - (void)removeAllCachedInstances; +/// Register a class to provide components for the interoperability system. The class should conform +/// to `FIRComponentRegistrant` and provide an array of `FIRComponent` objects. ++ (void)registerAsComponentRegistrant:(Class)klass; + @end NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRConfigurationInternal.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRConfigurationInternal.h new file mode 100644 index 0000000000..ee16886707 --- /dev/null +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRConfigurationInternal.h @@ -0,0 +1,29 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRConfiguration.h" + +@class FIRAnalyticsConfiguration; + +@interface FIRConfiguration () + +/** + * The configuration class for Firebase Analytics. This should be removed once the logic for + * enabling and disabling Analytics is moved to Analytics. + */ +@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration; + +@end diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRCoreDiagnosticsConnector.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRCoreDiagnosticsConnector.h new file mode 100644 index 0000000000..76c0c05f0a --- /dev/null +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRCoreDiagnosticsConnector.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class FIRDiagnosticsData; +@class FIROptions; + +NS_ASSUME_NONNULL_BEGIN + +/** Connects FIRCore with the CoreDiagnostics library. */ +@interface FIRCoreDiagnosticsConnector : NSObject + +/** Logs FirebaseCore related data. + * + * @param options The options object containing data to log. + */ ++ (void)logCoreTelemetryWithOptions:(FIROptions *)options; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRDiagnosticsData.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRDiagnosticsData.h new file mode 100644 index 0000000000..ac5ef2c4f9 --- /dev/null +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRDiagnosticsData.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Implements the FIRCoreDiagnosticsData protocol to log diagnostics data. */ +@interface FIRDiagnosticsData : NSObject + +/** Inserts values into the diagnosticObjects dictionary if the value isn't nil. + * + * @param value The value to insert if it's not nil. + * @param key The key to associate it with. + */ +- (void)insertValue:(nullable id)value forKey:(NSString *)key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRErrorCode.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRErrorCode.h index 01d3c56e36..f77b3d0024 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRErrorCode.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRErrorCode.h @@ -34,22 +34,5 @@ typedef NS_ENUM(NSInteger, FIRErrorCode) { /** * Error code for failing to configure a specific service. */ - FIRErrorCodeAdMobFailed = -110, - FIRErrorCodeAppInviteFailed = -112, - FIRErrorCodeCloudMessagingFailed = -113, FIRErrorCodeConfigFailed = -114, - FIRErrorCodeDatabaseFailed = -115, - FIRErrorCodeCrashReportingFailed = -118, - FIRErrorCodeDurableDeepLinkFailed = -119, - FIRErrorCodeAuthFailed = -120, - FIRErrorCodeInstanceIDFailed = -121, - FIRErrorCodeStorageFailed = -123, - - /** - * Error codes returned by Dynamic Links - */ - FIRErrorCodeDynamicLinksStrongMatchNotAvailable = -124, - FIRErrorCodeDynamicLinksManualRetrievalNotEnabled = -125, - FIRErrorCodeDynamicLinksPendingLinkOnlyAvailableAtFirstLaunch = -126, - FIRErrorCodeDynamicLinksPendingLinkRetrievalAlreadyRunning = -127, }; diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRErrors.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRErrors.h index cf69252aa9..19e47328ac 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRErrors.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRErrors.h @@ -19,15 +19,6 @@ #include "FIRErrorCode.h" extern NSString *const kFirebaseErrorDomain; -extern NSString *const kFirebaseAdMobErrorDomain; -extern NSString *const kFirebaseAppInviteErrorDomain; -extern NSString *const kFirebaseAuthErrorDomain; -extern NSString *const kFirebaseCloudMessagingErrorDomain; extern NSString *const kFirebaseConfigErrorDomain; extern NSString *const kFirebaseCoreErrorDomain; -extern NSString *const kFirebaseCrashReportingErrorDomain; -extern NSString *const kFirebaseDatabaseErrorDomain; -extern NSString *const kFirebaseDurableDeepLinkErrorDomain; -extern NSString *const kFirebaseInstanceIDErrorDomain; extern NSString *const kFirebasePerfErrorDomain; -extern NSString *const kFirebaseStorageErrorDomain; diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentRegistrant.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRLibrary.h similarity index 65% rename from Pods/FirebaseCore/Firebase/Core/Private/FIRComponentRegistrant.h rename to Pods/FirebaseCore/Firebase/Core/Private/FIRLibrary.h index ad2cad2146..728c062323 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRComponentRegistrant.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRLibrary.h @@ -14,25 +14,31 @@ * limitations under the License. */ -#ifndef FIRComponentRegistrant_h -#define FIRComponentRegistrant_h +#ifndef FIRLibrary_h +#define FIRLibrary_h #import +#import "FIRComponent.h" -@class FIRComponent; +@class FIRApp; NS_ASSUME_NONNULL_BEGIN -/// Describes functionality for SDKs registering components in the `FIRComponentContainer`. -NS_SWIFT_NAME(ComponentRegistrant) -@protocol FIRComponentRegistrant +/// Provide an interface to register a library for userAgent logging and availability to others. +NS_SWIFT_NAME(Library) +@protocol FIRLibrary /// Returns one or more FIRComponents that will be registered in /// FIRApp and participate in dependency resolution and injection. + (NSArray *)componentsToRegister; +@optional +/// Implement this method if the library needs notifications for lifecycle events. This method is +/// called when the developer calls `FirebaseApp.configure()`. ++ (void)configureWithApp:(FIRApp *)app; + @end NS_ASSUME_NONNULL_END -#endif /* FIRComponentRegistrant_h */ +#endif /* FIRLibrary_h */ diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRLogger.h b/Pods/FirebaseCore/Firebase/Core/Private/FIRLogger.h index a538199be1..548e389a4e 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRLogger.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIRLogger.h @@ -16,7 +16,7 @@ #import -#import "FIRLoggerLevel.h" +#import NS_ASSUME_NONNULL_BEGIN @@ -29,19 +29,11 @@ extern FIRLoggerService kFIRLoggerABTesting; extern FIRLoggerService kFIRLoggerAdMob; extern FIRLoggerService kFIRLoggerAnalytics; extern FIRLoggerService kFIRLoggerAuth; -extern FIRLoggerService kFIRLoggerCore; extern FIRLoggerService kFIRLoggerCrash; -extern FIRLoggerService kFIRLoggerDatabase; -extern FIRLoggerService kFIRLoggerDynamicLinks; -extern FIRLoggerService kFIRLoggerFirestore; -extern FIRLoggerService kFIRLoggerInstanceID; -extern FIRLoggerService kFIRLoggerInvites; +extern FIRLoggerService kFIRLoggerCore; extern FIRLoggerService kFIRLoggerMLKit; -extern FIRLoggerService kFIRLoggerMessaging; extern FIRLoggerService kFIRLoggerPerf; extern FIRLoggerService kFIRLoggerRemoteConfig; -extern FIRLoggerService kFIRLoggerStorage; -extern FIRLoggerService kFIRLoggerSwizzler; /** * The key used to store the logger's error count. diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIROptionsInternal.h b/Pods/FirebaseCore/Firebase/Core/Private/FIROptionsInternal.h index 7bb40fc10d..0660a3cd8c 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIROptionsInternal.h +++ b/Pods/FirebaseCore/Firebase/Core/Private/FIROptionsInternal.h @@ -14,7 +14,7 @@ * limitations under the License. */ -#import "FIROptions.h" +#import /** * Keys for the strings in the plist file. @@ -65,7 +65,7 @@ extern NSString *const kServiceInfoFileType; * Indicates whether or not Analytics collection was explicitly enabled via a plist flag or at * runtime. */ -@property(nonatomic, readonly) BOOL isAnalyticsCollectionExpicitlySet; +@property(nonatomic, readonly) BOOL isAnalyticsCollectionExplicitlySet; /** * Whether or not Analytics Collection was enabled. Analytics Collection is enabled unless diff --git a/Pods/FirebaseCore/Firebase/Core/Public/FIRAnalyticsConfiguration.h b/Pods/FirebaseCore/Firebase/Core/Public/FIRAnalyticsConfiguration.h deleted file mode 100644 index ca1d32c6e2..0000000000 --- a/Pods/FirebaseCore/Firebase/Core/Public/FIRAnalyticsConfiguration.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class provides configuration fields for Firebase Analytics. - */ -NS_SWIFT_NAME(AnalyticsConfiguration) -@interface FIRAnalyticsConfiguration : NSObject - -/** - * Returns the shared instance of FIRAnalyticsConfiguration. - */ -+ (FIRAnalyticsConfiguration *)sharedInstance NS_SWIFT_NAME(shared()); - -/** - * Sets the minimum engagement time in seconds required to start a new session. The default value - * is 10 seconds. - */ -- (void)setMinimumSessionInterval:(NSTimeInterval)minimumSessionInterval; - -/** - * Sets the interval of inactivity in seconds that terminates the current session. The default - * value is 1800 seconds (30 minutes). - */ -- (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; - -/** - * Sets whether analytics collection is enabled for this app on this device. This setting is - * persisted across app sessions. By default it is enabled. - */ -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCore/Firebase/Core/Public/FIRConfiguration.h b/Pods/FirebaseCore/Firebase/Core/Public/FIRConfiguration.h index 95bba5e7b3..8de3b076a6 100644 --- a/Pods/FirebaseCore/Firebase/Core/Public/FIRConfiguration.h +++ b/Pods/FirebaseCore/Firebase/Core/Public/FIRConfiguration.h @@ -16,14 +16,12 @@ #import -#import "FIRAnalyticsConfiguration.h" -#import "FIRLoggerLevel.h" +#import NS_ASSUME_NONNULL_BEGIN /** - * This interface provides global level properties that the developer can tweak, and the singleton - * of the Firebase Analytics configuration class. + * This interface provides global level properties that the developer can tweak. */ NS_SWIFT_NAME(FirebaseConfiguration) @interface FIRConfiguration : NSObject @@ -31,9 +29,6 @@ NS_SWIFT_NAME(FirebaseConfiguration) /** Returns the shared configuration object. */ @property(class, nonatomic, readonly) FIRConfiguration *sharedInstance NS_SWIFT_NAME(shared); -/** The configuration class for Firebase Analytics. */ -@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration; - /** * Sets the logging level for internal Firebase logging. Firebase will only log messages * that are logged at or below loggerLevel. The messages are logged both to the Xcode diff --git a/Pods/FirebaseCore/Firebase/Core/Public/FIROptions.h b/Pods/FirebaseCore/Firebase/Core/Public/FIROptions.h index 87a01ddc71..67fbe5ba42 100644 --- a/Pods/FirebaseCore/Firebase/Core/Public/FIROptions.h +++ b/Pods/FirebaseCore/Firebase/Core/Public/FIROptions.h @@ -90,6 +90,13 @@ NS_SWIFT_NAME(FirebaseOptions) */ @property(nonatomic, copy, nullable) NSString *storageBucket; +/** + * The App Group identifier to share data between the application and the application extensions. + * The App Group must be configured in the application and on the Apple Developer Portal. Default + * value `nil`. + */ +@property(nonatomic, copy, nullable) NSString *appGroupID; + /** * Initializes a customized instance of FIROptions from the file at the given plist file path. This * will read the file synchronously from disk. diff --git a/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h b/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h index fa26f694b7..95119aed92 100644 --- a/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h +++ b/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h @@ -14,7 +14,6 @@ * limitations under the License. */ -#import "FIRAnalyticsConfiguration.h" #import "FIRApp.h" #import "FIRConfiguration.h" #import "FIRLoggerLevel.h" diff --git a/Pods/FirebaseCore/README.md b/Pods/FirebaseCore/README.md index 00e6ade973..d0f46e02d5 100644 --- a/Pods/FirebaseCore/README.md +++ b/Pods/FirebaseCore/README.md @@ -1,8 +1,9 @@ # Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) This repository contains a subset of the Firebase iOS SDK source. It currently -includes FirebaseCore, FirebaseAuth, FirebaseDatabase, FirebaseFirestore, -FirebaseFunctions, FirebaseInAppMessagingDisplay, FirebaseMessaging and +includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, +FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and FirebaseStorage. The repository also includes GoogleUtilities source. The @@ -70,24 +71,60 @@ Instructions for installing binary frameworks via ## Development -Follow the subsequent instructions to develop, debug, unit test, run integration -tests, and try out reference samples: +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Note: If the CocoaPods cache is out of date, you may need to run +`pod repo update` before the `pod gen` command. + +Firestore has a self contained Xcode project. See +[Firestore/README.md](Firestore/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: ``` -$ git clone git@github.com:firebase/firebase-ios-sdk.git -$ cd firebase-ios-sdk/Example -$ pod update -$ open Firebase.xcworkspace +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb ``` -Firestore and Functions have self contained Xcode projects. See -[Firestore/README.md](Firestore/README.md) and -[Functions/README.md](Functions/README.md). +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. + +To update this section, find the versions of clang-format and swiftformat.rb to +match the versions in the CI failure logs +[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). ### Running Unit Tests Select a scheme and press Command-u to build a component and run its unit tests. +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + ### Running Sample Apps In order to run the sample apps and integration tests, you'll need valid `GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist @@ -149,10 +186,10 @@ very grateful! We'd like to empower as many developers as we can to be able to participate in the Firebase community. ### macOS and tvOS -FirebaseAuth, FirebaseCore, FirebaseDatabase and FirebaseStorage now compile, run unit tests, and -work on macOS and tvOS, thanks to contributions from the community. There are a few tweaks needed, -like ensuring iOS-only, macOS-only, or tvOS-only code is correctly guarded with checks for -`TARGET_OS_IOS`, `TARGET_OS_OSX` and `TARGET_OS_TV`. +Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, +FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, +FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. For tvOS, checkout the [Sample](Example/tvOSSample). @@ -161,10 +198,21 @@ actively developed primarily for iOS. While we can catch basic unit test issues may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). -For installation instructions, see [above](README.md#accessing-firebase-source-snapshots). +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: -Note that the Firebase pod is not available for macOS and tvOS. Install a selection of the -`FirebaseAuth`, `FirebaseCore`, `FirebaseDatabase` and `FirebaseStorage` CocoaPods. +``` +pod 'FirebaseABTesting' +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseRemoteConfig' +pod 'FirebaseStorage' +``` ## Roadmap diff --git a/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m new file mode 100644 index 0000000000..dd6a51b75a --- /dev/null +++ b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m @@ -0,0 +1,676 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#include + +#import +#import +#import +#import + +#import +#import + +#import +#import + +#import +#import +#import + +#import "FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h" + +#import "FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.h" + +/** The logger service string to use when printing to the console. */ +static GULLoggerService kFIRCoreDiagnostics = @"[FirebaseCoreDiagnostics/FIRCoreDiagnostics]"; + +#ifdef FIREBASE_BUILD_ZIP_FILE +static BOOL kUsingZipFile = YES; +#else // FIREBASE_BUILD_ZIP_FILE +static BOOL kUsingZipFile = NO; +#endif // FIREBASE_BUILD_ZIP_FILE + +#ifdef FIREBASE_BUILD_CARTHAGE +#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE +#elif FIREBASE_BUILD_ZIP_FILE +#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE +#else +#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS +#endif + +static NSString *const kFIRServiceMLVisionOnDeviceAutoML = @"MLVisionOnDeviceAutoML"; +static NSString *const kFIRServiceMLVisionOnDeviceFace = @"MLVisionOnDeviceFace"; +static NSString *const kFIRServiceMLVisionOnDeviceBarcode = @"MLVisionOnDeviceBarcode"; +static NSString *const kFIRServiceMLVisionOnDeviceText = @"MLVisionOnDeviceText"; +static NSString *const kFIRServiceMLVisionOnDeviceLabel = @"MLVisionOnDeviceLabel"; +static NSString *const kFIRServiceMLVisionOnDeviceObjectDetection = + @"MLVisionOnDeviceObjectDetection"; +static NSString *const kFIRServiceMLModelInterpreter = @"MLModelInterpreter"; + +static NSString *const kFIRServiceAdMob = @"AdMob"; +static NSString *const kFIRServiceAuth = @"Auth"; +static NSString *const kFIRServiceAuthUI = @"AuthUI"; +static NSString *const kFIRServiceCrash = @"Crash"; +static NSString *const kFIRServiceDatabase = @"Database"; +static NSString *const kFIRServiceDynamicLinks = @"DynamicLinks"; +static NSString *const kFIRServiceFirestore = @"Firestore"; +static NSString *const kFIRServiceFunctions = @"Functions"; +static NSString *const kFIRServiceIAM = @"InAppMessaging"; +static NSString *const kFIRServiceInstanceID = @"InstanceID"; +static NSString *const kFIRServiceInvites = @"Invites"; +static NSString *const kFIRServiceMessaging = @"Messaging"; +static NSString *const kFIRServiceMeasurement = @"Measurement"; +static NSString *const kFIRServicePerformance = @"Performance"; +static NSString *const kFIRServiceRemoteConfig = @"RemoteConfig"; +static NSString *const kFIRServiceStorage = @"Storage"; +static NSString *const kGGLServiceAnalytics = @"Analytics"; +static NSString *const kGGLServiceSignIn = @"SignIn"; +static NSString *const kFIRAppDiagnosticsConfigurationTypeKey = + @"FIRAppDiagnosticsConfigurationTypeKey"; +static NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRAppDiagnosticsFIRAppKey"; +static NSString *const kFIRAppDiagnosticsSDKNameKey = @"FIRAppDiagnosticsSDKNameKey"; +static NSString *const kFIRAppDiagnosticsSDKVersionKey = @"FIRAppDiagnosticsSDKVersionKey"; + +/** + * The file name to the recent heartbeat date. + */ +NSString *const kFIRCoreDiagnosticsHeartbeatDateFileName = @"FIREBASE_DIAGNOSTICS_HEARTBEAT_DATE"; + +/** + * @note This should implement the GDTCOREventDataObject protocol, but can't because of + * weak-linking. + */ +@interface FIRCoreDiagnosticsLog : NSObject + +/** The config that will be converted to proto bytes. */ +@property(nonatomic) logs_proto_mobilesdk_ios_ICoreConfiguration config; + +@end + +@implementation FIRCoreDiagnosticsLog + +- (instancetype)initWithConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration)config { + self = [super init]; + if (self) { + _config = config; + } + return self; +} + +// Provided and required by the GDTCOREventDataObject protocol. +- (NSData *)transportBytes { + pb_ostream_t sizestream = PB_OSTREAM_SIZING; + + // Encode 1 time to determine the size. + if (!pb_encode(&sizestream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) { + GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for size: %s", + PB_GET_ERROR(&sizestream)); + } + + // Encode a 2nd time to actually get the bytes from it. + size_t bufferSize = sizestream.bytes_written; + CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); + pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); + if (!pb_encode(&ostream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) { + GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for bytes: %s", + PB_GET_ERROR(&ostream)); + } + CFDataSetLength(dataRef, ostream.bytes_written); + + return CFBridgingRelease(dataRef); +} + +- (void)dealloc { + pb_release(logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config); +} + +@end + +NS_ASSUME_NONNULL_BEGIN + +/** This class produces a protobuf containing diagnostics and usage data to be logged. */ +@interface FIRCoreDiagnostics : NSObject + +/** The queue on which all diagnostics collection will occur. */ +@property(nonatomic, readonly) dispatch_queue_t diagnosticsQueue; + +/** The transport object used to send data. */ +@property(nonatomic, readonly) GDTCORTransport *transport; + +/** The storage to store the date of the last sent heartbeat. */ +@property(nonatomic, readonly) FIRCoreDiagnosticsDateFileStorage *heartbeatDateStorage; + +@end + +NS_ASSUME_NONNULL_END + +@implementation FIRCoreDiagnostics + ++ (instancetype)sharedInstance { + static FIRCoreDiagnostics *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[FIRCoreDiagnostics alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + GDTCORTransport *transport = [[GDTCORTransport alloc] initWithMappingID:@"137" + transformers:nil + target:kGDTCORTargetCCT]; + + FIRCoreDiagnosticsDateFileStorage *dateStorage = [[FIRCoreDiagnosticsDateFileStorage alloc] + initWithFileURL:[[self class] filePathURLWithName:kFIRCoreDiagnosticsHeartbeatDateFileName]]; + + return [self initWithTransport:transport heartbeatDateStorage:dateStorage]; +} + +/** Initializer for unit tests. + * + * @param transport A `GDTCORTransport` instance which that be used to send event. + * @param heartbeatDateStorage An instanse of date storage to track heartbeat sending. + * @return Returns the initialized `FIRCoreDiagnostics` instance. + */ +- (instancetype)initWithTransport:(GDTCORTransport *)transport + heartbeatDateStorage:(FIRCoreDiagnosticsDateFileStorage *)heartbeatDateStorage { + self = [super init]; + if (self) { + _diagnosticsQueue = + dispatch_queue_create("com.google.FIRCoreDiagnostics", DISPATCH_QUEUE_SERIAL); + _transport = transport; + _heartbeatDateStorage = heartbeatDateStorage; + } + return self; +} + +#pragma mark - File path helpers + +/** Returns the URL path of the file with name fileName under the Application Support folder for + * local logging. Creates the Application Support folder if the folder doesn't exist. + * + * @return the URL path of the file with the name fileName in Application Support. + */ ++ (NSURL *)filePathURLWithName:(NSString *)fileName { + @synchronized(self) { + NSArray *paths = + NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); + NSArray *components = @[ paths.lastObject, @"Google/FIRApp" ]; + NSString *directoryString = [NSString pathWithComponents:components]; + NSURL *directoryURL = [NSURL fileURLWithPath:directoryString]; + + NSError *error; + if (![directoryURL checkResourceIsReachableAndReturnError:&error]) { + // If fail creating the Application Support directory, return nil. + if (![[NSFileManager defaultManager] createDirectoryAtURL:directoryURL + withIntermediateDirectories:YES + attributes:nil + error:&error]) { + GULLogWarning(kFIRCoreDiagnostics, YES, @"I-COR100001", + @"Unable to create internal state storage: %@", error); + return nil; + } + } + return [directoryURL URLByAppendingPathComponent:fileName]; + } +} + +#pragma mark - Metadata helpers + +/** Returns the model of iOS device. Sample platform strings are @"iPhone7,1" for iPhone 6 Plus, + * @"iPhone7,2" for iPhone 6, etc. Refer to the Hardware strings at + * https://en.wikipedia.org/wiki/List_of_iOS_devices + * + * @return The device model as an NSString. + */ ++ (NSString *)deviceModel { + static NSString *deviceModel = nil; + if (deviceModel == nil) { + struct utsname systemInfo; + uname(&systemInfo); + deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; + } + return deviceModel; +} + +#pragma mark - nanopb helper functions + +/** Mallocs a pb_bytes_array and copies the given NSString's bytes into the bytes array. + * + * @note Memory needs to be free manually, through pb_free or pb_release. + * @param string The string to encode as pb_bytes. + */ +pb_bytes_array_t *FIREncodeString(NSString *string) { + NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding]; + return FIREncodeData(stringBytes); +} + +/** Mallocs a pb_bytes_array and copies the given NSData bytes into the bytes array. + * + * @note Memory needs to be free manually, through pb_free or pb_release. + * @param data The data to copy into the new bytes array. + */ +pb_bytes_array_t *FIREncodeData(NSData *data) { + pb_bytes_array_t *pbBytes = malloc(PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); + memcpy(pbBytes->bytes, [data bytes], data.length); + pbBytes->size = (pb_size_t)data.length; + return pbBytes; +} + +/** Maps a service string to the representative nanopb enum. + * + * @param serviceString The SDK service string to convert. + * @return The representative nanopb enum. + */ +logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType FIRMapFromServiceStringToTypeEnum( + NSString *serviceString) { + static NSDictionary *serviceStringToTypeEnum; + if (serviceStringToTypeEnum == nil) { + serviceStringToTypeEnum = @{ + kFIRServiceAdMob : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB), + kFIRServiceMessaging : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING), + kFIRServiceMeasurement : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT), + kFIRServiceRemoteConfig : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG), + kFIRServiceDatabase : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE), + kFIRServiceDynamicLinks : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS), + kFIRServiceAuth : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH), + kFIRServiceAuthUI : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI), + kFIRServiceFirestore : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE), + kFIRServiceFunctions : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS), + kFIRServicePerformance : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE), + kFIRServiceStorage : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE), + kFIRServiceMLVisionOnDeviceAutoML : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML), + kFIRServiceMLVisionOnDeviceFace : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE), + kFIRServiceMLVisionOnDeviceBarcode : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE), + kFIRServiceMLVisionOnDeviceText : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT), + kFIRServiceMLVisionOnDeviceLabel : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL), + kFIRServiceMLVisionOnDeviceObjectDetection : @( + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION), + kFIRServiceMLModelInterpreter : + @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER), + kGGLServiceAnalytics : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS), + kGGLServiceSignIn : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN), + kFIRServiceIAM : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING), + }; + } + if (serviceStringToTypeEnum[serviceString] != nil) { + return (int32_t)serviceStringToTypeEnum[serviceString].longLongValue; + } + return logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE; +} + +#pragma mark - Proto population functions + +/** Populates the given proto with data related to an SDK logDiagnostics call from the + * diagnosticObjects dictionary. + * + * @param config The proto to populate + * @param diagnosticObjects The dictionary of diagnostics objects. + */ +void FIRPopulateProtoWithInfoFromUserInfoParams(logs_proto_mobilesdk_ios_ICoreConfiguration *config, + NSDictionary *diagnosticObjects) { + NSNumber *configurationType = diagnosticObjects[kFIRCDConfigurationTypeKey]; + if (configurationType != nil) { + switch (configurationType.integerValue) { + case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE: + config->configuration_type = + logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE; + config->has_configuration_type = 1; + break; + case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK: + config->configuration_type = + logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK; + config->has_configuration_type = 1; + break; + default: + break; + } + } + + NSString *sdkName = diagnosticObjects[kFIRCDSdkNameKey]; + if (sdkName) { + config->sdk_name = FIRMapFromServiceStringToTypeEnum(sdkName); + config->has_sdk_name = 1; + } + + NSString *version = diagnosticObjects[kFIRCDSdkVersionKey]; + if (version) { + config->sdk_version = FIREncodeString(version); + } +} + +/** Populates the given proto with data from the calling FIRApp using the given + * diagnosticObjects dictionary. + * + * @param config The proto to populate + * @param diagnosticObjects The dictionary of diagnostics objects. + */ +void FIRPopulateProtoWithCommonInfoFromApp(logs_proto_mobilesdk_ios_ICoreConfiguration *config, + NSDictionary *diagnosticObjects) { + config->pod_name = logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE; + config->has_pod_name = 1; + + if (!diagnosticObjects[kFIRCDllAppsCountKey]) { + GDTCORLogError(GDTCORMCEGeneralError, @"%@", + @"App count is a required value in the data dict."); + } + config->app_count = (int32_t)[diagnosticObjects[kFIRCDllAppsCountKey] integerValue]; + config->has_app_count = 1; + + NSString *googleAppID = diagnosticObjects[kFIRCDGoogleAppIDKey]; + if (googleAppID.length) { + config->app_id = FIREncodeString(googleAppID); + } + + NSString *bundleID = diagnosticObjects[kFIRCDBundleIDKey]; + if (bundleID.length) { + config->bundle_id = FIREncodeString(bundleID); + } + + NSString *firebaseUserAgent = diagnosticObjects[kFIRCDFirebaseUserAgentKey]; + if (firebaseUserAgent.length) { + config->platform_info = FIREncodeString(firebaseUserAgent); + } + + NSNumber *usingOptionsFromDefaultPlist = diagnosticObjects[kFIRCDUsingOptionsFromDefaultPlistKey]; + if (usingOptionsFromDefaultPlist != nil) { + config->use_default_app = [usingOptionsFromDefaultPlist boolValue]; + config->has_use_default_app = 1; + } + + NSString *libraryVersionID = diagnosticObjects[kFIRCDLibraryVersionIDKey]; + if (libraryVersionID) { + config->icore_version = FIREncodeString(libraryVersionID); + } + + NSString *deviceModel = [FIRCoreDiagnostics deviceModel]; + if (deviceModel.length) { + config->device_model = FIREncodeString(deviceModel); + } + + NSString *osVersion = [GULAppEnvironmentUtil systemVersion]; + if (osVersion.length) { + config->os_version = FIREncodeString(osVersion); + } + + config->using_zip_file = kUsingZipFile; + config->has_using_zip_file = 1; + config->deployment_type = kDeploymentType; + config->has_deployment_type = 1; + config->deployed_in_app_store = [GULAppEnvironmentUtil isFromAppStore]; + config->has_deployed_in_app_store = 1; +} + +/** Populates the given proto with installed services data. + * + * @param config The proto to populate + */ +void FIRPopulateProtoWithInstalledServices(logs_proto_mobilesdk_ios_ICoreConfiguration *config) { + NSMutableArray *sdkServiceInstalledArray = [NSMutableArray array]; + + // AdMob + if (NSClassFromString(@"GADBannerView") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAdMob))]; + } + // CloudMessaging + if (NSClassFromString(@"FIRMessaging") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMessaging))]; + } + // RemoteConfig + if (NSClassFromString(@"FIRRemoteConfig") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceRemoteConfig))]; + } + // Measurement/Analtyics + if (NSClassFromString(@"FIRAnalytics") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMeasurement))]; + } + // ML Vision On Device AutoML. + if (NSClassFromString(@"FIRVisionOnDeviceAutoMLImageLabelerOptions") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceAutoML))]; + } + // ML Vision On Device Face. + if (NSClassFromString(@"FIRVisionFaceDetector") != nil && + NSClassFromString(@"GMVFaceDetector") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceFace))]; + } + // ML Vision On Device Barcode. + if (NSClassFromString(@"FIRVisionBarcodeDetector") != nil && + NSClassFromString(@"GMVBarcodeDetector") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceBarcode))]; + } + // ML Vision On Device Text. + if (NSClassFromString(@"FIRVisionTextDetector") != nil && + NSClassFromString(@"GMVTextDetector") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceText))]; + } + // ML Vision On Device Image Label. + if (NSClassFromString(@"FIRVisionLabelDetector") != nil && + NSClassFromString(@"GMVLabelDetector") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceLabel))]; + } + // ML Vision On Device Object. + if (NSClassFromString(@"FIRVisionObjectDetector") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceObjectDetection))]; + } + // ML Model Interpreter + if (NSClassFromString(@"FIRCustomModelInterpreter") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLModelInterpreter))]; + } + // Database + if (NSClassFromString(@"FIRDatabase") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDatabase))]; + } + // DynamicDeepLink + if (NSClassFromString(@"FIRDynamicLinks") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDynamicLinks))]; + } + // Auth + if (NSClassFromString(@"FIRAuth") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuth))]; + } + // AuthUI + if (NSClassFromString(@"FUIAuth") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuthUI))]; + } + // Firestore + if (NSClassFromString(@"FIRFirestore") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFirestore))]; + } + // Functions + if (NSClassFromString(@"FIRFunctions") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFunctions))]; + } + // Performance + if (NSClassFromString(@"FIRPerformance") != nil) { + [sdkServiceInstalledArray + addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServicePerformance))]; + } + // Storage + if (NSClassFromString(@"FIRStorage") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceStorage))]; + } + // SignIn via Google pod + if (NSClassFromString(@"GIDSignIn") != nil && NSClassFromString(@"GGLContext") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceSignIn))]; + } + // Analytics via Google pod + if (NSClassFromString(@"GAI") != nil && NSClassFromString(@"GGLContext") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceAnalytics))]; + } + + // In-App Messaging + if (NSClassFromString(@"FIRInAppMessaging") != nil) { + [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceIAM))]; + } + + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *servicesInstalled = + malloc(sizeof(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType) * + sdkServiceInstalledArray.count); + for (NSUInteger i = 0; i < sdkServiceInstalledArray.count; i++) { + NSNumber *typeEnum = sdkServiceInstalledArray[i]; + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType serviceType = + (int32_t)typeEnum.integerValue; + servicesInstalled[i] = serviceType; + } + + config->sdk_service_installed = servicesInstalled; + config->sdk_service_installed_count = (int32_t)sdkServiceInstalledArray.count; +} + +/** Populates the proto with the number of linked frameworks. + * + * @param config The proto to populate. + */ +void FIRPopulateProtoWithNumberOfLinkedFrameworks( + logs_proto_mobilesdk_ios_ICoreConfiguration *config) { + int numFrameworks = -1; // Subtract the app binary itself. + unsigned int numImages; + const char **imageNames = objc_copyImageNames(&numImages); + for (unsigned int i = 0; i < numImages; i++) { + NSString *imageName = [NSString stringWithUTF8String:imageNames[i]]; + if ([imageName rangeOfString:@"System/Library"].length != 0 // Apple .frameworks + || [imageName rangeOfString:@"Developer/Library"].length != 0 // Xcode debug .frameworks + || [imageName rangeOfString:@"usr/lib"].length != 0) { // Public .dylibs + continue; + } + numFrameworks++; + } + free(imageNames); + config->dynamic_framework_count = numFrameworks; + config->has_dynamic_framework_count = 1; +} + +/** Populates the proto with Info.plist values. + * + * @param config The proto to populate. + */ +void FIRPopulateProtoWithInfoPlistValues(logs_proto_mobilesdk_ios_ICoreConfiguration *config) { + NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; + + NSString *xcodeVersion = info[@"DTXcodeBuild"] ?: @""; + NSString *sdkVersion = info[@"DTSDKBuild"] ?: @""; + NSString *combinedVersions = [NSString stringWithFormat:@"%@-%@", xcodeVersion, sdkVersion]; + config->apple_framework_version = FIREncodeString(combinedVersions); + + NSString *minVersion = info[@"MinimumOSVersion"]; + if (minVersion) { + config->min_supported_ios_version = FIREncodeString(minVersion); + } + + // Apps can turn off swizzling in the Info.plist, check if they've explicitly set the value and + // report it. It's enabled by default. + NSNumber *appDelegateSwizzledNum = info[@"FirebaseAppDelegateProxyEnabled"]; + BOOL appDelegateSwizzled = YES; + if ([appDelegateSwizzledNum isKindOfClass:[NSNumber class]]) { + appDelegateSwizzled = [appDelegateSwizzledNum boolValue]; + } + config->swizzling_enabled = appDelegateSwizzled; + config->has_swizzling_enabled = 1; +} + +#pragma mark - FIRCoreDiagnosticsInterop + ++ (void)sendDiagnosticsData:(nonnull id)diagnosticsData { + FIRCoreDiagnostics *diagnostics = [FIRCoreDiagnostics sharedInstance]; + [diagnostics sendDiagnosticsData:diagnosticsData]; +} + +- (void)sendDiagnosticsData:(nonnull id)diagnosticsData { + dispatch_async(self.diagnosticsQueue, ^{ + NSDictionary *diagnosticObjects = diagnosticsData.diagnosticObjects; + NSNumber *isDataCollectionDefaultEnabled = + diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey]; + if (isDataCollectionDefaultEnabled && ![isDataCollectionDefaultEnabled boolValue]) { + return; + } + + // Create the proto. + logs_proto_mobilesdk_ios_ICoreConfiguration icore_config = + logs_proto_mobilesdk_ios_ICoreConfiguration_init_default; + + icore_config.using_gdt = 1; + icore_config.has_using_gdt = 1; + + // Populate the proto with information. + FIRPopulateProtoWithInfoFromUserInfoParams(&icore_config, diagnosticObjects); + FIRPopulateProtoWithCommonInfoFromApp(&icore_config, diagnosticObjects); + FIRPopulateProtoWithInstalledServices(&icore_config); + FIRPopulateProtoWithNumberOfLinkedFrameworks(&icore_config); + FIRPopulateProtoWithInfoPlistValues(&icore_config); + [self setHeartbeatFlagIfNeededToConfig:&icore_config]; + + // This log object is capable of converting the proto to bytes. + FIRCoreDiagnosticsLog *log = [[FIRCoreDiagnosticsLog alloc] initWithConfig:icore_config]; + + // Send the log as a telemetry event. + GDTCOREvent *event = [self.transport eventForTransport]; + event.dataObject = (id)log; + [self.transport sendTelemetryEvent:event]; + }); +} + +#pragma mark - Heartbeat + +- (void)setHeartbeatFlagIfNeededToConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration *)config { + // Check if need to send a heartbeat. + NSDate *currentDate = [NSDate date]; + NSDate *lastCheckin = [self.heartbeatDateStorage date]; + if (lastCheckin) { + // Ensure the previous checkin was on a different date in the past. + if ([self isDate:currentDate inSameDayOrBeforeThan:lastCheckin]) { + return; + } + } + + // Update heartbeat sent date. + NSError *error; + if (![self.heartbeatDateStorage setDate:currentDate error:&error]) { + GULLogError(kFIRCoreDiagnostics, NO, @"I-COR100004", @"Unable to persist internal state: %@", + error); + } + + // Set the flag. + config->sdk_name = logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE; + config->has_sdk_name = 1; +} + +- (BOOL)isDate:(NSDate *)date1 inSameDayOrBeforeThan:(NSDate *)date2 { + return [[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2] || + [date1 compare:date2] == NSOrderedAscending; +} + +@end diff --git a/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.h b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.h new file mode 100644 index 0000000000..93e406a4da --- /dev/null +++ b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.h @@ -0,0 +1,47 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Stores a date to a specified file. +@interface FIRCoreDiagnosticsDateFileStorage : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** + * Default initializer. + * @param fileURL The URL of the file to store the date. The directory must exist, the file may not + * exist, it will be created if needed. + */ +- (instancetype)initWithFileURL:(NSURL *)fileURL; + +/** + * Saves the date to the specified file. + * @return YES on success, NO otherwise. + */ +- (BOOL)setDate:(nullable NSDate *)date error:(NSError **)outError; + +/** + * Reads the date to the specified file. + * @return Returns date if exists, otherwise `nil`. + */ +- (nullable NSDate *)date; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.m b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.m new file mode 100644 index 0000000000..f4dca12a7b --- /dev/null +++ b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.m @@ -0,0 +1,64 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.h" + +@interface FIRCoreDiagnosticsDateFileStorage () +@property(nonatomic, readonly) NSURL *fileURL; +@end + +@implementation FIRCoreDiagnosticsDateFileStorage + +- (instancetype)initWithFileURL:(NSURL *)fileURL { + if (fileURL == nil) { + return nil; + } + + self = [super init]; + if (self) { + _fileURL = fileURL; + } + + return self; +} + +- (BOOL)setDate:(nullable NSDate *)date error:(NSError **)outError { + NSString *stringToSave = @""; + + if (date != nil) { + NSTimeInterval timestamp = [date timeIntervalSinceReferenceDate]; + stringToSave = [NSString stringWithFormat:@"%f", timestamp]; + } + + return [stringToSave writeToURL:self.fileURL + atomically:YES + encoding:NSUTF8StringEncoding + error:outError]; +} + +- (nullable NSDate *)date { + NSString *timestampString = [NSString stringWithContentsOfURL:self.fileURL + encoding:NSUTF8StringEncoding + error:nil]; + if (timestampString.length == 0) { + return nil; + } + + NSTimeInterval timestamp = timestampString.doubleValue; + return [NSDate dateWithTimeIntervalSinceReferenceDate:timestamp]; +} + +@end diff --git a/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c new file mode 100644 index 0000000000..3e01479cc7 --- /dev/null +++ b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c @@ -0,0 +1,60 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Automatically generated nanopb constant definitions */ +/* Generated by nanopb-0.3.9.2 */ + +#include "firebasecore.nanopb.h" + +/* @@protoc_insertion_point(includes) */ +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + + + +const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22] = { + PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, logs_proto_mobilesdk_ios_ICoreConfiguration, configuration_type, configuration_type, 0), + PB_FIELD( 7, UENUM , REPEATED, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_service_installed, configuration_type, 0), + PB_FIELD( 9, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, device_model, sdk_service_installed, 0), + PB_FIELD( 10, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_id, device_model, 0), + PB_FIELD( 12, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, bundle_id, app_id, 0), + PB_FIELD( 16, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, pod_name, bundle_id, 0), + PB_FIELD( 18, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, icore_version, pod_name, 0), + PB_FIELD( 19, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_version, icore_version, 0), + PB_FIELD( 20, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_name, sdk_version, 0), + PB_FIELD( 21, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_count, sdk_name, 0), + PB_FIELD( 22, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, os_version, app_count, 0), + PB_FIELD( 24, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, min_supported_ios_version, os_version, 0), + PB_FIELD( 25, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, use_default_app, min_supported_ios_version, 0), + PB_FIELD( 26, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployed_in_app_store, use_default_app, 0), + PB_FIELD( 27, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, dynamic_framework_count, deployed_in_app_store, 0), + PB_FIELD( 28, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, apple_framework_version, dynamic_framework_count, 0), + PB_FIELD( 29, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_zip_file, apple_framework_version, 0), + PB_FIELD( 30, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployment_type, using_zip_file, 0), + PB_FIELD( 31, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, platform_info, deployment_type, 0), + PB_FIELD( 33, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, swizzling_enabled, platform_info, 0), + PB_FIELD( 36, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_gdt, swizzling_enabled, 0), + PB_LAST_FIELD +}; + + + + + + + +/* @@protoc_insertion_point(eof) */ diff --git a/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h new file mode 100644 index 0000000000..7083052ebd --- /dev/null +++ b/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h @@ -0,0 +1,193 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Automatically generated nanopb header */ +/* Generated by nanopb-0.3.9.2 */ + +#ifndef PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED +#define PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED +#include + +/* @@protoc_insertion_point(includes) */ +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + + +/* Enum definitions */ +typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType { + logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE = 0, + logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE = 1, + logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK = 2 +} logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType; +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK+1)) + +typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType { + logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE = 0, + logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_INTERNAL = 1, + logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_EAP = 2, + logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD = 3 +} logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType; +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType)(logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD+1)) + +typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType { + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE = 0, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE = 1, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB = 2, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INVITE = 3, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN = 5, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_GCM = 6, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAPS = 7, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SCION = 8, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS = 9, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INDEXING = 10, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CONFIG = 11, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DURABLE_DEEP_LINKS = 12, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CRASH = 13, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH = 14, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE = 15, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE = 16, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING = 17, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT = 18, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG = 19, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS = 20, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_INVITES = 21, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI = 22, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE = 23, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE = 24, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE = 26, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE = 27, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT = 28, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL = 29, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER = 30, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING = 31, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS = 32, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_NATURAL_LANGUAGE = 33, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML = 34, + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION = 35 +} logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType; +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION+1)) + +typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName { + logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME = 0, + logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_GOOGLE = 1, + logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE = 2 +} logs_proto_mobilesdk_ios_ICoreConfiguration_PodName; +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_PodName)(logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE+1)) + +typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType { + logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN = 0, + logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS = 1, + logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE = 2, + logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE = 3, + logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM = 4 +} logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType; +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM +#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType)(logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM+1)) + +/* Struct definitions */ +typedef struct _logs_proto_mobilesdk_ios_ICoreConfiguration { + bool has_configuration_type; + logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType configuration_type; + pb_size_t sdk_service_installed_count; + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *sdk_service_installed; + pb_bytes_array_t *device_model; + pb_bytes_array_t *app_id; + pb_bytes_array_t *bundle_id; + bool has_pod_name; + logs_proto_mobilesdk_ios_ICoreConfiguration_PodName pod_name; + pb_bytes_array_t *icore_version; + pb_bytes_array_t *sdk_version; + bool has_sdk_name; + logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType sdk_name; + bool has_app_count; + int32_t app_count; + pb_bytes_array_t *os_version; + pb_bytes_array_t *min_supported_ios_version; + bool has_use_default_app; + bool use_default_app; + bool has_deployed_in_app_store; + bool deployed_in_app_store; + bool has_dynamic_framework_count; + int32_t dynamic_framework_count; + pb_bytes_array_t *apple_framework_version; + bool has_using_zip_file; + bool using_zip_file; + bool has_deployment_type; + logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType deployment_type; + pb_bytes_array_t *platform_info; + bool has_swizzling_enabled; + bool swizzling_enabled; + bool has_using_gdt; + bool using_gdt; +/* @@protoc_insertion_point(struct:logs_proto_mobilesdk_ios_ICoreConfiguration) */ +} logs_proto_mobilesdk_ios_ICoreConfiguration; + +/* Default values for struct fields */ + +/* Initializer values for message structs */ +#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_default {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0} +#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_zero {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0} + +/* Field tags (for use in manual encoding/decoding) */ +#define logs_proto_mobilesdk_ios_ICoreConfiguration_pod_name_tag 16 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_configuration_type_tag 1 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_icore_version_tag 18 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_version_tag 19 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_service_installed_tag 7 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_name_tag 20 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_device_model_tag 9 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_os_version_tag 22 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_id_tag 10 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_bundle_id_tag 12 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_min_supported_ios_version_tag 24 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_use_default_app_tag 25 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_count_tag 21 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployed_in_app_store_tag 26 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_dynamic_framework_count_tag 27 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_apple_framework_version_tag 28 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_zip_file_tag 29 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployment_type_tag 30 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_platform_info_tag 31 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_swizzling_enabled_tag 33 +#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_gdt_tag 36 + +/* Struct field encoding specification for nanopb */ +extern const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22]; + +/* Maximum encoded size of messages (where known) */ +/* logs_proto_mobilesdk_ios_ICoreConfiguration_size depends on runtime parameters */ + +/* Message IDs (where set with "msgid" option) */ +#ifdef PB_MSGID + +#define FIREBASECORE_MESSAGES \ + + +#endif + +/* @@protoc_insertion_point(eof) */ + +#endif diff --git a/Pods/FirebaseCoreDiagnostics/LICENSE b/Pods/FirebaseCoreDiagnostics/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/Pods/FirebaseCoreDiagnostics/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/FirebaseCoreDiagnostics/README.md b/Pods/FirebaseCoreDiagnostics/README.md new file mode 100644 index 0000000000..f55d642180 --- /dev/null +++ b/Pods/FirebaseCoreDiagnostics/README.md @@ -0,0 +1,230 @@ +# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) + +This repository contains a subset of the Firebase iOS SDK source. It currently +includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, +FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and +FirebaseStorage. + +The repository also includes GoogleUtilities source. The +[GoogleUtilities](GoogleUtilities/README.md) pod is +a set of utilities used by Firebase and other Google products. + +Firebase is an app development platform with tools to help you build, grow and +monetize your app. More information about Firebase can be found at +[https://firebase.google.com](https://firebase.google.com). + +## Installation + +See the three subsections for details about three different installation methods. +1. [Standard pod install](README.md#standard-pod-install) +1. [Installing from the GitHub repo](README.md#installing-from-github) +1. [Experimental Carthage](README.md#carthage-ios-only) + +### Standard pod install + +Go to +[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). + +### Installing from GitHub + +For releases starting with 5.0.0, the source for each release is also deployed +to CocoaPods master and available via standard +[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). + +These instructions can be used to access the Firebase repo at other branches, +tags, or commits. + +#### Background + +See +[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) +for instructions and options about overriding pod source locations. + +#### Accessing Firebase Source Snapshots + +All of the official releases are tagged in this repo and available via CocoaPods. To access a local +source snapshot or unreleased branch, use Podfile directives like the following: + +To access FirebaseFirestore via a branch: +``` +pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +``` + +To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: + +``` +pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' +pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' +``` + +### Carthage (iOS only) + +Instructions for the experimental Carthage distribution are at +[Carthage](Carthage.md). + +### Rome + +Instructions for installing binary frameworks via +[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). + +## Development + +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Firestore has a self contained Xcode project. See +[Firestore/README.md](Firestore/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: + +``` +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb +``` + +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. + +To update this section, find the versions of clang-format and swiftformat.rb to +match the versions in the CI failure logs +[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). + +### Running Unit Tests + +Select a scheme and press Command-u to build a component and run its unit tests. + +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + +### Running Sample Apps +In order to run the sample apps and integration tests, you'll need valid +`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist +files without real values, but can be replaced with real plist files. To get your own +`GoogleService-Info.plist` files: + +1. Go to the [Firebase Console](https://console.firebase.google.com/) +2. Create a new Firebase project, if you don't already have one +3. For each sample app you want to test, create a new Firebase app with the sample app's bundle +identifier (e.g. `com.google.Database-Example`) +4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file +(e.g. in [Example/Database/App/](Example/Database/App/)); + +Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require +special Apple capabilities, and you will have to change the sample app to use a unique bundle +identifier that you can control in your own Apple Developer account. + +## Specific Component Instructions +See the sections below for any special instructions for those components. + +### Firebase Auth + +If you're doing specific Firebase Auth development, see +[the Auth Sample README](Example/Auth/README.md) for instructions about +building and running the FirebaseAuth pod along with various samples and tests. + +### Firebase Database + +To run the Database Integration tests, make your database authentication rules +[public](https://firebase.google.com/docs/database/security/quickstart). + +### Firebase Storage + +To run the Storage Integration tests, follow the instructions in +[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). + +#### Push Notifications + +Push notifications can only be delivered to specially provisioned App IDs in the developer portal. +In order to actually test receiving push notifications, you will need to: + +1. Change the bundle identifier of the sample app to something you own in your Apple Developer +account, and enable that App ID for push notifications. +2. You'll also need to +[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) +at **Project Settings > Cloud Messaging > [Your Firebase App]**. +3. Ensure your iOS device is added to your Apple Developer portal as a test device. + +#### iOS Simulator + +The iOS Simulator cannot register for remote notifications, and will not receive push notifications. +In order to receive push notifications, you'll have to follow the steps above and run the app on a +physical device. + +## Community Supported Efforts + +We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are +very grateful! We'd like to empower as many developers as we can to be able to use Firebase and +participate in the Firebase community. + +### macOS and tvOS +Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, +FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, +FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. + +For tvOS, checkout the [Sample](Example/tvOSSample). + +Keep in mind that macOS and tvOS are not officially supported by Firebase, and this repository is +actively developed primarily for iOS. While we can catch basic unit test issues with Travis, there +may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter +this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). + +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: + +``` +pod 'FirebaseABTesting' +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseRemoteConfig' +pod 'FirebaseStorage' +``` + +## Roadmap + +See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +plans and directions. + +## Contributing + +See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase +iOS SDK. + +## License + +The contents of this repository is licensed under the +[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +Your use of Firebase is governed by the +[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h b/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h new file mode 100644 index 0000000000..7c74776960 --- /dev/null +++ b/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** If present, is a BOOL wrapped in an NSNumber. */ +static NSString *const kFIRCDIsDataCollectionDefaultEnabledKey = + @"FIRCDIsDataCollectionDefaultEnabledKey"; + +/** If present, is an int32_t wrapped in an NSNumber. */ +static NSString *const kFIRCDConfigurationTypeKey = @"FIRCDConfigurationTypeKey"; + +/** If present, is an NSString. */ +static NSString *const kFIRCDSdkNameKey = @"FIRCDSdkNameKey"; + +/** If present, is an NSString. */ +static NSString *const kFIRCDSdkVersionKey = @"FIRCDSdkVersionKey"; + +/** If present, is an int32_t wrapped in an NSNumber. */ +static NSString *const kFIRCDllAppsCountKey = @"FIRCDllAppsCountKey"; + +/** If present, is an NSString. */ +static NSString *const kFIRCDGoogleAppIDKey = @"FIRCDGoogleAppIDKey"; + +/** If present, is an NSString. */ +static NSString *const kFIRCDBundleIDKey = @"FIRCDBundleID"; + +/** If present, is a BOOL wrapped in an NSNumber. */ +static NSString *const kFIRCDUsingOptionsFromDefaultPlistKey = + @"FIRCDUsingOptionsFromDefaultPlistKey"; + +/** If present, is an NSString. */ +static NSString *const kFIRCDLibraryVersionIDKey = @"FIRCDLibraryVersionIDKey"; + +/** If present, is an NSString. */ +static NSString *const kFIRCDFirebaseUserAgentKey = @"FIRCDFirebaseUserAgentKey"; + +/** Defines the interface of a data object needed to log diagnostics data. */ +@protocol FIRCoreDiagnosticsData + +@required + +/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */ +@property(nonatomic) NSDictionary *diagnosticObjects; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h b/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h new file mode 100644 index 0000000000..2b0eb710cd --- /dev/null +++ b/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h @@ -0,0 +1,34 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import "FIRCoreDiagnosticsData.h" + +NS_ASSUME_NONNULL_BEGIN + +/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */ +@protocol FIRCoreDiagnosticsInterop + +/** Sends the given diagnostics data. + * + * @param diagnosticsData The diagnostics data object to send. + */ ++ (void)sendDiagnosticsData:(id)diagnosticsData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCoreDiagnosticsInterop/LICENSE b/Pods/FirebaseCoreDiagnosticsInterop/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/Pods/FirebaseCoreDiagnosticsInterop/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/FirebaseCoreDiagnosticsInterop/README.md b/Pods/FirebaseCoreDiagnosticsInterop/README.md new file mode 100644 index 0000000000..bf397f0578 --- /dev/null +++ b/Pods/FirebaseCoreDiagnosticsInterop/README.md @@ -0,0 +1,223 @@ +# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) + +This repository contains a subset of the Firebase iOS SDK source. It currently +includes FirebaseCore, FirebaseAuth, FirebaseDatabase, FirebaseFirestore, +FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging and FirebaseStorage. + +The repository also includes GoogleUtilities source. The +[GoogleUtilities](GoogleUtilities/README.md) pod is +a set of utilities used by Firebase and other Google products. + +Firebase is an app development platform with tools to help you build, grow and +monetize your app. More information about Firebase can be found at +[https://firebase.google.com](https://firebase.google.com). + +## Installation + +See the three subsections for details about three different installation methods. +1. [Standard pod install](README.md#standard-pod-install) +1. [Installing from the GitHub repo](README.md#installing-from-github) +1. [Experimental Carthage](README.md#carthage-ios-only) + +### Standard pod install + +Go to +[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). + +### Installing from GitHub + +For releases starting with 5.0.0, the source for each release is also deployed +to CocoaPods master and available via standard +[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). + +These instructions can be used to access the Firebase repo at other branches, +tags, or commits. + +#### Background + +See +[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) +for instructions and options about overriding pod source locations. + +#### Accessing Firebase Source Snapshots + +All of the official releases are tagged in this repo and available via CocoaPods. To access a local +source snapshot or unreleased branch, use Podfile directives like the following: + +To access FirebaseFirestore via a branch: +``` +pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +``` + +To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: + +``` +pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' +pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' +``` + +### Carthage (iOS only) + +Instructions for the experimental Carthage distribution are at +[Carthage](Carthage.md). + +### Rome + +Instructions for installing binary frameworks via +[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). + +## Development + +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Firestore and Functions have self contained Xcode projects. See +[Firestore/README.md](Firestore/README.md) and +[Functions/README.md](Functions/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: + +``` +brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/773cb75d360b58f32048f5964038d09825a507c8/Formula/clang-format.rb +brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/3dfea1004e0736754bbf49673cca8aaed8a94089/Formula/swiftformat.rb +``` + +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. + +### Running Unit Tests + +Select a scheme and press Command-u to build a component and run its unit tests. + +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + +### Running Sample Apps +In order to run the sample apps and integration tests, you'll need valid +`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist +files without real values, but can be replaced with real plist files. To get your own +`GoogleService-Info.plist` files: + +1. Go to the [Firebase Console](https://console.firebase.google.com/) +2. Create a new Firebase project, if you don't already have one +3. For each sample app you want to test, create a new Firebase app with the sample app's bundle +identifier (e.g. `com.google.Database-Example`) +4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file +(e.g. in [Example/Database/App/](Example/Database/App/)); + +Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require +special Apple capabilities, and you will have to change the sample app to use a unique bundle +identifier that you can control in your own Apple Developer account. + +## Specific Component Instructions +See the sections below for any special instructions for those components. + +### Firebase Auth + +If you're doing specific Firebase Auth development, see +[the Auth Sample README](Example/Auth/README.md) for instructions about +building and running the FirebaseAuth pod along with various samples and tests. + +### Firebase Database + +To run the Database Integration tests, make your database authentication rules +[public](https://firebase.google.com/docs/database/security/quickstart). + +### Firebase Storage + +To run the Storage Integration tests, follow the instructions in +[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). + +#### Push Notifications + +Push notifications can only be delivered to specially provisioned App IDs in the developer portal. +In order to actually test receiving push notifications, you will need to: + +1. Change the bundle identifier of the sample app to something you own in your Apple Developer +account, and enable that App ID for push notifications. +2. You'll also need to +[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) +at **Project Settings > Cloud Messaging > [Your Firebase App]**. +3. Ensure your iOS device is added to your Apple Developer portal as a test device. + +#### iOS Simulator + +The iOS Simulator cannot register for remote notifications, and will not receive push notifications. +In order to receive push notifications, you'll have to follow the steps above and run the app on a +physical device. + +## Community Supported Efforts + +We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are +very grateful! We'd like to empower as many developers as we can to be able to use Firebase and +participate in the Firebase community. + +### macOS and tvOS +Thanks to contributions from the community, FirebaseAuth, FirebaseCore, FirebaseDatabase, FirebaseMessaging, +FirebaseFirestore, FirebaseFunctions and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. + +For tvOS, checkout the [Sample](Example/tvOSSample). + +Keep in mind that macOS and tvOS are not officially supported by Firebase, and this repository is +actively developed primarily for iOS. While we can catch basic unit test issues with Travis, there +may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter +this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). + +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: + +``` +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseStorage' +``` + +## Roadmap + +See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +plans and directions. + +## Contributing + +See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase +iOS SDK. + +## License + +The contents of this repository is licensed under the +[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +Your use of Firebase is governed by the +[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/Pods/FirebaseInstanceID/CHANGELOG.md b/Pods/FirebaseInstanceID/CHANGELOG.md deleted file mode 100755 index b81d158e79..0000000000 --- a/Pods/FirebaseInstanceID/CHANGELOG.md +++ /dev/null @@ -1,132 +0,0 @@ -# 2018-10-25 -- v3.3.0 -- Fixed a crash caused by keychain operation when accessing default access group. (#1399, #1393) -- Remove internal APIs that are no longer used. - -# 2018-09-25 -- v3.2.2 -- Fixed a crash caused by NSUserDefaults being called on background thread. - -# 2018-08-14 -- v3.2.1 -- Fixed an issue that checkin is not cached properly when app first started. (#1561) - -# 2018-07-31 -- v3.2.0 -- Added support for global Firebase data collection flag. (#1219) -- Improved message tracking sent by server API. -- Fixed an issue that InstanceID doesn't compile in app extensions, allowing its -dependents like remote config to be working inside the app extensions. - -# 2018-06-19 -- v3.1.1 -- Ensure the checkin and tokens are refreshed if firebase project changed. -- Fixed an issue that checkin should be turned off when FCM's autoInitEnabled flag is off. - -# 2018-06-12 -- v3.1.0 -- Added a new API to fetch InstanceID and Token with a completion handler. The completion handler returns a FIRInstanceIDResult with a instanceID and a token properties. -- Deprecated the token method. -- Added support to log a new customized label provided by developer. - -# 2018-05-08 -- v3.0.0 -- Removed deprecated method `setAPNSToken:type` defined in FIRInstanceID, please use `setAPNSToken:type` defined in FIRMessaging instead. -- Removed deprecated enum `FIRInstanceIDAPNSTokenType` defined in FIRInstanceID, please use `FIRMessagingAPNSTokenType` defined in FIRMessaging instead. -- Fixed an issue that FCM scheduled messages were not tracked successfully. - -# 2018-03-06 -- v2.0.10 -- Improved documentation on InstanceID usage for GDPR. -- Improved the keypair handling during GCM to FCM migration. If you are migrating from GCM to FCM, we encourage you to update to this version and above. - -# 2018-02-06 -- v2.0.9 -- Improved support for language targeting for FCM service. Server updates happen more efficiently when language changes. -- Improved support for FCM token auto generation enable/disable functions. - -# 2017-12-11 -- v2.0.8 -- Fixed a crash caused by a reflection call during logging. -- Updating server with the latest parameters and deprecating old ones. - -# 2017-11-27 -- v2.0.7 -- Improve identity reset process, ensuring all information is reset during Identity deletion. - -# 2017-11-06 -- v2.0.6 -- Make token refresh weekly. -- Fixed a crash when performing token operation. - -# 2017-10-11 -- v2.0.5 -- Improved support for working in shared Keychain environments. - -# 2017-09-26 -- v2.0.4 -- Fixed an issue where the FCM token was not associating correctly with an APNs - device token, depending on when the APNs device token was made available. -- Fixed an issue where FCM tokens for different Sender IDs were not associating - correctly with an APNs device token. -- Fixed an issue that was preventing the FCM direct channel from being - established on the first start after 24 hours of being opened. - -# 2017-09-13 -- v2.0.3 -- Fixed a race condition where a token was not being generated on first start, - if Firebase Messaging was included and the app did not register for remote - notifications. - -# 2017-08-25 -- v2.0.2 -- Fixed a startup performance regression, removing a call which was blocking the - main thread. - -# 2017-08-07 -- v2.0.1 -- Fixed issues with token and app identifier being inaccessible when the device - is locked. -- Fixed a crash if bundle identifier is nil, which is possible in some testing - environments. -- Fixed a small memory leak fetching a new token. -- Moved to a new and simplified token storage system. -- Moved to a new queuing system for token fetches and deletes. -- Simplified logic and code around configuration and logging. -- Added clarification about the 'apns_sandbox' parameter, in header comments. - -# 2017-05-08 -- v2.0.0 -- Introduced an improved interface for Swift 3 developers -- Deprecated some methods and properties after moving their logic to the - Firebase Cloud Messaging SDK -- Fixed an intermittent stability issue when a debug build of an app was - replaced with a release build of the same version -- Removed swizzling logic that was sometimes resulting in developers receiving - a validation notice about enabling push notification capabilities, even though - they weren't using push notifications -- Fixed a notification that would sometimes fire twice in quick succession - during the first run of an app - -# 2017-03-31 -- v1.0.10 - -- Improvements to token-fetching logic -- Fixed some warnings in Instance ID -- Improved error messages if Instance ID couldn't be initialized properly -- Improvements to console logging - -# 2017-01-31 -- v1.0.9 - -- Removed an error being mistakenly logged to the console. - -# 2016-07-06 -- v1.0.8 - -- Don't store InstanceID plists in Documents folder. - -# 2016-06-19 -- v1.0.7 - -- Fix remote-notifications warning on app submission. - -# 2016-05-16 -- v1.0.6 - -- Fix CocoaPod linter issues for InstanceID pod. - -# 2016-05-13 -- v1.0.5 - -- Fix Authorization errors for InstanceID tokens. - -# 2016-05-11 -- v1.0.4 - -- Reduce wait for InstanceID token during parallel requests. - -# 2016-04-18 -- v1.0.3 - -- Change flag to disable swizzling to *FirebaseAppDelegateProxyEnabled*. -- Fix incessant Keychain errors while accessing InstanceID. -- Fix max retries for fetching IID token. - -# 2016-04-18 -- v1.0.2 - -- Register for remote notifications on iOS8+ in the SDK itself. diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRIMessageCode.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRIMessageCode.h new file mode 100644 index 0000000000..60071ebd59 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRIMessageCode.h @@ -0,0 +1,167 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +// The format of the debug code will show in the log as: e.g. +// for code 1000, it will show as I-IID001000. +typedef NS_ENUM(NSInteger, FIRInstanceIDMessageCode) { + // DO NOT USE 2000, 2002. + kFIRInstanceIDMessageCodeFIRApp000 = 1000, // I-IID001000 + kFIRInstanceIDMessageCodeFIRApp001 = 1001, + kFIRInstanceIDMessageCodeFIRApp002 = 1002, + kFIRInstanceIDMessageCodeInternal001 = 2001, + kFIRInstanceIDMessageCodeInternal002 = 2002, + // FIRInstanceID.m + // DO NOT USE 4000. + kFIRInstanceIDMessageCodeInstanceID000 = 3000, + kFIRInstanceIDMessageCodeInstanceID001 = 3001, + kFIRInstanceIDMessageCodeInstanceID002 = 3002, + kFIRInstanceIDMessageCodeInstanceID003 = 3003, + kFIRInstanceIDMessageCodeInstanceID004 = 3004, + kFIRInstanceIDMessageCodeInstanceID005 = 3005, + kFIRInstanceIDMessageCodeInstanceID006 = 3006, + kFIRInstanceIDMessageCodeInstanceID007 = 3007, + kFIRInstanceIDMessageCodeInstanceID008 = 3008, + kFIRInstanceIDMessageCodeInstanceID009 = 3009, + kFIRInstanceIDMessageCodeInstanceID010 = 3010, + kFIRInstanceIDMessageCodeInstanceID011 = 3011, + kFIRInstanceIDMessageCodeInstanceID012 = 3012, + kFIRInstanceIDMessageCodeInstanceID013 = 3013, + kFIRInstanceIDMessageCodeInstanceID014 = 3014, + kFIRInstanceIDMessageCodeInstanceID015 = 3015, + kFIRInstanceIDMessageCodeRefetchingTokenForAPNS = 3016, + kFIRInstanceIDMessageCodeInstanceID017 = 3017, + kFIRInstanceIDMessageCodeInstanceID018 = 3018, + // FIRInstanceIDAuthService.m + kFIRInstanceIDMessageCodeAuthService000 = 5000, + kFIRInstanceIDMessageCodeAuthService001 = 5001, + kFIRInstanceIDMessageCodeAuthService002 = 5002, + kFIRInstanceIDMessageCodeAuthService003 = 5003, + kFIRInstanceIDMessageCodeAuthService004 = 5004, + kFIRInstanceIDMessageCodeAuthServiceCheckinInProgress = 5004, + + // FIRInstanceIDBackupExcludedPlist.m + // Do NOT USE 6003 + kFIRInstanceIDMessageCodeBackupExcludedPlist000 = 6000, + kFIRInstanceIDMessageCodeBackupExcludedPlist001 = 6001, + kFIRInstanceIDMessageCodeBackupExcludedPlist002 = 6002, + // FIRInstanceIDCheckinService.m + kFIRInstanceIDMessageCodeService000 = 7000, + kFIRInstanceIDMessageCodeService001 = 7001, + kFIRInstanceIDMessageCodeService002 = 7002, + kFIRInstanceIDMessageCodeService003 = 7003, + kFIRInstanceIDMessageCodeService004 = 7004, + kFIRInstanceIDMessageCodeService005 = 7005, + kFIRInstanceIDMessageCodeService006 = 7006, + kFIRInstanceIDInvalidNetworkSession = 7007, + kFIRInstanceIDInvalidSettingResponse = 7008, + // FIRInstanceIDCheckinStore.m + // DO NOT USE 8002, 8004 - 8008 + kFIRInstanceIDMessageCodeCheckinStore000 = 8000, + kFIRInstanceIDMessageCodeCheckinStore001 = 8001, + kFIRInstanceIDMessageCodeCheckinStore003 = 8003, + kFIRInstanceIDMessageCodeCheckinStoreCheckinPlistDeleted = 8009, + kFIRInstanceIDMessageCodeCheckinStoreCheckinPlistSaved = 8010, + // FIRInstanceIDKeyPair.m + // DO NOT USE 9001, 9003 + kFIRInstanceIDMessageCodeKeyPair000 = 9000, + kFIRInstanceIDMessageCodeKeyPair002 = 9002, + kFIRInstanceIDMessageCodeKeyPairMigrationError = 9004, + kFIRInstanceIDMessageCodeKeyPairMigrationSuccess = 9005, + kFIRInstanceIDMessageCodeKeyPairNoLegacyKeyPair = 9006, + + // FIRInstanceIDKeyPairStore.m + kFIRInstanceIDMessageCodeKeyPairStore000 = 10000, + kFIRInstanceIDMessageCodeKeyPairStore001 = 10001, + kFIRInstanceIDMessageCodeKeyPairStore002 = 10002, + kFIRInstanceIDMessageCodeKeyPairStore003 = 10003, + kFIRInstanceIDMessageCodeKeyPairStore004 = 10004, + kFIRInstanceIDMessageCodeKeyPairStore005 = 10005, + kFIRInstanceIDMessageCodeKeyPairStore006 = 10006, + kFIRInstanceIDMessageCodeKeyPairStore007 = 10007, + kFIRInstanceIDMessageCodeKeyPairStore008 = 10008, + kFIRInstanceIDMessageCodeKeyPairStoreCouldNotLoadKeyPair = 10009, + // FIRInstanceIDKeyPairUtilities.m + kFIRInstanceIDMessageCodeKeyPairUtilities000 = 11000, + kFIRInstanceIDMessageCodeKeyPairUtilities001 = 11001, + kFIRInstanceIDMessageCodeKeyPairUtilitiesFirstConcatenateParamNil = 11002, + + // DO NOT USE 12000 - 12014 + + // FIRInstanceIDStore.m + // DO NOT USE 13004, 13005, 13007, 13008, 13010, 13011, 13013, 13014 + kFIRInstanceIDMessageCodeStore000 = 13000, + kFIRInstanceIDMessageCodeStore001 = 13001, + kFIRInstanceIDMessageCodeStore002 = 13002, + kFIRInstanceIDMessageCodeStore003 = 13003, + kFIRInstanceIDMessageCodeStore006 = 13006, + kFIRInstanceIDMessageCodeStore009 = 13009, + kFIRInstanceIDMessageCodeStore012 = 13012, + // FIRInstanceIDTokenManager.m + // DO NOT USE 14002, 14005 + kFIRInstanceIDMessageCodeTokenManager000 = 14000, + kFIRInstanceIDMessageCodeTokenManager001 = 14001, + kFIRInstanceIDMessageCodeTokenManager003 = 14003, + kFIRInstanceIDMessageCodeTokenManager004 = 14004, + kFIRInstanceIDMessageCodeTokenManagerErrorDeletingFCMTokensOnAppReset = 14006, + kFIRInstanceIDMessageCodeTokenManagerDeletedFCMTokensOnAppReset = 14007, + kFIRInstanceIDMessageCodeTokenManagerSavedAppVersion = 14008, + kFIRInstanceIDMessageCodeTokenManagerErrorInvalidatingAllTokens = 14009, + kFIRInstanceIDMessageCodeTokenManagerAPNSChanged = 14010, + kFIRInstanceIDMessageCodeTokenManagerAPNSChangedTokenInvalidated = 14011, + kFIRInstanceIDMessageCodeTokenManagerInvalidateStaleToken = 14012, + // FIRInstanceIDTokenStore.m + // DO NOT USE 15002 - 15013 + kFIRInstanceIDMessageCodeTokenStore000 = 15000, + kFIRInstanceIDMessageCodeTokenStore001 = 15001, + kFIRInstanceIDMessageCodeTokenStoreExceptionUnarchivingTokenInfo = 15015, + + // DO NOT USE 16000, 18004 + + // FIRInstanceIDUtilities.m + kFIRInstanceIDMessageCodeUtilitiesMissingBundleIdentifier = 18000, + kFIRInstanceIDMessageCodeUtilitiesAppEnvironmentUtilNotAvailable = 18001, + kFIRInstanceIDMessageCodeUtilitiesCannotGetHardwareModel = 18002, + kFIRInstanceIDMessageCodeUtilitiesCannotGetSystemVersion = 18003, + // FIRInstanceIDTokenOperation.m + kFIRInstanceIDMessageCodeTokenOperationFailedToSignParams = 19000, + // FIRInstanceIDTokenFetchOperation.m + // DO NOT USE 20004, 20005 + kFIRInstanceIDMessageCodeTokenFetchOperationFetchRequest = 20000, + kFIRInstanceIDMessageCodeTokenFetchOperationRequestError = 20001, + kFIRInstanceIDMessageCodeTokenFetchOperationBadResponse = 20002, + kFIRInstanceIDMessageCodeTokenFetchOperationBadTokenStructure = 20003, + // FIRInstanceIDTokenDeleteOperation.m + kFIRInstanceIDMessageCodeTokenDeleteOperationFetchRequest = 21000, + kFIRInstanceIDMessageCodeTokenDeleteOperationRequestError = 21001, + kFIRInstanceIDMessageCodeTokenDeleteOperationBadResponse = 21002, + // FIRInstanceIDTokenInfo.m + kFIRInstanceIDMessageCodeTokenInfoBadAPNSInfo = 22000, + kFIRInstanceIDMessageCodeTokenInfoFirebaseAppIDChanged = 22001, + kFIRInstanceIDMessageCodeTokenInfoLocaleChanged = 22002, + // FIRInstanceIDKeychain.m + kFIRInstanceIDKeychainReadItemError = 23000, + kFIRInstanceIDKeychainAddItemError = 23001, + kFIRInstanceIDKeychainDeleteItemError = 23002, + kFIRInstanceIDKeychainCreateKeyPairError = 23003, + kFIRInstanceIDKeychainUpdateItemError = 23004, + + // FIRInstanceIDStringEncoding.m + kFIRInstanceIDStringEncodingBufferUnderflow = 24000, + kFIRInstanceIDStringEncodingBufferOverflow = 24001, + +}; diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID+Private.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID+Private.m new file mode 100644 index 0000000000..a078971dcc --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID+Private.m @@ -0,0 +1,42 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceID+Private.h" + +#import "FIRInstanceIDAuthService.h" +#import "FIRInstanceIDKeyPairStore.h" +#import "FIRInstanceIDTokenManager.h" + +@interface FIRInstanceID () + +@property(nonatomic, readonly, strong) FIRInstanceIDTokenManager *tokenManager; +@property(nonatomic, readonly, strong) FIRInstanceIDKeyPairStore *keyPairStore; + +@end + +@implementation FIRInstanceID (Private) + +// This method just wraps our pre-configured auth service to make the request. +// This method is only needed by first-party users, like Remote Config. +- (void)fetchCheckinInfoWithHandler:(FIRInstanceIDDeviceCheckinCompletion)handler { + [self.tokenManager.authService fetchCheckinInfoWithHandler:handler]; +} + +- (NSString *)appInstanceID:(NSError **)error { + return [self.keyPairStore appIdentityWithError:error]; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID.m new file mode 100644 index 0000000000..ab8c68b8ba --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID.m @@ -0,0 +1,1169 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceID.h" + +#import +#import +#import +#import +#import +#import +#import +#import "FIRInstanceID+Private.h" +#import "FIRInstanceIDAuthService.h" +#import "FIRInstanceIDCheckinPreferences.h" +#import "FIRInstanceIDCombinedHandler.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDDefines.h" +#import "FIRInstanceIDKeyPairStore.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDStore.h" +#import "FIRInstanceIDTokenInfo.h" +#import "FIRInstanceIDTokenManager.h" +#import "FIRInstanceIDUtilities.h" +#import "FIRInstanceIDVersionUtilities.h" +#import "NSError+FIRInstanceID.h" + +// Public constants +NSString *const kFIRInstanceIDScopeFirebaseMessaging = @"fcm"; + +#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 +const NSNotificationName kFIRInstanceIDTokenRefreshNotification = + @"com.firebase.iid.notif.refresh-token"; +#else +NSString *const kFIRInstanceIDTokenRefreshNotification = @"com.firebase.iid.notif.refresh-token"; +#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 + +NSString *const kFIRInstanceIDInvalidNilHandlerError = @"Invalid nil handler."; + +// Private constants +int64_t const kMaxRetryIntervalForDefaultTokenInSeconds = 20 * 60; // 20 minutes +int64_t const kMinRetryIntervalForDefaultTokenInSeconds = 10; // 10 seconds +// we retry only a max 5 times. +// TODO(chliangGoogle): If we still fail we should listen for the network change notification +// since GCM would have started Reachability. We only start retrying after we see a configuration +// change. +NSInteger const kMaxRetryCountForDefaultToken = 5; + +#if TARGET_OS_IOS || TARGET_OS_TV +static NSString *const kEntitlementsAPSEnvironmentKey = @"Entitlements.aps-environment"; +#else +static NSString *const kEntitlementsAPSEnvironmentKey = @"com.apple.developer.aps-environment"; +#endif +static NSString *const kEntitlementsKeyForMac = @"Entitlements"; +static NSString *const kAPSEnvironmentDevelopmentValue = @"development"; +/// FIRMessaging selector that returns the current FIRMessaging auto init +/// enabled flag. +static NSString *const kFIRInstanceIDFCMSelectorAutoInitEnabled = + @"isAutoInitEnabledWithUserDefaults:"; + +static NSString *const kFIRInstanceIDAPNSTokenType = @"APNSTokenType"; +static NSString *const kFIRIIDAppReadyToConfigureSDKNotification = + @"FIRAppReadyToConfigureSDKNotification"; +static NSString *const kFIRIIDAppNameKey = @"FIRAppNameKey"; +static NSString *const kFIRIIDErrorDomain = @"com.firebase.instanceid"; +static NSString *const kFIRIIDServiceInstanceID = @"InstanceID"; + +typedef void (^FIRInstanceIDKeyPairHandler)(FIRInstanceIDKeyPair *keyPair, NSError *error); + +/** + * The APNS token type for the app. If the token type is set to `UNKNOWN` + * InstanceID will implicitly try to figure out what the actual token type + * is from the provisioning profile. + * This must match FIRMessagingAPNSTokenType in FIRMessaging.h + */ +typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) { + /// Unknown token type. + FIRInstanceIDAPNSTokenTypeUnknown, + /// Sandbox token type. + FIRInstanceIDAPNSTokenTypeSandbox, + /// Production token type. + FIRInstanceIDAPNSTokenTypeProd, +} NS_SWIFT_NAME(InstanceIDAPNSTokenType); + +@interface FIRInstanceIDResult () +@property(nonatomic, readwrite, copy) NSString *instanceID; +@property(nonatomic, readwrite, copy) NSString *token; +@end + +@interface FIRInstanceID () + +// FIRApp configuration objects. +@property(nonatomic, readwrite, copy) NSString *fcmSenderID; +@property(nonatomic, readwrite, copy) NSString *firebaseAppID; + +// Raw APNS token data +@property(nonatomic, readwrite, strong) NSData *apnsTokenData; + +@property(nonatomic, readwrite) FIRInstanceIDAPNSTokenType apnsTokenType; +// String-based, internal representation of APNS token +@property(nonatomic, readwrite, copy) NSString *APNSTupleString; +// Token fetched from the server automatically for the default app. +@property(nonatomic, readwrite, copy) NSString *defaultFCMToken; + +@property(nonatomic, readwrite, strong) FIRInstanceIDTokenManager *tokenManager; +@property(nonatomic, readwrite, strong) FIRInstanceIDKeyPairStore *keyPairStore; + +// backoff and retry for default token +@property(nonatomic, readwrite, assign) NSInteger retryCountForDefaultToken; +@property(atomic, strong, nullable) + FIRInstanceIDCombinedHandler *defaultTokenFetchHandler; + +@end + +// InstanceID doesn't provide any functionality to other components, +// so it provides a private, empty protocol that it conforms to and use it for registration. + +@protocol FIRInstanceIDInstanceProvider +@end + +@interface FIRInstanceID () +@end + +@implementation FIRInstanceIDResult +- (id)copyWithZone:(NSZone *)zone { + FIRInstanceIDResult *result = [[[self class] allocWithZone:zone] init]; + result.instanceID = self.instanceID; + result.token = self.token; + return result; +} +@end + +@implementation FIRInstanceID + +// File static to support InstanceID tests that call [FIRInstanceID instanceID] after +// [FIRInstanceID instanceIDForTests]. +static FIRInstanceID *gInstanceID; + ++ (instancetype)instanceID { + // If the static instance was created, return it. This should only be set in tests and we should + // eventually use proper dependency injection for a better test structure. + if (gInstanceID != nil) { + return gInstanceID; + } + FIRApp *defaultApp = [FIRApp defaultApp]; // Missing configure will be logged here. + FIRInstanceID *instanceID = + (FIRInstanceID *)FIR_COMPONENT(FIRInstanceIDInstanceProvider, defaultApp.container); + return instanceID; +} + +- (instancetype)initPrivately { + self = [super init]; + if (self != nil) { + // Use automatic detection of sandbox, unless otherwise set by developer + _apnsTokenType = FIRInstanceIDAPNSTokenTypeUnknown; + } + return self; +} + ++ (FIRInstanceID *)instanceIDForTests { + gInstanceID = [[FIRInstanceID alloc] initPrivately]; + [gInstanceID start]; + return gInstanceID; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Tokens + +- (NSString *)token { + if (!self.fcmSenderID.length) { + return nil; + } + + NSString *cachedToken = [self cachedTokenIfAvailable]; + + if (cachedToken) { + return cachedToken; + } else { + // If we've never had a cached default token, we should fetch one because unrelatedly, + // this request will help us determine whether the locally-generated Instance ID keypair is not + // unique, and therefore generate a new one. + [self defaultTokenWithHandler:nil]; + return nil; + } +} + +- (void)instanceIDWithHandler:(FIRInstanceIDResultHandler)handler { + FIRInstanceID_WEAKIFY(self); + [self getIDWithHandler:^(NSString *identity, NSError *error) { + FIRInstanceID_STRONGIFY(self); + // This is in main queue already + if (error) { + if (handler) { + handler(nil, error); + } + return; + } + FIRInstanceIDResult *result = [[FIRInstanceIDResult alloc] init]; + result.instanceID = identity; + NSString *cachedToken = [self cachedTokenIfAvailable]; + if (cachedToken) { + if (handler) { + result.token = cachedToken; + handler(result, nil); + } + // If no handler, simply return since client has generated iid and token. + return; + } + [self defaultTokenWithHandler:^(NSString *_Nullable token, NSError *_Nullable error) { + if (handler) { + if (error) { + handler(nil, error); + return; + } + result.token = token; + handler(result, nil); + } + }]; + }]; +} + +- (NSString *)cachedTokenIfAvailable { + FIRInstanceIDTokenInfo *cachedTokenInfo = + [self.tokenManager cachedTokenInfoWithAuthorizedEntity:self.fcmSenderID + scope:kFIRInstanceIDDefaultTokenScope]; + return cachedTokenInfo.token; +} + +- (void)setDefaultFCMToken:(NSString *)defaultFCMToken { + if (_defaultFCMToken && defaultFCMToken && [defaultFCMToken isEqualToString:_defaultFCMToken]) { + return; + } + + _defaultFCMToken = defaultFCMToken; + + // Sending this notification out will ensure that FIRMessaging has the updated + // default FCM token. + NSNotification *internalDefaultTokenNotification = + [NSNotification notificationWithName:kFIRInstanceIDDefaultGCMTokenNotification + object:_defaultFCMToken]; + [[NSNotificationQueue defaultQueue] enqueueNotification:internalDefaultTokenNotification + postingStyle:NSPostASAP]; +} + +- (void)tokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + options:(NSDictionary *)options + handler:(FIRInstanceIDTokenHandler)handler { + if (!handler) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID000, + kFIRInstanceIDInvalidNilHandlerError); + return; + } + + NSMutableDictionary *tokenOptions = [NSMutableDictionary dictionary]; + if (options.count) { + [tokenOptions addEntriesFromDictionary:options]; + } + + NSString *APNSKey = kFIRInstanceIDTokenOptionsAPNSKey; + NSString *serverTypeKey = kFIRInstanceIDTokenOptionsAPNSIsSandboxKey; + + if (tokenOptions[APNSKey] != nil && tokenOptions[serverTypeKey] == nil) { + // APNS key was given, but server type is missing. Supply the server type with automatic + // checking. This can happen when the token is requested from FCM, which does not include a + // server type during its request. + tokenOptions[serverTypeKey] = @([self isSandboxApp]); + } + + // comparing enums to ints directly throws a warning + FIRInstanceIDErrorCode noError = INT_MAX; + FIRInstanceIDErrorCode errorCode = noError; + if (FIRInstanceIDIsValidGCMScope(scope) && !tokenOptions[APNSKey]) { + errorCode = kFIRInstanceIDErrorCodeMissingAPNSToken; + } else if (FIRInstanceIDIsValidGCMScope(scope) && + ![tokenOptions[APNSKey] isKindOfClass:[NSData class]]) { + errorCode = kFIRInstanceIDErrorCodeInvalidRequest; + } else if (![authorizedEntity length]) { + errorCode = kFIRInstanceIDErrorCodeInvalidAuthorizedEntity; + } else if (![scope length]) { + errorCode = kFIRInstanceIDErrorCodeInvalidScope; + } else if (!self.keyPairStore) { + errorCode = kFIRInstanceIDErrorCodeInvalidStart; + } + + FIRInstanceIDTokenHandler newHandler = ^(NSString *token, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(token, error); + }); + }; + + if (errorCode != noError) { + newHandler(nil, [NSError errorWithFIRInstanceIDErrorCode:errorCode]); + return; + } + + // TODO(chliangGoogle): Add some validation logic that the APNs token data and sandbox value are + // supplied in the valid format (NSData and BOOL, respectively). + + // Add internal options + if (self.firebaseAppID) { + tokenOptions[kFIRInstanceIDTokenOptionsFirebaseAppIDKey] = self.firebaseAppID; + } + + FIRInstanceID_WEAKIFY(self); + FIRInstanceIDAuthService *authService = self.tokenManager.authService; + [authService + fetchCheckinInfoWithHandler:^(FIRInstanceIDCheckinPreferences *preferences, NSError *error) { + FIRInstanceID_STRONGIFY(self); + if (error) { + newHandler(nil, error); + return; + } + + // Only use the token in the cache if the APNSInfo matches what the request's options has. + // It's possible for the request to be with a newer APNs device token, which should be + // honored. + FIRInstanceIDTokenInfo *cachedTokenInfo = + [self.tokenManager cachedTokenInfoWithAuthorizedEntity:authorizedEntity scope:scope]; + if (cachedTokenInfo) { + // Ensure that the cached token matches APNs data before returning it. + FIRInstanceIDAPNSInfo *optionsAPNSInfo = + [[FIRInstanceIDAPNSInfo alloc] initWithTokenOptionsDictionary:tokenOptions]; + // If either the APNs info is missing in both, or if they are an exact match, then we can + // use this cached token. + if ((!cachedTokenInfo.APNSInfo && !optionsAPNSInfo) || + [cachedTokenInfo.APNSInfo isEqualToAPNSInfo:optionsAPNSInfo]) { + newHandler(cachedTokenInfo.token, nil); + return; + } + } + + FIRInstanceID_WEAKIFY(self); + [self asyncLoadKeyPairWithHandler:^(FIRInstanceIDKeyPair *keyPair, NSError *error) { + FIRInstanceID_STRONGIFY(self); + + if (error) { + NSError *newError = + [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidKeyPair]; + newHandler(nil, newError); + + } else { + [self.tokenManager fetchNewTokenWithAuthorizedEntity:[authorizedEntity copy] + scope:[scope copy] + keyPair:keyPair + options:tokenOptions + handler:newHandler]; + } + }]; + }]; +} + +- (void)deleteTokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + handler:(FIRInstanceIDDeleteTokenHandler)handler { + if (!handler) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID001, + kFIRInstanceIDInvalidNilHandlerError); + } + + // comparing enums to ints directly throws a warning + FIRInstanceIDErrorCode noError = INT_MAX; + FIRInstanceIDErrorCode errorCode = noError; + + if (![authorizedEntity length]) { + errorCode = kFIRInstanceIDErrorCodeInvalidAuthorizedEntity; + } else if (![scope length]) { + errorCode = kFIRInstanceIDErrorCodeInvalidScope; + } else if (!self.keyPairStore) { + errorCode = kFIRInstanceIDErrorCodeInvalidStart; + } + + FIRInstanceIDDeleteTokenHandler newHandler = ^(NSError *error) { + // If a default token is deleted successfully, reset the defaultFCMToken too. + if (!error && [authorizedEntity isEqualToString:self.fcmSenderID] && + [scope isEqualToString:kFIRInstanceIDDefaultTokenScope]) { + self.defaultFCMToken = nil; + } + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + }; + + if (errorCode != noError) { + newHandler([NSError errorWithFIRInstanceIDErrorCode:errorCode]); + return; + } + + FIRInstanceID_WEAKIFY(self); + FIRInstanceIDAuthService *authService = self.tokenManager.authService; + [authService + fetchCheckinInfoWithHandler:^(FIRInstanceIDCheckinPreferences *preferences, NSError *error) { + FIRInstanceID_STRONGIFY(self); + if (error) { + newHandler(error); + return; + } + + FIRInstanceID_WEAKIFY(self); + [self asyncLoadKeyPairWithHandler:^(FIRInstanceIDKeyPair *keyPair, NSError *error) { + FIRInstanceID_STRONGIFY(self); + if (error) { + NSError *newError = + [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidKeyPair]; + newHandler(newError); + + } else { + [self.tokenManager deleteTokenWithAuthorizedEntity:authorizedEntity + scope:scope + keyPair:keyPair + handler:newHandler]; + } + }]; + }]; +} + +- (void)asyncLoadKeyPairWithHandler:(FIRInstanceIDKeyPairHandler)handler { + FIRInstanceID_WEAKIFY(self); + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + FIRInstanceID_STRONGIFY(self); + + NSError *error = nil; + FIRInstanceIDKeyPair *keyPair = [self.keyPairStore loadKeyPairWithError:&error]; + dispatch_async(dispatch_get_main_queue(), ^{ + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInstanceID002, + @"Failed to retreieve keyPair %@", error); + if (handler) { + handler(nil, error); + } + } else if (!keyPair && !error) { + if (handler) { + handler(nil, + [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidKeyPair]); + } + } else { + if (handler) { + handler(keyPair, nil); + } + } + }); + }); +} + +#pragma mark - Identity + +- (void)getIDWithHandler:(FIRInstanceIDHandler)handler { + if (!handler) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID003, + kFIRInstanceIDInvalidNilHandlerError); + return; + } + + void (^callHandlerOnMainThread)(NSString *, NSError *) = ^(NSString *identity, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(identity, error); + }); + }; + + if (!self.keyPairStore) { + NSError *error = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidStart]; + callHandlerOnMainThread(nil, error); + return; + } + + FIRInstanceID_WEAKIFY(self); + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + FIRInstanceID_STRONGIFY(self); + NSError *error; + NSString *appIdentity = [self.keyPairStore appIdentityWithError:&error]; + // When getID is explicitly called, trigger getToken to make sure token always exists. + // This is to avoid ID conflict (ID is not checked for conflict until we generate a token) + if (appIdentity) { + [self token]; + } + callHandlerOnMainThread(appIdentity, error); + }); +} + +- (void)deleteIDWithHandler:(FIRInstanceIDDeleteHandler)handler { + if (!handler) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID004, + kFIRInstanceIDInvalidNilHandlerError); + return; + } + + void (^callHandlerOnMainThread)(NSError *) = ^(NSError *error) { + if ([NSThread isMainThread]) { + handler(error); + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + }; + + if (!self.keyPairStore) { + FIRInstanceIDErrorCode error = kFIRInstanceIDErrorCodeInvalidStart; + callHandlerOnMainThread([NSError errorWithFIRInstanceIDErrorCode:error]); + return; + } + + FIRInstanceID_WEAKIFY(self); + void (^deleteTokensHandler)(NSError *) = ^void(NSError *error) { + FIRInstanceID_STRONGIFY(self); + if (error) { + callHandlerOnMainThread(error); + return; + } + [self deleteIdentityWithHandler:^(NSError *error) { + callHandlerOnMainThread(error); + }]; + }; + + [self asyncLoadKeyPairWithHandler:^(FIRInstanceIDKeyPair *keyPair, NSError *error) { + FIRInstanceID_STRONGIFY(self); + if (error) { + NSError *newError = + [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidKeyPair]; + callHandlerOnMainThread(newError); + } else { + [self.tokenManager deleteAllTokensWithKeyPair:keyPair handler:deleteTokensHandler]; + } + }]; +} + +- (void)notifyIdentityReset { + [self deleteIdentityWithHandler:nil]; +} + +// Delete all the local cache checkin, IID and token. +- (void)deleteIdentityWithHandler:(FIRInstanceIDDeleteHandler)handler { + // Delete tokens. + [self.tokenManager deleteAllTokensLocallyWithHandler:^(NSError *deleteTokenError) { + // Reset FCM token. + self.defaultFCMToken = nil; + if (deleteTokenError) { + if (handler) { + handler(deleteTokenError); + } + return; + } + + // Delete Instance ID. + [self.keyPairStore + deleteSavedKeyPairWithSubtype:kFIRInstanceIDKeyPairSubType + handler:^(NSError *error) { + NSError *deletePlistError; + [self.keyPairStore + removeKeyPairCreationTimePlistWithError:&deletePlistError]; + if (error || deletePlistError) { + if (handler) { + // Prefer to use the delete Instance ID error. + error = [NSError + errorWithFIRInstanceIDErrorCode: + kFIRInstanceIDErrorCodeUnknown + userInfo:@{ + NSUnderlyingErrorKey : error + ? error + : deletePlistError + }]; + handler(error); + } + return; + } + // Delete checkin. + [self.tokenManager.authService + resetCheckinWithHandler:^(NSError *error) { + if (error) { + if (handler) { + handler(error); + } + return; + } + // Only request new token if FCM auto initialization is + // enabled. + if ([self isFCMAutoInitEnabled]) { + // Deletion succeeds! Requesting new checkin, IID and token. + // TODO(chliangGoogle) see if dispatch_after is necessary + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, + (int64_t)(0.5 * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + [self defaultTokenWithHandler:nil]; + }); + } + if (handler) { + handler(nil); + } + }]; + }]; + }]; +} + +#pragma mark - Checkin + +- (BOOL)tryToLoadValidCheckinInfo { + FIRInstanceIDCheckinPreferences *checkinPreferences = + [self.tokenManager.authService checkinPreferences]; + return [checkinPreferences hasValidCheckinInfo]; +} + +- (NSString *)deviceAuthID { + return [self.tokenManager.authService checkinPreferences].deviceID; +} + +- (NSString *)secretToken { + return [self.tokenManager.authService checkinPreferences].secretToken; +} + +- (NSString *)versionInfo { + return [self.tokenManager.authService checkinPreferences].versionInfo; +} + +#pragma mark - Config + ++ (void)load { + [FIRApp registerInternalLibrary:(Class)self + withName:@"fire-iid" + withVersion:FIRInstanceIDCurrentLibraryVersion()]; +} + ++ (nonnull NSArray *)componentsToRegister { + FIRComponentCreationBlock creationBlock = + ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) { + // InstanceID only works with the default app. + if (!container.app.isDefaultApp) { + // Only configure for the default FIRApp. + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeFIRApp002, + @"Firebase Instance ID only works with the default app."); + return nil; + } + + // Ensure it's cached so it returns the same instance every time instanceID is called. + *isCacheable = YES; + FIRInstanceID *instanceID = [[FIRInstanceID alloc] initPrivately]; + [instanceID start]; + [instanceID configureInstanceIDWithOptions:container.app.options]; + return instanceID; + }; + FIRComponent *instanceIDProvider = + [FIRComponent componentWithProtocol:@protocol(FIRInstanceIDInstanceProvider) + instantiationTiming:FIRInstantiationTimingEagerInDefaultApp + dependencies:@[] + creationBlock:creationBlock]; + return @[ instanceIDProvider ]; +} + +- (void)configureInstanceIDWithOptions:(FIROptions *)options { + NSString *GCMSenderID = options.GCMSenderID; + if (!GCMSenderID.length) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeFIRApp000, + @"Firebase not set up correctly, nil or empty senderID."); + [NSException raise:kFIRIIDErrorDomain + format:@"Could not configure Firebase InstanceID. GCMSenderID must not be nil or " + @"empty."]; + } + + self.fcmSenderID = GCMSenderID; + self.firebaseAppID = options.googleAppID; + + // FCM generates a FCM token during app start for sending push notification to device. + // This is not needed for app extension. + if (![GULAppEnvironmentUtil isAppExtension]) { + [self didCompleteConfigure]; + } +} + +// This is used to start any operations when we receive FirebaseSDK setup notification +// from FIRCore. +- (void)didCompleteConfigure { + NSString *cachedToken = [self cachedTokenIfAvailable]; + // When there is a cached token, do the token refresh. + if (cachedToken) { + // Clean up expired tokens by checking the token refresh policy. + NSError *error; + NSString *cachedIID = [self.keyPairStore appIdentityWithError:&error]; + if ([self.tokenManager checkTokenRefreshPolicyWithIID:cachedIID]) { + // Default token is expired, fetch default token from server. + [self defaultTokenWithHandler:nil]; + } + // Notify FCM with the default token. + self.defaultFCMToken = [self token]; + } else if ([self isFCMAutoInitEnabled]) { + // When there is no cached token, must check auto init is enabled. + // If it's disabled, don't initiate token generation/refresh. + // If no cache token and auto init is enabled, fetch a token from server. + [self defaultTokenWithHandler:nil]; + // Notify FCM with the default token. + self.defaultFCMToken = [self token]; + } + // ONLY checkin when auto data collection is turned on. + if ([self isFCMAutoInitEnabled]) { + [self.tokenManager.authService scheduleCheckin:YES]; + } +} + +- (BOOL)isFCMAutoInitEnabled { + Class messagingClass = NSClassFromString(kFIRInstanceIDFCMSDKClassString); + // Firebase Messaging is not installed, auto init should be disabled since it's for FCM. + if (!messagingClass) { + return NO; + } + + // Messaging doesn't have the class method, auto init should be enabled since FCM exists. + SEL autoInitSelector = NSSelectorFromString(kFIRInstanceIDFCMSelectorAutoInitEnabled); + if (![messagingClass respondsToSelector:autoInitSelector]) { + return YES; + } + + // Get the autoInitEnabled class method. + IMP isAutoInitEnabledIMP = [messagingClass methodForSelector:autoInitSelector]; + BOOL(*isAutoInitEnabled) + (Class, SEL, GULUserDefaults *) = (BOOL(*)(id, SEL, GULUserDefaults *))isAutoInitEnabledIMP; + + // Check FCM's isAutoInitEnabled property. + return isAutoInitEnabled(messagingClass, autoInitSelector, + [GULUserDefaults standardUserDefaults]); +} + +// Actually makes InstanceID instantiate both the IID and Token-related subsystems. +- (void)start { + if (![FIRInstanceIDStore hasSubDirectory:kFIRInstanceIDSubDirectoryName]) { + [FIRInstanceIDStore createSubDirectory:kFIRInstanceIDSubDirectoryName]; + } + + [self setupTokenManager]; + [self setupKeyPairManager]; + [self setupNotificationListeners]; +} + +// Creates the token manager, which is used for fetching, caching, and retrieving tokens. +- (void)setupTokenManager { + self.tokenManager = [[FIRInstanceIDTokenManager alloc] init]; +} + +// Creates a key pair manager, which stores the public/private keys needed to generate an +// application instance ID. +- (void)setupKeyPairManager { + self.keyPairStore = [[FIRInstanceIDKeyPairStore alloc] init]; + if ([self.keyPairStore invalidateKeyPairsIfNeeded]) { + // Reset tokens right away when keypair is deleted, otherwise async call can make first query + // of token happens before reset old tokens during app start. + // TODO(chliangGoogle): Delete all tokens on server too, using + // deleteAllTokensWithKeyPair:handler:. This requires actually retrieving the invalid keypair + // from Keychain, which is something that the key pair store does not currently do. + [self.tokenManager deleteAllTokensLocallyWithHandler:nil]; + } +} + +- (void)setupNotificationListeners { + // To prevent double notifications remove observer from all events during setup. + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center removeObserver:self]; + [center addObserver:self + selector:@selector(notifyIdentityReset) + name:kFIRInstanceIDIdentityInvalidatedNotification + object:nil]; + [center addObserver:self + selector:@selector(notifyAPNSTokenIsSet:) + name:kFIRInstanceIDAPNSTokenNotification + object:nil]; +} + +#pragma mark - Private Helpers +/// Maximum retry count to fetch the default token. ++ (int64_t)maxRetryCountForDefaultToken { + return kMaxRetryCountForDefaultToken; +} + +/// Minimum interval in seconds between retries to fetch the default token. ++ (int64_t)minIntervalForDefaultTokenRetry { + return kMinRetryIntervalForDefaultTokenInSeconds; +} + +/// Maximum retry interval between retries to fetch default token. ++ (int64_t)maxRetryIntervalForDefaultTokenInSeconds { + return kMaxRetryIntervalForDefaultTokenInSeconds; +} + +- (NSInteger)retryIntervalToFetchDefaultToken { + if (self.retryCountForDefaultToken >= [[self class] maxRetryCountForDefaultToken]) { + return (NSInteger)[[self class] maxRetryIntervalForDefaultTokenInSeconds]; + } + // exponential backoff with a fixed initial retry time + // 11s, 22s, 44s, 88s ... + int64_t minInterval = [[self class] minIntervalForDefaultTokenRetry]; + return (NSInteger)MIN( + (1 << self.retryCountForDefaultToken) + minInterval * self.retryCountForDefaultToken, + kMaxRetryIntervalForDefaultTokenInSeconds); +} + +- (void)defaultTokenWithHandler:(nullable FIRInstanceIDTokenHandler)aHandler { + [self defaultTokenWithRetry:NO handler:aHandler]; +} + +/** + * @param retry Indicates if the method is called to perform a retry after a failed attempt. + * If `YES`, then actual token request will be performed even if `self.defaultTokenFetchHandler != + * nil` + */ +- (void)defaultTokenWithRetry:(BOOL)retry handler:(nullable FIRInstanceIDTokenHandler)aHandler { + BOOL shouldPerformRequest = retry || self.defaultTokenFetchHandler == nil; + + if (!self.defaultTokenFetchHandler) { + self.defaultTokenFetchHandler = [[FIRInstanceIDCombinedHandler alloc] init]; + } + + if (aHandler) { + [self.defaultTokenFetchHandler addHandler:aHandler]; + } + + if (!shouldPerformRequest) { + return; + } + + NSDictionary *instanceIDOptions = @{}; + BOOL hasFirebaseMessaging = NSClassFromString(kFIRInstanceIDFCMSDKClassString) != nil; + if (hasFirebaseMessaging && self.apnsTokenData) { + BOOL isSandboxApp = (self.apnsTokenType == FIRInstanceIDAPNSTokenTypeSandbox); + if (self.apnsTokenType == FIRInstanceIDAPNSTokenTypeUnknown) { + isSandboxApp = [self isSandboxApp]; + } + instanceIDOptions = @{ + kFIRInstanceIDTokenOptionsAPNSKey : self.apnsTokenData, + kFIRInstanceIDTokenOptionsAPNSIsSandboxKey : @(isSandboxApp), + }; + } + + FIRInstanceID_WEAKIFY(self); + FIRInstanceIDTokenHandler newHandler = ^void(NSString *token, NSError *error) { + FIRInstanceID_STRONGIFY(self); + + if (error) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID009, + @"Failed to fetch default token %@", error); + + // This notification can be sent multiple times since we can't guarantee success at any point + // of time. + NSNotification *tokenFetchFailNotification = + [NSNotification notificationWithName:kFIRInstanceIDDefaultGCMTokenFailNotification + object:[error copy]]; + [[NSNotificationQueue defaultQueue] enqueueNotification:tokenFetchFailNotification + postingStyle:NSPostASAP]; + + self.retryCountForDefaultToken = (NSInteger)MIN(self.retryCountForDefaultToken + 1, + [[self class] maxRetryCountForDefaultToken]); + + // Do not retry beyond the maximum limit. + if (self.retryCountForDefaultToken < [[self class] maxRetryCountForDefaultToken]) { + NSInteger retryInterval = [self retryIntervalToFetchDefaultToken]; + [self retryGetDefaultTokenAfter:retryInterval]; + } else { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID007, + @"Failed to retrieve the default FCM token after %ld retries", + (long)self.retryCountForDefaultToken); + [self performDefaultTokenHandlerWithToken:nil error:error]; + } + } else { + // If somebody updated IID with APNS token while our initial request did not have it + // set we need to update it on the server. + NSData *deviceTokenInRequest = instanceIDOptions[kFIRInstanceIDTokenOptionsAPNSKey]; + BOOL isSandboxInRequest = + [instanceIDOptions[kFIRInstanceIDTokenOptionsAPNSIsSandboxKey] boolValue]; + // Note that APNSTupleStringInRequest will be nil if deviceTokenInRequest is nil + NSString *APNSTupleStringInRequest = FIRInstanceIDAPNSTupleStringForTokenAndServerType( + deviceTokenInRequest, isSandboxInRequest); + // If the APNs value either remained nil, or was the same non-nil value, the APNs value + // did not change. + BOOL APNSRemainedSameDuringFetch = + (self.APNSTupleString == nil && APNSTupleStringInRequest == nil) || + ([self.APNSTupleString isEqualToString:APNSTupleStringInRequest]); + if (!APNSRemainedSameDuringFetch && hasFirebaseMessaging) { + // APNs value did change mid-fetch, so the token should be re-fetched with the current APNs + // value. + [self retryGetDefaultTokenAfter:0]; + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeRefetchingTokenForAPNS, + @"Received APNS token while fetching default token. " + @"Refetching default token."); + // Do not notify and handle completion handler since this is a retry. + // Simply return. + return; + } else { + FIRInstanceIDLoggerInfo(kFIRInstanceIDMessageCodeInstanceID010, + @"Successfully fetched default token."); + } + // Post the required notifications if somebody is waiting. + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInstanceID008, @"Got default token %@", + token); + NSString *previousFCMToken = self.defaultFCMToken; + self.defaultFCMToken = token; + + // Only notify of token refresh if we have a new valid token that's different than before + if (self.defaultFCMToken.length && ![self.defaultFCMToken isEqualToString:previousFCMToken]) { + NSNotification *tokenRefreshNotification = + [NSNotification notificationWithName:kFIRInstanceIDTokenRefreshNotification + object:[self.defaultFCMToken copy]]; + [[NSNotificationQueue defaultQueue] enqueueNotification:tokenRefreshNotification + postingStyle:NSPostASAP]; + } + + [self performDefaultTokenHandlerWithToken:token error:nil]; + } + }; + + [self tokenWithAuthorizedEntity:self.fcmSenderID + scope:kFIRInstanceIDDefaultTokenScope + options:instanceIDOptions + handler:newHandler]; +} + +/** + * + */ +- (void)performDefaultTokenHandlerWithToken:(NSString *)token error:(NSError *)error { + if (!self.defaultTokenFetchHandler) { + return; + } + + [self.defaultTokenFetchHandler combinedHandler](token, error); + self.defaultTokenFetchHandler = nil; +} + +- (void)retryGetDefaultTokenAfter:(NSTimeInterval)retryInterval { + FIRInstanceID_WEAKIFY(self); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryInterval * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + FIRInstanceID_STRONGIFY(self); + // Pass nil: no new handlers to be added, currently existing handlers + // will be called + [self defaultTokenWithRetry:YES handler:nil]; + }); +} + +#pragma mark - APNS Token +// This should only be triggered from FCM. +- (void)notifyAPNSTokenIsSet:(NSNotification *)notification { + NSData *token = notification.object; + if (!token || ![token isKindOfClass:[NSData class]]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInternal002, @"Invalid APNS token type %@", + NSStringFromClass([notification.object class])); + return; + } + NSInteger type = [notification.userInfo[kFIRInstanceIDAPNSTokenType] integerValue]; + + // The APNS token is being added, or has changed (rare) + if ([self.apnsTokenData isEqualToData:token]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInstanceID011, + @"Trying to reset APNS token to the same value. Will return"); + return; + } + // Use this token type for when we have to automatically fetch tokens in the future + self.apnsTokenType = type; + BOOL isSandboxApp = (type == FIRInstanceIDAPNSTokenTypeSandbox); + if (self.apnsTokenType == FIRInstanceIDAPNSTokenTypeUnknown) { + isSandboxApp = [self isSandboxApp]; + } + self.apnsTokenData = [token copy]; + self.APNSTupleString = FIRInstanceIDAPNSTupleStringForTokenAndServerType(token, isSandboxApp); + + // Pro-actively invalidate the default token, if the APNs change makes it + // invalid. Previously, we invalidated just before fetching the token. + NSArray *invalidatedTokens = + [self.tokenManager updateTokensToAPNSDeviceToken:self.apnsTokenData isSandbox:isSandboxApp]; + + // Re-fetch any invalidated tokens automatically, this time with the current APNs token, so that + // they are up-to-date. + if (invalidatedTokens.count > 0) { + FIRInstanceID_WEAKIFY(self); + [self asyncLoadKeyPairWithHandler:^(FIRInstanceIDKeyPair *keyPair, NSError *error) { + FIRInstanceID_STRONGIFY(self); + if (self == nil) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID017, + @"Instance ID shut down during token reset. Aborting"); + return; + } + if (self.apnsTokenData == nil) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID018, + @"apnsTokenData was set to nil during token reset. Aborting"); + return; + } + + NSMutableDictionary *tokenOptions = [@{ + kFIRInstanceIDTokenOptionsAPNSKey : self.apnsTokenData, + kFIRInstanceIDTokenOptionsAPNSIsSandboxKey : @(isSandboxApp) + } mutableCopy]; + if (self.firebaseAppID) { + tokenOptions[kFIRInstanceIDTokenOptionsFirebaseAppIDKey] = self.firebaseAppID; + } + + for (FIRInstanceIDTokenInfo *tokenInfo in invalidatedTokens) { + if ([tokenInfo.token isEqualToString:self.defaultFCMToken]) { + // We will perform a special fetch for the default FCM token, so that the delegate methods + // are called. For all others, we will do an internal re-fetch. + [self defaultTokenWithHandler:nil]; + } else { + [self.tokenManager fetchNewTokenWithAuthorizedEntity:tokenInfo.authorizedEntity + scope:tokenInfo.scope + keyPair:keyPair + options:tokenOptions + handler:^(NSString *_Nullable token, + NSError *_Nullable error){ + + }]; + } + } + }]; + } +} + +- (BOOL)isSandboxApp { + static BOOL isSandboxApp = YES; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + isSandboxApp = ![self isProductionApp]; + }); + return isSandboxApp; +} + +- (BOOL)isProductionApp { + const BOOL defaultAppTypeProd = YES; + + NSError *error = nil; + if ([GULAppEnvironmentUtil isSimulator]) { + [self logAPNSConfigurationError:@"Running InstanceID on a simulator doesn't have APNS. " + @"Use prod profile by default."]; + return defaultAppTypeProd; + } + + if ([GULAppEnvironmentUtil isFromAppStore]) { + // Apps distributed via AppStore or TestFlight use the Production APNS certificates. + return defaultAppTypeProd; + } +#if TARGET_OS_IOS || TARGET_OS_TV + NSString *path = [[[NSBundle mainBundle] bundlePath] + stringByAppendingPathComponent:@"embedded.mobileprovision"]; +#elif TARGET_OS_OSX + NSString *path = [[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] + stringByAppendingPathComponent:@"embedded.provisionprofile"]; +#endif + + if ([GULAppEnvironmentUtil isAppStoreReceiptSandbox] && !path.length) { + // Distributed via TestFlight + return defaultAppTypeProd; + } + + NSMutableData *profileData = [NSMutableData dataWithContentsOfFile:path options:0 error:&error]; + + if (!profileData.length || error) { + NSString *errorString = + [NSString stringWithFormat:@"Error while reading embedded mobileprovision %@", error]; + [self logAPNSConfigurationError:errorString]; + return defaultAppTypeProd; + } + + // The "embedded.mobileprovision" sometimes contains characters with value 0, which signals the + // end of a c-string and halts the ASCII parser, or with value > 127, which violates strict 7-bit + // ASCII. Replace any 0s or invalid characters in the input. + uint8_t *profileBytes = (uint8_t *)profileData.bytes; + for (int i = 0; i < profileData.length; i++) { + uint8_t currentByte = profileBytes[i]; + if (!currentByte || currentByte > 127) { + profileBytes[i] = '.'; + } + } + + NSString *embeddedProfile = [[NSString alloc] initWithBytesNoCopy:profileBytes + length:profileData.length + encoding:NSASCIIStringEncoding + freeWhenDone:NO]; + + if (error || !embeddedProfile.length) { + NSString *errorString = + [NSString stringWithFormat:@"Error while reading embedded mobileprovision %@", error]; + [self logAPNSConfigurationError:errorString]; + return defaultAppTypeProd; + } + + NSScanner *scanner = [NSScanner scannerWithString:embeddedProfile]; + NSString *plistContents; + if ([scanner scanUpToString:@"" intoString:&plistContents]) { + plistContents = [plistContents stringByAppendingString:@""]; + } + } + + if (!plistContents.length) { + return defaultAppTypeProd; + } + + NSData *data = [plistContents dataUsingEncoding:NSUTF8StringEncoding]; + if (!data.length) { + [self logAPNSConfigurationError:@"Couldn't read plist fetched from embedded mobileprovision"]; + return defaultAppTypeProd; + } + + NSError *plistMapError; + id plistData = [NSPropertyListSerialization propertyListWithData:data + options:NSPropertyListImmutable + format:nil + error:&plistMapError]; + if (plistMapError || ![plistData isKindOfClass:[NSDictionary class]]) { + NSString *errorString = + [NSString stringWithFormat:@"Error while converting assumed plist to dict %@", + plistMapError.localizedDescription]; + [self logAPNSConfigurationError:errorString]; + return defaultAppTypeProd; + } + NSDictionary *plistMap = (NSDictionary *)plistData; + + if ([plistMap valueForKeyPath:@"ProvisionedDevices"]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInstanceID012, + @"Provisioning profile has specifically provisioned devices, " + @"most likely a Dev profile."); + } + +#if TARGET_OS_IOS || TARGET_OS_TV + NSString *apsEnvironment = [plistMap valueForKeyPath:kEntitlementsAPSEnvironmentKey]; +#elif TARGET_OS_OSX + NSDictionary *entitlements = [plistMap valueForKey:kEntitlementsKeyForMac]; + NSString *apsEnvironment = [entitlements valueForKey:kEntitlementsAPSEnvironmentKey]; +#endif + + NSString *debugString __unused = + [NSString stringWithFormat:@"APNS Environment in profile: %@", apsEnvironment]; + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInstanceID013, @"%@", debugString); + + // No aps-environment in the profile. + if (!apsEnvironment.length) { + [self logAPNSConfigurationError:@"No aps-environment set. If testing on a device APNS is not " + @"correctly configured. Please recheck your provisioning " + @"profiles. If testing on a simulator this is fine since APNS " + @"doesn't work on the simulator."]; + return defaultAppTypeProd; + } + + if ([apsEnvironment isEqualToString:kAPSEnvironmentDevelopmentValue]) { + return NO; + } + + return defaultAppTypeProd; +} + +/// Log error messages only when Messaging exists in the pod. +- (void)logAPNSConfigurationError:(NSString *)errorString { + BOOL hasFirebaseMessaging = NSClassFromString(kFIRInstanceIDFCMSDKClassString) != nil; + if (hasFirebaseMessaging) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeInstanceID014, @"%@", errorString); + } else { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInstanceID015, @"%@", errorString); + } +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAPNSInfo.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAPNSInfo.h new file mode 100644 index 0000000000..92b2469b1f --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAPNSInfo.h @@ -0,0 +1,64 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Represents an APNS device token and whether its environment is for sandbox. + * It can read from and write to an NSDictionary for simple serialization. + */ +@interface FIRInstanceIDAPNSInfo : NSObject + +/// The APNs device token, provided by the OS to the application delegate +@property(nonatomic, readonly, strong) NSData *deviceToken; +/// Represents whether or not this is deviceToken is for the sandbox +/// environment, or production. +@property(nonatomic, readonly, getter=isSandbox) BOOL sandbox; + +/** + * Initializes the receiver with an APNs device token, and boolean + * representing whether that token is for the sandbox environment. + * + * @param deviceToken The APNs device token typically provided by the + * operating system. + * @param isSandbox YES if the APNs device token is for the sandbox + * environment, or NO if it is for production. + * @return An instance of FIRInstanceIDAPNSInfo. + */ +- (instancetype)initWithDeviceToken:(NSData *)deviceToken isSandbox:(BOOL)isSandbox; + +/** + * Initializes the receiver from a token options dictionary containing data + * within the `kFIRInstanceIDTokenOptionsAPNSKey` and + * `kFIRInstanceIDTokenOptionsAPNSIsSandboxKey` keys. The token should be an + * NSData blob, and the sandbox value should be an NSNumber + * representing a boolean value. + * + * @param dictionary A dictionary containing values under the keys + * `kFIRInstanceIDTokenOptionsAPNSKey` and + * `kFIRInstanceIDTokenOptionsAPNSIsSandboxKey`. + * @return An instance of FIRInstanceIDAPNSInfo, or nil if the + * dictionary data was invalid or missing. + */ +- (nullable instancetype)initWithTokenOptionsDictionary:(NSDictionary *)dictionary; + +- (BOOL)isEqualToAPNSInfo:(FIRInstanceIDAPNSInfo *)otherInfo; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAPNSInfo.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAPNSInfo.m new file mode 100644 index 0000000000..d1f9d08002 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAPNSInfo.m @@ -0,0 +1,79 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDAPNSInfo.h" + +#import "FIRInstanceIDConstants.h" + +/// The key used to find the APNs device token in an archive. +NSString *const kFIRInstanceIDAPNSInfoTokenKey = @"device_token"; +/// The key used to find the sandbox value in an archive. +NSString *const kFIRInstanceIDAPNSInfoSandboxKey = @"sandbox"; + +@implementation FIRInstanceIDAPNSInfo + +- (instancetype)initWithDeviceToken:(NSData *)deviceToken isSandbox:(BOOL)isSandbox { + self = [super init]; + if (self) { + _deviceToken = [deviceToken copy]; + _sandbox = isSandbox; + } + return self; +} + +- (instancetype)initWithTokenOptionsDictionary:(NSDictionary *)dictionary { + id deviceToken = dictionary[kFIRInstanceIDTokenOptionsAPNSKey]; + if (![deviceToken isKindOfClass:[NSData class]]) { + return nil; + } + + id isSandbox = dictionary[kFIRInstanceIDTokenOptionsAPNSIsSandboxKey]; + if (![isSandbox isKindOfClass:[NSNumber class]]) { + return nil; + } + self = [super init]; + if (self) { + _deviceToken = (NSData *)deviceToken; + _sandbox = ((NSNumber *)isSandbox).boolValue; + } + return self; +} + +#pragma mark - NSCoding + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { + id deviceToken = [aDecoder decodeObjectForKey:kFIRInstanceIDAPNSInfoTokenKey]; + if (![deviceToken isKindOfClass:[NSData class]]) { + return nil; + } + BOOL isSandbox = [aDecoder decodeBoolForKey:kFIRInstanceIDAPNSInfoSandboxKey]; + return [self initWithDeviceToken:(NSData *)deviceToken isSandbox:isSandbox]; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeObject:self.deviceToken forKey:kFIRInstanceIDAPNSInfoTokenKey]; + [aCoder encodeBool:self.sandbox forKey:kFIRInstanceIDAPNSInfoSandboxKey]; +} + +- (BOOL)isEqualToAPNSInfo:(FIRInstanceIDAPNSInfo *)otherInfo { + if ([super isEqual:otherInfo]) { + return YES; + } + return ([self.deviceToken isEqualToData:otherInfo.deviceToken] && + self.isSandbox == otherInfo.isSandbox); +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthKeyChain.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthKeyChain.h new file mode 100644 index 0000000000..347dddac19 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthKeyChain.h @@ -0,0 +1,98 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +extern NSString *__nonnull const kFIRInstanceIDKeychainWildcardIdentifier; + +NS_ASSUME_NONNULL_BEGIN + +/** + * Wrapper around storing FCM auth data in iOS keychain. + */ +@interface FIRInstanceIDAuthKeychain : NSObject + +/** + * Designated Initializer. Init a generic `SecClassGenericPassword` keychain with `identifier` + * as the `kSecAttrGeneric`. + * + * @param identifier The generic attribute to be used by the keychain. + * + * @return A Keychain object with `kSecAttrGeneric` attribute set to identifier. + */ +- (instancetype)initWithIdentifier:(NSString *)identifier; + +/** + * Get keychain items matching the given service and account. The service and/or account + * can be a wildcard (`kFIRInstanceIDKeychainWildcardIdentifier`), which case the query + * will include all items matching any services and/or accounts. + * + * @param service The kSecAttrService used to save the password. Can be wildcard. + * @param account The kSecAttrAccount used to save the password. Can be wildcard. + * + * @return An array of |NSData|s matching the provided inputs. + */ +- (NSArray *)itemsMatchingService:(NSString *)service account:(NSString *)account; + +/** + * Get keychain item for a given service and account. + * + * @param service The kSecAttrService used to save the password. + * @param account The kSecAttrAccount used to save the password. + * + * @return A cached keychain item for a given account and service, or nil if it was not + * found or could not be retrieved. + */ +- (NSData *)dataForService:(NSString *)service account:(NSString *)account; + +/** + * Remove the cached items from the keychain matching the service, account and access group. + * In case the items do not exist, YES is returned but with a valid error object with code + * `errSecItemNotFound`. + * + * @param service The kSecAttrService used to save the password. + * @param account The kSecAttrAccount used to save the password. + * @param handler The callback handler which is invoked when the remove operation is complete, with + * an error if there is any. + */ +- (void)removeItemsMatchingService:(NSString *)service + account:(NSString *)account + handler:(nullable void (^)(NSError *error))handler; + +/** + * Set the data for a given service and account with a specific accessibility. If + * accessibility is NULL we use `kSecAttrAccessibleAlwaysThisDeviceOnly` which + * prevents backup and restore to iCloud, and works for app extension that can + * execute right after a device is restarted (and not unlocked). + * + * @param data The data to save. + * @param service The `kSecAttrService` used to save the password. + * @param accessibility The `kSecAttrAccessibility` used to save the password. If NULL + * set this to `kSecAttrAccessibleAlwaysThisDeviceOnly`. + * @param account The `kSecAttrAccount` used to save the password. + * @param handler The callback handler which is invoked when the add operation is complete, + * with an error if there is any. + * + */ +- (void)setData:(NSData *)data + forService:(NSString *)service + accessibility:(nullable CFTypeRef)accessibility + account:(NSString *)account + handler:(nullable void (^)(NSError *))handler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthKeyChain.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthKeyChain.m new file mode 100644 index 0000000000..348a915e8d --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthKeyChain.m @@ -0,0 +1,223 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDAuthKeyChain.h" +#import "FIRInstanceIDKeychain.h" +#import "FIRInstanceIDLogger.h" + +/** + * The error type representing why we couldn't read data from the keychain. + */ +typedef NS_ENUM(int, FIRInstanceIDKeychainErrorType) { + kFIRInstanceIDKeychainErrorBadArguments = -1301, +}; + +NSString *const kFIRInstanceIDKeychainWildcardIdentifier = @"*"; + +@interface FIRInstanceIDAuthKeychain () + +@property(nonatomic, copy) NSString *generic; +// cachedKeychainData is keyed by service and account, the value is an array of NSData. +// It is used to cache the tokens per service, per account, as well as checkin data per service, +// per account inside the keychain. +@property(nonatomic) + NSMutableDictionary *> *> + *cachedKeychainData; + +@end + +@implementation FIRInstanceIDAuthKeychain + +- (instancetype)initWithIdentifier:(NSString *)identifier { + self = [super init]; + if (self) { + _generic = [identifier copy]; + _cachedKeychainData = [[NSMutableDictionary alloc] init]; + } + return self; +} + ++ (NSMutableDictionary *)keychainQueryForService:(NSString *)service + account:(NSString *)account + generic:(NSString *)generic { + NSDictionary *query = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword}; + + NSMutableDictionary *finalQuery = [NSMutableDictionary dictionaryWithDictionary:query]; + if ([generic length] && ![kFIRInstanceIDKeychainWildcardIdentifier isEqualToString:generic]) { + finalQuery[(__bridge NSString *)kSecAttrGeneric] = generic; + } + if ([account length] && ![kFIRInstanceIDKeychainWildcardIdentifier isEqualToString:account]) { + finalQuery[(__bridge NSString *)kSecAttrAccount] = account; + } + if ([service length] && ![kFIRInstanceIDKeychainWildcardIdentifier isEqualToString:service]) { + finalQuery[(__bridge NSString *)kSecAttrService] = service; + } + return finalQuery; +} + +- (NSMutableDictionary *)keychainQueryForService:(NSString *)service account:(NSString *)account { + return [[self class] keychainQueryForService:service account:account generic:self.generic]; +} + +- (NSArray *)itemsMatchingService:(NSString *)service account:(NSString *)account { + // If query wildcard service, it asks for all the results, which always query from keychain. + if (![service isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier] && + ![account isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier] && + _cachedKeychainData[service][account]) { + // As long as service, account array exist, even it's empty, it means we've queried it before, + // returns the cache value. + return _cachedKeychainData[service][account]; + } + + NSMutableDictionary *keychainQuery = [self keychainQueryForService:service account:account]; + NSMutableArray *results; + keychainQuery[(__bridge id)kSecReturnData] = (__bridge id)kCFBooleanTrue; +#if TARGET_OS_IOS || TARGET_OS_TV + keychainQuery[(__bridge id)kSecReturnAttributes] = (__bridge id)kCFBooleanTrue; + keychainQuery[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitAll; + // FIRInstanceIDKeychain should only take a query and return a result, will handle the query here. + NSArray *passwordInfos = + CFBridgingRelease([[FIRInstanceIDKeychain sharedInstance] itemWithQuery:keychainQuery]); +#elif TARGET_OS_OSX + keychainQuery[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne; + NSData *passwordInfos = + CFBridgingRelease([[FIRInstanceIDKeychain sharedInstance] itemWithQuery:keychainQuery]); +#endif + + if (!passwordInfos) { + // Nothing was found, simply return from this sync block. + // Make sure to label the cache entry empty, signaling that we've queried this entry. + if ([service isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier] || + [account isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier]) { + // Do not update cache if it's wildcard query. + return @[]; + } else if (_cachedKeychainData[service]) { + [_cachedKeychainData[service] setObject:@[] forKey:account]; + } else { + [_cachedKeychainData setObject:[@{account : @[]} mutableCopy] forKey:service]; + } + return @[]; + } + results = [[NSMutableArray alloc] init]; +#if TARGET_OS_IOS || TARGET_OS_TV + NSInteger numPasswords = passwordInfos.count; + for (NSUInteger i = 0; i < numPasswords; i++) { + NSDictionary *passwordInfo = [passwordInfos objectAtIndex:i]; + if (passwordInfo[(__bridge id)kSecValueData]) { + [results addObject:passwordInfo[(__bridge id)kSecValueData]]; + } + } +#elif TARGET_OS_OSX + [results addObject:passwordInfos]; +#endif + // We query the keychain because it didn't exist in cache, now query is done, update the result in + // the cache. + if ([service isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier] || + [account isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier]) { + // Do not update cache if it's wildcard query. + return [results copy]; + } else if (_cachedKeychainData[service]) { + [_cachedKeychainData[service] setObject:[results copy] forKey:account]; + } else { + NSMutableDictionary *entry = [@{account : [results copy]} mutableCopy]; + [_cachedKeychainData setObject:entry forKey:service]; + } + return [results copy]; +} + +- (NSData *)dataForService:(NSString *)service account:(NSString *)account { + NSArray *items = [self itemsMatchingService:service account:account]; + // If items is nil or empty, nil will be returned. + return items.firstObject; +} + +- (void)removeItemsMatchingService:(NSString *)service + account:(NSString *)account + handler:(void (^)(NSError *error))handler { + if ([service isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier]) { + // Delete all keychain items. + _cachedKeychainData = [[NSMutableDictionary alloc] init]; + } else if ([account isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier]) { + // Delete all entries under service, + if (_cachedKeychainData[service]) { + _cachedKeychainData[service] = [[NSMutableDictionary alloc] init]; + } + } else if (_cachedKeychainData[service]) { + // We should keep the service/account entry instead of nil so we know + // it's "empty entry" instead of "not query from keychain yet". + [_cachedKeychainData[service] setObject:@[] forKey:account]; + } else { + [_cachedKeychainData setObject:[@{account : @[]} mutableCopy] forKey:service]; + } + NSMutableDictionary *keychainQuery = [self keychainQueryForService:service account:account]; + [[FIRInstanceIDKeychain sharedInstance] removeItemWithQuery:keychainQuery handler:handler]; +} + +- (void)setData:(NSData *)data + forService:(NSString *)service + accessibility:(CFTypeRef)accessibility + account:(NSString *)account + handler:(void (^)(NSError *))handler { + if ([service isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier] || + [account isEqualToString:kFIRInstanceIDKeychainWildcardIdentifier]) { + if (handler) { + handler([NSError errorWithDomain:kFIRInstanceIDKeychainErrorDomain + code:kFIRInstanceIDKeychainErrorBadArguments + userInfo:nil]); + } + return; + } + [self removeItemsMatchingService:service + account:account + handler:^(NSError *error) { + if (error) { + if (handler) { + handler(error); + } + return; + } + if (data.length > 0) { + NSMutableDictionary *keychainQuery = + [self keychainQueryForService:service account:account]; + keychainQuery[(__bridge id)kSecValueData] = data; + + if (accessibility != NULL) { + keychainQuery[(__bridge id)kSecAttrAccessible] = + (__bridge id)accessibility; + } else { + // Defaults to No backup + keychainQuery[(__bridge id)kSecAttrAccessible] = + (__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly; + } + [[FIRInstanceIDKeychain sharedInstance] + addItemWithQuery:keychainQuery + handler:handler]; + } + }]; + // Set the cache value. This must happen after removeItemsMatchingService:account:handler was + // called, so the cache value was reset before setting a new value. + if (_cachedKeychainData[service]) { + if (_cachedKeychainData[service][account]) { + _cachedKeychainData[service][account] = @[ data ]; + } else { + [_cachedKeychainData[service] setObject:@[ data ] forKey:account]; + } + } else { + [_cachedKeychainData setObject:[@{account : @[ data ]} mutableCopy] forKey:service]; + } +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthService.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthService.h new file mode 100644 index 0000000000..1fb715e7c8 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthService.h @@ -0,0 +1,91 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import "FIRInstanceIDCheckinService.h" + +@class FIRInstanceIDCheckinPreferences; +@class FIRInstanceIDStore; + +/** + * FIRInstanceIDAuthService is responsible for retrieving, caching, and supplying checkin info + * for the rest of Instance ID. A checkin can be scheduled, meaning that it will keep retrying the + * checkin request until it is successful. A checkin can also be requested directly, with a + * completion handler. + */ +@interface FIRInstanceIDAuthService : NSObject + +/** + * Used only for testing. In addition to taking a store (for locally caching the checkin info), it + * also takes a checkinService. + */ +- (instancetype)initWithCheckinService:(FIRInstanceIDCheckinService *)checkinService + store:(FIRInstanceIDStore *)store; + +/** + * Initializes the auth service given a store (which provides the local caching of checkin info). + * This initializer will create its own instance of FIRInstanceIDCheckinService. + */ +- (instancetype)initWithStore:(FIRInstanceIDStore *)store; + +#pragma mark - Checkin Service + +/** + * Checks if the current deviceID and secret are valid or not. + * + * @return YES if the checkin credentials are valid else NO. + */ +- (BOOL)hasValidCheckinInfo; + +/** + * Fetch checkin info from the server. This would usually refresh the existing + * checkin credentials for the current app. + * + * @param handler The completion handler to invoke once the checkin info has been + * refreshed. + */ +- (void)fetchCheckinInfoWithHandler:(FIRInstanceIDDeviceCheckinCompletion)handler; + +/** + * Schedule checkin. Will hit the network only if the currently loaded checkin + * preferences are stale. + * + * @param immediately YES if we want it to be scheduled immediately else NO. + */ +- (void)scheduleCheckin:(BOOL)immediately; + +/** + * Returns the checkin preferences currently loaded in memory. The Checkin preferences + * can be either valid or invalid. + * + * @return The checkin preferences loaded in memory. + */ +- (FIRInstanceIDCheckinPreferences *)checkinPreferences; + +/** + * Cancels any ongoing checkin fetch, if any. + */ +- (void)stopCheckinRequest; + +/** + * Resets the checkin information. + * + * @param handler The callback handler which is invoked when checkin reset is complete, + * with an error if there is any. + */ +- (void)resetCheckinWithHandler:(void (^)(NSError *error))handler; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthService.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthService.m new file mode 100644 index 0000000000..8c33c44089 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDAuthService.m @@ -0,0 +1,302 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDAuthService.h" + +#import "FIRInstanceIDCheckinPreferences+Internal.h" +#import "FIRInstanceIDCheckinPreferences.h" +#import "FIRInstanceIDCheckinPreferences_Private.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDDefines.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDStore.h" +#import "NSError+FIRInstanceID.h" + +// Max time interval between checkin retry in seconds. +static const int64_t kMaxCheckinRetryIntervalInSeconds = 1 << 5; + +@interface FIRInstanceIDAuthService () + +// Used to retrieve and cache the checkin info to disk and Keychain. +@property(nonatomic, readwrite, strong) FIRInstanceIDStore *store; +// Used to perform single checkin fetches. +@property(nonatomic, readwrite, strong) FIRInstanceIDCheckinService *checkinService; +// The current checkin info. It will be compared to what is retrieved to determine whether it is +// different than what is in the cache. +@property(nonatomic, readwrite, strong) FIRInstanceIDCheckinPreferences *checkinPreferences; + +// This array will track multiple handlers waiting for checkin to be performed. When a checkin +// request completes, all the handlers will be notified. +// Changes to the checkinHandlers array should happen in a thread-safe manner. +@property(nonatomic, readonly, strong) + NSMutableArray *checkinHandlers; + +// This is set to true if there is a checkin request in-flight. +@property(atomic, readwrite, assign) BOOL isCheckinInProgress; +// This timer is used a perform checkin retries. It is cancellable. +@property(atomic, readwrite, strong) NSTimer *scheduledCheckinTimer; +// The number of times checkin has been retried during a scheduled checkin. +@property(atomic, readwrite, assign) int checkinRetryCount; + +@end + +@implementation FIRInstanceIDAuthService + +- (instancetype)initWithCheckinService:(FIRInstanceIDCheckinService *)checkinService + store:(FIRInstanceIDStore *)store { + self = [super init]; + if (self) { + _store = store; + _checkinPreferences = [_store cachedCheckinPreferences]; + _checkinService = checkinService; + _checkinHandlers = [NSMutableArray array]; + } + return self; +} + +- (void)dealloc { + [_scheduledCheckinTimer invalidate]; +} + +- (instancetype)initWithStore:(FIRInstanceIDStore *)store { + FIRInstanceIDCheckinService *checkinService = [[FIRInstanceIDCheckinService alloc] init]; + return [self initWithCheckinService:checkinService store:store]; +} + +#pragma mark - Schedule Checkin + +- (void)scheduleCheckin:(BOOL)immediately { + // Checkin is still valid, so a remote checkin is not required. + if ([self.checkinPreferences hasValidCheckinInfo]) { + return; + } + + // Checkin is already scheduled, so this (non-immediate) request can be ignored. + if (!immediately && [self.scheduledCheckinTimer isValid]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeAuthService000, + @"Checkin sync already scheduled. Will not schedule."); + return; + } + + if (immediately) { + [self performScheduledCheckin]; + } else { + int64_t checkinRetryDuration = [self calculateNextCheckinRetryIntervalInSeconds]; + [self startCheckinTimerWithDuration:(NSTimeInterval)checkinRetryDuration]; + } +} + +- (void)startCheckinTimerWithDuration:(NSTimeInterval)timerDuration { + self.scheduledCheckinTimer = + [NSTimer scheduledTimerWithTimeInterval:timerDuration + target:self + selector:@selector(onScheduledCheckinTimerFired:) + userInfo:nil + repeats:NO]; + // Add some tolerance to the timer, to allow iOS to be more flexible with this timer + self.scheduledCheckinTimer.tolerance = 0.5; +} + +- (void)clearScheduledCheckinTimer { + [self.scheduledCheckinTimer invalidate]; + self.scheduledCheckinTimer = nil; +} + +- (void)onScheduledCheckinTimerFired:(NSTimer *)timer { + [self performScheduledCheckin]; +} + +- (void)performScheduledCheckin { + // No checkin scheduled as of now. + [self clearScheduledCheckinTimer]; + + // Checkin is still valid, so a remote checkin is not required. + if ([self.checkinPreferences hasValidCheckinInfo]) { + return; + } + + FIRInstanceID_WEAKIFY(self); + [self + fetchCheckinInfoWithHandler:^(FIRInstanceIDCheckinPreferences *preferences, NSError *error) { + FIRInstanceID_STRONGIFY(self); + self.checkinRetryCount++; + + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeAuthService001, @"Checkin error %@.", + error); + + dispatch_async(dispatch_get_main_queue(), ^{ + // Schedule another checkin + [self scheduleCheckin:NO]; + }); + + } else { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeAuthService002, @"Checkin success."); + } + }]; +} + +- (int64_t)calculateNextCheckinRetryIntervalInSeconds { + // persistent failures can lead to overflow prevent that. + if (self.checkinRetryCount >= 10) { + return kMaxCheckinRetryIntervalInSeconds; + } + return MIN(1 << self.checkinRetryCount, kMaxCheckinRetryIntervalInSeconds); +} + +#pragma mark - Checkin Service + +- (BOOL)hasValidCheckinInfo { + return [self.checkinPreferences hasValidCheckinInfo]; +} + +- (void)fetchCheckinInfoWithHandler:(nonnull FIRInstanceIDDeviceCheckinCompletion)handler { + // Perform any changes to self.checkinHandlers and _isCheckinInProgress in a thread-safe way. + @synchronized(self) { + [self.checkinHandlers addObject:handler]; + + if (_isCheckinInProgress) { + // Nothing more to do until our checkin request is done + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeAuthServiceCheckinInProgress, + @"Checkin is in progress\n"); + return; + } + } + + // Checkin is still valid, so a remote checkin is not required. + if ([self.checkinPreferences hasValidCheckinInfo]) { + [self notifyCheckinHandlersWithCheckin:self.checkinPreferences error:nil]; + return; + } + + @synchronized(self) { + _isCheckinInProgress = YES; + } + [self.checkinService + checkinWithExistingCheckin:self.checkinPreferences + completion:^(FIRInstanceIDCheckinPreferences *checkinPreferences, + NSError *error) { + @synchronized(self) { + self->_isCheckinInProgress = NO; + } + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeAuthService003, + @"Failed to checkin device %@", error); + [self notifyCheckinHandlersWithCheckin:nil error:error]; + return; + } + + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeAuthService004, + @"Successfully got checkin credentials"); + BOOL hasSameCachedPreferences = + [self cachedCheckinMatchesCheckin:checkinPreferences]; + checkinPreferences.hasPreCachedAuthCredentials = hasSameCachedPreferences; + + // Update to the most recent checkin preferences + self.checkinPreferences = checkinPreferences; + + // Save the checkin info to disk + // Keychain might not be accessible, so confirm that checkin preferences can + // be saved + [self.store + saveCheckinPreferences:checkinPreferences + handler:^(NSError *checkinSaveError) { + if (checkinSaveError && !hasSameCachedPreferences) { + // The checkin info was new, but it couldn't be + // written to the Keychain. Delete any stuff that was + // cached in memory. This doesn't delete any + // previously persisted preferences. + FIRInstanceIDLoggerError( + kFIRInstanceIDMessageCodeService004, + @"Unable to save checkin info, resetting " + @"checkin preferences " + "in memory."); + [checkinPreferences reset]; + [self + notifyCheckinHandlersWithCheckin:nil + error: + checkinSaveError]; + } else { + // The checkin is either new, or it was the same (and + // it couldn't be saved). Either way, report that the + // checkin preferences were received successfully. + [self notifyCheckinHandlersWithCheckin: + checkinPreferences + error:nil]; + if (!hasSameCachedPreferences) { + // Checkin is new. + // Notify any listeners that might be waiting for + // checkin to be fetched, such as Firebase + // Messaging (for its MCS connection). + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] + postNotificationName: + kFIRInstanceIDCheckinFetchedNotification + object:nil]; + }); + } + } + }]; + }]; +} + +- (FIRInstanceIDCheckinPreferences *)checkinPreferences { + return _checkinPreferences; +} + +- (void)stopCheckinRequest { + [self.checkinService stopFetching]; +} + +- (void)resetCheckinWithHandler:(void (^)(NSError *error))handler { + [self.store removeCheckinPreferencesWithHandler:^(NSError *error) { + if (!error) { + self.checkinPreferences = nil; + } + if (handler) { + handler(error); + } + }]; +} + +#pragma mark - Private + +/** + * Goes through the current list of checkin handlers and fires them with the same checkin and/or + * error info. The checkin handlers will get cleared after. + */ +- (void)notifyCheckinHandlersWithCheckin:(nullable FIRInstanceIDCheckinPreferences *)checkin + error:(nullable NSError *)error { + @synchronized(self) { + for (FIRInstanceIDDeviceCheckinCompletion handler in self.checkinHandlers) { + handler(checkin, error); + } + [self.checkinHandlers removeAllObjects]; + } +} + +/** + * Given a |checkin|, it will compare it to the current checkinPreferences to see if the + * deviceID and secretToken are the same. + */ +- (BOOL)cachedCheckinMatchesCheckin:(FIRInstanceIDCheckinPreferences *)checkin { + if (self.checkinPreferences && checkin) { + return ([self.checkinPreferences.deviceID isEqualToString:checkin.deviceID] && + [self.checkinPreferences.secretToken isEqualToString:checkin.secretToken]); + } + return NO; +} +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.h new file mode 100644 index 0000000000..bccaced890 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.h @@ -0,0 +1,81 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@interface FIRInstanceIDBackupExcludedPlist : NSObject + +/** + * Caches the plist contents in memory so we don't hit the disk each time we want + * to query something in the plist. This is loaded lazily i.e. if you write to the + * plist the contents you want to write will be stored here if the write was + * successful. The other case where it is loaded is if you read the plist contents + * by calling `contentAsDictionary`. + * + * In case you write to the plist and then try to read the file using + * `contentAsDictionary` we would just return the cachedPlistContents since it would + * represent the disk contents. + */ +@property(nonatomic, readonly, strong) NSDictionary *cachedPlistContents; + +/** + * Init a backup excluded plist file. + * + * @param fileName The filename for the plist file. + * @param subDirectory The subdirectory in Application Support to save the plist. + * + * @return Helper which allows to read write data to a backup excluded plist. + */ +- (instancetype)initWithFileName:(NSString *)fileName subDirectory:(NSString *)subDirectory; + +/** + * Write dictionary data to the backup excluded plist file. If the file does not exist + * it would be created before writing to it. + * + * @param dict The data to be written to the plist. + * @param error The error object if any while writing the data. + * + * @return YES if the write was successful else NO. + */ +- (BOOL)writeDictionary:(NSDictionary *)dict error:(NSError **)error; + +/** + * Delete the backup excluded plist created with the above filename. + * + * @param error The error object if any while deleting the file. + * + * @return YES If the delete was successful else NO. + */ +- (BOOL)deleteFile:(NSError **)error; + +/** + * The contents of the plist file. We also store the contents of the file in-memory. + * If the in-memory contents are valid we return the in-memory contents else we read + * the file from disk. + * + * @return A dictionary object that contains the contents of the plist file if the file + * exists else nil. + */ +- (NSDictionary *)contentAsDictionary; + +/** + * Check if the plist exists on the disk or not. + * + * @return YES if the file exists on the disk else NO. + */ +- (BOOL)doesFileExist; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.m new file mode 100644 index 0000000000..c1085caef7 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.m @@ -0,0 +1,117 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDBackupExcludedPlist.h" + +#import "FIRInstanceIDLogger.h" + +@interface FIRInstanceIDBackupExcludedPlist () + +@property(nonatomic, readwrite, copy) NSString *fileName; +@property(nonatomic, readwrite, copy) NSString *subDirectoryName; +@property(nonatomic, readwrite, strong) NSDictionary *cachedPlistContents; + +@end + +@implementation FIRInstanceIDBackupExcludedPlist + +- (instancetype)initWithFileName:(NSString *)fileName subDirectory:(NSString *)subDirectory { + self = [super init]; + if (self) { + _fileName = [fileName copy]; + _subDirectoryName = [subDirectory copy]; + } + return self; +} + +- (BOOL)writeDictionary:(NSDictionary *)dict error:(NSError **)error { + NSString *path = [self plistPathInDirectory]; + if (![dict writeToFile:path atomically:YES]) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeBackupExcludedPlist000, + @"Failed to write to %@.plist", self.fileName); + return NO; + } + + // Successfully wrote contents -- change the in-memory contents + self.cachedPlistContents = [dict copy]; + + NSURL *URL = [NSURL fileURLWithPath:path]; + if (error) { + *error = nil; + } + + NSDictionary *preferences = [URL resourceValuesForKeys:@[ NSURLIsExcludedFromBackupKey ] + error:error]; + if ([preferences[NSURLIsExcludedFromBackupKey] boolValue]) { + return YES; + } + + BOOL success = [URL setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:error]; + if (!success) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeBackupExcludedPlist001, + @"Error excluding %@ from backup, %@", [URL lastPathComponent], + error ? *error : @""); + } + return success; +} + +- (BOOL)deleteFile:(NSError **)error { + BOOL success = YES; + NSString *path = [self plistPathInDirectory]; + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + success = [[NSFileManager defaultManager] removeItemAtPath:path error:error]; + } + // remove the in-memory contents + self.cachedPlistContents = nil; + return success; +} + +- (NSDictionary *)contentAsDictionary { + if (!self.cachedPlistContents) { + NSString *path = [self plistPathInDirectory]; + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + self.cachedPlistContents = [[NSDictionary alloc] initWithContentsOfFile:path]; + } + } + return self.cachedPlistContents; +} + +- (BOOL)doesFileExist { + NSString *path = [self plistPathInDirectory]; + return [[NSFileManager defaultManager] fileExistsAtPath:path]; +} + +#pragma mark - Private + +- (NSString *)plistPathInDirectory { + NSArray *directoryPaths; + NSString *plistNameWithExtension = [NSString stringWithFormat:@"%@.plist", self.fileName]; + directoryPaths = + NSSearchPathForDirectoriesInDomains([self supportedDirectory], NSUserDomainMask, YES); + NSArray *components = @[ directoryPaths.lastObject, _subDirectoryName, plistNameWithExtension ]; + + return [NSString pathWithComponents:components]; +} + +- (NSSearchPathDirectory)supportedDirectory { +#if TARGET_OS_TV + return NSCachesDirectory; +#else + return NSApplicationSupportDirectory; +#endif +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.h new file mode 100644 index 0000000000..d2f286d797 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.h @@ -0,0 +1,64 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@interface FIRInstanceIDCheckinPreferences (Internal) + +/** + * Parse the checkin auth credentials saved in the Keychain to initialize checkin + * preferences. + * + * @param keychainContent The checkin auth credentials saved in the Keychain. + * + * @return A valid checkin preferences object if the checkin auth credentials in the + * keychain can be parsed successfully else nil. + */ ++ (FIRInstanceIDCheckinPreferences *)preferencesFromKeychainContents:(NSString *)keychainContent; + +/** + * Default initializer for InstanceID checkin preferences. + * + * @param deviceID The deviceID for the app. + * @param secretToken The secret token the app uses to authenticate with the server. + * + * @return A checkin preferences object with given deviceID and secretToken. + */ +- (instancetype)initWithDeviceID:(NSString *)deviceID secretToken:(NSString *)secretToken; + +/** + * Update checkin preferences from the preferences dict persisted as a plist. The dict contains + * all the checkin preferences retrieved from the server except the deviceID and secret which + * are stored in the Keychain. + * + * @param checkinPlistContent The checkin preferences saved in a plist on the disk. + */ +- (void)updateWithCheckinPlistContents:(NSDictionary *)checkinPlistContent; + +/** + * Reset the current checkin preferences object. + */ +- (void)reset; + +/** + * The string that contains the checkin auth credentials i.e. deviceID and secret. This + * needs to be stored in the Keychain. + * + * @return The checkin auth credential string containing the deviceID and secret. + */ +- (NSString *)checkinKeychainContent; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.m new file mode 100644 index 0000000000..88cc40a1be --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.m @@ -0,0 +1,112 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDCheckinPreferences+Internal.h" + +#import "FIRInstanceIDCheckinService.h" +#import "FIRInstanceIDUtilities.h" + +static NSString *const kCheckinKeychainContentSeparatorString = @"|"; + +@interface FIRInstanceIDCheckinPreferences () + +@property(nonatomic, readwrite, copy) NSString *deviceID; +@property(nonatomic, readwrite, copy) NSString *secretToken; +@property(nonatomic, readwrite, copy) NSString *digest; +@property(nonatomic, readwrite, copy) NSString *versionInfo; +@property(nonatomic, readwrite, copy) NSString *deviceDataVersion; + +@property(nonatomic, readwrite, strong) NSMutableDictionary *gServicesData; +@property(nonatomic, readwrite, assign) int64_t lastCheckinTimestampMillis; + +@end + +@implementation FIRInstanceIDCheckinPreferences (Internal) + ++ (FIRInstanceIDCheckinPreferences *)preferencesFromKeychainContents:(NSString *)keychainContent { + NSString *deviceID = [self checkinDeviceIDFromKeychainContent:keychainContent]; + NSString *secret = [self checkinSecretFromKeychainContent:keychainContent]; + if ([deviceID length] && [secret length]) { + return [[FIRInstanceIDCheckinPreferences alloc] initWithDeviceID:deviceID secretToken:secret]; + } else { + return nil; + } +} + +- (instancetype)initWithDeviceID:(NSString *)deviceID secretToken:(NSString *)secretToken { + self = [super init]; + if (self) { + self.deviceID = [deviceID copy]; + self.secretToken = [secretToken copy]; + } + return self; +} + +- (void)reset { + self.deviceID = nil; + self.secretToken = nil; + self.digest = nil; + self.versionInfo = nil; + self.gServicesData = nil; + self.deviceDataVersion = nil; + self.lastCheckinTimestampMillis = 0; +} + +- (void)updateWithCheckinPlistContents:(NSDictionary *)checkinPlistContent { + for (NSString *key in checkinPlistContent) { + if ([kFIRInstanceIDDigestStringKey isEqualToString:key]) { + self.digest = [checkinPlistContent[key] copy]; + } else if ([kFIRInstanceIDVersionInfoStringKey isEqualToString:key]) { + self.versionInfo = [checkinPlistContent[key] copy]; + } else if ([kFIRInstanceIDLastCheckinTimeKey isEqualToString:key]) { + self.lastCheckinTimestampMillis = [checkinPlistContent[key] longLongValue]; + } else if ([kFIRInstanceIDGServicesDictionaryKey isEqualToString:key]) { + self.gServicesData = [checkinPlistContent[key] mutableCopy]; + } else if ([kFIRInstanceIDDeviceDataVersionKey isEqualToString:key]) { + self.deviceDataVersion = [checkinPlistContent[key] copy]; + } + // Otherwise we have some keys we don't care about + } +} + +- (NSString *)checkinKeychainContent { + if ([self.deviceID length] && [self.secretToken length]) { + return [NSString stringWithFormat:@"%@%@%@", self.deviceID, + kCheckinKeychainContentSeparatorString, self.secretToken]; + } else { + return nil; + } +} + ++ (NSString *)checkinDeviceIDFromKeychainContent:(NSString *)keychainContent { + return [self checkinKeychainContent:keychainContent forIndex:0]; +} + ++ (NSString *)checkinSecretFromKeychainContent:(NSString *)keychainContent { + return [self checkinKeychainContent:keychainContent forIndex:1]; +} + ++ (NSString *)checkinKeychainContent:(NSString *)keychainContent forIndex:(int)index { + NSArray *keychainComponents = + [keychainContent componentsSeparatedByString:kCheckinKeychainContentSeparatorString]; + if (index >= 0 && index < 2 && [keychainComponents count] == 2) { + return keychainComponents[index]; + } else { + return nil; + } +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences.m new file mode 100644 index 0000000000..2f3c55ee7f --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences.m @@ -0,0 +1,95 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDCheckinPreferences.h" + +#import +#import "FIRInstanceIDCheckinService.h" +#import "FIRInstanceIDUtilities.h" + +const NSTimeInterval kFIRInstanceIDDefaultCheckinInterval = 7 * 24 * 60 * 60; // 7 days. + +@interface FIRInstanceIDCheckinPreferences () + +@property(nonatomic, readwrite, copy) NSString *deviceID; +@property(nonatomic, readwrite, copy) NSString *secretToken; +@property(nonatomic, readwrite, copy) NSString *digest; +@property(nonatomic, readwrite, copy) NSString *versionInfo; +@property(nonatomic, readwrite, copy) NSString *deviceDataVersion; + +@property(nonatomic, readwrite, strong) NSMutableDictionary *gServicesData; +@property(nonatomic, readwrite, assign) int64_t lastCheckinTimestampMillis; + +// This flag indicates that we have already saved the above deviceID and secret +// to our keychain and hence we don't need to save again. This is helpful since +// on checkin refresh we can avoid writing to the Keychain which can sometimes +// be very buggy. For info check this https://forums.developer.apple.com/thread/4743 +@property(nonatomic, readwrite, assign) BOOL hasPreCachedAuthCredentials; + +@end + +@implementation FIRInstanceIDCheckinPreferences + +- (NSDictionary *)checkinPlistContents { + NSMutableDictionary *checkinPlistContents = [NSMutableDictionary dictionary]; + checkinPlistContents[kFIRInstanceIDDigestStringKey] = self.digest ?: @""; + checkinPlistContents[kFIRInstanceIDVersionInfoStringKey] = self.versionInfo ?: @""; + checkinPlistContents[kFIRInstanceIDDeviceDataVersionKey] = self.deviceDataVersion ?: @""; + checkinPlistContents[kFIRInstanceIDLastCheckinTimeKey] = @(self.lastCheckinTimestampMillis); + checkinPlistContents[kFIRInstanceIDGServicesDictionaryKey] = + [self.gServicesData count] ? self.gServicesData : @{}; + return checkinPlistContents; +} + +- (BOOL)hasCheckinInfo { + return (self.deviceID.length && self.secretToken.length); +} + +- (BOOL)hasValidCheckinInfo { + int64_t currentTimestampInMillis = FIRInstanceIDCurrentTimestampInMilliseconds(); + int64_t timeSinceLastCheckinInMillis = currentTimestampInMillis - self.lastCheckinTimestampMillis; + + BOOL hasCheckinInfo = [self hasCheckinInfo]; + NSString *lastLocale = + [[GULUserDefaults standardUserDefaults] stringForKey:kFIRInstanceIDUserDefaultsKeyLocale]; + // If it's app's first time open and checkin is already fetched and no locale information is + // stored, then checkin info is valid. We should not checkin again because locale is considered + // "changed". + if (hasCheckinInfo && !lastLocale) { + NSString *currentLocale = FIRInstanceIDCurrentLocale(); + [[GULUserDefaults standardUserDefaults] setObject:currentLocale + forKey:kFIRInstanceIDUserDefaultsKeyLocale]; + return YES; + } + + // If locale has changed, checkin info is no longer valid. + // Also update locale information if changed. (Only do it here not in token refresh) + if (FIRInstanceIDHasLocaleChanged()) { + NSString *currentLocale = FIRInstanceIDCurrentLocale(); + [[GULUserDefaults standardUserDefaults] setObject:currentLocale + forKey:kFIRInstanceIDUserDefaultsKeyLocale]; + return NO; + } + + return (hasCheckinInfo && + (timeSinceLastCheckinInMillis / 1000.0 < kFIRInstanceIDDefaultCheckinInterval)); +} + +- (void)setHasPreCachedAuthCredentials:(BOOL)hasPreCachedAuthCredentials { + _hasPreCachedAuthCredentials = hasPreCachedAuthCredentials; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences_Private.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences_Private.h new file mode 100644 index 0000000000..9c5850ba4a --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinPreferences_Private.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +/** Checkin refresh interval. **/ +FOUNDATION_EXPORT const NSTimeInterval kFIRInstanceIDDefaultCheckinInterval; + +@interface FIRInstanceIDCheckinPreferences () + +- (BOOL)hasPreCachedAuthCredentials; +- (void)setHasPreCachedAuthCredentials:(BOOL)hasPreCachedAuthCredentials; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinService.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinService.h new file mode 100644 index 0000000000..e14b51cb5d --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinService.h @@ -0,0 +1,68 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import "FIRInstanceIDUtilities.h" + +NS_ASSUME_NONNULL_BEGIN + +// keys in Checkin preferences +FOUNDATION_EXPORT NSString *const kFIRInstanceIDDeviceAuthIdKey; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDSecretTokenKey; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDDigestStringKey; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDLastCheckinTimeKey; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDVersionInfoStringKey; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDGServicesDictionaryKey; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDDeviceDataVersionKey; + +@class FIRInstanceIDCheckinPreferences; + +/** + * Register the device with Checkin Service and get back the `authID`, `secret + * token` etc. for the client. Checkin results are cached in the + * `FIRInstanceIDCache` and periodically refreshed to prevent them from being stale. + * Each client needs to register with checkin before registering with InstanceID. + */ +@interface FIRInstanceIDCheckinService : NSObject + +/** + * Execute a device checkin request to obtain an deviceID, secret token, + * gService data. + * + * @param existingCheckin An existing checkin preference object, if available. + * @param completion Completion hander called on success or failure of device checkin. + */ +- (void)checkinWithExistingCheckin:(nullable FIRInstanceIDCheckinPreferences *)existingCheckin + completion:(FIRInstanceIDDeviceCheckinCompletion)completion; + +/** + * This would stop any request that the service made to the checkin backend and also + * release any callback handlers that it holds. + */ +- (void)stopFetching; + +/** + * Set test block for mock testing network requests. + * + * @param block The block to invoke as a mock response from the network. + */ ++ (void)setCheckinTestBlock:(nullable FIRInstanceIDURLRequestTestBlock)block; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinService.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinService.m new file mode 100644 index 0000000000..6d2b5ff9ab --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinService.m @@ -0,0 +1,244 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDCheckinService.h" + +#import "FIRInstanceIDCheckinPreferences+Internal.h" +#import "FIRInstanceIDCheckinPreferences_Private.h" +#import "FIRInstanceIDDefines.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDStore.h" +#import "FIRInstanceIDUtilities.h" +#import "NSError+FIRInstanceID.h" + +static NSString *const kDeviceCheckinURL = @"https://device-provisioning.googleapis.com/checkin"; + +// keys in Checkin preferences +NSString *const kFIRInstanceIDDeviceAuthIdKey = @"GMSInstanceIDDeviceAuthIdKey"; +NSString *const kFIRInstanceIDSecretTokenKey = @"GMSInstanceIDSecretTokenKey"; +NSString *const kFIRInstanceIDDigestStringKey = @"GMSInstanceIDDigestKey"; +NSString *const kFIRInstanceIDLastCheckinTimeKey = @"GMSInstanceIDLastCheckinTimestampKey"; +NSString *const kFIRInstanceIDVersionInfoStringKey = @"GMSInstanceIDVersionInfo"; +NSString *const kFIRInstanceIDGServicesDictionaryKey = @"GMSInstanceIDGServicesData"; +NSString *const kFIRInstanceIDDeviceDataVersionKey = @"GMSInstanceIDDeviceDataVersion"; + +static NSUInteger const kCheckinType = 2; // DeviceType IOS in l/w/a/_checkin.proto +static NSUInteger const kCheckinVersion = 2; +static NSUInteger const kFragment = 0; + +static FIRInstanceIDURLRequestTestBlock testBlock; + +@interface FIRInstanceIDCheckinService () + +@property(nonatomic, readwrite, strong) NSURLSession *session; + +@end + +@implementation FIRInstanceIDCheckinService +; + +- (instancetype)init { + self = [super init]; + if (self) { + // Create an URLSession once, even though checkin should happen about once a day + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; + config.timeoutIntervalForResource = 60.0f; // 1 minute + config.allowsCellularAccess = YES; + _session = [NSURLSession sessionWithConfiguration:config]; + _session.sessionDescription = @"com.google.iid-checkin"; + } + return self; +} + +- (void)dealloc { + testBlock = nil; + [self.session invalidateAndCancel]; +} + +- (void)checkinWithExistingCheckin:(FIRInstanceIDCheckinPreferences *)existingCheckin + completion:(FIRInstanceIDDeviceCheckinCompletion)completion { + if (self.session == nil) { + FIRInstanceIDLoggerError(kFIRInstanceIDInvalidNetworkSession, + @"Inconsistent state: NSURLSession has been invalidated"); + NSError *error = + [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeRegistrarFailedToCheckIn]; + if (completion) { + completion(nil, error); + } + return; + } + + NSURL *url = [NSURL URLWithString:kDeviceCheckinURL]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request setValue:@"application/json" forHTTPHeaderField:@"content-type"]; + NSDictionary *checkinParameters = [self checkinParametersWithExistingCheckin:existingCheckin]; + NSData *checkinData = [NSJSONSerialization dataWithJSONObject:checkinParameters + options:0 + error:nil]; + request.HTTPMethod = @"POST"; + request.HTTPBody = checkinData; + + void (^handler)(NSData *, NSURLResponse *, NSError *) = + ^(NSData *data, NSURLResponse *response, NSError *error) { + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeService000, + @"Device checkin HTTP fetch error. Error Code: %ld", + (long)error.code); + if (completion) { + completion(nil, error); + } + return; + } + + NSError *serializationError; + NSDictionary *dataResponse = [NSJSONSerialization JSONObjectWithData:data + options:0 + error:&serializationError]; + if (serializationError) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeService001, + @"Error serializing json object. Error Code: %ld", + _FIRInstanceID_L(serializationError.code)); + if (completion) { + completion(nil, serializationError); + } + return; + } + + NSString *deviceAuthID = [dataResponse[@"android_id"] stringValue]; + NSString *secretToken = [dataResponse[@"security_token"] stringValue]; + if ([deviceAuthID length] == 0) { + NSError *error = + [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidRequest]; + if (completion) { + completion(nil, error); + } + return; + } + + int64_t lastCheckinTimestampMillis = [dataResponse[@"time_msec"] longLongValue]; + int64_t currentTimestampMillis = FIRInstanceIDCurrentTimestampInMilliseconds(); + // Somehow the server clock gets out of sync with the device clock. + // Reset the last checkin timestamp in case this happens. + if (lastCheckinTimestampMillis > currentTimestampMillis) { + FIRInstanceIDLoggerDebug( + kFIRInstanceIDMessageCodeService002, @"Invalid last checkin timestamp %@ in future.", + [NSDate dateWithTimeIntervalSince1970:lastCheckinTimestampMillis / 1000.0]); + lastCheckinTimestampMillis = currentTimestampMillis; + } + + NSString *deviceDataVersionInfo = dataResponse[@"device_data_version_info"] ?: @""; + NSString *digest = dataResponse[@"digest"] ?: @""; + + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeService003, + @"Checkin successful with authId: %@, " + @"digest: %@, " + @"lastCheckinTimestamp: %lld", + deviceAuthID, digest, lastCheckinTimestampMillis); + + NSString *versionInfo = dataResponse[@"version_info"] ?: @""; + NSMutableDictionary *gservicesData = [NSMutableDictionary dictionary]; + + // Read gServices data. + NSArray *flatSettings = dataResponse[@"setting"]; + for (NSDictionary *dict in flatSettings) { + if (dict[@"name"] && dict[@"value"]) { + gservicesData[dict[@"name"]] = dict[@"value"]; + } else { + FIRInstanceIDLoggerDebug(kFIRInstanceIDInvalidSettingResponse, + @"Invalid setting in checkin response: (%@: %@)", + dict[@"name"], dict[@"value"]); + } + } + + FIRInstanceIDCheckinPreferences *checkinPreferences = + [[FIRInstanceIDCheckinPreferences alloc] initWithDeviceID:deviceAuthID + secretToken:secretToken]; + NSDictionary *preferences = @{ + kFIRInstanceIDDigestStringKey : digest, + kFIRInstanceIDVersionInfoStringKey : versionInfo, + kFIRInstanceIDLastCheckinTimeKey : @(lastCheckinTimestampMillis), + kFIRInstanceIDGServicesDictionaryKey : gservicesData, + kFIRInstanceIDDeviceDataVersionKey : deviceDataVersionInfo, + }; + [checkinPreferences updateWithCheckinPlistContents:preferences]; + if (completion) { + completion(checkinPreferences, nil); + } + }; + // Test block + if (testBlock) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeService005, + @"Test block set, will not hit the server"); + testBlock(request, handler); + return; + } + + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:handler]; + [task resume]; +} + +- (void)stopFetching { + [self.session invalidateAndCancel]; + // The session cannot be reused after invalidation. Dispose it to prevent accident reusing. + self.session = nil; +} + +#pragma mark - Private + +- (NSDictionary *)checkinParametersWithExistingCheckin: + (nullable FIRInstanceIDCheckinPreferences *)checkinPreferences { + NSString *deviceModel = FIRInstanceIDDeviceModel(); + NSString *systemVersion = FIRInstanceIDOperatingSystemVersion(); + NSString *osVersion = [NSString stringWithFormat:@"IOS_%@", systemVersion]; + + // Get locale from GCM if GCM exists else use system API. + NSString *locale = FIRInstanceIDCurrentLocale(); + + NSInteger userNumber = 0; // Multi Profile may change this. + NSInteger userSerialNumber = 0; // Multi Profile may change this + + uint32_t loggingID = arc4random(); + NSString *timeZone = [NSTimeZone localTimeZone].name; + int64_t lastCheckingTimestampMillis = checkinPreferences.lastCheckinTimestampMillis; + + NSDictionary *checkinParameters = @{ + @"checkin" : @{ + @"iosbuild" : @{@"model" : deviceModel, @"os_version" : osVersion}, + @"type" : @(kCheckinType), + @"user_number" : @(userNumber), + @"last_checkin_msec" : @(lastCheckingTimestampMillis), + }, + @"fragment" : @(kFragment), + @"logging_id" : @(loggingID), + @"locale" : locale, + @"version" : @(kCheckinVersion), + @"digest" : checkinPreferences.digest ?: @"", + @"time_zone" : timeZone, + @"user_serial_number" : @(userSerialNumber), + @"id" : @([checkinPreferences.deviceID longLongValue]), + @"security_token" : @([checkinPreferences.secretToken longLongValue]), + }; + + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeService006, @"Checkin parameters: %@", + checkinParameters); + return checkinParameters; +} + ++ (void)setCheckinTestBlock:(FIRInstanceIDURLRequestTestBlock)block { + testBlock = [block copy]; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinStore.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinStore.h new file mode 100644 index 0000000000..5e1b119474 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinStore.h @@ -0,0 +1,108 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class FIRInstanceIDAuthKeychain; +@class FIRInstanceIDBackupExcludedPlist; +@class FIRInstanceIDCheckinPreferences; + +// These values exposed for testing +extern NSString *const kFIRInstanceIDCheckinKeychainService; +extern NSString *const kFIRInstanceIDLegacyCheckinKeychainAccount; +extern NSString *const kFIRInstanceIDLegacyCheckinKeychainService; + +/** + * Checkin preferences backing store. + */ +@interface FIRInstanceIDCheckinStore : NSObject + +/** + * Designated Initializer. Initialize a checkin store with the given backup excluded + * plist filename. + * + * @param checkinFilename The backup excluded plist filename to persist checkin + * preferences. + * + * @param subDirectoryName Sub-directory in standard directory where we write + * InstanceID plist. + * + * @return Store to persist checkin preferences. + */ +- (instancetype)initWithCheckinPlistFileName:(NSString *)checkinFilename + subDirectoryName:(NSString *)subDirectoryName; + +/** + * Initialize a checkin store with the given backup excluded plist and keychain. + * + * @param plist The backup excluded plist to persist checkin preferences. + * @param keychain The keychain used to persist checkin auth preferences. + * + * @return Store to persist checkin preferences. + */ +- (instancetype)initWithCheckinPlist:(FIRInstanceIDBackupExcludedPlist *)plist + keychain:(FIRInstanceIDAuthKeychain *)keychain; + +/** + * Checks whether the backup excluded checkin preferences are present on the disk or not. + * + * @return YES if the backup excluded checkin plist exists on the disks else NO. + */ +- (BOOL)hasCheckinPlist; + +#pragma mark - Save + +/** + * Save the checkin preferences to backing store. + * + * @param preferences Checkin preferences to save. + * @param handler The callback handler which is invoked when the operation is complete, + * with an error if there is any. + */ +- (void)saveCheckinPreferences:(FIRInstanceIDCheckinPreferences *)preferences + handler:(void (^)(NSError *error))handler; + +#pragma mark - Delete + +/** + * Remove the cached checkin preferences. + * + * @param handler The callback handler which is invoked when the operation is complete, + * with an error if there is any. + */ +- (void)removeCheckinPreferencesWithHandler:(void (^)(NSError *error))handler; + +#pragma mark - Get + +/** + * Get the cached device secret. If we cannot access it for some reason we + * return the appropriate error object. + * + * @return The cached checkin preferences if present else nil. + */ +- (FIRInstanceIDCheckinPreferences *)cachedCheckinPreferences; + +/** + * Migrate the checkin item from old service/account to the new one. + * The new account is dynamic as it uses bundle ID. + * This is to ensure checkin is not shared across apps, but still the same + * if app has used GCM before. + * This call should only happen once. + * + */ +- (void)migrateCheckinItemIfNeeded; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinStore.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinStore.m new file mode 100644 index 0000000000..99715a5b8a --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCheckinStore.m @@ -0,0 +1,238 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDCheckinStore.h" + +#import "FIRInstanceIDAuthKeyChain.h" +#import "FIRInstanceIDBackupExcludedPlist.h" +#import "FIRInstanceIDCheckinPreferences+Internal.h" +#import "FIRInstanceIDCheckinPreferences_Private.h" +#import "FIRInstanceIDCheckinService.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDUtilities.h" +#import "FIRInstanceIDVersionUtilities.h" +#import "NSError+FIRInstanceID.h" + +static NSString *const kFIRInstanceIDCheckinKeychainGeneric = @"com.google.iid"; + +NSString *const kFIRInstanceIDCheckinKeychainService = @"com.google.iid.checkin"; +NSString *const kFIRInstanceIDLegacyCheckinKeychainAccount = @"com.google.iid.checkin-account"; +NSString *const kFIRInstanceIDLegacyCheckinKeychainService = @"com.google.iid.checkin-service"; + +// Checkin plist used to have the deviceID and secret stored in them and that's why they +// had 6 items in it. Since the deviceID and secret have been moved to the keychain +// there would only be 4 items. +static const NSInteger kOldCheckinPlistCount = 6; + +@interface FIRInstanceIDCheckinStore () + +@property(nonatomic, readwrite, strong) FIRInstanceIDBackupExcludedPlist *plist; +@property(nonatomic, readwrite, strong) FIRInstanceIDAuthKeychain *keychain; +// Checkin will store items under +// Keychain account: , +// Keychain service: |kFIRInstanceIDCheckinKeychainService| +@property(nonatomic, readonly) NSString *bundleIdentifierForKeychainAccount; + +@end + +@implementation FIRInstanceIDCheckinStore + +- (instancetype)initWithCheckinPlistFileName:(NSString *)checkinFilename + subDirectoryName:(NSString *)subDirectoryName { + FIRInstanceIDBackupExcludedPlist *plist = + [[FIRInstanceIDBackupExcludedPlist alloc] initWithFileName:checkinFilename + subDirectory:subDirectoryName]; + + FIRInstanceIDAuthKeychain *keychain = + [[FIRInstanceIDAuthKeychain alloc] initWithIdentifier:kFIRInstanceIDCheckinKeychainGeneric]; + return [self initWithCheckinPlist:plist keychain:keychain]; +} + +- (instancetype)initWithCheckinPlist:(FIRInstanceIDBackupExcludedPlist *)plist + keychain:(FIRInstanceIDAuthKeychain *)keychain { + self = [super init]; + if (self) { + _plist = plist; + _keychain = keychain; + } + return self; +} + +- (BOOL)hasCheckinPlist { + return [self.plist doesFileExist]; +} + +- (NSString *)bundleIdentifierForKeychainAccount { + static NSString *bundleIdentifier; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + bundleIdentifier = FIRInstanceIDAppIdentifier(); + }); + return bundleIdentifier; +} + +- (void)saveCheckinPreferences:(FIRInstanceIDCheckinPreferences *)preferences + handler:(void (^)(NSError *error))handler { + NSDictionary *checkinPlistContents = [preferences checkinPlistContents]; + NSString *checkinKeychainContent = [preferences checkinKeychainContent]; + + if (![checkinKeychainContent length]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeCheckinStore000, + @"Failed to get checkin keychain content from memory."); + if (handler) { + handler([NSError + errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeRegistrarFailedToCheckIn]); + } + return; + } + if (![checkinPlistContents count]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeCheckinStore001, + @"Failed to get checkin plist contents from memory."); + if (handler) { + handler([NSError + errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeRegistrarFailedToCheckIn]); + } + return; + } + + // Save all other checkin preferences in a plist + NSError *error; + if (![self.plist writeDictionary:checkinPlistContents error:&error]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeCheckinStore003, + @"Failed to save checkin plist contents." + @"Will delete auth credentials"); + [self.keychain removeItemsMatchingService:kFIRInstanceIDCheckinKeychainService + account:self.bundleIdentifierForKeychainAccount + handler:nil]; + if (handler) { + handler(error); + } + return; + } + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeCheckinStoreCheckinPlistSaved, + @"Checkin plist file is saved"); + + // Save the deviceID and secret in the Keychain + if (!preferences.hasPreCachedAuthCredentials) { + NSData *data = [checkinKeychainContent dataUsingEncoding:NSUTF8StringEncoding]; + [self.keychain setData:data + forService:kFIRInstanceIDCheckinKeychainService + accessibility:nil + account:self.bundleIdentifierForKeychainAccount + handler:^(NSError *error) { + if (error) { + if (handler) { + handler(error); + } + return; + } + if (handler) { + handler(nil); + } + }]; + } else { + handler(nil); + } +} + +- (void)removeCheckinPreferencesWithHandler:(void (^)(NSError *error))handler { + // Delete the checkin preferences plist first to avoid delay. + NSError *deletePlistError; + if (![self.plist deleteFile:&deletePlistError]) { + handler(deletePlistError); + return; + } + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeCheckinStoreCheckinPlistDeleted, + @"Deleted checkin plist file."); + // Remove deviceID and secret from Keychain + [self.keychain + removeItemsMatchingService:kFIRInstanceIDCheckinKeychainService + account:self.bundleIdentifierForKeychainAccount + handler:^(NSError *error) { + // Try to remove from old location as well because migration + // is no longer needed. Consider this is either a fresh install + // or an identity wipe. + [self.keychain + removeItemsMatchingService:kFIRInstanceIDLegacyCheckinKeychainService + account:kFIRInstanceIDLegacyCheckinKeychainAccount + handler:nil]; + handler(error); + }]; +} + +- (FIRInstanceIDCheckinPreferences *)cachedCheckinPreferences { + // Query the keychain for deviceID and secret + NSData *item = [self.keychain dataForService:kFIRInstanceIDCheckinKeychainService + account:self.bundleIdentifierForKeychainAccount]; + + // Check info found in keychain + NSString *checkinKeychainContent = [[NSString alloc] initWithData:item + encoding:NSUTF8StringEncoding]; + FIRInstanceIDCheckinPreferences *checkinPreferences = + [FIRInstanceIDCheckinPreferences preferencesFromKeychainContents:checkinKeychainContent]; + + NSDictionary *checkinPlistContents = [self.plist contentAsDictionary]; + + NSString *plistDeviceAuthID = checkinPlistContents[kFIRInstanceIDDeviceAuthIdKey]; + NSString *plistSecretToken = checkinPlistContents[kFIRInstanceIDSecretTokenKey]; + + // If deviceID and secret not found in the keychain verify that we don't have them in the + // checkin preferences plist. + if (![checkinPreferences.deviceID length] && ![checkinPreferences.secretToken length]) { + if ([plistDeviceAuthID length] && [plistSecretToken length]) { + // Couldn't find checkin credentials in keychain but found them in the plist. + checkinPreferences = + [[FIRInstanceIDCheckinPreferences alloc] initWithDeviceID:plistDeviceAuthID + secretToken:plistSecretToken]; + } else { + // Couldn't find checkin credentials in keychain nor plist + return nil; + } + } else if (kOldCheckinPlistCount == checkinPlistContents.count) { + // same check as above but just to be extra sure that we cover all upgrade cases properly. + // TODO(chliangGoogle): Remove this case, after verifying it's not needed + if ([plistDeviceAuthID length] && [plistSecretToken length]) { + checkinPreferences = + [[FIRInstanceIDCheckinPreferences alloc] initWithDeviceID:plistDeviceAuthID + secretToken:plistSecretToken]; + } + } + + [checkinPreferences updateWithCheckinPlistContents:checkinPlistContents]; + return checkinPreferences; +} + +- (void)migrateCheckinItemIfNeeded { + // Check for checkin in the old location, using the legacy keys + // Query the keychain for deviceID and secret + NSData *dataInOldLocation = + [self.keychain dataForService:kFIRInstanceIDLegacyCheckinKeychainService + account:kFIRInstanceIDLegacyCheckinKeychainAccount]; + if (dataInOldLocation) { + // Save to new location + [self.keychain setData:dataInOldLocation + forService:kFIRInstanceIDCheckinKeychainService + accessibility:NULL + account:self.bundleIdentifierForKeychainAccount + handler:nil]; + // Remove from old location + [self.keychain removeItemsMatchingService:kFIRInstanceIDLegacyCheckinKeychainService + account:kFIRInstanceIDLegacyCheckinKeychainAccount + handler:nil]; + } +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCombinedHandler.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCombinedHandler.h new file mode 100644 index 0000000000..dcb5429b95 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCombinedHandler.h @@ -0,0 +1,31 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * A generic class to combine several handler blocks into a single block in a thread-safe manner + */ +@interface FIRInstanceIDCombinedHandler : NSObject + +- (void)addHandler:(void (^)(ResultType _Nullable result, NSError* _Nullable error))handler; +- (void (^)(ResultType _Nullable result, NSError* _Nullable error))combinedHandler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCombinedHandler.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCombinedHandler.m new file mode 100644 index 0000000000..bc6be6c108 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDCombinedHandler.m @@ -0,0 +1,64 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDCombinedHandler.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^FIRInstanseIDHandler)(id _Nullable result, NSError *_Nullable error); + +@interface FIRInstanceIDCombinedHandler () +@property(atomic, readonly, strong) NSMutableArray *handlers; +@end + +NS_ASSUME_NONNULL_END + +@implementation FIRInstanceIDCombinedHandler + +- (instancetype)init { + self = [super init]; + if (self) { + _handlers = [NSMutableArray array]; + } + return self; +} + +- (void)addHandler:(FIRInstanseIDHandler)handler { + if (!handler) { + return; + } + + @synchronized(self) { + [self.handlers addObject:handler]; + } +} + +- (FIRInstanseIDHandler)combinedHandler { + FIRInstanseIDHandler combinedHandler = nil; + + @synchronized(self) { + NSArray *handlers = [self.handlers copy]; + combinedHandler = ^(id result, NSError *error) { + for (FIRInstanseIDHandler handler in handlers) { + handler(result, error); + } + }; + } + + return combinedHandler; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDConstants.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDConstants.h new file mode 100644 index 0000000000..cd2e131551 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDConstants.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#pragma mark - Commands + +/** + * Value included in a structured response or GCM message from IID, indicating + * an identity reset. + */ +FOUNDATION_EXPORT NSString *const kFIRInstanceID_CMD_RST; + +#pragma mark - Notifications + +/// Notification used to deliver GCM messages for InstanceID. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDCheckinFetchedNotification; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDAPNSTokenNotification; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDDefaultGCMTokenNotification; +FOUNDATION_EXPORT NSString *const kFIRInstanceIDDefaultGCMTokenFailNotification; + +FOUNDATION_EXPORT NSString *const kFIRInstanceIDIdentityInvalidatedNotification; + +#pragma mark - Miscellaneous + +/// The scope used to save the IID "*" scope token. This is used for saving the +/// IID auth token that we receive from the server. This feature was never +/// implemented on the server side. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDAllScopeIdentifier; +/// The scope used to save the IID "*" scope token. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDDefaultTokenScope; + +/// Subdirectory in search path directory to store InstanceID preferences. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDSubDirectoryName; + +/// The key for APNS token in options dictionary. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDTokenOptionsAPNSKey; + +/// The key for APNS token environment type in options dictionary. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDTokenOptionsAPNSIsSandboxKey; + +/// The key for GMP AppID sent in registration requests. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDTokenOptionsFirebaseAppIDKey; + +/// The key to enable auto-register by swizzling AppDelegate's methods. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDAppDelegateProxyEnabledInfoPlistKey; + +/// Error code for missing entitlements in Keychain. iOS Keychain error +/// https://forums.developer.apple.com/thread/4743 +FOUNDATION_EXPORT const int kFIRInstanceIDSecMissingEntitlementErrorCode; diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDConstants.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDConstants.m new file mode 100644 index 0000000000..81f4620e0a --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDConstants.m @@ -0,0 +1,46 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDConstants.h" + +// Commands +NSString *const kFIRInstanceID_CMD_RST = @"RST"; + +// NOTIFICATIONS +NSString *const kFIRInstanceIDCheckinFetchedNotification = @"com.google.gcm.notif-checkin-fetched"; +NSString *const kFIRInstanceIDAPNSTokenNotification = @"com.firebase.iid.notif.apns-token"; +NSString *const kFIRInstanceIDDefaultGCMTokenNotification = @"com.firebase.iid.notif.fcm-token"; +NSString *const kFIRInstanceIDDefaultGCMTokenFailNotification = + @"com.firebase.iid.notif.fcm-token-fail"; + +NSString *const kFIRInstanceIDIdentityInvalidatedNotification = @"com.google.iid.identity-invalid"; + +// Miscellaneous +NSString *const kFIRInstanceIDAllScopeIdentifier = @"iid-all"; +NSString *const kFIRInstanceIDDefaultTokenScope = @"*"; +NSString *const kFIRInstanceIDSubDirectoryName = @"Google/FirebaseInstanceID"; + +// Registration Options +NSString *const kFIRInstanceIDTokenOptionsAPNSKey = @"apns_token"; +NSString *const kFIRInstanceIDTokenOptionsAPNSIsSandboxKey = @"apns_sandbox"; +NSString *const kFIRInstanceIDTokenOptionsFirebaseAppIDKey = @"gmp_app_id"; + +NSString *const kFIRInstanceIDAppDelegateProxyEnabledInfoPlistKey = + @"FirebaseAppDelegateProxyEnabled"; + +// iOS Keychain error https://forums.developer.apple.com/thread/4743 +// An undocumented error code hence need to be redeclared. +const int kFIRInstanceIDSecMissingEntitlementErrorCode = -34018; diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDDefines.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDDefines.h new file mode 100644 index 0000000000..ccc25b3d51 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDDefines.h @@ -0,0 +1,47 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FIRInstanceIDLib_FIRInstanceIDDefines_h +#define FIRInstanceIDLib_FIRInstanceIDDefines_h + +#define _FIRInstanceID_VERBOSE_LOGGING 1 + +// Verbose Logging +#if (_FIRInstanceID_VERBOSE_LOGGING) +#define FIRInstanceID_DEV_VERBOSE_LOG(...) NSLog(__VA_ARGS__) +#else +#define FIRInstanceID_DEV_VERBOSE_LOG(...) \ + do { \ + } while (0) +#endif // VERBOSE_LOGGING + +// WEAKIFY & STRONGIFY +// Helper macro. +#define _FIRInstanceID_WEAKNAME(VAR) VAR##_weak_ + +#define FIRInstanceID_WEAKIFY(VAR) __weak __typeof__(VAR) _FIRInstanceID_WEAKNAME(VAR) = (VAR); + +#define FIRInstanceID_STRONGIFY(VAR) \ + _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\"") \ + __strong __typeof__(VAR) VAR = _FIRInstanceID_WEAKNAME(VAR); \ + _Pragma("clang diagnostic pop") + +// Type Conversions (used for NSInteger etc) +#ifndef _FIRInstanceID_L +#define _FIRInstanceID_L(v) (long)(v) +#endif + +#endif diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPair.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPair.h new file mode 100644 index 0000000000..a1aa5e1add --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPair.h @@ -0,0 +1,78 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@interface FIRInstanceIDKeyPair : NSObject + +- (instancetype)init __attribute__(( + unavailable("Use -initWithPrivateKey:publicKey:publicKeyData:privateKeyData: instead."))); +; + +/** + * Initialize a new 2048 bit RSA keypair. This also stores the keypair in the Keychain + * Preferences. + * + * @param publicKey The publicKey stored in Keychain. + * @param privateKey The privateKey stored in Keychain. + * @param publicKeyData The publicKey in NSData format. + * @param privateKeyData The privateKey in NSData format. + * + * @return A new KeyPair instance with the generated public and private key. + */ +- (instancetype)initWithPrivateKey:(SecKeyRef)privateKey + publicKey:(SecKeyRef)publicKey + publicKeyData:(NSData *)publicKeyData + privateKeyData:(NSData *)privateKeyData NS_DESIGNATED_INITIALIZER; + +/** + * The public key in the RSA 20148 bit generated KeyPair. + * + * @return The 2048 bit RSA KeyPair's public key. + */ +@property(nonatomic, readonly, strong) NSData *publicKeyData; + +/** + * The private key in the RSA 20148 bit generated KeyPair. + * + * @return The 2048 bit RSA KeyPair's private key. + */ +@property(nonatomic, readonly, strong) NSData *privateKeyData; + +#pragma mark - Info + +/** + * Checks if the private and public keyPair are valid or not. + * + * @return YES if keypair is valid else NO. + */ +- (BOOL)isValid; + +/** + * The public key in the RSA 2048 bit generated KeyPair. + * + * @return The 2048 bit RSA KeyPair's public key. + */ +- (SecKeyRef)publicKey; + +/** + * The private key in the RSA 2048 bit generated KeyPair. + * + * @return The 2048 bit RSA KeyPair's private key. + */ +- (SecKeyRef)privateKey; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPair.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPair.m new file mode 100644 index 0000000000..52b27c2efa --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPair.m @@ -0,0 +1,73 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDKeyPair.h" + +#import + +#import "FIRInstanceIDKeyPairUtilities.h" +#import "FIRInstanceIDKeychain.h" +#import "FIRInstanceIDLogger.h" +#import "NSError+FIRInstanceID.h" + +@interface FIRInstanceIDKeyPair () { + SecKeyRef _privateKey; + SecKeyRef _publicKey; +} + +@property(nonatomic, readwrite, strong) NSData *publicKeyData; +@property(nonatomic, readwrite, strong) NSData *privateKeyData; +@end + +@implementation FIRInstanceIDKeyPair +- (instancetype)initWithPrivateKey:(SecKeyRef)privateKey + publicKey:(SecKeyRef)publicKey + publicKeyData:(NSData *)publicKeyData + privateKeyData:(NSData *)privateKeyData { + self = [super init]; + if (self) { + _privateKey = privateKey; + _publicKey = publicKey; + _publicKeyData = publicKeyData; + _privateKeyData = privateKeyData; + } + return self; +} + +- (void)dealloc { + if (_privateKey) { + CFRelease(_privateKey); + } + if (_publicKey) { + CFRelease(_publicKey); + } +} + +#pragma mark - Info + +- (BOOL)isValid { + return _privateKey != NULL && _publicKey != NULL; +} + +- (SecKeyRef)publicKey { + return _publicKey; +} + +- (SecKeyRef)privateKey { + return _privateKey; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairStore.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairStore.h new file mode 100644 index 0000000000..02c2896bb0 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairStore.h @@ -0,0 +1,85 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class FIRInstanceIDKeyPair; + +extern NSString *const kFIRInstanceIDKeyPairSubType; + +@class FIRInstanceIDKeyPairStore; + +@interface FIRInstanceIDKeyPairStore : NSObject + +/** + * Invalidates the cached keypairs in the Keychain, if needed. The keypair metadata plist is + * checked for existence. If the plist file does not exist, it is a signal of a new installation, + * and therefore the key pairs are not valid. + * + * Returns YES if keypair has been invalidated. + */ +- (BOOL)invalidateKeyPairsIfNeeded; + +/** + * Delete the cached RSA keypair from Keychain with the given subtype. + * + * @param subtype The subtype used to cache the RSA keypair in Keychain. + * @param handler The callback handler which is invoked when the keypair deletion is + * complete, with an error if there is any. + */ +- (void)deleteSavedKeyPairWithSubtype:(NSString *)subtype handler:(void (^)(NSError *))handler; + +/** + * Delete the plist that caches KeyPair generation timestamps. + * + * @param error The error if any while deleting the plist else nil. + * + * @return YES if the delete was successful else NO. + */ +- (BOOL)removeKeyPairCreationTimePlistWithError:(NSError **)error; + +/** + * Loads a cached KeyPair if it exists in the Keychain else generate a new + * one. If a keyPair already exists in memory this will just return that. This should + * not be called from the main thread since it could potentially lead to creating a new + * RSA-2048 bit keyPair which is an expensive operation. + * + * @param error The error, if any, while accessing the Keychain. + * + * @return A valid 2048 bit RSA key pair. + */ +- (FIRInstanceIDKeyPair *)loadKeyPairWithError:(NSError **)error; + +/** + * Check if the Keychain has any cached keypairs or not. + * + * @return YES if the Keychain has cached RSA KeyPairs else NO. + */ +- (BOOL)hasCachedKeyPairs; + +/** + * Return an identifier for the app instance. The result is a short identifier that can + * be used as a key when storing information about the app. This method will return the same + * ID as long as the application identity remains active. If the identity has been revoked or + * expired the method will generate and return a new identifier. + * + * @param error The error if any while loading the RSA KeyPair. + * + * @return The identifier, as url safe string. + */ +- (NSString *)appIdentityWithError:(NSError *__autoreleasing *)error; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairStore.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairStore.m new file mode 100644 index 0000000000..48a0d7c530 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairStore.m @@ -0,0 +1,525 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDKeyPairStore.h" + +#import "FIRInstanceIDBackupExcludedPlist.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDKeyPair.h" +#import "FIRInstanceIDKeyPairUtilities.h" +#import "FIRInstanceIDKeychain.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDUtilities.h" +#import "NSError+FIRInstanceID.h" + +// NOTE: These values should be in sync with what InstanceID saves in as. +static NSString *const kFIRInstanceIDKeyPairStoreFileName = @"com.google.iid-keypair"; + +static NSString *const kFIRInstanceIDStoreKeyGenerationTime = @"cre"; + +static NSString *const kFIRInstanceIDStoreKeyPrefix = @"com.google.iid-"; +static NSString *const kFIRInstanceIDStoreKeyPublic = @"|P|"; +static NSString *const kFIRInstanceIDStoreKeyPrivate = @"|K|"; +static NSString *const kFIRInstanceIDStoreKeySubtype = @"|S|"; + +static NSString *const kFIRInstanceIDKeyPairPublicTagPrefix = @"com.google.iid.keypair.public-"; +static NSString *const kFIRInstanceIDKeyPairPrivateTagPrefix = @"com.google.iid.keypair.private-"; + +static const int kMaxMissingEntitlementErrorCount = 3; + +NSString *const kFIRInstanceIDKeyPairSubType = @""; + +// Query the key with NSData format +NSData *FIRInstanceIDKeyDataWithTag(NSString *tag) { + if (![tag length]) { + return NULL; + } + NSDictionary *queryKey = FIRInstanceIDKeyPairQuery(tag, YES, YES); + CFTypeRef result = [[FIRInstanceIDKeychain sharedInstance] itemWithQuery:queryKey]; + if (!result) { + return NULL; + } + return (__bridge NSData *)result; +} + +// Query the key given a tag +SecKeyRef FIRInstanceIDCachedKeyRefWithTag(NSString *tag) { + if (!tag.length) { + return NULL; + } + NSDictionary *queryKey = FIRInstanceIDKeyPairQuery(tag, YES, NO); + CFTypeRef result = [[FIRInstanceIDKeychain sharedInstance] itemWithQuery:queryKey]; + return (SecKeyRef)result; +} + +// Check if keypair has been migrated from the legacy to the new version +BOOL FIRInstanceIDHasMigratedKeyPair(NSString *legacyPublicKeyTag, NSString *newPublicKeyTag) { + NSData *oldPublicKeyData = FIRInstanceIDKeyDataWithTag(legacyPublicKeyTag); + NSData *newPublicKeyData = FIRInstanceIDKeyDataWithTag(newPublicKeyTag); + return [oldPublicKeyData isEqualToData:newPublicKeyData]; +} + +// The legacy value is hardcoded to be the same key. This is a potential problem in shared keychain +// environments. +NSString *FIRInstanceIDLegacyPublicTagWithSubtype(NSString *subtype) { + NSString *prefix = kFIRInstanceIDStoreKeyPrefix; + return [NSString stringWithFormat:@"%@%@%@", prefix, subtype, kFIRInstanceIDStoreKeyPublic]; +} + +// The legacy value is hardcoded to be the same key. This is a potential problem in shared keychain +// environments. +NSString *FIRInstanceIDLegacyPrivateTagWithSubtype(NSString *subtype) { + NSString *prefix = kFIRInstanceIDStoreKeyPrefix; + return [NSString stringWithFormat:@"%@%@%@", prefix, subtype, kFIRInstanceIDStoreKeyPrivate]; +} + +NSString *FIRInstanceIDPublicTagWithSubtype(NSString *subtype) { + static NSString *publicTag; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *mainAppBundleID = FIRInstanceIDAppIdentifier(); + publicTag = + [NSString stringWithFormat:@"%@%@", kFIRInstanceIDKeyPairPublicTagPrefix, mainAppBundleID]; + }); + return publicTag; +} + +NSString *FIRInstanceIDPrivateTagWithSubtype(NSString *subtype) { + static NSString *privateTag; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *mainAppBundleID = FIRInstanceIDAppIdentifier(); + privateTag = + [NSString stringWithFormat:@"%@%@", kFIRInstanceIDKeyPairPrivateTagPrefix, mainAppBundleID]; + }); + return privateTag; +} + +NSString *FIRInstanceIDCreationTimeKeyWithSubtype(NSString *subtype) { + return [NSString stringWithFormat:@"%@%@%@", subtype, kFIRInstanceIDStoreKeySubtype, + kFIRInstanceIDStoreKeyGenerationTime]; +} + +@interface FIRInstanceIDKeyPairStore () + +@property(nonatomic, readwrite, strong) FIRInstanceIDBackupExcludedPlist *plist; +@property(atomic, readwrite, strong) FIRInstanceIDKeyPair *keyPair; +@property(nonatomic, readwrite, assign) NSInteger keychainEntitlementsErrorCount; + +@end + +@implementation FIRInstanceIDKeyPairStore + +- (instancetype)init { + self = [super init]; + if (self) { + NSString *fileName = [[self class] keyStoreFileName]; + _plist = + [[FIRInstanceIDBackupExcludedPlist alloc] initWithFileName:fileName + subDirectory:kFIRInstanceIDSubDirectoryName]; + } + return self; +} + +- (BOOL)invalidateKeyPairsIfNeeded { + // Currently keypairs are always invalidated if self.plist is missing. This normally indicates + // a fresh install (or an uninstall/reinstall). In those situations the key pairs should be + // deleted. + // NOTE: Although this class refers to multiple key pairs, with different subtypes, in practice + // only a single subtype is currently supported. (b/64906549) + if (![self.plist doesFileExist]) { + // A fresh install, clear all the key pairs in the key chain. Do not perform migration as all + // key pairs are gone. + [self deleteSavedKeyPairWithSubtype:kFIRInstanceIDKeyPairSubType handler:nil]; + return YES; + } + // Not a fresh install, perform migration at early state. + [self migrateKeyPairCacheIfNeededWithHandler:nil]; + return NO; +} + +- (BOOL)hasCachedKeyPairs { + NSError *error; + if ([self cachedKeyPairWithSubtype:kFIRInstanceIDKeyPairSubType error:&error] == nil) { + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeKeyPairStore000, + @"Failed to get the cached keyPair %@", error); + } + error = nil; + [self removeKeyPairCreationTimePlistWithError:&error]; + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeKeyPairStore001, + @"Failed to remove keyPair creationTime plist %@", error); + } + return NO; + } + return YES; +} + +- (NSString *)appIdentityWithError:(NSError *__autoreleasing *)error { + // Load the keyPair from Keychain (or generate a key pair, if this is the first run of the app). + FIRInstanceIDKeyPair *keyPair = [self loadKeyPairWithError:error]; + if (!keyPair) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairStoreCouldNotLoadKeyPair, + @"Keypair could not be loaded from Keychain. Error: %@", (*error)); + return nil; + } + + if (error) { + *error = nil; + } + NSString *appIdentity = FIRInstanceIDAppIdentity(keyPair); + if (!appIdentity.length) { + if (error) { + *error = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeUnknown]; + } + } + return appIdentity; +} + +- (FIRInstanceIDKeyPair *)loadKeyPairWithError:(NSError **)error { + // In case we call this from different threads we don't want to generate or fetch the + // keyPair multiple times. Once we have a keyPair in the cache it would mostly be used + // from there. + @synchronized(self) { + if ([self.keyPair isValid]) { + return self.keyPair; + } + + if (self.keychainEntitlementsErrorCount >= kMaxMissingEntitlementErrorCount) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeKeyPairStore002, + @"Keychain not accessible, Entitlements missing error (-34018). " + @"Will not check token in cache."); + return nil; + } + + if (!self.keyPair) { + self.keyPair = [self validCachedKeyPairWithSubtype:kFIRInstanceIDKeyPairSubType error:error]; + } + + if ((*error).code == kFIRInstanceIDSecMissingEntitlementErrorCode) { + self.keychainEntitlementsErrorCount++; + } + + if (!self.keyPair) { + self.keyPair = [self generateAndSaveKeyWithSubtype:kFIRInstanceIDKeyPairSubType + creationTime:FIRInstanceIDCurrentTimestampInSeconds() + error:error]; + } + } + return self.keyPair; +} + +// TODO(chliangGoogle: Remove subtype support, as it's not being used. +- (FIRInstanceIDKeyPair *)generateAndSaveKeyWithSubtype:(NSString *)subtype + creationTime:(int64_t)creationTime + error:(NSError **)error { + NSString *publicKeyTag = FIRInstanceIDPublicTagWithSubtype(subtype); + NSString *privateKeyTag = FIRInstanceIDPrivateTagWithSubtype(subtype); + FIRInstanceIDKeyPair *keyPair = + [[FIRInstanceIDKeychain sharedInstance] generateKeyPairWithPrivateTag:privateKeyTag + publicTag:publicKeyTag]; + + if (![keyPair isValid]) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairStore003, + @"Unable to generate keypair."); + return nil; + } + + NSString *creationTimeKey = FIRInstanceIDCreationTimeKeyWithSubtype(subtype); + NSDictionary *keyPairData = @{creationTimeKey : @(creationTime)}; + + if (error) { + *error = nil; + } + NSMutableDictionary *allKeyPairs = [[self.plist contentAsDictionary] mutableCopy]; + if (allKeyPairs.count) { + [allKeyPairs addEntriesFromDictionary:keyPairData]; + } else { + allKeyPairs = [keyPairData mutableCopy]; + } + if (![self.plist writeDictionary:allKeyPairs error:error]) { + [FIRInstanceIDKeyPairStore deleteKeyPairWithPrivateTag:privateKeyTag + publicTag:publicKeyTag + handler:nil]; + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairStore004, + @"Failed to save keypair data to plist %@", error ? *error : @""); + return nil; + } + + return keyPair; +} + +- (FIRInstanceIDKeyPair *)validCachedKeyPairWithSubtype:(NSString *)subtype + error:(NSError **)error { + // On a new install (or if the ID was deleted), the plist will be missing, which should trigger + // a reset of the key pairs in Keychain (if they exist). + NSDictionary *allKeyPairs = [self.plist contentAsDictionary]; + NSString *creationTimeKey = FIRInstanceIDCreationTimeKeyWithSubtype(subtype); + + if (allKeyPairs[creationTimeKey] > 0) { + return [self cachedKeyPairWithSubtype:subtype error:error]; + } else { + // There is no need to reset keypair again here as FIRInstanceID init call is always + // going to be ahead of this call, which already trigger keypair reset if it's new install + FIRInstanceIDErrorCode code = kFIRInstanceIDErrorCodeInvalidKeyPairCreationTime; + if (error) { + *error = [NSError errorWithFIRInstanceIDErrorCode:code]; + } + return nil; + } +} + +- (FIRInstanceIDKeyPair *)cachedKeyPairWithSubtype:(NSString *)subtype + error:(NSError *__autoreleasing *)error { + // base64 encoded keys + NSString *publicKeyTag = FIRInstanceIDPublicTagWithSubtype(subtype); + NSString *privateKeyTag = FIRInstanceIDPrivateTagWithSubtype(subtype); + return [FIRInstanceIDKeyPairStore keyPairForPrivateKeyTag:privateKeyTag + publicKeyTag:publicKeyTag + error:error]; +} + ++ (FIRInstanceIDKeyPair *)keyPairForPrivateKeyTag:(NSString *)privateKeyTag + publicKeyTag:(NSString *)publicKeyTag + error:(NSError *__autoreleasing *)error { + if (![privateKeyTag length] || ![publicKeyTag length]) { + if (error) { + *error = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidKeyPairTags]; + } + return nil; + } + + SecKeyRef privateKeyRef = FIRInstanceIDCachedKeyRefWithTag(privateKeyTag); + SecKeyRef publicKeyRef = FIRInstanceIDCachedKeyRefWithTag(publicKeyTag); + + if (!privateKeyRef || !publicKeyRef) { + if (error) { + *error = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeMissingKeyPair]; + } + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeKeyPair000, + @"No keypair info is found with tag %@", privateKeyTag); + return nil; + } + + NSData *publicKeyData = FIRInstanceIDKeyDataWithTag(publicKeyTag); + NSData *privateKeyData = FIRInstanceIDKeyDataWithTag(privateKeyTag); + + FIRInstanceIDKeyPair *keyPair = [[FIRInstanceIDKeyPair alloc] initWithPrivateKey:privateKeyRef + publicKey:publicKeyRef + publicKeyData:publicKeyData + privateKeyData:privateKeyData]; + return keyPair; +} + +// Migrates from keypair saved under legacy keys (hardcoded value) to dynamic keys (stable, but +// unique for the app's bundle id +- (void)migrateKeyPairCacheIfNeededWithHandler:(void (^)(NSError *error))handler { + // Attempt to load keypair using legacy keys + NSString *legacyPublicKeyTag = + FIRInstanceIDLegacyPublicTagWithSubtype(kFIRInstanceIDKeyPairSubType); + NSString *legacyPrivateKeyTag = + FIRInstanceIDLegacyPrivateTagWithSubtype(kFIRInstanceIDKeyPairSubType); + NSError *error; + FIRInstanceIDKeyPair *keyPair = + [FIRInstanceIDKeyPairStore keyPairForPrivateKeyTag:legacyPrivateKeyTag + publicKeyTag:legacyPublicKeyTag + error:&error]; + if (![keyPair isValid]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeKeyPairNoLegacyKeyPair, + @"There's no legacy keypair so no need to do migration."); + if (handler) { + handler(nil); + } + return; + } + + // Check whether migration already done. + NSString *publicKeyTag = FIRInstanceIDPublicTagWithSubtype(kFIRInstanceIDKeyPairSubType); + if (FIRInstanceIDHasMigratedKeyPair(legacyPublicKeyTag, publicKeyTag)) { + if (handler) { + handler(nil); + } + return; + } + + // Also cache locally since we are sure to use the migrated key pair. + self.keyPair = keyPair; + + // Either new key pair doesn't exist or it's different than legacy key pair, start the migration. + __block NSError *updateKeyRefError; + + NSString *privateKeyTag = FIRInstanceIDPrivateTagWithSubtype(kFIRInstanceIDKeyPairSubType); + [self updateKeyRef:keyPair.publicKey + withTag:publicKeyTag + handler:^(NSError *error) { + if (error) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairMigrationError, + @"Unable to migrate key pair from legacy ones."); + updateKeyRefError = error; + } + }]; + + [self updateKeyRef:keyPair.privateKey + withTag:privateKeyTag + handler:^(NSError *error) { + if (error) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairMigrationError, + @"Unable to migrate key pair from legacy ones."); + updateKeyRefError = error; + } + + if (handler) { + handler(updateKeyRefError); + } + }]; +} + +// Used for migrating from legacy tags to updated tags. The legacy keychain is not deleted for +// backward compatibility. +// TODO(chliangGoogle) Delete the legacy keychain when GCM is fully deprecated. +- (void)updateKeyRef:(SecKeyRef)keyRef + withTag:(NSString *)tag + handler:(void (^)(NSError *error))handler { + NSData *updatedTagData = [tag dataUsingEncoding:NSUTF8StringEncoding]; + + __block NSError *keychainError; + + // Always delete the old keychain before adding a new one to avoid conflicts. + NSDictionary *deleteQuery = @{ + (__bridge id)kSecAttrApplicationTag : updatedTagData, + (__bridge id)kSecClass : (__bridge id)kSecClassKey, + (__bridge id)kSecAttrKeyType : (__bridge id)kSecAttrKeyTypeRSA, + (__bridge id)kSecReturnRef : @(YES), + }; + [[FIRInstanceIDKeychain sharedInstance] removeItemWithQuery:deleteQuery + handler:^(NSError *error) { + if (error) { + keychainError = error; + } + }]; + + NSDictionary *addQuery = @{ + (__bridge id)kSecAttrApplicationTag : updatedTagData, + (__bridge id)kSecClass : (__bridge id)kSecClassKey, + (__bridge id)kSecValueRef : (__bridge id)keyRef, + (__bridge id)kSecAttrAccessible : (__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly, + }; + [[FIRInstanceIDKeychain sharedInstance] addItemWithQuery:addQuery + handler:^(NSError *addError) { + if (addError) { + keychainError = addError; + } + + if (handler) { + handler(keychainError); + } + }]; +} + +- (void)deleteSavedKeyPairWithSubtype:(NSString *)subtype + handler:(void (^)(NSError *error))handler { + NSDictionary *allKeyPairs = [self.plist contentAsDictionary]; + + NSString *publicKeyTag = FIRInstanceIDPublicTagWithSubtype(subtype); + NSString *privateKeyTag = FIRInstanceIDPrivateTagWithSubtype(subtype); + NSString *creationTimeKey = FIRInstanceIDCreationTimeKeyWithSubtype(subtype); + + // remove the creation time + if (allKeyPairs[creationTimeKey] > 0) { + NSMutableDictionary *newKeyPairs = [NSMutableDictionary dictionaryWithDictionary:allKeyPairs]; + [newKeyPairs removeObjectForKey:creationTimeKey]; + + NSError *plistError; + if (![self.plist writeDictionary:newKeyPairs error:&plistError]) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairStore006, + @"Unable to remove keypair creation time from plist %@", plistError); + } + } + + self.keyPair = nil; + + [FIRInstanceIDKeyPairStore + deleteKeyPairWithPrivateTag:privateKeyTag + publicTag:publicKeyTag + handler:^(NSError *error) { + // Delete legacy key pairs from GCM/FCM If they exist. All key pairs + // should be deleted when app is newly installed. + NSString *legacyPublicKeyTag = + FIRInstanceIDLegacyPublicTagWithSubtype(subtype); + NSString *legacyPrivateKeyTag = + FIRInstanceIDLegacyPrivateTagWithSubtype(subtype); + [FIRInstanceIDKeyPairStore + deleteKeyPairWithPrivateTag:legacyPrivateKeyTag + publicTag:legacyPublicKeyTag + handler:nil]; + if (error) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairStore007, + @"Unable to remove RSA keypair, error: %@", + error); + if (handler) { + handler(error); + } + } else { + if (handler) { + handler(nil); + } + } + }]; +} + ++ (void)deleteKeyPairWithPrivateTag:(NSString *)privateTag + publicTag:(NSString *)publicTag + handler:(void (^)(NSError *))handler { + NSDictionary *queryPublicKey = FIRInstanceIDKeyPairQuery(publicTag, NO, NO); + NSDictionary *queryPrivateKey = FIRInstanceIDKeyPairQuery(privateTag, NO, NO); + + __block NSError *keychainError; + + // Always remove public key first because it is the key we generate IID. + [[FIRInstanceIDKeychain sharedInstance] removeItemWithQuery:queryPublicKey + handler:^(NSError *error) { + if (error) { + keychainError = error; + } + }]; + + [[FIRInstanceIDKeychain sharedInstance] removeItemWithQuery:queryPrivateKey + handler:^(NSError *error) { + if (error) { + keychainError = error; + } + + if (handler) { + handler(keychainError); + } + }]; +} + +- (BOOL)removeKeyPairCreationTimePlistWithError:(NSError *__autoreleasing *)error { + if (![self.plist deleteFile:error]) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPairStore008, + @"Unable to delete keypair creation times plist"); + return NO; + } + return YES; +} + ++ (NSString *)keyStoreFileName { + return kFIRInstanceIDKeyPairStoreFileName; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.h new file mode 100644 index 0000000000..b8baa6af2a --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.h @@ -0,0 +1,36 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class FIRInstanceIDKeyPair; + +/** + * A web-safe base64 encoded string with no padding. + * + * @param data The data to encode. + * + * @return A web-safe base 64 encoded string with no padding. + */ +FOUNDATION_EXPORT NSString *FIRInstanceIDWebSafeBase64(NSData *data); + +FOUNDATION_EXPORT NSData *FIRInstanceIDSHA1(NSData *data); + +FOUNDATION_EXPORT NSDictionary *FIRInstanceIDKeyPairQuery(NSString *tag, + BOOL addReturnAttr, + BOOL returnData); + +FOUNDATION_EXPORT NSString *FIRInstanceIDAppIdentity(FIRInstanceIDKeyPair *keyPair); diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.m new file mode 100644 index 0000000000..021d94b682 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.m @@ -0,0 +1,83 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDKeyPairUtilities.h" + +#import + +#import "FIRInstanceIDKeyPair.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDStringEncoding.h" + +NSString *FIRInstanceIDWebSafeBase64(NSData *data) { + // Websafe encoding with no padding. + FIRInstanceIDStringEncoding *encoding = + [FIRInstanceIDStringEncoding rfc4648Base64WebsafeStringEncoding]; + [encoding setDoPad:NO]; + return [encoding encode:data]; +} + +NSData *FIRInstanceIDSHA1(NSData *data) { + unsigned int outputLength = CC_SHA1_DIGEST_LENGTH; + unsigned char output[outputLength]; + unsigned int length = (unsigned int)[data length]; + + CC_SHA1(data.bytes, length, output); + return [NSMutableData dataWithBytes:output length:outputLength]; +} + +NSDictionary *FIRInstanceIDKeyPairQuery(NSString *tag, BOOL addReturnAttr, BOOL returnData) { + NSMutableDictionary *queryKey = [NSMutableDictionary dictionary]; + NSData *tagData = [tag dataUsingEncoding:NSUTF8StringEncoding]; + + queryKey[(__bridge id)kSecClass] = (__bridge id)kSecClassKey; + queryKey[(__bridge id)kSecAttrApplicationTag] = tagData; + queryKey[(__bridge id)kSecAttrKeyType] = (__bridge id)kSecAttrKeyTypeRSA; + if (addReturnAttr) { + if (returnData) { + queryKey[(__bridge id)kSecReturnData] = @(YES); + } else { + queryKey[(__bridge id)kSecReturnRef] = @(YES); + } + } + return queryKey; +} + +NSString *FIRInstanceIDAppIdentity(FIRInstanceIDKeyPair *keyPair) { + // An Instance-ID is a 64 bit (8 byte) integer with a fixed 4-bit header of 0111 (=^ 0x7). + // The variable 60 bits are obtained by truncating the SHA1 of the app-instance's public key. + SecKeyRef publicKeyRef = [keyPair publicKey]; + if (!publicKeyRef) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeKeyPair002, + @"Unable to create a valid asymmetric crypto key"); + return nil; + } + NSData *publicKeyData = keyPair.publicKeyData; + NSData *publicKeySHA1 = FIRInstanceIDSHA1(publicKeyData); + + const uint8_t *bytes = publicKeySHA1.bytes; + NSMutableData *identityData = [NSMutableData dataWithData:publicKeySHA1]; + + uint8_t b0 = bytes[0]; + // Take the first byte and make the initial four 7 by initially making the initial 4 bits 0 + // and then adding 0x70 to it. + b0 = 0x70 + (0xF & b0); + // failsafe should give you back b0 itself + b0 = (b0 & 0xFF); + [identityData replaceBytesInRange:NSMakeRange(0, 1) withBytes:&b0]; + NSData *data = [identityData subdataWithRange:NSMakeRange(0, 8 * sizeof(Byte))]; + return FIRInstanceIDWebSafeBase64(data); +} diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeychain.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeychain.h new file mode 100644 index 0000000000..0bd2a49333 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeychain.h @@ -0,0 +1,76 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +/* The Keychain error domain */ +extern NSString *const kFIRInstanceIDKeychainErrorDomain; + +@class FIRInstanceIDKeyPair; + +/* + * Wrapping the keychain operations in a serialize queue. This is to avoid keychain operation + * blocking main queue. + */ +@interface FIRInstanceIDKeychain : NSObject + +/** + * FIRInstanceIDKeychain. + * + * @return A shared instance of FIRInstanceIDKeychain. + */ ++ (instancetype)sharedInstance; + +/** + * Get keychain items matching the given a query. + * + * @param keychainQuery The keychain query. + * + * @return An CFTypeRef result matching the provided inputs. + */ +- (CFTypeRef)itemWithQuery:(NSDictionary *)keychainQuery; + +/** + * Remove the cached items from the keychain matching the query. + * + * @param keychainQuery The keychain query. + * @param handler The callback handler which is invoked when the remove operation is + * complete, with an error if there is any. + */ +- (void)removeItemWithQuery:(NSDictionary *)keychainQuery handler:(void (^)(NSError *error))handler; + +/** + * Add the item with a given query. + * + * @param keychainQuery The keychain query. + * @param handler The callback handler which is invoked when the add operation is + * complete, with an error if there is any. + */ +- (void)addItemWithQuery:(NSDictionary *)keychainQuery handler:(void (^)(NSError *))handler; + +#pragma mark - Keypair +/** + * Generate a public/private key pair given their tags. + * + * @param privateTag The private tag associated with the private key. + * @param publicTag The public tag associated with the public key. + * + * @return A new FIRInstanceIDKeyPair object. + */ +- (FIRInstanceIDKeyPair *)generateKeyPairWithPrivateTag:(NSString *)privateTag + publicTag:(NSString *)publicTag; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeychain.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeychain.m new file mode 100644 index 0000000000..81c73727e4 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDKeychain.m @@ -0,0 +1,174 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDKeychain.h" + +#import "FIRInstanceIDKeyPair.h" +#import "FIRInstanceIDKeyPairUtilities.h" +#import "FIRInstanceIDLogger.h" + +NSString *const kFIRInstanceIDKeychainErrorDomain = @"com.google.iid"; + +static const NSUInteger kRSA2048KeyPairSize = 2048; + +@interface FIRInstanceIDKeychain () { + dispatch_queue_t _keychainOperationQueue; +} + +@end + +@implementation FIRInstanceIDKeychain + ++ (instancetype)sharedInstance { + static FIRInstanceIDKeychain *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[FIRInstanceIDKeychain alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _keychainOperationQueue = + dispatch_queue_create("com.google.FirebaseInstanceID.Keychain", DISPATCH_QUEUE_SERIAL); + } + return self; +} + +- (CFTypeRef)itemWithQuery:(NSDictionary *)keychainQuery { + __block SecKeyRef keyRef = NULL; + dispatch_sync(_keychainOperationQueue, ^{ + OSStatus status = + SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyRef); + + if (status != noErr) { + if (keyRef) { + CFRelease(keyRef); + } + FIRInstanceIDLoggerDebug(kFIRInstanceIDKeychainReadItemError, + @"Info is not found in Keychain. OSStatus: %d. Keychain query: %@", + (int)status, keychainQuery); + } + }); + return keyRef; +} + +- (void)removeItemWithQuery:(NSDictionary *)keychainQuery + handler:(void (^)(NSError *error))handler { + dispatch_async(_keychainOperationQueue, ^{ + OSStatus status = SecItemDelete((__bridge CFDictionaryRef)keychainQuery); + if (status != noErr) { + FIRInstanceIDLoggerDebug( + kFIRInstanceIDKeychainDeleteItemError, + @"Couldn't delete item from Keychain OSStatus: %d with the keychain query %@", + (int)status, keychainQuery); + } + + if (handler) { + NSError *error; + // When item is not found, it should NOT be considered as an error. The operation should + // continue. + if (status != noErr && status != errSecItemNotFound) { + error = [NSError errorWithDomain:kFIRInstanceIDKeychainErrorDomain + code:status + userInfo:nil]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + } + }); +} + +- (void)addItemWithQuery:(NSDictionary *)keychainQuery handler:(void (^)(NSError *))handler { + dispatch_async(_keychainOperationQueue, ^{ + OSStatus status = SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL); + + if (handler) { + NSError *error; + if (status != noErr) { + FIRInstanceIDLoggerWarning(kFIRInstanceIDKeychainAddItemError, + @"Couldn't add item to Keychain OSStatus: %d", (int)status); + error = [NSError errorWithDomain:kFIRInstanceIDKeychainErrorDomain + code:status + userInfo:nil]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + } + }); +} + +- (FIRInstanceIDKeyPair *)generateKeyPairWithPrivateTag:(NSString *)privateTag + publicTag:(NSString *)publicTag { + // TODO(chliangGoogle) this is called by appInstanceID, which is an internal API used by other + // Firebase teams, will see if we can make it async. + NSData *publicTagData = [publicTag dataUsingEncoding:NSUTF8StringEncoding]; + NSData *privateTagData = [privateTag dataUsingEncoding:NSUTF8StringEncoding]; + + NSDictionary *privateKeyAttr = @{ + (__bridge id)kSecAttrIsPermanent : @YES, + (__bridge id)kSecAttrApplicationTag : privateTagData, + (__bridge id)kSecAttrLabel : @"Firebase InstanceID Key Pair Private Key", + (__bridge id)kSecAttrAccessible : (__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly, + }; + + NSDictionary *publicKeyAttr = @{ + (__bridge id)kSecAttrIsPermanent : @YES, + (__bridge id)kSecAttrApplicationTag : publicTagData, + (__bridge id)kSecAttrLabel : @"Firebase InstanceID Key Pair Public Key", + (__bridge id)kSecAttrAccessible : (__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly, + }; + + NSDictionary *keyPairAttributes = @{ + (__bridge id)kSecAttrKeyType : (__bridge id)kSecAttrKeyTypeRSA, + (__bridge id)kSecAttrLabel : @"Firebase InstanceID Key Pair", + (__bridge id)kSecAttrKeySizeInBits : @(kRSA2048KeyPairSize), + (__bridge id)kSecPrivateKeyAttrs : privateKeyAttr, + (__bridge id)kSecPublicKeyAttrs : publicKeyAttr, + }; + + __block SecKeyRef privateKey = NULL; + __block SecKeyRef publicKey = NULL; + dispatch_sync(_keychainOperationQueue, ^{ + // SecKeyGeneratePair does not allow you to set kSetAttrAccessible on the keys. We need the keys + // to be accessible even when the device is locked (i.e. app is woken up during a push + // notification, or some background refresh). + OSStatus status = + SecKeyGeneratePair((__bridge CFDictionaryRef)keyPairAttributes, &publicKey, &privateKey); + if (status != noErr || publicKey == NULL || privateKey == NULL) { + FIRInstanceIDLoggerWarning(kFIRInstanceIDKeychainCreateKeyPairError, + @"Couldn't create keypair from Keychain OSStatus: %d", + (int)status); + } + }); + // Extract the actual public and private key data from the Keychain + NSDictionary *publicKeyDataQuery = FIRInstanceIDKeyPairQuery(publicTag, YES, YES); + NSDictionary *privateKeyDataQuery = FIRInstanceIDKeyPairQuery(privateTag, YES, YES); + + NSData *publicKeyData = (__bridge NSData *)[self itemWithQuery:publicKeyDataQuery]; + NSData *privateKeyData = (__bridge NSData *)[self itemWithQuery:privateKeyDataQuery]; + + return [[FIRInstanceIDKeyPair alloc] initWithPrivateKey:privateKey + publicKey:publicKey + publicKeyData:publicKeyData + privateKeyData:privateKeyData]; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDLogger.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDLogger.h new file mode 100644 index 0000000000..ab93976ca4 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDLogger.h @@ -0,0 +1,66 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRIMessageCode.h" + +// The convenience macros are only defined if they haven't already been defined. +#ifndef FIRInstanceIDLoggerInfo + +// Convenience macros that log to the shared GTMLogger instance. These macros +// are how users should typically log to FIRInstanceIDLogger. +#define FIRInstanceIDLoggerDebug(code, ...) \ + [FIRInstanceIDSharedLogger() logFuncDebug:__func__ messageCode:code msg:__VA_ARGS__] +#define FIRInstanceIDLoggerInfo(code, ...) \ + [FIRInstanceIDSharedLogger() logFuncInfo:__func__ messageCode:code msg:__VA_ARGS__] +#define FIRInstanceIDLoggerNotice(code, ...) \ + [FIRInstanceIDSharedLogger() logFuncNotice:__func__ messageCode:code msg:__VA_ARGS__] +#define FIRInstanceIDLoggerWarning(code, ...) \ + [FIRInstanceIDSharedLogger() logFuncWarning:__func__ messageCode:code msg:__VA_ARGS__] +#define FIRInstanceIDLoggerError(code, ...) \ + [FIRInstanceIDSharedLogger() logFuncError:__func__ messageCode:code msg:__VA_ARGS__] + +#endif // !defined(FIRInstanceIDLoggerInfo) + +@interface FIRInstanceIDLogger : NSObject + +- (void)logFuncDebug:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... NS_FORMAT_FUNCTION(3, 4); + +- (void)logFuncInfo:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... NS_FORMAT_FUNCTION(3, 4); + +- (void)logFuncNotice:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... NS_FORMAT_FUNCTION(3, 4); + +- (void)logFuncWarning:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... NS_FORMAT_FUNCTION(3, 4); + +- (void)logFuncError:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... NS_FORMAT_FUNCTION(3, 4); + +@end + +/** + * Instantiates and/or returns a shared GTMLogger used exclusively + * for InstanceID log messages. + * @return the shared GTMLogger instance + */ +FIRInstanceIDLogger *FIRInstanceIDSharedLogger(void); diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDLogger.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDLogger.m new file mode 100644 index 0000000000..2600d3ba8f --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDLogger.m @@ -0,0 +1,92 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDLogger.h" + +#import + +// Re-definition of FIRLogger service, as it is not included in :FIRAppHeaders target +NSString *const kFIRInstanceIDLoggerService = @"[Firebase/InstanceID]"; + +@implementation FIRInstanceIDLogger + +#pragma mark - Log Helpers + ++ (NSString *)formatMessageCode:(FIRInstanceIDMessageCode)messageCode { + return [NSString stringWithFormat:@"I-IID%06ld", (long)messageCode]; +} + +- (void)logFuncDebug:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + FIRLogBasic(FIRLoggerLevelDebug, kFIRInstanceIDLoggerService, + [FIRInstanceIDLogger formatMessageCode:messageCode], fmt, args); + va_end(args); +} + +- (void)logFuncInfo:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + FIRLogBasic(FIRLoggerLevelInfo, kFIRInstanceIDLoggerService, + [FIRInstanceIDLogger formatMessageCode:messageCode], fmt, args); + va_end(args); +} + +- (void)logFuncNotice:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + FIRLogBasic(FIRLoggerLevelNotice, kFIRInstanceIDLoggerService, + [FIRInstanceIDLogger formatMessageCode:messageCode], fmt, args); + va_end(args); +} + +- (void)logFuncWarning:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + FIRLogBasic(FIRLoggerLevelWarning, kFIRInstanceIDLoggerService, + [FIRInstanceIDLogger formatMessageCode:messageCode], fmt, args); + va_end(args); +} + +- (void)logFuncError:(const char *)func + messageCode:(FIRInstanceIDMessageCode)messageCode + msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + FIRLogBasic(FIRLoggerLevelError, kFIRInstanceIDLoggerService, + [FIRInstanceIDLogger formatMessageCode:messageCode], fmt, args); + va_end(args); +} + +@end + +FIRInstanceIDLogger *FIRInstanceIDSharedLogger() { + static dispatch_once_t onceToken; + static FIRInstanceIDLogger *logger; + dispatch_once(&onceToken, ^{ + logger = [[FIRInstanceIDLogger alloc] init]; + }); + + return logger; +} diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStore.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStore.h new file mode 100644 index 0000000000..d1f2634870 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStore.h @@ -0,0 +1,183 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class FIRInstanceIDBackupExcludedPlist; +@class FIRInstanceIDCheckinPreferences; +@class FIRInstanceIDCheckinStore; +@class FIRInstanceIDTokenInfo; +@class FIRInstanceIDTokenStore; + +@class FIRInstanceIDStore; +@protocol FIRInstanceIDStoreDelegate + +/** + * This is called when the store has decided to invalide its tokens associated with the + * previous checkin credentials. After deleting the tokens locally, it calls this method + * to notify the delegate of the change. If possible, the delegate should use this time + * to request the invalidation of the tokens on the server as well. + */ +- (void)store:(FIRInstanceIDStore *)store + didDeleteFCMScopedTokensForCheckin:(FIRInstanceIDCheckinPreferences *)checkin; + +@end + +/** + * Used to persist the InstanceID tokens. This is also used to cache the Checkin + * credentials. The store also checks for stale entries in the store and + * let's us know if things in the store are stale or not. It does not however + * acts on stale entries in anyway. + */ +@interface FIRInstanceIDStore : NSObject + +/** + * The delegate set in the initializer which is notified of changes in the store. + */ +@property(nonatomic, readonly, weak) NSObject *delegate; + +- (instancetype)init __attribute__((unavailable("Use initWithDelegate: instead."))); + +/** + * Initialize a default store to persist InstanceID tokens and options. + * + * @param delegate The delegate with which to be notified of changes in the store. + * @return Store to persist InstanceID tokens. + */ +- (instancetype)initWithDelegate:(NSObject *)delegate; + +/** + * Initialize a store with the token store used to persist tokens, and a checkin store. + * Used for testing. + * + * @param checkinStore Persistent store that persists checkin preferences. + * @param tokenStore Persistent store that persists tokens. + * + * @return Store to persist InstanceID tokens and options. + */ +- (instancetype)initWithCheckinStore:(FIRInstanceIDCheckinStore *)checkinStore + tokenStore:(FIRInstanceIDTokenStore *)tokenStore + delegate:(NSObject *)delegate + NS_DESIGNATED_INITIALIZER; + +#pragma mark - Save +/** + * Save the instanceID token info to the store. + * + * @param tokenInfo The token info to store. + * @param handler The callback handler which is invoked when the operation is complete, + * with an error if there is any. + */ +- (void)saveTokenInfo:(FIRInstanceIDTokenInfo *)tokenInfo handler:(void (^)(NSError *))handler; + +#pragma mark - Get + +/** + * Get the cached token info. + * + * @param authorizedEntity The authorized entity for which we want the token. + * @param scope The scope for which we want the token. + * + * @return The cached token info if any for the given authorizedEntity and scope else + * returns nil. + */ +- (nullable FIRInstanceIDTokenInfo *)tokenInfoWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope; +/** + * Return all cached token infos from the Keychain. + * + * @return The cached token infos, if any, that are stored in the Keychain. + */ +- (NSArray *)cachedTokenInfos; + +#pragma mark - Delete + +/** + * Remove the cached token for a given authorizedEntity and scope. If the token was never + * cached or deleted from the cache before this is a no-op. + * + * @param authorizedEntity The authorizedEntity for the cached token. + * @param scope The scope for the cached token + */ +- (void)removeCachedTokenWithAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope; + +/** + * Removes all cached tokens from the persistent store. In case deleting the cached tokens + * fails we try to delete the backup excluded plist that stores the tokens. + * + * @param handler The callback handler which is invoked when the operation is complete, + * with an error if there is any. + * + */ +- (void)removeAllCachedTokensWithHandler:(nullable void (^)(NSError *error))handler; + +#pragma mark - Persisting Checkin Preferences + +/** + * Save the checkin preferences + * + * @param preferences Checkin preferences to save. + * @param handler The callback handler which is invoked when the operation is complete, + * with an error if there is any. + */ +- (void)saveCheckinPreferences:(FIRInstanceIDCheckinPreferences *)preferences + handler:(nullable void (^)(NSError *error))handler; + +/** + * Return the cached checkin preferences. + * + * @return Checkin preferences. + */ +- (FIRInstanceIDCheckinPreferences *)cachedCheckinPreferences; + +/** + * Remove the cached checkin preferences from the store. + * + * @param handler The callback handler which is invoked when the operation is complete, + * with an error if there is any. + */ +- (void)removeCheckinPreferencesWithHandler:(nullable void (^)(NSError *error))handler; + +#pragma mark - Standard Directory sub-directory + +/** + * Check if supported directory has InstanceID subdirectory + * + * @return YES if the Application Support directory has InstanceID subdirectory else NO. + */ ++ (BOOL)hasSubDirectory:(NSString *)subDirectoryName; + +/** + * Create InstanceID subdirectory in Application support directory. + * + * @return YES if the subdirectory was created successfully else NO. + */ ++ (BOOL)createSubDirectory:(NSString *)subDirectoryName; + +/** + * Removes Application Support subdirectory for InstanceID. + * + * @param error The error object if any while trying to delete the sub-directory. + * + * @return YES if the deletion was successful else NO. + */ ++ (BOOL)removeSubDirectory:(NSString *)subDirectoryName error:(NSError **)error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStore.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStore.m new file mode 100644 index 0000000000..1c7a0d0ac7 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStore.m @@ -0,0 +1,242 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDStore.h" + +#import "FIRInstanceIDCheckinPreferences.h" +#import "FIRInstanceIDCheckinStore.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDTokenStore.h" +#import "FIRInstanceIDVersionUtilities.h" + +// NOTE: These values should be in sync with what InstanceID saves in as. +static NSString *const kCheckinFileName = @"g-checkin"; + +// APNS token (use the old key value i.e. with prefix GMS) +static NSString *const kFIRInstanceIDLibraryVersion = @"GMSInstanceID-version"; + +@interface FIRInstanceIDStore () + +@property(nonatomic, readwrite, strong) FIRInstanceIDCheckinStore *checkinStore; +@property(nonatomic, readwrite, strong) FIRInstanceIDTokenStore *tokenStore; + +@end + +@implementation FIRInstanceIDStore + +- (instancetype)initWithDelegate:(NSObject *)delegate { + FIRInstanceIDCheckinStore *checkinStore = [[FIRInstanceIDCheckinStore alloc] + initWithCheckinPlistFileName:kCheckinFileName + subDirectoryName:kFIRInstanceIDSubDirectoryName]; + + FIRInstanceIDTokenStore *tokenStore = [FIRInstanceIDTokenStore defaultStore]; + + return [self initWithCheckinStore:checkinStore tokenStore:tokenStore delegate:delegate]; +} + +- (instancetype)initWithCheckinStore:(FIRInstanceIDCheckinStore *)checkinStore + tokenStore:(FIRInstanceIDTokenStore *)tokenStore + delegate:(NSObject *)delegate { + self = [super init]; + if (self) { + _checkinStore = checkinStore; + _tokenStore = tokenStore; + _delegate = delegate; + [self resetCredentialsIfNeeded]; + } + return self; +} + +#pragma mark - Upgrades + ++ (BOOL)hasSubDirectory:(NSString *)subDirectoryName { + NSString *subDirectoryPath = [self pathForSupportSubDirectory:subDirectoryName]; + BOOL isDirectory; + if (![[NSFileManager defaultManager] fileExistsAtPath:subDirectoryPath + isDirectory:&isDirectory]) { + return NO; + } else if (!isDirectory) { + return NO; + } + return YES; +} + ++ (NSSearchPathDirectory)supportedDirectory { +#if TARGET_OS_TV + return NSCachesDirectory; +#else + return NSApplicationSupportDirectory; +#endif +} + ++ (NSString *)pathForSupportSubDirectory:(NSString *)subDirectoryName { + NSArray *directoryPaths = + NSSearchPathForDirectoriesInDomains([self supportedDirectory], NSUserDomainMask, YES); + NSString *dirPath = directoryPaths.lastObject; + NSArray *components = @[ dirPath, subDirectoryName ]; + return [NSString pathWithComponents:components]; +} + ++ (BOOL)createSubDirectory:(NSString *)subDirectoryName { + NSString *subDirectoryPath = [self pathForSupportSubDirectory:subDirectoryName]; + BOOL hasSubDirectory; + + if (![[NSFileManager defaultManager] fileExistsAtPath:subDirectoryPath + isDirectory:&hasSubDirectory]) { + NSError *error; + [[NSFileManager defaultManager] createDirectoryAtPath:subDirectoryPath + withIntermediateDirectories:YES + attributes:nil + error:&error]; + if (error) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeStore000, + @"Cannot create directory %@, error: %@", subDirectoryPath, error); + return NO; + } + } else { + if (!hasSubDirectory) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeStore001, + @"Found file instead of directory at %@", subDirectoryPath); + return NO; + } + } + return YES; +} + ++ (BOOL)removeSubDirectory:(NSString *)subDirectoryName error:(NSError **)error { + if ([self hasSubDirectory:subDirectoryName]) { + NSString *subDirectoryPath = [self pathForSupportSubDirectory:subDirectoryName]; + BOOL isDirectory; + if ([[NSFileManager defaultManager] fileExistsAtPath:subDirectoryPath + isDirectory:&isDirectory]) { + return [[NSFileManager defaultManager] removeItemAtPath:subDirectoryPath error:error]; + } + } + return YES; +} + +/** + * Reset the keychain preferences if the app had been deleted earlier and then reinstalled. + * Keychain preferences are not cleared in the above scenario so explicitly clear them. + * + * In case of an iCloud backup and restore the Keychain preferences should already be empty + * since the Keychain items are marked with `*BackupThisDeviceOnly`. + */ +- (void)resetCredentialsIfNeeded { + BOOL checkinPlistExists = [self.checkinStore hasCheckinPlist]; + // Checkin info existed in backup excluded plist. Should not be a fresh install. + if (checkinPlistExists) { + // FCM user can still have the old version of checkin, migration should only happen once. + [self.checkinStore migrateCheckinItemIfNeeded]; + return; + } + + // reset checkin in keychain if a fresh install. + // set the old checkin preferences to unregister pre-registered tokens + FIRInstanceIDCheckinPreferences *oldCheckinPreferences = + [self.checkinStore cachedCheckinPreferences]; + + if (oldCheckinPreferences) { + [self.checkinStore removeCheckinPreferencesWithHandler:^(NSError *error) { + if (!error) { + FIRInstanceIDLoggerDebug( + kFIRInstanceIDMessageCodeStore002, + @"Removed cached checkin preferences from Keychain because this is a fresh install."); + } else { + FIRInstanceIDLoggerError( + kFIRInstanceIDMessageCodeStore003, + @"Couldn't remove cached checkin preferences for a fresh install. Error: %@", error); + } + if (oldCheckinPreferences.deviceID.length && oldCheckinPreferences.secretToken.length) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeStore006, + @"App reset detected. Will delete server registrations."); + // We don't really need to delete old FCM tokens created via IID auth tokens since + // those tokens are already hashed by APNS token as the has so creating a new + // token should automatically delete the old-token. + [self.delegate store:self didDeleteFCMScopedTokensForCheckin:oldCheckinPreferences]; + } else { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeStore009, + @"App reset detected but no valid checkin auth preferences found." + @" Will not delete server registrations."); + } + }]; + } +} + +#pragma mark - Get + +- (FIRInstanceIDTokenInfo *)tokenInfoWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope { + // TODO(chliangGoogle): If we don't have the token plist we should delete all the tokens from + // the keychain. This is because not having the plist signifies a backup and restore operation. + // In case the keychain has any tokens these would now be stale and therefore should be + // deleted. + if (![authorizedEntity length] || ![scope length]) { + return nil; + } + FIRInstanceIDTokenInfo *info = [self.tokenStore tokenInfoWithAuthorizedEntity:authorizedEntity + scope:scope]; + return info; +} + +- (NSArray *)cachedTokenInfos { + return [self.tokenStore cachedTokenInfos]; +} + +#pragma mark - Save + +- (void)saveTokenInfo:(FIRInstanceIDTokenInfo *)tokenInfo + handler:(void (^)(NSError *error))handler { + [self.tokenStore saveTokenInfo:tokenInfo handler:handler]; +} + +#pragma mark - Delete + +- (void)removeCachedTokenWithAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope { + if (![authorizedEntity length] || ![scope length]) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeStore012, + @"Will not delete token with invalid entity: %@, scope: %@", + authorizedEntity, scope); + return; + } + [self.tokenStore removeTokenWithAuthorizedEntity:authorizedEntity scope:scope]; +} + +- (void)removeAllCachedTokensWithHandler:(void (^)(NSError *error))handler { + [self.tokenStore removeAllTokensWithHandler:handler]; +} + +#pragma mark - FIRInstanceIDCheckinCache protocol + +- (void)saveCheckinPreferences:(FIRInstanceIDCheckinPreferences *)preferences + handler:(void (^)(NSError *error))handler { + [self.checkinStore saveCheckinPreferences:preferences handler:handler]; +} + +- (FIRInstanceIDCheckinPreferences *)cachedCheckinPreferences { + return [self.checkinStore cachedCheckinPreferences]; +} + +- (void)removeCheckinPreferencesWithHandler:(void (^)(NSError *))handler { + [self.checkinStore removeCheckinPreferencesWithHandler:^(NSError *error) { + if (handler) { + handler(error); + } + }]; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStringEncoding.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStringEncoding.h new file mode 100644 index 0000000000..8f2f369739 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStringEncoding.h @@ -0,0 +1,66 @@ +// +// GTMStringEncoding.h +// +// Copyright 2010 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +// This is a copy of GTMStringEncoding. FIRInstanceID wants to avoid +// a CocoaPods GTM dependency. Hence we use our own version of StringEncoding. + +#import + +// A generic class for arbitrary base-2 to 128 string encoding and decoding. +@interface FIRInstanceIDStringEncoding : NSObject { + @private + NSData *charMapData_; + char *charMap_; + int reverseCharMap_[128]; + int shift_; + unsigned int mask_; + BOOL doPad_; + char paddingChar_; + int padLen_; +} + ++ (id)rfc4648Base64WebsafeStringEncoding; + +// Create a new, autoreleased GTMStringEncoding object with the given string, +// as described below. ++ (id)stringEncodingWithString:(NSString *)string; + +// Initialize a new GTMStringEncoding object with the string. +// +// The length of the string must be a power of 2, at least 2 and at most 128. +// Only 7-bit ASCII characters are permitted in the string. +// +// These characters are the canonical set emitted during encoding. +// If the characters have alternatives (e.g. case, easily transposed) then use +// addDecodeSynonyms: to configure them. +- (id)initWithString:(NSString *)string; + +// Indicates whether padding is performed during encoding. +- (BOOL)doPad; +- (void)setDoPad:(BOOL)doPad; + +// Sets the padding character to use during encoding. +- (void)setPaddingChar:(char)c; + +// Encode a raw binary buffer to a 7-bit ASCII string. +- (NSString *)encode:(NSData *)data; + +// Decode a 7-bit ASCII string to a raw binary buffer. +- (NSData *)decode:(NSString *)string; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStringEncoding.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStringEncoding.m new file mode 100644 index 0000000000..e1ab26966d --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDStringEncoding.m @@ -0,0 +1,208 @@ +// +// FIRInstanceIDStringEncoding.m +// +// Copyright 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +// This is a copy of GTMStringEncoding. FIRInstanceID wants to avoid +// a CocoaPods GTM dependency. Hence we use our own version of StringEncoding. + +#import "FIRInstanceIDStringEncoding.h" + +#import "FIRInstanceIDLogger.h" + +enum { kUnknownChar = -1, kPaddingChar = -2, kIgnoreChar = -3 }; + +@implementation FIRInstanceIDStringEncoding + ++ (id)rfc4648Base64WebsafeStringEncoding { + FIRInstanceIDStringEncoding *ret = [self + stringEncodingWithString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"]; + + [ret setPaddingChar:'=']; + [ret setDoPad:YES]; + return ret; +} + +static inline int lcm(int a, int b) { + for (int aa = a, bb = b;;) { + if (aa == bb) + return aa; + else if (aa < bb) + aa += a; + else + bb += b; + } +} + ++ (id)stringEncodingWithString:(NSString *)string { + return [[FIRInstanceIDStringEncoding alloc] initWithString:string]; +} + +- (id)initWithString:(NSString *)string { + if ((self = [super init])) { + charMapData_ = [string dataUsingEncoding:NSASCIIStringEncoding]; + if (!charMapData_) { + // Unable to convert string to ASCII + return nil; + } + charMap_ = (char *)[charMapData_ bytes]; + NSUInteger length = [charMapData_ length]; + if (length < 2 || length > 128 || length & (length - 1)) { + // Length not a power of 2 between 2 and 128 + return nil; + } + + memset(reverseCharMap_, kUnknownChar, sizeof(reverseCharMap_)); + for (unsigned int i = 0; i < length; i++) { + if (reverseCharMap_[(int)charMap_[i]] != kUnknownChar) { + // Duplicate character at |i| + return nil; + } + reverseCharMap_[(int)charMap_[i]] = i; + } + + for (NSUInteger i = 1; i < length; i <<= 1) shift_++; + mask_ = (1 << shift_) - 1; + padLen_ = lcm(8, shift_) / shift_; + } + return self; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"", 1 << shift_, charMapData_]; +} + +- (BOOL)doPad { + return doPad_; +} + +- (void)setDoPad:(BOOL)doPad { + doPad_ = doPad; +} + +- (void)setPaddingChar:(char)c { + paddingChar_ = c; + reverseCharMap_[(int)c] = kPaddingChar; +} + +- (NSString *)encode:(NSData *)inData { + NSUInteger inLen = [inData length]; + if (inLen <= 0) { + // Empty input + return @""; + } + unsigned char *inBuf = (unsigned char *)[inData bytes]; + NSUInteger inPos = 0; + + NSUInteger outLen = (inLen * 8 + shift_ - 1) / shift_; + if (doPad_) { + outLen = ((outLen + padLen_ - 1) / padLen_) * padLen_; + } + NSMutableData *outData = [NSMutableData dataWithLength:outLen]; + unsigned char *outBuf = (unsigned char *)[outData mutableBytes]; + NSUInteger outPos = 0; + + unsigned int buffer = inBuf[inPos++]; + int bitsLeft = 8; + while (bitsLeft > 0 || inPos < inLen) { + if (bitsLeft < shift_) { + if (inPos < inLen) { + buffer <<= 8; + buffer |= (inBuf[inPos++] & 0xff); + bitsLeft += 8; + } else { + int pad = shift_ - bitsLeft; + buffer <<= pad; + bitsLeft += pad; + } + } + unsigned int idx = (buffer >> (bitsLeft - shift_)) & mask_; + bitsLeft -= shift_; + outBuf[outPos++] = charMap_[idx]; + } + + if (doPad_) { + while (outPos < outLen) outBuf[outPos++] = paddingChar_; + } + + if (outPos != outLen) { + FIRInstanceIDLoggerError(kFIRInstanceIDStringEncodingBufferUnderflow, + @"Underflowed output buffer"); + return nil; + } + [outData setLength:outPos]; + + return [[NSString alloc] initWithData:outData encoding:NSASCIIStringEncoding]; +} + +- (NSData *)decode:(NSString *)inString { + char *inBuf = (char *)[inString cStringUsingEncoding:NSASCIIStringEncoding]; + if (!inBuf) { + // Unable to convert buffer to ASCII + return nil; + } + NSUInteger inLen = strlen(inBuf); + + NSUInteger outLen = inLen * shift_ / 8; + NSMutableData *outData = [NSMutableData dataWithLength:outLen]; + unsigned char *outBuf = (unsigned char *)[outData mutableBytes]; + NSUInteger outPos = 0; + + int buffer = 0; + int bitsLeft = 0; + BOOL expectPad = NO; + for (NSUInteger i = 0; i < inLen; i++) { + int val = reverseCharMap_[(int)inBuf[i]]; + switch (val) { + case kIgnoreChar: + break; + case kPaddingChar: + expectPad = YES; + break; + case kUnknownChar: + // Unexpected data at input pos |i| + return nil; + default: + if (expectPad) { + // Expected further padding characters + return nil; + } + buffer <<= shift_; + buffer |= val & mask_; + bitsLeft += shift_; + if (bitsLeft >= 8) { + outBuf[outPos++] = (unsigned char)(buffer >> (bitsLeft - 8)); + bitsLeft -= 8; + } + break; + } + } + + if (bitsLeft && buffer & ((1 << bitsLeft) - 1)) { + // Incomplete trailing data + return nil; + } + + // Shorten buffer if needed due to padding chars + if (outPos > outLen) { + FIRInstanceIDLoggerError(kFIRInstanceIDStringEncodingBufferOverflow, @"Overflowed buffer"); + } + [outData setLength:outPos]; + + return outData; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.h new file mode 100644 index 0000000000..58368d0417 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.h @@ -0,0 +1,31 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenOperation.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FIRInstanceIDTokenDeleteOperation : FIRInstanceIDTokenOperation + +- (instancetype)initWithAuthorizedEntity:(nullable NSString *)authorizedEntity + scope:(nullable NSString *)scope + checkinPreferences:(FIRInstanceIDCheckinPreferences *)checkinPreferences + keyPair:(nullable FIRInstanceIDKeyPair *)keyPair + action:(FIRInstanceIDTokenAction)action; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.m new file mode 100644 index 0000000000..365f321bd5 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.m @@ -0,0 +1,120 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenDeleteOperation.h" + +#import "FIRInstanceIDCheckinPreferences.h" +#import "FIRInstanceIDDefines.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDTokenOperation+Private.h" +#import "FIRInstanceIDURLQueryItem.h" +#import "FIRInstanceIDUtilities.h" +#import "NSError+FIRInstanceID.h" + +@implementation FIRInstanceIDTokenDeleteOperation + +- (instancetype)initWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + checkinPreferences:(FIRInstanceIDCheckinPreferences *)checkinPreferences + keyPair:(FIRInstanceIDKeyPair *)keyPair + action:(FIRInstanceIDTokenAction)action { + self = [super initWithAction:action + forAuthorizedEntity:authorizedEntity + scope:scope + options:nil + checkinPreferences:checkinPreferences + keyPair:keyPair]; + if (self) { + } + return self; +} + +- (void)performTokenOperation { + NSString *authHeader = + [FIRInstanceIDTokenOperation HTTPAuthHeaderFromCheckin:self.checkinPreferences]; + NSMutableURLRequest *request = [FIRInstanceIDTokenOperation requestWithAuthHeader:authHeader]; + + // Build form-encoded body + NSString *deviceAuthID = self.checkinPreferences.deviceID; + NSMutableArray *queryItems = + [FIRInstanceIDTokenOperation standardQueryItemsWithDeviceID:deviceAuthID scope:self.scope]; + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"delete" value:@"true"]]; + if (self.action == FIRInstanceIDTokenActionDeleteTokenAndIID) { + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"iid-operation" + value:@"delete"]]; + } + if (self.authorizedEntity) { + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"sender" + value:self.authorizedEntity]]; + } + // Typically we include our public key-signed url items, but in some cases (like deleting all FCM + // tokens), we don't. + if (self.keyPair != nil) { + [queryItems addObjectsFromArray:[self queryItemsWithKeyPair:self.keyPair]]; + } + + NSString *content = FIRInstanceIDQueryFromQueryItems(queryItems); + request.HTTPBody = [content dataUsingEncoding:NSUTF8StringEncoding]; + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenDeleteOperationFetchRequest, + @"Unregister request to %@ content: %@", FIRInstanceIDRegisterServer(), + content); + + FIRInstanceID_WEAKIFY(self); + void (^requestHandler)(NSData *, NSURLResponse *, NSError *) = + ^(NSData *data, NSURLResponse *response, NSError *error) { + FIRInstanceID_STRONGIFY(self); + [self handleResponseWithData:data response:response error:error]; + }; + + // Test block + if (self.testBlock) { + self.testBlock(request, requestHandler); + return; + } + + NSURLSession *session = [FIRInstanceIDTokenOperation sharedURLSession]; + self.dataTask = [session dataTaskWithRequest:request completionHandler:requestHandler]; + [self.dataTask resume]; +} + +- (void)handleResponseWithData:(NSData *)data + response:(NSURLResponse *)response + error:(NSError *)error { + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenDeleteOperationRequestError, + @"Device unregister HTTP fetch error. Error code: %ld", + _FIRInstanceID_L(error.code)); + [self finishWithResult:FIRInstanceIDTokenOperationError token:nil error:error]; + return; + } + + NSString *dataResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + if (dataResponse.length == 0) { + NSError *error = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeUnknown]; + [self finishWithResult:FIRInstanceIDTokenOperationError token:nil error:error]; + return; + } + + if (![dataResponse hasPrefix:@"deleted="] && ![dataResponse hasPrefix:@"token="]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenDeleteOperationBadResponse, + @"Invalid unregister response %@", response); + NSError *error = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeUnknown]; + [self finishWithResult:FIRInstanceIDTokenOperationError token:nil error:error]; + return; + } + [self finishWithResult:FIRInstanceIDTokenOperationSucceeded token:nil error:nil]; +} +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.h new file mode 100644 index 0000000000..87be60fc06 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.h @@ -0,0 +1,32 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenOperation.h" + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXPORT NSString *const kFIRInstanceIDFirebaseUserAgentKey; + +@interface FIRInstanceIDTokenFetchOperation : FIRInstanceIDTokenOperation + +- (instancetype)initWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + options:(nullable NSDictionary *)options + checkinPreferences:(FIRInstanceIDCheckinPreferences *)checkinPreferences + keyPair:(FIRInstanceIDKeyPair *)keyPair; + +@end +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.m new file mode 100644 index 0000000000..0689b3fba6 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.m @@ -0,0 +1,204 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenFetchOperation.h" + +#import "FIRInstanceIDCheckinPreferences.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDDefines.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDTokenOperation+Private.h" +#import "FIRInstanceIDURLQueryItem.h" +#import "FIRInstanceIDUtilities.h" +#import "NSError+FIRInstanceID.h" + +#import + +// We can have a static int since this error should theoretically only +// happen once (for the first time). If it repeats there is something +// else that is wrong. +static int phoneRegistrationErrorRetryCount = 0; +static const int kMaxPhoneRegistrationErrorRetryCount = 10; +NSString *const kFIRInstanceIDFirebaseUserAgentKey = @"X-firebase-client"; + +@implementation FIRInstanceIDTokenFetchOperation + +- (instancetype)initWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + options:(nullable NSDictionary *)options + checkinPreferences:(FIRInstanceIDCheckinPreferences *)checkinPreferences + keyPair:(FIRInstanceIDKeyPair *)keyPair { + self = [super initWithAction:FIRInstanceIDTokenActionFetch + forAuthorizedEntity:authorizedEntity + scope:scope + options:options + checkinPreferences:checkinPreferences + keyPair:keyPair]; + if (self) { + } + return self; +} + +- (void)performTokenOperation { + NSString *authHeader = + [FIRInstanceIDTokenOperation HTTPAuthHeaderFromCheckin:self.checkinPreferences]; + NSMutableURLRequest *request = [[self class] requestWithAuthHeader:authHeader]; + NSString *checkinVersionInfo = self.checkinPreferences.versionInfo; + [request setValue:checkinVersionInfo forHTTPHeaderField:@"info"]; + [request setValue:[FIRApp firebaseUserAgent] + forHTTPHeaderField:kFIRInstanceIDFirebaseUserAgentKey]; + + // Build form-encoded body + NSString *deviceAuthID = self.checkinPreferences.deviceID; + NSMutableArray *queryItems = + [[self class] standardQueryItemsWithDeviceID:deviceAuthID scope:self.scope]; + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"sender" + value:self.authorizedEntity]]; + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"X-subtype" + value:self.authorizedEntity]]; + + [queryItems addObjectsFromArray:[self queryItemsWithKeyPair:self.keyPair]]; + + // Create query items from passed-in options + id apnsTokenData = self.options[kFIRInstanceIDTokenOptionsAPNSKey]; + id apnsSandboxValue = self.options[kFIRInstanceIDTokenOptionsAPNSIsSandboxKey]; + if ([apnsTokenData isKindOfClass:[NSData class]] && + [apnsSandboxValue isKindOfClass:[NSNumber class]]) { + NSString *APNSString = FIRInstanceIDAPNSTupleStringForTokenAndServerType( + apnsTokenData, ((NSNumber *)apnsSandboxValue).boolValue); + // The name of the query item happens to be the same as the dictionary key + FIRInstanceIDURLQueryItem *item = + [FIRInstanceIDURLQueryItem queryItemWithName:kFIRInstanceIDTokenOptionsAPNSKey + value:APNSString]; + [queryItems addObject:item]; + } + id firebaseAppID = self.options[kFIRInstanceIDTokenOptionsFirebaseAppIDKey]; + if ([firebaseAppID isKindOfClass:[NSString class]]) { + // The name of the query item happens to be the same as the dictionary key + FIRInstanceIDURLQueryItem *item = + [FIRInstanceIDURLQueryItem queryItemWithName:kFIRInstanceIDTokenOptionsFirebaseAppIDKey + value:(NSString *)firebaseAppID]; + [queryItems addObject:item]; + } + + NSString *content = FIRInstanceIDQueryFromQueryItems(queryItems); + request.HTTPBody = [content dataUsingEncoding:NSUTF8StringEncoding]; + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenFetchOperationFetchRequest, + @"Register request to %@ content: %@", FIRInstanceIDRegisterServer(), + content); + + FIRInstanceID_WEAKIFY(self); + void (^requestHandler)(NSData *, NSURLResponse *, NSError *) = + ^(NSData *data, NSURLResponse *response, NSError *error) { + FIRInstanceID_STRONGIFY(self); + [self handleResponseWithData:data response:response error:error]; + }; + + // Test block + if (self.testBlock) { + self.testBlock(request, requestHandler); + return; + } + + NSURLSession *session = [FIRInstanceIDTokenOperation sharedURLSession]; + self.dataTask = [session dataTaskWithRequest:request completionHandler:requestHandler]; + [self.dataTask resume]; +} + +#pragma mark - Request Handling + +- (void)handleResponseWithData:(NSData *)data + response:(NSURLResponse *)response + error:(NSError *)error { + if (error) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenFetchOperationRequestError, + @"Token fetch HTTP error. Error Code: %ld", (long)error.code); + [self finishWithResult:FIRInstanceIDTokenOperationError token:nil error:error]; + return; + } + NSString *dataResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + + if (dataResponse.length == 0) { + NSError *error = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeUnknown]; + [self finishWithResult:FIRInstanceIDTokenOperationError token:nil error:error]; + return; + } + NSDictionary *parsedResponse = [self parseFetchTokenResponse:dataResponse]; + + if ([parsedResponse[@"token"] length]) { + [self finishWithResult:FIRInstanceIDTokenOperationSucceeded + token:parsedResponse[@"token"] + error:nil]; + return; + } + + NSString *errorValue = parsedResponse[@"Error"]; + NSError *responseError; + if (errorValue.length) { + NSArray *errorComponents = [errorValue componentsSeparatedByString:@":"]; + // HACK (Kansas replication delay), PHONE_REGISTRATION_ERROR on App + // uninstall and reinstall. + if ([errorComponents containsObject:@"PHONE_REGISTRATION_ERROR"]) { + // Encountered issue http://b/27043795 + // Retry register until successful or another error encountered or a + // certain number of tries are over. + + if (phoneRegistrationErrorRetryCount < kMaxPhoneRegistrationErrorRetryCount) { + const int nextRetryInterval = 1 << phoneRegistrationErrorRetryCount; + FIRInstanceID_WEAKIFY(self); + + dispatch_after( + dispatch_time(DISPATCH_TIME_NOW, (int64_t)(nextRetryInterval * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + FIRInstanceID_STRONGIFY(self); + phoneRegistrationErrorRetryCount++; + [self performTokenOperation]; + }); + return; + } + } else if ([errorComponents containsObject:kFIRInstanceID_CMD_RST]) { + // Server detected the identity we use is no longer valid. + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center postNotificationName:kFIRInstanceIDIdentityInvalidatedNotification object:nil]; + + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeInternal001, + @"Identity is invalid. Server request identity reset."); + responseError = + [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeInvalidIdentity]; + } + } + if (!responseError) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenFetchOperationBadResponse, + @"Invalid fetch response, expected 'token' or 'Error' key"); + responseError = [NSError errorWithFIRInstanceIDErrorCode:kFIRInstanceIDErrorCodeUnknown]; + } + [self finishWithResult:FIRInstanceIDTokenOperationError token:nil error:responseError]; +} + +// expect a response e.g. "token=\nGOOG.ttl=123" +- (NSDictionary *)parseFetchTokenResponse:(NSString *)response { + NSArray *lines = [response componentsSeparatedByString:@"\n"]; + NSMutableDictionary *parsedResponse = [NSMutableDictionary dictionary]; + for (NSString *line in lines) { + NSArray *keyAndValue = [line componentsSeparatedByString:@"="]; + if ([keyAndValue count] > 1) { + parsedResponse[keyAndValue[0]] = keyAndValue[1]; + } + } + return parsedResponse; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenInfo.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenInfo.h new file mode 100644 index 0000000000..34ad716625 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenInfo.h @@ -0,0 +1,82 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import "FIRInstanceIDAPNSInfo.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Represents an Instance ID token, and all of the relevant information + * associated with it. It can read from and write to an NSDictionary object, for + * simple serialization. + */ +@interface FIRInstanceIDTokenInfo : NSObject + +/// The authorized entity (also known as Sender ID), associated with the token. +@property(nonatomic, readonly, copy) NSString *authorizedEntity; +/// The scope associated with the token. This is an arbitrary string, typically "*". +@property(nonatomic, readonly, copy) NSString *scope; +/// The token value itself, with which all other properties are associated. +@property(nonatomic, readonly, copy) NSString *token; + +// These properties are nullable because they might not exist for tokens fetched from +// legacy storage formats. + +/// The app version that this token represents. +@property(nonatomic, readonly, copy, nullable) NSString *appVersion; +/// The Firebase app ID (also known as GMP App ID), that this token is associated with. +@property(nonatomic, readonly, copy, nullable) NSString *firebaseAppID; + +/// Tokens may not always be associated with an APNs token, and may be associated after +/// being created. +@property(nonatomic, strong, nullable) FIRInstanceIDAPNSInfo *APNSInfo; +/// The time that this token info was updated. The cache time is writeable, since in +/// some cases the token info may be refreshed from the server. In those situations, +/// the cacheTime would be updated. +@property(nonatomic, copy, nullable) NSDate *cacheTime; + +/** + * Initializes a FIRInstanceIDTokenInfo object with the required parameters. These + * parameters represent all the relevant associated data with a token. + * + * @param authorizedEntity The authorized entity (also known as Sender ID). + * @param scope The scope of the token, typically "*" meaning + * it's a "default scope". + * @param token The token value itself. + * @param appVersion The application version that this token is associated with. + * @param firebaseAppID The Firebase app ID which this token is associated with. + * @return An instance of FIRInstanceIDTokenInfo. + */ +- (instancetype)initWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + token:(NSString *)token + appVersion:(nullable NSString *)appVersion + firebaseAppID:(nullable NSString *)firebaseAppID; + +/** + * Check whether the token is still fresh based on: + * 1. Last fetch token is within the 7 days. + * 2. Language setting is not changed. + * 3. App version is current. + * 4. GMP App ID is current. + */ +- (BOOL)isFresh; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenInfo.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenInfo.m new file mode 100644 index 0000000000..5bb0017d81 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenInfo.m @@ -0,0 +1,198 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenInfo.h" + +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDUtilities.h" + +/** + * @enum Token Info Dictionary Key Constants + * @discussion The keys that are checked when a token info is + * created from a dictionary. The same keys are used + * when decoding/encoding an archive. + */ +/// Specifies a dictonary key whose value represents the authorized entity, or +/// Sender ID for the token. +static NSString *const kFIRInstanceIDAuthorizedEntityKey = @"authorized_entity"; +/// Specifies a dictionary key whose value represents the scope of the token, +/// typically "*". +static NSString *const kFIRInstanceIDScopeKey = @"scope"; +/// Specifies a dictionary key which represents the token value itself. +static NSString *const kFIRInstanceIDTokenKey = @"token"; +/// Specifies a dictionary key which represents the app version associated +/// with the token. +static NSString *const kFIRInstanceIDAppVersionKey = @"app_version"; +/// Specifies a dictionary key which represents the GMP App ID associated with +/// the token. +static NSString *const kFIRInstanceIDFirebaseAppIDKey = @"firebase_app_id"; +/// Specifies a dictionary key representing an archive for a +/// `FIRInstanceIDAPNSInfo` object. +static NSString *const kFIRInstanceIDAPNSInfoKey = @"apns_info"; +/// Specifies a dictionary key representing the "last cached" time for the token. +static NSString *const kFIRInstanceIDCacheTimeKey = @"cache_time"; +/// Default interval that token stays fresh. +const NSTimeInterval kDefaultFetchTokenInterval = 7 * 24 * 60 * 60; // 7 days. + +@implementation FIRInstanceIDTokenInfo + +- (instancetype)initWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + token:(NSString *)token + appVersion:(NSString *)appVersion + firebaseAppID:(NSString *)firebaseAppID { + self = [super init]; + if (self) { + _authorizedEntity = [authorizedEntity copy]; + _scope = [scope copy]; + _token = [token copy]; + _appVersion = [appVersion copy]; + _firebaseAppID = [firebaseAppID copy]; + } + return self; +} + +- (BOOL)isFresh { + // Last fetch token cache time could be null if token is from legacy storage format. Then token is + // considered not fresh and should be refreshed and overwrite with the latest storage format. + if (!_cacheTime) { + return NO; + } + + // Check if app has just been updated to a new version. + NSString *currentAppVersion = FIRInstanceIDCurrentAppVersion(); + if (!_appVersion || ![_appVersion isEqualToString:currentAppVersion]) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenManager004, + @"Invalidating cached token for %@ (%@) due to app version change.", + _authorizedEntity, _scope); + return NO; + } + + // Check if GMP App ID has changed + NSString *currentFirebaseAppID = FIRInstanceIDFirebaseAppID(); + if (!_firebaseAppID || ![_firebaseAppID isEqualToString:currentFirebaseAppID]) { + FIRInstanceIDLoggerDebug( + kFIRInstanceIDMessageCodeTokenInfoFirebaseAppIDChanged, + @"Invalidating cached token due to Firebase App IID change from %@ to %@", _firebaseAppID, + currentFirebaseAppID); + return NO; + } + + // Check whether locale has changed, if yes, token needs to be updated with server for locale + // information. + if (FIRInstanceIDHasLocaleChanged()) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenInfoLocaleChanged, + @"Invalidating cached token due to locale change"); + return NO; + } + + // Locale is not changed, check whether token has been fetched within 7 days. + NSTimeInterval lastFetchTokenTimestamp = [_cacheTime timeIntervalSince1970]; + NSTimeInterval currentTimestamp = FIRInstanceIDCurrentTimestampInSeconds(); + NSTimeInterval timeSinceLastFetchToken = currentTimestamp - lastFetchTokenTimestamp; + return (timeSinceLastFetchToken < kDefaultFetchTokenInterval); +} +#pragma mark - NSCoding + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { + // These value cannot be nil + + id authorizedEntity = [aDecoder decodeObjectForKey:kFIRInstanceIDAuthorizedEntityKey]; + if (![authorizedEntity isKindOfClass:[NSString class]]) { + return nil; + } + + id scope = [aDecoder decodeObjectForKey:kFIRInstanceIDScopeKey]; + if (![scope isKindOfClass:[NSString class]]) { + return nil; + } + + id token = [aDecoder decodeObjectForKey:kFIRInstanceIDTokenKey]; + if (![token isKindOfClass:[NSString class]]) { + return nil; + } + + // These values are nullable, so only fail the decode if the type does not match + + id appVersion = [aDecoder decodeObjectForKey:kFIRInstanceIDAppVersionKey]; + if (appVersion && ![appVersion isKindOfClass:[NSString class]]) { + return nil; + } + + id firebaseAppID = [aDecoder decodeObjectForKey:kFIRInstanceIDFirebaseAppIDKey]; + if (firebaseAppID && ![firebaseAppID isKindOfClass:[NSString class]]) { + return nil; + } + + id rawAPNSInfo = [aDecoder decodeObjectForKey:kFIRInstanceIDAPNSInfoKey]; + if (rawAPNSInfo && ![rawAPNSInfo isKindOfClass:[NSData class]]) { + return nil; + } + + FIRInstanceIDAPNSInfo *APNSInfo = nil; + if (rawAPNSInfo) { + // TODO(chliangGoogle: Use the new API and secureCoding protocol. + @try { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + APNSInfo = [NSKeyedUnarchiver unarchiveObjectWithData:rawAPNSInfo]; +#pragma clang diagnostic pop + } @catch (NSException *exception) { + FIRInstanceIDLoggerInfo(kFIRInstanceIDMessageCodeTokenInfoBadAPNSInfo, + @"Could not parse raw APNS Info while parsing archived token info."); + APNSInfo = nil; + } @finally { + } + } + + id cacheTime = [aDecoder decodeObjectForKey:kFIRInstanceIDCacheTimeKey]; + if (cacheTime && ![cacheTime isKindOfClass:[NSDate class]]) { + return nil; + } + + self = [super init]; + if (self) { + _authorizedEntity = authorizedEntity; + _scope = scope; + _token = token; + _appVersion = appVersion; + _firebaseAppID = firebaseAppID; + _APNSInfo = APNSInfo; + _cacheTime = cacheTime; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeObject:self.authorizedEntity forKey:kFIRInstanceIDAuthorizedEntityKey]; + [aCoder encodeObject:self.scope forKey:kFIRInstanceIDScopeKey]; + [aCoder encodeObject:self.token forKey:kFIRInstanceIDTokenKey]; + [aCoder encodeObject:self.appVersion forKey:kFIRInstanceIDAppVersionKey]; + [aCoder encodeObject:self.firebaseAppID forKey:kFIRInstanceIDFirebaseAppIDKey]; + NSData *rawAPNSInfo; + if (self.APNSInfo) { + // TODO(chliangGoogle: Use the new API and secureCoding protocol. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + rawAPNSInfo = [NSKeyedArchiver archivedDataWithRootObject:self.APNSInfo]; +#pragma clang diagnostic pop + + [aCoder encodeObject:rawAPNSInfo forKey:kFIRInstanceIDAPNSInfoKey]; + } + [aCoder encodeObject:self.cacheTime forKey:kFIRInstanceIDCacheTimeKey]; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.h new file mode 100644 index 0000000000..9e050f3ee5 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.h @@ -0,0 +1,150 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceID.h" + +@class FIRInstanceIDAuthService; +@class FIRInstanceIDCheckinPreferences; +@class FIRInstanceIDKeyPair; +@class FIRInstanceIDTokenInfo; +@class FIRInstanceIDStore; + +typedef NS_OPTIONS(NSUInteger, FIRInstanceIDInvalidTokenReason) { + FIRInstanceIDInvalidTokenReasonNone = 0, // 0 + FIRInstanceIDInvalidTokenReasonAppVersion = (1 << 0), // 0...00001 + FIRInstanceIDInvalidTokenReasonAPNSToken = (1 << 1), // 0...00010 +}; + +/** + * Manager for the InstanceID token requests i.e `newToken` and `deleteToken`. This + * manages the overall interaction of the `InstanceIDStore`, the token register + * service and the callbacks associated with `GCMInstanceID`. + */ +@interface FIRInstanceIDTokenManager : NSObject + +/// Expose the auth service, so it can be used by others +@property(nonatomic, readonly, strong) FIRInstanceIDAuthService *authService; + +/** + * Fetch new token for the given authorizedEntity and scope. This makes an + * asynchronous request to the InstanceID backend to create a new token for + * the service and returns it. This will replace any old token for the given + * authorizedEntity and scope that has been cached before. + * + * @param authorizedEntity The authorized entity for the token, should not be nil. + * @param scope The scope for the token, should not be nil. + * @param keyPair The keyPair that represents the app identity. + * @param options The options to be added to the fetch request. + * @param handler The handler to be invoked once we have the token or the + * fetch request to InstanceID backend results in an error. Also + * since it's a public handler it should always be called + * asynchronously. This should be non-nil. + */ +- (void)fetchNewTokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + keyPair:(FIRInstanceIDKeyPair *)keyPair + options:(NSDictionary *)options + handler:(FIRInstanceIDTokenHandler)handler; + +/** + * Return the cached token info, if one exists, for the given authorizedEntity and scope. + * + * @param authorizedEntity The authorized entity for the token. + * @param scope The scope for the token. + * + * @return The cached token info, if available, matching the parameters. + */ +- (FIRInstanceIDTokenInfo *)cachedTokenInfoWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope; + +/** + * Delete the token for the given authorizedEntity and scope. If the token has + * been cached, it will be deleted from the store. It will also make an + * asynchronous request to the InstanceID backend to invalidate the token. + * + * @param authorizedEntity The authorized entity for the token, should not be nil. + * @param scope The scope for the token, should not be nil. + * @param keyPair The keyPair that represents the app identity. + * @param handler The handler to be invoked once the delete request to + * InstanceID backend has returned. If the request was + * successful we invoke the handler with a nil error; + * otherwise we call it with an appropriate error. Also since + * it's a public handler it should always be called + * asynchronously. This should be non-nil. + */ +- (void)deleteTokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + keyPair:(FIRInstanceIDKeyPair *)keyPair + handler:(FIRInstanceIDDeleteTokenHandler)handler; + +/** + * Deletes all cached tokens from the persistent store. This method should only be triggered + * when InstanceID is deleted + * + * @param keyPair The keyPair for the given app. + * @param handler The handler to be invoked once the delete request to InstanceID backend + * has returned. If the request was successful we invoke the handler with + * a nil error; else we pass in an appropriate error. This should be non-nil + * and be called asynchronously. + */ +- (void)deleteAllTokensWithKeyPair:(FIRInstanceIDKeyPair *)keyPair + handler:(FIRInstanceIDDeleteHandler)handler; + +/** + * Deletes all cached tokens from the persistent store. + * @param handler The callback handler which is invoked when tokens deletion is complete, + * with an error if there is any. + * + */ +- (void)deleteAllTokensLocallyWithHandler:(void (^)(NSError *error))handler; + +/** + * Stop any ongoing token operations. + */ +- (void)stopAllTokenOperations; + +#pragma mark - Invalidating Cached Tokens + +/** + * Invalidate any cached tokens, if the app version has changed since last launch or if the token + * is cached for more than 7 days. + * @param IID The cached instanceID, check if token is prefixed by such IID. + * + * @return Whether we should fetch default token from server. + * + * @discussion This should safely be called prior to any tokens being retrieved from + * the cache or being fetched from the network. + */ +- (BOOL)checkTokenRefreshPolicyWithIID:(NSString *)IID; + +/** + * Upon being provided with different APNs or sandbox, any locally cached tokens + * should be deleted, and the new APNs token should be cached. + * + * @discussion It is possible for this method to be called while token operations are + * in-progress or queued. In this case, the in-flight token operations will have stale + * APNs information. The default token is checked for being out-of-date by Instance ID, + * and re-fetched. Custom tokens are not currently checked. + * + * @param deviceToken The APNS device token, provided by the operating system. + * @param isSandbox YES if the device token is for the sandbox environment, NO otherwise. + * + * @return The array of FIRInstanceIDTokenInfo objects which were invalidated. + */ +- (NSArray *)updateTokensToAPNSDeviceToken:(NSData *)deviceToken + isSandbox:(BOOL)isSandbox; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.m new file mode 100644 index 0000000000..e8dac54f20 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.m @@ -0,0 +1,341 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenManager.h" + +#import "FIRInstanceIDAuthKeyChain.h" +#import "FIRInstanceIDAuthService.h" +#import "FIRInstanceIDCheckinPreferences.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDDefines.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDStore.h" +#import "FIRInstanceIDTokenDeleteOperation.h" +#import "FIRInstanceIDTokenFetchOperation.h" +#import "FIRInstanceIDTokenInfo.h" +#import "FIRInstanceIDTokenOperation.h" +#import "NSError+FIRInstanceID.h" + +@interface FIRInstanceIDTokenManager () + +@property(nonatomic, readwrite, strong) FIRInstanceIDStore *instanceIDStore; +@property(nonatomic, readwrite, strong) FIRInstanceIDAuthService *authService; +@property(nonatomic, readonly, strong) NSOperationQueue *tokenOperations; + +@property(nonatomic, readwrite, strong) FIRInstanceIDAPNSInfo *currentAPNSInfo; + +@end + +@implementation FIRInstanceIDTokenManager + +- (instancetype)init { + self = [super init]; + if (self) { + _instanceIDStore = [[FIRInstanceIDStore alloc] initWithDelegate:self]; + _authService = [[FIRInstanceIDAuthService alloc] initWithStore:_instanceIDStore]; + [self configureTokenOperations]; + } + return self; +} + +- (void)dealloc { + [self stopAllTokenOperations]; +} + +- (void)configureTokenOperations { + _tokenOperations = [[NSOperationQueue alloc] init]; + _tokenOperations.name = @"com.google.iid-token-operations"; + // For now, restrict the operations to be serial, because in some cases (like if the + // authorized entity and scope are the same), order matters. + // If we have to deal with several different token requests simultaneously, it would be a good + // idea to add some better intelligence around this (performing unrelated token operations + // simultaneously, etc.). + _tokenOperations.maxConcurrentOperationCount = 1; + if ([_tokenOperations respondsToSelector:@selector(qualityOfService)]) { + _tokenOperations.qualityOfService = NSOperationQualityOfServiceUtility; + } +} + +- (void)fetchNewTokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + keyPair:(FIRInstanceIDKeyPair *)keyPair + options:(NSDictionary *)options + handler:(FIRInstanceIDTokenHandler)handler { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenManager000, + @"Fetch new token for authorizedEntity: %@, scope: %@", authorizedEntity, + scope); + FIRInstanceIDTokenFetchOperation *operation = + [self createFetchOperationWithAuthorizedEntity:authorizedEntity + scope:scope + options:options + keyPair:keyPair]; + FIRInstanceID_WEAKIFY(self); + FIRInstanceIDTokenOperationCompletion completion = + ^(FIRInstanceIDTokenOperationResult result, NSString *_Nullable token, + NSError *_Nullable error) { + FIRInstanceID_STRONGIFY(self); + if (error) { + handler(nil, error); + return; + } + NSString *firebaseAppID = options[kFIRInstanceIDTokenOptionsFirebaseAppIDKey]; + FIRInstanceIDTokenInfo *tokenInfo = [[FIRInstanceIDTokenInfo alloc] + initWithAuthorizedEntity:authorizedEntity + scope:scope + token:token + appVersion:FIRInstanceIDCurrentAppVersion() + firebaseAppID:firebaseAppID]; + tokenInfo.APNSInfo = [[FIRInstanceIDAPNSInfo alloc] initWithTokenOptionsDictionary:options]; + + [self.instanceIDStore + saveTokenInfo:tokenInfo + handler:^(NSError *error) { + if (!error) { + // Do not send the token back in case the save was unsuccessful. Since with + // the new asychronous fetch mechanism this can lead to infinite loops, for + // example, we will return a valid token even though we weren't able to store + // it in our cache. The first token will lead to a onTokenRefresh callback + // wherein the user again calls `getToken` but since we weren't able to save + // it we won't hit the cache but hit the server again leading to an infinite + // loop. + FIRInstanceIDLoggerDebug( + kFIRInstanceIDMessageCodeTokenManager001, + @"Token fetch successful, token: %@, authorizedEntity: %@, scope:%@", + token, authorizedEntity, scope); + + if (handler) { + handler(token, nil); + } + } else { + if (handler) { + handler(nil, error); + } + } + }]; + }; + // Add completion handler, and ensure it's called on the main queue + [operation addCompletionHandler:^(FIRInstanceIDTokenOperationResult result, + NSString *_Nullable token, NSError *_Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(result, token, error); + }); + }]; + [self.tokenOperations addOperation:operation]; +} + +- (FIRInstanceIDTokenInfo *)cachedTokenInfoWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope { + return [self.instanceIDStore tokenInfoWithAuthorizedEntity:authorizedEntity scope:scope]; +} + +- (void)deleteTokenWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + keyPair:(FIRInstanceIDKeyPair *)keyPair + handler:(FIRInstanceIDDeleteTokenHandler)handler { + if ([self.instanceIDStore tokenInfoWithAuthorizedEntity:authorizedEntity scope:scope]) { + [self.instanceIDStore removeCachedTokenWithAuthorizedEntity:authorizedEntity scope:scope]; + } + // Does not matter if we cannot find it in the cache. Still make an effort to unregister + // from the server. + FIRInstanceIDCheckinPreferences *checkinPreferences = self.authService.checkinPreferences; + FIRInstanceIDTokenDeleteOperation *operation = + [self createDeleteOperationWithAuthorizedEntity:authorizedEntity + scope:scope + checkinPreferences:checkinPreferences + keyPair:keyPair + action:FIRInstanceIDTokenActionDeleteToken]; + + if (handler) { + [operation addCompletionHandler:^(FIRInstanceIDTokenOperationResult result, + NSString *_Nullable token, NSError *_Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + }]; + } + [self.tokenOperations addOperation:operation]; +} + +- (void)deleteAllTokensWithKeyPair:(FIRInstanceIDKeyPair *)keyPair + handler:(FIRInstanceIDDeleteHandler)handler { + // delete all tokens + FIRInstanceIDCheckinPreferences *checkinPreferences = self.authService.checkinPreferences; + if (!checkinPreferences) { + // The checkin is already deleted. No need to trigger the token delete operation as client no + // longer has the checkin information for server to delete. + dispatch_async(dispatch_get_main_queue(), ^{ + handler(nil); + }); + return; + } + FIRInstanceIDTokenDeleteOperation *operation = + [self createDeleteOperationWithAuthorizedEntity:kFIRInstanceIDKeychainWildcardIdentifier + scope:kFIRInstanceIDKeychainWildcardIdentifier + checkinPreferences:checkinPreferences + keyPair:keyPair + action:FIRInstanceIDTokenActionDeleteTokenAndIID]; + if (handler) { + [operation addCompletionHandler:^(FIRInstanceIDTokenOperationResult result, + NSString *_Nullable token, NSError *_Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + }]; + } + [self.tokenOperations addOperation:operation]; +} + +- (void)deleteAllTokensLocallyWithHandler:(void (^)(NSError *error))handler { + [self.instanceIDStore removeAllCachedTokensWithHandler:handler]; +} + +- (void)stopAllTokenOperations { + [self.authService stopCheckinRequest]; + [self.tokenOperations cancelAllOperations]; +} + +#pragma mark - FIRInstanceIDStoreDelegate + +- (void)store:(FIRInstanceIDStore *)store + didDeleteFCMScopedTokensForCheckin:(FIRInstanceIDCheckinPreferences *)checkin { + // Make a best effort try to delete the old client related state on the FCM server. This is + // required to delete old pubusb registrations which weren't cleared when the app was deleted. + // + // This is only a one time effort. If this call fails the client would still receive duplicate + // pubsub notifications if he is again subscribed to the same topic. + // + // The client state should be cleared on the server for the provided checkin preferences. + FIRInstanceIDTokenDeleteOperation *operation = + [self createDeleteOperationWithAuthorizedEntity:nil + scope:nil + checkinPreferences:checkin + keyPair:nil + action:FIRInstanceIDTokenActionDeleteToken]; + [operation addCompletionHandler:^(FIRInstanceIDTokenOperationResult result, + NSString *_Nullable token, NSError *_Nullable error) { + if (error) { + FIRInstanceIDMessageCode code = + kFIRInstanceIDMessageCodeTokenManagerErrorDeletingFCMTokensOnAppReset; + FIRInstanceIDLoggerDebug(code, @"Failed to delete GCM server registrations on app reset."); + } else { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenManagerDeletedFCMTokensOnAppReset, + @"Successfully deleted GCM server registrations on app reset"); + } + }]; + + [self.tokenOperations addOperation:operation]; +} + +#pragma mark - Unit Testing Stub Helpers +// We really have this method so that we can more easily stub it out for unit testing +- (FIRInstanceIDTokenFetchOperation *) + createFetchOperationWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + options:(NSDictionary *)options + keyPair:(FIRInstanceIDKeyPair *)keyPair { + FIRInstanceIDCheckinPreferences *checkinPreferences = self.authService.checkinPreferences; + FIRInstanceIDTokenFetchOperation *operation = + [[FIRInstanceIDTokenFetchOperation alloc] initWithAuthorizedEntity:authorizedEntity + scope:scope + options:options + checkinPreferences:checkinPreferences + keyPair:keyPair]; + return operation; +} + +// We really have this method so that we can more easily stub it out for unit testing +- (FIRInstanceIDTokenDeleteOperation *) + createDeleteOperationWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + checkinPreferences:(FIRInstanceIDCheckinPreferences *)checkinPreferences + keyPair:(FIRInstanceIDKeyPair *)keyPair + action:(FIRInstanceIDTokenAction)action { + FIRInstanceIDTokenDeleteOperation *operation = + [[FIRInstanceIDTokenDeleteOperation alloc] initWithAuthorizedEntity:authorizedEntity + scope:scope + checkinPreferences:checkinPreferences + keyPair:keyPair + action:action]; + return operation; +} + +#pragma mark - Invalidating Cached Tokens +- (BOOL)checkTokenRefreshPolicyWithIID:(NSString *)IID { + // We know at least one cached token exists. + BOOL shouldFetchDefaultToken = NO; + NSArray *tokenInfos = [self.instanceIDStore cachedTokenInfos]; + + NSMutableArray *tokenInfosToDelete = + [NSMutableArray arrayWithCapacity:tokenInfos.count]; + for (FIRInstanceIDTokenInfo *tokenInfo in tokenInfos) { + BOOL isTokenFresh = [tokenInfo isFresh]; + if (isTokenFresh && [tokenInfo.token hasPrefix:IID]) { + // Token is fresh and in right format, do nothing + continue; + } + if ([tokenInfo.scope isEqualToString:kFIRInstanceIDDefaultTokenScope]) { + // Default token is expired, do not mark for deletion. Fetch directly from server to + // replace the current one. + shouldFetchDefaultToken = YES; + } else { + // Non-default token is expired, mark for deletion. + [tokenInfosToDelete addObject:tokenInfo]; + } + FIRInstanceIDLoggerDebug( + kFIRInstanceIDMessageCodeTokenManagerInvalidateStaleToken, + @"Invalidating cached token for %@ (%@) due to token is no longer fresh.", + tokenInfo.authorizedEntity, tokenInfo.scope); + } + for (FIRInstanceIDTokenInfo *tokenInfoToDelete in tokenInfosToDelete) { + [self.instanceIDStore removeCachedTokenWithAuthorizedEntity:tokenInfoToDelete.authorizedEntity + scope:tokenInfoToDelete.scope]; + } + return shouldFetchDefaultToken; +} + +- (NSArray *)updateTokensToAPNSDeviceToken:(NSData *)deviceToken + isSandbox:(BOOL)isSandbox { + // Each cached IID token that is missing an APNSInfo, or has an APNSInfo associated should be + // checked and invalidated if needed. + FIRInstanceIDAPNSInfo *APNSInfo = [[FIRInstanceIDAPNSInfo alloc] initWithDeviceToken:deviceToken + isSandbox:isSandbox]; + if ([self.currentAPNSInfo isEqualToAPNSInfo:APNSInfo]) { + return @[]; + } + self.currentAPNSInfo = APNSInfo; + + NSArray *tokenInfos = [self.instanceIDStore cachedTokenInfos]; + NSMutableArray *tokenInfosToDelete = + [NSMutableArray arrayWithCapacity:tokenInfos.count]; + for (FIRInstanceIDTokenInfo *cachedTokenInfo in tokenInfos) { + // Check if the cached APNSInfo is nil, or if it is an old APNSInfo. + if (!cachedTokenInfo.APNSInfo || + ![cachedTokenInfo.APNSInfo isEqualToAPNSInfo:self.currentAPNSInfo]) { + // Mark for invalidation. + [tokenInfosToDelete addObject:cachedTokenInfo]; + } + } + for (FIRInstanceIDTokenInfo *tokenInfoToDelete in tokenInfosToDelete) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenManagerAPNSChangedTokenInvalidated, + @"Invalidating cached token for %@ (%@) due to APNs token change.", + tokenInfoToDelete.authorizedEntity, tokenInfoToDelete.scope); + [self.instanceIDStore removeCachedTokenWithAuthorizedEntity:tokenInfoToDelete.authorizedEntity + scope:tokenInfoToDelete.scope]; + } + return tokenInfosToDelete; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation+Private.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation+Private.h new file mode 100644 index 0000000000..68d9db1839 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation+Private.h @@ -0,0 +1,67 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenOperation.h" + +#import "FIRInstanceIDUtilities.h" + +@class FIRInstanceIDKeyPair; +@class FIRInstanceIDURLQueryItem; + +NS_ASSUME_NONNULL_BEGIN + +@interface FIRInstanceIDTokenOperation (Private) + +@property(atomic, strong) NSURLSessionDataTask *dataTask; +@property(readonly, strong) + NSMutableArray *completionHandlers; + +// For testing only +@property(nonatomic, readwrite, copy) FIRInstanceIDURLRequestTestBlock testBlock; + ++ (NSURLSession *)sharedURLSession; + +#pragma mark - Initialization +- (instancetype)initWithAction:(FIRInstanceIDTokenAction)action + forAuthorizedEntity:(nullable NSString *)authorizedEntity + scope:(NSString *)scope + options:(nullable NSDictionary *)options + checkinPreferences:(FIRInstanceIDCheckinPreferences *)checkinPreferences + keyPair:(FIRInstanceIDKeyPair *)keyPair; + +#pragma mark - Request Construction ++ (NSMutableURLRequest *)requestWithAuthHeader:(NSString *)authHeaderString; ++ (NSMutableArray *)standardQueryItemsWithDeviceID:(NSString *)deviceID + scope:(NSString *)scope; +- (NSArray *)queryItemsWithKeyPair:(FIRInstanceIDKeyPair *)keyPair; + +#pragma mark - HTTP Headers +/** + * Given a valid checkin preferences object, it will return a string that can be used + * in the "Authorization" HTTP header to authenticate this request. + * + * @param checkin The valid checkin preferences object, with a deviceID and secretToken. + */ ++ (NSString *)HTTPAuthHeaderFromCheckin:(FIRInstanceIDCheckinPreferences *)checkin; + +#pragma mark - Result +- (void)finishWithResult:(FIRInstanceIDTokenOperationResult)result + token:(nullable NSString *)token + error:(nullable NSError *)error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation.h new file mode 100644 index 0000000000..1a1842cf28 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation.h @@ -0,0 +1,73 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class FIRInstanceIDKeyPair; +@class FIRInstanceIDCheckinPreferences; + +NS_ASSUME_NONNULL_BEGIN + +/** + * Represents the action taken on an FCM token. + */ +typedef NS_ENUM(NSInteger, FIRInstanceIDTokenAction) { + FIRInstanceIDTokenActionFetch, + FIRInstanceIDTokenActionDeleteToken, + FIRInstanceIDTokenActionDeleteTokenAndIID, +}; + +/** + * Represents the possible results of a token operation. + */ +typedef NS_ENUM(NSInteger, FIRInstanceIDTokenOperationResult) { + FIRInstanceIDTokenOperationSucceeded, + FIRInstanceIDTokenOperationError, + FIRInstanceIDTokenOperationCancelled, +}; + +/** + * Callback to invoke once the HTTP call to FIRMessaging backend for updating + * subscription finishes. + * + * @param result The result of the operation. + * @param token If the action for fetching a token and the request was successful, this will hold + * the value of the token. Otherwise nil. + * @param error The error which occurred while performing the token operation. This will be nil + * in case the operation was successful, or if the operation was cancelled. + */ +typedef void (^FIRInstanceIDTokenOperationCompletion)(FIRInstanceIDTokenOperationResult result, + NSString *_Nullable token, + NSError *_Nullable error); + +@interface FIRInstanceIDTokenOperation : NSOperation + +@property(nonatomic, readonly) FIRInstanceIDTokenAction action; +@property(nonatomic, readonly, nullable) NSString *authorizedEntity; +@property(nonatomic, readonly, nullable) NSString *scope; +@property(nonatomic, readonly, nullable) NSDictionary *options; +@property(nonatomic, readonly, strong) FIRInstanceIDCheckinPreferences *checkinPreferences; +@property(nonatomic, readonly, strong) FIRInstanceIDKeyPair *keyPair; + +@property(nonatomic, readonly) FIRInstanceIDTokenOperationResult result; + +- (instancetype)init NS_UNAVAILABLE; + +- (void)addCompletionHandler:(FIRInstanceIDTokenOperationCompletion)handler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation.m new file mode 100644 index 0000000000..5c20f3cec2 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenOperation.m @@ -0,0 +1,241 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenOperation.h" + +#import "FIRInstanceIDCheckinPreferences.h" +#import "FIRInstanceIDKeyPair.h" +#import "FIRInstanceIDKeyPairUtilities.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDURLQueryItem.h" +#import "FIRInstanceIDUtilities.h" +#import "NSError+FIRInstanceID.h" + +static const NSInteger kFIRInstanceIDPlatformVersionIOS = 2; + +static NSString *const kFIRInstanceIDParamInstanceID = @"appid"; +// Scope parameter that defines the service using the token +static NSString *const kFIRInstanceIDParamScope = @"X-scope"; +// Defines the SDK version +static NSString *const kFIRInstanceIDParamFCMLibVersion = @"X-cliv"; + +@interface FIRInstanceIDTokenOperation () { + BOOL _isFinished; + BOOL _isExecuting; +} + +@property(nonatomic, readwrite, strong) FIRInstanceIDCheckinPreferences *checkinPreferences; +@property(nonatomic, readwrite, strong) FIRInstanceIDKeyPair *keyPair; + +@property(atomic, strong) NSURLSessionDataTask *dataTask; +@property(readonly, strong) + NSMutableArray *completionHandlers; + +// For testing only +@property(nonatomic, readwrite, copy) FIRInstanceIDURLRequestTestBlock testBlock; + +@end + +@implementation FIRInstanceIDTokenOperation + ++ (NSURLSession *)sharedURLSession { + static NSURLSession *tokenOperationSharedSession; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; + config.timeoutIntervalForResource = 60.0f; // 1 minute + tokenOperationSharedSession = [NSURLSession sessionWithConfiguration:config]; + tokenOperationSharedSession.sessionDescription = @"com.google.iid.tokens.session"; + }); + return tokenOperationSharedSession; +} + +- (instancetype)initWithAction:(FIRInstanceIDTokenAction)action + forAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope + options:(NSDictionary *)options + checkinPreferences:(FIRInstanceIDCheckinPreferences *)checkinPreferences + keyPair:(FIRInstanceIDKeyPair *)keyPair { + self = [super init]; + if (self) { + _action = action; + _authorizedEntity = [authorizedEntity copy]; + _scope = [scope copy]; + _options = [options copy]; + _checkinPreferences = checkinPreferences; + _keyPair = keyPair; + _completionHandlers = [NSMutableArray array]; + + _isExecuting = NO; + _isFinished = NO; + } + return self; +} + +- (void)dealloc { + _testBlock = nil; + _authorizedEntity = nil; + _scope = nil; + _options = nil; + _checkinPreferences = nil; + _keyPair = nil; + [_completionHandlers removeAllObjects]; + _completionHandlers = nil; +} + +- (void)addCompletionHandler:(FIRInstanceIDTokenOperationCompletion)handler { + [self.completionHandlers addObject:handler]; +} + +- (BOOL)isAsynchronous { + return YES; +} + +- (BOOL)isExecuting { + return _isExecuting; +} + +- (void)setExecuting:(BOOL)executing { + [self willChangeValueForKey:@"isExecuting"]; + _isExecuting = executing; + [self didChangeValueForKey:@"isExecuting"]; +} + +- (BOOL)isFinished { + return _isFinished; +} + +- (void)setFinished:(BOOL)finished { + [self willChangeValueForKey:@"isFinished"]; + _isFinished = finished; + [self didChangeValueForKey:@"isFinished"]; +} + +- (void)start { + if (self.isCancelled) { + [self finishWithResult:FIRInstanceIDTokenOperationCancelled token:nil error:nil]; + return; + } + + // Quickly validate whether or not the operation has all it needs to begin + BOOL checkinfoAvailable = [self.checkinPreferences hasCheckinInfo]; + if (!checkinfoAvailable) { + FIRInstanceIDErrorCode errorCode = kFIRInstanceIDErrorCodeRegistrarFailedToCheckIn; + [self finishWithResult:FIRInstanceIDTokenOperationError + token:nil + error:[NSError errorWithFIRInstanceIDErrorCode:errorCode]]; + return; + } + + [self setExecuting:YES]; + + [self performTokenOperation]; +} + +- (void)finishWithResult:(FIRInstanceIDTokenOperationResult)result + token:(nullable NSString *)token + error:(nullable NSError *)error { + // Add a check to prevent this finish from being called more than once. + if (self.isFinished) { + return; + } + self.dataTask = nil; + _result = result; + // TODO(chliangGoogle): Call these in the main thread? + for (FIRInstanceIDTokenOperationCompletion completionHandler in self.completionHandlers) { + completionHandler(result, token, error); + } + + [self setExecuting:NO]; + [self setFinished:YES]; +} + +- (void)cancel { + [super cancel]; + [self.dataTask cancel]; + [self finishWithResult:FIRInstanceIDTokenOperationCancelled token:nil error:nil]; +} + +- (void)performTokenOperation { +} + +#pragma mark - Request Construction ++ (NSMutableURLRequest *)requestWithAuthHeader:(NSString *)authHeaderString { + NSURL *url = [NSURL URLWithString:FIRInstanceIDRegisterServer()]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + + // Add HTTP headers + [request setValue:authHeaderString forHTTPHeaderField:@"Authorization"]; + [request setValue:FIRInstanceIDAppIdentifier() forHTTPHeaderField:@"app"]; + request.HTTPMethod = @"POST"; + return request; +} + ++ (NSMutableArray *)standardQueryItemsWithDeviceID:(NSString *)deviceID + scope:(NSString *)scope { + NSMutableArray *queryItems = [NSMutableArray arrayWithCapacity:8]; + + // E.g. X-osv=10.2.1 + NSString *systemVersion = FIRInstanceIDOperatingSystemVersion(); + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"X-osv" value:systemVersion]]; + // E.g. device= + if (deviceID) { + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"device" value:deviceID]]; + } + // E.g. X-scope=fcm + if (scope) { + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:kFIRInstanceIDParamScope + value:scope]]; + } + // E.g. plat=2 + NSString *platform = [NSString stringWithFormat:@"%ld", (long)kFIRInstanceIDPlatformVersionIOS]; + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"plat" value:platform]]; + // E.g. app=com.myapp.foo + NSString *appIdentifier = FIRInstanceIDAppIdentifier(); + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"app" value:appIdentifier]]; + // E.g. app_ver=1.5 + NSString *appVersion = FIRInstanceIDCurrentAppVersion(); + [queryItems addObject:[FIRInstanceIDURLQueryItem queryItemWithName:@"app_ver" value:appVersion]]; + // E.g. X-cliv=fiid-1.2.3 + NSString *fcmLibraryVersion = + [NSString stringWithFormat:@"fiid-%@", FIRInstanceIDCurrentGCMVersion()]; + if (fcmLibraryVersion.length) { + FIRInstanceIDURLQueryItem *gcmLibVersion = + [FIRInstanceIDURLQueryItem queryItemWithName:kFIRInstanceIDParamFCMLibVersion + value:fcmLibraryVersion]; + [queryItems addObject:gcmLibVersion]; + } + + return queryItems; +} + +- (NSArray *)queryItemsWithKeyPair:(FIRInstanceIDKeyPair *)keyPair { + NSMutableArray *items = [NSMutableArray arrayWithCapacity:3]; + // appid= + NSString *instanceID = FIRInstanceIDAppIdentity(keyPair); + [items addObject:[FIRInstanceIDURLQueryItem queryItemWithName:kFIRInstanceIDParamInstanceID + value:instanceID]]; + return items; +} + +#pragma mark - HTTP Header + ++ (NSString *)HTTPAuthHeaderFromCheckin:(FIRInstanceIDCheckinPreferences *)checkin { + NSString *deviceID = checkin.deviceID; + NSString *secret = checkin.secretToken; + return [NSString stringWithFormat:@"AidLogin %@:%@", deviceID, secret]; +} +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenStore.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenStore.h new file mode 100644 index 0000000000..861c87b996 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenStore.h @@ -0,0 +1,106 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class FIRInstanceIDAPNSInfo; +@class FIRInstanceIDAuthKeychain; +@class FIRInstanceIDTokenInfo; + +/** + * This class is responsible for retrieving and saving `FIRInstanceIDTokenInfo` objects from the + * keychain. The keychain keys that are used are: + * Account:
(e.g. com.mycompany.myapp) + * Service: : (e.g. 1234567890:*) + */ +@interface FIRInstanceIDTokenStore : NSObject + +NS_ASSUME_NONNULL_BEGIN + +/** + * Create a default InstanceID token store. Uses a valid Keychain object as it's + * persistent backing store. + * + * @return A valid token store object. + */ ++ (instancetype)defaultStore; + +- (instancetype)init __attribute__((unavailable("Use -initWithKeychain: instead."))); + +/** + * Initialize a token store object with a Keychain object. Used for testing. + * + * @param keychain The Keychain object to use as the backing store for tokens. + * + * @return A valid token store object with the given Keychain as backing store. + */ +- (instancetype)initWithKeychain:(FIRInstanceIDAuthKeychain *)keychain; + +#pragma mark - Get + +/** + * Get the cached token from the Keychain. + * + * @param authorizedEntity The authorized entity for the token. + * @param scope The scope for the token. + * + * @return The cached token info if any for the given authorizedEntity and scope else + * nil. + */ +- (nullable FIRInstanceIDTokenInfo *)tokenInfoWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope; + +/** + * Return all cached token infos from the Keychain. + * + * @return The cached token infos, if any, that are stored in the Keychain. + */ +- (NSArray *)cachedTokenInfos; + +#pragma mark - Save + +/** + * Save the instanceID token info to the persistent store. + * + * @param tokenInfo The token info to store. + * @param handler The callback handler which is invoked when token saving is complete, + * with an error if there is any. + */ +- (void)saveTokenInfo:(FIRInstanceIDTokenInfo *)tokenInfo + handler:(nullable void (^)(NSError *))handler; + +#pragma mark - Delete + +/** + * Remove the cached token from Keychain. + * + * @param authorizedEntity The authorized entity for the token. + * @param scope The scope for the token. + * + */ +- (void)removeTokenWithAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope; + +/** + * Remove all the cached tokens from the Keychain. + * @param handler The callback handler which is invoked when tokens deletion is complete, + * with an error if there is any. + * + */ +- (void)removeAllTokensWithHandler:(nullable void (^)(NSError *))handler; + +NS_ASSUME_NONNULL_END + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenStore.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenStore.m new file mode 100644 index 0000000000..37656455dd --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenStore.m @@ -0,0 +1,147 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDTokenStore.h" + +#import "FIRInstanceIDAuthKeyChain.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDLogger.h" +#import "FIRInstanceIDTokenInfo.h" +#import "FIRInstanceIDUtilities.h" + +static NSString *const kFIRInstanceIDTokenKeychainId = @"com.google.iid-tokens"; + +@interface FIRInstanceIDTokenStore () + +@property(nonatomic, readwrite, strong) FIRInstanceIDAuthKeychain *keychain; + +@end + +@implementation FIRInstanceIDTokenStore + ++ (instancetype)defaultStore { + FIRInstanceIDAuthKeychain *tokenKeychain = + [[FIRInstanceIDAuthKeychain alloc] initWithIdentifier:kFIRInstanceIDTokenKeychainId]; + return [[FIRInstanceIDTokenStore alloc] initWithKeychain:tokenKeychain]; +} + +- (instancetype)initWithKeychain:(FIRInstanceIDAuthKeychain *)keychain { + self = [super init]; + if (self) { + _keychain = keychain; + } + return self; +} + +#pragma mark - Get + ++ (NSString *)serviceKeyForAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope { + return [NSString stringWithFormat:@"%@:%@", authorizedEntity, scope]; +} + +- (nullable FIRInstanceIDTokenInfo *)tokenInfoWithAuthorizedEntity:(NSString *)authorizedEntity + scope:(NSString *)scope { + NSString *account = FIRInstanceIDAppIdentifier(); + NSString *service = [[self class] serviceKeyForAuthorizedEntity:authorizedEntity scope:scope]; + NSData *item = [self.keychain dataForService:service account:account]; + if (!item) { + return nil; + } + // Token infos created from legacy storage don't have appVersion, firebaseAppID, or APNSInfo. + FIRInstanceIDTokenInfo *tokenInfo = [[self class] tokenInfoFromKeychainItem:item]; + return tokenInfo; +} + +- (NSArray *)cachedTokenInfos { + NSString *account = FIRInstanceIDAppIdentifier(); + NSArray *items = + [self.keychain itemsMatchingService:kFIRInstanceIDKeychainWildcardIdentifier account:account]; + NSMutableArray *tokenInfos = + [NSMutableArray arrayWithCapacity:items.count]; + for (NSData *item in items) { + FIRInstanceIDTokenInfo *tokenInfo = [[self class] tokenInfoFromKeychainItem:item]; + if (tokenInfo) { + [tokenInfos addObject:tokenInfo]; + } + } + return tokenInfos; +} + ++ (nullable FIRInstanceIDTokenInfo *)tokenInfoFromKeychainItem:(NSData *)item { + // Check if it is saved as an archived FIRInstanceIDTokenInfo, otherwise return nil. + FIRInstanceIDTokenInfo *tokenInfo = nil; + // NOTE: Passing in nil to unarchiveObjectWithData will result in an iOS error logged + // in the console on iOS 10 and below. Avoid by checking item.data's existence. + if (item) { + // TODO(chliangGoogle: Use the new API and secureCoding protocol. + @try { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + tokenInfo = [NSKeyedUnarchiver unarchiveObjectWithData:item]; +#pragma clang diagnostic pop + + } @catch (NSException *exception) { + FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeTokenStoreExceptionUnarchivingTokenInfo, + @"Unable to parse token info from Keychain item; item was in an " + @"invalid format"); + tokenInfo = nil; + } @finally { + } + } + return tokenInfo; +} + +#pragma mark - Save +// Token Infos will be saved under these Keychain keys: +// Account:
(e.g. com.mycompany.myapp) +// Service: : (e.g. 1234567890:*) +- (void)saveTokenInfo:(FIRInstanceIDTokenInfo *)tokenInfo + handler:(void (^)(NSError *))handler { // Keep the cachetime up-to-date. + tokenInfo.cacheTime = [NSDate date]; + // Always write to the Keychain, so that the cacheTime is up-to-date. + NSData *tokenInfoData; + // TODO(chliangGoogle: Use the new API and secureCoding protocol. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + tokenInfoData = [NSKeyedArchiver archivedDataWithRootObject:tokenInfo]; +#pragma clang diagnostic pop + NSString *account = FIRInstanceIDAppIdentifier(); + NSString *service = [[self class] serviceKeyForAuthorizedEntity:tokenInfo.authorizedEntity + scope:tokenInfo.scope]; + [self.keychain setData:tokenInfoData + forService:service + accessibility:NULL + account:account + handler:handler]; +} + +#pragma mark - Delete + +- (void)removeTokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity + scope:(nonnull NSString *)scope { + NSString *account = FIRInstanceIDAppIdentifier(); + NSString *service = [[self class] serviceKeyForAuthorizedEntity:authorizedEntity scope:scope]; + [self.keychain removeItemsMatchingService:service account:account handler:nil]; +} + +- (void)removeAllTokensWithHandler:(void (^)(NSError *error))handler { + NSString *account = FIRInstanceIDAppIdentifier(); + [self.keychain removeItemsMatchingService:kFIRInstanceIDKeychainWildcardIdentifier + account:account + handler:handler]; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDURLQueryItem.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDURLQueryItem.h new file mode 100644 index 0000000000..3a3a1d7cd7 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDURLQueryItem.h @@ -0,0 +1,39 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +// Stand-in for NSURLQueryItem, which is only available on iOS 8.0 and up. +@interface FIRInstanceIDURLQueryItem : NSObject + +@property(nonatomic, readonly) NSString *name; +@property(nonatomic, readonly) NSString *value; + ++ (instancetype)queryItemWithName:(NSString *)name value:(NSString *)value; +- (instancetype)initWithName:(NSString *)name value:(NSString *)value; + +@end + +/** + * Given an array of query items, construct a URL query. On iOS 8.0 and above, this will use + * NSURLQueryItems internally to perform the string creation, and will be done manually in iOS + * 7 and below. + */ +NSString *FIRInstanceIDQueryFromQueryItems(NSArray *queryItems); + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDURLQueryItem.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDURLQueryItem.m new file mode 100644 index 0000000000..59b4865558 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDURLQueryItem.m @@ -0,0 +1,55 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDURLQueryItem.h" + +@implementation FIRInstanceIDURLQueryItem + ++ (instancetype)queryItemWithName:(NSString *)name value:(NSString *)value { + return [[[self class] alloc] initWithName:name value:value]; +} + +- (instancetype)initWithName:(NSString *)name value:(NSString *)value { + self = [super init]; + if (self) { + _name = [name copy]; + _value = [value copy]; + } + return self; +} +@end + +NSString *FIRInstanceIDQueryFromQueryItems(NSArray *queryItems) { + if ([NSURLQueryItem class]) { + // We are iOS 8.0 and above. Convert to NSURLQueryItems and get query that way + // to take advantage of any automatic encoding + NSMutableArray *urlItems = + [NSMutableArray arrayWithCapacity:queryItems.count]; + for (FIRInstanceIDURLQueryItem *queryItem in queryItems) { + [urlItems addObject:[NSURLQueryItem queryItemWithName:queryItem.name value:queryItem.value]]; + } + NSURLComponents *components = [[NSURLComponents alloc] init]; + components.queryItems = urlItems; + return components.query; + } else { + // We are on iOS 7.0. Manually create the query string + NSMutableArray *pairs = [NSMutableArray arrayWithCapacity:queryItems.count]; + for (FIRInstanceIDURLQueryItem *queryItem in queryItems) { + [pairs addObject:[NSString stringWithFormat:@"%@=%@", queryItem.name, queryItem.value]]; + } + return [pairs componentsJoinedByString:@"&"]; + } +} diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDUtilities.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDUtilities.h new file mode 100644 index 0000000000..da6ebad339 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDUtilities.h @@ -0,0 +1,85 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +/// FIRMessaging Class that responds to the FIRMessaging SDK version selector. +/// Verify at runtime if the class exists and implements the required method. +FOUNDATION_EXPORT NSString *const kFIRInstanceIDFCMSDKClassString; + +/// locale key stored in GULUserDefaults +FOUNDATION_EXPORT NSString *const kFIRInstanceIDUserDefaultsKeyLocale; + +#pragma mark - Test Blocks + +/** + * Response block for mock registration requests made during tests. + * + * @param data The data as returned by the mock request. + * @param response The response as returned by the mock request. + * @param error The error if any as returned by the mock request. + */ +typedef void (^FIRInstanceIDURLRequestTestResponseBlock)(NSData *data, + NSURLResponse *response, + NSError *error); + +/** + * Test block to mock registration requests response. + * + * @param request The request to mock response for. + * @param response The response block for the mocked request. + */ +typedef void (^FIRInstanceIDURLRequestTestBlock)(NSURLRequest *request, + FIRInstanceIDURLRequestTestResponseBlock response); + +#pragma mark - URL Helpers + +FOUNDATION_EXPORT NSString *FIRInstanceIDRegisterServer(void); + +#pragma mark - Time + +FOUNDATION_EXPORT int64_t FIRInstanceIDCurrentTimestampInSeconds(void); +FOUNDATION_EXPORT int64_t FIRInstanceIDCurrentTimestampInMilliseconds(void); + +#pragma mark - App Info + +FOUNDATION_EXPORT NSString *FIRInstanceIDCurrentAppVersion(void); +FOUNDATION_EXPORT NSString *FIRInstanceIDAppIdentifier(void); +FOUNDATION_EXPORT NSString *FIRInstanceIDFirebaseAppID(void); + +#pragma mark - Device Info + +FOUNDATION_EXPORT NSString *FIRInstanceIDDeviceModel(void); +FOUNDATION_EXPORT NSString *FIRInstanceIDOperatingSystemVersion(void); +FOUNDATION_EXPORT BOOL FIRInstanceIDHasLocaleChanged(void); + +#pragma mark - Helpers + +FOUNDATION_EXPORT BOOL FIRInstanceIDIsValidGCMScope(NSString *scope); +FOUNDATION_EXPORT NSString *FIRInstanceIDStringForAPNSDeviceToken(NSData *deviceToken); +FOUNDATION_EXPORT NSString *FIRInstanceIDAPNSTupleStringForTokenAndServerType(NSData *deviceToken, + BOOL isSandbox); + +#pragma mark - GCM Helpers +/// Returns the current GCM version if GCM library is found else returns nil. +FOUNDATION_EXPORT NSString *FIRInstanceIDCurrentGCMVersion(void); + +/// Returns the current locale. If GCM is present it queries GCM for a +/// Context Manager specific locale. Otherwise, it returns the system's first +/// preferred language (which may be set independently from locale). If the +/// system returns no preferred languages, this method returns the most common +/// language for the user's given locale. Guaranteed to return a nonnull value. +FOUNDATION_EXPORT NSString *FIRInstanceIDCurrentLocale(void); diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDUtilities.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDUtilities.m new file mode 100644 index 0000000000..1289c7ad82 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDUtilities.m @@ -0,0 +1,195 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDUtilities.h" + +#if TARGET_OS_IOS || TARGET_OS_TV +#import +#endif +#import + +#import +#import +#import "FIRInstanceID.h" +#import "FIRInstanceIDConstants.h" +#import "FIRInstanceIDLogger.h" + +// Convert the macro to a string +#define STR_EXPAND(x) #x +#define STR(x) STR_EXPAND(x) + +static NSString *const kFIRInstanceIDAPNSSandboxPrefix = @"s_"; +static NSString *const kFIRInstanceIDAPNSProdPrefix = @"p_"; + +/// FIRMessaging Class that responds to the FIRMessaging SDK version selector. +/// Verify at runtime if the class exists and implements the required method. +NSString *const kFIRInstanceIDFCMSDKClassString = @"FIRMessaging"; + +/// FIRMessaging selector that returns the current FIRMessaging library version. +static NSString *const kFIRInstanceIDFCMSDKVersionSelectorString = @"FIRMessagingSDKVersion"; + +/// FIRMessaging selector that returns the current device locale. +static NSString *const kFIRInstanceIDFCMSDKLocaleSelectorString = @"FIRMessagingSDKCurrentLocale"; + +NSString *const kFIRInstanceIDUserDefaultsKeyLocale = + @"com.firebase.instanceid.user_defaults.locale"; // locale key stored in GULUserDefaults + +/// Static values which will be populated once retrieved using +/// |FIRInstanceIDRetrieveEnvironmentInfoFromFirebaseCore|. +static NSString *operatingSystemVersion; +static NSString *hardwareDeviceModel; + +#pragma mark - URL Helpers + +NSString *FIRInstanceIDRegisterServer() { + return @"https://fcmtoken.googleapis.com/register"; +} + +#pragma mark - Time + +int64_t FIRInstanceIDCurrentTimestampInSeconds() { + return (int64_t)[[NSDate date] timeIntervalSince1970]; +} + +int64_t FIRInstanceIDCurrentTimestampInMilliseconds() { + return (int64_t)(FIRInstanceIDCurrentTimestampInSeconds() * 1000.0); +} + +#pragma mark - App Info + +NSString *FIRInstanceIDCurrentAppVersion() { + NSString *version = [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"]; + if (![version length]) { + return @""; + } + return version; +} + +NSString *FIRInstanceIDAppIdentifier() { + NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; + if (!bundleIdentifier.length) { + FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeUtilitiesMissingBundleIdentifier, + @"The mainBundle's bundleIdentifier returned '%@'. Bundle identifier " + @"expected to be non-empty.", + bundleIdentifier); + return @""; + } + return bundleIdentifier; +} + +NSString *FIRInstanceIDFirebaseAppID() { + return [FIROptions defaultOptions].googleAppID; +} + +#pragma mark - Device Info +// Get the device model from Firebase Core's App Environment Util +NSString *FIRInstanceIDDeviceModel() { + static dispatch_once_t once; + dispatch_once(&once, ^{ + struct utsname systemInfo; + if (uname(&systemInfo) == 0) { + hardwareDeviceModel = [NSString stringWithUTF8String:systemInfo.machine]; + } + }); + return hardwareDeviceModel; +} + +// Get the system version from Firebase Core's App Environment Util +NSString *FIRInstanceIDOperatingSystemVersion() { +#if TARGET_OS_IOS || TARGET_OS_TV + return [UIDevice currentDevice].systemVersion; +#elif TARGET_OS_OSX + return [NSProcessInfo processInfo].operatingSystemVersionString; +#endif +} + +BOOL FIRInstanceIDHasLocaleChanged() { + NSString *lastLocale = + [[GULUserDefaults standardUserDefaults] stringForKey:kFIRInstanceIDUserDefaultsKeyLocale]; + NSString *currentLocale = FIRInstanceIDCurrentLocale(); + if (lastLocale) { + if ([currentLocale isEqualToString:lastLocale]) { + return NO; + } + } + return YES; +} + +#pragma mark - Helpers + +BOOL FIRInstanceIDIsValidGCMScope(NSString *scope) { + return [scope compare:kFIRInstanceIDScopeFirebaseMessaging + options:NSCaseInsensitiveSearch] == NSOrderedSame; +} + +NSString *FIRInstanceIDStringForAPNSDeviceToken(NSData *deviceToken) { + NSMutableString *APNSToken = [NSMutableString string]; + unsigned char *bytes = (unsigned char *)[deviceToken bytes]; + for (int i = 0; i < (int)deviceToken.length; i++) { + [APNSToken appendFormat:@"%02x", bytes[i]]; + } + return APNSToken; +} + +NSString *FIRInstanceIDAPNSTupleStringForTokenAndServerType(NSData *deviceToken, BOOL isSandbox) { + if (deviceToken == nil) { + // A nil deviceToken leads to an invalid tuple string, so return nil. + return nil; + } + NSString *prefix = isSandbox ? kFIRInstanceIDAPNSSandboxPrefix : kFIRInstanceIDAPNSProdPrefix; + NSString *APNSString = FIRInstanceIDStringForAPNSDeviceToken(deviceToken); + NSString *APNSTupleString = [NSString stringWithFormat:@"%@%@", prefix, APNSString]; + + return APNSTupleString; +} + +#pragma mark - GCM Helpers + +NSString *FIRInstanceIDCurrentGCMVersion() { + Class versionClass = NSClassFromString(kFIRInstanceIDFCMSDKClassString); + SEL versionSelector = NSSelectorFromString(kFIRInstanceIDFCMSDKVersionSelectorString); + if ([versionClass respondsToSelector:versionSelector]) { + IMP getVersionIMP = [versionClass methodForSelector:versionSelector]; + NSString *(*getVersion)(id, SEL) = (void *)getVersionIMP; + return getVersion(versionClass, versionSelector); + } + return nil; +} + +NSString *FIRInstanceIDCurrentLocale() { + Class localeClass = NSClassFromString(kFIRInstanceIDFCMSDKClassString); + SEL localeSelector = NSSelectorFromString(kFIRInstanceIDFCMSDKLocaleSelectorString); + + if ([localeClass respondsToSelector:localeSelector]) { + IMP getLocaleIMP = [localeClass methodForSelector:localeSelector]; + NSString *(*getLocale)(id, SEL) = (void *)getLocaleIMP; + NSString *fcmLocale = getLocale(localeClass, localeSelector); + if (fcmLocale != nil) { + return fcmLocale; + } + } + + NSString *systemLanguage = [[NSLocale preferredLanguages] firstObject]; + if (systemLanguage != nil) { + return systemLanguage; + } + + if (@available(macOS 10.12, iOS 10.0, *)) { + return [NSLocale currentLocale].languageCode; + } else { + return nil; + } +} diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDVersionUtilities.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDVersionUtilities.h new file mode 100644 index 0000000000..ec5a76c5dc --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDVersionUtilities.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +/** + * Parsing utility for InstanceID Library versions. InstanceID lib follows semantic versioning. + * This provides utilities to parse the library versions to enable features and do + * updates based on appropriate library versions. + * + * Some example semantic versions are 1.0.1, 2.1.0, 2.1.1, 2.2.0-alpha1, 2.2.1-beta1 + */ + +FOUNDATION_EXPORT NSString *FIRInstanceIDCurrentLibraryVersion(void); +/// Returns the current Major version of GCM library. +FOUNDATION_EXPORT int FIRInstanceIDCurrentLibraryVersionMajor(void); +/// Returns the current Minor version of GCM library. +FOUNDATION_EXPORT int FIRInstanceIDCurrentLibraryVersionMinor(void); +/// Returns the current Patch version of GCM library. +FOUNDATION_EXPORT int FIRInstanceIDCurrentLibraryVersionPatch(void); +/// Returns YES if current library version is `beta` else NO. +FOUNDATION_EXPORT BOOL FIRInstanceIDCurrentLibraryVersionIsBeta(void); diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDVersionUtilities.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDVersionUtilities.m new file mode 100644 index 0000000000..c2e532a7b2 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDVersionUtilities.m @@ -0,0 +1,85 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceIDVersionUtilities.h" + +// Convert the macro to a string +#define STR(x) STR_EXPAND(x) +#define STR_EXPAND(x) #x + +static NSString *const kSemanticVersioningSeparator = @"."; +static NSString *const kBetaVersionPrefix = @"-beta"; + +static NSString *libraryVersion; + +static int majorVersion; +static int minorVersion; +static int patchVersion; +static int betaVersion; + +void FIRInstanceIDParseCurrentLibraryVersion() { + static NSArray *allVersions; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSMutableString *daylightVersion = + [NSMutableString stringWithUTF8String:STR(FIRInstanceID_LIB_VERSION)]; + // Parse versions + // major, minor, patch[-beta#] + allVersions = [daylightVersion componentsSeparatedByString:kSemanticVersioningSeparator]; + if (allVersions.count == 3) { + majorVersion = [allVersions[0] intValue]; + minorVersion = [allVersions[1] intValue]; + + // Parse patch and beta versions + NSArray *patchAndBetaVersion = + [allVersions[2] componentsSeparatedByString:kBetaVersionPrefix]; + if (patchAndBetaVersion.count == 2) { + patchVersion = [patchAndBetaVersion[0] intValue]; + betaVersion = [patchAndBetaVersion[1] intValue]; + } else if (patchAndBetaVersion.count == 1) { + patchVersion = [patchAndBetaVersion[0] intValue]; + } + } + + // Copy library version + libraryVersion = [daylightVersion copy]; + }); +} + +NSString *FIRInstanceIDCurrentLibraryVersion() { + FIRInstanceIDParseCurrentLibraryVersion(); + return libraryVersion; +} + +int FIRInstanceIDCurrentLibraryVersionMajor() { + FIRInstanceIDParseCurrentLibraryVersion(); + return majorVersion; +} + +int FIRInstanceIDCurrentLibraryVersionMinor() { + FIRInstanceIDParseCurrentLibraryVersion(); + return minorVersion; +} + +int FIRInstanceIDCurrentLibraryVersionPatch() { + FIRInstanceIDParseCurrentLibraryVersion(); + return patchVersion; +} + +BOOL FIRInstanceIDCurrentLibraryVersionIsBeta() { + FIRInstanceIDParseCurrentLibraryVersion(); + return betaVersion > 0; +} diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/NSError+FIRInstanceID.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/NSError+FIRInstanceID.h new file mode 100644 index 0000000000..b533dc4a99 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/NSError+FIRInstanceID.h @@ -0,0 +1,70 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +FOUNDATION_EXPORT NSString *const kFIRInstanceIDDomain; + +typedef NS_ENUM(NSUInteger, FIRInstanceIDErrorCode) { + // Unknown error. + kFIRInstanceIDErrorCodeUnknown = 0, + + // Http related errors. + kFIRInstanceIDErrorCodeAuthentication = 1, + kFIRInstanceIDErrorCodeNoAccess = 2, + kFIRInstanceIDErrorCodeTimeout = 3, + kFIRInstanceIDErrorCodeNetwork = 4, + + // Another operation is in progress. + kFIRInstanceIDErrorCodeOperationInProgress = 5, + + // Failed to perform device check in. + kFIRInstanceIDErrorCodeRegistrarFailedToCheckIn = 6, + + kFIRInstanceIDErrorCodeInvalidRequest = 7, + + // InstanceID generic errors + kFIRInstanceIDErrorCodeMissingDeviceID = 501, + + // InstanceID Token specific errors + kFIRInstanceIDErrorCodeMissingAPNSToken = 1001, + kFIRInstanceIDErrorCodeMissingAPNSServerType = 1002, + kFIRInstanceIDErrorCodeInvalidAuthorizedEntity = 1003, + kFIRInstanceIDErrorCodeInvalidScope = 1004, + kFIRInstanceIDErrorCodeInvalidStart = 1005, + kFIRInstanceIDErrorCodeInvalidKeyPair = 1006, + + // InstanceID Identity specific errors + // Generic InstanceID keypair error + kFIRInstanceIDErrorCodeMissingKeyPair = 2001, + kFIRInstanceIDErrorCodeInvalidKeyPairTags = 2002, + kFIRInstanceIDErrorCodeInvalidKeyPairCreationTime = 2005, + kFIRInstanceIDErrorCodeInvalidIdentity = 2006, + +}; + +@interface NSError (FIRInstanceID) + +@property(nonatomic, readonly) FIRInstanceIDErrorCode instanceIDErrorCode; + ++ (NSError *)errorWithFIRInstanceIDErrorCode:(FIRInstanceIDErrorCode)errorCode; + ++ (NSError *)errorWithFIRInstanceIDErrorCode:(FIRInstanceIDErrorCode)errorCode + userInfo:(NSDictionary *)userInfo; + ++ (NSError *)FIRInstanceIDErrorMissingCheckin; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/NSError+FIRInstanceID.m b/Pods/FirebaseInstanceID/Firebase/InstanceID/NSError+FIRInstanceID.m new file mode 100644 index 0000000000..560a5df0ec --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/NSError+FIRInstanceID.m @@ -0,0 +1,44 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "NSError+FIRInstanceID.h" + +NSString *const kFIRInstanceIDDomain = @"com.firebase.iid"; + +@implementation NSError (FIRInstanceID) + +- (FIRInstanceIDErrorCode)instanceIDErrorCode { + return (FIRInstanceIDErrorCode)self.code; +} + ++ (NSError *)errorWithFIRInstanceIDErrorCode:(FIRInstanceIDErrorCode)errorCode { + return [NSError errorWithFIRInstanceIDErrorCode:errorCode userInfo:nil]; +} + ++ (NSError *)errorWithFIRInstanceIDErrorCode:(FIRInstanceIDErrorCode)errorCode + userInfo:(NSDictionary *)userInfo { + return [NSError errorWithDomain:kFIRInstanceIDDomain code:errorCode userInfo:userInfo]; +} + ++ (NSError *)FIRInstanceIDErrorMissingCheckin { + NSDictionary *userInfo = @{@"msg" : @"Missing device credentials. Retry later."}; + + return [NSError errorWithDomain:kFIRInstanceIDDomain + code:kFIRInstanceIDErrorCodeMissingDeviceID + userInfo:userInfo]; +} + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceID+Private.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceID+Private.h new file mode 100644 index 0000000000..31d4123053 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceID+Private.h @@ -0,0 +1,61 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import + +/** + * @related FIRInstanceIDCheckinService + * + * The completion handler invoked once the fetch from Checkin server finishes. + * For successful fetches we returned checkin information by the checkin service + * and `nil` error, else we return the appropriate error object as reported by the + * Checkin Service. + * + * @param checkinPreferences The checkin preferences as fetched from the server. + * @param error The error object which fetching GServices data. + */ +typedef void (^FIRInstanceIDDeviceCheckinCompletion)( + FIRInstanceIDCheckinPreferences *_Nullable checkinPreferences, NSError *_Nullable error); + +/** + * Private API used by Firebase SDK teams by calling in reflection or internal teams. + */ +@interface FIRInstanceID (Private) + +/** + * Fetches checkin info for the app. If the app has valid cached checkin preferences + * they are returned instead of making a network request. + * + * @param handler The completion handler to invoke once the request has completed. + */ +- (void)fetchCheckinInfoWithHandler:(nullable FIRInstanceIDDeviceCheckinCompletion)handler; + +/** + * Get the InstanceID for the app. If an ID was created before and cached + * successfully we will return that ID. If no cached ID exists we create + * a new ID, cache it and return that. + * + * This is a blocking call and should not really be called on the main thread. + * + * @param error The error object that represents the error while trying to + * retrieve the instance id. + * + * @return The InstanceID for the app. + */ +- (nullable NSString *)appInstanceID:(NSError *_Nullable *_Nullable)error; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceIDCheckinPreferences.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceIDCheckinPreferences.h new file mode 100644 index 0000000000..be3ec572d2 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceIDCheckinPreferences.h @@ -0,0 +1,62 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +/** + * The preferences InstanceID loads from checkin server. The deviceID and secret that checkin + * provides is used to authenticate all future requests to the server. Besides the deviceID + * and secret the other information that checkin provides is stored in a plist on the device. + * The deviceID and secret are persisted in the device keychain. + */ +@interface FIRInstanceIDCheckinPreferences : NSObject + +/** + * DeviceID and secretToken are the checkin auth credentials and are stored in the Keychain. + */ +@property(nonatomic, readonly, copy) NSString *deviceID; +@property(nonatomic, readonly, copy) NSString *secretToken; + +/** + * All the other checkin preferences other than deviceID and secret are stored in a plist. + */ +@property(nonatomic, readonly, copy) NSString *deviceDataVersion; +@property(nonatomic, readonly, copy) NSString *digest; +@property(nonatomic, readonly, copy) NSString *versionInfo; +@property(nonatomic, readonly, assign) int64_t lastCheckinTimestampMillis; + +/** + * The content retrieved from checkin server that should be persisted in a plist. This + * doesn't contain the deviceID and secret which are stored in the Keychain since they + * should be more private. + * + * @return The checkin preferences that should be persisted in a plist. + */ +- (NSDictionary *)checkinPlistContents; + +/** + * Return whether checkin info exists, valid or not. + */ +- (BOOL)hasCheckinInfo; + +/** + * Verify if checkin preferences are valid or not. + * + * @return YES if valid checkin preferences else NO. + */ +- (BOOL)hasValidCheckinInfo; + +@end diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceID_Private.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceID_Private.h new file mode 100644 index 0000000000..d17177ee24 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/Private/FIRInstanceID_Private.h @@ -0,0 +1,67 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class FIRInstanceIDCheckinPreferences; +/** + * Private API used by other Firebase SDKs. + */ +@interface FIRInstanceID () + +@property(nonatomic, readonly, strong) NSString *deviceAuthID; +@property(nonatomic, readonly, strong) NSString *secretToken; +@property(nonatomic, readonly, strong) NSString *versionInfo; + +/** + * Private initializer. + */ +- (instancetype)initPrivately; + +/** + * Returns a Firebase Messaging scoped token for the firebase app. + * + * @return Returns the stored token if the device has registered with Firebase Messaging, otherwise + * returns nil. + */ +- (nullable NSString *)token; + +/** + * Verify if valid checkin preferences have been loaded in memory. + * + * @return YES if valid checkin preferences exist in memory else NO. + */ +- (BOOL)hasValidCheckinInfo; + +/** + * Try to load prefetched checkin preferences from the cache. This supports the use case where + * InstanceID library has already obtained a valid checkin and we should be using that. + * + * This should be used as a last gasp effort to retreive any cached checkin preferences before + * hitting the FIRMessaging backend to retrieve new preferences. + * + * Note this is only required because InstanceID and FIRMessaging both require checkin preferences + * which need to be synced with each other. + * + * @return YES if successfully loaded cached checkin preferences into memory else NO. + */ +- (BOOL)tryToLoadValidCheckinInfo; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/Public/FIRInstanceID.h old mode 100755 new mode 100644 similarity index 95% rename from Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h rename to Pods/FirebaseInstanceID/Firebase/InstanceID/Public/FIRInstanceID.h index 97777e1c32..0f96d910ec --- a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/Public/FIRInstanceID.h @@ -1,3 +1,19 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #import NS_ASSUME_NONNULL_BEGIN @@ -192,14 +208,6 @@ NS_SWIFT_NAME(InstanceID) */ - (void)instanceIDWithHandler:(FIRInstanceIDResultHandler)handler; -/** - * Returns a Firebase Messaging scoped token for the firebase app. - * - * @return Returns the stored token if the device has registered with Firebase Messaging, otherwise - * returns nil. - */ -- (nullable NSString *)token __deprecated_msg("Use instanceIDWithHandler: instead."); - /** * Returns a token that authorizes an Entity (example: cloud service) to perform * an action on behalf of the application identified by Instance ID. @@ -228,7 +236,7 @@ NS_SWIFT_NAME(InstanceID) * passed to the UIApplicationDelegate's * `didRegisterForRemoteNotificationsWithDeviceToken` method. * The value for `apns_sandbox` should be a boolean (or an - * NSNumber representing a BOOL in Objective C) set to true if + * NSNumber representing a BOOL in Objective-C) set to true if * your app is a debug build, which means that the APNs * device token is for the sandbox environment. It should be * set to false otherwise. If the `apns_sandbox` key is not diff --git a/Pods/FirebaseInstanceID/Firebase/InstanceID/Public/FirebaseInstanceID.h b/Pods/FirebaseInstanceID/Firebase/InstanceID/Public/FirebaseInstanceID.h new file mode 100644 index 0000000000..78c9ef1618 --- /dev/null +++ b/Pods/FirebaseInstanceID/Firebase/InstanceID/Public/FirebaseInstanceID.h @@ -0,0 +1,17 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRInstanceID.h" diff --git a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/FirebaseInstanceID b/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/FirebaseInstanceID deleted file mode 100755 index 46aff495d0..0000000000 Binary files a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/FirebaseInstanceID and /dev/null differ diff --git a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h b/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h deleted file mode 100755 index 053ec2b1cf..0000000000 --- a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h +++ /dev/null @@ -1 +0,0 @@ -#import "FIRInstanceID.h" diff --git a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Modules/module.modulemap b/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Modules/module.modulemap deleted file mode 100755 index 2058956c1f..0000000000 --- a/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseInstanceID { - umbrella header "FirebaseInstanceID.h" - export * - module * { export *} - link framework "Security" - link framework "SystemConfiguration"} diff --git a/Pods/FirebaseInstanceID/LICENSE b/Pods/FirebaseInstanceID/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/Pods/FirebaseInstanceID/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/FirebaseInstanceID/README.md b/Pods/FirebaseInstanceID/README.md old mode 100755 new mode 100644 index 25fe2196fb..d0f46e02d5 --- a/Pods/FirebaseInstanceID/README.md +++ b/Pods/FirebaseInstanceID/README.md @@ -1,10 +1,233 @@ -# InstanceID SDK for iOS +# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) -Instance ID provides a unique ID per instance of your apps and also provides a -mechanism to authenticate and authorize actions, like sending messages via -Firebase Cloud Messaging (FCM). +This repository contains a subset of the Firebase iOS SDK source. It currently +includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, +FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and +FirebaseStorage. +The repository also includes GoogleUtilities source. The +[GoogleUtilities](GoogleUtilities/README.md) pod is +a set of utilities used by Firebase and other Google products. -Please visit [our developer -site](https://developers.google.com/instance-id/) for integration instructions, -documentation, support information, and terms of service. +Firebase is an app development platform with tools to help you build, grow and +monetize your app. More information about Firebase can be found at +[https://firebase.google.com](https://firebase.google.com). + +## Installation + +See the three subsections for details about three different installation methods. +1. [Standard pod install](README.md#standard-pod-install) +1. [Installing from the GitHub repo](README.md#installing-from-github) +1. [Experimental Carthage](README.md#carthage-ios-only) + +### Standard pod install + +Go to +[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). + +### Installing from GitHub + +For releases starting with 5.0.0, the source for each release is also deployed +to CocoaPods master and available via standard +[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). + +These instructions can be used to access the Firebase repo at other branches, +tags, or commits. + +#### Background + +See +[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) +for instructions and options about overriding pod source locations. + +#### Accessing Firebase Source Snapshots + +All of the official releases are tagged in this repo and available via CocoaPods. To access a local +source snapshot or unreleased branch, use Podfile directives like the following: + +To access FirebaseFirestore via a branch: +``` +pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +``` + +To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: + +``` +pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' +pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' +``` + +### Carthage (iOS only) + +Instructions for the experimental Carthage distribution are at +[Carthage](Carthage.md). + +### Rome + +Instructions for installing binary frameworks via +[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). + +## Development + +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Note: If the CocoaPods cache is out of date, you may need to run +`pod repo update` before the `pod gen` command. + +Firestore has a self contained Xcode project. See +[Firestore/README.md](Firestore/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: + +``` +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb +``` + +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. + +To update this section, find the versions of clang-format and swiftformat.rb to +match the versions in the CI failure logs +[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). + +### Running Unit Tests + +Select a scheme and press Command-u to build a component and run its unit tests. + +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + +### Running Sample Apps +In order to run the sample apps and integration tests, you'll need valid +`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist +files without real values, but can be replaced with real plist files. To get your own +`GoogleService-Info.plist` files: + +1. Go to the [Firebase Console](https://console.firebase.google.com/) +2. Create a new Firebase project, if you don't already have one +3. For each sample app you want to test, create a new Firebase app with the sample app's bundle +identifier (e.g. `com.google.Database-Example`) +4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file +(e.g. in [Example/Database/App/](Example/Database/App/)); + +Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require +special Apple capabilities, and you will have to change the sample app to use a unique bundle +identifier that you can control in your own Apple Developer account. + +## Specific Component Instructions +See the sections below for any special instructions for those components. + +### Firebase Auth + +If you're doing specific Firebase Auth development, see +[the Auth Sample README](Example/Auth/README.md) for instructions about +building and running the FirebaseAuth pod along with various samples and tests. + +### Firebase Database + +To run the Database Integration tests, make your database authentication rules +[public](https://firebase.google.com/docs/database/security/quickstart). + +### Firebase Storage + +To run the Storage Integration tests, follow the instructions in +[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). + +#### Push Notifications + +Push notifications can only be delivered to specially provisioned App IDs in the developer portal. +In order to actually test receiving push notifications, you will need to: + +1. Change the bundle identifier of the sample app to something you own in your Apple Developer +account, and enable that App ID for push notifications. +2. You'll also need to +[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) +at **Project Settings > Cloud Messaging > [Your Firebase App]**. +3. Ensure your iOS device is added to your Apple Developer portal as a test device. + +#### iOS Simulator + +The iOS Simulator cannot register for remote notifications, and will not receive push notifications. +In order to receive push notifications, you'll have to follow the steps above and run the app on a +physical device. + +## Community Supported Efforts + +We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are +very grateful! We'd like to empower as many developers as we can to be able to use Firebase and +participate in the Firebase community. + +### macOS and tvOS +Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, +FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, +FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. + +For tvOS, checkout the [Sample](Example/tvOSSample). + +Keep in mind that macOS and tvOS are not officially supported by Firebase, and this repository is +actively developed primarily for iOS. While we can catch basic unit test issues with Travis, there +may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter +this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). + +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: + +``` +pod 'FirebaseABTesting' +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseRemoteConfig' +pod 'FirebaseStorage' +``` + +## Roadmap + +See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +plans and directions. + +## Contributing + +See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase +iOS SDK. + +## License + +The contents of this repository is licensed under the +[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +Your use of Firebase is governed by the +[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement b/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement index fddcac6685..375453c196 100755 Binary files a/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement and b/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement differ diff --git a/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap b/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap index ea1e687ddc..de80e9eaeb 100755 --- a/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap +++ b/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap @@ -1,9 +1,11 @@ framework module GoogleAppMeasurement { export * - module * { export *} + module * { export * } link "sqlite3" link "z" + link framework "CoreData" link framework "Security" link framework "StoreKit" link framework "SystemConfiguration" - link framework "UIKit"} + link framework "UIKit" +} diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m new file mode 100644 index 0000000000..3e5f57b578 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m @@ -0,0 +1,36 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Public/GDTCORAssert.h" + +GDTCORAssertionBlock GDTCORAssertionBlockToRunInstead(void) { + // This class is only compiled in by unit tests, and this should fail quickly in optimized builds. + Class GDTCORAssertClass = NSClassFromString(@"GDTCORAssertHelper"); + if (__builtin_expect(!!GDTCORAssertClass, 0)) { + SEL assertionBlockSEL = NSSelectorFromString(@"assertionBlock"); + if (assertionBlockSEL) { + IMP assertionBlockIMP = [GDTCORAssertClass methodForSelector:assertionBlockSEL]; + if (assertionBlockIMP) { + GDTCORAssertionBlock assertionBlock = ((GDTCORAssertionBlock(*)(id, SEL))assertionBlockIMP)( + GDTCORAssertClass, assertionBlockSEL); + if (assertionBlock) { + return assertionBlock; + } + } + } + } + return NULL; +} diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m new file mode 100644 index 0000000000..f0ea8ab606 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m @@ -0,0 +1,164 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Public/GDTCORClock.h" + +#import + +// Using a monotonic clock is necessary because CFAbsoluteTimeGetCurrent(), NSDate, and related all +// are subject to drift. That it to say, multiple consecutive calls do not always result in a +// time that is in the future. Clocks may be adjusted by the user, NTP, or any number of external +// factors. This class attempts to determine the wall-clock time at the time of the event by +// capturing the kernel start and time since boot to determine a wallclock time in UTC. +// +// Timezone offsets at the time of a snapshot are also captured in order to provide local-time +// details. Other classes in this library depend on comparing times at some time in the future to +// a time captured in the past, and this class needs to provide a mechanism to do that. +// +// TL;DR: This class attempts to accomplish two things: 1. Provide accurate event times. 2. Provide +// a monotonic clock mechanism to accurately check if some clock snapshot was before or after +// by using a shared reference point (kernel boot time). +// +// Note: Much of the mach time stuff doesn't work properly in the simulator. So this class can be +// difficult to unit test. + +/** Returns the kernel boottime property from sysctl. + * + * Inspired by https://stackoverflow.com/a/40497811 + * + * @return The KERN_BOOTTIME property from sysctl, in nanoseconds. + */ +static int64_t KernelBootTimeInNanoseconds() { + // Caching the result is not possible because clock drift would not be accounted for. + struct timeval boottime; + int mib[2] = {CTL_KERN, KERN_BOOTTIME}; + size_t size = sizeof(boottime); + int rc = sysctl(mib, 2, &boottime, &size, NULL, 0); + if (rc != 0) { + return 0; + } + return (int64_t)boottime.tv_sec * NSEC_PER_MSEC + (int64_t)boottime.tv_usec; +} + +/** Returns value of gettimeofday, in nanoseconds. + * + * Inspired by https://stackoverflow.com/a/40497811 + * + * @return The value of gettimeofday, in nanoseconds. + */ +static int64_t UptimeInNanoseconds() { + int64_t before_now; + int64_t after_now; + struct timeval now; + + before_now = KernelBootTimeInNanoseconds(); + // Addresses a race condition in which the system time has updated, but the boottime has not. + do { + gettimeofday(&now, NULL); + after_now = KernelBootTimeInNanoseconds(); + } while (after_now != before_now); + return (int64_t)now.tv_sec * NSEC_PER_MSEC + (int64_t)now.tv_usec - before_now; +} + +// TODO: Consider adding a 'trustedTime' property that can be populated by the response from a BE. +@implementation GDTCORClock + +- (instancetype)init { + self = [super init]; + if (self) { + _kernelBootTime = KernelBootTimeInNanoseconds(); + _uptime = UptimeInNanoseconds(); + _timeMillis = + (int64_t)((CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) * NSEC_PER_USEC); + CFTimeZoneRef timeZoneRef = CFTimeZoneCopySystem(); + _timezoneOffsetSeconds = CFTimeZoneGetSecondsFromGMT(timeZoneRef, 0); + CFRelease(timeZoneRef); + } + return self; +} + ++ (GDTCORClock *)snapshot { + return [[GDTCORClock alloc] init]; +} + ++ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture { + GDTCORClock *snapshot = [self snapshot]; + snapshot->_timeMillis += millisInTheFuture; + return snapshot; +} + +- (BOOL)isAfter:(GDTCORClock *)otherClock { + // These clocks are trivially comparable when they share a kernel boot time. + if (_kernelBootTime == otherClock->_kernelBootTime) { + int64_t timeDiff = (_timeMillis + _timezoneOffsetSeconds) - + (otherClock->_timeMillis + otherClock->_timezoneOffsetSeconds); + return timeDiff > 0; + } else { + int64_t kernelBootTimeDiff = otherClock->_kernelBootTime - _kernelBootTime; + // This isn't a great solution, but essentially, if the other clock's boot time is 'later', NO + // is returned. This can be altered by changing the system time and rebooting. + return kernelBootTimeDiff < 0 ? YES : NO; + } +} + +- (NSUInteger)hash { + return [@(_kernelBootTime) hash] ^ [@(_uptime) hash] ^ [@(_timeMillis) hash] ^ + [@(_timezoneOffsetSeconds) hash]; +} + +- (BOOL)isEqual:(id)object { + return [self hash] == [object hash]; +} + +#pragma mark - NSSecureCoding + +/** NSKeyedCoder key for timeMillis property. */ +static NSString *const kGDTCORClockTimeMillisKey = @"GDTCORClockTimeMillis"; + +/** NSKeyedCoder key for timezoneOffsetMillis property. */ +static NSString *const kGDTCORClockTimezoneOffsetSeconds = @"GDTCORClockTimezoneOffsetSeconds"; + +/** NSKeyedCoder key for _kernelBootTime ivar. */ +static NSString *const kGDTCORClockKernelBootTime = @"GDTCORClockKernelBootTime"; + +/** NSKeyedCoder key for _uptime ivar. */ +static NSString *const kGDTCORClockUptime = @"GDTCORClockUptime"; + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super init]; + if (self) { + // TODO: If the kernelBootTime is more recent, we need to change the kernel boot time and + // uptimeMillis ivars + _timeMillis = [aDecoder decodeInt64ForKey:kGDTCORClockTimeMillisKey]; + _timezoneOffsetSeconds = [aDecoder decodeInt64ForKey:kGDTCORClockTimezoneOffsetSeconds]; + _kernelBootTime = [aDecoder decodeInt64ForKey:kGDTCORClockKernelBootTime]; + _uptime = [aDecoder decodeInt64ForKey:kGDTCORClockUptime]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeInt64:_timeMillis forKey:kGDTCORClockTimeMillisKey]; + [aCoder encodeInt64:_timezoneOffsetSeconds forKey:kGDTCORClockTimezoneOffsetSeconds]; + [aCoder encodeInt64:_kernelBootTime forKey:kGDTCORClockKernelBootTime]; + [aCoder encodeInt64:_uptime forKey:kGDTCORClockUptime]; +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m new file mode 100644 index 0000000000..1626b6f0c4 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m @@ -0,0 +1,36 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Public/GDTCORConsoleLogger.h" + +/** The console logger prefix. */ +static NSString *kGDTCORConsoleLogger = @"[GoogleDataTransport]"; + +NSString *GDTCORMessageCodeEnumToString(GDTCORMessageCode code) { + return [[NSString alloc] initWithFormat:@"I-GDTCOR%06ld", (long)code]; +} + +void GDTCORLog(GDTCORMessageCode code, NSString *format, ...) { +// Don't log anything in not debug builds. +#ifndef NDEBUG + NSString *logFormat = [NSString stringWithFormat:@"%@[%@] %@", kGDTCORConsoleLogger, + GDTCORMessageCodeEnumToString(code), format]; + va_list args; + va_start(args, format); + NSLogv(logFormat, args); + va_end(args); +#endif // NDEBUG +} diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m new file mode 100644 index 0000000000..33c3f1521e --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m @@ -0,0 +1,64 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@implementation GDTCORDataFuture + +- (instancetype)initWithFileURL:(NSURL *)fileURL { + self = [super init]; + if (self) { + _fileURL = fileURL; + } + return self; +} + +- (BOOL)isEqual:(id)object { + return [self hash] == [object hash]; +} + +- (NSUInteger)hash { + // In reality, only one of these should be populated. + return [_fileURL hash] ^ [_originalData hash]; +} + +#pragma mark - NSSecureCoding + +/** Coding key for _fileURL ivar. */ +static NSString *kGDTCORDataFutureFileURLKey = @"GDTCORDataFutureFileURLKey"; + +/** Coding key for _data ivar. */ +static NSString *kGDTCORDataFutureDataKey = @"GDTCORDataFutureDataKey"; + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { + [aCoder encodeObject:_fileURL forKey:kGDTCORDataFutureFileURLKey]; + [aCoder encodeObject:_originalData forKey:kGDTCORDataFutureDataKey]; +} + +- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { + self = [self init]; + if (self) { + _fileURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:kGDTCORDataFutureFileURLKey]; + _originalData = [aDecoder decodeObjectOfClass:[NSData class] forKey:kGDTCORDataFutureDataKey]; + } + return self; +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m new file mode 100644 index 0000000000..0b781d66dd --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m @@ -0,0 +1,119 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import + +#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" + +@implementation GDTCOREvent + +- (nullable instancetype)initWithMappingID:(NSString *)mappingID target:(NSInteger)target { + GDTCORAssert(mappingID.length > 0, @"Please give a valid mapping ID"); + GDTCORAssert(target > 0, @"A target cannot be negative or 0"); + if (mappingID == nil || mappingID.length == 0 || target <= 0) { + return nil; + } + self = [super init]; + if (self) { + _mappingID = mappingID; + _target = target; + _qosTier = GDTCOREventQosDefault; + } + return self; +} + +- (instancetype)copy { + GDTCOREvent *copy = [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target]; + copy.dataObject = _dataObject; + copy.dataObjectTransportBytes = _dataObjectTransportBytes; + copy.qosTier = _qosTier; + copy.clockSnapshot = _clockSnapshot; + copy.customPrioritizationParams = _customPrioritizationParams; + return copy; +} + +- (NSUInteger)hash { + // This loses some precision, but it's probably fine. + NSUInteger mappingIDHash = [_mappingID hash]; + NSUInteger timeHash = [_clockSnapshot hash]; + NSUInteger dataObjectTransportBytesHash = [_dataObjectTransportBytes hash]; + return mappingIDHash ^ _target ^ dataObjectTransportBytesHash ^ _qosTier ^ timeHash; +} + +- (BOOL)isEqual:(id)object { + return [self hash] == [object hash]; +} + +- (void)setDataObject:(id)dataObject { + // If you're looking here because of a performance issue in -transportBytes slowing the assignment + // of -dataObject, one way to address this is to add a queue to this class, + // dispatch_(barrier_ if concurrent)async here, and implement the getter with a dispatch_sync. + if (dataObject != _dataObject) { + _dataObject = dataObject; + _dataObjectTransportBytes = [dataObject transportBytes]; + } +} + +- (GDTCORStoredEvent *)storedEventWithDataFuture:(GDTCORDataFuture *)dataFuture { + return [[GDTCORStoredEvent alloc] initWithEvent:self dataFuture:dataFuture]; +} + +#pragma mark - NSSecureCoding and NSCoding Protocols + +/** NSCoding key for mappingID property. */ +static NSString *mappingIDKey = @"_mappingID"; + +/** NSCoding key for target property. */ +static NSString *targetKey = @"_target"; + +/** NSCoding key for dataObjectTransportBytes property. */ +static NSString *dataObjectTransportBytesKey = @"_dataObjectTransportBytesKey"; + +/** NSCoding key for qosTier property. */ +static NSString *qosTierKey = @"_qosTier"; + +/** NSCoding key for clockSnapshot property. */ +static NSString *clockSnapshotKey = @"_clockSnapshot"; + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + NSString *mappingID = [aDecoder decodeObjectOfClass:[NSObject class] forKey:mappingIDKey]; + NSInteger target = [aDecoder decodeIntegerForKey:targetKey]; + self = [self initWithMappingID:mappingID target:target]; + if (self) { + _dataObjectTransportBytes = [aDecoder decodeObjectOfClass:[NSData class] + forKey:dataObjectTransportBytesKey]; + _qosTier = [aDecoder decodeIntegerForKey:qosTierKey]; + _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:clockSnapshotKey]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeObject:_mappingID forKey:mappingIDKey]; + [aCoder encodeInteger:_target forKey:targetKey]; + [aCoder encodeObject:_dataObjectTransportBytes forKey:dataObjectTransportBytesKey]; + [aCoder encodeInteger:_qosTier forKey:qosTierKey]; + [aCoder encodeObject:_clockSnapshot forKey:clockSnapshotKey]; +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m new file mode 100644 index 0000000000..dab1f50dcb --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m @@ -0,0 +1,119 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Public/GDTCORLifecycle.h" + +#import + +#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" +#import "GDTCORLibrary/Private/GDTCORStorage_Private.h" +#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h" +#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" + +@implementation GDTCORLifecycle + ++ (void)load { + [self sharedInstance]; +} + +/** Creates/returns the singleton instance of this class. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance { + static GDTCORLifecycle *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[GDTCORLifecycle alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(applicationDidEnterBackground:) + name:kGDTCORApplicationDidEnterBackgroundNotification + object:nil]; + [notificationCenter addObserver:self + selector:@selector(applicationWillEnterForeground:) + name:kGDTCORApplicationWillEnterForegroundNotification + object:nil]; + + NSString *name = kGDTCORApplicationWillTerminateNotification; + [notificationCenter addObserver:self + selector:@selector(applicationWillTerminate:) + name:name + object:nil]; + } + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)applicationDidEnterBackground:(NSNotification *)notification { + GDTCORApplication *application = [GDTCORApplication sharedApplication]; + if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { + [[GDTCORTransformer sharedInstance] appWillBackground:application]; + } + if ([[GDTCORStorage sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { + [[GDTCORStorage sharedInstance] appWillBackground:application]; + } + if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { + [[GDTCORUploadCoordinator sharedInstance] appWillBackground:application]; + } + if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { + [[GDTCORRegistrar sharedInstance] appWillBackground:application]; + } +} + +- (void)applicationWillEnterForeground:(NSNotification *)notification { + GDTCORApplication *application = [GDTCORApplication sharedApplication]; + if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { + [[GDTCORTransformer sharedInstance] appWillForeground:application]; + } + if ([[GDTCORStorage sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { + [[GDTCORStorage sharedInstance] appWillForeground:application]; + } + if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { + [[GDTCORUploadCoordinator sharedInstance] appWillForeground:application]; + } + if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { + [[GDTCORRegistrar sharedInstance] appWillForeground:application]; + } +} + +- (void)applicationWillTerminate:(NSNotification *)notification { + GDTCORApplication *application = [GDTCORApplication sharedApplication]; + if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { + [[GDTCORTransformer sharedInstance] appWillTerminate:application]; + } + if ([[GDTCORStorage sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { + [[GDTCORStorage sharedInstance] appWillTerminate:application]; + } + if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { + [[GDTCORUploadCoordinator sharedInstance] appWillTerminate:application]; + } + if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { + [[GDTCORRegistrar sharedInstance] appWillTerminate:application]; + } +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m new file mode 100644 index 0000000000..6d0937197d --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m @@ -0,0 +1,193 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid = 0; + +NSString *const kGDTCORApplicationDidEnterBackgroundNotification = + @"GDTCORApplicationDidEnterBackgroundNotification"; + +NSString *const kGDTCORApplicationWillEnterForegroundNotification = + @"GDTCORApplicationWillEnterForegroundNotification"; + +NSString *const kGDTCORApplicationWillTerminateNotification = + @"GDTCORApplicationWillTerminateNotification"; + +BOOL GDTCORReachabilityFlagsContainWWAN(SCNetworkReachabilityFlags flags) { +#if TARGET_OS_IOS + return (flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN; +#else + return NO; +#endif // TARGET_OS_IOS +} + +@interface GDTCORApplication () +/** + Private flag to match the existing `readonly` public flag. This will be accurate for all platforms, + since we handle each platform's lifecycle notifications separately. + */ +@property(atomic, readwrite) BOOL isRunningInBackground; + +@end + +@implementation GDTCORApplication + ++ (void)load { +#if TARGET_OS_IOS || TARGET_OS_TV + // If this asserts, please file a bug at https://github.com/firebase/firebase-ios-sdk/issues. + GDTCORFatalAssert( + GDTCORBackgroundIdentifierInvalid == UIBackgroundTaskInvalid, + @"GDTCORBackgroundIdentifierInvalid and UIBackgroundTaskInvalid should be the same."); +#endif + [self sharedApplication]; +} + ++ (nullable GDTCORApplication *)sharedApplication { + static GDTCORApplication *application; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + application = [[GDTCORApplication alloc] init]; + }); + return application; +} + +- (instancetype)init { + self = [super init]; + if (self) { + // This class will be instantiated in the foreground. + _isRunningInBackground = NO; + +#if TARGET_OS_IOS || TARGET_OS_TV + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(iOSApplicationDidEnterBackground:) + name:UIApplicationDidEnterBackgroundNotification + object:nil]; + [notificationCenter addObserver:self + selector:@selector(iOSApplicationWillEnterForeground:) + name:UIApplicationWillEnterForegroundNotification + object:nil]; + + NSString *name = UIApplicationWillTerminateNotification; + [notificationCenter addObserver:self + selector:@selector(iOSApplicationWillTerminate:) + name:name + object:nil]; + +#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 + if (@available(iOS 13, tvOS 13.0, *)) { + [notificationCenter addObserver:self + selector:@selector(iOSApplicationWillEnterForeground:) + name:UISceneWillEnterForegroundNotification + object:nil]; + [notificationCenter addObserver:self + selector:@selector(iOSApplicationDidEnterBackground:) + name:UISceneWillDeactivateNotification + object:nil]; + } +#endif // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 + +#elif TARGET_OS_OSX + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(macOSApplicationWillTerminate:) + name:NSApplicationWillTerminateNotification + object:nil]; +#endif // TARGET_OS_IOS || TARGET_OS_TV + } + return self; +} + +- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name + expirationHandler:(void (^)(void))handler { + return [[self sharedApplicationForBackgroundTask] beginBackgroundTaskWithName:name + expirationHandler:handler]; +} + +- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID { + if (bgID != GDTCORBackgroundIdentifierInvalid) { + [[self sharedApplicationForBackgroundTask] endBackgroundTask:bgID]; + } +} + +#pragma mark - App environment helpers + +- (BOOL)isAppExtension { +#if TARGET_OS_IOS || TARGET_OS_TV + BOOL appExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; + return appExtension; +#elif TARGET_OS_OSX + return NO; +#endif +} + +/** Returns a UIApplication instance if on the appropriate platform. + * + * @return The shared UIApplication if on the appropriate platform. + */ +#if TARGET_OS_IOS || TARGET_OS_TV +- (nullable UIApplication *)sharedApplicationForBackgroundTask { +#else +- (nullable id)sharedApplicationForBackgroundTask { +#endif + if ([self isAppExtension]) { + return nil; + } + id sharedApplication = nil; + Class uiApplicationClass = NSClassFromString(@"UIApplication"); + if (uiApplicationClass && + [uiApplicationClass respondsToSelector:(NSSelectorFromString(@"sharedApplication"))]) { + sharedApplication = [uiApplicationClass sharedApplication]; + } + return sharedApplication; +} + +#pragma mark - UIApplicationDelegate + +#if TARGET_OS_IOS || TARGET_OS_TV +- (void)iOSApplicationDidEnterBackground:(NSNotification *)notif { + _isRunningInBackground = YES; + + NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; + [notifCenter postNotificationName:kGDTCORApplicationDidEnterBackgroundNotification object:nil]; +} + +- (void)iOSApplicationWillEnterForeground:(NSNotification *)notif { + _isRunningInBackground = NO; + + NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; + [notifCenter postNotificationName:kGDTCORApplicationWillEnterForegroundNotification object:nil]; +} + +- (void)iOSApplicationWillTerminate:(NSNotification *)notif { + NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; + [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil]; +} +#endif // TARGET_OS_IOS || TARGET_OS_TV + +#pragma mark - NSApplicationDelegate + +#if TARGET_OS_OSX +- (void)macOSApplicationWillTerminate:(NSNotification *)notif { + NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; + [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil]; +} +#endif // TARGET_OS_OSX + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m new file mode 100644 index 0000000000..0796ead957 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m @@ -0,0 +1,112 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Private/GDTCORReachability.h" +#import "GDTCORLibrary/Private/GDTCORReachability_Private.h" + +#import + +#import + +/** Sets the _callbackFlag ivar whenever the network changes. + * + * @param reachability The reachability object calling back. + * @param flags The new flag values. + * @param info Any data that might be passed in by the callback. + */ +static void GDTCORReachabilityCallback(SCNetworkReachabilityRef reachability, + SCNetworkReachabilityFlags flags, + void *info); + +@implementation GDTCORReachability { + /** The reachability object. */ + SCNetworkReachabilityRef _reachabilityRef; + + /** The queue on which callbacks and all work will occur. */ + dispatch_queue_t _reachabilityQueue; + + /** Flags specified by reachability callbacks. */ + SCNetworkConnectionFlags _callbackFlags; +} + ++ (void)load { + [self sharedInstance]; +} + ++ (instancetype)sharedInstance { + static GDTCORReachability *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[GDTCORReachability alloc] init]; + }); + return sharedInstance; +} + ++ (SCNetworkReachabilityFlags)currentFlags { + __block SCNetworkReachabilityFlags currentFlags; + dispatch_sync([GDTCORReachability sharedInstance] -> _reachabilityQueue, ^{ + GDTCORReachability *reachability = [GDTCORReachability sharedInstance]; + currentFlags = reachability->_flags ? reachability->_flags : reachability->_callbackFlags; + }); + return currentFlags; +} + +- (instancetype)init { + self = [super init]; + if (self) { + struct sockaddr_in zeroAddress; + bzero(&zeroAddress, sizeof(zeroAddress)); + zeroAddress.sin_len = sizeof(zeroAddress); + zeroAddress.sin_family = AF_INET; + + _reachabilityQueue = + dispatch_queue_create("com.google.GDTCORReachability", DISPATCH_QUEUE_SERIAL); + _reachabilityRef = SCNetworkReachabilityCreateWithAddress( + kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress); + Boolean success = SCNetworkReachabilitySetDispatchQueue(_reachabilityRef, _reachabilityQueue); + if (!success) { + GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@", @"The reachability queue wasn't set."); + } + success = SCNetworkReachabilitySetCallback(_reachabilityRef, GDTCORReachabilityCallback, NULL); + if (!success) { + GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@", + @"The reachability callback wasn't set."); + } + + // Get the initial set of flags. + dispatch_async(_reachabilityQueue, ^{ + Boolean valid = SCNetworkReachabilityGetFlags(self->_reachabilityRef, &self->_flags); + if (!valid) { + self->_flags = 0; + } + }); + } + return self; +} + +- (void)setCallbackFlags:(SCNetworkReachabilityFlags)flags { + if (_callbackFlags != flags) { + self->_callbackFlags = flags; + } +} + +@end + +static void GDTCORReachabilityCallback(SCNetworkReachabilityRef reachability, + SCNetworkReachabilityFlags flags, + void *info) { + [[GDTCORReachability sharedInstance] setCallbackFlags:flags]; +} diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m new file mode 100644 index 0000000000..65335c5a92 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m @@ -0,0 +1,140 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Public/GDTCORRegistrar.h" + +#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" + +@implementation GDTCORRegistrar { + /** Backing ivar for targetToUploader property. */ + NSMutableDictionary> *_targetToUploader; + + /** Backing ivar for targetToPrioritizer property. */ + NSMutableDictionary> *_targetToPrioritizer; +} + ++ (instancetype)sharedInstance { + static GDTCORRegistrar *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[GDTCORRegistrar alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _registrarQueue = + dispatch_queue_create("com.google.GDTCORRegistrar", DISPATCH_QUEUE_CONCURRENT); + _targetToPrioritizer = [[NSMutableDictionary alloc] init]; + _targetToUploader = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)registerUploader:(id)backend target:(GDTCORTarget)target { + __weak GDTCORRegistrar *weakSelf = self; + dispatch_barrier_async(_registrarQueue, ^{ + GDTCORRegistrar *strongSelf = weakSelf; + if (strongSelf) { + strongSelf->_targetToUploader[@(target)] = backend; + } + }); +} + +- (void)registerPrioritizer:(id)prioritizer target:(GDTCORTarget)target { + __weak GDTCORRegistrar *weakSelf = self; + dispatch_barrier_async(_registrarQueue, ^{ + GDTCORRegistrar *strongSelf = weakSelf; + if (strongSelf) { + strongSelf->_targetToPrioritizer[@(target)] = prioritizer; + } + }); +} + +- (NSMutableDictionary> *)targetToUploader { + __block NSMutableDictionary> *targetToUploader; + __weak GDTCORRegistrar *weakSelf = self; + dispatch_sync(_registrarQueue, ^{ + GDTCORRegistrar *strongSelf = weakSelf; + if (strongSelf) { + targetToUploader = strongSelf->_targetToUploader; + } + }); + return targetToUploader; +} + +- (NSMutableDictionary> *)targetToPrioritizer { + __block NSMutableDictionary> *targetToPrioritizer; + __weak GDTCORRegistrar *weakSelf = self; + dispatch_sync(_registrarQueue, ^{ + GDTCORRegistrar *strongSelf = weakSelf; + if (strongSelf) { + targetToPrioritizer = strongSelf->_targetToPrioritizer; + } + }); + return targetToPrioritizer; +} + +#pragma mark - GDTCORLifecycleProtocol + +- (void)appWillBackground:(nonnull GDTCORApplication *)app { + dispatch_async(_registrarQueue, ^{ + for (id uploader in [self->_targetToUploader allValues]) { + if ([uploader respondsToSelector:@selector(appWillBackground:)]) { + [uploader appWillBackground:app]; + } + } + for (id prioritizer in [self->_targetToPrioritizer allValues]) { + if ([prioritizer respondsToSelector:@selector(appWillBackground:)]) { + [prioritizer appWillBackground:app]; + } + } + }); +} + +- (void)appWillForeground:(nonnull GDTCORApplication *)app { + dispatch_async(_registrarQueue, ^{ + for (id uploader in [self->_targetToUploader allValues]) { + if ([uploader respondsToSelector:@selector(appWillForeground:)]) { + [uploader appWillForeground:app]; + } + } + for (id prioritizer in [self->_targetToPrioritizer allValues]) { + if ([prioritizer respondsToSelector:@selector(appWillForeground:)]) { + [prioritizer appWillForeground:app]; + } + } + }); +} + +- (void)appWillTerminate:(nonnull GDTCORApplication *)app { + dispatch_sync(_registrarQueue, ^{ + for (id uploader in [self->_targetToUploader allValues]) { + if ([uploader respondsToSelector:@selector(appWillTerminate:)]) { + [uploader appWillTerminate:app]; + } + } + for (id prioritizer in [self->_targetToPrioritizer allValues]) { + if ([prioritizer respondsToSelector:@selector(appWillTerminate:)]) { + [prioritizer appWillTerminate:app]; + } + } + }); +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStorage.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStorage.m new file mode 100644 index 0000000000..6c2ee53ca9 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStorage.m @@ -0,0 +1,324 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Private/GDTCORStorage.h" +#import "GDTCORLibrary/Private/GDTCORStorage_Private.h" + +#import +#import +#import +#import +#import + +#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" +#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" +#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" + +/** Creates and/or returns a singleton NSString that is the shared storage path. + * + * @return The SDK event storage path. + */ +static NSString *GDTCORStoragePath() { + static NSString *storagePath; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *cachePath = + NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; + storagePath = [NSString stringWithFormat:@"%@/google-sdks-events", cachePath]; + }); + return storagePath; +} + +@implementation GDTCORStorage + ++ (NSString *)archivePath { + static NSString *archivePath; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + archivePath = [GDTCORStoragePath() stringByAppendingPathComponent:@"GDTCORStorageArchive"]; + }); + return archivePath; +} + ++ (instancetype)sharedInstance { + static GDTCORStorage *sharedStorage; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedStorage = [[GDTCORStorage alloc] init]; + }); + return sharedStorage; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _storageQueue = dispatch_queue_create("com.google.GDTCORStorage", DISPATCH_QUEUE_SERIAL); + _targetToEventSet = [[NSMutableDictionary alloc] init]; + _storedEvents = [[NSMutableOrderedSet alloc] init]; + _uploadCoordinator = [GDTCORUploadCoordinator sharedInstance]; + } + return self; +} + +- (void)storeEvent:(GDTCOREvent *)event { + if (event == nil) { + return; + } + + [self createEventDirectoryIfNotExists]; + + __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; + bgID = [[GDTCORApplication sharedApplication] + beginBackgroundTaskWithName:@"GDTStorage" + expirationHandler:^{ + // End the background task if it's still valid. + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + }]; + + dispatch_async(_storageQueue, ^{ + // Check that a backend implementation is available for this target. + NSInteger target = event.target; + + // Check that a prioritizer is available for this target. + id prioritizer = + [GDTCORRegistrar sharedInstance].targetToPrioritizer[@(target)]; + GDTCORAssert(prioritizer, @"There's no prioritizer registered for the given target."); + + // Write the transport bytes to disk, get a filename. + GDTCORAssert(event.dataObjectTransportBytes, @"The event should have been serialized to bytes"); + NSURL *eventFile = [self saveEventBytesToDisk:event.dataObjectTransportBytes + eventHash:event.hash]; + GDTCORDataFuture *dataFuture = [[GDTCORDataFuture alloc] initWithFileURL:eventFile]; + GDTCORStoredEvent *storedEvent = [event storedEventWithDataFuture:dataFuture]; + + // Add event to tracking collections. + [self addEventToTrackingCollections:storedEvent]; + + // Have the prioritizer prioritize the event. + [prioritizer prioritizeEvent:storedEvent]; + + // Check the QoS, if it's high priority, notify the target that it has a high priority event. + if (event.qosTier == GDTCOREventQoSFast) { + [self.uploadCoordinator forceUploadForTarget:target]; + } + + // Write state to disk if we're in the background. + if ([[GDTCORApplication sharedApplication] isRunningInBackground]) { + if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) { + NSError *error; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self + requiringSecureCoding:YES + error:&error]; + [data writeToFile:[GDTCORStorage archivePath] atomically:YES]; + } else { +#if !TARGET_OS_MACCATALYST + [NSKeyedArchiver archiveRootObject:self toFile:[GDTCORStorage archivePath]]; +#endif + } + } + + // Cancel or end the associated background task if it's still valid. + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + }); +} + +- (void)removeEvents:(NSSet *)events { + NSSet *eventsToRemove = [events copy]; + dispatch_async(_storageQueue, ^{ + for (GDTCORStoredEvent *event in eventsToRemove) { + // Remove from disk, first and foremost. + NSError *error; + if (event.dataFuture.fileURL) { + NSURL *fileURL = event.dataFuture.fileURL; + [[NSFileManager defaultManager] removeItemAtURL:fileURL error:&error]; + GDTCORAssert(error == nil, @"There was an error removing an event file: %@", error); + } + + // Remove from the tracking collections. + [self.storedEvents removeObject:event]; + [self.targetToEventSet[event.target] removeObject:event]; + } + }); +} + +#pragma mark - Private helper methods + +/** Creates the storage directory if it does not exist. */ +- (void)createEventDirectoryIfNotExists { + NSError *error; + BOOL result = [[NSFileManager defaultManager] createDirectoryAtPath:GDTCORStoragePath() + withIntermediateDirectories:YES + attributes:0 + error:&error]; + if (!result || error) { + GDTCORLogError(GDTCORMCEDirectoryCreationError, @"Error creating the directory: %@", error); + } +} + +/** Saves the event's dataObjectTransportBytes to a file using NSData mechanisms. + * + * @note This method should only be called from a method within a block on _storageQueue to maintain + * thread safety. + * + * @param transportBytes The transport bytes of the event. + * @param eventHash The hash value of the event. + * @return The filename + */ +- (NSURL *)saveEventBytesToDisk:(NSData *)transportBytes eventHash:(NSUInteger)eventHash { + NSString *storagePath = GDTCORStoragePath(); + NSString *event = [NSString stringWithFormat:@"event-%lu", (unsigned long)eventHash]; + NSURL *eventFilePath = [NSURL fileURLWithPath:[storagePath stringByAppendingPathComponent:event]]; + + GDTCORAssert(![[NSFileManager defaultManager] fileExistsAtPath:eventFilePath.path], + @"An event shouldn't already exist at this path: %@", eventFilePath.path); + + BOOL writingSuccess = [transportBytes writeToURL:eventFilePath atomically:YES]; + if (!writingSuccess) { + GDTCORLogError(GDTCORMCEFileWriteError, @"An event file could not be written: %@", + eventFilePath); + } + + return eventFilePath; +} + +/** Adds the event to internal tracking collections. + * + * @note This method should only be called from a method within a block on _storageQueue to maintain + * thread safety. + * + * @param event The event to track. + */ +- (void)addEventToTrackingCollections:(GDTCORStoredEvent *)event { + [_storedEvents addObject:event]; + NSMutableSet *events = self.targetToEventSet[event.target]; + events = events ? events : [[NSMutableSet alloc] init]; + [events addObject:event]; + _targetToEventSet[event.target] = events; +} + +#pragma mark - GDTCORLifecycleProtocol + +- (void)appWillForeground:(GDTCORApplication *)app { + if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) { + NSError *error; + NSData *data = [NSData dataWithContentsOfFile:[GDTCORStorage archivePath]]; + if (data) { + [NSKeyedUnarchiver unarchivedObjectOfClass:[GDTCORStorage class] fromData:data error:&error]; + } + } else { +#if !TARGET_OS_MACCATALYST + [NSKeyedUnarchiver unarchiveObjectWithFile:[GDTCORStorage archivePath]]; +#endif + } +} + +- (void)appWillBackground:(GDTCORApplication *)app { + dispatch_async(_storageQueue, ^{ + // Immediately request a background task to run until the end of the current queue of work, and + // cancel it once the work is done. + __block GDTCORBackgroundIdentifier bgID = + [app beginBackgroundTaskWithName:@"GDTStorage" + expirationHandler:^{ + [app endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + }]; + + if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) { + NSError *error; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self + requiringSecureCoding:YES + error:&error]; + [data writeToFile:[GDTCORStorage archivePath] atomically:YES]; + } else { +#if !TARGET_OS_MACCATALYST + [NSKeyedArchiver archiveRootObject:self toFile:[GDTCORStorage archivePath]]; +#endif + } + + // End the background task if it's still valid. + [app endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + }); +} + +- (void)appWillTerminate:(GDTCORApplication *)application { + if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) { + NSError *error; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self + requiringSecureCoding:YES + error:&error]; + [data writeToFile:[GDTCORStorage archivePath] atomically:YES]; + } else { +#if !TARGET_OS_MACCATALYST + [NSKeyedArchiver archiveRootObject:self toFile:[GDTCORStorage archivePath]]; +#endif + } +} + +#pragma mark - NSSecureCoding + +/** The NSKeyedCoder key for the storedEvents property. */ +static NSString *const kGDTCORStorageStoredEventsKey = @"GDTCORStorageStoredEventsKey"; + +/** The NSKeyedCoder key for the targetToEventSet property. */ +static NSString *const kGDTCORStorageTargetToEventSetKey = @"GDTCORStorageTargetToEventSetKey"; + +/** The NSKeyedCoder key for the uploadCoordinator property. */ +static NSString *const kGDTCORStorageUploadCoordinatorKey = @"GDTCORStorageUploadCoordinatorKey"; + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + // Create the singleton and populate its ivars. + GDTCORStorage *sharedInstance = [self.class sharedInstance]; + dispatch_sync(sharedInstance.storageQueue, ^{ + NSSet *classes = + [NSSet setWithObjects:[NSMutableOrderedSet class], [GDTCORStoredEvent class], nil]; + sharedInstance->_storedEvents = [aDecoder decodeObjectOfClasses:classes + forKey:kGDTCORStorageStoredEventsKey]; + classes = [NSSet setWithObjects:[NSMutableDictionary class], [NSMutableSet class], + [GDTCORStoredEvent class], nil]; + sharedInstance->_targetToEventSet = + [aDecoder decodeObjectOfClasses:classes forKey:kGDTCORStorageTargetToEventSetKey]; + sharedInstance->_uploadCoordinator = + [aDecoder decodeObjectOfClass:[GDTCORUploadCoordinator class] + forKey:kGDTCORStorageUploadCoordinatorKey]; + }); + return sharedInstance; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder { + GDTCORStorage *sharedInstance = [self.class sharedInstance]; + NSMutableOrderedSet *storedEvents = sharedInstance->_storedEvents; + if (storedEvents) { + [aCoder encodeObject:storedEvents forKey:kGDTCORStorageStoredEventsKey]; + } + NSMutableDictionary *> *targetToEventSet = + sharedInstance->_targetToEventSet; + if (targetToEventSet) { + [aCoder encodeObject:targetToEventSet forKey:kGDTCORStorageTargetToEventSetKey]; + } + GDTCORUploadCoordinator *uploadCoordinator = sharedInstance->_uploadCoordinator; + if (uploadCoordinator) { + [aCoder encodeObject:uploadCoordinator forKey:kGDTCORStorageUploadCoordinatorKey]; + } +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStoredEvent.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStoredEvent.m new file mode 100644 index 0000000000..a243394720 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStoredEvent.m @@ -0,0 +1,95 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +#import "GDTCORLibrary/Private/GDTCORStorage_Private.h" + +@implementation GDTCORStoredEvent + +- (instancetype)initWithEvent:(GDTCOREvent *)event + dataFuture:(nonnull GDTCORDataFuture *)dataFuture { + self = [super init]; + if (self) { + _dataFuture = dataFuture; + _mappingID = event.mappingID; + _target = @(event.target); + _qosTier = event.qosTier; + _clockSnapshot = event.clockSnapshot; + _customPrioritizationParams = event.customPrioritizationParams; + } + return self; +} + +#pragma mark - NSSecureCoding + +/** Coding key for the dataFuture ivar. */ +static NSString *kDataFutureKey = @"GDTCORStoredEventDataFutureKey"; + +/** Coding key for mappingID ivar. */ +static NSString *kMappingIDKey = @"GDTCORStoredEventMappingIDKey"; + +/** Coding key for target ivar. */ +static NSString *kTargetKey = @"GDTCORStoredEventTargetKey"; + +/** Coding key for qosTier ivar. */ +static NSString *kQosTierKey = @"GDTCORStoredEventQosTierKey"; + +/** Coding key for clockSnapshot ivar. */ +static NSString *kClockSnapshotKey = @"GDTCORStoredEventClockSnapshotKey"; + +/** Coding key for customPrioritizationParams ivar. */ +static NSString *kCustomPrioritizationParamsKey = @"GDTCORStoredEventcustomPrioritizationParamsKey"; + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { + [aCoder encodeObject:_dataFuture forKey:kDataFutureKey]; + [aCoder encodeObject:_mappingID forKey:kMappingIDKey]; + [aCoder encodeObject:_target forKey:kTargetKey]; + [aCoder encodeObject:@(_qosTier) forKey:kQosTierKey]; + [aCoder encodeObject:_clockSnapshot forKey:kClockSnapshotKey]; + [aCoder encodeObject:_customPrioritizationParams forKey:kCustomPrioritizationParamsKey]; +} + +- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { + self = [self init]; + if (self) { + _dataFuture = [aDecoder decodeObjectOfClass:[GDTCORDataFuture class] forKey:kDataFutureKey]; + _mappingID = [aDecoder decodeObjectOfClass:[NSString class] forKey:kMappingIDKey]; + _target = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:kTargetKey]; + NSNumber *qosTier = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:kQosTierKey]; + _qosTier = [qosTier intValue]; + _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:kClockSnapshotKey]; + _customPrioritizationParams = [aDecoder decodeObjectOfClass:[NSDictionary class] + forKey:kCustomPrioritizationParamsKey]; + } + return self; +} + +- (BOOL)isEqual:(GDTCORStoredEvent *)other { + return [self hash] == [other hash]; +} + +- (NSUInteger)hash { + return [_dataFuture hash] ^ [_mappingID hash] ^ [_target hash] ^ [_clockSnapshot hash] ^ _qosTier; +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m new file mode 100644 index 0000000000..952346836e --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m @@ -0,0 +1,89 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Private/GDTCORTransformer.h" +#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h" + +#import +#import +#import +#import + +#import "GDTCORLibrary/Private/GDTCORStorage.h" + +@implementation GDTCORTransformer + ++ (instancetype)sharedInstance { + static GDTCORTransformer *eventTransformer; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + eventTransformer = [[self alloc] init]; + }); + return eventTransformer; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _eventWritingQueue = + dispatch_queue_create("com.google.GDTCORTransformer", DISPATCH_QUEUE_SERIAL); + _storageInstance = [GDTCORStorage sharedInstance]; + } + return self; +} + +- (void)transformEvent:(GDTCOREvent *)event + withTransformers:(NSArray> *)transformers { + GDTCORAssert(event, @"You can't write a nil event"); + + __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; + bgID = [[GDTCORApplication sharedApplication] + beginBackgroundTaskWithName:@"GDTTransformer" + expirationHandler:^{ + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + }]; + dispatch_async(_eventWritingQueue, ^{ + GDTCOREvent *transformedEvent = event; + for (id transformer in transformers) { + if ([transformer respondsToSelector:@selector(transform:)]) { + transformedEvent = [transformer transform:transformedEvent]; + if (!transformedEvent) { + return; + } + } else { + GDTCORLogError(GDTCORMCETransformerDoesntImplementTransform, + @"Transformer doesn't implement transform: %@", transformer); + return; + } + } + [self.storageInstance storeEvent:transformedEvent]; + + // The work is done, cancel the background task if it's valid. + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + }); +} + +#pragma mark - GDTCORLifecycleProtocol + +- (void)appWillTerminate:(GDTCORApplication *)application { + // Flush the queue immediately. + dispatch_sync(_eventWritingQueue, ^{ + }); +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m new file mode 100644 index 0000000000..d9d9995637 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m @@ -0,0 +1,69 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import "GDTCORLibrary/Private/GDTCORTransport_Private.h" + +#import +#import +#import + +#import "GDTCORLibrary/Private/GDTCORTransformer.h" + +@implementation GDTCORTransport + +- (nullable instancetype)initWithMappingID:(NSString *)mappingID + transformers: + (nullable NSArray> *)transformers + target:(NSInteger)target { + GDTCORAssert(mappingID.length > 0, @"A mapping ID cannot be nil or empty"); + GDTCORAssert(target > 0, @"A target cannot be negative or 0"); + if (mappingID == nil || mappingID.length == 0 || target <= 0) { + return nil; + } + self = [super init]; + if (self) { + _mappingID = mappingID; + _transformers = transformers; + _target = target; + _transformerInstance = [GDTCORTransformer sharedInstance]; + } + return self; +} + +- (void)sendTelemetryEvent:(GDTCOREvent *)event { + // TODO: Determine if sending an event before registration is allowed. + GDTCORAssert(event, @"You can't send a nil event"); + GDTCOREvent *copiedEvent = [event copy]; + copiedEvent.qosTier = GDTCOREventQoSTelemetry; + copiedEvent.clockSnapshot = [GDTCORClock snapshot]; + [self.transformerInstance transformEvent:copiedEvent withTransformers:_transformers]; +} + +- (void)sendDataEvent:(GDTCOREvent *)event { + // TODO: Determine if sending an event before registration is allowed. + GDTCORAssert(event, @"You can't send a nil event"); + GDTCORAssert(event.qosTier != GDTCOREventQoSTelemetry, @"Use -sendTelemetryEvent, please."); + GDTCOREvent *copiedEvent = [event copy]; + copiedEvent.clockSnapshot = [GDTCORClock snapshot]; + [self.transformerInstance transformEvent:copiedEvent withTransformers:_transformers]; +} + +- (GDTCOREvent *)eventForTransport { + return [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target]; +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m new file mode 100644 index 0000000000..9f779f03b4 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m @@ -0,0 +1,262 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" + +#import +#import +#import + +#import "GDTCORLibrary/Private/GDTCORReachability.h" +#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" +#import "GDTCORLibrary/Private/GDTCORStorage.h" + +@implementation GDTCORUploadCoordinator + ++ (instancetype)sharedInstance { + static GDTCORUploadCoordinator *sharedUploader; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedUploader = [[GDTCORUploadCoordinator alloc] init]; + [sharedUploader startTimer]; + }); + return sharedUploader; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _coordinationQueue = + dispatch_queue_create("com.google.GDTCORUploadCoordinator", DISPATCH_QUEUE_SERIAL); + _registrar = [GDTCORRegistrar sharedInstance]; + _timerInterval = 30 * NSEC_PER_SEC; + _timerLeeway = 5 * NSEC_PER_SEC; + _targetToInFlightPackages = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)forceUploadForTarget:(GDTCORTarget)target { + dispatch_async(_coordinationQueue, ^{ + GDTCORUploadConditions conditions = [self uploadConditions]; + conditions |= GDTCORUploadConditionHighPriority; + [self uploadTargets:@[ @(target) ] conditions:conditions]; + }); +} + +#pragma mark - Property overrides + +// GDTCORStorage and GDTCORUploadCoordinator +sharedInstance methods call each other, so this breaks +// the loop. +- (GDTCORStorage *)storage { + if (!_storage) { + _storage = [GDTCORStorage sharedInstance]; + } + return _storage; +} + +#pragma mark - Private helper methods + +/** Starts a timer that checks whether or not events can be uploaded at regular intervals. It will + * check the next-upload clocks of all targets to determine if an upload attempt can be made. + */ +- (void)startTimer { + dispatch_sync(_coordinationQueue, ^{ + self->_timer = + dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self->_coordinationQueue); + dispatch_source_set_timer(self->_timer, DISPATCH_TIME_NOW, self->_timerInterval, + self->_timerLeeway); + dispatch_source_set_event_handler(self->_timer, ^{ + if (![[GDTCORApplication sharedApplication] isRunningInBackground]) { + GDTCORUploadConditions conditions = [self uploadConditions]; + [self uploadTargets:[self.registrar.targetToUploader allKeys] conditions:conditions]; + } + }); + dispatch_resume(self->_timer); + }); +} + +/** Stops the currently running timer. */ +- (void)stopTimer { + if (_timer) { + dispatch_source_cancel(_timer); + } +} + +/** Triggers the uploader implementations for the given targets to upload. + * + * @param targets An array of targets to trigger. + * @param conditions The set of upload conditions. + */ +- (void)uploadTargets:(NSArray *)targets conditions:(GDTCORUploadConditions)conditions { + dispatch_async(_coordinationQueue, ^{ + if ((conditions & GDTCORUploadConditionNoNetwork) == GDTCORUploadConditionNoNetwork) { + return; + } + for (NSNumber *target in targets) { + // Don't trigger uploads for targets that have an in-flight package already. + if (self->_targetToInFlightPackages[target]) { + continue; + } + // Ask the uploader if they can upload and do so, if it can. + id uploader = self.registrar.targetToUploader[target]; + if ([uploader readyToUploadWithConditions:conditions]) { + id prioritizer = self.registrar.targetToPrioritizer[target]; + GDTCORUploadPackage *package = [prioritizer uploadPackageWithConditions:conditions]; + if (package.events.count) { + self->_targetToInFlightPackages[target] = package; + [uploader uploadPackage:package]; + } else { + [package completeDelivery]; + } + } + } + }); +} + +/** Returns the current upload conditions after making determinations about the network connection. + * + * @return The current upload conditions. + */ +- (GDTCORUploadConditions)uploadConditions { + SCNetworkReachabilityFlags currentFlags = [GDTCORReachability currentFlags]; + BOOL reachable = + (currentFlags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable; + BOOL connectionRequired = (currentFlags & kSCNetworkReachabilityFlagsConnectionRequired) == + kSCNetworkReachabilityFlagsConnectionRequired; + BOOL networkConnected = reachable && !connectionRequired; + + if (!networkConnected) { + return GDTCORUploadConditionNoNetwork; + } + + BOOL isWWAN = GDTCORReachabilityFlagsContainWWAN(currentFlags); + if (isWWAN) { + return GDTCORUploadConditionMobileData; + } else { + return GDTCORUploadConditionWifiData; + } +} + +#pragma mark - NSSecureCoding support + +/** The NSKeyedCoder key for the targetToInFlightPackages property. */ +static NSString *const ktargetToInFlightPackagesKey = + @"GDTCORUploadCoordinatortargetToInFlightPackages"; + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + GDTCORUploadCoordinator *sharedCoordinator = [GDTCORUploadCoordinator sharedInstance]; + dispatch_sync(sharedCoordinator->_coordinationQueue, ^{ + @try { + sharedCoordinator->_targetToInFlightPackages = + [aDecoder decodeObjectOfClass:[NSMutableDictionary class] + forKey:ktargetToInFlightPackagesKey]; + + } @catch (NSException *exception) { + sharedCoordinator->_targetToInFlightPackages = [NSMutableDictionary dictionary]; + } + }); + return sharedCoordinator; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder { + dispatch_sync(_coordinationQueue, ^{ + // All packages that have been given to uploaders need to be tracked so that their expiration + // timers can be called. + if (self->_targetToInFlightPackages.count > 0) { + [aCoder encodeObject:self->_targetToInFlightPackages forKey:ktargetToInFlightPackagesKey]; + } + }); +} + +#pragma mark - GDTCORLifecycleProtocol + +- (void)appWillForeground:(GDTCORApplication *)app { + // Not entirely thread-safe, but it should be fine. + [self startTimer]; +} + +- (void)appWillBackground:(GDTCORApplication *)app { + // Should be thread-safe. If it ends up not being, put this in a dispatch_sync. + [self stopTimer]; +} + +- (void)appWillTerminate:(GDTCORApplication *)application { + dispatch_sync(_coordinationQueue, ^{ + [self stopTimer]; + }); +} + +#pragma mark - GDTCORUploadPackageProtocol + +- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful { + if (!_coordinationQueue) { + return; + } + dispatch_async(_coordinationQueue, ^{ + NSNumber *targetNumber = @(package.target); + NSMutableDictionary *targetToInFlightPackages = + self->_targetToInFlightPackages; + GDTCORRegistrar *registrar = self->_registrar; + if (targetToInFlightPackages) { + [targetToInFlightPackages removeObjectForKey:targetNumber]; + } + if (registrar) { + id prioritizer = registrar.targetToPrioritizer[targetNumber]; + if (!prioritizer) { + GDTCORLogError(GDTCORMCEPrioritizerError, + @"A prioritizer should be registered for this target: %@", targetNumber); + } + if ([prioritizer respondsToSelector:@selector(packageDelivered:successful:)]) { + [prioritizer packageDelivered:package successful:successful]; + } + } + if (package.events != nil) { + [self.storage removeEvents:package.events]; + } + }); +} + +- (void)packageExpired:(GDTCORUploadPackage *)package { + if (!_coordinationQueue) { + return; + } + dispatch_async(_coordinationQueue, ^{ + NSNumber *targetNumber = @(package.target); + NSMutableDictionary *targetToInFlightPackages = + self->_targetToInFlightPackages; + GDTCORRegistrar *registrar = self->_registrar; + if (targetToInFlightPackages) { + [targetToInFlightPackages removeObjectForKey:targetNumber]; + } + if (registrar) { + id prioritizer = registrar.targetToPrioritizer[targetNumber]; + id uploader = registrar.targetToUploader[targetNumber]; + if ([prioritizer respondsToSelector:@selector(packageExpired:)]) { + [prioritizer packageExpired:package]; + } + if ([uploader respondsToSelector:@selector(packageExpired:)]) { + [uploader packageExpired:package]; + } + } + }); +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m new file mode 100644 index 0000000000..e549718d0e --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m @@ -0,0 +1,154 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import +#import + +#import "GDTCORLibrary/Private/GDTCORStorage_Private.h" +#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" +#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h" + +@implementation GDTCORUploadPackage { + /** If YES, the package's -completeDelivery method has been called. */ + BOOL _isDelivered; + + /** If YES, is being handled by the handler. */ + BOOL _isHandled; + + /** A timer that will regularly check to see whether this package has expired or not. */ + NSTimer *_expirationTimer; +} + +- (instancetype)initWithTarget:(GDTCORTarget)target { + self = [super init]; + if (self) { + _target = target; + _storage = [GDTCORStorage sharedInstance]; + _deliverByTime = [GDTCORClock clockSnapshotInTheFuture:180000]; + _handler = [GDTCORUploadCoordinator sharedInstance]; + _expirationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 + target:self + selector:@selector(checkIfPackageIsExpired:) + userInfo:nil + repeats:YES]; + } + return self; +} + +- (instancetype)copy { + GDTCORUploadPackage *newPackage = [[GDTCORUploadPackage alloc] initWithTarget:_target]; + newPackage->_events = [_events copy]; + return newPackage; +} + +- (NSUInteger)hash { + return [_events hash]; +} + +- (BOOL)isEqual:(id)object { + return [self hash] == [object hash]; +} + +- (void)dealloc { + [_expirationTimer invalidate]; +} + +- (void)setStorage:(GDTCORStorage *)storage { + if (storage != _storage) { + _storage = storage; + } +} + +- (void)completeDelivery { + if (_isDelivered) { + GDTCORLogError(GDTCORMCEDeliverTwice, @"%@", + @"It's an API violation to call -completeDelivery twice."); + } + _isDelivered = YES; + if (!_isHandled && _handler && + [_handler respondsToSelector:@selector(packageDelivered:successful:)]) { + [_expirationTimer invalidate]; + _isHandled = YES; + [_handler packageDelivered:self successful:YES]; + } +} + +- (void)retryDeliveryInTheFuture { + if (!_isHandled && _handler && + [_handler respondsToSelector:@selector(packageDelivered:successful:)]) { + [_expirationTimer invalidate]; + _isHandled = YES; + [_handler packageDelivered:self successful:NO]; + } +} + +- (void)checkIfPackageIsExpired:(NSTimer *)timer { + if ([[GDTCORClock snapshot] isAfter:_deliverByTime]) { + if (_handler && [_handler respondsToSelector:@selector(packageExpired:)]) { + _isHandled = YES; + [_expirationTimer invalidate]; + [_handler packageExpired:self]; + } + } +} + +#pragma mark - NSSecureCoding + +/** The keyed archiver key for the events property. */ +static NSString *const kEventsKey = @"GDTCORUploadPackageEventsKey"; + +/** The keyed archiver key for the _isHandled property. */ +static NSString *const kDeliverByTimeKey = @"GDTCORUploadPackageDeliveryByTimeKey"; + +/** The keyed archiver key for the _isHandled ivar. */ +static NSString *const kIsHandledKey = @"GDTCORUploadPackageIsHandledKey"; + +/** The keyed archiver key for the handler property. */ +static NSString *const kHandlerKey = @"GDTCORUploadPackageHandlerKey"; + +/** The keyed archiver key for the target property. */ +static NSString *const kTargetKey = @"GDTCORUploadPackageTargetKey"; + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { + [aCoder encodeObject:_events forKey:kEventsKey]; + [aCoder encodeObject:_deliverByTime forKey:kDeliverByTimeKey]; + [aCoder encodeBool:_isHandled forKey:kIsHandledKey]; + [aCoder encodeObject:_handler forKey:kHandlerKey]; + [aCoder encodeInteger:_target forKey:kTargetKey]; +} + +- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { + GDTCORTarget target = [aDecoder decodeIntegerForKey:kTargetKey]; + self = [self initWithTarget:target]; + if (self) { + NSSet *classes = [NSSet setWithObjects:[NSSet class], [GDTCORStoredEvent class], nil]; + _events = [aDecoder decodeObjectOfClasses:classes forKey:kEventsKey]; + _deliverByTime = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:kDeliverByTimeKey]; + _isHandled = [aDecoder decodeBoolForKey:kIsHandledKey]; + // _handler isn't technically NSSecureCoding, because we don't know the class of this object. + // but it gets decoded anyway. + } + return self; +} + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h new file mode 100644 index 0000000000..f7f8a28b71 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h @@ -0,0 +1,30 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface GDTCOREvent () + +/** The serialized bytes of the event data object. */ +@property(nonatomic) NSData *dataObjectTransportBytes; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability.h new file mode 100644 index 0000000000..0f58ab3182 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability.h @@ -0,0 +1,31 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** This class helps determine upload conditions by determining connectivity. */ +@interface GDTCORReachability : NSObject + +/** The current set flags indicating network conditions */ ++ (SCNetworkReachabilityFlags)currentFlags; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h new file mode 100644 index 0000000000..88f64a072a --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h @@ -0,0 +1,30 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Private/GDTCORReachability.h" + +@interface GDTCORReachability () + +/** Allows manually setting the flags for testing purposes. */ +@property(nonatomic, readwrite) SCNetworkReachabilityFlags flags; + +/** Creates/returns the singleton instance of this class. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance; + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h new file mode 100644 index 0000000000..074fc1148c --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h @@ -0,0 +1,35 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@interface GDTCORRegistrar () + +NS_ASSUME_NONNULL_BEGIN + +/** The concurrent queue on which all registration occurs. */ +@property(nonatomic, readonly) dispatch_queue_t registrarQueue; + +/** A map of targets to backend implementations. */ +@property(atomic, readonly) NSMutableDictionary> *targetToUploader; + +/** A map of targets to prioritizer implementations. */ +@property(atomic, readonly) + NSMutableDictionary> *targetToPrioritizer; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage.h new file mode 100644 index 0000000000..008b1d93c4 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage.h @@ -0,0 +1,50 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +@class GDTCOREvent; +@class GDTCORStoredEvent; + +NS_ASSUME_NONNULL_BEGIN + +/** Manages the storage of events. This class is thread-safe. */ +@interface GDTCORStorage : NSObject + +/** Creates and/or returns the storage singleton. + * + * @return The storage singleton. + */ ++ (instancetype)sharedInstance; + +/** Stores event.dataObjectTransportBytes into a shared on-device folder and tracks the event via + * a GDTCORStoredEvent instance. + * + * @param event The event to store. + */ +- (void)storeEvent:(GDTCOREvent *)event; + +/** Removes a set of events from storage specified by their hash. + * + * @param events The set of stored events to remove. + */ +- (void)removeEvents:(NSSet *)events; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage_Private.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage_Private.h new file mode 100644 index 0000000000..24569fd46f --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage_Private.h @@ -0,0 +1,47 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Private/GDTCORStorage.h" + +@class GDTCORUploadCoordinator; + +NS_ASSUME_NONNULL_BEGIN + +@interface GDTCORStorage () + +/** The queue on which all storage work will occur. */ +@property(nonatomic) dispatch_queue_t storageQueue; + +/** A map of targets to a set of stored events. */ +@property(nonatomic) + NSMutableDictionary *> *targetToEventSet; + +/** All the events that have been stored. */ +@property(readonly, nonatomic) NSMutableOrderedSet *storedEvents; + +/** The upload coordinator instance used by this storage instance. */ +@property(nonatomic) GDTCORUploadCoordinator *uploadCoordinator; + +/** Returns the path to the keyed archive of the singleton. This is where the singleton is saved + * to disk during certain app lifecycle events. + * + * @return File path to serialized singleton. + */ ++ (NSString *)archivePath; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h new file mode 100644 index 0000000000..9f4ec39cab --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h @@ -0,0 +1,54 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +@class GDTCOREvent; + +@protocol GDTCOREventTransformer; + +NS_ASSUME_NONNULL_BEGIN + +/** Manages the transforming of events. It's desirable for this to be its own class + * because running all events through a single instance ensures that transformers are thread-safe. + * Having a per-transport queue to run on isn't sufficient because transformer objects could + * maintain state (or at least, there's nothing to stop them from doing that) and the same instances + * may be used across multiple instances. + */ +@interface GDTCORTransformer : NSObject + +/** Instantiates or returns the event transformer singleton. + * + * @return The singleton instance of the event transformer. + */ ++ (instancetype)sharedInstance; + +/** Writes the result of applying the given transformers' -transform method on the given event. + * + * @note If the app is suspended, a background task will be created to complete work in-progress, + * but this method will not send any further events until the app is resumed. + * + * @param event The event to apply transformers on. + * @param transformers The list of transformers to apply. + */ +- (void)transformEvent:(GDTCOREvent *)event + withTransformers:(nullable NSArray> *)transformers; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h new file mode 100644 index 0000000000..fcdae34dd3 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h @@ -0,0 +1,33 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORLibrary/Private/GDTCORTransformer.h" + +@class GDTCORStorage; + +NS_ASSUME_NONNULL_BEGIN + +@interface GDTCORTransformer () + +/** The queue on which all work will occur. */ +@property(nonatomic) dispatch_queue_t eventWritingQueue; + +/** The storage instance used to store events. Should only be used to inject a testing fake. */ +@property(nonatomic) GDTCORStorage *storageInstance; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h new file mode 100644 index 0000000000..71f73a6f43 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h @@ -0,0 +1,39 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class GDTCORTransformer; + +NS_ASSUME_NONNULL_BEGIN + +@interface GDTCORTransport () + +/** The mapping identifier that the target backend will use to map the transport bytes to proto. */ +@property(nonatomic) NSString *mappingID; + +/** The transformers that will operate on events sent by this transport. */ +@property(nonatomic) NSArray> *transformers; + +/** The target backend of this transport. */ +@property(nonatomic) NSInteger target; + +/** The transformer instance to used to transform events. Allows injecting a fake during testing. */ +@property(nonatomic) GDTCORTransformer *transformerInstance; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h new file mode 100644 index 0000000000..b1d708cc42 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h @@ -0,0 +1,77 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import + +#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h" + +@class GDTCORClock; +@class GDTCORStorage; + +NS_ASSUME_NONNULL_BEGIN + +/** This class connects storage and uploader implementations, providing events to an uploader + * and informing the storage what events were successfully uploaded or not. + */ +@interface GDTCORUploadCoordinator + : NSObject + +/** The queue on which all upload coordination will occur. Also used by a dispatch timer. */ +/** Creates and/or returrns the singleton. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance; +@property(nonatomic, readonly) dispatch_queue_t coordinationQueue; + +/** A timer that will causes regular checks for events to upload. */ +@property(nonatomic, readonly) dispatch_source_t timer; + +/** The interval the timer will fire. */ +@property(nonatomic, readonly) uint64_t timerInterval; + +/** Some leeway given to libdispatch for the timer interval event. */ +@property(nonatomic, readonly) uint64_t timerLeeway; + +/** The map of targets to in-flight packages. */ +@property(nonatomic, readonly) + NSMutableDictionary *targetToInFlightPackages; + +/** The storage object the coordinator will use. Generally used for testing. */ +@property(nonatomic) GDTCORStorage *storage; + +/** The registrar object the coordinator will use. Generally used for testing. */ +@property(nonatomic) GDTCORRegistrar *registrar; + +/** Forces the backend specified by the target to upload the provided set of events. This should + * only ever happen when the QoS tier of an event requires it. + * + * @param target The target that should force an upload. + */ +- (void)forceUploadForTarget:(GDTCORTarget)target; + +/** Starts the upload timer. */ +- (void)startTimer; + +/** Stops the upload timer from running. */ +- (void)stopTimer; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h new file mode 100644 index 0000000000..1eb58d4c7a --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h @@ -0,0 +1,29 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class GDTCORStorage; + +@interface GDTCORUploadPackage () + +/** The storage object this upload package will use to resolve event hashes to files. */ +@property(nonatomic) GDTCORStorage *storage; + +/** A handler that will receive callbacks for certain events. */ +@property(nonatomic) id handler; + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h new file mode 100644 index 0000000000..941e412e21 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h @@ -0,0 +1,91 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +/** A block type that could be run instead of normal assertion logging. No return type, no params. + */ +typedef void (^GDTCORAssertionBlock)(void); + +/** Returns the result of executing a soft-linked method present in unit tests that allows a block + * to be run instead of normal assertion logging. This helps ameliorate issues with catching + * exceptions that occur on a dispatch_queue. + * + * @return A block that can be run instead of normal assert printing. + */ +FOUNDATION_EXPORT GDTCORAssertionBlock _Nullable GDTCORAssertionBlockToRunInstead(void); + +#if defined(NS_BLOCK_ASSERTIONS) + +#define GDTCORAssert(condition, ...) \ + do { \ + } while (0); + +#define GDTCORFatalAssert(condition, ...) \ + do { \ + } while (0); + +#else // defined(NS_BLOCK_ASSERTIONS) + +/** Asserts using a console log, unless a block was specified to be run instead. + * + * @param condition The condition you'd expect to be YES. + */ +#define GDTCORAssert(condition, ...) \ + do { \ + if (__builtin_expect(!(condition), 0)) { \ + GDTCORAssertionBlock assertionBlock = GDTCORAssertionBlockToRunInstead(); \ + if (assertionBlock) { \ + assertionBlock(); \ + } else { \ + __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \ + NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \ + __assert_file__ = __assert_file__ ? __assert_file__ : @""; \ + GDTCORLogError(GDTCORMCEGeneralError, @"Assertion failed (%@:%d): %s,", __assert_file__, \ + __LINE__, ##__VA_ARGS__); \ + __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \ + } \ + } \ + } while (0); + +/** Asserts by logging to the console and throwing an exception if NS_BLOCK_ASSERTIONS is not + * defined. + * + * @param condition The condition you'd expect to be YES. + */ +#define GDTCORFatalAssert(condition, ...) \ + do { \ + __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \ + if (__builtin_expect(!(condition), 0)) { \ + NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \ + __assert_file__ = __assert_file__ ? __assert_file__ : @""; \ + GDTCORLogError(GDTCORMCEFatalAssertion, \ + @"Fatal assertion encountered, please open an issue at " \ + "https://github.com/firebase/firebase-ios-sdk/issues " \ + "(%@:%d): %s,", \ + __assert_file__, __LINE__, ##__VA_ARGS__); \ + [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \ + object:self \ + file:__assert_file__ \ + lineNumber:__LINE__ \ + description:@"%@", ##__VA_ARGS__]; \ + } \ + __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \ + } while (0); + +#endif // defined(NS_BLOCK_ASSERTIONS) diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h new file mode 100644 index 0000000000..01de21ae09 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h @@ -0,0 +1,57 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** This class manages the device clock and produces snapshots of the current time. */ +@interface GDTCORClock : NSObject + +/** The wallclock time, UTC, in milliseconds. */ +@property(nonatomic, readonly) int64_t timeMillis; + +/** The offset from UTC in seconds. */ +@property(nonatomic, readonly) int64_t timezoneOffsetSeconds; + +/** The kernel boot time when this clock was created. */ +@property(nonatomic, readonly) int64_t kernelBootTime; + +/** The device uptime when this clock was created. */ +@property(nonatomic, readonly) int64_t uptime; + +/** Creates a GDTCORClock object using the current time and offsets. + * + * @return A new GDTCORClock object representing the current time state. + */ ++ (instancetype)snapshot; + +/** Creates a GDTCORClock object representing a time in the future, relative to now. + * + * @param millisInTheFuture The millis in the future from now this clock should represent. + * @return An instance representing a future time. + */ ++ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture; + +/** Compares one clock with another, returns YES if the caller is after the parameter. + * + * @return YES if the calling clock's time is after the given clock's time. + */ +- (BOOL)isAfter:(GDTCORClock *)otherClock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h new file mode 100644 index 0000000000..b7e7818e1c --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h @@ -0,0 +1,84 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +/** A list of message codes to print in the logger that help to correspond printed messages with + * code locations. + * + * Prefixes: + * - MCW => MessageCodeWarning + * - MCE => MessageCodeError + */ +typedef NS_ENUM(NSInteger, GDTCORMessageCode) { + + /** For warning messages concerning transportBytes: not being implemented by a data object. */ + GDTCORMCWDataObjectMissingBytesImpl = 1, + + /** For warning messages concerning a failed event upload. */ + GDTCORMCWUploadFailed = 2, + + /** For warning messages concerning a forced event upload. */ + GDTCORMCWForcedUpload = 3, + + /** For warning messages concerning a failed reachability call. */ + GDTCORMCWReachabilityFailed = 4, + + /** For error messages concerning transform: not being implemented by an event transformer. */ + GDTCORMCETransformerDoesntImplementTransform = 1000, + + /** For error messages concerning the creation of a directory failing. */ + GDTCORMCEDirectoryCreationError = 1001, + + /** For error messages concerning the writing of a event file. */ + GDTCORMCEFileWriteError = 1002, + + /** For error messages concerning the lack of a prioritizer for a given backend. */ + GDTCORMCEPrioritizerError = 1003, + + /** For error messages concerning a package delivery API violation. */ + GDTCORMCEDeliverTwice = 1004, + + /** For error messages concerning an error in an implementation of -transportBytes. */ + GDTCORMCETransportBytesError = 1005, + + /** For general purpose error messages in a dependency. */ + GDTCORMCEGeneralError = 1006, + + /** For fatal errors. Please go to https://github.com/firebase/firebase-ios-sdk/issues and open + * an issue if you encounter an error with this code. + */ + GDTCORMCEFatalAssertion = 1007 +}; + +/** */ +FOUNDATION_EXPORT +void GDTCORLog(GDTCORMessageCode code, NSString *_Nonnull format, ...); + +/** Returns the string that represents some message code. + * + * @param code The code to convert to a string. + * @return The string representing the message code. + */ +FOUNDATION_EXPORT NSString *_Nonnull GDTCORMessageCodeEnumToString(GDTCORMessageCode code); + +// A define to wrap GULLogWarning with slightly more convenient usage. +#define GDTCORLogWarning(MESSAGE_CODE, MESSAGE_FORMAT, ...) \ + GDTCORLog(MESSAGE_CODE, MESSAGE_FORMAT, __VA_ARGS__); + +// A define to wrap GULLogError with slightly more convenient usage and a failing assert. +#define GDTCORLogError(MESSAGE_CODE, MESSAGE_FORMAT, ...) \ + GDTCORLog(MESSAGE_CODE, MESSAGE_FORMAT, __VA_ARGS__); diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORDataFuture.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORDataFuture.h new file mode 100644 index 0000000000..07f428fc94 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORDataFuture.h @@ -0,0 +1,42 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** This class represents a future data object, determined at instantiation time. */ +@interface GDTCORDataFuture : NSObject + +/** The data, computed on-demand, depending on the initializer. */ +@property(nullable, readonly, nonatomic) NSData *data; + +/** If not nil, this data future was instantiated with this file URL. */ +@property(nullable, readonly, nonatomic) NSURL *fileURL; + +/** If not nil, this data future was instantiated with this NSData instance. */ +@property(nullable, readonly, nonatomic) NSData *originalData; + +/** Initializes an instance with the given the fileURL. + * + * @param fileURL The fileURL containing the data to return in -data. + * @return An instance of this class. + */ +- (instancetype)initWithFileURL:(NSURL *)fileURL; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h new file mode 100644 index 0000000000..1ab55de8f1 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h @@ -0,0 +1,94 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +@class GDTCORClock; +@class GDTCORDataFuture; +@class GDTCORStoredEvent; + +NS_ASSUME_NONNULL_BEGIN + +/** The different possible quality of service specifiers. High values indicate high priority. */ +typedef NS_ENUM(NSInteger, GDTCOREventQoS) { + /** The QoS tier wasn't set, and won't ever be sent. */ + GDTCOREventQoSUnknown = 0, + + /** This event is internal telemetry data that should not be sent on its own if possible. */ + GDTCOREventQoSTelemetry = 1, + + /** This event should be sent, but in a batch only roughly once per day. */ + GDTCOREventQoSDaily = 2, + + /** This event should be sent when requested by the uploader. */ + GDTCOREventQosDefault = 3, + + /** This event should be sent immediately along with any other data that can be batched. */ + GDTCOREventQoSFast = 4, + + /** This event should only be uploaded on wifi. */ + GDTCOREventQoSWifiOnly = 5, +}; + +@interface GDTCOREvent : NSObject + +/** The mapping identifier, to allow backends to map the transport bytes to a proto. */ +@property(readonly, nonatomic) NSString *mappingID; + +/** The identifier for the backend this event will eventually be sent to. */ +@property(readonly, nonatomic) NSInteger target; + +/** The data object encapsulated in the transport of your choice, as long as it implements + * the GDTCOREventDataObject protocol. */ +@property(nullable, nonatomic) id dataObject; + +/** The quality of service tier this event belongs to. */ +@property(nonatomic) GDTCOREventQoS qosTier; + +/** The clock snapshot at the time of the event. */ +@property(nonatomic) GDTCORClock *clockSnapshot; + +/** A dictionary provided to aid prioritizers by allowing the passing of arbitrary data. It will be + * retained by a copy in -copy, but not used for -hash. + * + * @note Ensure that classes contained therein implement NSSecureCoding to prevent loss of data. + */ +@property(nullable, nonatomic) NSDictionary *customPrioritizationParams; + +// Please use the designated initializer. +- (instancetype)init NS_UNAVAILABLE; + +/** Initializes an instance using the given mappingID. + * + * @param mappingID The mapping identifier. + * @param target The event's target identifier. + * @return An instance of this class. + */ +- (nullable instancetype)initWithMappingID:(NSString *)mappingID + target:(NSInteger)target NS_DESIGNATED_INITIALIZER; + +/** Returns the GDTCORStoredEvent equivalent of self. + * + * @param dataFuture The data future representing the transport bytes of the original event. + * @return An equivalent GDTCORStoredEvent. + */ +- (GDTCORStoredEvent *)storedEventWithDataFuture:(GDTCORDataFuture *)dataFuture; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/FirebaseCore/Firebase/Core/Private/FIRCoreConfigurable.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h similarity index 62% rename from Pods/FirebaseCore/Firebase/Core/Private/FIRCoreConfigurable.h rename to Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h index 6c2b077517..34ef62424d 100644 --- a/Pods/FirebaseCore/Firebase/Core/Private/FIRCoreConfigurable.h +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h @@ -14,25 +14,23 @@ * limitations under the License. */ -#ifndef FIRCoreConfigurable_h -#define FIRCoreConfigurable_h - #import -@class FIRApp; - NS_ASSUME_NONNULL_BEGIN -/// Provides an interface to set up an SDK once a `FIRApp` is configured. -NS_SWIFT_NAME(CoreConfigurable) -@protocol FIRCoreConfigurable +/** This protocol defines the common interface that event protos should implement regardless of the + * underlying transport technology (protobuf, nanopb, etc). + */ +@protocol GDTCOREventDataObject -/// Configure the SDK if needed ahead of time. This method is called when the developer calls -/// `FirebaseApp.configure()`. -+ (void)configureWithApp:(FIRApp *)app; +@required + +/** Returns the serialized proto bytes of the implementing event proto. + * + * @return the serialized proto bytes of the implementing event proto. + */ +- (NSData *)transportBytes; @end NS_ASSUME_NONNULL_END - -#endif /* FIRCoreConfigurable_h */ diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h new file mode 100644 index 0000000000..c26d0c21a2 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +@class GDTCOREvent; + +NS_ASSUME_NONNULL_BEGIN + +/** Defines the API that event transformers must adopt. */ +@protocol GDTCOREventTransformer + +@required + +/** Transforms an event by applying some logic to it. Events returned can be nil, for example, in + * instances where the event should be sampled. + * + * @param event The event to transform. + * @return A transformed event, or nil if the transformation dropped the event. + */ +- (GDTCOREvent *)transform:(GDTCOREvent *)event; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h new file mode 100644 index 0000000000..4d61a21312 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +@class GDTCOREvent; + +NS_ASSUME_NONNULL_BEGIN + +/** A protocol defining the lifecycle events objects in the library must respond to immediately. */ +@protocol GDTCORLifecycleProtocol + +@optional + +/** Indicates an imminent app termination in the rare occurrence when -applicationWillTerminate: has + * been called. + * + * @param app The GDTCORApplication instance. + */ +- (void)appWillTerminate:(GDTCORApplication *)app; + +/** Indicates that the app is moving to background and eventual suspension or the current UIScene is + * deactivating. + * + * @param app The GDTCORApplication instance. + */ +- (void)appWillBackground:(GDTCORApplication *)app; + +/** Indicates that the app is resuming operation or a UIScene is activating. + * + * @param app The GDTCORApplication instance. + */ +- (void)appWillForeground:(GDTCORApplication *)app; + +@end + +/** This class manages the library's response to app lifecycle events. + * + * When backgrounding, the library doesn't stop processing events, it's just that several background + * tasks will end up being created for every event that's sent, and the stateful objects of the + * library (GDTCORStorage and GDTCORUploadCoordinator singletons) will deserialize themselves from + * and to disk before and after every operation, respectively. + */ +@interface GDTCORLifecycle : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h new file mode 100644 index 0000000000..00cafc8457 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h @@ -0,0 +1,91 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import + +#if TARGET_OS_IOS || TARGET_OS_TV +#import +#elif TARGET_OS_OSX +#import +#endif // TARGET_OS_IOS || TARGET_OS_TV + +NS_ASSUME_NONNULL_BEGIN + +/** A notification sent out if the app is backgrounding. */ +FOUNDATION_EXPORT NSString *const kGDTCORApplicationDidEnterBackgroundNotification; + +/** A notification sent out if the app is foregrounding. */ +FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillEnterForegroundNotification; + +/** A notification sent out if the app is terminating. */ +FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillTerminateNotification; + +/** Compares flags with the WWAN reachability flag, if available, and returns YES if present. + * + * @param flags The set of reachability flags. + * @return YES if the WWAN flag is set, NO otherwise. + */ +BOOL GDTCORReachabilityFlagsContainWWAN(SCNetworkReachabilityFlags flags); + +/** A typedef identify background identifiers. */ +typedef volatile NSUInteger GDTCORBackgroundIdentifier; + +/** A background task's invalid sentinel value. */ +FOUNDATION_EXPORT const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid; + +#if TARGET_OS_IOS || TARGET_OS_TV +/** A protocol that wraps UIApplicationDelegate or NSObject protocol, depending on the platform. */ +@protocol GDTCORApplicationDelegate +#elif TARGET_OS_OSX +@protocol GDTCORApplicationDelegate +#else +@protocol GDTCORApplicationDelegate +#endif // TARGET_OS_IOS || TARGET_OS_TV + +@end + +/** A cross-platform application class. */ +@interface GDTCORApplication : NSObject + +/** Flag to determine if the application is running in the background. */ +@property(atomic, readonly) BOOL isRunningInBackground; + +/** Creates and/or returns the shared application instance. + * + * @return The shared application instance. + */ ++ (nullable GDTCORApplication *)sharedApplication; + +/** Creates a background task with the returned identifier if on a suitable platform. + * + * @name name The name of the task, useful for debugging which background tasks are running. + * @param handler The handler block that is called if the background task expires. + * @return An identifier for the background task, or GDTCORBackgroundIdentifierInvalid if one + * couldn't be created. + */ +- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name + expirationHandler:(void (^__nullable)(void))handler; + +/** Ends the background task if the identifier is valid. + * + * @param bgID The background task to end. + */ +- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h new file mode 100644 index 0000000000..3c0c3c63dd --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h @@ -0,0 +1,73 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import + +@class GDTCORStoredEvent; + +NS_ASSUME_NONNULL_BEGIN + +/** Options that define a set of upload conditions. This is used to help minimize end user data + * consumption impact. + */ +typedef NS_OPTIONS(NSInteger, GDTCORUploadConditions) { + + /** An upload shouldn't be attempted, because there's no network. */ + GDTCORUploadConditionNoNetwork = 1 << 0, + + /** An upload would likely use mobile data. */ + GDTCORUploadConditionMobileData = 1 << 1, + + /** An upload would likely use wifi data. */ + GDTCORUploadConditionWifiData = 1 << 2, + + /** An upload uses some sort of network connection, but it's unclear which. */ + GDTCORUploadConditionUnclearConnection = 1 << 3, + + /** A high priority event has occurred. */ + GDTCORUploadConditionHighPriority = 1 << 4, +}; + +/** This protocol defines the common interface of event prioritization. Prioritizers are + * stateful objects that prioritize events upon insertion into storage and remain prepared to return + * a set of filenames to the storage system. + */ +@protocol GDTCORPrioritizer + +@required + +/** Accepts an event and uses the event metadata to make choices on how to prioritize the event. + * This method exists as a way to help prioritize which events should be sent, which is dependent on + * the request proto structure of your backend. + * + * @param event The event to prioritize. + */ +- (void)prioritizeEvent:(GDTCORStoredEvent *)event; + +/** Returns a set of events to upload given a set of conditions. + * + * @param conditions A bit mask specifying the current upload conditions. + * @return An object to be used by the uploader to determine file URLs to upload with respect to the + * current conditions. + */ +- (GDTCORUploadPackage *)uploadPackageWithConditions:(GDTCORUploadConditions)conditions; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h new file mode 100644 index 0000000000..0a8fbb0a91 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h @@ -0,0 +1,50 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Manages the registration of targets with the transport SDK. */ +@interface GDTCORRegistrar : NSObject + +/** Creates and/or returns the singleton instance. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance; + +/** Registers a backend implementation with the GoogleDataTransport infrastructure. + * + * @param backend The backend object to register. + * @param target The target this backend object will be responsible for. + */ +- (void)registerUploader:(id)backend target:(GDTCORTarget)target; + +/** Registers a event prioritizer implementation with the GoogleDataTransport infrastructure. + * + * @param prioritizer The prioritizer object to register. + * @param target The target this prioritizer object will be responsible for. + */ +- (void)registerPrioritizer:(id)prioritizer target:(GDTCORTarget)target; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStoredEvent.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStoredEvent.h new file mode 100644 index 0000000000..647b22088f --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStoredEvent.h @@ -0,0 +1,58 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#import + +#import +#import + +@class GDTCOREvent; + +NS_ASSUME_NONNULL_BEGIN + +@interface GDTCORStoredEvent : NSObject + +/** The data future representing the original event's transport bytes. */ +@property(readonly, nonatomic) GDTCORDataFuture *dataFuture; + +/** The mapping identifier, to allow backends to map the transport bytes to a proto. */ +@property(readonly, nonatomic) NSString *mappingID; + +/** The identifier for the backend this event will eventually be sent to. */ +@property(readonly, nonatomic) NSNumber *target; + +/** The quality of service tier this event belongs to. */ +@property(readonly, nonatomic) GDTCOREventQoS qosTier; + +/** The clock snapshot at the time of the event. */ +@property(readonly, nonatomic) GDTCORClock *clockSnapshot; + +/** A dictionary provided to aid prioritizers by allowing the passing of arbitrary data. + * + * @note Ensure that custom classes in this dict implement NSSecureCoding to prevent loss of data. + */ +@property(readonly, nullable, nonatomic) NSDictionary *customPrioritizationParams; + +/** Initializes a stored event with the given URL and event. + * + * @param event The event this stored event represents. + * @param dataFuture The dataFuture this event represents. + * @return An instance of this class. + */ +- (instancetype)initWithEvent:(GDTCOREvent *)event dataFuture:(GDTCORDataFuture *)dataFuture; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h new file mode 100644 index 0000000000..ebd36d11b1 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h @@ -0,0 +1,32 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +/** The list of targets supported by the shared transport infrastructure. If adding a new target, + * please use the previous value +1. + */ +typedef NS_ENUM(NSInteger, GDTCORTarget) { + + /** A target only used in testing. */ + kGDTCORTargetTest = 999, + + /** The CCT target. */ + kGDTCORTargetCCT = 1000, + + /** The FLL target. */ + kGDTCORTargetFLL = 1001, +}; diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h new file mode 100644 index 0000000000..a952240362 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h @@ -0,0 +1,69 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +@class GDTCOREvent; + +NS_ASSUME_NONNULL_BEGIN + +@interface GDTCORTransport : NSObject + +// Please use the designated initializer. +- (instancetype)init NS_UNAVAILABLE; + +/** Initializes a new transport that will send events to the given target backend. + * + * @param mappingID The mapping identifier used by the backend to map the data object transport + * bytes to a proto. + * @param transformers A list of transformers to be applied to events that are sent. + * @param target The target backend of this transport. + * @return A transport that will send events. + */ +- (nullable instancetype)initWithMappingID:(NSString *)mappingID + transformers: + (nullable NSArray> *)transformers + target:(NSInteger)target NS_DESIGNATED_INITIALIZER; + +/** Copies and sends an internal telemetry event. Events sent using this API are lower in priority, + * and sometimes won't be sent on their own. + * + * @note This will convert the event's data object to data and release the original event. + * + * @param event The event to send. + */ +- (void)sendTelemetryEvent:(GDTCOREvent *)event; + +/** Copies and sends an SDK service data event. Events send using this API are higher in priority, + * and will cause a network request at some point in the relative near future. + * + * @note This will convert the event's data object to data and release the original event. + * + * @param event The event to send. + */ +- (void)sendDataEvent:(GDTCOREvent *)event; + +/** Creates an event for use by this transport. + * + * @return An event that is suited for use by this transport. + */ +- (GDTCOREvent *)eventForTransport; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h new file mode 100644 index 0000000000..46a676b9d1 --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h @@ -0,0 +1,80 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +@class GDTCORClock; +@class GDTCORStoredEvent; +@class GDTCORUploadPackage; + +/** A protocol that allows a handler to respond to package lifecycle events. */ +@protocol GDTCORUploadPackageProtocol + +@optional + +/** Indicates that the package has expired. + * + * @note Package expiration will only be checked every 5 seconds. + * + * @param package The package that has expired. + */ +- (void)packageExpired:(GDTCORUploadPackage *)package; + +/** Indicates that the package was successfully delivered. + * + * @param package The package that was delivered. + */ +- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful; + +@end + +/** This class is a container that's handed off to uploaders. */ +@interface GDTCORUploadPackage : NSObject + +/** The set of stored events in this upload package. */ +@property(nonatomic) NSSet *events; + +/** The expiration time. If [[GDTCORClock snapshot] isAfter:deliverByTime] this package has expired. + * + * @note By default, the expiration time will be 3 minutes from creation. + */ +@property(nonatomic) GDTCORClock *deliverByTime; + +/** The target of this package. */ +@property(nonatomic, readonly) GDTCORTarget target; + +/** Initializes a package instance. + * + * @param target The target/destination of this package. + * @return An instance of this class. + */ +- (instancetype)initWithTarget:(GDTCORTarget)target NS_DESIGNATED_INITIALIZER; + +// Please use the designated initializer. +- (instancetype)init NS_UNAVAILABLE; + +/** Completes delivery of the package. + * + * @note This *needs* to be called by an uploader for the package to not expire. + */ +- (void)completeDelivery; + +/** Sends the package back, indicating that delivery should be attempted again in the future. */ +- (void)retryDeliveryInTheFuture; + +@end diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h new file mode 100644 index 0000000000..a34f8b2acb --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h @@ -0,0 +1,47 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** This protocol defines the common interface for uploader implementations. */ +@protocol GDTCORUploader + +@required + +/** Returns YES if the uploader can make an upload attempt, NO otherwise. + * + * @param conditions The conditions that the upload attempt is likely to occur under. + * @return YES if the uploader can make an upload attempt, NO otherwise. + */ +- (BOOL)readyToUploadWithConditions:(GDTCORUploadConditions)conditions; + +/** Uploads events to the backend using this specific backend's chosen format. + * + * @param package The event package to upload. Make sure to call -completeDelivery. + */ +- (void)uploadPackage:(GDTCORUploadPackage *)package; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h new file mode 100644 index 0000000000..e46a385bfc --- /dev/null +++ b/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h @@ -0,0 +1,30 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCORClock.h" +#import "GDTCORConsoleLogger.h" +#import "GDTCORDataFuture.h" +#import "GDTCOREvent.h" +#import "GDTCOREventDataObject.h" +#import "GDTCOREventTransformer.h" +#import "GDTCORLifecycle.h" +#import "GDTCORPrioritizer.h" +#import "GDTCORRegistrar.h" +#import "GDTCORStoredEvent.h" +#import "GDTCORTargets.h" +#import "GDTCORTransport.h" +#import "GDTCORUploadPackage.h" +#import "GDTCORUploader.h" diff --git a/Pods/GoogleDataTransport/LICENSE b/Pods/GoogleDataTransport/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/Pods/GoogleDataTransport/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/GoogleDataTransport/README.md b/Pods/GoogleDataTransport/README.md new file mode 100644 index 0000000000..f55d642180 --- /dev/null +++ b/Pods/GoogleDataTransport/README.md @@ -0,0 +1,230 @@ +# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) + +This repository contains a subset of the Firebase iOS SDK source. It currently +includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, +FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and +FirebaseStorage. + +The repository also includes GoogleUtilities source. The +[GoogleUtilities](GoogleUtilities/README.md) pod is +a set of utilities used by Firebase and other Google products. + +Firebase is an app development platform with tools to help you build, grow and +monetize your app. More information about Firebase can be found at +[https://firebase.google.com](https://firebase.google.com). + +## Installation + +See the three subsections for details about three different installation methods. +1. [Standard pod install](README.md#standard-pod-install) +1. [Installing from the GitHub repo](README.md#installing-from-github) +1. [Experimental Carthage](README.md#carthage-ios-only) + +### Standard pod install + +Go to +[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). + +### Installing from GitHub + +For releases starting with 5.0.0, the source for each release is also deployed +to CocoaPods master and available via standard +[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). + +These instructions can be used to access the Firebase repo at other branches, +tags, or commits. + +#### Background + +See +[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) +for instructions and options about overriding pod source locations. + +#### Accessing Firebase Source Snapshots + +All of the official releases are tagged in this repo and available via CocoaPods. To access a local +source snapshot or unreleased branch, use Podfile directives like the following: + +To access FirebaseFirestore via a branch: +``` +pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +``` + +To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: + +``` +pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' +pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' +``` + +### Carthage (iOS only) + +Instructions for the experimental Carthage distribution are at +[Carthage](Carthage.md). + +### Rome + +Instructions for installing binary frameworks via +[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). + +## Development + +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Firestore has a self contained Xcode project. See +[Firestore/README.md](Firestore/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: + +``` +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb +``` + +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. + +To update this section, find the versions of clang-format and swiftformat.rb to +match the versions in the CI failure logs +[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). + +### Running Unit Tests + +Select a scheme and press Command-u to build a component and run its unit tests. + +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + +### Running Sample Apps +In order to run the sample apps and integration tests, you'll need valid +`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist +files without real values, but can be replaced with real plist files. To get your own +`GoogleService-Info.plist` files: + +1. Go to the [Firebase Console](https://console.firebase.google.com/) +2. Create a new Firebase project, if you don't already have one +3. For each sample app you want to test, create a new Firebase app with the sample app's bundle +identifier (e.g. `com.google.Database-Example`) +4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file +(e.g. in [Example/Database/App/](Example/Database/App/)); + +Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require +special Apple capabilities, and you will have to change the sample app to use a unique bundle +identifier that you can control in your own Apple Developer account. + +## Specific Component Instructions +See the sections below for any special instructions for those components. + +### Firebase Auth + +If you're doing specific Firebase Auth development, see +[the Auth Sample README](Example/Auth/README.md) for instructions about +building and running the FirebaseAuth pod along with various samples and tests. + +### Firebase Database + +To run the Database Integration tests, make your database authentication rules +[public](https://firebase.google.com/docs/database/security/quickstart). + +### Firebase Storage + +To run the Storage Integration tests, follow the instructions in +[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). + +#### Push Notifications + +Push notifications can only be delivered to specially provisioned App IDs in the developer portal. +In order to actually test receiving push notifications, you will need to: + +1. Change the bundle identifier of the sample app to something you own in your Apple Developer +account, and enable that App ID for push notifications. +2. You'll also need to +[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) +at **Project Settings > Cloud Messaging > [Your Firebase App]**. +3. Ensure your iOS device is added to your Apple Developer portal as a test device. + +#### iOS Simulator + +The iOS Simulator cannot register for remote notifications, and will not receive push notifications. +In order to receive push notifications, you'll have to follow the steps above and run the app on a +physical device. + +## Community Supported Efforts + +We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are +very grateful! We'd like to empower as many developers as we can to be able to use Firebase and +participate in the Firebase community. + +### macOS and tvOS +Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, +FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, +FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. + +For tvOS, checkout the [Sample](Example/tvOSSample). + +Keep in mind that macOS and tvOS are not officially supported by Firebase, and this repository is +actively developed primarily for iOS. While we can catch basic unit test issues with Travis, there +may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter +this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). + +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: + +``` +pod 'FirebaseABTesting' +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseRemoteConfig' +pod 'FirebaseStorage' +``` + +## Roadmap + +See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +plans and directions. + +## Contributing + +See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase +iOS SDK. + +## License + +The contents of this repository is licensed under the +[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +Your use of Firebase is governed by the +[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m new file mode 100644 index 0000000000..d07eecb0b1 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m @@ -0,0 +1,192 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" + +#if TARGET_OS_IOS || TARGET_OS_TV +#import +#elif TARGET_OS_OSX +#import +#endif // TARGET_OS_IOS || TARGET_OS_TV + +#import + +#import +#import +#import + +#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h" + +#pragma mark - General purpose encoders + +pb_bytes_array_t *GDTCCTEncodeString(NSString *string) { + NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding]; + return GDTCCTEncodeData(stringBytes); +} + +pb_bytes_array_t *GDTCCTEncodeData(NSData *data) { + pb_bytes_array_t *pbBytes = malloc(PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); + memcpy(pbBytes->bytes, [data bytes], data.length); + pbBytes->size = (pb_size_t)data.length; + return pbBytes; +} + +#pragma mark - CCT object constructors + +NSData *_Nullable GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest) { + pb_ostream_t sizestream = PB_OSTREAM_SIZING; + // Encode 1 time to determine the size. + if (!pb_encode(&sizestream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) { + GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for size: %s", + PB_GET_ERROR(&sizestream)); + } + + // Encode a 2nd time to actually get the bytes from it. + size_t bufferSize = sizestream.bytes_written; + CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); + pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); + if (!pb_encode(&ostream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) { + GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for bytes: %s", + PB_GET_ERROR(&ostream)); + } + CFDataSetLength(dataRef, ostream.bytes_written); + + return CFBridgingRelease(dataRef); +} + +gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest( + NSDictionary *> *logMappingIDToLogSet) { + gdt_cct_BatchedLogRequest batchedLogRequest = gdt_cct_BatchedLogRequest_init_default; + NSUInteger numberOfLogRequests = logMappingIDToLogSet.count; + gdt_cct_LogRequest *logRequests = malloc(sizeof(gdt_cct_LogRequest) * numberOfLogRequests); + + __block int i = 0; + [logMappingIDToLogSet enumerateKeysAndObjectsUsingBlock:^( + NSString *_Nonnull logMappingID, + NSSet *_Nonnull logSet, BOOL *_Nonnull stop) { + int32_t logSource = [logMappingID intValue]; + gdt_cct_LogRequest logRequest = GDTCCTConstructLogRequest(logSource, logSet); + logRequests[i] = logRequest; + i++; + }]; + + batchedLogRequest.log_request = logRequests; + batchedLogRequest.log_request_count = (pb_size_t)numberOfLogRequests; + return batchedLogRequest; +} + +gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource, + NSSet *_Nonnull logSet) { + if (logSet.count == 0) { + GDTCORLogError(GDTCORMCEGeneralError, @"%@", + @"An empty event set can't be serialized to proto."); + gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default; + return logRequest; + } + gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default; + logRequest.log_source = logSource; + logRequest.has_log_source = 1; + logRequest.client_info = GDTCCTConstructClientInfo(); + logRequest.has_client_info = 1; + logRequest.log_event = malloc(sizeof(gdt_cct_LogEvent) * logSet.count); + int i = 0; + for (GDTCORStoredEvent *log in logSet) { + gdt_cct_LogEvent logEvent = GDTCCTConstructLogEvent(log); + logRequest.log_event[i] = logEvent; + i++; + } + logRequest.log_event_count = (pb_size_t)logSet.count; + + return logRequest; +} + +gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCORStoredEvent *event) { + gdt_cct_LogEvent logEvent = gdt_cct_LogEvent_init_default; + logEvent.event_time_ms = event.clockSnapshot.timeMillis; + logEvent.has_event_time_ms = 1; + logEvent.event_uptime_ms = event.clockSnapshot.uptime; + logEvent.has_event_uptime_ms = 1; + logEvent.timezone_offset_seconds = event.clockSnapshot.timezoneOffsetSeconds; + logEvent.has_timezone_offset_seconds = 1; + // TODO: Read network_connection_info from the custom params dict. + + NSError *error; + NSData *extensionBytes = [NSData dataWithContentsOfURL:event.dataFuture.fileURL + options:0 + error:&error]; + if (error) { + GDTCORLogError(GDTCORMCEGeneralError, + @"There was an error reading extension bytes from disk: %@", error); + return logEvent; + } + logEvent.source_extension = GDTCCTEncodeData(extensionBytes); // read bytes from the file. + return logEvent; +} + +gdt_cct_ClientInfo GDTCCTConstructClientInfo() { + gdt_cct_ClientInfo clientInfo = gdt_cct_ClientInfo_init_default; + clientInfo.client_type = gdt_cct_ClientInfo_ClientType_IOS_FIREBASE; + clientInfo.has_client_type = 1; +#if TARGET_OS_IOS || TARGET_OS_TV + clientInfo.ios_client_info = GDTCCTConstructiOSClientInfo(); + clientInfo.has_ios_client_info = 1; +#elif TARGET_OS_OSX + // TODO(mikehaney24): Expand the proto to include macOS client info. +#endif + return clientInfo; +} + +gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo() { + gdt_cct_IosClientInfo iOSClientInfo = gdt_cct_IosClientInfo_init_default; +#if TARGET_OS_IOS || TARGET_OS_TV + UIDevice *device = [UIDevice currentDevice]; + NSBundle *bundle = [NSBundle mainBundle]; + NSLocale *locale = [NSLocale currentLocale]; + iOSClientInfo.os_full_version = GDTCCTEncodeString(device.systemVersion); + NSArray *versionComponents = [device.systemVersion componentsSeparatedByString:@"."]; + iOSClientInfo.os_major_version = GDTCCTEncodeString(versionComponents[0]); + NSString *version = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; + if (version) { + iOSClientInfo.application_build = GDTCCTEncodeString(version); + } + NSString *countryCode = [locale objectForKey:NSLocaleCountryCode]; + if (countryCode) { + iOSClientInfo.country = GDTCCTEncodeString([locale objectForKey:NSLocaleCountryCode]); + } + iOSClientInfo.model = GDTCCTEncodeString(device.model); + NSString *languageCode = bundle.preferredLocalizations.firstObject; + iOSClientInfo.language_code = + languageCode ? GDTCCTEncodeString(languageCode) : GDTCCTEncodeString(@"en"); + iOSClientInfo.application_bundle_id = GDTCCTEncodeString(bundle.bundleIdentifier); +#endif + return iOSClientInfo; +} + +#pragma mark - CCT Object decoders + +gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error) { + gdt_cct_LogResponse response = gdt_cct_LogResponse_init_default; + pb_istream_t istream = pb_istream_from_buffer([data bytes], [data length]); + if (!pb_decode(&istream, gdt_cct_LogResponse_fields, &response)) { + NSString *nanopb_error = [NSString stringWithFormat:@"%s", PB_GET_ERROR(&istream)]; + NSDictionary *userInfo = @{@"nanopb error:" : nanopb_error}; + if (error != NULL) { + *error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:userInfo]; + } + response = (gdt_cct_LogResponse)gdt_cct_LogResponse_init_default; + } + return response; +} diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m new file mode 100644 index 0000000000..94859a7490 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m @@ -0,0 +1,188 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h" + +#import +#import +#import +#import + +const static int64_t kMillisPerDay = 8.64e+7; + +@implementation GDTCCTPrioritizer + ++ (void)load { + GDTCCTPrioritizer *prioritizer = [GDTCCTPrioritizer sharedInstance]; + [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetCCT]; +} + ++ (instancetype)sharedInstance { + static GDTCCTPrioritizer *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[GDTCCTPrioritizer alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _queue = dispatch_queue_create("com.google.GDTCCTPrioritizer", DISPATCH_QUEUE_SERIAL); + _events = [[NSMutableSet alloc] init]; + } + return self; +} + +#pragma mark - GDTCORPrioritizer Protocol + +- (void)prioritizeEvent:(GDTCORStoredEvent *)event { + dispatch_async(_queue, ^{ + [self.events addObject:event]; + }); +} + +- (GDTCORUploadPackage *)uploadPackageWithConditions:(GDTCORUploadConditions)conditions { + GDTCORUploadPackage *package = [[GDTCORUploadPackage alloc] initWithTarget:kGDTCORTargetCCT]; + dispatch_sync(_queue, ^{ + NSSet *logEventsThatWillBeSent; + // A high priority event effectively flushes all events to be sent. + if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { + package.events = self.events; + return; + } + + // If on wifi, upload logs that are ok to send on wifi. + if ((conditions & GDTCORUploadConditionWifiData) == GDTCORUploadConditionWifiData) { + logEventsThatWillBeSent = [self logEventsOkToSendOnWifi]; + } else { + logEventsThatWillBeSent = [self logEventsOkToSendOnMobileData]; + } + + // If it's been > 24h since the last daily upload, upload logs with the daily QoS. + if (self.timeOfLastDailyUpload) { + int64_t millisSinceLastUpload = + [GDTCORClock snapshot].timeMillis - self.timeOfLastDailyUpload.timeMillis; + if (millisSinceLastUpload > kMillisPerDay) { + logEventsThatWillBeSent = + [logEventsThatWillBeSent setByAddingObjectsFromSet:[self logEventsOkToSendDaily]]; + } + } else { + self.timeOfLastDailyUpload = [GDTCORClock snapshot]; + logEventsThatWillBeSent = + [logEventsThatWillBeSent setByAddingObjectsFromSet:[self logEventsOkToSendDaily]]; + } + package.events = logEventsThatWillBeSent; + }); + return package; +} + +#pragma mark - Private helper methods + +/** The different possible quality of service specifiers. High values indicate high priority. */ +typedef NS_ENUM(NSInteger, GDTCCTQoSTier) { + /** The QoS tier wasn't set, and won't ever be sent. */ + GDTCCTQoSDefault = 0, + + /** This event is internal telemetry data that should not be sent on its own if possible. */ + GDTCCTQoSTelemetry = 1, + + /** This event should be sent, but in a batch only roughly once per day. */ + GDTCCTQoSDaily = 2, + + /** This event should only be uploaded on wifi. */ + GDTCCTQoSWifiOnly = 5, +}; + +/** Converts a GDTCOREventQoS to a GDTCCTQoS tier. + * + * @param qosTier The GDTCOREventQoS value. + * @return A static NSNumber that represents the CCT QoS tier. + */ +FOUNDATION_STATIC_INLINE +NSNumber *GDTCCTQosTierFromGDTCOREventQosTier(GDTCOREventQoS qosTier) { + switch (qosTier) { + case GDTCOREventQoSWifiOnly: + return @(GDTCCTQoSWifiOnly); + break; + + case GDTCOREventQoSTelemetry: + // falls through. + case GDTCOREventQoSDaily: + return @(GDTCCTQoSDaily); + break; + + default: + return @(GDTCCTQoSDefault); + break; + } +} + +/** Returns a set of logs that are ok to upload whilst on mobile data. + * + * @note This should be called from a thread safe method. + * @return A set of logs that are ok to upload whilst on mobile data. + */ +- (NSSet *)logEventsOkToSendOnMobileData { + return [self.events + objectsPassingTest:^BOOL(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDefault)]; + }]; +} + +/** Returns a set of logs that are ok to upload whilst on wifi. + * + * @note This should be called from a thread safe method. + * @return A set of logs that are ok to upload whilst on wifi. + */ +- (NSSet *)logEventsOkToSendOnWifi { + return [self.events + objectsPassingTest:^BOOL(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + NSNumber *qosTier = GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier); + return [qosTier isEqual:@(GDTCCTQoSDefault)] || [qosTier isEqual:@(GDTCCTQoSWifiOnly)] || + [qosTier isEqual:@(GDTCCTQoSDaily)]; + }]; +} + +/** Returns a set of logs that only should have a single upload attempt per day. + * + * @note This should be called from a thread safe method. + * @return A set of logs that are ok to upload only once per day. + */ +- (NSSet *)logEventsOkToSendDaily { + return [self.events + objectsPassingTest:^BOOL(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDaily)]; + }]; +} + +#pragma mark - GDTCORUploadPackageProtocol + +- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful { + dispatch_async(_queue, ^{ + NSSet *events = [package.events copy]; + for (GDTCORStoredEvent *event in events) { + [self.events removeObject:event]; + } + }); +} + +- (void)packageExpired:(GDTCORUploadPackage *)package { + [self packageDelivered:package successful:YES]; +} + +@end diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m new file mode 100644 index 0000000000..60a176eb34 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m @@ -0,0 +1,225 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCCTLibrary/Private/GDTCCTUploader.h" + +#import +#import +#import + +#import +#import +#import + +#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" +#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h" + +#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h" + +#if !NDEBUG +NSNotificationName const GDTCCTUploadCompleteNotification = @"com.GDTCCTUploader.UploadComplete"; +#endif // #if !NDEBUG + +@interface GDTCCTUploader () + +// Redeclared as readwrite. +@property(nullable, nonatomic, readwrite) NSURLSessionUploadTask *currentTask; + +@end + +@implementation GDTCCTUploader + ++ (void)load { + GDTCCTUploader *uploader = [GDTCCTUploader sharedInstance]; + [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetCCT]; +} + ++ (instancetype)sharedInstance { + static GDTCCTUploader *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[GDTCCTUploader alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _uploaderQueue = dispatch_queue_create("com.google.GDTCCTUploader", DISPATCH_QUEUE_SERIAL); + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; + _uploaderSession = [NSURLSession sessionWithConfiguration:config]; + } + return self; +} + +- (NSURL *)defaultServerURL { + static NSURL *defaultServerURL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // These strings should be interleaved to construct the real URL. This is just to (hopefully) + // fool github URL scanning bots. + const char *p1 = "hts/frbslgiggolai.o/0clgbth"; + const char *p2 = "tp:/ieaeogn.ogepscmvc/o/ac"; + const char defaultURL[54] = { + p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], p2[4], p1[5], + p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], p1[9], p2[9], p1[10], p2[10], + p1[11], p2[11], p1[12], p2[12], p1[13], p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], + p2[16], p1[17], p2[17], p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], + p1[22], p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], '\0'}; + defaultServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:defaultURL]]; + }); + return defaultServerURL; +} + +- (void)uploadPackage:(GDTCORUploadPackage *)package { + __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; + bgID = [[GDTCORApplication sharedApplication] + beginBackgroundTaskWithName:@"GDTCCTUploader-upload" + expirationHandler:^{ + if (bgID != GDTCORBackgroundIdentifierInvalid) { + // Cancel the current upload and complete delivery. + [self.currentTask cancel]; + [self.currentUploadPackage completeDelivery]; + + // End the task. + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + } + }]; + + dispatch_async(_uploaderQueue, ^{ + if (self->_currentTask || self->_currentUploadPackage) { + GDTCORLogWarning(GDTCORMCWUploadFailed, @"%@", + @"An upload shouldn't be initiated with another in progress."); + return; + } + NSURL *serverURL = self.serverURL ? self.serverURL : [self defaultServerURL]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:serverURL]; + request.HTTPMethod = @"POST"; + + id completionHandler = ^(NSData *_Nullable data, NSURLResponse *_Nullable response, + NSError *_Nullable error) { + if (error) { + GDTCORLogWarning(GDTCORMCWUploadFailed, @"There was an error uploading events: %@", error); + } + NSError *decodingError; + if (data) { + gdt_cct_LogResponse logResponse = GDTCCTDecodeLogResponse(data, &decodingError); + if (!decodingError && logResponse.has_next_request_wait_millis) { + self->_nextUploadTime = + [GDTCORClock clockSnapshotInTheFuture:logResponse.next_request_wait_millis]; + } else { + // 15 minutes from now. + self->_nextUploadTime = [GDTCORClock clockSnapshotInTheFuture:15 * 60 * 1000]; + } + pb_release(gdt_cct_LogResponse_fields, &logResponse); + } +#if !NDEBUG + // Post a notification when in DEBUG mode to state how many packages were uploaded. Useful + // for validation during tests. + [[NSNotificationCenter defaultCenter] postNotificationName:GDTCCTUploadCompleteNotification + object:@(package.events.count)]; +#endif // #if !NDEBUG + [package completeDelivery]; + + // End the background task if there was one. + if (bgID != GDTCORBackgroundIdentifierInvalid) { + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + } + self.currentTask = nil; + self.currentUploadPackage = nil; + }; + self->_currentUploadPackage = package; + NSData *requestProtoData = + [self constructRequestProtoFromPackage:(GDTCORUploadPackage *)package]; + self.currentTask = [self.uploaderSession uploadTaskWithRequest:request + fromData:requestProtoData + completionHandler:completionHandler]; + [self.currentTask resume]; + }); +} + +- (BOOL)readyToUploadWithConditions:(GDTCORUploadConditions)conditions { + __block BOOL result = NO; + dispatch_sync(_uploaderQueue, ^{ + if (self->_currentUploadPackage) { + result = NO; + return; + } + if (self->_currentTask) { + result = NO; + return; + } + if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { + result = YES; + return; + } else if (self->_nextUploadTime) { + result = [[GDTCORClock snapshot] isAfter:self->_nextUploadTime]; + return; + } + result = YES; + }); + return result; +} + +#pragma mark - Private helper methods + +/** Constructs data given an upload package. + * + * @param package The upload package used to construct the request proto bytes. + * @return Proto bytes representing a gdt_cct_LogRequest object. + */ +- (nonnull NSData *)constructRequestProtoFromPackage:(GDTCORUploadPackage *)package { + // Segment the log events by log type. + NSMutableDictionary *> *logMappingIDToLogSet = + [[NSMutableDictionary alloc] init]; + [package.events + enumerateObjectsUsingBlock:^(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + NSMutableSet *logSet = logMappingIDToLogSet[event.mappingID]; + logSet = logSet ? logSet : [[NSMutableSet alloc] init]; + [logSet addObject:event]; + logMappingIDToLogSet[event.mappingID] = logSet; + }]; + + gdt_cct_BatchedLogRequest batchedLogRequest = + GDTCCTConstructBatchedLogRequest(logMappingIDToLogSet); + + NSData *data = GDTCCTEncodeBatchedLogRequest(&batchedLogRequest); + pb_release(gdt_cct_BatchedLogRequest_fields, &batchedLogRequest); + return data ? data : [[NSData alloc] init]; +} + +#pragma mark - GDTCORUploadPackageProtocol + +- (void)packageExpired:(GDTCORUploadPackage *)package { + dispatch_async(_uploaderQueue, ^{ + [self.currentTask cancel]; + self.currentTask = nil; + self.currentUploadPackage = nil; + }); +} + +#pragma mark - GDTCORLifecycleProtocol + +- (void)appWillTerminate:(GDTCORApplication *)application { + dispatch_sync(_uploaderQueue, ^{ + [self.currentTask cancel]; + [self.currentUploadPackage completeDelivery]; + }); +} + +@end diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLPrioritizer.m b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLPrioritizer.m new file mode 100644 index 0000000000..819c27187a --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLPrioritizer.m @@ -0,0 +1,188 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCCTLibrary/Private/GDTFLLPrioritizer.h" + +#import +#import +#import +#import + +const static int64_t kMillisPerDay = 8.64e+7; + +@implementation GDTFLLPrioritizer + ++ (void)load { + GDTFLLPrioritizer *prioritizer = [GDTFLLPrioritizer sharedInstance]; + [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetFLL]; +} + ++ (instancetype)sharedInstance { + static GDTFLLPrioritizer *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[GDTFLLPrioritizer alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _queue = dispatch_queue_create("com.google.GDTFLLPrioritizer", DISPATCH_QUEUE_SERIAL); + _events = [[NSMutableSet alloc] init]; + } + return self; +} + +#pragma mark - GDTCORPrioritizer Protocol + +- (void)prioritizeEvent:(GDTCORStoredEvent *)event { + dispatch_async(_queue, ^{ + [self.events addObject:event]; + }); +} + +- (GDTCORUploadPackage *)uploadPackageWithConditions:(GDTCORUploadConditions)conditions { + GDTCORUploadPackage *package = [[GDTCORUploadPackage alloc] initWithTarget:kGDTCORTargetFLL]; + dispatch_sync(_queue, ^{ + NSSet *logEventsThatWillBeSent; + // A high priority event effectively flushes all events to be sent. + if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { + package.events = self.events; + return; + } + + // If on wifi, upload logs that are ok to send on wifi. + if ((conditions & GDTCORUploadConditionWifiData) == GDTCORUploadConditionWifiData) { + logEventsThatWillBeSent = [self logEventsOkToSendOnWifi]; + } else { + logEventsThatWillBeSent = [self logEventsOkToSendOnMobileData]; + } + + // If it's been > 24h since the last daily upload, upload logs with the daily QoS. + if (self.timeOfLastDailyUpload) { + int64_t millisSinceLastUpload = + [GDTCORClock snapshot].timeMillis - self.timeOfLastDailyUpload.timeMillis; + if (millisSinceLastUpload > kMillisPerDay) { + logEventsThatWillBeSent = + [logEventsThatWillBeSent setByAddingObjectsFromSet:[self logEventsOkToSendDaily]]; + } + } else { + self.timeOfLastDailyUpload = [GDTCORClock snapshot]; + logEventsThatWillBeSent = + [logEventsThatWillBeSent setByAddingObjectsFromSet:[self logEventsOkToSendDaily]]; + } + package.events = logEventsThatWillBeSent; + }); + return package; +} + +#pragma mark - Private helper methods + +/** The different possible quality of service specifiers. High values indicate high priority. */ +typedef NS_ENUM(NSInteger, GDTFLLQoSTier) { + /** The QoS tier wasn't set, and won't ever be sent. */ + GDTFLLQoSDefault = 0, + + /** This event is internal telemetry data that should not be sent on its own if possible. */ + GDTFLLQoSTelemetry = 1, + + /** This event should be sent, but in a batch only roughly once per day. */ + GDTFLLQoSDaily = 2, + + /** This event should only be uploaded on wifi. */ + GDTFLLQoSWifiOnly = 5, +}; + +/** Converts a GDTCOREventQoS to a GDTFLLQoS tier. + * + * @param qosTier The GDTCOREventQoS value. + * @return A static NSNumber that represents the CCT QoS tier. + */ +FOUNDATION_STATIC_INLINE +NSNumber *GDTCCTQosTierFromGDTCOREventQosTier(GDTCOREventQoS qosTier) { + switch (qosTier) { + case GDTCOREventQoSWifiOnly: + return @(GDTFLLQoSWifiOnly); + break; + + case GDTCOREventQoSTelemetry: + // falls through. + case GDTCOREventQoSDaily: + return @(GDTFLLQoSDaily); + break; + + default: + return @(GDTFLLQoSDefault); + break; + } +} + +/** Returns a set of logs that are ok to upload whilst on mobile data. + * + * @note This should be called from a thread safe method. + * @return A set of logs that are ok to upload whilst on mobile data. + */ +- (NSSet *)logEventsOkToSendOnMobileData { + return [self.events + objectsPassingTest:^BOOL(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTFLLQoSDefault)]; + }]; +} + +/** Returns a set of logs that are ok to upload whilst on wifi. + * + * @note This should be called from a thread safe method. + * @return A set of logs that are ok to upload whilst on wifi. + */ +- (NSSet *)logEventsOkToSendOnWifi { + return [self.events + objectsPassingTest:^BOOL(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + NSNumber *qosTier = GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier); + return [qosTier isEqual:@(GDTFLLQoSDefault)] || [qosTier isEqual:@(GDTFLLQoSWifiOnly)] || + [qosTier isEqual:@(GDTFLLQoSDaily)]; + }]; +} + +/** Returns a set of logs that only should have a single upload attempt per day. + * + * @note This should be called from a thread safe method. + * @return A set of logs that are ok to upload only once per day. + */ +- (NSSet *)logEventsOkToSendDaily { + return [self.events + objectsPassingTest:^BOOL(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTFLLQoSDaily)]; + }]; +} + +#pragma mark - GDTCORUploadPackageProtocol + +- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful { + dispatch_async(_queue, ^{ + NSSet *events = [package.events copy]; + for (GDTCORStoredEvent *event in events) { + [self.events removeObject:event]; + } + }); +} + +- (void)packageExpired:(GDTCORUploadPackage *)package { + [self packageDelivered:package successful:YES]; +} + +@end diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLUploader.m b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLUploader.m new file mode 100644 index 0000000000..3e121d3d5d --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLUploader.m @@ -0,0 +1,331 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GDTCCTLibrary/Private/GDTFLLUploader.h" + +#import + +#import +#import +#import + +#import +#import +#import + +#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" +#import "GDTCCTLibrary/Private/GDTFLLPrioritizer.h" + +#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h" + +#if !NDEBUG +NSNotificationName const GDTFLLUploadCompleteNotification = @"com.GDTFLLUploader.UploadComplete"; +#endif // #if !NDEBUG + +@interface GDTFLLUploader () + +// Redeclared as readwrite. +@property(nullable, nonatomic, readwrite) NSURLSessionUploadTask *currentTask; + +@end + +@implementation GDTFLLUploader + ++ (void)load { + GDTFLLUploader *uploader = [GDTFLLUploader sharedInstance]; + [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetFLL]; +} + ++ (instancetype)sharedInstance { + static GDTFLLUploader *sharedInstance; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[GDTFLLUploader alloc] init]; + }); + return sharedInstance; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _uploaderQueue = dispatch_queue_create("com.google.GDTFLLUploader", DISPATCH_QUEUE_SERIAL); + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; + _uploaderSession = [NSURLSession sessionWithConfiguration:config]; + } + return self; +} + +- (NSURL *)defaultServerURL { + static NSURL *defaultServerURL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // These strings should be interleaved to construct the real URL. This is just to (hopefully) + // fool github URL scanning bots. + const char *p1 = "hts/frbslgigp.ogepscmv/ieo/eaybtho"; + const char *p2 = "tp:/ieaeogn-agolai.o/1frlglgc/aclg"; + const char defaultURL[69] = { + p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], p2[4], + p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], p1[9], p2[9], + p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13], p2[13], p1[14], p2[14], + p1[15], p2[15], p1[16], p2[16], p1[17], p2[17], p1[18], p2[18], p1[19], p2[19], + p1[20], p2[20], p1[21], p2[21], p1[22], p2[22], p1[23], p2[23], p1[24], p2[24], + p1[25], p2[25], p1[26], p2[26], p1[27], p2[27], p1[28], p2[28], p1[29], p2[29], + p1[30], p2[30], p1[31], p2[31], p1[32], p2[32], p1[33], p2[33], '\0'}; + defaultServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:defaultURL]]; + }); + return defaultServerURL; +} + +- (NSString *)defaultAPIKey { + static NSString *defaultServerKey; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // These strings should be interleaved to construct the real key. + const char *p1 = "AzSBG0honD6A-PxV5nBc"; + const char *p2 = "Iay44Iwtu2vV0AOrz1C"; + const char defaultKey[40] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], + p1[4], p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], + p1[8], p2[8], p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], + p1[12], p2[12], p1[13], p2[13], p1[14], p2[14], p1[15], p2[15], + p1[16], p2[16], p1[17], p2[17], p1[18], p2[18], p1[19], '\0'}; + defaultServerKey = [NSString stringWithUTF8String:defaultKey]; + }); + return defaultServerKey; +} + +- (void)uploadPackage:(GDTCORUploadPackage *)package { + __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; + bgID = [[GDTCORApplication sharedApplication] + beginBackgroundTaskWithName:@"GDTFLLUploader-upload" + expirationHandler:^{ + if (bgID != GDTCORBackgroundIdentifierInvalid) { + // Cancel the upload and complete delivery. + [self.currentTask cancel]; + [self.currentUploadPackage completeDelivery]; + + // End the background task. + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + } + }]; + + dispatch_async(_uploaderQueue, ^{ + if (self->_currentTask || self->_currentUploadPackage) { + GDTCORLogWarning(GDTCORMCWUploadFailed, @"%@", + @"An upload shouldn't be initiated with another in progress."); + return; + } + NSURL *serverURL = self.serverURL ? self.serverURL : [self defaultServerURL]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:serverURL]; + [request setValue:[self defaultAPIKey] forHTTPHeaderField:@"X-Goog-Api-Key"]; + [request setValue:@"application/x-protobuf" forHTTPHeaderField:@"Content-Type"]; + [request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"]; + [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; + request.HTTPMethod = @"POST"; + + id completionHandler = ^(NSData *_Nullable data, NSURLResponse *_Nullable response, + NSError *_Nullable error) { + if (error) { + GDTCORLogWarning(GDTCORMCWUploadFailed, @"There was an error uploading events: %@", error); + } + NSError *decodingError; + if (data) { + gdt_cct_LogResponse logResponse = GDTCCTDecodeLogResponse(data, &decodingError); + if (!decodingError && logResponse.has_next_request_wait_millis) { + self->_nextUploadTime = + [GDTCORClock clockSnapshotInTheFuture:logResponse.next_request_wait_millis]; + } else { + // 15 minutes from now. + self->_nextUploadTime = [GDTCORClock clockSnapshotInTheFuture:15 * 60 * 1000]; + } + pb_release(gdt_cct_LogResponse_fields, &logResponse); + } + + // Only retry if one of these codes is returned. + if (((NSHTTPURLResponse *)response).statusCode == 429 || + ((NSHTTPURLResponse *)response).statusCode == 503) { + [package retryDeliveryInTheFuture]; + } else { +#if !NDEBUG + // Post a notification when in DEBUG mode to state how many packages were uploaded. Useful + // for validation during tests. + [[NSNotificationCenter defaultCenter] postNotificationName:GDTFLLUploadCompleteNotification + object:@(package.events.count)]; +#endif // #if !NDEBUG + [package completeDelivery]; + } + + // End the background task if there was one. + if (bgID != GDTCORBackgroundIdentifierInvalid) { + [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; + bgID = GDTCORBackgroundIdentifierInvalid; + } + self.currentTask = nil; + self.currentUploadPackage = nil; + }; + self->_currentUploadPackage = package; + NSData *requestProtoData = + [self constructRequestProtoFromPackage:(GDTCORUploadPackage *)package]; + NSData *gzippedData = [GDTFLLUploader gzippedData:requestProtoData]; + self.currentTask = [self.uploaderSession uploadTaskWithRequest:request + fromData:gzippedData + completionHandler:completionHandler]; + [self.currentTask resume]; + }); +} + +- (BOOL)readyToUploadWithConditions:(GDTCORUploadConditions)conditions { + __block BOOL result = NO; + dispatch_sync(_uploaderQueue, ^{ + if (self->_currentUploadPackage) { + result = NO; + return; + } + if (self->_currentTask) { + result = NO; + return; + } + if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { + result = YES; + return; + } else if (self->_nextUploadTime) { + result = [[GDTCORClock snapshot] isAfter:self->_nextUploadTime]; + return; + } + result = YES; + }); + return result; +} + +#pragma mark - Private helper methods + +/** Compresses the given data and returns a new data object. + * + * @note Reduced version from GULNSData+zlib.m of GoogleUtilities. + * @return Compressed data, or nil if there was an error. + */ ++ (nullable NSData *)gzippedData:(NSData *)data { +#if defined(__LP64__) && __LP64__ + // Don't support > 32bit length for 64 bit, see note in header. + if (data.length > UINT_MAX) { + return nil; + } +#endif + + const uint kChunkSize = 1024; + + const void *bytes = [data bytes]; + NSUInteger length = [data length]; + + int level = Z_DEFAULT_COMPRESSION; + if (!bytes || !length) { + return nil; + } + + z_stream strm; + bzero(&strm, sizeof(z_stream)); + + int memLevel = 8; // Default. + int windowBits = 15 + 16; // Enable gzip header instead of zlib header. + + int retCode; + if ((retCode = deflateInit2(&strm, level, Z_DEFLATED, windowBits, memLevel, + Z_DEFAULT_STRATEGY)) != Z_OK) { + return nil; + } + + // Hint the size at 1/4 the input size. + NSMutableData *result = [NSMutableData dataWithCapacity:(length / 4)]; + unsigned char output[kChunkSize]; + + // Setup the input. + strm.avail_in = (unsigned int)length; + strm.next_in = (unsigned char *)bytes; + + // Collect the data. + do { + // update what we're passing in + strm.avail_out = kChunkSize; + strm.next_out = output; + retCode = deflate(&strm, Z_FINISH); + if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { + deflateEnd(&strm); + return nil; + } + // Collect what we got. + unsigned gotBack = kChunkSize - strm.avail_out; + if (gotBack > 0) { + [result appendBytes:output length:gotBack]; + } + + } while (retCode == Z_OK); + + // If the loop exits, it used all input and the stream ended. + NSAssert(strm.avail_in == 0, + @"Should have finished deflating without using all input, %u bytes left", strm.avail_in); + NSAssert(retCode == Z_STREAM_END, + @"thought we finished deflate w/o getting a result of stream end, code %d", retCode); + + // Clean up. + deflateEnd(&strm); + + return result; +} + +/** Constructs data given an upload package. + * + * @param package The upload package used to construct the request proto bytes. + * @return Proto bytes representing a gdt_cct_LogRequest object. + */ +- (nonnull NSData *)constructRequestProtoFromPackage:(GDTCORUploadPackage *)package { + // Segment the log events by log type. + NSMutableDictionary *> *logMappingIDToLogSet = + [[NSMutableDictionary alloc] init]; + [package.events + enumerateObjectsUsingBlock:^(GDTCORStoredEvent *_Nonnull event, BOOL *_Nonnull stop) { + NSMutableSet *logSet = logMappingIDToLogSet[event.mappingID]; + logSet = logSet ? logSet : [[NSMutableSet alloc] init]; + [logSet addObject:event]; + logMappingIDToLogSet[event.mappingID] = logSet; + }]; + + gdt_cct_BatchedLogRequest batchedLogRequest = + GDTCCTConstructBatchedLogRequest(logMappingIDToLogSet); + + NSData *data = GDTCCTEncodeBatchedLogRequest(&batchedLogRequest); + pb_release(gdt_cct_BatchedLogRequest_fields, &batchedLogRequest); + return data ? data : [[NSData alloc] init]; +} + +#pragma mark - GDTCORUploadPackageProtocol + +- (void)packageExpired:(GDTCORUploadPackage *)package { + dispatch_async(_uploaderQueue, ^{ + [self.currentTask cancel]; + self.currentTask = nil; + self.currentUploadPackage = nil; + }); +} + +#pragma mark - GDTCORLifecycleProtocol + +- (void)appWillTerminate:(GDTCORApplication *)application { + dispatch_sync(_uploaderQueue, ^{ + [self.currentTask cancel]; + [self.currentUploadPackage completeDelivery]; + }); +} + +@end diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h new file mode 100644 index 0000000000..08081cc727 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h @@ -0,0 +1,112 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h" + +NS_ASSUME_NONNULL_BEGIN + +#pragma mark - General purpose encoders + +/** Converts an NSString* to a pb_bytes_array_t*. + * + * @note malloc is called in this method. Ensure that pb_release is called on this or the parent. + * + * @param string The string to convert. + * @return A newly allocated array of bytes representing the UTF8 encoding of the string. + */ +pb_bytes_array_t *GDTCCTEncodeString(NSString *string); + +/** Converts an NSData to a pb_bytes_array_t*. + * + * @note malloc is called in this method. Ensure that pb_release is called on this or the parent. + * + * @param data The data to convert. + * @return A newly allocated array of bytes with [data bytes] copied into it. + */ +pb_bytes_array_t *GDTCCTEncodeData(NSData *data); + +#pragma mark - CCT object constructors + +/** Encodes a batched log request. + * + * @note Ensure that pb_release is called on the batchedLogRequest param. + * + * @param batchedLogRequest A pointer to the log batch to encode to bytes. + * @return An NSData object representing the bytes of the log request batch. + */ +FOUNDATION_EXPORT +NSData *GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest); + +/** Constructs a gdt_cct_BatchedLogRequest given sets of events segemented by mapping ID. + * + * @note malloc is called in this method. Ensure that pb_release is called on this or the parent. + * + * @param logMappingIDToLogSet A map of mapping IDs to sets of events to convert into a batch. + * @return A newly created gdt_cct_BatchedLogRequest. + */ +FOUNDATION_EXPORT +gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest( + NSDictionary *> *logMappingIDToLogSet); + +/** Constructs a log request given a log source and a set of events. + * + * @note malloc is called in this method. Ensure that pb_release is called on this or the parent. + * @param logSource The CCT log source to put into the log request. + * @param logSet The set of events to send in this log request. + */ +FOUNDATION_EXPORT +gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource, NSSet *logSet); + +/** Constructs a gdt_cct_LogEvent given a GDTCORStoredEvent*. + * + * @param event The GDTCORStoredEvent to convert. + * @return The new gdt_cct_LogEvent object. + */ +FOUNDATION_EXPORT +gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCORStoredEvent *event); + +/** Constructs a gdt_cct_ClientInfo representing the client device. + * + * @return The new gdt_cct_ClientInfo object. + */ +FOUNDATION_EXPORT +gdt_cct_ClientInfo GDTCCTConstructClientInfo(void); + +/** Constructs a gdt_cct_IosClientInfo representing the client device. + * + * @return The new gdt_cct_IosClientInfo object. + */ +FOUNDATION_EXPORT +gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo(void); + +#pragma mark - CCT object decoders + +/** Decodes a gdt_cct_LogResponse given proto bytes. + * + * @note malloc is called in this method. Ensure that pb_release is called on the return value. + * + * @param data The proto bytes of the gdt_cct_LogResponse. + * @param error An error that will be populated if something went wrong during decoding. + * @return A newly allocated gdt_cct_LogResponse from the data, if the bytes decoded properly. + */ +FOUNDATION_EXPORT +gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error); + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h new file mode 100644 index 0000000000..1908a31b81 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h @@ -0,0 +1,44 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Manages the prioritization of events from GoogleDataTransport. */ +@interface GDTCCTPrioritizer : NSObject + +/** The queue on which this prioritizer operates. */ +@property(nonatomic) dispatch_queue_t queue; + +/** All log events that have been processed by this prioritizer. */ +@property(nonatomic) NSMutableSet *events; + +/** The most recent attempted upload of daily uploaded logs. */ +@property(nonatomic) GDTCORClock *timeOfLastDailyUpload; + +/** Creates and/or returns the singleton instance of this class. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance; + +NS_ASSUME_NONNULL_END + +@end diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h new file mode 100644 index 0000000000..ba95a201ba --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h @@ -0,0 +1,57 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +#if !NDEBUG +/** A notification fired when uploading is complete, detailing the number of events uploaded. */ +extern NSNotificationName const GDTCCTUploadCompleteNotification; +#endif // #if !NDEBUG + +/** Class capable of uploading events to the CCT backend. */ +@interface GDTCCTUploader : NSObject + +/** The queue on which all CCT uploading will occur. */ +@property(nonatomic, readonly) dispatch_queue_t uploaderQueue; + +/** The server URL to upload to. Look at .m for the default value. */ +@property(nonatomic) NSURL *serverURL; + +/** The URL session that will attempt upload. */ +@property(nonatomic, readonly) NSURLSession *uploaderSession; + +/** The current upload task. */ +@property(nullable, nonatomic, readonly) NSURLSessionUploadTask *currentTask; + +/** Current upload package. */ +@property(nullable, nonatomic) GDTCORUploadPackage *currentUploadPackage; + +/** The next upload time. */ +@property(nullable, nonatomic) GDTCORClock *nextUploadTime; + +/** Creates and/or returns the singleton instance of this class. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLPrioritizer.h b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLPrioritizer.h new file mode 100644 index 0000000000..b7622f2ead --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLPrioritizer.h @@ -0,0 +1,44 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Manages the prioritization of events from GoogleDataTransport. */ +@interface GDTFLLPrioritizer : NSObject + +/** The queue on which this prioritizer operates. */ +@property(nonatomic) dispatch_queue_t queue; + +/** All log events that have been processed by this prioritizer. */ +@property(nonatomic) NSMutableSet *events; + +/** The most recent attempted upload of daily uploaded logs. */ +@property(nonatomic) GDTCORClock *timeOfLastDailyUpload; + +/** Creates and/or returns the singleton instance of this class. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance; + +NS_ASSUME_NONNULL_END + +@end diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLUploader.h b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLUploader.h new file mode 100644 index 0000000000..7df08ab822 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLUploader.h @@ -0,0 +1,57 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +#if !NDEBUG +/** A notification fired when uploading is complete, detailing the number of events uploaded. */ +extern NSNotificationName const GDTFLLUploadCompleteNotification; +#endif // #if !NDEBUG + +/** Class capable of uploading events to the CCT backend. */ +@interface GDTFLLUploader : NSObject + +/** The queue on which all CCT uploading will occur. */ +@property(nonatomic, readonly) dispatch_queue_t uploaderQueue; + +/** The server URL to upload to. Look at .m for the default value. */ +@property(nonatomic) NSURL *serverURL; + +/** The URL session that will attempt upload. */ +@property(nonatomic, readonly) NSURLSession *uploaderSession; + +/** The current upload task. */ +@property(nullable, nonatomic, readonly) NSURLSessionUploadTask *currentTask; + +/** Current upload package. */ +@property(nullable, nonatomic) GDTCORUploadPackage *currentUploadPackage; + +/** The next upload time. */ +@property(nullable, nonatomic) GDTCORClock *nextUploadTime; + +/** Creates and/or returns the singleton instance of this class. + * + * @return The singleton instance of this class. + */ ++ (instancetype)sharedInstance; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c new file mode 100644 index 0000000000..95846e6d66 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c @@ -0,0 +1,128 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Automatically generated nanopb constant definitions */ +/* Generated by nanopb-0.3.9.3 */ + +#include "cct.nanopb.h" + +/* @@protoc_insertion_point(includes) */ +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + +const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default = gdt_cct_NetworkConnectionInfo_NetworkType_NONE; +const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default = gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE; +const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default = gdt_cct_QosTierConfiguration_QosTier_DEFAULT; +const int32_t gdt_cct_QosTierConfiguration_log_source_default = 0; + + +const pb_field_t gdt_cct_LogEvent_fields[7] = { + PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, gdt_cct_LogEvent, event_time_ms, event_time_ms, 0), + PB_FIELD( 6, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_LogEvent, source_extension, event_time_ms, 0), + PB_FIELD( 11, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, event_code, source_extension, 0), + PB_FIELD( 15, SINT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, timezone_offset_seconds, event_code, 0), + PB_FIELD( 17, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, event_uptime_ms, timezone_offset_seconds, 0), + PB_FIELD( 23, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, network_connection_info, event_uptime_ms, &gdt_cct_NetworkConnectionInfo_fields), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3] = { + PB_FIELD( 1, ENUM , OPTIONAL, STATIC , FIRST, gdt_cct_NetworkConnectionInfo, network_type, network_type, &gdt_cct_NetworkConnectionInfo_network_type_default), + PB_FIELD( 2, UENUM , OPTIONAL, STATIC , OTHER, gdt_cct_NetworkConnectionInfo, mobile_subtype, network_type, &gdt_cct_NetworkConnectionInfo_mobile_subtype_default), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_IosClientInfo_fields[8] = { + PB_FIELD( 3, BYTES , OPTIONAL, POINTER , FIRST, gdt_cct_IosClientInfo, os_major_version, os_major_version, 0), + PB_FIELD( 4, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, os_full_version, os_major_version, 0), + PB_FIELD( 5, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_build, os_full_version, 0), + PB_FIELD( 6, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, country, application_build, 0), + PB_FIELD( 7, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, model, country, 0), + PB_FIELD( 8, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, language_code, model, 0), + PB_FIELD( 11, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_bundle_id, language_code, 0), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_ClientInfo_fields[3] = { + PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, gdt_cct_ClientInfo, client_type, client_type, 0), + PB_FIELD( 4, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_ClientInfo, ios_client_info, client_type, &gdt_cct_IosClientInfo_fields), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_BatchedLogRequest_fields[2] = { + PB_FIELD( 1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_BatchedLogRequest, log_request, log_request, &gdt_cct_LogRequest_fields), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_LogRequest_fields[7] = { + PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, gdt_cct_LogRequest, client_info, client_info, &gdt_cct_ClientInfo_fields), + PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, log_source, client_info, 0), + PB_FIELD( 3, MESSAGE , REPEATED, POINTER , OTHER, gdt_cct_LogRequest, log_event, log_source, &gdt_cct_LogEvent_fields), + PB_FIELD( 4, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, request_time_ms, log_event, 0), + PB_FIELD( 8, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, request_uptime_ms, request_time_ms, 0), + PB_FIELD( 9, UENUM , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, qos_tier, request_uptime_ms, &gdt_cct_LogRequest_qos_tier_default), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_QosTierConfiguration_fields[3] = { + PB_FIELD( 2, UENUM , OPTIONAL, STATIC , FIRST, gdt_cct_QosTierConfiguration, qos_tier, qos_tier, 0), + PB_FIELD( 3, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_QosTierConfiguration, log_source, qos_tier, &gdt_cct_QosTierConfiguration_log_source_default), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_QosTiersOverride_fields[3] = { + PB_FIELD( 1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_QosTiersOverride, qos_tier_configuration, qos_tier_configuration, &gdt_cct_QosTierConfiguration_fields), + PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_QosTiersOverride, qos_tier_fingerprint, qos_tier_configuration, 0), + PB_LAST_FIELD +}; + +const pb_field_t gdt_cct_LogResponse_fields[3] = { + PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, gdt_cct_LogResponse, next_request_wait_millis, next_request_wait_millis, 0), + PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_LogResponse, qos_tier, next_request_wait_millis, &gdt_cct_QosTiersOverride_fields), + PB_LAST_FIELD +}; + + + + + + +/* Check that field information fits in pb_field_t */ +#if !defined(PB_FIELD_32BIT) +/* If you get an error here, it means that you need to define PB_FIELD_32BIT + * compile-time option. You can do that in pb.h or on compiler command line. + * + * The reason you need to do this is that some of your messages contain tag + * numbers or field sizes that are larger than what can fit in 8 or 16 bit + * field descriptors. + */ +PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 65536 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 65536 && pb_membersize(gdt_cct_LogRequest, client_info) < 65536 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse) +#endif + +#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) +/* If you get an error here, it means that you need to define PB_FIELD_16BIT + * compile-time option. You can do that in pb.h or on compiler command line. + * + * The reason you need to do this is that some of your messages contain tag + * numbers or field sizes that are larger than what can fit in the default + * 8 bit descriptors. + */ +PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 256 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 256 && pb_membersize(gdt_cct_LogRequest, client_info) < 256 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse) +#endif + + +/* @@protoc_insertion_point(eof) */ diff --git a/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h new file mode 100644 index 0000000000..a6d4cfb82b --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h @@ -0,0 +1,281 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Automatically generated nanopb header */ +/* Generated by nanopb-0.3.9.3 */ + +#ifndef PB_GDT_CCT_CCT_NANOPB_H_INCLUDED +#define PB_GDT_CCT_CCT_NANOPB_H_INCLUDED +#include + +/* @@protoc_insertion_point(includes) */ +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + + +/* Enum definitions */ +typedef enum _gdt_cct_NetworkConnectionInfo_NetworkType { + gdt_cct_NetworkConnectionInfo_NetworkType_NONE = -1, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE = 0, + gdt_cct_NetworkConnectionInfo_NetworkType_WIFI = 1, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_MMS = 2, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_SUPL = 3, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_DUN = 4, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_HIPRI = 5, + gdt_cct_NetworkConnectionInfo_NetworkType_WIMAX = 6, + gdt_cct_NetworkConnectionInfo_NetworkType_BLUETOOTH = 7, + gdt_cct_NetworkConnectionInfo_NetworkType_DUMMY = 8, + gdt_cct_NetworkConnectionInfo_NetworkType_ETHERNET = 9, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_FOTA = 10, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IMS = 11, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_CBS = 12, + gdt_cct_NetworkConnectionInfo_NetworkType_WIFI_P2P = 13, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IA = 14, + gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_EMERGENCY = 15, + gdt_cct_NetworkConnectionInfo_NetworkType_PROXY = 16, + gdt_cct_NetworkConnectionInfo_NetworkType_VPN = 17 +} gdt_cct_NetworkConnectionInfo_NetworkType; +#define _gdt_cct_NetworkConnectionInfo_NetworkType_MIN gdt_cct_NetworkConnectionInfo_NetworkType_NONE +#define _gdt_cct_NetworkConnectionInfo_NetworkType_MAX gdt_cct_NetworkConnectionInfo_NetworkType_VPN +#define _gdt_cct_NetworkConnectionInfo_NetworkType_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_NetworkType)(gdt_cct_NetworkConnectionInfo_NetworkType_VPN+1)) + +typedef enum _gdt_cct_NetworkConnectionInfo_MobileSubtype { + gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE = 0, + gdt_cct_NetworkConnectionInfo_MobileSubtype_GPRS = 1, + gdt_cct_NetworkConnectionInfo_MobileSubtype_EDGE = 2, + gdt_cct_NetworkConnectionInfo_MobileSubtype_UMTS = 3, + gdt_cct_NetworkConnectionInfo_MobileSubtype_CDMA = 4, + gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_0 = 5, + gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_A = 6, + gdt_cct_NetworkConnectionInfo_MobileSubtype_RTT = 7, + gdt_cct_NetworkConnectionInfo_MobileSubtype_HSDPA = 8, + gdt_cct_NetworkConnectionInfo_MobileSubtype_HSUPA = 9, + gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPA = 10, + gdt_cct_NetworkConnectionInfo_MobileSubtype_IDEN = 11, + gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_B = 12, + gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE = 13, + gdt_cct_NetworkConnectionInfo_MobileSubtype_EHRPD = 14, + gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPAP = 15, + gdt_cct_NetworkConnectionInfo_MobileSubtype_GSM = 16, + gdt_cct_NetworkConnectionInfo_MobileSubtype_TD_SCDMA = 17, + gdt_cct_NetworkConnectionInfo_MobileSubtype_IWLAN = 18, + gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE_CA = 19, + gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED = 100 +} gdt_cct_NetworkConnectionInfo_MobileSubtype; +#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE +#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MAX gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED +#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_MobileSubtype)(gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED+1)) + +typedef enum _gdt_cct_ClientInfo_ClientType { + gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN = 0, + gdt_cct_ClientInfo_ClientType_IOS_FIREBASE = 15 +} gdt_cct_ClientInfo_ClientType; +#define _gdt_cct_ClientInfo_ClientType_MIN gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN +#define _gdt_cct_ClientInfo_ClientType_MAX gdt_cct_ClientInfo_ClientType_IOS_FIREBASE +#define _gdt_cct_ClientInfo_ClientType_ARRAYSIZE ((gdt_cct_ClientInfo_ClientType)(gdt_cct_ClientInfo_ClientType_IOS_FIREBASE+1)) + +typedef enum _gdt_cct_QosTierConfiguration_QosTier { + gdt_cct_QosTierConfiguration_QosTier_DEFAULT = 0, + gdt_cct_QosTierConfiguration_QosTier_UNMETERED_ONLY = 1, + gdt_cct_QosTierConfiguration_QosTier_UNMETERED_OR_DAILY = 2, + gdt_cct_QosTierConfiguration_QosTier_FAST_IF_RADIO_AWAKE = 3, + gdt_cct_QosTierConfiguration_QosTier_NEVER = 4 +} gdt_cct_QosTierConfiguration_QosTier; +#define _gdt_cct_QosTierConfiguration_QosTier_MIN gdt_cct_QosTierConfiguration_QosTier_DEFAULT +#define _gdt_cct_QosTierConfiguration_QosTier_MAX gdt_cct_QosTierConfiguration_QosTier_NEVER +#define _gdt_cct_QosTierConfiguration_QosTier_ARRAYSIZE ((gdt_cct_QosTierConfiguration_QosTier)(gdt_cct_QosTierConfiguration_QosTier_NEVER+1)) + +/* Struct definitions */ +typedef struct _gdt_cct_BatchedLogRequest { + pb_size_t log_request_count; + struct _gdt_cct_LogRequest *log_request; +/* @@protoc_insertion_point(struct:gdt_cct_BatchedLogRequest) */ +} gdt_cct_BatchedLogRequest; + +typedef struct _gdt_cct_IosClientInfo { + pb_bytes_array_t *os_major_version; + pb_bytes_array_t *os_full_version; + pb_bytes_array_t *application_build; + pb_bytes_array_t *country; + pb_bytes_array_t *model; + pb_bytes_array_t *language_code; + pb_bytes_array_t *application_bundle_id; +/* @@protoc_insertion_point(struct:gdt_cct_IosClientInfo) */ +} gdt_cct_IosClientInfo; + +typedef struct _gdt_cct_ClientInfo { + bool has_client_type; + gdt_cct_ClientInfo_ClientType client_type; + bool has_ios_client_info; + gdt_cct_IosClientInfo ios_client_info; +/* @@protoc_insertion_point(struct:gdt_cct_ClientInfo) */ +} gdt_cct_ClientInfo; + +typedef struct _gdt_cct_NetworkConnectionInfo { + bool has_network_type; + gdt_cct_NetworkConnectionInfo_NetworkType network_type; + bool has_mobile_subtype; + gdt_cct_NetworkConnectionInfo_MobileSubtype mobile_subtype; +/* @@protoc_insertion_point(struct:gdt_cct_NetworkConnectionInfo) */ +} gdt_cct_NetworkConnectionInfo; + +typedef struct _gdt_cct_QosTierConfiguration { + bool has_qos_tier; + gdt_cct_QosTierConfiguration_QosTier qos_tier; + bool has_log_source; + int32_t log_source; +/* @@protoc_insertion_point(struct:gdt_cct_QosTierConfiguration) */ +} gdt_cct_QosTierConfiguration; + +typedef struct _gdt_cct_QosTiersOverride { + pb_size_t qos_tier_configuration_count; + struct _gdt_cct_QosTierConfiguration *qos_tier_configuration; + bool has_qos_tier_fingerprint; + int64_t qos_tier_fingerprint; +/* @@protoc_insertion_point(struct:gdt_cct_QosTiersOverride) */ +} gdt_cct_QosTiersOverride; + +typedef struct _gdt_cct_LogEvent { + bool has_event_time_ms; + int64_t event_time_ms; + pb_bytes_array_t *source_extension; + bool has_event_code; + int32_t event_code; + bool has_timezone_offset_seconds; + int64_t timezone_offset_seconds; + bool has_event_uptime_ms; + int64_t event_uptime_ms; + bool has_network_connection_info; + gdt_cct_NetworkConnectionInfo network_connection_info; +/* @@protoc_insertion_point(struct:gdt_cct_LogEvent) */ +} gdt_cct_LogEvent; + +typedef struct _gdt_cct_LogRequest { + bool has_client_info; + gdt_cct_ClientInfo client_info; + bool has_log_source; + int32_t log_source; + pb_size_t log_event_count; + struct _gdt_cct_LogEvent *log_event; + bool has_request_time_ms; + int64_t request_time_ms; + bool has_request_uptime_ms; + int64_t request_uptime_ms; + bool has_qos_tier; + gdt_cct_QosTierConfiguration_QosTier qos_tier; +/* @@protoc_insertion_point(struct:gdt_cct_LogRequest) */ +} gdt_cct_LogRequest; + +typedef struct _gdt_cct_LogResponse { + bool has_next_request_wait_millis; + int64_t next_request_wait_millis; + bool has_qos_tier; + gdt_cct_QosTiersOverride qos_tier; +/* @@protoc_insertion_point(struct:gdt_cct_LogResponse) */ +} gdt_cct_LogResponse; + +/* Default values for struct fields */ +extern const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default; +extern const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default; +extern const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default; +extern const int32_t gdt_cct_QosTierConfiguration_log_source_default; + +/* Initializer values for message structs */ +#define gdt_cct_LogEvent_init_default {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_default} +#define gdt_cct_NetworkConnectionInfo_init_default {false, gdt_cct_NetworkConnectionInfo_NetworkType_NONE, false, gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE} +#define gdt_cct_IosClientInfo_init_default {NULL, NULL, NULL, NULL, NULL, NULL, NULL} +#define gdt_cct_ClientInfo_init_default {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_default} +#define gdt_cct_BatchedLogRequest_init_default {0, NULL} +#define gdt_cct_LogRequest_init_default {false, gdt_cct_ClientInfo_init_default, false, 0, 0, NULL, false, 0, false, 0, false, gdt_cct_QosTierConfiguration_QosTier_DEFAULT} +#define gdt_cct_QosTierConfiguration_init_default {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0} +#define gdt_cct_QosTiersOverride_init_default {0, NULL, false, 0} +#define gdt_cct_LogResponse_init_default {false, 0, false, gdt_cct_QosTiersOverride_init_default} +#define gdt_cct_LogEvent_init_zero {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_zero} +#define gdt_cct_NetworkConnectionInfo_init_zero {false, _gdt_cct_NetworkConnectionInfo_NetworkType_MIN, false, _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN} +#define gdt_cct_IosClientInfo_init_zero {NULL, NULL, NULL, NULL, NULL, NULL, NULL} +#define gdt_cct_ClientInfo_init_zero {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_zero} +#define gdt_cct_BatchedLogRequest_init_zero {0, NULL} +#define gdt_cct_LogRequest_init_zero {false, gdt_cct_ClientInfo_init_zero, false, 0, 0, NULL, false, 0, false, 0, false, _gdt_cct_QosTierConfiguration_QosTier_MIN} +#define gdt_cct_QosTierConfiguration_init_zero {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0} +#define gdt_cct_QosTiersOverride_init_zero {0, NULL, false, 0} +#define gdt_cct_LogResponse_init_zero {false, 0, false, gdt_cct_QosTiersOverride_init_zero} + +/* Field tags (for use in manual encoding/decoding) */ +#define gdt_cct_BatchedLogRequest_log_request_tag 1 +#define gdt_cct_IosClientInfo_os_major_version_tag 3 +#define gdt_cct_IosClientInfo_os_full_version_tag 4 +#define gdt_cct_IosClientInfo_application_build_tag 5 +#define gdt_cct_IosClientInfo_country_tag 6 +#define gdt_cct_IosClientInfo_model_tag 7 +#define gdt_cct_IosClientInfo_language_code_tag 8 +#define gdt_cct_IosClientInfo_application_bundle_id_tag 11 +#define gdt_cct_ClientInfo_client_type_tag 1 +#define gdt_cct_ClientInfo_ios_client_info_tag 4 +#define gdt_cct_NetworkConnectionInfo_network_type_tag 1 +#define gdt_cct_NetworkConnectionInfo_mobile_subtype_tag 2 +#define gdt_cct_QosTierConfiguration_qos_tier_tag 2 +#define gdt_cct_QosTierConfiguration_log_source_tag 3 +#define gdt_cct_QosTiersOverride_qos_tier_configuration_tag 1 +#define gdt_cct_QosTiersOverride_qos_tier_fingerprint_tag 2 +#define gdt_cct_LogEvent_event_time_ms_tag 1 +#define gdt_cct_LogEvent_event_code_tag 11 +#define gdt_cct_LogEvent_event_uptime_ms_tag 17 +#define gdt_cct_LogEvent_source_extension_tag 6 +#define gdt_cct_LogEvent_timezone_offset_seconds_tag 15 +#define gdt_cct_LogEvent_network_connection_info_tag 23 +#define gdt_cct_LogRequest_request_time_ms_tag 4 +#define gdt_cct_LogRequest_request_uptime_ms_tag 8 +#define gdt_cct_LogRequest_client_info_tag 1 +#define gdt_cct_LogRequest_log_source_tag 2 +#define gdt_cct_LogRequest_log_event_tag 3 +#define gdt_cct_LogRequest_qos_tier_tag 9 +#define gdt_cct_LogResponse_next_request_wait_millis_tag 1 +#define gdt_cct_LogResponse_qos_tier_tag 3 + +/* Struct field encoding specification for nanopb */ +extern const pb_field_t gdt_cct_LogEvent_fields[7]; +extern const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3]; +extern const pb_field_t gdt_cct_IosClientInfo_fields[8]; +extern const pb_field_t gdt_cct_ClientInfo_fields[3]; +extern const pb_field_t gdt_cct_BatchedLogRequest_fields[2]; +extern const pb_field_t gdt_cct_LogRequest_fields[7]; +extern const pb_field_t gdt_cct_QosTierConfiguration_fields[3]; +extern const pb_field_t gdt_cct_QosTiersOverride_fields[3]; +extern const pb_field_t gdt_cct_LogResponse_fields[3]; + +/* Maximum encoded size of messages (where known) */ +/* gdt_cct_LogEvent_size depends on runtime parameters */ +#define gdt_cct_NetworkConnectionInfo_size 13 +/* gdt_cct_IosClientInfo_size depends on runtime parameters */ +/* gdt_cct_ClientInfo_size depends on runtime parameters */ +/* gdt_cct_BatchedLogRequest_size depends on runtime parameters */ +/* gdt_cct_LogRequest_size depends on runtime parameters */ +#define gdt_cct_QosTierConfiguration_size 13 +/* gdt_cct_QosTiersOverride_size depends on runtime parameters */ +/* gdt_cct_LogResponse_size depends on runtime parameters */ + +/* Message IDs (where set with "msgid" option) */ +#ifdef PB_MSGID + +#define CCT_MESSAGES \ + + +#endif + +/* @@protoc_insertion_point(eof) */ + +#endif diff --git a/Pods/GoogleDataTransportCCTSupport/LICENSE b/Pods/GoogleDataTransportCCTSupport/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/GoogleDataTransportCCTSupport/README.md b/Pods/GoogleDataTransportCCTSupport/README.md new file mode 100644 index 0000000000..f55d642180 --- /dev/null +++ b/Pods/GoogleDataTransportCCTSupport/README.md @@ -0,0 +1,230 @@ +# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) + +This repository contains a subset of the Firebase iOS SDK source. It currently +includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, +FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and +FirebaseStorage. + +The repository also includes GoogleUtilities source. The +[GoogleUtilities](GoogleUtilities/README.md) pod is +a set of utilities used by Firebase and other Google products. + +Firebase is an app development platform with tools to help you build, grow and +monetize your app. More information about Firebase can be found at +[https://firebase.google.com](https://firebase.google.com). + +## Installation + +See the three subsections for details about three different installation methods. +1. [Standard pod install](README.md#standard-pod-install) +1. [Installing from the GitHub repo](README.md#installing-from-github) +1. [Experimental Carthage](README.md#carthage-ios-only) + +### Standard pod install + +Go to +[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). + +### Installing from GitHub + +For releases starting with 5.0.0, the source for each release is also deployed +to CocoaPods master and available via standard +[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). + +These instructions can be used to access the Firebase repo at other branches, +tags, or commits. + +#### Background + +See +[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) +for instructions and options about overriding pod source locations. + +#### Accessing Firebase Source Snapshots + +All of the official releases are tagged in this repo and available via CocoaPods. To access a local +source snapshot or unreleased branch, use Podfile directives like the following: + +To access FirebaseFirestore via a branch: +``` +pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' +``` + +To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: + +``` +pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' +pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' +``` + +### Carthage (iOS only) + +Instructions for the experimental Carthage distribution are at +[Carthage](Carthage.md). + +### Rome + +Instructions for installing binary frameworks via +[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). + +## Development + +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Firestore has a self contained Xcode project. See +[Firestore/README.md](Firestore/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: + +``` +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb +``` + +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. + +To update this section, find the versions of clang-format and swiftformat.rb to +match the versions in the CI failure logs +[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). + +### Running Unit Tests + +Select a scheme and press Command-u to build a component and run its unit tests. + +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + +### Running Sample Apps +In order to run the sample apps and integration tests, you'll need valid +`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist +files without real values, but can be replaced with real plist files. To get your own +`GoogleService-Info.plist` files: + +1. Go to the [Firebase Console](https://console.firebase.google.com/) +2. Create a new Firebase project, if you don't already have one +3. For each sample app you want to test, create a new Firebase app with the sample app's bundle +identifier (e.g. `com.google.Database-Example`) +4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file +(e.g. in [Example/Database/App/](Example/Database/App/)); + +Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require +special Apple capabilities, and you will have to change the sample app to use a unique bundle +identifier that you can control in your own Apple Developer account. + +## Specific Component Instructions +See the sections below for any special instructions for those components. + +### Firebase Auth + +If you're doing specific Firebase Auth development, see +[the Auth Sample README](Example/Auth/README.md) for instructions about +building and running the FirebaseAuth pod along with various samples and tests. + +### Firebase Database + +To run the Database Integration tests, make your database authentication rules +[public](https://firebase.google.com/docs/database/security/quickstart). + +### Firebase Storage + +To run the Storage Integration tests, follow the instructions in +[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). + +#### Push Notifications + +Push notifications can only be delivered to specially provisioned App IDs in the developer portal. +In order to actually test receiving push notifications, you will need to: + +1. Change the bundle identifier of the sample app to something you own in your Apple Developer +account, and enable that App ID for push notifications. +2. You'll also need to +[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) +at **Project Settings > Cloud Messaging > [Your Firebase App]**. +3. Ensure your iOS device is added to your Apple Developer portal as a test device. + +#### iOS Simulator + +The iOS Simulator cannot register for remote notifications, and will not receive push notifications. +In order to receive push notifications, you'll have to follow the steps above and run the app on a +physical device. + +## Community Supported Efforts + +We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are +very grateful! We'd like to empower as many developers as we can to be able to use Firebase and +participate in the Firebase community. + +### macOS and tvOS +Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, +FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, +FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. + +For tvOS, checkout the [Sample](Example/tvOSSample). + +Keep in mind that macOS and tvOS are not officially supported by Firebase, and this repository is +actively developed primarily for iOS. While we can catch basic unit test issues with Travis, there +may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter +this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). + +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: + +``` +pod 'FirebaseABTesting' +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseRemoteConfig' +pod 'FirebaseStorage' +``` + +## Roadmap + +See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +plans and directions. + +## Contributing + +See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase +iOS SDK. + +## License + +The contents of this repository is licensed under the +[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +Your use of Firebase is governed by the +[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m index 59f400dcc6..a55f4733b7 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m +++ b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m @@ -14,48 +14,60 @@ #import "TargetConditionals.h" -#if TARGET_OS_IOS - +#import #import #import #import #import "../Common/GULLoggerCodes.h" #import "Internal/GULAppDelegateSwizzler_Private.h" -#import "Private/GULAppDelegateSwizzler.h" -#import #import // Implementations need to be typed before calling the implementation directly to cast the // arguments and the return types correctly. Otherwise, it will crash the app. typedef BOOL (*GULRealOpenURLSourceApplicationAnnotationIMP)( - id, SEL, UIApplication *, NSURL *, NSString *, id); + id, SEL, GULApplication *, NSURL *, NSString *, id); typedef BOOL (*GULRealOpenURLOptionsIMP)( - id, SEL, UIApplication *, NSURL *, NSDictionary *); + id, SEL, GULApplication *, NSURL *, NSDictionary *); #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wstrict-prototypes" typedef void (*GULRealHandleEventsForBackgroundURLSessionIMP)( - id, SEL, UIApplication *, NSString *, void (^)()); + id, SEL, GULApplication *, NSString *, void (^)()); #pragma clang diagnostic pop // This is needed to for the library to be warning free on iOS versions < 8. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunguarded-availability" typedef BOOL (*GULRealContinueUserActivityIMP)( - id, SEL, UIApplication *, NSUserActivity *, void (^)(NSArray *restorableObjects)); + id, SEL, GULApplication *, NSUserActivity *, void (^)(NSArray *restorableObjects)); +#pragma clang diagnostic pop + +typedef void (*GULRealDidRegisterForRemoteNotificationsIMP)(id, SEL, GULApplication *, NSData *); + +typedef void (*GULRealDidFailToRegisterForRemoteNotificationsIMP)(id, + SEL, + GULApplication *, + NSError *); + +typedef void (*GULRealDidReceiveRemoteNotificationIMP)(id, SEL, GULApplication *, NSDictionary *); + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +// This is needed to for the library to be warning free on iOS versions < 7. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" +typedef void (*GULRealDidReceiveRemoteNotificationWithCompletionIMP)( + id, SEL, GULApplication *, NSDictionary *, void (^)(UIBackgroundFetchResult)); #pragma clang diagnostic pop +#endif // __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 -typedef void (^GULAppDelegateInterceptorCallback)(id); +typedef void (^GULAppDelegateInterceptorCallback)(id); // The strings below are the keys for associated objects. -static char const *const kGULContinueUserActivityIMPKey = "GUL_continueUserActivityIMP"; -static char const *const kGULHandleBackgroundSessionIMPKey = "GUL_handleBackgroundSessionIMP"; -static char const *const kGULOpenURLOptionsIMPKey = "GUL_openURLOptionsIMP"; -static char const *const kGULOpenURLOptionsSourceAnnotationsIMPKey = - "GUL_openURLSourceApplicationAnnotationIMP"; +static char const *const kGULRealIMPBySelectorKey = "GUL_realIMPBySelector"; static char const *const kGULRealClassKey = "GUL_realClass"; + static NSString *const kGULAppDelegateKeyPath = @"delegate"; static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilities/AppDelegateSwizzler]"; @@ -75,7 +87,35 @@ typedef BOOL (*GULRealContinueUserActivityIMP)( static NSString *const kGULAppDelegatePrefix = @"GUL_"; /** The original instance of App Delegate. */ -static id gOriginalAppDelegate; +static id gOriginalAppDelegate; + +/** The original App Delegate class */ +static Class gOriginalAppDelegateClass; + +/** The subclass of the original App Delegate. */ +static Class gAppDelegateSubclass; + +/** Remote notification methods selectors + * + * We have to opt out of referencing APNS related App Delegate methods directly to prevent + * an Apple review warning email about missing Push Notification Entitlement + * (like here: https://github.com/firebase/firebase-ios-sdk/issues/2807). From our experience, the + * warning is triggered when any of the symbols is present in the application sent to review, even + * if the code is never executed. Because GULAppDelegateSwizzler may be used by applications that + * are not using APNS we have to refer to the methods indirectly using selector constructed from + * string. + * + * NOTE: None of the methods is proxied unless it is explicitly requested by calling the method + * +[GULAppDelegateSwizzler proxyOriginalDelegateIncludingAPNSMethods] + */ +static NSString *const kGULDidRegisterForRemoteNotificationsSEL = + @"application:didRegisterForRemoteNotificationsWithDeviceToken:"; +static NSString *const kGULDidFailToRegisterForRemoteNotificationsSEL = + @"application:didFailToRegisterForRemoteNotificationsWithError:"; +static NSString *const kGULDidReceiveRemoteNotificationSEL = + @"application:didReceiveRemoteNotification:"; +static NSString *const kGULDidReceiveRemoteNotificationWithCompletionSEL = + @"application:didReceiveRemoteNotification:fetchCompletionHandler:"; /** * This class is necessary to store the delegates in an NSArray without retaining them. @@ -149,6 +189,7 @@ - (void)observeValueForKeyPath:(NSString *)keyPath @implementation GULAppDelegateSwizzler static dispatch_once_t sProxyAppDelegateOnceToken; +static dispatch_once_t sProxyAppDelegateRemoteNotificationOnceToken; #pragma mark - Public methods @@ -177,9 +218,9 @@ + (BOOL)isAppDelegateProxyEnabled { } + (GULAppDelegateInterceptorID)registerAppDelegateInterceptor: - (id)interceptor { + (id)interceptor { NSAssert(interceptor, @"AppDelegateProxy cannot add nil interceptor"); - NSAssert([interceptor conformsToProtocol:@protocol(UIApplicationDelegate)], + NSAssert([interceptor conformsToProtocol:@protocol(GULApplicationDelegate)], @"AppDelegateProxy interceptor does not conform to UIApplicationDelegate"); if (!interceptor) { @@ -189,7 +230,7 @@ + (GULAppDelegateInterceptorID)registerAppDelegateInterceptor: @"AppDelegateProxy cannot add nil interceptor."); return nil; } - if (![interceptor conformsToProtocol:@protocol(UIApplicationDelegate)]) { + if (![interceptor conformsToProtocol:@protocol(GULApplicationDelegate)]) { GULLogError(kGULLoggerSwizzler, NO, [NSString stringWithFormat:@"I-SWZ%06ld", (long)kGULSwizzlerMessageCodeAppDelegateSwizzling001], @@ -240,21 +281,49 @@ + (void)unregisterAppDelegateInterceptorWithID:(GULAppDelegateInterceptorID)inte } + (void)proxyOriginalDelegate { + if ([GULAppEnvironmentUtil isAppExtension]) { + return; + } + dispatch_once(&sProxyAppDelegateOnceToken, ^{ - id originalDelegate = + id originalDelegate = [GULAppDelegateSwizzler sharedApplication].delegate; [GULAppDelegateSwizzler proxyAppDelegate:originalDelegate]; }); } ++ (void)proxyOriginalDelegateIncludingAPNSMethods { + if ([GULAppEnvironmentUtil isAppExtension]) { + return; + } + + [self proxyOriginalDelegate]; + + dispatch_once(&sProxyAppDelegateRemoteNotificationOnceToken, ^{ + id appDelegate = [GULAppDelegateSwizzler sharedApplication].delegate; + + NSMutableDictionary *realImplementationsBySelector = + [objc_getAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey) mutableCopy]; + + [self proxyRemoteNotificationsMethodsWithAppDelegateSubClass:gAppDelegateSubclass + realClass:gOriginalAppDelegateClass + appDelegate:appDelegate + realImplementationsBySelector:realImplementationsBySelector]; + + objc_setAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey, + [realImplementationsBySelector copy], OBJC_ASSOCIATION_RETAIN); + [self reassignAppDelegate]; + }); +} + #pragma mark - Create proxy -+ (UIApplication *)sharedApplication { ++ (GULApplication *)sharedApplication { if ([GULAppEnvironmentUtil isAppExtension]) { return nil; } id sharedApplication = nil; - Class uiApplicationClass = NSClassFromString(@"UIApplication"); + Class uiApplicationClass = NSClassFromString(kGULApplicationClassName); if (uiApplicationClass && [uiApplicationClass respondsToSelector:(NSSelectorFromString(@"sharedApplication"))]) { sharedApplication = [uiApplicationClass sharedApplication]; @@ -268,18 +337,18 @@ + (UIApplication *)sharedApplication { * object to the new subclass. Additionally this copies methods to that new subclass that allow us * to intercept UIApplicationDelegate methods. This is better known as isa swizzling. * - * @param anObject The object to which you want to isa swizzle. This has to conform to the + * @param appDelegate The object to which you want to isa swizzle. This has to conform to the * UIApplicationDelegate subclass. + * @return Returns the new subclass. */ -+ (void)createSubclassWithObject:(id)anObject { - Class realClass = [anObject class]; ++ (nullable Class)createSubclassWithObject:(id)appDelegate { + Class realClass = [appDelegate class]; - // Create GUL__ + // Create GUL__ NSString *classNameWithPrefix = [kGULAppDelegatePrefix stringByAppendingString:NSStringFromClass(realClass)]; - NSTimeInterval timestamp = [NSDate date].timeIntervalSince1970; NSString *newClassName = - [NSString stringWithFormat:@"%@-%0.0f", classNameWithPrefix, timestamp * 1000]; + [NSString stringWithFormat:@"%@-%@", classNameWithPrefix, [NSUUID UUID].UUIDString]; if (NSClassFromString(newClassName)) { GULLogError(kGULLoggerSwizzler, NO, @@ -288,7 +357,7 @@ + (void)createSubclassWithObject:(id)anObject { @"Cannot create a proxy for App Delegate. Subclass already exists. Original Class: " @"%@, subclass: %@", NSStringFromClass(realClass), newClassName); - return; + return nil; } // Register the new class as subclass of the real one. Do not allocate more than the real class @@ -301,64 +370,63 @@ + (void)createSubclassWithObject:(id)anObject { @"Cannot create a proxy for App Delegate. Subclass already exists. Original Class: " @"%@, subclass: Nil", NSStringFromClass(realClass)); - return; + return nil; } + NSMutableDictionary *realImplementationsBySelector = + [[NSMutableDictionary alloc] init]; + + // For application:continueUserActivity:restorationHandler: + SEL continueUserActivitySEL = @selector(application:continueUserActivity:restorationHandler:); + [self proxyDestinationSelector:continueUserActivitySEL + implementationsFromSourceSelector:continueUserActivitySEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; + +#if TARGET_OS_IOS || TARGET_OS_TV // Add the following methods from GULAppDelegate class, and store the real implementation so it // can forward to the real one. // For application:openURL:options: - NSValue *openURLOptionsIMPPointer; SEL applicationOpenURLOptionsSEL = @selector(application:openURL:options:); - if ([anObject respondsToSelector:applicationOpenURLOptionsSEL]) { + if ([appDelegate respondsToSelector:applicationOpenURLOptionsSEL]) { // Only add the application:openURL:options: method if the original AppDelegate implements it. // This fixes a bug if an app only implements application:openURL:sourceApplication:annotation: // (if we add the `options` method, iOS sees that one exists and does not call the // `sourceApplication` method, which in this case is the only one the app implements). - [GULAppDelegateSwizzler addInstanceMethodWithSelector:applicationOpenURLOptionsSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass]; - GULRealOpenURLOptionsIMP openURLOptionsIMP = (GULRealOpenURLOptionsIMP) - [GULAppDelegateSwizzler implementationOfMethodSelector:applicationOpenURLOptionsSEL - fromClass:realClass]; - openURLOptionsIMPPointer = [NSValue valueWithPointer:openURLOptionsIMP]; + [self proxyDestinationSelector:applicationOpenURLOptionsSEL + implementationsFromSourceSelector:applicationOpenURLOptionsSEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; } - // For application:continueUserActivity:restorationHandler: - SEL continueUserActivitySEL = @selector(application:continueUserActivity:restorationHandler:); - [GULAppDelegateSwizzler addInstanceMethodWithSelector:continueUserActivitySEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass]; - GULRealContinueUserActivityIMP continueUserActivityIMP = (GULRealContinueUserActivityIMP) - [GULAppDelegateSwizzler implementationOfMethodSelector:continueUserActivitySEL - fromClass:realClass]; - NSValue *continueUserActivityIMPPointer = [NSValue valueWithPointer:continueUserActivityIMP]; + // For application:handleEventsForBackgroundURLSession:completionHandler: + SEL handleEventsForBackgroundURLSessionSEL = @selector(application: + handleEventsForBackgroundURLSession:completionHandler:); + [self proxyDestinationSelector:handleEventsForBackgroundURLSessionSEL + implementationsFromSourceSelector:handleEventsForBackgroundURLSessionSEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; +#endif // TARGET_OS_IOS || TARGET_OS_TV +#if TARGET_OS_IOS // For application:openURL:sourceApplication:annotation: - SEL openURLSourceApplicationAnnotationSEL = - @selector(application:openURL:sourceApplication:annotation:); - [GULAppDelegateSwizzler addInstanceMethodWithSelector:openURLSourceApplicationAnnotationSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass]; - GULRealOpenURLSourceApplicationAnnotationIMP openURLSourceApplicationAnnotationIMP = - (GULRealOpenURLSourceApplicationAnnotationIMP)[GULAppDelegateSwizzler - implementationOfMethodSelector:openURLSourceApplicationAnnotationSEL - fromClass:realClass]; - NSValue *openURLSourceAppAnnotationIMPPointer = - [NSValue valueWithPointer:openURLSourceApplicationAnnotationIMP]; - - // For application:handleEventsForBackgroundURLSession:completionHandler: - SEL handleEventsForBackgroundURLSessionSEL = - @selector(application:handleEventsForBackgroundURLSession:completionHandler:); - [GULAppDelegateSwizzler addInstanceMethodWithSelector:handleEventsForBackgroundURLSessionSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass]; - GULRealHandleEventsForBackgroundURLSessionIMP handleBackgroundSessionIMP = - (GULRealHandleEventsForBackgroundURLSessionIMP)[GULAppDelegateSwizzler - implementationOfMethodSelector:handleEventsForBackgroundURLSessionSEL - fromClass:realClass]; - NSValue *handleBackgroundSessionIMPPointer = - [NSValue valueWithPointer:handleBackgroundSessionIMP]; + SEL openURLSourceApplicationAnnotationSEL = @selector(application: + openURL:sourceApplication:annotation:); + + [self proxyDestinationSelector:openURLSourceApplicationAnnotationSEL + implementationsFromSourceSelector:openURLSourceApplicationAnnotationSEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; +#endif // TARGET_OS_IOS // Override the description too so the custom class name will not show up. [GULAppDelegateSwizzler addInstanceMethodWithDestinationSelector:@selector(description) @@ -366,18 +434,10 @@ + (void)createSubclassWithObject:(id)anObject { fromClass:[self class] toClass:appDelegateSubClass]; - // Create fake properties for the real app delegate object. - objc_setAssociatedObject(anObject, &kGULContinueUserActivityIMPKey, - continueUserActivityIMPPointer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - objc_setAssociatedObject(anObject, &kGULHandleBackgroundSessionIMPKey, - handleBackgroundSessionIMPPointer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - if (openURLOptionsIMPPointer) { - objc_setAssociatedObject(anObject, &kGULOpenURLOptionsIMPKey, openURLOptionsIMPPointer, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - objc_setAssociatedObject(anObject, &kGULOpenURLOptionsSourceAnnotationsIMPKey, - openURLSourceAppAnnotationIMPPointer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - objc_setAssociatedObject(anObject, &kGULRealClassKey, realClass, + // Store original implementations to a fake property of the original delegate. + objc_setAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey, + [realImplementationsBySelector copy], OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject(appDelegate, &kGULRealClassKey, realClass, OBJC_ASSOCIATION_RETAIN_NONATOMIC); // The subclass size has to be exactly the same size with the original class size. The subclass @@ -391,12 +451,12 @@ + (void)createSubclassWithObject:(id)anObject { @"same size. %@", NSStringFromClass(realClass)); NSAssert(NO, @"Classes must be the same size to swizzle isa"); - return; + return nil; } // Make the newly created class to be the subclass of the real App Delegate class. objc_registerClassPair(appDelegateSubClass); - if (object_setClass(anObject, appDelegateSubClass)) { + if (object_setClass(appDelegate, appDelegateSubClass)) { GULLogDebug(kGULLoggerSwizzler, NO, [NSString stringWithFormat:@"I-SWZ%06ld", (long)kGULSwizzlerMessageCodeAppDelegateSwizzling008], @@ -405,14 +465,92 @@ + (void)createSubclassWithObject:(id)anObject { [GULAppDelegateSwizzler correctAppDelegateProxyKey]); } - // We have to do this to invalidate the cache that caches the original respondsToSelector of - // openURL handlers. Without this, it won't call the default implementations because the system - // checks and caches them. - // Register KVO only once. Otherwise, the observing method will be called as many times as - // being registered. - id delegate = [GULAppDelegateSwizzler sharedApplication].delegate; - [GULAppDelegateSwizzler sharedApplication].delegate = nil; - [GULAppDelegateSwizzler sharedApplication].delegate = delegate; + return appDelegateSubClass; +} + ++ (void)proxyRemoteNotificationsMethodsWithAppDelegateSubClass:(Class)appDelegateSubClass + realClass:(Class)realClass + appDelegate:(id)appDelegate + realImplementationsBySelector: + (NSMutableDictionary *)realImplementationsBySelector { + if (realClass == nil || appDelegateSubClass == nil || appDelegate == nil || + realImplementationsBySelector == nil) { + // The App Delegate has not been swizzled. + return; + } + + // For application:didRegisterForRemoteNotificationsWithDeviceToken: + SEL didRegisterForRemoteNotificationsSEL = + NSSelectorFromString(kGULDidRegisterForRemoteNotificationsSEL); + SEL didRegisterForRemoteNotificationsDonorSEL = @selector(application: + donor_didRegisterForRemoteNotificationsWithDeviceToken:); + + [self proxyDestinationSelector:didRegisterForRemoteNotificationsSEL + implementationsFromSourceSelector:didRegisterForRemoteNotificationsDonorSEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; + + // For application:didFailToRegisterForRemoteNotificationsWithError: + SEL didFailToRegisterForRemoteNotificationsSEL = + NSSelectorFromString(kGULDidFailToRegisterForRemoteNotificationsSEL); + SEL didFailToRegisterForRemoteNotificationsDonorSEL = @selector(application: + donor_didFailToRegisterForRemoteNotificationsWithError:); + + [self proxyDestinationSelector:didFailToRegisterForRemoteNotificationsSEL + implementationsFromSourceSelector:didFailToRegisterForRemoteNotificationsDonorSEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; + + // For application:didReceiveRemoteNotification: + SEL didReceiveRemoteNotificationSEL = NSSelectorFromString(kGULDidReceiveRemoteNotificationSEL); + SEL didReceiveRemoteNotificationDonotSEL = @selector(application: + donor_didReceiveRemoteNotification:); + + [self proxyDestinationSelector:didReceiveRemoteNotificationSEL + implementationsFromSourceSelector:didReceiveRemoteNotificationDonotSEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; + + // For application:didReceiveRemoteNotification:fetchCompletionHandler: +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + if ([GULAppEnvironmentUtil isIOS7OrHigher]) { + SEL didReceiveRemoteNotificationWithCompletionSEL = + NSSelectorFromString(kGULDidReceiveRemoteNotificationWithCompletionSEL); + SEL didReceiveRemoteNotificationWithCompletionDonorSEL = + @selector(application:donor_didReceiveRemoteNotification:fetchCompletionHandler:); + if ([appDelegate respondsToSelector:didReceiveRemoteNotificationWithCompletionSEL]) { + // Only add the application:didReceiveRemoteNotification:fetchCompletionHandler: method if + // the original AppDelegate implements it. + // This fixes a bug if an app only implements application:didReceiveRemoteNotification: + // (if we add the method with completion, iOS sees that one exists and does not call + // the method without the completion, which in this case is the only one the app implements). + + [self proxyDestinationSelector:didReceiveRemoteNotificationWithCompletionSEL + implementationsFromSourceSelector:didReceiveRemoteNotificationWithCompletionDonorSEL + fromClass:[GULAppDelegateSwizzler class] + toClass:appDelegateSubClass + realClass:realClass + storeDestinationImplementationTo:realImplementationsBySelector]; + } + } +#endif // __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +} + +/// We have to do this to invalidate the cache that caches the original respondsToSelector of +/// openURL handlers. Without this, it won't call the default implementations because the system +/// checks and caches them. +/// Register KVO only once. Otherwise, the observing method will be called as many times as +/// being registered. ++ (void)reassignAppDelegate { + id delegate = [self sharedApplication].delegate; + [self sharedApplication].delegate = nil; + [self sharedApplication].delegate = delegate; gOriginalAppDelegate = delegate; [[GULAppDelegateObserver sharedInstance] observeUIApplication]; } @@ -428,6 +566,32 @@ + (GULMutableDictionary *)interceptors { return sInterceptors; } ++ (nullable NSValue *)originalImplementationForSelector:(SEL)selector object:(id)object { + NSDictionary *realImplementationBySelector = + objc_getAssociatedObject(object, &kGULRealIMPBySelectorKey); + return realImplementationBySelector[NSStringFromSelector(selector)]; +} + ++ (void)proxyDestinationSelector:(SEL)destinationSelector + implementationsFromSourceSelector:(SEL)sourceSelector + fromClass:(Class)sourceClass + toClass:(Class)destinationClass + realClass:(Class)realClass + storeDestinationImplementationTo: + (NSMutableDictionary *)destinationImplementationsBySelector { + [self addInstanceMethodWithDestinationSelector:destinationSelector + withImplementationFromSourceSelector:sourceSelector + fromClass:sourceClass + toClass:destinationClass]; + IMP sourceImplementation = + [GULAppDelegateSwizzler implementationOfMethodSelector:destinationSelector + fromClass:realClass]; + NSValue *sourceImplementationPointer = [NSValue valueWithPointer:sourceImplementation]; + + NSString *destinationSelectorString = NSStringFromSelector(destinationSelector); + destinationImplementationsBySelector[destinationSelectorString] = sourceImplementationPointer; +} + /** Copies a method identified by the methodSelector from one class to the other. After this method * is called, performing [toClassInstance methodSelector] will be similar to calling * [fromClassInstance methodSelector]. This method does nothing if toClass already has a method @@ -530,23 +694,25 @@ - (NSString *)fakeDescription { } #pragma mark - [Donor Methods] URL overridden handler methods +#if TARGET_OS_IOS || TARGET_OS_TV -- (BOOL)application:(UIApplication *)application +- (BOOL)application:(GULApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { + SEL methodSelector = @selector(application:openURL:options:); // Call the real implementation if the real App Delegate has any. - NSValue *openURLIMPPointer = objc_getAssociatedObject(self, &kGULOpenURLOptionsIMPKey); + NSValue *openURLIMPPointer = + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; GULRealOpenURLOptionsIMP openURLOptionsIMP = [openURLIMPPointer pointerValue]; __block BOOL returnedValue = NO; - SEL methodSelector = @selector(application:openURL:options:); // This is needed to for the library to be warning free on iOS versions < 9. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunguarded-availability" [GULAppDelegateSwizzler notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { + callback:^(id interceptor) { returnedValue |= [interceptor application:application openURL:url options:options]; @@ -558,21 +724,26 @@ - (BOOL)application:(UIApplication *)application return returnedValue; } -- (BOOL)application:(UIApplication *)application +#endif // TARGET_OS_IOS || TARGET_OS_TV + +#if TARGET_OS_IOS + +- (BOOL)application:(GULApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { + SEL methodSelector = @selector(application:openURL:sourceApplication:annotation:); + // Call the real implementation if the real App Delegate has any. NSValue *openURLSourceAppAnnotationIMPPointer = - objc_getAssociatedObject(self, &kGULOpenURLOptionsSourceAnnotationsIMPKey); + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; GULRealOpenURLSourceApplicationAnnotationIMP openURLSourceApplicationAnnotationIMP = [openURLSourceAppAnnotationIMPPointer pointerValue]; __block BOOL returnedValue = NO; - SEL methodSelector = @selector(application:openURL:sourceApplication:annotation:); [GULAppDelegateSwizzler notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { + callback:^(id interceptor) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" returnedValue |= [interceptor application:application @@ -588,25 +759,29 @@ - (BOOL)application:(UIApplication *)application return returnedValue; } +#endif // TARGET_OS_IOS + #pragma mark - [Donor Methods] Network overridden handler methods +#if TARGET_OS_IOS || TARGET_OS_TV + #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wstrict-prototypes" -- (void)application:(UIApplication *)application +- (void)application:(GULApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler API_AVAILABLE(ios(7.0)) { #pragma clang diagnostic pop + SEL methodSelector = @selector(application: + handleEventsForBackgroundURLSession:completionHandler:); NSValue *handleBackgroundSessionPointer = - objc_getAssociatedObject(self, &kGULHandleBackgroundSessionIMPKey); + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; GULRealHandleEventsForBackgroundURLSessionIMP handleBackgroundSessionIMP = [handleBackgroundSessionPointer pointerValue]; // Notify interceptors. - SEL methodSelector = - @selector(application:handleEventsForBackgroundURLSession:completionHandler:); [GULAppDelegateSwizzler notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { + callback:^(id interceptor) { [interceptor application:application handleEventsForBackgroundURLSession:identifier completionHandler:completionHandler]; @@ -617,24 +792,26 @@ - (void)application:(UIApplication *)application } } +#endif // TARGET_OS_IOS || TARGET_OS_TV + #pragma mark - [Donor Methods] User Activities overridden handler methods // This is needed to for the library to be warning free on iOS versions < 8. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunguarded-availability" -- (BOOL)application:(UIApplication *)application +- (BOOL)application:(GULApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { + SEL methodSelector = @selector(application:continueUserActivity:restorationHandler:); NSValue *continueUserActivityIMPPointer = - objc_getAssociatedObject(self, &kGULContinueUserActivityIMPKey); + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; GULRealContinueUserActivityIMP continueUserActivityIMP = continueUserActivityIMPPointer.pointerValue; __block BOOL returnedValue = NO; - SEL methodSelector = @selector(application:continueUserActivity:restorationHandler:); [GULAppDelegateSwizzler notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { + callback:^(id interceptor) { returnedValue |= [interceptor application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; @@ -648,8 +825,150 @@ - (BOOL)application:(UIApplication *)application } #pragma clang diagnostic pop -+ (void)proxyAppDelegate:(id)appDelegate { - id originalDelegate = appDelegate; +#pragma mark - [Donor Methods] Remote Notifications + +- (void)application:(GULApplication *)application + donor_didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + SEL methodSelector = NSSelectorFromString(kGULDidRegisterForRemoteNotificationsSEL); + + NSValue *didRegisterForRemoteNotificationsIMPPointer = + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; + GULRealDidRegisterForRemoteNotificationsIMP didRegisterForRemoteNotificationsIMP = + [didRegisterForRemoteNotificationsIMPPointer pointerValue]; + + // Notify interceptors. + [GULAppDelegateSwizzler + notifyInterceptorsWithMethodSelector:methodSelector + callback:^(id interceptor) { + NSInvocation *invocation = [GULAppDelegateSwizzler + appDelegateInvocationForSelector:methodSelector]; + [invocation setTarget:interceptor]; + [invocation setSelector:methodSelector]; + [invocation setArgument:(void *)(&application) atIndex:2]; + [invocation setArgument:(void *)(&deviceToken) atIndex:3]; + [invocation invoke]; + }]; + // Call the real implementation if the real App Delegate has any. + if (didRegisterForRemoteNotificationsIMP) { + didRegisterForRemoteNotificationsIMP(self, methodSelector, application, deviceToken); + } +} + +- (void)application:(GULApplication *)application + donor_didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { + SEL methodSelector = NSSelectorFromString(kGULDidFailToRegisterForRemoteNotificationsSEL); + NSValue *didFailToRegisterForRemoteNotificationsIMPPointer = + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; + GULRealDidFailToRegisterForRemoteNotificationsIMP didFailToRegisterForRemoteNotificationsIMP = + [didFailToRegisterForRemoteNotificationsIMPPointer pointerValue]; + + // Notify interceptors. + [GULAppDelegateSwizzler + notifyInterceptorsWithMethodSelector:methodSelector + callback:^(id interceptor) { + NSInvocation *invocation = [GULAppDelegateSwizzler + appDelegateInvocationForSelector:methodSelector]; + [invocation setTarget:interceptor]; + [invocation setSelector:methodSelector]; + [invocation setArgument:(void *)(&application) atIndex:2]; + [invocation setArgument:(void *)(&error) atIndex:3]; + [invocation invoke]; + }]; + // Call the real implementation if the real App Delegate has any. + if (didFailToRegisterForRemoteNotificationsIMP) { + didFailToRegisterForRemoteNotificationsIMP(self, methodSelector, application, error); + } +} + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +// This is needed to for the library to be warning free on iOS versions < 7. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" +- (void)application:(GULApplication *)application + donor_didReceiveRemoteNotification:(NSDictionary *)userInfo + fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { + SEL methodSelector = NSSelectorFromString(kGULDidReceiveRemoteNotificationWithCompletionSEL); + NSValue *didReceiveRemoteNotificationWithCompletionIMPPointer = + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; + GULRealDidReceiveRemoteNotificationWithCompletionIMP + didReceiveRemoteNotificationWithCompletionIMP = + [didReceiveRemoteNotificationWithCompletionIMPPointer pointerValue]; + + // Notify interceptors. + [GULAppDelegateSwizzler + notifyInterceptorsWithMethodSelector:methodSelector + callback:^(id interceptor) { + NSInvocation *invocation = [GULAppDelegateSwizzler + appDelegateInvocationForSelector:methodSelector]; + [invocation setTarget:interceptor]; + [invocation setSelector:methodSelector]; + [invocation setArgument:(void *)(&application) atIndex:2]; + [invocation setArgument:(void *)(&userInfo) atIndex:3]; + [invocation setArgument:(void *)(&completionHandler) atIndex:4]; + [invocation invoke]; + }]; + // Call the real implementation if the real App Delegate has any. + if (didReceiveRemoteNotificationWithCompletionIMP) { + didReceiveRemoteNotificationWithCompletionIMP(self, methodSelector, application, userInfo, + completionHandler); + } +} +#pragma clang diagnostic pop +#endif // __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + +- (void)application:(GULApplication *)application + donor_didReceiveRemoteNotification:(NSDictionary *)userInfo { + SEL methodSelector = NSSelectorFromString(kGULDidReceiveRemoteNotificationSEL); + NSValue *didReceiveRemoteNotificationIMPPointer = + [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; + GULRealDidReceiveRemoteNotificationIMP didReceiveRemoteNotificationIMP = + [didReceiveRemoteNotificationIMPPointer pointerValue]; + + // Notify interceptors. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [GULAppDelegateSwizzler + notifyInterceptorsWithMethodSelector:methodSelector + callback:^(id interceptor) { + NSInvocation *invocation = [GULAppDelegateSwizzler + appDelegateInvocationForSelector:methodSelector]; + [invocation setTarget:interceptor]; + [invocation setSelector:methodSelector]; + [invocation setArgument:(void *)(&application) atIndex:2]; + [invocation setArgument:(void *)(&userInfo) atIndex:3]; + [invocation invoke]; + }]; +#pragma clang diagnostic pop + // Call the real implementation if the real App Delegate has any. + if (didReceiveRemoteNotificationIMP) { + didReceiveRemoteNotificationIMP(self, methodSelector, application, userInfo); + } +} + ++ (nullable NSInvocation *)appDelegateInvocationForSelector:(SEL)selector { + struct objc_method_description methodDescription = + protocol_getMethodDescription(@protocol(GULApplicationDelegate), selector, NO, YES); + if (methodDescription.types == NULL) { + return nil; + } + + NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:methodDescription.types]; + return [NSInvocation invocationWithMethodSignature:signature]; +} + ++ (void)proxyAppDelegate:(id)appDelegate { + if (![appDelegate conformsToProtocol:@protocol(GULApplicationDelegate)]) { + GULLogNotice( + kGULLoggerSwizzler, NO, + [NSString + stringWithFormat:@"I-SWZ%06ld", + (long)kGULSwizzlerMessageCodeAppDelegateSwizzlingInvalidAppDelegate], + @"App Delegate does not conform to UIApplicationDelegate protocol. %@", + [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]); + return; + } + + id originalDelegate = appDelegate; // Do not create a subclass if it is not enabled. if (![GULAppDelegateSwizzler isAppDelegateProxyEnabled]) { GULLogNotice(kGULLoggerSwizzler, NO, @@ -670,7 +989,9 @@ + (void)proxyAppDelegate:(id)appDelegate { } @try { - [self createSubclassWithObject:originalDelegate]; + gOriginalAppDelegateClass = [originalDelegate class]; + gAppDelegateSubclass = [self createSubclassWithObject:originalDelegate]; + [self reassignAppDelegate]; } @catch (NSException *exception) { GULLogError(kGULLoggerSwizzler, NO, [NSString stringWithFormat:@"I-SWZ%06ld", @@ -697,22 +1018,17 @@ + (NSString *)correctAlternativeWhenAppDelegateProxyNotCreated { #pragma mark - Private Methods for Testing -#ifdef GUL_APP_DELEGATE_TESTING - + (void)clearInterceptors { [[self interceptors] removeAllObjects]; } + (void)resetProxyOriginalDelegateOnceToken { sProxyAppDelegateOnceToken = 0; + sProxyAppDelegateRemoteNotificationOnceToken = 0; } -+ (id)originalDelegate { ++ (id)originalDelegate { return gOriginalAppDelegate; } -#endif // GUL_APP_DELEGATE_TESTING - @end - -#endif // TARGET_OS_IOS diff --git a/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h index 219b220cfd..d7ebd86809 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h +++ b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h @@ -14,27 +14,22 @@ * limitations under the License. */ +#import #import #import -@class UIApplication; +@class GULApplication; NS_ASSUME_NONNULL_BEGIN @interface GULAppDelegateSwizzler () -/** Returns the current sharedApplication. - * - * @return the current UIApplication if in an app, or nil if in extension or if it doesn't exist. - */ -+ (nullable UIApplication *)sharedApplication; - /** ISA Swizzles the given appDelegate as the original app delegate would be. * * @param appDelegate The object that needs to be isa swizzled. This should conform to the - * UIApplicationDelegate protocol. + * application delegate protocol. */ -+ (void)proxyAppDelegate:(id)appDelegate; ++ (void)proxyAppDelegate:(id)appDelegate; /** Returns a dictionary containing interceptor IDs mapped to a GULZeroingWeakContainer. * @@ -43,8 +38,6 @@ NS_ASSUME_NONNULL_BEGIN */ + (GULMutableDictionary *)interceptors; -#ifdef GUL_APP_DELEGATE_TESTING // Methods only used in tests. - /** Deletes all the registered interceptors. */ + (void)clearInterceptors; @@ -55,9 +48,7 @@ NS_ASSUME_NONNULL_BEGIN * * @return The original app delegate instance that was proxied. */ -+ (id)originalDelegate; - -#endif // GUL_APP_DELEGATE_TESTING ++ (id)originalDelegate; @end diff --git a/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h index 31fc4b0ab0..c1b2d6e1d3 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h +++ b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h @@ -16,7 +16,7 @@ #import -@protocol UIApplicationDelegate; +#import NS_ASSUME_NONNULL_BEGIN @@ -28,13 +28,13 @@ typedef NSString *const GULAppDelegateInterceptorID; /** Registers an app delegate interceptor whose methods will be invoked as they're invoked on the * original app delegate. * - * @param interceptor An instance of a class that conforms to the UIApplicationDelegate protocol. + * @param interceptor An instance of a class that conforms to the application delegate protocol. * The interceptor is NOT retained. * @return A unique GULAppDelegateInterceptorID if interceptor was successfully registered; nil * if it fails. */ + (nullable GULAppDelegateInterceptorID)registerAppDelegateInterceptor: - (id)interceptor; + (id)interceptor; /** Unregisters an interceptor with the given ID if it exists. * @@ -45,9 +45,46 @@ typedef NSString *const GULAppDelegateInterceptorID; /** This method ensures that the original app delegate has been proxied. Call this before * registering your interceptor. This method is safe to call multiple times (but it only proxies * the app delegate once). + * + * This method doesn't proxy APNS related methods: + * @code + * - application:didRegisterForRemoteNotificationsWithDeviceToken: + * - application:didFailToRegisterForRemoteNotificationsWithError: + * - application:didReceiveRemoteNotification:fetchCompletionHandler: + * - application:didReceiveRemoteNotification: + * @endcode + * + * To proxy these methods use +[GULAppDelegateSwizzler + * proxyOriginalDelegateIncludingAPNSMethods]. The methods have to be proxied separately to + * avoid potential warnings from Apple review about missing Push Notification Entitlement (e.g. + * https://github.com/firebase/firebase-ios-sdk/issues/2807) + * + * The method has no effect for extensions. + * + * @see proxyOriginalDelegateIncludingAPNSMethods + */ ++ (void)proxyOriginalDelegate; + +/** This method ensures that the original app delegate has been proxied including APNS related + * methods. Call this before registering your interceptor. This method is safe to call multiple + * times (but it only proxies the app delegate once) or + * after +[GULAppDelegateSwizzler proxyOriginalDelegate] + * + * This method calls +[GULAppDelegateSwizzler proxyOriginalDelegate] under the hood. + * After calling this method the following App Delegate methods will be proxied in addition to + * the methods proxied by proxyOriginalDelegate: + * @code + * - application:didRegisterForRemoteNotificationsWithDeviceToken: + * - application:didFailToRegisterForRemoteNotificationsWithError: + * - application:didReceiveRemoteNotification:fetchCompletionHandler: + * - application:didReceiveRemoteNotification: + * @endcode + * + * The method has no effect for extensions. + * + * @see proxyOriginalDelegate */ -+ (void)proxyOriginalDelegate NS_EXTENSION_UNAVAILABLE( - "App delegate proxy doesn't support extensions."); ++ (void)proxyOriginalDelegateIncludingAPNSMethods; /** Indicates whether app delegate proxy is explicitly disabled or enabled. Enabled by default. * @@ -55,6 +92,13 @@ typedef NSString *const GULAppDelegateInterceptorID; */ + (BOOL)isAppDelegateProxyEnabled; +/** Returns the current sharedApplication. + * + * @return the current application instance if in an app, or nil if in extension or if it doesn't + * exist. + */ ++ (nullable GULApplication *)sharedApplication; + /** Do not initialize this class. */ - (instancetype)init NS_UNAVAILABLE; diff --git a/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h new file mode 100644 index 0000000000..cb322f4961 --- /dev/null +++ b/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h @@ -0,0 +1,39 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#if TARGET_OS_IOS || TARGET_OS_TV + +#import + +#define GULApplication UIApplication +#define GULApplicationDelegate UIApplicationDelegate +#define GULUserActivityRestoring UIUserActivityRestoring + +static NSString *const kGULApplicationClassName = @"UIApplication"; + +#elif TARGET_OS_OSX + +#import + +#define GULApplication NSApplication +#define GULApplicationDelegate NSApplicationDelegate +#define GULUserActivityRestoring NSUserActivityRestoring + +static NSString *const kGULApplicationClassName = @"NSApplication"; + +#endif diff --git a/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h b/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h index b71c03797c..2320ed36d9 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h +++ b/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h @@ -14,22 +14,25 @@ * limitations under the License. */ +#import + typedef NS_ENUM(NSInteger, GULSwizzlerMessageCode) { // App Delegate Swizzling. - kGULSwizzlerMessageCodeAppDelegateSwizzling000 = 1000, // I-SWZ001000 - kGULSwizzlerMessageCodeAppDelegateSwizzling001 = 1001, // I-SWZ001001 - kGULSwizzlerMessageCodeAppDelegateSwizzling002 = 1002, // I-SWZ001002 - kGULSwizzlerMessageCodeAppDelegateSwizzling003 = 1003, // I-SWZ001003 - kGULSwizzlerMessageCodeAppDelegateSwizzling004 = 1004, // I-SWZ001004 - kGULSwizzlerMessageCodeAppDelegateSwizzling005 = 1005, // I-SWZ001005 - kGULSwizzlerMessageCodeAppDelegateSwizzling006 = 1006, // I-SWZ001006 - kGULSwizzlerMessageCodeAppDelegateSwizzling007 = 1007, // I-SWZ001007 - kGULSwizzlerMessageCodeAppDelegateSwizzling008 = 1008, // I-SWZ001008 - kGULSwizzlerMessageCodeAppDelegateSwizzling009 = 1009, // I-SWZ001009 - kGULSwizzlerMessageCodeAppDelegateSwizzling010 = 1010, // I-SWZ001010 - kGULSwizzlerMessageCodeAppDelegateSwizzling011 = 1011, // I-SWZ001011 - kGULSwizzlerMessageCodeAppDelegateSwizzling012 = 1012, // I-SWZ001012 - kGULSwizzlerMessageCodeAppDelegateSwizzling013 = 1013, // I-SWZ001013 + kGULSwizzlerMessageCodeAppDelegateSwizzling000 = 1000, // I-SWZ001000 + kGULSwizzlerMessageCodeAppDelegateSwizzling001 = 1001, // I-SWZ001001 + kGULSwizzlerMessageCodeAppDelegateSwizzling002 = 1002, // I-SWZ001002 + kGULSwizzlerMessageCodeAppDelegateSwizzling003 = 1003, // I-SWZ001003 + kGULSwizzlerMessageCodeAppDelegateSwizzling004 = 1004, // I-SWZ001004 + kGULSwizzlerMessageCodeAppDelegateSwizzling005 = 1005, // I-SWZ001005 + kGULSwizzlerMessageCodeAppDelegateSwizzling006 = 1006, // I-SWZ001006 + kGULSwizzlerMessageCodeAppDelegateSwizzling007 = 1007, // I-SWZ001007 + kGULSwizzlerMessageCodeAppDelegateSwizzling008 = 1008, // I-SWZ001008 + kGULSwizzlerMessageCodeAppDelegateSwizzling009 = 1009, // I-SWZ001009 + kGULSwizzlerMessageCodeAppDelegateSwizzling010 = 1010, // I-SWZ001010 + kGULSwizzlerMessageCodeAppDelegateSwizzling011 = 1011, // I-SWZ001011 + kGULSwizzlerMessageCodeAppDelegateSwizzling012 = 1012, // I-SWZ001012 + kGULSwizzlerMessageCodeAppDelegateSwizzling013 = 1013, // I-SWZ001013 + kGULSwizzlerMessageCodeAppDelegateSwizzlingInvalidAppDelegate = 1014, // I-SWZ001014 // Method Swizzling. kGULSwizzlerMessageCodeMethodSwizzling000 = 2000, // I-SWZ002000 diff --git a/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h b/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h index 5b562719cb..d5502647c2 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h +++ b/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h @@ -40,4 +40,7 @@ /// Indicates whether it is running inside an extension or an app. + (BOOL)isAppExtension; +/// @return Returns @YES when is run on iOS version greater or equal to 7.0 ++ (BOOL)isIOS7OrHigher; + @end diff --git a/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m b/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m index 1fa767b185..8327438ad8 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m +++ b/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m @@ -247,4 +247,16 @@ + (BOOL)isAppExtension { #endif } ++ (BOOL)isIOS7OrHigher { +#if __has_builtin(__builtin_available) + if (@available(iOS 7.0, *)) { +#else + if ([[UIDevice currentDevice].systemVersion integerValue] >= 7) { +#endif + return YES; + } + + return NO; +} + @end diff --git a/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m b/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m index 4feb77a537..b4bd2f6aba 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m +++ b/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m @@ -17,7 +17,7 @@ #include #import -#import "Public/GULLoggerLevel.h" +#import /// ASL client facility name used by GULLogger. const char *kGULLoggerASLClientFacilityName = "com.google.utilities.logger"; @@ -72,8 +72,9 @@ void GULLoggerInitializeASL(void) { dispatch_set_target_queue(sGULClientQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)); #ifdef DEBUG - sMessageCodeRegex = - [NSRegularExpression regularExpressionWithPattern:kMessageCodePattern options:0 error:NULL]; + sMessageCodeRegex = [NSRegularExpression regularExpressionWithPattern:kMessageCodePattern + options:0 + error:NULL]; #endif }); } @@ -155,14 +156,20 @@ void GULLogBasic(GULLoggerLevel level, #ifdef DEBUG NSCAssert(messageCode.length == 11, @"Incorrect message code length."); NSRange messageCodeRange = NSMakeRange(0, messageCode.length); - NSUInteger numberOfMatches = - [sMessageCodeRegex numberOfMatchesInString:messageCode options:0 range:messageCodeRange]; + NSUInteger numberOfMatches = [sMessageCodeRegex numberOfMatchesInString:messageCode + options:0 + range:messageCodeRange]; NSCAssert(numberOfMatches == 1, @"Incorrect message code format."); #endif - NSString *logMsg = [[NSString alloc] initWithFormat:message arguments:args_ptr]; + NSString *logMsg; + if (args_ptr == NULL) { + logMsg = message; + } else { + logMsg = [[NSString alloc] initWithFormat:message arguments:args_ptr]; + } logMsg = [NSString stringWithFormat:@"%s - %@[%@] %@", sVersion, service, messageCode, logMsg]; dispatch_async(sGULClientQueue, ^{ - asl_log(sGULLoggerClient, NULL, level, "%s", logMsg.UTF8String); + asl_log(sGULLoggerClient, NULL, (int)level, "%s", logMsg.UTF8String); }); } #pragma clang diagnostic pop diff --git a/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h b/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h index 81ff212d71..f0ee435b8f 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h +++ b/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h @@ -14,6 +14,8 @@ * limitations under the License. */ +#import + /** * The log levels used by internal logging. */ diff --git a/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m b/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m index 9839124dd3..17b1c316a8 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m +++ b/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m @@ -16,18 +16,14 @@ #import +#ifdef DEBUG #import #import "../Common/GULLoggerCodes.h" -#ifdef GUL_UNSWIZZLING_ENABLED -#import -// We need a private method for an assert. -#import +static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilities/MethodSwizzler]"; #endif -static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilites/MethodSwizzler]"; - -dispatch_queue_t GetGULSwizzlingQueue() { +dispatch_queue_t GetGULSwizzlingQueue(void) { static dispatch_queue_t queue; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -56,82 +52,55 @@ + (void)swizzleClass:(Class)aClass NSAssert(method, @"You're attempting to swizzle a method that doesn't exist. (%@, %@)", NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); IMP newImp = imp_implementationWithBlock(block); - -#ifdef GUL_UNSWIZZLING_ENABLED +#ifdef DEBUG IMP currentImp = class_getMethodImplementation(resolvedClass, selector); - [[GULSwizzlingCache sharedInstance] cacheCurrentIMP:currentImp - forNewIMP:newImp - forClass:resolvedClass - withSelector:selector]; + Class class = NSClassFromString(@"GULSwizzlingCache"); + if (class) { + SEL cacheSelector = NSSelectorFromString(@"cacheCurrentIMP:forNewIMP:forClass:withSelector:"); + NSMethodSignature *methodSignature = [class methodSignatureForSelector:cacheSelector]; + if (methodSignature != nil) { + NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature]; + [inv setSelector:cacheSelector]; + [inv setTarget:class]; + [inv setArgument:&(currentImp) atIndex:2]; + [inv setArgument:&(newImp) atIndex:3]; + [inv setArgument:&(resolvedClass) atIndex:4]; + [inv setArgument:(void *_Nonnull) & (selector) atIndex:5]; + [inv invoke]; + } + } #endif const char *typeEncoding = method_getTypeEncoding(method); __unused IMP originalImpOfClass = class_replaceMethod(resolvedClass, selector, newImp, typeEncoding); -#ifdef GUL_UNSWIZZLING_ENABLED +#ifdef DEBUG // If !originalImpOfClass, then the IMP came from a superclass. if (originalImpOfClass) { - if (originalImpOfClass != - [[GULSwizzlingCache sharedInstance] originalIMPOfCurrentIMP:currentImp]) { - GULLogWarning(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeMethodSwizzling000], - @"Swizzling class: %@ SEL:%@ after it has been previously been swizzled.", - NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); + SEL selector = NSSelectorFromString(@"originalIMPOfCurrentIMP:"); + NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector]; + if (methodSignature != nil) { + NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature]; + [inv setSelector:selector]; + [inv setTarget:class]; + [inv setArgument:&(currentImp) atIndex:2]; + [inv invoke]; + IMP testOriginal; + [inv getReturnValue:&testOriginal]; + if (originalImpOfClass != testOriginal) { + GULLogWarning(kGULLoggerSwizzler, NO, + [NSString stringWithFormat:@"I-SWZ%06ld", + (long)kGULSwizzlerMessageCodeMethodSwizzling000], + @"Swizzling class: %@ SEL:%@ after it has been previously been swizzled.", + NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); + } } } #endif }); } -+ (void)unswizzleClass:(Class)aClass selector:(SEL)selector isClassSelector:(BOOL)isClassSelector { -#ifdef GUL_UNSWIZZLING_ENABLED - dispatch_sync(GetGULSwizzlingQueue(), ^{ - NSAssert(aClass != nil && selector != nil, @"You cannot unswizzle a nil class or selector."); - Method method = nil; - Class resolvedClass = aClass; - if (isClassSelector) { - resolvedClass = object_getClass(aClass); - method = class_getClassMethod(aClass, selector); - } else { - method = class_getInstanceMethod(aClass, selector); - } - NSAssert(method, @"Couldn't find the method you're unswizzling in the runtime."); - IMP originalImp = - [[GULSwizzlingCache sharedInstance] cachedIMPForClass:resolvedClass withSelector:selector]; - NSAssert(originalImp, @"This class/selector combination hasn't been swizzled"); - IMP currentImp = method_setImplementation(method, originalImp); - BOOL didRemoveBlock = imp_removeBlock(currentImp); - NSAssert(didRemoveBlock, @"Wasn't able to remove the block of a swizzled IMP."); - [[GULSwizzlingCache sharedInstance] clearCacheForSwizzledIMP:currentImp - selector:selector - aClass:resolvedClass]; - }); -#else - NSAssert(NO, @"Unswizzling is disabled."); -#endif -} - -+ (nullable IMP)originalImplementationForClass:(Class)aClass - selector:(SEL)selector - isClassSelector:(BOOL)isClassSelector { -#ifdef GUL_UNSWIZZLING_ENABLED - __block IMP originalImp = nil; - dispatch_sync(GetGULSwizzlingQueue(), ^{ - Class resolvedClass = isClassSelector ? object_getClass(aClass) : aClass; - originalImp = - [[GULSwizzlingCache sharedInstance] cachedIMPForClass:resolvedClass withSelector:selector]; - NSAssert(originalImp, @"The IMP for this class/selector combo doesn't exist (%@, %@).", - NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); - }); - return originalImp; -#else - NSAssert(NO, @"Unswizzling is disabled and the original IMP is not cached."); - return nil; -#endif -} - + (nullable IMP)currentImplementationForClass:(Class)aClass selector:(SEL)selector isClassSelector:(BOOL)isClassSelector { @@ -181,5 +150,4 @@ + (BOOL)selector:(SEL)selector existsInClass:(Class)aClass isClassSelector:(BOOL free(vars); return array; } - @end diff --git a/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h b/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h index ab008cab92..26949c8867 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h +++ b/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h @@ -35,14 +35,6 @@ NS_ASSUME_NONNULL_BEGIN isClassSelector:(BOOL)isClassSelector withBlock:(nullable id)block; -/** Restores the original implementation. - * - * @param aClass The class to unswizzle. - * @param selector The selector to restore the original implementation of. - * @param isClassSelector A BOOL specifying whether the selector is a class or instance selector. - */ -+ (void)unswizzleClass:(Class)aClass selector:(SEL)selector isClassSelector:(BOOL)isClassSelector; - /** Returns the current IMP for the given class and selector. * * @param aClass The class to use. @@ -54,18 +46,6 @@ NS_ASSUME_NONNULL_BEGIN selector:(SEL)selector isClassSelector:(BOOL)isClassSelector; -/** Returns the original IMP for the given class and selector. - * - * @param aClass The class to use. - * @param selector The selector to find the implementation of. - * @param isClassSelector A BOOL specifying whether the selector is a class or instance selector. - * @return The implementation of the selector in the runtime before any consumer or GULSwizzler - * swizzled. - */ -+ (nullable IMP)originalImplementationForClass:(Class)aClass - selector:(SEL)selector - isClassSelector:(BOOL)isClassSelector; - /** Checks the runtime to see if a selector exists on a class. If a property is declared as * @dynamic, we have a reverse swizzling situation, where the implementation of a method exists * only in concrete subclasses, and NOT in the superclass. We can detect that situation using diff --git a/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m b/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m index d281eb4450..946471f69b 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m +++ b/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m @@ -45,14 +45,14 @@ - (NSString *)description { - (id)objectForKey:(id)key { __block id object; dispatch_sync(_queue, ^{ - object = self->_objects[key]; + object = [self->_objects objectForKey:key]; }); return object; } - (void)setObject:(id)object forKey:(id)key { dispatch_async(_queue, ^{ - self->_objects[key] = object; + [self->_objects setObject:object forKey:key]; }); } @@ -77,13 +77,17 @@ - (NSUInteger)count { } - (id)objectForKeyedSubscript:(id)key { - // The method this calls is already synchronized. - return [self objectForKey:key]; + __block id object; + dispatch_sync(_queue, ^{ + object = self->_objects[key]; + }); + return object; } - (void)setObject:(id)obj forKeyedSubscript:(id)key { - // The method this calls is already synchronized. - [self setObject:obj forKey:key]; + dispatch_async(_queue, ^{ + self->_objects[key] = obj; + }); } - (NSDictionary *)dictionary { diff --git a/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m b/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m index 233500b5cd..c3227278b8 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m +++ b/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m @@ -257,12 +257,12 @@ - (void)setLoggerDelegate:(id)loggerDelegate { // Explicitly check whether the delegate responds to the methods because conformsToProtocol does // not work correctly even though the delegate does respond to the methods. if (!loggerDelegate || - ![loggerDelegate - respondsToSelector:@selector(GULNetwork_logWithLevel:messageCode:message:contexts:)] || - ![loggerDelegate - respondsToSelector:@selector(GULNetwork_logWithLevel:messageCode:message:context:)] || - ! - [loggerDelegate respondsToSelector:@selector(GULNetwork_logWithLevel:messageCode:message:)]) { + ![loggerDelegate respondsToSelector:@selector(GULNetwork_logWithLevel: + messageCode:message:contexts:)] || + ![loggerDelegate respondsToSelector:@selector(GULNetwork_logWithLevel: + messageCode:message:context:)] || + ![loggerDelegate respondsToSelector:@selector(GULNetwork_logWithLevel: + messageCode:message:)]) { GULLogError(kGULLoggerNetwork, NO, [NSString stringWithFormat:@"I-NET%06ld", (long)kGULNetworkMessageCodeNetwork002], @"Cannot set the network logger delegate: delegate does not conform to the network " @@ -279,8 +279,9 @@ - (void)handleErrorWithCode:(NSInteger)code queue:(dispatch_queue_t)queue withHandler:(GULNetworkCompletionHandler)handler { NSDictionary *userInfo = @{kGULNetworkErrorContext : @"Failed to create network request"}; - NSError *error = - [[NSError alloc] initWithDomain:kGULNetworkErrorDomain code:code userInfo:userInfo]; + NSError *error = [[NSError alloc] initWithDomain:kGULNetworkErrorDomain + code:code + userInfo:userInfo]; [self GULNetwork_logWithLevel:kGULNetworkLogLevelWarning messageCode:kGULNetworkMessageCodeNetwork002 message:@"Failed to create network request. Code, error" diff --git a/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m b/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m index 26da579a3b..a74872c2bd 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m +++ b/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m @@ -21,6 +21,12 @@ #import "Private/GULNetworkConstants.h" #import "Private/GULNetworkMessageCode.h" +@interface GULNetworkURLSession () +@end + @implementation GULNetworkURLSession { /// The handler to be called when the request completes or error has occurs. GULNetworkURLSessionCompletionHandler _completionHandler; @@ -32,6 +38,9 @@ @implementation GULNetworkURLSession { #pragma clang diagnostic ignored "-Wunguarded-availability" /// The session configuration. NSURLSessionConfiguration' is only available on iOS 7.0 or newer. NSURLSessionConfiguration *_sessionConfig; + + /// The current NSURLSession. + NSURLSession *__weak _Nullable _URLSession; #pragma clang diagnostic pop /// The path to the directory where all temporary files are stored before uploading. @@ -94,8 +103,8 @@ + (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID /// Sends an async POST request using NSURLSession for iOS >= 7.0, and returns an ID of the /// connection. -- (NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler +- (nullable NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request + completionHandler:(GULNetworkURLSessionCompletionHandler)handler API_AVAILABLE(ios(7.0)) { // NSURLSessionUploadTask does not work with NSData in the background. // To avoid this issue, write the data to a temporary file to upload it. @@ -128,7 +137,7 @@ - (NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request if (didWriteFile) { // Exclude this file from backing up to iTunes. There are conflicting reports that excluding - // directory from backing up does not excluding files of that directory from backing up. + // directory from backing up does not exclude files of that directory from backing up. [self excludeFromBackupForURL:_uploadingFileURL]; _sessionConfig = [self backgroundSessionConfigWithSessionID:_sessionID]; @@ -141,7 +150,6 @@ - (NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request // If we cannot write to file, just send it in the foreground. _sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; [self populateSessionConfig:_sessionConfig withRequest:request]; - _sessionConfig.URLCache = nil; session = [NSURLSession sessionWithConfiguration:_sessionConfig delegate:self delegateQueue:[NSOperationQueue mainQueue]]; @@ -157,6 +165,8 @@ - (NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request return nil; } + _URLSession = session; + // Save the session into memory. [[self class] setSessionInFetcherMap:self forSessionID:_sessionID]; @@ -171,8 +181,8 @@ - (NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request } /// Sends an async GET request using NSURLSession for iOS >= 7.0, and returns an ID of the session. -- (NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler +- (nullable NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request + completionHandler:(GULNetworkURLSessionCompletionHandler)handler API_AVAILABLE(ios(7.0)) { if (_backgroundNetworkEnabled) { _sessionConfig = [self backgroundSessionConfigWithSessionID:_sessionID]; @@ -199,6 +209,8 @@ - (NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request return nil; } + _URLSession = session; + // Save the session into memory. [[self class] setSessionInFetcherMap:self forSessionID:_sessionID]; @@ -210,6 +222,24 @@ - (NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request return _sessionID; } +#pragma mark - NSURLSessionDataDelegate + +/// Called by the NSURLSession when the data task has received some of the expected data. +/// Once the session is completed, URLSession:task:didCompleteWithError will be called and the +/// completion handler will be called with the downloaded data. +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data { + @synchronized(self) { + NSMutableData *mutableData = [[NSMutableData alloc] init]; + if (_downloadedData) { + mutableData = _downloadedData.mutableCopy; + } + [mutableData appendData:data]; + _downloadedData = mutableData; + } +} + #pragma mark - NSURLSessionTaskDelegate /// Called by the NSURLSession once the download task is completed. The file is saved in the @@ -283,16 +313,15 @@ - (void)URLSession:(NSURLSession *)session [self maybeRemoveTempFilesAtURL:_networkDirectoryURL expiringTime:kGULNetworkTempFolderExpireTime]; - // Invalidate the session only if it's owned by this class. - NSString *sessionID = session.configuration.identifier; - if ([sessionID hasPrefix:kGULNetworkBackgroundSessionConfigIDPrefix]) { - [session finishTasksAndInvalidate]; + // This is called without checking the sessionID here since non-background sessions + // won't have an ID. + [session finishTasksAndInvalidate]; - // Explicitly remove the session so it won't be reused. The weak map table should - // remove the session on deallocation, but dealloc may not happen immediately after - // calling `finishTasksAndInvalidate`. - [[self class] setSessionInFetcherMap:nil forSessionID:sessionID]; - } + // Explicitly remove the session so it won't be reused. The weak map table should + // remove the session on deallocation, but dealloc may not happen immediately after + // calling `finishTasksAndInvalidate`. + NSString *sessionID = session.configuration.identifier; + [[self class] setSessionInFetcherMap:nil forSessionID:sessionID]; } - (void)URLSession:(NSURLSession *)session @@ -403,9 +432,8 @@ - (void)addSystemCompletionHandler:(GULNetworkSystemCompletionHandler)handler [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelError messageCode:kGULNetworkMessageCodeURLSession010 - message: - @"Cannot store system completion handler with empty network " - "session identifier"]; + message:@"Cannot store system completion handler with empty network " + "session identifier"]; return; } @@ -507,8 +535,9 @@ - (void)maybeRemoveTempFilesAtURL:(NSURL *)folderURL expiringTime:(NSTimeInterva NSTimeInterval now = [NSDate date].timeIntervalSince1970; for (NSURL *tempFile in directoryContent) { NSDate *creationDate; - BOOL getCreationDate = - [tempFile getResourceValue:&creationDate forKey:NSURLCreationDateKey error:NULL]; + BOOL getCreationDate = [tempFile getResourceValue:&creationDate + forKey:NSURLCreationDateKey + error:NULL]; if (!getCreationDate) { continue; } @@ -677,13 +706,13 @@ + (void)setSessionInFetcherMap:(GULNetworkURLSession *)session forSessionID:(NSS GULNetworkURLSession *existingSession = [[[self class] sessionIDToFetcherMap] objectForKey:sessionID]; if (existingSession) { - // Invalidating doesn't seem like the right thing to do here since it may cancel an active - // background transfer if the background session is handling multiple requests. The old - // session will be dropped from the map table, but still complete its request. - NSString *message = [NSString stringWithFormat:@"Discarding session: %@", existingSession]; - [existingSession->_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelInfo - messageCode:kGULNetworkMessageCodeURLSession019 - message:message]; + if (session) { + NSString *message = [NSString stringWithFormat:@"Discarding session: %@", existingSession]; + [existingSession->_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelInfo + messageCode:kGULNetworkMessageCodeURLSession019 + message:message]; + } + [existingSession->_URLSession finishTasksAndInvalidate]; } if (session) { [[[self class] sessionIDToFetcherMap] setObject:session forKey:sessionID]; diff --git a/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkMessageCode.h b/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkMessageCode.h index f9d1628a84..507bc5a5dc 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkMessageCode.h +++ b/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkMessageCode.h @@ -14,6 +14,8 @@ * limitations under the License. */ +#import + // Make sure these codes do not overlap with any contained in the FIRAMessageCode enum. typedef NS_ENUM(NSInteger, GULNetworkMessageCode) { // GULNetwork.m diff --git a/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkURLSession.h b/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkURLSession.h index 81190c63d9..3f9f7f9e14 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkURLSession.h +++ b/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkURLSession.h @@ -18,43 +18,45 @@ #import "GULNetworkLoggerProtocol.h" -typedef void (^GULNetworkCompletionHandler)(NSHTTPURLResponse *response, - NSData *data, - NSError *error); -typedef void (^GULNetworkURLSessionCompletionHandler)(NSHTTPURLResponse *response, - NSData *data, +NS_ASSUME_NONNULL_BEGIN + +typedef void (^GULNetworkCompletionHandler)(NSHTTPURLResponse *_Nullable response, + NSData *_Nullable data, + NSError *_Nullable error); +typedef void (^GULNetworkURLSessionCompletionHandler)(NSHTTPURLResponse *_Nullable response, + NSData *_Nullable data, NSString *sessionID, - NSError *error); + NSError *_Nullable error); typedef void (^GULNetworkSystemCompletionHandler)(void); /// The protocol that uses NSURLSession for iOS >= 7.0 to handle requests and responses. -@interface GULNetworkURLSession - : NSObject +@interface GULNetworkURLSession : NSObject /// Indicates whether the background network is enabled. Default value is NO. @property(nonatomic, getter=isBackgroundNetworkEnabled) BOOL backgroundNetworkEnabled; /// The logger delegate to log message, errors or warnings that occur during the network operations. -@property(nonatomic, weak) id loggerDelegate; +@property(nonatomic, weak, nullable) id loggerDelegate; /// Calls the system provided completion handler after the background session is finished. + (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID completionHandler:(GULNetworkSystemCompletionHandler)completionHandler; /// Initializes with logger delegate. -- (instancetype)initWithNetworkLoggerDelegate:(id)networkLoggerDelegate - NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithNetworkLoggerDelegate: + (nullable id)networkLoggerDelegate NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; /// Sends an asynchronous POST request and calls the provided completion handler when the request /// completes or when errors occur, and returns an ID of the session/connection. -- (NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler; +- (nullable NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request + completionHandler:(GULNetworkURLSessionCompletionHandler)handler; /// Sends an asynchronous GET request and calls the provided completion handler when the request /// completes or when errors occur, and returns an ID of the session. -- (NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler; +- (nullable NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request + completionHandler:(GULNetworkURLSessionCompletionHandler)handler; +NS_ASSUME_NONNULL_END @end diff --git a/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h b/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h index 283cdd5c10..373e0af404 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h +++ b/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h @@ -14,6 +14,8 @@ * limitations under the License. */ +#import + // Make sure these codes do not overlap with any contained in the FIRAMessageCode enum. typedef NS_ENUM(NSInteger, GULReachabilityMessageCode) { // GULReachabilityChecker.m diff --git a/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m b/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m index 1b1bafb76e..47ac35d641 100644 --- a/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m +++ b/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m @@ -195,28 +195,6 @@ - (void)synchronize { #pragma mark - Private methods -/// Removes all values from the search list entry specified by 'domainName', the current user, and -/// any host. The change is persistent. Equivalent to -removePersistentDomainForName: of -/// NSUserDefaults. -- (void)clearAllData { - // On macOS, using `kCFPreferencesCurrentHost` will not set all the keys necessary to match - // `NSUserDefaults`. -#if TARGET_OS_MAC - CFStringRef host = kCFPreferencesAnyHost; -#else - CFStringRef host = kCFPreferencesCurrentHost; -#endif // TARGET_OS_OSX - - CFArrayRef keyList = CFPreferencesCopyKeyList(_appNameRef, kCFPreferencesCurrentUser, host); - if (!keyList) { - return; - } - - CFPreferencesSetMultiple(NULL, keyList, _appNameRef, kCFPreferencesCurrentUser, host); - CFRelease(keyList); - [self scheduleSynchronize]; -} - - (void)scheduleSynchronize { // Synchronize data using a timer so that multiple set... calls can be coalesced under one // synchronize. diff --git a/Pods/GoogleUtilities/README.md b/Pods/GoogleUtilities/README.md index eb6ea333f8..f55d642180 100644 --- a/Pods/GoogleUtilities/README.md +++ b/Pods/GoogleUtilities/README.md @@ -1,8 +1,9 @@ # Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) This repository contains a subset of the Firebase iOS SDK source. It currently -includes FirebaseCore, FirebaseAuth, FirebaseDatabase, FirebaseFirestore, -FirebaseFunctions, FirebaseInAppMessagingDisplay, FirebaseMessaging and +includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, +FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, +FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and FirebaseStorage. The repository also includes GoogleUtilities source. The @@ -60,29 +61,67 @@ pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' ### Carthage (iOS only) -An experimental Carthage distribution is now available. See +Instructions for the experimental Carthage distribution are at [Carthage](Carthage.md). +### Rome + +Instructions for installing binary frameworks via +[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). + ## Development -Follow the subsequent instructions to develop, debug, unit test, run integration -tests, and try out reference samples: +To develop Firebase software in this repository, ensure that you have at least +the following software: + + * Xcode 10.1 (or later) + * CocoaPods 1.7.2 (or later) + +For the pod that you want to develop: + +`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open` + +Firestore has a self contained Xcode project. See +[Firestore/README.md](Firestore/README.md). + +### Adding a New Firebase Pod + +See [AddNewPod.md](AddNewPod.md). + +### Code Formatting + +To ensure that the code is formatted consistently, run the script +[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) +before creating a PR. + +Travis will verify that any code changes are done in a style compliant way. Install +`clang-format` and `swiftformat`. +These commands will get the right versions: ``` -$ git clone git@github.com:firebase/firebase-ios-sdk.git -$ cd firebase-ios-sdk/Example -$ pod update -$ open Firebase.xcworkspace +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb +brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb ``` -Firestore and Functions have self contained Xcode projects. See -[Firestore/README.md](Firestore/README.md) and -[Functions/README.md](Functions/README.md). +Note: if you already have a newer version of these installed you may need to +`brew switch` to this version. + +To update this section, find the versions of clang-format and swiftformat.rb to +match the versions in the CI failure logs +[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). ### Running Unit Tests Select a scheme and press Command-u to build a component and run its unit tests. +#### Viewing Code Coverage + +First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. + +After running the `AllUnitTests_iOS` scheme in Xcode, execute +`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` +at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. + ### Running Sample Apps In order to run the sample apps and integration tests, you'll need valid `GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist @@ -144,10 +183,10 @@ very grateful! We'd like to empower as many developers as we can to be able to participate in the Firebase community. ### macOS and tvOS -FirebaseAuth, FirebaseCore, FirebaseDatabase and FirebaseStorage now compile, run unit tests, and -work on macOS and tvOS, thanks to contributions from the community. There are a few tweaks needed, -like ensuring iOS-only, macOS-only, or tvOS-only code is correctly guarded with checks for -`TARGET_OS_IOS`, `TARGET_OS_OSX` and `TARGET_OS_TV`. +Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, +FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, +FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on +macOS and tvOS. For tvOS, checkout the [Sample](Example/tvOSSample). @@ -156,10 +195,21 @@ actively developed primarily for iOS. While we can catch basic unit test issues may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). -For installation instructions, see [above](README.md#accessing-firebase-source-snapshots). +Note that the Firebase pod is not available for macOS and tvOS. + +To install, add a subset of the following to the Podfile: -Note that the Firebase pod is not available for macOS and tvOS. Install a selection of the -`FirebaseAuth`, `FirebaseCore`, `FirebaseDatabase` and `FirebaseStorage` CocoaPods. +``` +pod 'FirebaseABTesting' +pod 'FirebaseAuth' +pod 'FirebaseCore' +pod 'FirebaseDatabase' +pod 'FirebaseFirestore' +pod 'FirebaseFunctions' +pod 'FirebaseMessaging' +pod 'FirebaseRemoteConfig' +pod 'FirebaseStorage' +``` ## Roadmap diff --git a/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h b/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h new file mode 120000 index 0000000000..ce646ecf1d --- /dev/null +++ b/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h @@ -0,0 +1 @@ +../../../FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h \ No newline at end of file diff --git a/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h b/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h new file mode 120000 index 0000000000..07d83d70f4 --- /dev/null +++ b/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h @@ -0,0 +1 @@ +../../../FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h \ No newline at end of file diff --git a/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h b/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h new file mode 120000 index 0000000000..ce646ecf1d --- /dev/null +++ b/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h @@ -0,0 +1 @@ +../../../FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h \ No newline at end of file diff --git a/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h b/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h new file mode 120000 index 0000000000..07d83d70f4 --- /dev/null +++ b/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h @@ -0,0 +1 @@ +../../../FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h \ No newline at end of file diff --git a/Pods/Local Podspecs/RCMarkdownParser.podspec.json b/Pods/Local Podspecs/RCMarkdownParser.podspec.json deleted file mode 100644 index 93628b82db..0000000000 --- a/Pods/Local Podspecs/RCMarkdownParser.podspec.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "RCMarkdownParser", - "version": "3.0.7", - "summary": "A markdown parser written in swift", - "description": "A parser written to convert a string containing markdown to an NSAttributedString for Rocket.Chat. It was based off of LTMarkdownParser.", - "homepage": "https://github.com/RocketChat/RCMarkdownParser", - "license": "MIT", - "authors": { - "Matheus Cardoso": "matheus@cardo.so" - }, - "source": { - "git": "https://github.com/RocketChat/RCMarkdownParser.git", - "tag": "3.0.7" - }, - "platforms": { - "ios": "8.0" - }, - "requires_arc": true, - "source_files": "Pod/Classes/**/*" -} diff --git a/Pods/Local Podspecs/RocketChatViewController.podspec.json b/Pods/Local Podspecs/RocketChatViewController.podspec.json index 273e4c7767..789c82af86 100644 --- a/Pods/Local Podspecs/RocketChatViewController.podspec.json +++ b/Pods/Local Podspecs/RocketChatViewController.podspec.json @@ -1,6 +1,6 @@ { "name": "RocketChatViewController", - "version": "1.0.0", + "version": "1.0.1", "summary": "RocketChatViewController is a light weight library that allows you to implement a chat on iOS.", "description": "Rocket.Chat.ViewController chat component.", "homepage": "https://github.com/RocketChat/RocketChatViewController", @@ -13,7 +13,7 @@ }, "source": { "git": "https://github.com/RocketChat/RocketChatViewController", - "tag": "1.0.0" + "tag": "1.0.1" }, "social_media_url": "https://twitter.com/RocketChat", "platforms": { @@ -28,7 +28,7 @@ "source_files": "RocketChatViewController/Classes/**/*", "dependencies": { "DifferenceKit": [ - "~> 1.0" + "~> 1.1" ] } }, diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 5fe29f4436..0fbb8a28b9 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,106 +1,120 @@ PODS: - 1PasswordExtension (1.8.5) - - Crashlytics (3.11.1): - - Fabric (~> 1.8.1) + - Crashlytics (3.14.0): + - Fabric (~> 1.10.2) - DifferenceKit (1.1.3): - DifferenceKit/Core (= 1.1.3) - DifferenceKit/UIKitExtension (= 1.1.3) - DifferenceKit/Core (1.1.3) - DifferenceKit/UIKitExtension (1.1.3): - DifferenceKit/Core - - Fabric (1.8.2) - - Firebase/Core (5.12.0): + - Fabric (1.10.2) + - Firebase/Core (6.11.0): - Firebase/CoreOnly - - FirebaseAnalytics (= 5.3.0) - - Firebase/CoreOnly (5.12.0): - - FirebaseCore (= 5.1.7) - - FirebaseAnalytics (5.3.0): - - FirebaseCore (~> 5.1) - - FirebaseInstanceID (~> 3.3) - - GoogleAppMeasurement (~> 5.3) - - GoogleUtilities/AppDelegateSwizzler (~> 5.2) - - GoogleUtilities/MethodSwizzler (~> 5.2) - - GoogleUtilities/Network (~> 5.2) - - "GoogleUtilities/NSData+zlib (~> 5.2)" - - nanopb (~> 0.3) - - FirebaseCore (5.1.7): - - GoogleUtilities/Logger (~> 5.2) - - FirebaseInstanceID (3.3.0): - - FirebaseCore (~> 5.1) - - GoogleUtilities/Environment (~> 5.3) - - GoogleUtilities/UserDefaults (~> 5.3) + - FirebaseAnalytics (= 6.1.3) + - Firebase/CoreOnly (6.11.0): + - FirebaseCore (= 6.3.2) + - FirebaseAnalytics (6.1.3): + - FirebaseCore (~> 6.3) + - FirebaseInstanceID (~> 4.2) + - GoogleAppMeasurement (= 6.1.3) + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (~> 0.3.901) + - FirebaseCore (6.3.2): + - FirebaseCoreDiagnostics (~> 1.0) + - FirebaseCoreDiagnosticsInterop (~> 1.0) + - GoogleUtilities/Environment (~> 6.2) + - GoogleUtilities/Logger (~> 6.2) + - FirebaseCoreDiagnostics (1.1.1): + - FirebaseCoreDiagnosticsInterop (~> 1.0) + - GoogleDataTransportCCTSupport (~> 1.0) + - GoogleUtilities/Environment (~> 6.2) + - GoogleUtilities/Logger (~> 6.2) + - nanopb (~> 0.3.901) + - FirebaseCoreDiagnosticsInterop (1.0.0) + - FirebaseInstanceID (4.2.6): + - FirebaseCore (~> 6.0) + - GoogleUtilities/Environment (~> 6.0) + - GoogleUtilities/UserDefaults (~> 6.0) - FLAnimatedImage (1.0.12) - FLEX (2.4.0) - - GoogleAppMeasurement (5.3.0): - - GoogleUtilities/AppDelegateSwizzler (~> 5.2) - - GoogleUtilities/MethodSwizzler (~> 5.2) - - GoogleUtilities/Network (~> 5.2) - - "GoogleUtilities/NSData+zlib (~> 5.2)" - - nanopb (~> 0.3) - - GoogleUtilities/AppDelegateSwizzler (5.3.4): + - GoogleAppMeasurement (6.1.3): + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (~> 0.3.901) + - GoogleDataTransport (3.0.1) + - GoogleDataTransportCCTSupport (1.2.1): + - GoogleDataTransport (~> 3.0) + - nanopb (~> 0.3.901) + - GoogleUtilities/AppDelegateSwizzler (6.3.1): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (5.3.4) - - GoogleUtilities/Logger (5.3.4): + - GoogleUtilities/Environment (6.3.1) + - GoogleUtilities/Logger (6.3.1): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (5.3.4): + - GoogleUtilities/MethodSwizzler (6.3.1): - GoogleUtilities/Logger - - GoogleUtilities/Network (5.3.4): + - GoogleUtilities/Network (6.3.1): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (5.3.4)" - - GoogleUtilities/Reachability (5.3.4): + - "GoogleUtilities/NSData+zlib (6.3.1)" + - GoogleUtilities/Reachability (6.3.1): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (5.3.4): + - GoogleUtilities/UserDefaults (6.3.1): - GoogleUtilities/Logger - MBProgressHUD (1.1.0) - MobilePlayer (1.4.0) - - nanopb (0.3.901): - - nanopb/decode (= 0.3.901) - - nanopb/encode (= 0.3.901) - - nanopb/decode (0.3.901) - - nanopb/encode (0.3.901) + - nanopb (0.3.9011): + - nanopb/decode (= 0.3.9011) + - nanopb/encode (= 0.3.9011) + - nanopb/decode (0.3.9011) + - nanopb/encode (0.3.9011) - Nuke (7.6.3) - - Nuke-FLAnimatedImage-Plugin (6.0): + - Nuke-FLAnimatedImage-Plugin (6.1): - FLAnimatedImage (~> 1.0) - Nuke (~> 7.5) - - OAuthSwift (1.2.2) - - RCMarkdownParser (3.0.7) - - ReachabilitySwift (4.2.1) - - Realm (3.12.0): - - Realm/Headers (= 3.12.0) - - Realm/Headers (3.12.0) - - RealmSwift (3.12.0): - - Realm (= 3.12.0) - - RocketChatViewController (1.0.0): - - RocketChatViewController/Composer (= 1.0.0) - - RocketChatViewController/ViewController (= 1.0.0) - - RocketChatViewController/Composer (1.0.0) - - RocketChatViewController/ViewController (1.0.0): - - DifferenceKit (~> 1.0) + - OAuthSwift (2.0.0) + - RCMarkdownParser (3.0.6) + - ReachabilitySwift (5.0.0) + - Realm (3.20.0): + - Realm/Headers (= 3.20.0) + - Realm/Headers (3.20.0) + - RealmSwift (3.20.0): + - Realm (= 3.20.0) + - RocketChatViewController (1.0.1): + - RocketChatViewController/Composer (= 1.0.1) + - RocketChatViewController/ViewController (= 1.0.1) + - RocketChatViewController/Composer (1.0.1) + - RocketChatViewController/ViewController (1.0.1): + - DifferenceKit (~> 1.1) - semver (1.1.0) - SimpleImageViewer (1.2.0): - FLAnimatedImage - - Starscream (3.0.6) - - SwiftLint (0.27.0) - - SwiftyJSON (4.2.0) - - SwipeCellKit (2.6.0) + - Starscream (3.1.1) + - SwiftLint (0.36.0) + - SwiftyJSON (5.0.0) + - SwipeCellKit (2.7.1) DEPENDENCIES: - 1PasswordExtension - Crashlytics - - DifferenceKit (~> 1.0) + - DifferenceKit/Core (~> 1.1.3) - Fabric - Firebase/Core - FLEX (~> 2.0) - MBProgressHUD (~> 1.1.0) - MobilePlayer (from `https://github.com/RocketChat/RCiOSMobilePlayer`) - - Nuke (~> 7.6) + - Nuke (~> 7.3) - Nuke-FLAnimatedImage-Plugin - OAuthSwift - - RCMarkdownParser (from `https://github.com/RocketChat/RCMarkdownParser.git`) + - RCMarkdownParser - ReachabilitySwift - RealmSwift - RocketChatViewController (from `https://github.com/RocketChat/RocketChatViewController`) @@ -109,10 +123,10 @@ DEPENDENCIES: - Starscream (~> 3) - SwiftLint - SwiftyJSON - - SwipeCellKit + - SwipeCellKit (~> 2.7.1) SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - 1PasswordExtension - Crashlytics - DifferenceKit @@ -120,16 +134,21 @@ SPEC REPOS: - Firebase - FirebaseAnalytics - FirebaseCore + - FirebaseCoreDiagnostics + - FirebaseCoreDiagnosticsInterop - FirebaseInstanceID - FLAnimatedImage - FLEX - GoogleAppMeasurement + - GoogleDataTransport + - GoogleDataTransportCCTSupport - GoogleUtilities - MBProgressHUD - nanopb - Nuke - Nuke-FLAnimatedImage-Plugin - OAuthSwift + - RCMarkdownParser - ReachabilitySwift - Realm - RealmSwift @@ -142,8 +161,6 @@ SPEC REPOS: EXTERNAL SOURCES: MobilePlayer: :git: https://github.com/RocketChat/RCiOSMobilePlayer - RCMarkdownParser: - :git: https://github.com/RocketChat/RCMarkdownParser.git RocketChatViewController: :git: https://github.com/RocketChat/RocketChatViewController SimpleImageViewer: @@ -153,11 +170,8 @@ CHECKOUT OPTIONS: MobilePlayer: :commit: 7ecd958711875a302d3ccfcb2607488b6fbde11b :git: https://github.com/RocketChat/RCiOSMobilePlayer - RCMarkdownParser: - :commit: 7c4ec046817df378b694bebdbcfe3565869ce82e - :git: https://github.com/RocketChat/RCMarkdownParser.git RocketChatViewController: - :commit: ff8b2f080e05e10286f1d84304f0713375c3f952 + :commit: 20b09477f1e15173c10b99a8b67e78b04102546c :git: https://github.com/RocketChat/RocketChatViewController SimpleImageViewer: :commit: 8222c338de0f285ca0c2d556c5d8dedd4a365b52 @@ -165,35 +179,39 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: 1PasswordExtension: 0e95bdea64ec8ff2f4f693be5467a09fac42a83d - Crashlytics: ca7ab4bc304aa216bdc2e4c1a96389ee77252203 + Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df DifferenceKit: 5018791b6c1fc839921a3c171a0a539ace6ea60c - Fabric: d2b22f443ba195d8a7cc204da230977c72733b40 - Firebase: 9190018e296139d938b99521cde0c15a6e8d2946 - FirebaseAnalytics: 63202d2665de4e6adcbdce189135255d8b5962ba - FirebaseCore: 027d350adc039aa5483357c6f56556f117c5170e - FirebaseInstanceID: e2fa4cb35ef5558c200f7f0ad8a53e212215f93e + Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74 + Firebase: bc9cfc7a96c73268656d5aaab453ff1b4b530e0e + FirebaseAnalytics: 0e3ecff2c5d86070f7d4325e21f1edabfbd558dc + FirebaseCore: beeff42c07c30ea94702471d99db2089b594fbbd + FirebaseCoreDiagnostics: af29e43048607588c050889d19204f4d7b758c9f + FirebaseCoreDiagnosticsInterop: 6829da2b8d1fc795ff1bd99df751d3788035d2cb + FirebaseInstanceID: d0eafcd8bdbd3447cd694594734078c3e3e77d8b FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31 FLEX: bd1a39e55b56bb413b6f1b34b3c10a0dc44ef079 - GoogleAppMeasurement: 5029d78f2b438bd30ffb44e6c558b57c21622727 - GoogleUtilities: abb092d2c12e817fa3e0e7b274987dd72fb86ec3 + GoogleAppMeasurement: 434cc7be25e71dc04b8d0e3079125127b330e84a + GoogleDataTransport: 166f9b9f82cbf60a204e8fe2daa9db3e3ec1fb15 + GoogleDataTransportCCTSupport: f6ab1962e9dc05ab1fb938b795e5b310209edeec + GoogleUtilities: f895fde57977df4e0233edda0dbeac490e3703b6 MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 MobilePlayer: 6c1df67588b247f80554ba60e67734215ab31a87 - nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 + nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd Nuke: 44130e95e09463f8773ae4b96b90de1eba6b3350 - Nuke-FLAnimatedImage-Plugin: e4c39d13061a08ac0bdcb0cd7a23882f4a43f4a6 - OAuthSwift: 27b34fe80b76b67cd8f45571e0be2432bc9f6de1 - RCMarkdownParser: f107c58b83065d001e20c988443e6eab9c0a1e26 - ReachabilitySwift: 35720ffea59c1c76d15f885be77fd33e33985427 - Realm: cdaef23c4ddb36ab1ddffed23f5a7f3332fc5585 - RealmSwift: 5576324033f0aa5ef1e0a839a3da2281dff47a7f - RocketChatViewController: 8c9fa96502913d268bcecf6d15830f1ffd711e7b + Nuke-FLAnimatedImage-Plugin: bee60907311da45dd291463f41a176d50de68122 + OAuthSwift: 6805456763cf1c7ae0c16765257ed430b7aacae7 + RCMarkdownParser: 518b616a4f48bb02247243544d4fd55c048288a4 + ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + Realm: 8b2ca5bc6479a91f379b6b42b5922e396cd5ba5a + RealmSwift: 1949ef26a279e1845bd51d591b9103adfcd121df + RocketChatViewController: ab532fa2810a165dc4f8e79a337253c09434cce6 semver: 11ae3bc4a6036efbc86b5863ef5fa32c065c8bbd SimpleImageViewer: 6ed0d2acf7c166a5b4e795bccc7b9ea1b225ff9b - Starscream: ef3ece99d765eeccb67de105bfa143f929026cf5 - SwiftLint: 3207c1faa2240bf8973b191820a116113cd11073 - SwiftyJSON: c4bcba26dd9ec7a027fc8eade48e2c911f229e96 - SwipeCellKit: 935ca28c187ec6e1ffb2b578cf8ddca842bfdcbb + Starscream: 4bb2f9942274833f7b4d296a55504dcfc7edb7b0 + SwiftLint: fc9859e4e1752340664851f667bb1898b9c90114 + SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7 + SwipeCellKit: 3972254a826da74609926daf59b08d6c72e619ea -PODFILE CHECKSUM: 5e8b4d7a4a0d585c2085855ac86f7b4bf26230b7 +PODFILE CHECKSUM: 073c49c07817379e9a38016e18fbd1c604474b9a -COCOAPODS: 1.6.1 +COCOAPODS: 1.5.3 diff --git a/Pods/Nuke-FLAnimatedImage-Plugin/README.md b/Pods/Nuke-FLAnimatedImage-Plugin/README.md index 92ab113b46..d39f8055a8 100644 --- a/Pods/Nuke-FLAnimatedImage-Plugin/README.md +++ b/Pods/Nuke-FLAnimatedImage-Plugin/README.md @@ -45,14 +45,16 @@ github "kean/Nuke-FLAnimatedImage-Plugin" ## Minimum Requirements -- iOS 9 -- Xcode 9.2 -- Swift 4.0 +| Nuke FLAnimatedImage Plugin | Swift | Xcode | Platforms | +|----------------------------------------|-----------------------|----------------------|-------------| +| Nuke FLAnimatedImage Plugin 6.1 | Swift 4.2 – 5.0 | Xcode 10.1 – 10.2 | iOS 10.0 | +| Nuke FLAnimatedImage Plugin 6.0 | Swift 4.0 – 4.2 | Xcode 9.2 – 10.1 | iOS 9.0 | + ## Dependencies -- [Nuke 7.0](https://github.com/kean/Nuke) -- [FLAnimatedImage 1](https://github.com/Flipboard/FLAnimatedImage) +- [Nuke ~> 7.5](https://github.com/kean/Nuke) +- [FLAnimatedImage ~> 1.0](https://github.com/Flipboard/FLAnimatedImage) ## License diff --git a/Pods/Nuke-FLAnimatedImage-Plugin/Source/AnimatedImage.swift b/Pods/Nuke-FLAnimatedImage-Plugin/Source/AnimatedImage.swift index bafa3f9c28..f83a2ed3df 100644 --- a/Pods/Nuke-FLAnimatedImage-Plugin/Source/AnimatedImage.swift +++ b/Pods/Nuke-FLAnimatedImage-Plugin/Source/AnimatedImage.swift @@ -1,6 +1,6 @@ // The MIT License (MIT) // -// Copyright (c) 2016-2018 Alexander Grebenyuk (github.com/kean). +// Copyright (c) 2016-2019 Alexander Grebenyuk (github.com/kean). import UIKit import FLAnimatedImage diff --git a/Pods/OAuthSwift/README.md b/Pods/OAuthSwift/README.md index c1069613e0..e2e9dec5ad 100644 --- a/Pods/OAuthSwift/README.md +++ b/Pods/OAuthSwift/README.md @@ -10,9 +10,6 @@ Swift based OAuth library for iOS and macOS. Twitter, Flickr, Github, Instagram, Foursquare, Fitbit, Withings, Linkedin, Dropbox, Dribbble, Salesforce, BitBucket, GoogleDrive, Smugmug, Intuit, Zaim, Tumblr, Slack, Uber, Gitter, Facebook, Spotify, Typetalk, SoundCloud, etc -## Sponsored by Auth0 -If you want to easily add authentication to Swift apps, feel free to check out Auth0's Swift SDK and free plan at [auth0.com/overview](https://auth0.com/overview?utm_source=GHsponsor&utm_medium=GHsponsor&utm_campaign=oauthswift&utm_content=auth) - ## Installation OAuthSwift is packaged as a Swift framework. Currently this is the simplest way to add it to your app: @@ -27,7 +24,7 @@ OAuthSwift is packaged as a Swift framework. Currently this is the simplest way * Install Carthage (https://github.com/Carthage/Carthage) * Create Cartfile file ``` -github "OAuthSwift/OAuthSwift" ~> 1.2.0 +github "OAuthSwift/OAuthSwift" ~> 2.0.0 ``` * Run `carthage update`. * On your application targets’ “General” settings tab, in the “Embedded Binaries” section, drag and drop OAuthSwift.framework from the Carthage/Build/iOS folder on disk. @@ -40,13 +37,23 @@ github "OAuthSwift/OAuthSwift" ~> 1.2.0 platform :ios, '10.0' use_frameworks! -pod 'OAuthSwift', '~> 1.2.0' +pod 'OAuthSwift', '~> 2.0.0' ``` -### swift 3 +### Old versions + +#### swift 3 Use the `swift3` branch, or the tag `1.1.2` on main branch +#### swift 4 + +Use the tag `1.2.0` on main branch + +#### objective c + +Use the tag `1.4.1` on main branch + ## How to ### Setting URL Schemes In info tab of your target @@ -56,7 +63,7 @@ Replace oauth-swift by your application name ### Handle URL in AppDelegate - On iOS implement `UIApplicationDelegate` method ```swift -func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { +func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { if (url.host == "oauth-callback") { OAuthSwift.handle(url: url) } @@ -92,17 +99,17 @@ oauthswift = OAuth1Swift( ) // authorize let handle = oauthswift.authorize( - withCallbackURL: URL(string: "oauth-swift://oauth-callback/twitter")!, - success: { credential, response, parameters in + withCallbackURL: URL(string: "oauth-swift://oauth-callback/twitter")!) { result in + switch result { + case .success(let (credential, response, parameters)): print(credential.oauthToken) print(credential.oauthTokenSecret) print(parameters["user_id"]) // Do your request - }, - failure: { error in + case .failure(let error): print(error.localizedDescription) } -) +} ``` ### OAuth1 without authorization No urls to specify here @@ -113,14 +120,14 @@ oauthswift = OAuth1Swift( consumerSecret: "********" ) // do your HTTP request without authorize -oauthswift.client.get("https://api.example.com/foo/bar", - success: { response in +oauthswift.client.get("https://api.example.com/foo/bar") { result in + switch result { + case .success(let response): //.... - }, - failure: { error in + case .failure(let error): //... } -) +} ``` ### Authorize with OAuth2.0 @@ -134,18 +141,51 @@ oauthswift = OAuth2Swift( ) let handle = oauthswift.authorize( withCallbackURL: URL(string: "oauth-swift://oauth-callback/instagram")!, - scope: "likes+comments", state:"INSTAGRAM", - success: { credential, response, parameters in + scope: "likes+comments", state:"INSTAGRAM") { result in + switch result { + case .success(let (credential, response, parameters)): print(credential.oauthToken) // Do your request - }, - failure: { error in + case .failure(let error): print(error.localizedDescription) } +} + +``` + +### Authorize with OAuth2.0 and proof key flow (PKCE) +```swift +// create an instance and retain it +oauthswift = OAuth2Swift( + consumerKey: "********", + consumerSecret: "********", + authorizeUrl: "https://server.com/oauth/authorize", + responseType: "code" ) +oauthswift.accessTokenBasicAuthentification = true + +let codeVerifier = base64url("abcd...") +let codeChallenge = codeChallenge(for: codeVerifier) + +let handle = oauthswift.authorize( + withCallbackURL: URL(string: "myApp://callback/")!, + scope: "requestedScope", + state:"State01", + codeChallenge: codeChallenge, + codeChallengeMethod: "S256", + codeVerifier: codeVerifier) { result in + switch result { + case .success(let (credential, response, parameters)): + print(credential.oauthToken) + // Do your request + case .failure(let error): + print(error.localizedDescription) + } +} ``` + See demo for more examples ### Handle authorize URL @@ -180,19 +220,19 @@ Of course you can create your own class or customize the controller by setting t Just call HTTP functions of `oauthswift.client` ```swift -oauthswift.client.get("https://api.linkedin.com/v1/people/~", - success: { response in +oauthswift.client.get("https://api.linkedin.com/v1/people/~") { result in + switch result { + case .success(let response): let dataString = response.string print(dataString) - }, - failure: { error in + case .failure(let error): print(error) - } -) + } +} // same with request method oauthswift.client.request("https://api.linkedin.com/v1/people/~", .GET, parameters: [:], headers: [:], - success: { ... + completionHandler: { ... ``` See more examples in the demo application: [ViewController.swift](/Demo/Common/ViewController.swift) @@ -259,4 +299,4 @@ OAuthSwift is available under the MIT license. See the LICENSE file for more inf )](http://mit-license.org) [![Platform](https://img.shields.io/badge/platform-iOS_OSX_TVOS-lightgrey.svg?style=flat )](https://developer.apple.com/resources/) [![Language](https://img.shields.io/badge/language-swift-orange.svg?style=flat )](https://developer.apple.com/swift) [![Cocoapod](https://img.shields.io/cocoapods/v/OAuthSwift.svg?style=flat)](http://cocoadocs.org/docsets/OAuthSwift/) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Build Status](https://travis-ci.org/OAuthSwift/OAuthSwift.svg?branch=master)](https://travis-ci.org/OAuthSwift/OAuthSwift) diff --git a/Pods/OAuthSwift/Sources/Data+OAuthSwift.swift b/Pods/OAuthSwift/Sources/Data+OAuthSwift.swift index 69303473d0..9d287a45da 100644 --- a/Pods/OAuthSwift/Sources/Data+OAuthSwift.swift +++ b/Pods/OAuthSwift/Sources/Data+OAuthSwift.swift @@ -42,4 +42,9 @@ extension Data { return bytesArray*/ } + internal mutating func append(_ string: String, using encoding: String.Encoding = .utf8) { + if let data = string.data(using: encoding) { + append(data) + } + } } diff --git a/Pods/OAuthSwift/Sources/HMAC.swift b/Pods/OAuthSwift/Sources/HMAC.swift index 27b13c568a..18aab4d8cd 100644 --- a/Pods/OAuthSwift/Sources/HMAC.swift +++ b/Pods/OAuthSwift/Sources/HMAC.swift @@ -43,7 +43,7 @@ open class HMAC { } extension HMAC: OAuthSwiftSignatureDelegate { - open static func sign(hashMethod: OAuthSwiftHashMethod, key: Data, message: Data) -> Data? { + public static func sign(hashMethod: OAuthSwiftHashMethod, key: Data, message: Data) -> Data? { switch hashMethod { case .sha1: return sha1(key: key, message: message) diff --git a/Pods/OAuthSwift/Sources/NSError+OAuthSwift.swift b/Pods/OAuthSwift/Sources/NSError+OAuthSwift.swift index dc31919730..18105a6ca2 100644 --- a/Pods/OAuthSwift/Sources/NSError+OAuthSwift.swift +++ b/Pods/OAuthSwift/Sources/NSError+OAuthSwift.swift @@ -18,15 +18,15 @@ public extension NSError { /// /// Also implements a special handling for the Facebook API, which indicates invalid tokens in a /// different manner. See https://developers.facebook.com/docs/graph-api/using-graph-api#errors - public var isExpiredToken: Bool { - guard self.domain == NSURLErrorDomain else { + var isExpiredToken: Bool { + guard self.domain == NSURLErrorDomain || self.domain == OAuthSwiftError.Domain else { return false } if self.code == 401 { if let reponseHeaders = self.userInfo["Response-Headers"] as? [String: String], let authenticateHeader = reponseHeaders["WWW-Authenticate"] ?? reponseHeaders["Www-Authenticate"] { let headerDictionary = authenticateHeader.headerDictionary - if let error = headerDictionary["error"], error == "invalid_token" || error == "\"invalid_token\"" { + if let error = headerDictionary["error"], error == "invalid_token" || error == "expired_token" || error == "\"invalid_token\"" { return true } } @@ -34,7 +34,7 @@ public extension NSError { let bodyData = body.data(using: OAuthSwiftDataEncoding), let json = try? JSONSerialization.jsonObject(with: bodyData, options: []), let jsonDic = json as? [String: AnyObject] { - if let error = jsonDic["error"] as? String, error == "invalid_token" || error == "\"invalid_token\"" { + if let error = jsonDic["error"] as? String, error == "invalid_token" || error == "expired_token" || error == "\"invalid_token\"" { return true } if let errors = jsonDic["errors"] as? [[String: AnyObject]] { diff --git a/Pods/OAuthSwift/Sources/NotificationCenter+OAuthSwift.swift b/Pods/OAuthSwift/Sources/NotificationCenter+OAuthSwift.swift index 2c5649b9e4..904b97dfd6 100644 --- a/Pods/OAuthSwift/Sources/NotificationCenter+OAuthSwift.swift +++ b/Pods/OAuthSwift/Sources/NotificationCenter+OAuthSwift.swift @@ -9,5 +9,9 @@ import Foundation public extension Notification.Name { - public static let OAuthSwiftHandleCallbackURL: Notification.Name = .init("OAuthSwiftCallbackNotificationName") + @available(*, deprecated, renamed: "OAuthSwift.didHandleCallbackURL") + static let OAuthSwiftHandleCallbackURL: Notification.Name = OAuthSwift.didHandleCallbackURL +} +public extension OAuthSwift { + static let didHandleCallbackURL: Notification.Name = .init("OAuthSwiftCallbackNotificationName") } diff --git a/Pods/OAuthSwift/Sources/OAuth1Swift.swift b/Pods/OAuthSwift/Sources/OAuth1Swift.swift index 7e3f0f2a76..bf8a64922f 100644 --- a/Pods/OAuthSwift/Sources/OAuth1Swift.swift +++ b/Pods/OAuthSwift/Sources/OAuth1Swift.swift @@ -17,6 +17,9 @@ open class OAuth1Swift: OAuthSwift { /// Optionally add callback URL to authorize Url (default: false) open var addCallbackURLToAuthorizeURL: Bool = false + /// Encode token using RFC3986 + open var useRFC3986ToEncodeToken: Bool = false + var consumerKey: String var consumerSecret: String var requestTokenUrl: String @@ -24,12 +27,12 @@ open class OAuth1Swift: OAuthSwift { var accessTokenUrl: String // MARK: init - public init(consumerKey: String, consumerSecret: String, requestTokenUrl: String, authorizeUrl: String, accessTokenUrl: String) { + public init(consumerKey: String, consumerSecret: String, requestTokenUrl: URLConvertible, authorizeUrl: URLConvertible, accessTokenUrl: URLConvertible) { self.consumerKey = consumerKey self.consumerSecret = consumerSecret - self.requestTokenUrl = requestTokenUrl - self.authorizeUrl = authorizeUrl - self.accessTokenUrl = accessTokenUrl + self.requestTokenUrl = requestTokenUrl.string + self.authorizeUrl = authorizeUrl.string + self.accessTokenUrl = accessTokenUrl.string super.init(consumerKey: consumerKey, consumerSecret: consumerSecret) self.client.credential.version = .oauth1 } @@ -62,78 +65,84 @@ open class OAuth1Swift: OAuthSwift { // MARK: functions // 0. Start @discardableResult - open func authorize(withCallbackURL callbackURL: URL, success: @escaping TokenSuccessHandler, failure: FailureHandler?) -> OAuthSwiftRequestHandle? { - - self.postOAuthRequestToken(callbackURL: callbackURL, success: { [unowned self] credential, _, _ in - - self.observeCallback { [weak self] url in - guard let this = self else { OAuthSwift.retainError(failure); return } - var responseParameters = [String: String]() - if let query = url.query { - responseParameters += query.parametersFromQueryString - } - if let fragment = url.fragment, !fragment.isEmpty { - responseParameters += fragment.parametersFromQueryString - } - if let token = responseParameters["token"] { - responseParameters["oauth_token"] = token - } + open func authorize(withCallbackURL url: URLConvertible, headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { + guard let callbackURL = url.url else { + completion(.failure(.encodingError(urlString: url.string))) + return nil + } + let completionHandler: TokenCompletionHandler = { [unowned self] result in + switch result { + case .success(let (credential, _, _)): + self.observeCallback { [weak self] url in + guard let this = self else { OAuthSwift.retainError(completion); return } + var responseParameters = [String: String]() + if let query = url.query { + responseParameters += query.parametersFromQueryString + } + if let fragment = url.fragment, !fragment.isEmpty { + responseParameters += fragment.parametersFromQueryString + } + if let token = responseParameters["token"] { + responseParameters["oauth_token"] = token + } - if let token = responseParameters["oauth_token"], !token.isEmpty { - this.client.credential.oauthToken = token.safeStringByRemovingPercentEncoding - if let oauth_verifier = responseParameters["oauth_verifier"] { - this.client.credential.oauthVerifier = oauth_verifier.safeStringByRemovingPercentEncoding - } else { - if !this.allowMissingOAuthVerifier { - failure?(OAuthSwiftError.configurationError(message: "Missing oauth_verifier. Maybe use allowMissingOAuthVerifier=true")) - return + if let token = responseParameters["oauth_token"], !token.isEmpty { + this.client.credential.oauthToken = token.safeStringByRemovingPercentEncoding + if let oauth_verifier = responseParameters["oauth_verifier"] { + this.client.credential.oauthVerifier = oauth_verifier.safeStringByRemovingPercentEncoding + } else { + if !this.allowMissingOAuthVerifier { + completion(.failure(.configurationError(message: "Missing oauth_verifier. Maybe use allowMissingOAuthVerifier=true"))) + return + } } + this.postOAuthAccessTokenWithRequestToken(headers: headers, completionHandler: completion) + } else { + completion(.failure(.missingToken)) + return } - this.postOAuthAccessTokenWithRequestToken(success: success, failure: failure) - } else { - failure?(OAuthSwiftError.missingToken) - return } - } - // 2. Authorize - if let token = credential.oauthToken.urlQueryEncoded { - var urlString = self.authorizeUrl + (self.authorizeUrl.contains("?") ? "&" : "?") - urlString += "oauth_token=\(token)" - if self.addCallbackURLToAuthorizeURL { - urlString += "&oauth_callback=\(callbackURL.absoluteString)" - } - if let queryURL = URL(string: urlString) { - self.authorizeURLHandler.handle(queryURL) + // 2. Authorize + if let token = self.encode(token: credential.oauthToken) { + var urlString = self.authorizeUrl + (self.authorizeUrl.contains("?") ? "&" : "?") + urlString += "oauth_token=\(token)" + if self.addCallbackURLToAuthorizeURL { + urlString += "&oauth_callback=\(callbackURL.absoluteString)" + } + if let queryURL = URL(string: urlString) { + self.authorizeURLHandler.handle(queryURL) + } else { + completion(.failure(.encodingError(urlString: urlString))) + } } else { - failure?(OAuthSwiftError.encodingError(urlString: urlString)) + completion(.failure(.encodingError(urlString: credential.oauthToken))) //TODO specific error } - } else { - failure?(OAuthSwiftError.encodingError(urlString: credential.oauthToken)) //TODO specific error + case .failure(let error): + completion(.failure(error)) } + } - }, failure: failure) - + self.postOAuthRequestToken(callbackURL: callbackURL, headers: headers, completionHandler: completionHandler) return self } - @discardableResult - open func authorize(withCallbackURL urlString: String, success: @escaping TokenSuccessHandler, failure: FailureHandler?) -> OAuthSwiftRequestHandle? { - guard let url = URL(string: urlString) else { - failure?(OAuthSwiftError.encodingError(urlString: urlString)) - return nil + private func encode(token: String) -> String? { + if useRFC3986ToEncodeToken { + return token.urlEncoded } - return authorize(withCallbackURL: url, success: success, failure: failure) + return token.urlQueryEncoded } // 1. Request token - func postOAuthRequestToken(callbackURL: URL, success: @escaping TokenSuccessHandler, failure: FailureHandler?) { + func postOAuthRequestToken(callbackURL: URL, headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) { var parameters = [String: Any]() parameters["oauth_callback"] = callbackURL.absoluteString - if let handle = self.client.post( - self.requestTokenUrl, parameters: parameters, - success: { [weak self] response in - guard let this = self else { OAuthSwift.retainError(failure); return } + let completionHandler: OAuthSwiftHTTPRequest.CompletionHandler = { [weak self] result in + guard let this = self else { OAuthSwift.retainError(completion); return } + + switch result { + case .success(let response): let parameters = response.string?.parametersFromQueryString ?? [:] if let oauthToken = parameters["oauth_token"] { this.client.credential.oauthToken = oauthToken.safeStringByRemovingPercentEncoding @@ -141,25 +150,32 @@ open class OAuth1Swift: OAuthSwift { if let oauthTokenSecret=parameters["oauth_token_secret"] { this.client.credential.oauthTokenSecret = oauthTokenSecret.safeStringByRemovingPercentEncoding } - success(this.client.credential, response, parameters) - }, failure: failure - ) { + completion(.success((this.client.credential, response, parameters))) + case .failure(let error): + completion(.failure(error)) + } + } + + if let handle = self.client.post( + self.requestTokenUrl, parameters: parameters, headers: headers, + completionHandler: completionHandler) { self.putHandle(handle, withKey: UUID().uuidString) } } // 3. Get Access token - func postOAuthAccessTokenWithRequestToken(success: @escaping TokenSuccessHandler, failure: FailureHandler?) { + func postOAuthAccessTokenWithRequestToken(headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) { var parameters = [String: Any]() parameters["oauth_token"] = self.client.credential.oauthToken if !self.allowMissingOAuthVerifier { parameters["oauth_verifier"] = self.client.credential.oauthVerifier } - if let handle = self.client.post( - self.accessTokenUrl, parameters: parameters, - success: { [weak self] response in - guard let this = self else { OAuthSwift.retainError(failure); return } + let completionHandler: OAuthSwiftHTTPRequest.CompletionHandler = { [weak self] result in + guard let this = self else { OAuthSwift.retainError(completion); return } + + switch result { + case .success(let response): let parameters = response.string?.parametersFromQueryString ?? [:] if let oauthToken = parameters["oauth_token"] { this.client.credential.oauthToken = oauthToken.safeStringByRemovingPercentEncoding @@ -167,9 +183,15 @@ open class OAuth1Swift: OAuthSwift { if let oauthTokenSecret = parameters["oauth_token_secret"] { this.client.credential.oauthTokenSecret = oauthTokenSecret.safeStringByRemovingPercentEncoding } - success(this.client.credential, response, parameters) - }, failure: failure - ) { + completion(.success((this.client.credential, response, parameters))) + + case .failure(let error): + completion(.failure(error)) + } + } + if let handle = self.client.post( + self.accessTokenUrl, parameters: parameters, headers: headers, + completionHandler: completionHandler) { self.putHandle(handle, withKey: UUID().uuidString) } } diff --git a/Pods/OAuthSwift/Sources/OAuth2Swift.swift b/Pods/OAuthSwift/Sources/OAuth2Swift.swift index 8cbb6240a5..9b56a0d8d4 100644 --- a/Pods/OAuthSwift/Sources/OAuth2Swift.swift +++ b/Pods/OAuthSwift/Sources/OAuth2Swift.swift @@ -30,23 +30,25 @@ open class OAuth2Swift: OAuthSwift { var accessTokenUrl: String? var responseType: String var contentType: String? + // RFC7636 PKCE + var codeVerifier: String? // MARK: init - public convenience init(consumerKey: String, consumerSecret: String, authorizeUrl: String, accessTokenUrl: String, responseType: String) { + public convenience init(consumerKey: String, consumerSecret: String, authorizeUrl: URLConvertible, accessTokenUrl: URLConvertible, responseType: String) { self.init(consumerKey: consumerKey, consumerSecret: consumerSecret, authorizeUrl: authorizeUrl, responseType: responseType) - self.accessTokenUrl = accessTokenUrl + self.accessTokenUrl = accessTokenUrl.string } - public convenience init(consumerKey: String, consumerSecret: String, authorizeUrl: String, accessTokenUrl: String, responseType: String, contentType: String) { + public convenience init(consumerKey: String, consumerSecret: String, authorizeUrl: URLConvertible, accessTokenUrl: URLConvertible, responseType: String, contentType: String) { self.init(consumerKey: consumerKey, consumerSecret: consumerSecret, authorizeUrl: authorizeUrl, responseType: responseType) - self.accessTokenUrl = accessTokenUrl + self.accessTokenUrl = accessTokenUrl.string self.contentType = contentType } - public init(consumerKey: String, consumerSecret: String, authorizeUrl: String, responseType: String) { + public init(consumerKey: String, consumerSecret: String, authorizeUrl: URLConvertible, responseType: String) { self.consumerKey = consumerKey self.consumerSecret = consumerSecret - self.authorizeUrl = authorizeUrl + self.authorizeUrl = authorizeUrl.string self.responseType = responseType super.init(consumerKey: consumerKey, consumerSecret: consumerSecret) self.client.credential.version = .oauth2 @@ -54,15 +56,15 @@ open class OAuth2Swift: OAuthSwift { public convenience init?(parameters: ConfigParameters) { guard let consumerKey = parameters["consumerKey"], let consumerSecret = parameters["consumerSecret"], - let responseType = parameters["responseType"], let authorizeUrl = parameters["authorizeUrl"] else { - return nil + let responseType = parameters["responseType"], let authorizeUrl = parameters["authorizeUrl"] else { + return nil } if let accessTokenUrl = parameters["accessTokenUrl"] { self.init(consumerKey: consumerKey, consumerSecret: consumerSecret, - authorizeUrl: authorizeUrl, accessTokenUrl: accessTokenUrl, responseType: responseType) + authorizeUrl: authorizeUrl, accessTokenUrl: accessTokenUrl, responseType: responseType) } else { self.init(consumerKey: consumerKey, consumerSecret: consumerSecret, - authorizeUrl: authorizeUrl, responseType: responseType) + authorizeUrl: authorizeUrl, responseType: responseType) } } @@ -78,11 +80,14 @@ open class OAuth2Swift: OAuthSwift { // MARK: functions @discardableResult - open func authorize(withCallbackURL callbackURL: URL?, scope: String, state: String, parameters: Parameters = [:], headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: FailureHandler?) -> OAuthSwiftRequestHandle? { - + open func authorize(withCallbackURL callbackURL: URLConvertible?, scope: String, state: String, parameters: Parameters = [:], headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { + if let url = callbackURL, url.url == nil { + completion(.failure(.encodingError(urlString: url.string))) + return nil + } self.observeCallback { [weak self] url in guard let this = self else { - OAuthSwift.retainError(failure) + OAuthSwift.retainError(completion) return } var responseParameters = [String: String]() @@ -97,36 +102,36 @@ open class OAuth2Swift: OAuthSwift { if let expiresIn: String = responseParameters["expires_in"], let offset = Double(expiresIn) { this.client.credential.oauthTokenExpiresAt = Date(timeInterval: offset, since: Date()) } - success(this.client.credential, nil, responseParameters) + completion(.success((this.client.credential, nil, responseParameters))) } else if let code = responseParameters["code"] { if !this.allowMissingStateCheck { guard let responseState = responseParameters["state"] else { - failure?(OAuthSwiftError.missingState) + completion(.failure(.missingState)) return } if responseState != state { - failure?(OAuthSwiftError.stateNotEqual(state: state, responseState: responseState)) + completion(.failure(.stateNotEqual(state: state, responseState: responseState))) return } } let callbackURLEncoded: URL? if let callbackURL = callbackURL { - callbackURLEncoded = URL(string: callbackURL.absoluteString.urlEncoded)! + callbackURLEncoded = callbackURL.encodedURL // XXX do not known why to re-encode, maybe if string only? } else { callbackURLEncoded = nil } if let handle = this.postOAuthAccessTokenWithRequestToken( byCode: code.safeStringByRemovingPercentEncoding, - callbackURL: callbackURLEncoded, headers: headers, success: success, failure: failure) { + callbackURL: callbackURLEncoded, headers: headers, completionHandler: completion) { this.putHandle(handle, withKey: UUID().uuidString) } } else if let error = responseParameters["error"] { let description = responseParameters["error_description"] ?? "" let message = NSLocalizedString(error, comment: description) - failure?(OAuthSwiftError.serverError(message: message)) + completion(.failure(.serverError(message: message))) } else { let message = "No access_token, no code and no error provided by server" - failure?(OAuthSwiftError.serverError(message: message)) + completion(.failure(.serverError(message: message))) } } @@ -140,7 +145,8 @@ open class OAuth2Swift: OAuthSwift { var queryString: String? = "" queryString = queryString?.urlQueryByAppending(parameter: "client_id", value: self.consumerKey, encodeError) if let callbackURL = callbackURL { - queryString = queryString?.urlQueryByAppending(parameter: "redirect_uri", value: self.encodeCallbackURL ? callbackURL.absoluteString.urlEncoded : callbackURL.absoluteString, encode: self.encodeCallbackURLQuery, encodeError) + let value = self.encodeCallbackURL ? callbackURL.string.urlEncoded : callbackURL.string + queryString = queryString?.urlQueryByAppending(parameter: "redirect_uri", value: value, encode: self.encodeCallbackURLQuery, encodeError) } queryString = queryString?.urlQueryByAppending(parameter: "response_type", value: self.responseType, encodeError) queryString = queryString?.urlQueryByAppending(parameter: "scope", value: scope, encodeError) @@ -156,107 +162,108 @@ open class OAuth2Swift: OAuthSwift { self.authorizeURLHandler.handle(url) return self } else { - failure?(OAuthSwiftError.encodingError(urlString: urlString)) + completion(.failure(.encodingError(urlString: urlString))) } } else { let urlString = self.authorizeUrl.urlByAppending(query: queryErrorString) - failure?(OAuthSwiftError.encodingError(urlString: urlString)) + completion(.failure(.encodingError(urlString: urlString))) } self.cancel() // ie. remove the observer. return nil } - @discardableResult - open func authorize(withCallbackURL urlString: String, scope: String, state: String, parameters: Parameters = [:], headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: FailureHandler?) -> OAuthSwiftRequestHandle? { - guard let url = URL(string: urlString) else { - failure?(OAuthSwiftError.encodingError(urlString: urlString)) - return nil - } - return authorize(withCallbackURL: url, scope: scope, state: state, parameters: parameters, headers: headers, success: success, failure: failure) - } - - open func postOAuthAccessTokenWithRequestToken(byCode code: String, callbackURL: URL?, headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: FailureHandler?) -> OAuthSwiftRequestHandle? { + open func postOAuthAccessTokenWithRequestToken(byCode code: String, callbackURL: URL?, headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { var parameters = OAuthSwift.Parameters() parameters["client_id"] = self.consumerKey parameters["client_secret"] = self.consumerSecret parameters["code"] = code parameters["grant_type"] = "authorization_code" + + // PKCE - extra parameter + if let codeVerifier = self.codeVerifier { + parameters["code_verifier"] = codeVerifier + } + if let callbackURL = callbackURL { parameters["redirect_uri"] = callbackURL.absoluteString.safeStringByRemovingPercentEncoding } - return requestOAuthAccessToken(withParameters: parameters, headers: headers, success: success, failure: failure) + return requestOAuthAccessToken(withParameters: parameters, headers: headers, completionHandler: completion) } @discardableResult - open func renewAccessToken(withRefreshToken refreshToken: String, parameters: OAuthSwift.Parameters? = nil, headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: FailureHandler?) -> OAuthSwiftRequestHandle? { + open func renewAccessToken(withRefreshToken refreshToken: String, parameters: OAuthSwift.Parameters? = nil, headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { var parameters = parameters ?? OAuthSwift.Parameters() parameters["client_id"] = self.consumerKey parameters["client_secret"] = self.consumerSecret parameters["refresh_token"] = refreshToken parameters["grant_type"] = "refresh_token" - return requestOAuthAccessToken(withParameters: parameters, headers: headers, success: success, failure: failure) + return requestOAuthAccessToken(withParameters: parameters, headers: headers, completionHandler: completion) } - fileprivate func requestOAuthAccessToken(withParameters parameters: OAuthSwift.Parameters, headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: FailureHandler?) -> OAuthSwiftRequestHandle? { - let successHandler: OAuthSwiftHTTPRequest.SuccessHandler = { [weak self] response in + fileprivate func requestOAuthAccessToken(withParameters parameters: OAuthSwift.Parameters, headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { + + let completionHandler: OAuthSwiftHTTPRequest.CompletionHandler = { [weak self] result in guard let this = self else { - OAuthSwift.retainError(failure) + OAuthSwift.retainError(completion) return } - let responseJSON: Any? = try? response.jsonObject(options: .mutableContainers) + switch result { + case .success(let response): + let responseJSON: Any? = try? response.jsonObject(options: .mutableContainers) - let responseParameters: OAuthSwift.Parameters + let responseParameters: OAuthSwift.Parameters - if let jsonDico = responseJSON as? [String: Any] { - responseParameters = jsonDico - } else { - responseParameters = response.string?.parametersFromQueryString ?? [:] - } + if let jsonDico = responseJSON as? [String: Any] { + responseParameters = jsonDico + } else { + responseParameters = response.string?.parametersFromQueryString ?? [:] + } - guard let accessToken = responseParameters["access_token"] as? String else { - let message = NSLocalizedString("Could not get Access Token", comment: "Due to an error in the OAuth2 process, we couldn't get a valid token.") - failure?(OAuthSwiftError.serverError(message: message)) - return - } + guard let accessToken = responseParameters["access_token"] as? String else { + let message = NSLocalizedString("Could not get Access Token", comment: "Due to an error in the OAuth2 process, we couldn't get a valid token.") + completion(.failure(.serverError(message: message))) + return + } - if let refreshToken = responseParameters["refresh_token"] as? String { - this.client.credential.oauthRefreshToken = refreshToken.safeStringByRemovingPercentEncoding - } + if let refreshToken = responseParameters["refresh_token"] as? String { + this.client.credential.oauthRefreshToken = refreshToken.safeStringByRemovingPercentEncoding + } - if let expiresIn = responseParameters["expires_in"] as? String, let offset = Double(expiresIn) { - this.client.credential.oauthTokenExpiresAt = Date(timeInterval: offset, since: Date()) - } else if let expiresIn = responseParameters["expires_in"] as? Double { - this.client.credential.oauthTokenExpiresAt = Date(timeInterval: expiresIn, since: Date()) - } + if let expiresIn = responseParameters["expires_in"] as? String, let offset = Double(expiresIn) { + this.client.credential.oauthTokenExpiresAt = Date(timeInterval: offset, since: Date()) + } else if let expiresIn = responseParameters["expires_in"] as? Double { + this.client.credential.oauthTokenExpiresAt = Date(timeInterval: expiresIn, since: Date()) + } - this.client.credential.oauthToken = accessToken.safeStringByRemovingPercentEncoding - success(this.client.credential, response, responseParameters) + this.client.credential.oauthToken = accessToken.safeStringByRemovingPercentEncoding + completion(.success((this.client.credential, response, responseParameters))) + case .failure(let error): + completion(.failure(error)) + } } guard let accessTokenUrl = accessTokenUrl else { let message = NSLocalizedString("access token url not defined", comment: "access token url not defined with code type auth") - failure?(OAuthSwiftError.configurationError(message: message)) + completion(.failure(.configurationError(message: message))) return nil } if self.contentType == "multipart/form-data" { // Request new access token by disabling check on current token expiration. This is safe because the implementation wants the user to retrieve a new token. - return self.client.postMultiPartRequest(accessTokenUrl, method: .POST, parameters: parameters, headers: headers, checkTokenExpiration: false, success: successHandler, failure: failure) + return self.client.postMultiPartRequest(accessTokenUrl, method: .POST, parameters: parameters, headers: headers, checkTokenExpiration: false, completionHandler: completionHandler) } else { // special headers var finalHeaders: OAuthSwift.Headers? = headers if accessTokenBasicAuthentification { - let authentification = "\(self.consumerKey):\(self.consumerSecret)".data(using: String.Encoding.utf8) if let base64Encoded = authentification?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) { finalHeaders += ["Authorization": "Basic \(base64Encoded)"] as OAuthSwift.Headers } } - // Request new access token by disabling check on current token expiration. This is safe because the implementation wants the user to retrieve a new token. - return self.client.request(accessTokenUrl, method: .POST, parameters: parameters, headers: finalHeaders, checkTokenExpiration: false, success: successHandler, failure: failure) + return self.client.request(accessTokenUrl, method: .POST, parameters: parameters, headers: finalHeaders, checkTokenExpiration: false, completionHandler: completionHandler) } } @@ -276,33 +283,47 @@ open class OAuth2Swift: OAuthSwift { - parameter failure: The failure block. Takes the error as parameter. */ @discardableResult - open func startAuthorizedRequest(_ url: String, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters, headers: OAuthSwift.Headers? = nil, renewHeaders: OAuthSwift.Headers? = nil, body: Data? = nil, onTokenRenewal: TokenRenewedHandler? = nil, success: @escaping OAuthSwiftHTTPRequest.SuccessHandler, failure: @escaping OAuthSwiftHTTPRequest.FailureHandler) -> OAuthSwiftRequestHandle? { - // build request - return self.client.request(url, method: method, parameters: parameters, headers: headers, body: body, success: success) { (error) in - switch error { - - case OAuthSwiftError.tokenExpired: - _ = self.renewAccessToken(withRefreshToken: self.client.credential.oauthRefreshToken, headers: renewHeaders ?? headers, success: { (credential, _, _) in - // Ommit response parameters so they don't override the original ones - // We have successfully renewed the access token. - - // If provided, fire the onRenewal closure - if let renewalCallBack = onTokenRenewal { - renewalCallBack(credential) + open func startAuthorizedRequest(_ url: URLConvertible, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters, headers: OAuthSwift.Headers? = nil, renewHeaders: OAuthSwift.Headers? = nil, body: Data? = nil, onTokenRenewal: TokenRenewedHandler? = nil, completionHandler completion: @escaping OAuthSwiftHTTPRequest.CompletionHandler) -> OAuthSwiftRequestHandle? { + + let completionHandler: OAuthSwiftHTTPRequest.CompletionHandler = { result in + switch result { + case .success: + completion(result) + case .failure(let error): // map/recovery error + switch error { + case OAuthSwiftError.tokenExpired: + let renewCompletionHandler: TokenCompletionHandler = { result in + switch result { + case .success(let credential, _, _): + // Ommit response parameters so they don't override the original ones + // We have successfully renewed the access token. + + // If provided, fire the onRenewal closure + if let renewalCallBack = onTokenRenewal { + renewalCallBack(.success(credential)) + } + + // Reauthorize the request again, this time with a brand new access token ready to be used. + _ = self.startAuthorizedRequest(url, method: method, parameters: parameters, headers: headers, body: body, onTokenRenewal: onTokenRenewal, completionHandler: completion) + case .failure(let error): + completion(.failure(error)) + } } - // Reauthorize the request again, this time with a brand new access token ready to be used. - _ = self.startAuthorizedRequest(url, method: method, parameters: parameters, headers: headers, body: body, onTokenRenewal: onTokenRenewal, success: success, failure: failure) - }, failure: failure) - default: - failure(error) + _ = self.renewAccessToken(withRefreshToken: self.client.credential.oauthRefreshToken, headers: renewHeaders ?? headers, completionHandler: renewCompletionHandler) + default: + completion(.failure(error)) + } } } + + // build request + return self.client.request(url, method: method, parameters: parameters, headers: headers, body: body, completionHandler: completionHandler) } - // OAuth 2.0 Specification: https://tools.ietf.org/html/draft-ietf-oauth-v2-13#section-4.3 + // OAuth 2.0 Specification: https://tools.ietf.org/html/draft-ietf-oauth-v2-13#section-4.3 @discardableResult - open func authorize(username: String, password: String, scope: String?, headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: @escaping OAuthSwiftHTTPRequest.FailureHandler) -> OAuthSwiftRequestHandle? { + open func authorize(username: String, password: String, scope: String?, headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { var parameters = OAuthSwift.Parameters() parameters["client_id"] = self.consumerKey @@ -318,13 +339,12 @@ open class OAuth2Swift: OAuthSwift { return requestOAuthAccessToken( withParameters: parameters, headers: headers, - success: success, - failure: failure + completionHandler: completion ) } @discardableResult - open func authorize(deviceToken deviceCode: String, grantType: String = "http://oauth.net/grant_type/device/1.0", success: @escaping TokenSuccessHandler, failure: @escaping OAuthSwiftHTTPRequest.FailureHandler) -> OAuthSwiftRequestHandle? { + open func authorize(deviceToken deviceCode: String, grantType: String = "http://oauth.net/grant_type/device/1.0", completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { var parameters = OAuthSwift.Parameters() parameters["client_id"] = self.consumerKey parameters["client_secret"] = self.consumerSecret @@ -333,9 +353,25 @@ open class OAuth2Swift: OAuthSwift { return requestOAuthAccessToken( withParameters: parameters, - success: success, - failure: failure + completionHandler: completion ) } + /// use RFC7636 PKCE credentials - convenience method + @discardableResult + open func authorize(withCallbackURL url: URLConvertible, scope: String, state: String, codeChallenge: String, codeChallengeMethod: String = "S256", codeVerifier: String, parameters: Parameters = [:], headers: OAuthSwift.Headers? = nil, completionHandler completion: @escaping TokenCompletionHandler) -> OAuthSwiftRequestHandle? { + guard let callbackURL = url.url else { + completion(.failure(.encodingError(urlString: url.string))) + return nil + } + + // remember code_verifier + self.codeVerifier = codeVerifier + // PKCE - extra parameter + var pkceParameters = Parameters() + pkceParameters["code_challenge"] = codeChallenge + pkceParameters["code_challenge_method"] = codeChallengeMethod + + return authorize(withCallbackURL: callbackURL, scope: scope, state: state, parameters: parameters + pkceParameters, headers: headers, completionHandler: completion) + } } diff --git a/Pods/OAuthSwift/Sources/OAuthSwift.swift b/Pods/OAuthSwift/Sources/OAuthSwift.swift index b0c379aff3..e514a14df7 100644 --- a/Pods/OAuthSwift/Sources/OAuthSwift.swift +++ b/Pods/OAuthSwift/Sources/OAuthSwift.swift @@ -29,14 +29,12 @@ open class OAuthSwift: NSObject, OAuthSwiftRequestHandle { // MARK: callback notification struct CallbackNotification { - @available(*, deprecated: 0.5, message: "Use Notification.Name.OAuthSwiftHandleCallbackURL") - static let notificationName = Notification.Name(rawValue: "OAuthSwiftCallbackNotificationName") static let optionsURLKey = "OAuthSwiftCallbackNotificationOptionsURLKey" } /// Handle callback url which contains now token information open class func handle(url: URL) { - let notification = Notification(name: NSNotification.Name.OAuthSwiftHandleCallbackURL, object: nil, + let notification = Notification(name: OAuthSwift.didHandleCallbackURL, object: nil, userInfo: [CallbackNotification.optionsURLKey: url]) notificationCenter.post(notification) } @@ -50,8 +48,11 @@ open class OAuthSwift: NSObject, OAuthSwiftRequestHandle { } func observeCallback(_ block: @escaping (_ url: URL) -> Void) { - self.observer = OAuthSwift.notificationCenter.addObserver(forName: NSNotification.Name.OAuthSwiftHandleCallbackURL, object: nil, queue: OperationQueue.main) { [weak self] notification in - self?.removeCallbackNotificationObserver() + self.observer = OAuthSwift.notificationCenter.addObserver( + forName: OAuthSwift.didHandleCallbackURL, + object: nil, + queue: OperationQueue.main) { [weak self] notification in + self?.removeCallbackNotificationObserver() if let urlFromUserInfo = notification.userInfo?[CallbackNotification.optionsURLKey] as? URL { block(urlFromUserInfo) @@ -104,7 +105,6 @@ extension OAuthSwift { public typealias ConfigParameters = [String: String] /// MARK: callback alias public typealias TokenSuccess = (credential: OAuthSwiftCredential, response: OAuthSwiftResponse?, parameters: Parameters) - public typealias TokenSuccessHandler = (_ credential: OAuthSwiftCredential, _ response: OAuthSwiftResponse?, _ parameters: Parameters) -> Void - public typealias FailureHandler = (_ error: OAuthSwiftError) -> Void - public typealias TokenRenewedHandler = (_ credential: OAuthSwiftCredential) -> Void + public typealias TokenCompletionHandler = (Result) -> Void + public typealias TokenRenewedHandler = (Result) -> Void } diff --git a/Pods/OAuthSwift/Sources/OAuthSwiftClient.swift b/Pods/OAuthSwift/Sources/OAuthSwiftClient.swift index 215ca639a1..de800bece8 100644 --- a/Pods/OAuthSwift/Sources/OAuthSwiftClient.swift +++ b/Pods/OAuthSwift/Sources/OAuthSwiftClient.swift @@ -45,45 +45,45 @@ open class OAuthSwiftClient: NSObject { // MARK: client methods @discardableResult - open func get(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .GET, parameters: parameters, headers: headers, success: success, failure: failure) + open func get(_ url: URLConvertible, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { + return self.request(url, method: .GET, parameters: parameters, headers: headers, completionHandler: completion) } @discardableResult - open func post(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .POST, parameters: parameters, headers: headers, body: body, success: success, failure: failure) + open func post(_ url: URLConvertible, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { + return self.request(url, method: .POST, parameters: parameters, headers: headers, body: body, completionHandler: completion) } @discardableResult - open func put(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .PUT, parameters: parameters, headers: headers, body: body, success: success, failure: failure) + open func put(_ url: URLConvertible, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { + return self.request(url, method: .PUT, parameters: parameters, headers: headers, body: body, completionHandler: completion) } @discardableResult - open func delete(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .DELETE, parameters: parameters, headers: headers, success: success, failure: failure) + open func delete(_ url: URLConvertible, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { + return self.request(url, method: .DELETE, parameters: parameters, headers: headers, completionHandler: completion) } @discardableResult - open func patch(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .PATCH, parameters: parameters, headers: headers, success: success, failure: failure) + open func patch(_ url: URLConvertible, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { + return self.request(url, method: .PATCH, parameters: parameters, headers: headers, completionHandler: completion) } @discardableResult - open func request(_ urlString: String, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, checkTokenExpiration: Bool = true, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { + open func request(_ url: URLConvertible, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, checkTokenExpiration: Bool = true, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { if checkTokenExpiration && self.credential.isTokenExpired() { - failure?(OAuthSwiftError.tokenExpired(error: nil)) + completion?(.failure(.tokenExpired(error: nil))) return nil } - guard URL(string: urlString) != nil else { - failure?(OAuthSwiftError.encodingError(urlString: urlString)) + guard url.url != nil else { + completion?(.failure(.encodingError(urlString: url.string))) return nil } - if let request = makeRequest(urlString, method: method, parameters: parameters, headers: headers, body: body) { - request.start(success: success, failure: failure) + if let request = makeRequest(url, method: method, parameters: parameters, headers: headers, body: body) { + request.start(completionHandler: completion) return request } return nil @@ -95,9 +95,9 @@ open class OAuthSwiftClient: NSObject { return request } - open func makeRequest(_ urlString: String, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil) -> OAuthSwiftHTTPRequest? { - guard let url = URL(string: urlString) else { - return nil + open func makeRequest(_ url: URLConvertible, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil) -> OAuthSwiftHTTPRequest? { + guard let url = url.url else { + return nil // XXX failure not thrown here } let request = OAuthSwiftHTTPRequest(url: url, method: method, parameters: parameters, paramsLocation: self.paramsLocation, httpBody: body, headers: headers ?? [:], sessionFactory: self.sessionFactory) @@ -106,11 +106,11 @@ open class OAuthSwiftClient: NSObject { } @discardableResult - public func postImage(_ urlString: String, parameters: OAuthSwift.Parameters, image: Data, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.multiPartRequest(url: urlString, method: .POST, parameters: parameters, image: image, success: success, failure: failure) + public func postImage(_ url: URLConvertible, parameters: OAuthSwift.Parameters, image: Data, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { + return self.multiPartRequest(url: url, method: .POST, parameters: parameters, image: image, completionHandler: completion) } - open func makeMultiPartRequest(_ urlString: String, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters = [:], multiparts: [OAuthSwiftMultipartData] = [], headers: OAuthSwift.Headers? = nil) -> OAuthSwiftHTTPRequest? { + open func makeMultiPartRequest(_ url: URLConvertible, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters = [:], multiparts: [OAuthSwiftMultipartData] = [], headers: OAuthSwift.Headers? = nil) -> OAuthSwiftHTTPRequest? { let boundary = "AS-boundary-\(arc4random())-\(arc4random())" let type = "multipart/form-data; boundary=\(boundary)" let body = self.multiDataFromObject(parameters, multiparts: multiparts, boundary: boundary) @@ -118,18 +118,16 @@ open class OAuthSwiftClient: NSObject { var finalHeaders = [kHTTPHeaderContentType: type] finalHeaders += headers ?? [:] - return makeRequest(urlString, method: method, parameters: parameters, headers: finalHeaders, body: body) + return makeRequest(url, method: method, parameters: parameters, headers: finalHeaders, body: body) } - func multiPartRequest(url: String, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters, image: Data, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { + func multiPartRequest(url: URLConvertible, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters, image: Data, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { let multiparts = [ OAuthSwiftMultipartData(name: "media", data: image, fileName: "file", mimeType: "image/jpeg") ] - - if let request = makeMultiPartRequest(url, method: method, parameters: parameters, multiparts: multiparts) { - request.start(success: success, failure: failure) - return request + guard let request = makeMultiPartRequest(url, method: method, parameters: parameters, multiparts: multiparts) else { + return nil } - - return nil + request.start(completionHandler: completion) + return request } open func multiPartBody(from inputParameters: OAuthSwift.Parameters, boundary: String) -> Data { @@ -150,15 +148,15 @@ open class OAuthSwiftClient: NSObject { } @discardableResult - open func postMultiPartRequest(_ url: String, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters, headers: OAuthSwift.Headers? = nil, multiparts: [OAuthSwiftMultipartData] = [], checkTokenExpiration: Bool = true, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.FailureHandler?) -> OAuthSwiftRequestHandle? { + open func postMultiPartRequest(_ url: URLConvertible, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters, headers: OAuthSwift.Headers? = nil, multiparts: [OAuthSwiftMultipartData] = [], checkTokenExpiration: Bool = true, completionHandler completion: OAuthSwiftHTTPRequest.CompletionHandler?) -> OAuthSwiftRequestHandle? { if checkTokenExpiration && self.credential.isTokenExpired() { - failure?(OAuthSwiftError.tokenExpired(error: nil)) + completion?(.failure(.tokenExpired(error: nil))) return nil } if let request = makeMultiPartRequest(url, method: method, parameters: parameters, multiparts: multiparts, headers: headers) { - request.start(success: success, failure: failure) + request.start(completionHandler: completion) return request } return nil diff --git a/Pods/OAuthSwift/Sources/OAuthSwiftError.swift b/Pods/OAuthSwift/Sources/OAuthSwiftError.swift index 5e0ba2512b..f5518a2fc5 100644 --- a/Pods/OAuthSwift/Sources/OAuthSwiftError.swift +++ b/Pods/OAuthSwift/Sources/OAuthSwiftError.swift @@ -13,8 +13,6 @@ public enum OAuthSwiftError: Error { /// Configuration problem with oauth provider. case configurationError(message: String) - /// The provided token is expired, retrieve new token by using the refresh token - case tokenExpired(error: Error?) /// State missing from request (you can set allowMissingStateCheck = true to ignore) case missingState /// Returned state value is wrong @@ -23,18 +21,26 @@ public enum OAuthSwiftError: Error { case serverError(message: String) /// Failed to create URL \(urlString) not convertible to URL, please encode case encodingError(urlString: String) - case authorizationPending /// Failed to create request with \(urlString) case requestCreation(message: String) /// Authentification failed. No token case missingToken /// Please retain OAuthSwift object or handle case retain - /// Request error - case requestError(error: Error, request: URLRequest) /// Request cancelled case cancelled + /// Generic request error + case requestError(error: Error, request: URLRequest) + /// The provided token is expired, retrieve new token by using the refresh token + case tokenExpired(error: Error?) + /// If the user has not either allowed or denied the request yet, the authorization server will return the authorization_pending error. + case authorizationPending(error: Error, request: URLRequest) + /// If the device is polling too frequently, the authorization server will return the slow_down error. + case slowDown(error: Error, request: URLRequest) + /// If the user denies the request. + case accessDenied(error: Error, request: URLRequest) + public static let Domain = "OAuthSwiftError" public static let ResponseDataKey = "OAuthSwiftError.response.data" public static let ResponseKey = "OAuthSwiftError.response" @@ -52,6 +58,8 @@ public enum OAuthSwiftError: Error { case retain = -10 case requestError = -11 case cancelled = -12 + case slowDown = -13 + case accessDenied = -14 } fileprivate var code: Code { @@ -62,12 +70,14 @@ public enum OAuthSwiftError: Error { case .stateNotEqual: return Code.stateNotEqual case .serverError: return Code.serverError case .encodingError: return Code.encodingError - case .authorizationPending: return Code.authorizationPending + case .cancelled : return Code.cancelled case .requestCreation: return Code.requestCreation case .missingToken: return Code.missingToken case .retain: return Code.retain case .requestError: return Code.requestError - case .cancelled : return Code.cancelled + case .authorizationPending: return Code.authorizationPending + case .slowDown: return Code.slowDown + case .accessDenied: return Code.accessDenied } } @@ -75,6 +85,9 @@ public enum OAuthSwiftError: Error { switch self { case .tokenExpired(let e): return e case .requestError(let e, _): return e + case .authorizationPending(let e, _): return e + case .slowDown(let e, _): return e + case .accessDenied(let e, _): return e default: return nil } } @@ -100,24 +113,29 @@ extension OAuthSwiftError: CustomStringConvertible { case .stateNotEqual(let s, let e): return "stateNotEqual[\(s)<>\(e)]" case .serverError(let m): return "serverError[\(m)]" case .encodingError(let urlString): return "encodingError[\(urlString)]" - case .authorizationPending: return "authorizationPending" case .requestCreation(let m): return "requestCreation[\(m)]" case .missingToken: return "missingToken" case .retain: return "retain" case .requestError(let e, _): return "requestError[\(e)]" + case .slowDown : return "slowDown" + case .accessDenied : return "accessDenied" + case .authorizationPending: return "authorizationPending" case .cancelled : return "cancelled" } } } extension OAuthSwift { - - static func retainError(_ failureHandler: FailureHandler?) { + static func retainError(_ completionHandler: OAuthSwiftHTTPRequest.CompletionHandler?) { #if !OAUTH_NO_RETAIN_ERROR - failureHandler?(OAuthSwiftError.retain) + completionHandler?(.failure(OAuthSwiftError.retain)) + #endif + } + static func retainError(_ completionHandler: TokenCompletionHandler?) { + #if !OAUTH_NO_RETAIN_ERROR + completionHandler?(.failure(OAuthSwiftError.retain)) #endif } - } // MARK: NSError @@ -136,6 +154,9 @@ extension OAuthSwiftError: CustomNSError { case .tokenExpired(let e): return ["error": e as Any] case .requestError(let e, let request): return ["error": e, "request": request] + case .authorizationPending(let e, let request): return ["error": e, "request": request] + case .slowDown(let e, let request): return ["error": e, "request": request] + case .accessDenied(let e, let request): return ["error": e, "request": request] case .encodingError(let urlString): return ["url": urlString] diff --git a/Pods/OAuthSwift/Sources/OAuthSwiftHTTPRequest.swift b/Pods/OAuthSwift/Sources/OAuthSwiftHTTPRequest.swift index 417563cea8..98031811a7 100644 --- a/Pods/OAuthSwift/Sources/OAuthSwiftHTTPRequest.swift +++ b/Pods/OAuthSwift/Sources/OAuthSwiftHTTPRequest.swift @@ -12,8 +12,7 @@ let kHTTPHeaderContentType = "Content-Type" open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { - public typealias SuccessHandler = (_ response: OAuthSwiftResponse) -> Void - public typealias FailureHandler = (_ error: OAuthSwiftError) -> Void + public typealias CompletionHandler = (_ result: Result) -> Void /// HTTP request method /// https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods @@ -38,7 +37,7 @@ open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { fileprivate var cancelRequested = false - open static var executionContext: (@escaping () -> Void) -> Void = { block in + public static var executionContext: (@escaping () -> Void) -> Void = { block in return DispatchQueue.main.async(execute: block) } @@ -57,16 +56,13 @@ open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { } /// START request - func start(success: SuccessHandler?, failure: FailureHandler?) { + func start(completionHandler completion: CompletionHandler?) { guard request == nil else { return } // Don't start the same request twice! - let successHandler = success - let failureHandler = failure - do { self.request = try self.makeRequest() } catch let error as NSError { - failureHandler?(OAuthSwiftError.requestCreation(message: error.localizedDescription)) + completion?(.failure(.requestCreation(message: error.localizedDescription))) self.request = nil return } @@ -84,8 +80,7 @@ open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { if self.config.sessionFactory.useDataTaskClosure { let completionHandler: (Data?, URLResponse?, Error?) -> Void = { data, resp, error in - OAuthSwiftHTTPRequest.completionHandler(successHandler: success, - failureHandler: failure, + OAuthSwiftHTTPRequest.completionHandler(completionHandler: completion, request: usedRequest, data: data, resp: resp, @@ -108,7 +103,7 @@ open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { } /// Function called when receiving data from server. - public static func completionHandler(successHandler: SuccessHandler?, failureHandler: FailureHandler?, request: URLRequest, data: Data?, resp: URLResponse?, error: Error?) { + public static func completionHandler(completionHandler completion: CompletionHandler?, request: URLRequest, data: Data?, resp: URLResponse?, error: Error?) { #if os(iOS) #if !OAUTH_APP_EXTENSIONS UIApplication.shared.isNetworkActivityIndicatorVisible = false @@ -125,7 +120,7 @@ open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { oauthError = .tokenExpired(error: error) } - failureHandler?(oauthError) + completion?(.failure(oauthError)) return } @@ -143,24 +138,25 @@ open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { userInfo["Response-Headers"] = response.allHeaderFields } let error = NSError(domain: OAuthSwiftError.Domain, code: badRequestCode, userInfo: userInfo) - failureHandler?(.requestError(error:error, request: request)) + completion?(.failure(.requestError(error:error, request: request))) return } // MARK: failure code > 400 guard response.statusCode < 400 else { - var localizedDescription = String() + var localizedDescription = "" let responseString = String(data: responseData, encoding: OAuthSwiftDataEncoding) // Try to get error information from data as json let responseJSON = try? JSONSerialization.jsonObject(with: responseData, options: .mutableContainers) + var errorCode: String? if let responseJSON = responseJSON as? OAuthSwift.Parameters { - if let code = responseJSON["error"] as? String, let description = responseJSON["error_description"] as? String { - - localizedDescription = NSLocalizedString("\(code) \(description)", comment: "") - if code == "authorization_pending" { - failureHandler?(.authorizationPending) - return + if let code = responseJSON["error"] as? String { + errorCode = code + if let description = responseJSON["error_description"] as? String { + localizedDescription = NSLocalizedString("\(code) \(description)", comment: "") + } else { + localizedDescription = NSLocalizedString("\(code)", comment: "") } } } else { @@ -180,17 +176,23 @@ open class OAuthSwiftHTTPRequest: NSObject, OAuthSwiftRequestHandle { userInfo[NSURLErrorFailingURLErrorKey] = urlString } - let error = NSError(domain: NSURLErrorDomain, code: response.statusCode, userInfo: userInfo) + let error = NSError(domain: OAuthSwiftError.Domain, code: response.statusCode, userInfo: userInfo) if error.isExpiredToken { - failureHandler?(.tokenExpired(error: error)) + completion?(.failure(.tokenExpired(error: error))) + } else if errorCode == "authorization_pending" { + completion?(.failure(.authorizationPending(error: error, request: request))) + } else if errorCode == "slow_down" { + completion?(.failure(.slowDown(error: error, request: request))) + } else if errorCode == "access_denied" { + completion?(.failure(.accessDenied(error: error, request: request))) } else { - failureHandler?(.requestError(error: error, request: request)) + completion?(.failure(.requestError(error: error, request: request))) } return } // MARK: success - successHandler?(OAuthSwiftResponse(data: responseData, response: response, request: request)) + completion?(.success(OAuthSwiftResponse(data: responseData, response: response, request: request))) } open func cancel() { diff --git a/Pods/OAuthSwift/Sources/OAuthSwiftMultipartData.swift b/Pods/OAuthSwift/Sources/OAuthSwiftMultipartData.swift index 30d35e1698..f82ce4cbe7 100644 --- a/Pods/OAuthSwift/Sources/OAuthSwiftMultipartData.swift +++ b/Pods/OAuthSwift/Sources/OAuthSwiftMultipartData.swift @@ -29,9 +29,9 @@ extension Data { public mutating func append(_ multipartData: OAuthSwiftMultipartData, encoding: String.Encoding, separatorData: Data) { var filenameClause = "" if let filename = multipartData.fileName { - filenameClause = " filename=\"\(filename)\"" + filenameClause = "; filename=\"\(filename)\"" } - let contentDispositionString = "Content-Disposition: form-data; name=\"\(multipartData.name)\";\(filenameClause)\r\n" + let contentDispositionString = "Content-Disposition: form-data; name=\"\(multipartData.name)\"\(filenameClause)\r\n" let contentDispositionData = contentDispositionString.data(using: encoding)! self.append(contentDispositionData) diff --git a/Pods/OAuthSwift/Sources/OAuthSwiftURLHandlerType.swift b/Pods/OAuthSwift/Sources/OAuthSwiftURLHandlerType.swift index d5b5426e89..82adc390c9 100644 --- a/Pods/OAuthSwift/Sources/OAuthSwiftURLHandlerType.swift +++ b/Pods/OAuthSwift/Sources/OAuthSwiftURLHandlerType.swift @@ -41,6 +41,63 @@ open class OAuthSwiftOpenURLExternally: OAuthSwiftURLHandlerType { // MARK: Open SFSafariViewController #if os(iOS) import SafariServices +#if canImport(AuthenticationServices) +import AuthenticationServices +#endif + + @available(iOS 12.0, *) + open class ASWebAuthenticationURLHandler: OAuthSwiftURLHandlerType { + var webAuthSession: ASWebAuthenticationSession! + let callbackUrlScheme: String + + init(callbackUrlScheme: String) { + self.callbackUrlScheme = callbackUrlScheme + } + + public func handle(_ url: URL) { + webAuthSession = ASWebAuthenticationSession(url: url, + callbackURLScheme: callbackUrlScheme, + completionHandler: { callback, error in + guard error == nil, let successURL = callback else { + let msg = error?.localizedDescription.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) + let urlString = "\(self.callbackUrlScheme)?error=\(msg ?? "UNKNOWN")" + let url = URL(string: urlString)! + UIApplication.shared.open(url, options: [:], completionHandler: nil) + return + } + UIApplication.shared.open(successURL, options: [:], completionHandler: nil) + }) + + _ = webAuthSession.start() + } + } + + @available(iOS 11.0, *) + open class SFAuthenticationURLHandler: OAuthSwiftURLHandlerType { + var webAuthSession: SFAuthenticationSession! + let callbackUrlScheme: String + + init(callbackUrlScheme: String) { + self.callbackUrlScheme = callbackUrlScheme + } + + public func handle(_ url: URL) { + webAuthSession = SFAuthenticationSession(url: url, + callbackURLScheme: callbackUrlScheme, + completionHandler: { callback, error in + guard error == nil, let successURL = callback else { + let msg = error?.localizedDescription.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) + let urlString = "\(self.callbackUrlScheme)?error=\(msg ?? "UNKNOWN")" + let url = URL(string: urlString)! + UIApplication.shared.open(url, options: [:], completionHandler: nil) + return + } + UIApplication.shared.open(successURL, options: [:], completionHandler: nil) + }) + + _ = webAuthSession.start() + } + } @available(iOS 9.0, *) open class SafariURLHandler: NSObject, OAuthSwiftURLHandlerType, SFSafariViewControllerDelegate { @@ -102,7 +159,7 @@ import SafariServices let key = UUID().uuidString observers[key] = OAuthSwift.notificationCenter.addObserver( - forName: NSNotification.Name.OAuthSwiftHandleCallbackURL, + forName: OAuthSwift.didHandleCallbackURL, object: nil, queue: OperationQueue.main, using: { [weak self] _ in @@ -165,3 +222,21 @@ open class ExtensionContextURLHandler: OAuthSwiftURLHandlerType { extensionContext.open(url, completionHandler: nil) } } + +// MARK: Proxy +open class OAuthSwiftURLHandlerProxy: OAuthSwiftURLHandlerType { + weak var proxiable: OAuthSwiftURLHandlerType? + public init(_ proxiable: OAuthSwiftURLHandlerType) { + self.proxiable = proxiable + } + open func handle(_ url: URL) { + proxiable?.handle(url) + } +} + +extension OAuthSwiftURLHandlerType { + + public func weak() -> OAuthSwiftURLHandlerType { + return OAuthSwiftURLHandlerProxy(self) + } +} diff --git a/Pods/OAuthSwift/Sources/OAuthWebViewController.swift b/Pods/OAuthSwift/Sources/OAuthWebViewController.swift index ae2a6defa4..6244cdef67 100644 --- a/Pods/OAuthSwift/Sources/OAuthWebViewController.swift +++ b/Pods/OAuthSwift/Sources/OAuthWebViewController.swift @@ -106,21 +106,21 @@ open class OAuthWebViewController: OAuthViewController, OAuthSwiftURLHandlerType if let p = self.parent { // default behaviour if this controller affected as child controller switch self.present { case .asSheet: - p.presentViewControllerAsSheet(self) + p.presentAsSheet(self) case .asModalWindow: - p.presentViewControllerAsModalWindow(self) + p.presentAsModalWindow(self) // FIXME: if we present as window, window close must detected and oauthswift.cancel() must be called... case .asPopover(let positioningRect, let positioningView, let preferredEdge, let behavior): - p.presentViewController(self, asPopoverRelativeTo: positioningRect, of: positioningView, preferredEdge: preferredEdge, behavior: behavior) + p.present(self, asPopoverRelativeTo: positioningRect, of: positioningView, preferredEdge: preferredEdge, behavior: behavior) case .transitionFrom(let fromViewController, let options): let completion: () -> Void = { /*[unowned self] in*/ //self.delegate?.oauthWebViewControllerDidPresent() } p.transition(from: fromViewController, to: self, options: options, completionHandler: completion) case .animator(let animator): - p.presentViewController(self, animator: animator) + p.present(self, animator: animator) case .segue(let segueIdentifier): - p.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: segueIdentifier), sender: self) // The segue must display self.view + p.performSegue(withIdentifier: segueIdentifier, sender: self) // The segue must display self.view } } else if let window = self.view.window { window.makeKeyAndOrderFront(nil) @@ -150,10 +150,10 @@ open class OAuthWebViewController: OAuthViewController, OAuthSwiftURLHandlerType #elseif os(watchOS) self.dismiss() #elseif os(OSX) - if self.presenting != nil { + if self.presentingViewController != nil { self.dismiss(nil) if self.parent != nil { - self.removeFromParentViewController() + self.removeFromParent() } } else if let window = self.view.window { window.performClose(nil) diff --git a/Pods/OAuthSwift/Sources/Objc.swift b/Pods/OAuthSwift/Sources/Objc.swift deleted file mode 100644 index 637bf826d8..0000000000 --- a/Pods/OAuthSwift/Sources/Objc.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// Objc.swift -// OAuthSwift -// -// Created by phimage on 05/11/16. -// Copyright © 2016 Dongri Jin. All rights reserved. -// - -import Foundation - -extension OAuthSwift { - // swiftlint:disable:next type_name - public typealias Obj_FailureHandler = (_ error: Error) -> Void -} - -extension OAuth1Swift { - - open func objc_authorize(withCallbackURL urlString: String, success: @escaping TokenSuccessHandler, failure: Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - guard let url = URL(string: urlString) else { - failure?(OAuthSwiftError.encodingError(urlString: urlString)) - return nil - } - return authorize(withCallbackURL: url, success: success, failure: failure) - } - -} - -extension OAuth2Swift { - - open func objc_authorize(withCallbackURL urlString: String, scope: String, state: String, parameters: Parameters = [:], headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - guard let url = URL(string: urlString) else { - failure?(OAuthSwiftError.encodingError(urlString: urlString)) - return nil - } - return authorize(withCallbackURL: url, scope: scope, state: state, parameters: parameters, headers: headers, success: success, failure: failure) - } - - open func objc_renewAccessToken(withRefreshToken refreshToken: String, headers: OAuthSwift.Headers? = nil, success: @escaping TokenSuccessHandler, failure: Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - return renewAccessToken(withRefreshToken: refreshToken, headers: headers, success: success, failure: failure) - } - -} - -extension OAuthSwiftHTTPRequest { - // swiftlint:disable:next type_name - public typealias Obj_FailureHandler = (_ error: Error) -> Void -} - -extension OAuthSwiftClient { - - open func objc_request(_ urlString: String, method: OAuthSwiftHTTPRequest.Method, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, checkTokenExpiration: Bool = true, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - return request(urlString, method: method, parameters: parameters, headers: headers, body: body, checkTokenExpiration: checkTokenExpiration, success: success, failure: failure) - } - - open func get(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .GET, parameters: parameters, headers: headers, success: success, failure: failure) - } - - open func post(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .POST, parameters: parameters, headers: headers, body: body, success: success, failure: failure) - } - - open func put(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, body: Data? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .PUT, parameters: parameters, headers: headers, body: body, success: success, failure: failure) - } - - open func delete(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .DELETE, parameters: parameters, headers: headers, success: success, failure: failure) - } - - open func patch(_ urlString: String, parameters: OAuthSwift.Parameters = [:], headers: OAuthSwift.Headers? = nil, success: OAuthSwiftHTTPRequest.SuccessHandler?, failure: OAuthSwiftHTTPRequest.Obj_FailureHandler?) -> OAuthSwiftRequestHandle? { - return self.request(urlString, method: .PATCH, parameters: parameters, headers: headers, success: success, failure: failure) - } - -} diff --git a/Pods/OAuthSwift/Sources/String+OAuthSwift.swift b/Pods/OAuthSwift/Sources/String+OAuthSwift.swift index 0f0c32a8dc..fc5bf84538 100755 --- a/Pods/OAuthSwift/Sources/String+OAuthSwift.swift +++ b/Pods/OAuthSwift/Sources/String+OAuthSwift.swift @@ -116,7 +116,7 @@ extension String.Encoding { var charset: String { let charset = CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.rawValue)) - // swiftlint:disable:next force_cast + // swiftlint:disable:next force_cast superfluous_disable_command return charset! as String } diff --git a/Pods/OAuthSwift/Sources/UIApplication+OAuthSwift.swift b/Pods/OAuthSwift/Sources/UIApplication+OAuthSwift.swift index 523f84ca84..337d00a419 100644 --- a/Pods/OAuthSwift/Sources/UIApplication+OAuthSwift.swift +++ b/Pods/OAuthSwift/Sources/UIApplication+OAuthSwift.swift @@ -10,7 +10,7 @@ import UIKit extension UIApplication { - static var topViewController: UIViewController? { + @nonobjc static var topViewController: UIViewController? { #if !OAUTH_APP_EXTENSIONS return UIApplication.shared.topViewController #else diff --git a/Pods/OAuthSwift/Sources/URLConvertible.swift b/Pods/OAuthSwift/Sources/URLConvertible.swift new file mode 100644 index 0000000000..5eeed963ca --- /dev/null +++ b/Pods/OAuthSwift/Sources/URLConvertible.swift @@ -0,0 +1,41 @@ +// +// URLConvertible.swift +// OAuthSwift +// +// Created by Arman Arutyunov on 07/02/2019. +// Copyright © 2019 Dongri Jin. All rights reserved. +// + +import Foundation + +/// Either a String representing URL or a URL itself +public protocol URLConvertible { + var string: String { get } + var url: URL? { get } +} + +extension String: URLConvertible { + public var string: String { + return self + } + + public var url: URL? { + return URL(string: self) + } +} + +extension URL: URLConvertible { + public var string: String { + return absoluteString + } + + public var url: URL? { + return self + } +} + +extension URLConvertible { + public var encodedURL: URL { + return URL(string: self.string.urlEncoded)! + } +} diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index ddbe248763..91be87bed1 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -6,1451 +6,1516 @@ objectVersion = 46; objects = { -/* Begin PBXAggregateTarget section */ - 0562504F6D4CBC4932D70CDDC0D2AFD6 /* FirebaseAnalytics */ = { - isa = PBXAggregateTarget; - buildConfigurationList = B5EAF43E082335B602387F9DE7B49726 /* Build configuration list for PBXAggregateTarget "FirebaseAnalytics" */; - buildPhases = ( - ); - dependencies = ( - 2B825177F3388CCFAEFB8B5D616CBB3D /* PBXTargetDependency */, - 7661289168D6F4565D9A7C5773266D23 /* PBXTargetDependency */, - 9E947511A2E5CEBFE93049F430B60869 /* PBXTargetDependency */, - 23689583680A68FD3E74F2453C4BBE0B /* PBXTargetDependency */, - 256B8EFC3A0BBF32188C6FE0735A7956 /* PBXTargetDependency */, - ); - name = FirebaseAnalytics; - productName = FirebaseAnalytics; - }; - 55E1FDE52DD9C139D679CC408529CF94 /* SwiftLint */ = { - isa = PBXAggregateTarget; - buildConfigurationList = E7739B80E3C263DFCA211CF66332F452 /* Build configuration list for PBXAggregateTarget "SwiftLint" */; - buildPhases = ( - ); - dependencies = ( - ); - name = SwiftLint; - productName = SwiftLint; - }; - 7CE49DE8B659FE84C6885E456503139D /* Fabric */ = { - isa = PBXAggregateTarget; - buildConfigurationList = B72C7C34D80C6A2A86DFE1EE43D6D4FA /* Build configuration list for PBXAggregateTarget "Fabric" */; - buildPhases = ( - ); - dependencies = ( - ); - name = Fabric; - productName = Fabric; - }; - 7F79AF09BDA0EB7EE86AA958E0F97C7B /* Crashlytics */ = { - isa = PBXAggregateTarget; - buildConfigurationList = E0F0E3036A4D65EB62D144C81A937BA9 /* Build configuration list for PBXAggregateTarget "Crashlytics" */; - buildPhases = ( - ); - dependencies = ( - 6D359D7DCCBFC2601598E4BAEA80859B /* PBXTargetDependency */, - ); - name = Crashlytics; - productName = Crashlytics; - }; - BC2B4D06432AD962396EB82B589340B7 /* FirebaseInstanceID */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 0C68631D0476D23CDF0D7BE9008B6AC6 /* Build configuration list for PBXAggregateTarget "FirebaseInstanceID" */; - buildPhases = ( - ); - dependencies = ( - 86B6B71ED8DE5C55D9C78D692391E76B /* PBXTargetDependency */, - 2F5B65D5473736F77B64F1D51C7A2016 /* PBXTargetDependency */, - ); - name = FirebaseInstanceID; - productName = FirebaseInstanceID; - }; - CAFA4CBCA3898A6F62989262E04582A8 /* GoogleAppMeasurement */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 6240707FA5D9495C9D41CA667576DA9E /* Build configuration list for PBXAggregateTarget "GoogleAppMeasurement" */; - buildPhases = ( - ); - dependencies = ( - 30F3803A4447510D6070F15606D8099F /* PBXTargetDependency */, - 6FBBAE88D1D0F267D94DC5925D1F1D6B /* PBXTargetDependency */, - ); - name = GoogleAppMeasurement; - productName = GoogleAppMeasurement; - }; - DE5EE8EEA217EAEF464BE0F1D44A3248 /* Firebase */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 3191DEF558AD113AD3758B64D5C1FFE7 /* Build configuration list for PBXAggregateTarget "Firebase" */; - buildPhases = ( - ); - dependencies = ( - CFF098B8C151305C191AA153495C81B7 /* PBXTargetDependency */, - 8D1FEC98FF8D5FDFF3D63678E2BF8AB6 /* PBXTargetDependency */, - ); - name = Firebase; - productName = Firebase; - }; -/* End PBXAggregateTarget section */ - /* Begin PBXBuildFile section */ - 01378D434691A0423F637636F8A61FF6 /* GULNetworkURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF5F4874F144D7CCC48EDE4FDF5E4D7 /* GULNetworkURLSession.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 01CD536F190B50AC03B098A3B7309858 /* RLMSyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 16BB51F732785C50F65D5026359E00DA /* RLMSyncSession.h */; }; - 01CE99DFE5AFF3E420B2D178FD21FB5B /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3122D0864BC36EA6B66DB3B4B0BE1A /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0353EF2C9C6B7F36E80C46D6FCD6F983 /* Realm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 364B9FDD3EA053C0E43BE38C9243D68F /* Realm.h */; }; - 0371A9B80638AAF0BF510C3AED7B2F92 /* FLEXDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D69B83D7891B46071F3526C887D4BA /* FLEXDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 03D7371C86A96F8B8C87EB1C203EC62A /* RLMSyncPermission.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6841BDFB53AD59EBAD698B598677E339 /* RLMSyncPermission.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 03DD8FBB7AD8D160661ECF2BED92E054 /* FLEXKeyboardHelpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CFB5DFDD833A52F428A9894D1515E25 /* FLEXKeyboardHelpViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 056283B14333CBA2EB0B1D557600A68C /* MLShareButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 0AFAFA01D2E57646F4112DFA12650E36 /* MLShareButton.png */; }; - 060B0D473293771A3525512B2322A425 /* FLEXWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C3E57F06CDB59E19D3ABB90F3A796A /* FLEXWindow.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 06AB0837669D699ACE3781792302E374 /* RLMOptionalBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8AC8DD3D3994F2AD081230813AB0BB83 /* RLMOptionalBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 06C085375062A5E663A12162F3F11F2C /* MLCloseButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 81D15D0A68134923D32F017D39DCD45E /* MLCloseButton@2x.png */; }; - 07959CC46C97061753647B6C678AD1E5 /* ComposerAddon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6999FD8AAF5920BA57E91EFED7E5C0BA /* ComposerAddon.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 07BF5BD3F0D23E013A38872DBED77FEF /* FLEXNetworkHistoryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = FD8A82FD396472B27886A246B1546240 /* FLEXNetworkHistoryTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0872BEE3CBB755DA509723BB0769217F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A343C28225F692A6D5807B549B20F941 /* QuartzCore.framework */; }; - 08CA1647532892B22963FC2ACE0DBE11 /* GULNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BDC98A16D5E56AA2EC12BBE4EF79986 /* GULNetwork.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 08DC4F467AA009D41AC6613571524765 /* FLEXViewExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 083B3E12BA0D212D551EEDB0392993C9 /* FLEXViewExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0957D4E1572A167D96F1E9E08964F4B8 /* FLEXTableListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BF3AC9C4348BAB5887E77CB2E5711DD /* FLEXTableListViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0A62CC2CB5DCC03246E6C33852DF8A8D /* shared_realm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C003348FAFB6601A1E30EC32B1BA44A5 /* shared_realm.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0A80230BDD75CDE25A1A5653F674A5ED /* RLMRealmConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 647477D344D6FD8BF30A2927E4528EF1 /* RLMRealmConfiguration.h */; }; - 0B4264321E0030FCA02F837B6DE12EF7 /* FIRErrorCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FA60F578BBB5462B01F663E38555649 /* FIRErrorCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0B521E3C4835ED5F9CA411D02C098E1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 0B68B3A6913F95A09AAE1425FB185A3A /* FLEX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EBFC12B7062AFE102BF1CAEA0956BD9 /* FLEX-dummy.m */; }; - 0B9179DB09DA4516830272763573C1BF /* FLAnimatedImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4A24816DB030E5F44CF4B64BD62AB56 /* FLAnimatedImage.framework */; }; - 0BF2A029BAA047E3B13D520C2883573D /* RLMSwiftSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DAA361DC3F8420552A3FC75D840E287 /* RLMSwiftSupport.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0C2B0AFBAA1755045B799A1BFC92199A /* RLMSyncSession.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 16BB51F732785C50F65D5026359E00DA /* RLMSyncSession.h */; }; - 0C704845AF62BA938063CE1DCA6A86E1 /* RLMOptionalBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 27B01EDF686D5010CEC58C63A0F6282C /* RLMOptionalBase.h */; }; - 0C77E6855DE81321F084DAB44272A0D1 /* SSLSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = E291CCEFE708EBCB77BDC54FFFF013B6 /* SSLSecurity.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0CA84954CE54FBE1B5D5301C7206584A /* FLEXRuntimeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9540ABDA0362D948DC59A0965A3EBA /* FLEXRuntimeUtility.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D0321890FFC784EFA7DE65F30B9F96F /* FLEXGlobalsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 037871A3645C1844FD0C6B595D7475E5 /* FLEXGlobalsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D9F3DCA7FE04B83A5E4D54E4611B21C /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D45AFAB3D21A74C7F1400737B20F5C8 /* FIRLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0DEFD6754824E6444928110778F35DED /* FLEXTableContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81B5FA125F83D144707ADF380931E385 /* FLEXTableContentViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0F113F37CDD68C482342C3B478612ED2 /* FLEXImagePreviewViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EC0A7E9E176A9FFFD6187F877345152 /* FLEXImagePreviewViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1030FA5E5E6BFA76432E7180438D27C4 /* FLEXToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 63DAE88E52ADC3DF3C18548E17235501 /* FLEXToolbarItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1042A2FF761D4B902343C72C0F24EB20 /* FLEXImagePreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 44F1609E80E8677C7ECCC1904199C74D /* FLEXImagePreviewViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1095091A6B5A46FB0CF704059466E0AF /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E6BF186195C4DE9D824C0FA57EEDCA /* FIRVersion.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1128C8AB499CF477A8ACF1540A44DAA3 /* RLMSyncSessionRefreshHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0382CBF81F5C02077DC9094B33149A23 /* RLMSyncSessionRefreshHandle.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 11D4AAE5676A052814E11DCC3EF98065 /* RLMPredicateUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = B8C21A11A4EE68B34A8CEFCDA3C6C64B /* RLMPredicateUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 11E876EA8AD17826C9D7780782F09CA6 /* SwipeTransitionLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32037FEBB8B1061A9DBF2D1BF66D4852 /* SwipeTransitionLayout.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 123589EF77CC94E3DB23A66E163FAD50 /* RLMObjectBase_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = EF230DB781EAEE83313A68ED6B03A557 /* RLMObjectBase_Dynamic.h */; }; - 1269BFB8FDECA71956F94157D8D8D410 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE71D8D4CFC80899EE3A1C22ADEFB43B /* MediaPlayer.framework */; }; - 128315895BD96D83C85AECB71F625D91 /* RLMQueryUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BB10C61E82F34D979EAE0B7D7CDCB28 /* RLMQueryUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 129642E35157CFCDF5B4794113F7F15D /* FLEXRuntimeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FC40EEF2905DD98B17C73AA10CAD6F /* FLEXRuntimeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12F89640EE5F3AEC1FEAFE6ED2A8BC6A /* FLEXMultiColumnTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1004C513B590C4EE779A88CCCAF6582F /* FLEXMultiColumnTableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 131A824928744A8F759EAAC9ED1E8E12 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4619EE3C6132791055887B917E68786E /* Button.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 13A847C42DFBC3BE340FAAF9D64FD9E0 /* GULAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 896A6CB4506286067519743B474D0397 /* GULAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 13C1DA4AD13D9663FB79BA177AD72D4D /* collection_notifications.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDFE33444AB890450A20EB926C016E16 /* collection_notifications.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 13F73AB2B0D89A2442921781989A888E /* ComposerAddonStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCA620EAC2C424330BBBF790E43ED40A /* ComposerAddonStackView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 145982FAE1B0B77AD813344D435D2936 /* GULReachabilityMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F40DFBE767AA8B8E80170E89B264D5F /* GULReachabilityMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 15CCA1F048F9DCC342BEC57BF0655BDD /* RLMSyncSubscription.mm in Sources */ = {isa = PBXBuildFile; fileRef = 15EBFAF3F750FC13221323B27E31EFC2 /* RLMSyncSubscription.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 15EC6AD063CB4B54717281F3B8B19CDE /* FLEXArgumentInputJSONObjectView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F647DBA0A69DBF8C9340D5F6353EE3D /* FLEXArgumentInputJSONObjectView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 16284B32D917CD416F8E442548B4F75D /* FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B35D8F8E0E37DF1CBD9888F0A1C1A9 /* FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 165B82E9CC22D32700725CD657F9212F /* OAuthSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0496423F7189F9EF6EE8C879C572C6B7 /* OAuthSwift-dummy.m */; }; - 169AD59073AA83EE935DAE7319812BF0 /* RLMObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 575F21FA02FEFB3F82E1A8E65234CB76 /* RLMObjectBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 16F7FB89842A5FBC05E82ECE7CF33F5B /* Pods-Rocket.ChatTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE8E89316BBFCAF76B3B36353CD0103 /* Pods-Rocket.ChatTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17165F15D99F6910F96A28287F3F9EC4 /* sync_session.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 731EBC56B953ECC92C201B3428C10F17 /* sync_session.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1761CCB7B321270EA254FDB601B4A7DA /* binding_callback_thread_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E5C578EFA97B1F81DA1AED85DE2AEC3 /* binding_callback_thread_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1789626BE3DD91CCC4587E2F597C3A0F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 17AB139B8720C374503E0E6C9D5F8BDD /* FLEXObjectExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D19A3732188476D43EA3B1C4DB8847B4 /* FLEXObjectExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 183C877A610789FA0E778761F3730A31 /* RLMProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4AC22966F95E94F595F9796C03046838 /* RLMProperty.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1852EE796DC5E323E8DA6193AE82B892 /* SliderConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 509D517757023446A7248C515D973F06 /* SliderConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 19DD6C9078C87B953B28F28D5B26D17C /* ContentEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE5441D0EBC0ABAEEB13B1E7A309A0CE /* ContentEquatable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1A26D1C57D5F41A29CCA1E3EF59F440B /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A56DDFF8AA56B65F865263EC3E0684C /* SwiftyJSON-dummy.m */; }; - 1A767FE196076BE4CD66A39EB04AEF12 /* GULMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 55191D846AB52B041E27FF3D457CD78B /* GULMutableDictionary.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1A89CF9F7048D36EBD4F772ACC0BA24A /* keychain_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9182FAC44120C95821B2A90C2A38BF9E /* keychain_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1AE0832917C1018993F6594AFB61738E /* FLEXNetworkRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CC7747A3A6E5FEBC83EFC4F23495C7 /* FLEXNetworkRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BC2565DCD61A144076F50BD788BBD07 /* FLEXNetworkCurlLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 670695D2A2516543C17D38FEFE843466 /* FLEXNetworkCurlLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1C314875A4B37D60C951318B780B9FFF /* MobilePlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1458D07F9EB94342AB68E117BBE44BDC /* MobilePlayer-dummy.m */; }; - 1C5B977D0E6A4968D381372FAF343BFE /* FLAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 706C17ED09DBDF2A7ABD08B5BA6BDC91 /* FLAnimatedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1C7425FE51F8FCEDCA67176341316F93 /* FLEXArgumentInputNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114F6A4DEEB55422A91C00397A57F25A /* FLEXArgumentInputNumberView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1CED116EFADA9A89E442A677AC2EFBDC /* FLEXFieldEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 43F4C31F67984F12C9D421A7C2FA4D10 /* FLEXFieldEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D3342104CB854F6450A2BD376481691 /* FLEXMultiColumnTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EC35EA87CD1371AF2288CB1DC1EE0D1 /* FLEXMultiColumnTableView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1DA2DCE9746E5377CFE2F4FF9293EA4E /* MobilePlayerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83CC7729A09D7F330690924600CB80E7 /* MobilePlayerConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1E20D87C9C128B995480EB4502E6F42F /* RLMRealm+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 918AA79F408516E9CBC3EB2BF1C2D2EF /* RLMRealm+Sync.h */; }; - 1E8222FAE9479EA276950EDE630491DC /* Nuke.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D746001EED6F54BA45F69E1FC4C3DE9 /* Nuke.framework */; }; - 1F6F265188A7C543EE1B32C59A4745A4 /* ReplyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E163D1A1E138AA1F6DBD37E1600EABA2 /* ReplyView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2047AF56D9BA4549150095516CAAE58E /* RLMObject_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 4156FEC2340172AE6BAC86DA34101E5E /* RLMObject_Private.h */; }; - 208C867D5C10DF6A9EED61AD8FAFBBA5 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = A3D4BE9ECC9BDF3F96D0766314D06716 /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 20D5CDFF4AED6AA5E9B245D2FA07D733 /* 1PasswordExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D11F5BBB6791B4CABE9659A01148E99 /* 1PasswordExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2100EFBF0C901CA457EC5002DD691484 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D24B53DEEB80CB83A38DC85B98542278 /* Security.framework */; }; - 22033B96D5E037D68B8BCDFCCAF1AA1C /* MLVolumeButton.png in Resources */ = {isa = PBXBuildFile; fileRef = A9E643C8FD24AA722EA3BBD7556AF31D /* MLVolumeButton.png */; }; - 2254BBC46FF2646C77AE82403E20F432 /* RLMRealm+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = EEE7AFB31FF8559653259C047D8CAC57 /* RLMRealm+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2267DAABF3250C3414A1291E12786D65 /* Pods-Rocket.Chat.ShareExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B8B18C22880C9BE78CDE9E4625A54F56 /* Pods-Rocket.Chat.ShareExtension-dummy.m */; }; - 226BE81F776D54A90046FC239AA00323 /* OAuthSwiftCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07605BDC898A283EEAC96300AB07D4E /* OAuthSwiftCredential.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 23BCE3D5DC007C02FA5A09A7DA770944 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9007201FAAB29A329608A7205E93E317 /* MBProgressHUD-dummy.m */; }; - 24172E9F24A73A791C3479ABA0A626CB /* RLMSyncUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = B5B6AF0A97A7770C7C515F7EE5CE5807 /* RLMSyncUtil.h */; }; - 24179324105CC64FC9865C3E82CDFB97 /* GULReachabilityChecker+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1506768766CE4E4B8B02BD35C5CE5A43 /* GULReachabilityChecker+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 248A067D360B73168E08C865813B5511 /* AudioRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83B1D5C23A7979BA0F956F58C20B87C0 /* AudioRecorder.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2550EAFEEB198A11D986D416D2DBF8BF /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D0490E939A523972B86AB852ADCED49A /* es.lproj */; }; - 257686D6271BB37ED04FE3F0206187A3 /* FLEXArgumentInputFontsPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11F1F790154FAFE5FFC71DC6C6D25225 /* FLEXArgumentInputFontsPickerView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 26227C63C0528DBB796E21753B427EFA /* pt-PT.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 539710E03DA4ADD1D5A451EA0330A639 /* pt-PT.lproj */; }; - 275693A74EB4DBF5315CD46E5E4B7FBE /* RLMProperty.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 3D906FA05608F00FFBBA9ED705A67F54 /* RLMProperty.h */; }; - 27734224F5D54F13D869C96F7D50A445 /* RLMArray_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3754C508CFCEB5426546F297A424565F /* RLMArray_Private.h */; }; - 2799B1DC58880BBE1D5059DA0EC72F8B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2743375C21685AFF14997E1A9AF3E8F9 /* SystemConfiguration.framework */; }; - 283F60D04102893FA3A170A7C67A2678 /* RLMSyncUser.mm in Sources */ = {isa = PBXBuildFile; fileRef = EE22E97AEC611881905C329B3392A631 /* RLMSyncUser.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 287F004CFB6749E9B0F3F3D257D26265 /* RLMResults.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 37F579CD5587D0E3C0A9C5DEBA22B1B7 /* RLMResults.h */; }; - 289054E950468E3D2EA60149943BE435 /* OAuthSwiftError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CD5BEE0B7F0546C37906EE39EC2C5A7 /* OAuthSwiftError.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 28C288012BDC906F2821CC02C4F92AF5 /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F7A009DA86EB14F6C616F92FEFDDC7 /* FIRBundleUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 28D13F190EB5775B84610175B00949EA /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9B6CD519E3A3F6FDAC4FCA6FAB2E6AB /* Internal.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 294519278A99490E97F5E6224E3D41A6 /* RLMManagedArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = 363B499AF27D659B45AD3C708BC1FAD4 /* RLMManagedArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2996E878CF37717F51E1908326C3DF9C /* UIKitExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48C8286DD90818D91642D489B29268A5 /* UIKitExtension.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 29AFA0CCF0C0A39A053E76B4CF5EBA69 /* NSError+RLMSync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = ED7368AC59AA79A20229B2DF561A20F1 /* NSError+RLMSync.h */; }; - 29F3C00FA5C08E3C9D8E7463E28CA58D /* FLEXGlobalsTableViewControllerEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 29927A5189487AE1C8ED31386A6C110A /* FLEXGlobalsTableViewControllerEntry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 29F9BD23D0D86A8E1C485C1B51939C6B /* GULMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EB46F8EE9C0DE738579F8200D7A50C5 /* GULMutableDictionary.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2A15C26BA2995F4684F08869CD4ED45B /* GULLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC298E0DD3344AE3C207F4BA2F81F49 /* GULLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2AB5BE740CAF2C4C0F84603FD37A5869 /* MobilePlayer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 334EBAF76205BE715D399E2E13D5B20D /* MobilePlayer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2ACACE472D2F1531FAB6996AB1D6DC4F /* GULLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = CA5A3BAFCF86A0C65F805637E4FAD714 /* GULLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B2BDB59F381FC17622EA0689F271D00 /* FLEXArgumentInputTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = B88B354E1CEBD934B5D065EA09102030 /* FLEXArgumentInputTextView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B79FE1B5DEAECBD9C42B50D9205D353 /* OnePasswordExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = D04E47013B463E602EFA26C46E4204D9 /* OnePasswordExtension.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2BA74A8EB1CCD6027AE0120CEB7CF91E /* MLPauseButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D12C82EBD7C08A6268E6338FDF6A9059 /* MLPauseButton@2x.png */; }; - 2BDA3925B88A286ADD939151942CE66B /* ImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7E955FA2C1937887C91DA7C8BB380EC /* ImageView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2C327A494B6C6E4B0D1682D4AC99CB2F /* SimpleImageViewer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AB4583124EB9ED0806D51E02CCB6C78B /* SimpleImageViewer-dummy.m */; }; - 2C76C3638F2F9DF8F99D0AEA16D6B2EE /* FLEXMultilineTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C82064BB9E953E95908FBFBE1FA282 /* FLEXMultilineTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CD75D818E317E4C39C0C9ECDFDF9CC1 /* ImageViewerTransitioningHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7D798ED30C9E698734E58256FBE923F /* ImageViewerTransitioningHandler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2CE17059A564A8187F9E1E2FB68DD95D /* ReachabilitySwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9635A914BA16BE425CF7A9FE90C4A08F /* ReachabilitySwift-dummy.m */; }; - 2CE8125197676C8C195721B3594B58BE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 2D1BDC45EFCB750CAC1A294E9D36A974 /* FLEXArgumentInputNotSupportedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 25EEC2599B7BB409FC7823E1550A0342 /* FLEXArgumentInputNotSupportedView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2D44E459C422624112438129D6DD4190 /* OnePasswordExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FA28609574769E808D96630222ED236 /* OnePasswordExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2DAC38F7005E000DB86EAADF023A4A6A /* RLMSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B95667407F6A5687B61C310AD5034E /* RLMSchema.h */; }; - 2EB5DBD9F597DB6134FBEE3F79331B3A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D24B53DEEB80CB83A38DC85B98542278 /* Security.framework */; }; - 2F49B250C9A37090061DA1D401526B14 /* FLEXObjectExplorerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = CD40E9931BA5F2A80E665FCAD01A1C28 /* FLEXObjectExplorerFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2F5574035CCD75B71BB3E88FD23A8B4D /* FLAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 341F1F0A76355127E9976547D36D5680 /* FLAnimatedImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2F6CB04711EE8AB653E82A6A81D0A6A8 /* UIKitExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1644E4106E0562D82D260ABCFB75A2C7 /* UIKitExtension.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2F95DBA756315CB5E8A792AF742E5B54 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CCFBCC8EA2F6EF486A6BCB62049612 /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FC5B4A02F4E450BEFD7DF93D3F8B58B /* network_reachability_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 873BDD41B2C5A1C538193B073AC63D33 /* network_reachability_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 306457F17F7D81B28C5AD55ADD172BDE /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = F5A940A556BE07E18E8A2B7B870A3B00 /* FIRAnalyticsConfiguration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 30A6016E802BB154D715C09E54ECA3DF /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A0392C30C0A9B69AB3CC5182B059553 /* CoreGraphics.framework */; }; - 30C371593F27B658E3646602377045E2 /* FLEXDefaultsExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C589B0D2026585B4BA49C237246F4471 /* FLEXDefaultsExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 327A116E2F299A0F5618AFC90BEB6F17 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E21468C093AED1C2F83AE34C04A643CB /* Utils.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 328384B965F876390B39560351A57141 /* PreviewAudioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FCDFAEDCDFE4AA4E772D1909B0406F5 /* PreviewAudioView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 348AB15A63B93F0F132F6A4901587D58 /* RLMUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8044325BC78DA37299AF018ED199C759 /* RLMUpdateChecker.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 34DFCD1575882F4E17A760ECBD253C50 /* ImageViewerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DB2CBD480E0FE8E359B01EEC60A369 /* ImageViewerController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 353CE4E6D7AF1CAE0511885F181BF653 /* MLReduceVolume.png in Resources */ = {isa = PBXBuildFile; fileRef = 227C67E48F0616FED2D4B7841BABD029 /* MLReduceVolume.png */; }; - 359009D5314FF751E8B3AD17183308F4 /* Realm.h in Headers */ = {isa = PBXBuildFile; fileRef = 364B9FDD3EA053C0E43BE38C9243D68F /* Realm.h */; }; - 35F308B0E7894F695470621A6431F5D9 /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B08739DD416393E49984A28452F49A8 /* Changeset.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 36392B4F7E63DA095122B5D5285687FD /* FLAnimatedImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB942C29CCDD1A2922E097B076C2C7E /* FLAnimatedImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 365ECAF969835849893A23DEF502B1C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 36A1F0BD8FF30E0F20398B75BE936877 /* FLEXArrayExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 847E3D89261E291BE83390D7E8F35753 /* FLEXArrayExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3765B9EF0BCCB9B38E0AD7B9BD36CE3B /* RLMSyncUtil_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 999CED0ADD0E00299A347C4B0018B4A6 /* RLMSyncUtil_Private.h */; }; - 3787A771BB15AD3494D15F311BD8BE57 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6CDABEF8661834BC659A48FEF8A10FD /* UIKit.framework */; }; - 37A99E5C2F3B5D310B421CAF458B6E88 /* FLAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E89A4F6B522D0B5FBC1E6ECE8ED47FC /* FLAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37B5F51CB3FBCC86DD87D89E488F65E7 /* ImageTaskMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0074C772C18EB8F44F03E638475C9D28 /* ImageTaskMetrics.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 37D63CC80F1716CB08F301AE0F59E91E /* FLAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 114133F8DCA61E6FA69D01C05262D460 /* FLAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38A912E0C00A4CA72407856AFF70A3EC /* realm_coordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBDA01F79924E302E04EF88D52E00F81 /* realm_coordinator.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 38F524C01713A83277E4302E54A2E964 /* ComposerAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = F201F4CA1B3B2608D04E327D3AFD5633 /* ComposerAssets.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 396542989F10CDFBB1AC29766509DAD6 /* list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDC68D83D2FFC444267C0C7C5179D4C9 /* list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 39A350B8318A31CC116F9AD18ACCD1F4 /* ComposerViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F64DB2B3B70A030DFF8DB2E7D8B9B713 /* ComposerViewDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 39AEA2B8C3CF956B3E6C690988904792 /* MLIncreaseVolume.png in Resources */ = {isa = PBXBuildFile; fileRef = A516366709C5FBFDFFB4CF4E0603CBAD /* MLIncreaseVolume.png */; }; - 3A331CAEFC64829B4CD4FFB2D7A6BAEE /* FLEXTableContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CED8E51536DB09425948342C153B64B /* FLEXTableContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A577C429242D488FAD5777B6395B785 /* RLMSyncCredentials.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AA3AE7B25413CCD83F80029463021C04 /* RLMSyncCredentials.h */; }; - 3AA54B98F2867F5336FBAEEDF7CD222E /* RLMSyncCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3AE7B25413CCD83F80029463021C04 /* RLMSyncCredentials.h */; }; - 3B0316E0CD7FA7C642120704FF68D280 /* RLMObjectSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8685FB3EEE56A4FFDDADA18A9BD5F9A2 /* RLMObjectSchema_Private.h */; }; - 3B2AE6E2A09DD2B8D8772E541A5EADAF /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6FED1339CE7DF6B0E95B01A18F890C8B /* pl.lproj */; }; - 3B3D5D8FCF40C46E767CBA91D48C8FAE /* FLEXHierarchyTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AA1437142C700B16DEB2FC19195CBEE /* FLEXHierarchyTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C315099E99BEF8213B9E8E6B7AEFFB1 /* Nuke-FLAnimatedImage-Plugin-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F335C48847B32C7AAD2204ED00462E3 /* Nuke-FLAnimatedImage-Plugin-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C7685038D76AF717F5B0E4EB9DA1DB5 /* ComposerButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDBEA0C4DE528B0C657790627DD770D3 /* ComposerButton.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3CAB082213DF7D4C25A6AA49BBE87932 /* Aliases.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53D5F85612E6A569A757F8D0B3E8322 /* Aliases.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3CBFF42FB6CB0561EB20C67345ECE4D4 /* RocketChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B785F0699D7A2B3DC184A88B0217F9CE /* RocketChatViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3CCC829D707A77A39016180FDAACE2A6 /* GULNetworkLoggerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = CF8F8D59756E1568CF32142641B3D7EF /* GULNetworkLoggerProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3CDAF44B5A2A0A22A5E986A6C9D61B26 /* FLEXSetExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEA0258275713E25EE0268767A94CF5 /* FLEXSetExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3D0E0271782E81C69AB085285CE3DC6B /* FLEXObjectExplorerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 22138788CF28FAA12243DF4700FD3E4C /* FLEXObjectExplorerFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3D2ADECD3A37D8BD5211DD2CC32811ED /* ImageViewerController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9E54A94B1291E4EDBA9DE36947B9A54 /* ImageViewerController.xib */; }; - 3D310119473B5C77C489C7BC808AB904 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F3338B8C0672CB2FE0BF94CF1696554 /* ImageIO.framework */; }; - 3D426F510FB3AD2E11C049F32BD72674 /* ImageDecoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E36D9ABDD90981A063503CCC1B8ED85 /* ImageDecoding.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3DBB0720FDA132A148CF5D39651E8B30 /* GULUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1FFCB9922777A67C459476B6C3D218 /* GULUserDefaults.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3E3B2ED563C3275EC7FD8B0E23399EB6 /* FLEXHeapEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A1AD4285C9534D8B0E6F74EC1F41D7 /* FLEXHeapEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E44BDD44A7F33872E1B2C7D34D295AD /* FIRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = D369BD2876EA0E176D2C2CDFB13265FC /* FIRErrors.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3E5619A5E3785B200803D51952180E8D /* RLMAnalytics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D088EDD0B8F72AEBE7962C8953B33 /* RLMAnalytics.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3ECA7C8D00453BA8AAE0AEBFEFAC2430 /* FLAnimatedImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E15777F6486B1013B4DF0C82D0E50E1 /* FLAnimatedImage-dummy.m */; }; - 3F810021C4BF8377B1E61B996D22CFA7 /* FLEXDictionaryExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 07515F8C2934A7DE5B97F53E6D2B1CFD /* FLEXDictionaryExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40065399D62528E0B0584B6F7A97207C /* sync_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2C41E1E9EE56698C3DD8D94E53B2C06 /* sync_config.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 40181C3FD6EF70DB88AD7E67715325D7 /* SwipeTableViewCell+Display.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69641B760872C3DAE1CDF55E0B59583E /* SwipeTableViewCell+Display.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 40269EF8CD7A59911399D6ABF7F9BE47 /* FLEXFileBrowserTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 394F88F19C58BC5C34A1A6A26D9174C6 /* FLEXFileBrowserTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 408EACF3F50264E982FF82A34D143319 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A0392C30C0A9B69AB3CC5182B059553 /* CoreGraphics.framework */; }; - 411ACC96B02E05DD963AE6F04A9ED6C5 /* SwipeAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46358FB8364621A758602717F2ED2480 /* SwipeAnimator.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4132C7A33FBD7DC4D2863A4E272A2682 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B69B83BDD3B35F420C854EA89935B71A /* MobileCoreServices.framework */; }; - 4164C59C02996FC0AC223CC61A1865BD /* NSError+RLMSync.h in Headers */ = {isa = PBXBuildFile; fileRef = ED7368AC59AA79A20229B2DF561A20F1 /* NSError+RLMSync.h */; }; - 416BF43159DE8659C9E58341F85EB07C /* GoogleUtilities-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5D51EA73314A85387979E485BFB676 /* GoogleUtilities-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41B2B2B59B3911103011F12BEDBBDB55 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 41F07A61972AE74A7E87141BA8E025CD /* FLEXTableColumnHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 22A4844A5354DB0EF598F2C14F9DD565 /* FLEXTableColumnHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 41F622FF15EA87F8FC16CD9105F0261C /* RLMSyncSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = 60906A11715B122F22872EFD380628E2 /* RLMSyncSubscription.h */; }; - 41FCD30EC1C04E501DEC08D5DEE619B5 /* GULNetworkConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0026A20F0F7ABD308811BBFAD64045C7 /* GULNetworkConstants.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 422AFDBC00D97D52F79D0D25491B0772 /* OAuthSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C7C3DAAF10A23CAB5C70F5C5C6E671FC /* OAuthSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 423A781C3D4A8CBA13850443448B3B94 /* FLEXArrayExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F22BFB9BB17B2BA34E3CB47D46962C /* FLEXArrayExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 42440C1BDD3E967B4684AC95968DBD3D /* GULReachabilityChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B7A9BE309AEDD9746C8067D8773BF3 /* GULReachabilityChecker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 42763DAFB8AFBBA933580595557E3AFD /* GULNetworkMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FBE0974C24004A857479378B91EE7F1 /* GULNetworkMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 42946D84310B841E34DE37979C58848A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 430060FAE23BBE9D88038B53CFCAFBC6 /* MLVolumeButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 056B11BCCC190F1AC7F0565A24A7E673 /* MLVolumeButton@3x.png */; }; - 4346E9244C7E0D9186BC24D4CB2E443D /* uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA81613DE1471C0B617C6B56D3CC7D53 /* uuid.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 439059686404F4103C2F441790CCE64E /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2C857D5300CA57C9A0FCF10F917787F /* Object.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4469ADED632AA9ADA4E183EFF41292D4 /* RLMObjectSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8685FB3EEE56A4FFDDADA18A9BD5F9A2 /* RLMObjectSchema_Private.h */; }; - 448C635CB5900428BEBF3B822A3D33FC /* RLMSyncUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7A53D4B7AE35D3CDC1509C759858C6 /* RLMSyncUser.h */; }; - 45FC6531037AB3693DD0C7DA606E12D5 /* FLEXManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A8D36287A25CE89A566AF46B98D006 /* FLEXManager+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46007E2178DB5E7945C3559F38DD92A5 /* DifferentiableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = C328D9E1DB954DB7AFCF5FA5FA87F534 /* DifferentiableSection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 46429D905DF5787ABA69DBCCFF09002E /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 39E902CB5C014A9D226645A7767CEB0B /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46841826620804EF18A548C4839418A1 /* RLMThreadSafeReference.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E8B2709DAEF95AF1F994511C7FAF1CEB /* RLMThreadSafeReference.h */; }; - 475E4B461BA65F3805A982560432755E /* FLEXArgumentInputFontsPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 61D4589927E912A7200E77C8400B2081 /* FLEXArgumentInputFontsPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47E85ACFC08532FE031994705F356B14 /* RLMRealmConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E358F7841C07D325480255669E11A042 /* RLMRealmConfiguration_Private.h */; }; - 48021275C69791386B06BDD7FA1F62B4 /* Realm-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BC672B1A13049DA8F08990F9C75B282C /* Realm-dummy.m */; }; - 48705090D61E9B3693B3A08921BE5FF0 /* RLMResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 37F579CD5587D0E3C0A9C5DEBA22B1B7 /* RLMResults.h */; }; - 489A077ED9845FD3E11E5D0A9F25DEB6 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 38A51A99FA0D2A903B27AD7D7F70A103 /* FIRComponentType.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 499BC0F8F8299AF06D3AB3B83E1F0E71 /* FLEXArgumentInputTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D1A4638E1E37D616189125D16EF1CF /* FLEXArgumentInputTextView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4A236A2C4C81AA6E475F9F19E6976103 /* RCMarkdownParser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1611987CFA9535B38C916845620AB6B6 /* RCMarkdownParser-dummy.m */; }; - 4A751BA19E9412AFAA2F941434EFF5DD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 4AD368DBD4ED27F0AA6E9116BBCD52AF /* FLEXArgumentInputStringView.m in Sources */ = {isa = PBXBuildFile; fileRef = 634240391D791661A3349AFF707C4CB0 /* FLEXArgumentInputStringView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4ADF6ACAD45A83E8D349F3C68DBA5FFF /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 818E61ABD382F8AA81525AF139542CA7 /* FirebaseCore-dummy.m */; }; - 4B46C105272F2B487AC312C96081CE22 /* FLEXFileBrowserSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 351B49E4EC79B8EB1BBE83FDF343373F /* FLEXFileBrowserSearchOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B8B9104D6D79A258BB83BA544C4A68C /* MLCloseButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46F2525C49AE88E935C131661CD144C0 /* MLCloseButton@3x.png */; }; - 4C55E4D5CF1725F2C570B1A5B8B56320 /* RLMRealm.h in Headers */ = {isa = PBXBuildFile; fileRef = 8286CD7D6B521A659ECC0D10DE5D1C45 /* RLMRealm.h */; }; - 4CA03194A03AB83F39B242DD363091B9 /* FLEXSQLiteDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 979D08C64AD5FB4A34654B541C3281A5 /* FLEXSQLiteDatabaseManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4D4D939C1E7652606FEC26A97647F521 /* FLEXNetworkSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 969D0486120BAE5D88D3D4DD70CB0522 /* FLEXNetworkSettingsTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4D4EDBABB249CAA0192B8274A214A8B6 /* start_audio_record.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 392137F509703B56F173F888580A1DB5 /* start_audio_record.m4a */; }; - 4D4FA0AC61BBB9B1CBEAC33FAC86882C /* FIRAnalyticsConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C7E5DB78FE7D473F90250C5179EEC29 /* FIRAnalyticsConfiguration+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4D775FCF4DB4761AB0FE6C6CD083902A /* Swipeable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 004A78012ACB0F4D3851F033B159FC96 /* Swipeable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4E5D41B29EC06F026B9053182B092202 /* FLEXFileBrowserTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E201DA3DC06651D6EDE2A8CC6114F974 /* FLEXFileBrowserTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E7319340DC8BF3F0CBE2B89C38788F4 /* ObjectiveCSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1DA28C1426491DC2DC048847150DA9D /* ObjectiveCSupport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4FD909DD059FFB052922CA95043E44BB /* GULNetworkURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = BE10F135A2E072105BA9A4E246DE7A83 /* GULNetworkURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 506EA8E43EC98ABFF09D00F4475A9CB9 /* RLMSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A9EA71CC98E3516152E5C31F1080C4F /* RLMSchema_Private.h */; }; - 50D8A7BF08D7A04AB177DADD7580175D /* RLMRealmUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7E0BC1C180EC36A05AA8435E482605B1 /* RLMRealmUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 513893788E3F1747FB3D349E19CE91BF /* SwipeActionTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 728C3890E14E1D2F3879DEB0AC70552A /* SwipeActionTransitioning.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 51398D166069DF99EE4922F20801808E /* FLEXNetworkSettingsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B804357BDFCD50C234C231A89F1680 /* FLEXNetworkSettingsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 52547BC7D05D69242ABF357131AA824A /* SortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A753A55ACF22BB4343DC64BD32464B3 /* SortDescriptor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 52A5F54DE8EC59CBBC901967164819A9 /* FLEXTableContentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A2548DEB969DB63DFBCAF8832B91DB9 /* FLEXTableContentCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 52E51A50C28CEA4B3397ADABE2ABD45F /* FLEXNetworkTransactionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EF7F0035BB929D2CF9997197058BACCB /* FLEXNetworkTransactionTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 52FF433188825527675710E4B6773842 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86E7496C36DFCA4BEF9A936343AEBCE /* Error.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5315E7D04ADA90B0E364EC113F9E1344 /* GULSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 56B52B4F2FA2290B3309CA29D49A5F6A /* GULSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5400EB5DBE096827EED3CCF9531D8FE6 /* list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A12FB7830D00F6A87A3794AD67963296 /* list.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 54536913B329CEF1056414FCBB7BF2DB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 545F6091268985A04596D2CE684CE76B /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 413449DBF0EFC17117560ED7BDF23D5F /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 54F92E7F8E8B8B9592630A0D4F9B405B /* FLEXSetExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A42B95A1B36420D6DDF302C135B27C0B /* FLEXSetExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 552ECDC3881263B7B31F05F8DED17B87 /* ImagePipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5217410D8040E960F63674F990CEA93E /* ImagePipeline.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 55B99143A86345FF60844FBE0215954A /* RCBaseParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B755BDB9283DE6874D3905351DEAC69A /* RCBaseParser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 55FC9D995D7EC441F5E5469D1001326D /* FLEXNetworkRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DC6B3F86C6FC7954D2D419757D81D89 /* FLEXNetworkRecorder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 560E9559B28336392CA1898DEBC47A5A /* RLMObject.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 349825FFA80C138BC1DFC9CCF1908F09 /* RLMObject.h */; }; - 5616EF77E5DF88B99ADC032E180A3B3B /* 1PasswordExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DFFAD5E224631DEE82999589BE602CC /* 1PasswordExtension-dummy.m */; }; - 567419C86535073179C752D8E2FA51AF /* Tap.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB46F77649A0F46C637AB35A568D6246 /* Tap.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5690FDB8180383C37127B1A492856FBE /* Int+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42DBAE45C59137E3085C0C9A7F37AD46 /* Int+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 56D8810EDBE6EDA903095F76D03F73DD /* FLEXIvarEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 80F9C24D73D452759A46C8BB3CA05BDC /* FLEXIvarEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 56E81C13EB073E24226F22E01BEBE64E /* FLEXUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C99E751F9C08DBD17D36B4189E98C16C /* FLEXUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57E7187454D2E2A1D3A5B347E2EBF274 /* ReachabilitySwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ECE22068196E6792E4C610118958420 /* ReachabilitySwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57FC838866E68872AFB44BBE4E3E55B4 /* FLEXNetworkTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D9787BA34B4FAAC67148D4F2E7A0293 /* FLEXNetworkTransaction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 591A19566B24ECAA7B7890B6255BABB1 /* GULNetworkConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = CBEAD04A0E5F31AA86927502F8508ABB /* GULNetworkConstants.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 59431CBE6A7691F2B908023353593E8B /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238C67B6DE069C5CC117BF105AACBD31 /* SwiftyJSON.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 596EE81E77B4730C042831463B7E0350 /* RLMSyncPermission.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 954576F150CB7988A3EEE2A7C2D363C4 /* RLMSyncPermission.h */; }; - 598EEE341D88B233B636878AA5606A06 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A97D2037391BED8C528962A04FE0ABD /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59AC9C51B091C28B555A36544702A2FC /* FLEXMethodCallingViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE3778197A1EA95A81765F97EA31A90 /* FLEXMethodCallingViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59DC9528F9BAFD70DC8591F7AA528BE2 /* FLEXClassExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3125C7DF70278930391E54959ADC1CE /* FLEXClassExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5AB77372F4657DFECB70C69E44F24547 /* FLEXWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F1D58E48FF695A59AFF50FC4BB4AC347 /* FLEXWebViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5AC7409B1DA877D15C957C48699A1298 /* FLEXLayerExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 89FAE773A765F976BA9028A1E69B02D4 /* FLEXLayerExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B12DB4C0BE8953EF72AF1420E20B583 /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D15697CF3296A071ACF6E258A57ACBC /* FIRAppAssociationRegistration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5B1BDB1C120D49251657E4CADA47C373 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6CDABEF8661834BC659A48FEF8A10FD /* UIKit.framework */; }; - 5C312CFCA91E2A2D59AAF6625AAF6A55 /* RCMarkdownParser-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B3457F4D0C7059CC4FC0745E548FE151 /* RCMarkdownParser-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CD4B9209C341B51D30EE1DB13AB68BF /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CF30DCB14A06ECD5A5C84C1CF6B0F3C /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CEBAF8644006933DCAA5E12B4EEC059 /* RLMListBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 21CC16E3C277434A36101D846291C4A5 /* RLMListBase.h */; }; - 5E05FC9B780F1E959510BF0D84FDD671 /* FLEXWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D574BF8AB83F209202F1E6CA06EA1EBD /* FLEXWebViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E65A03D0207348647945E542A712EBB /* transact_log_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1E2F0525F8BA55DA747C6DCBE6AD265 /* transact_log_handler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5F14752C7BF6E728AC121CBF8B141D5D /* GULUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 77047FBA7D0754149FB7AA6B7E5B8193 /* GULUserDefaults.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5F7B2DF4CD087BC1344214E7F976A65D /* RLMProperty_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D5478333A6D40E000CC0BFB6DC84256 /* RLMProperty_Private.h */; }; - 5FB4FF35740B545C80A73DE534A1D0BD /* FLEXTableColumnHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CDA8A83CA35B304DCA30A510A01B0D /* FLEXTableColumnHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5FDA40753A64D56E734E3A10F98BF16F /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F649B08D51C5A8841000F835AAF0C8 /* ImageCache.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 608E468ECDB0A2A504F478445FAB0D19 /* MobilePlayerNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867759C653584B29823EDA409706762B /* MobilePlayerNotification.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 60A8DFCD93A85364AF09B48B0744E7A7 /* FLEXUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = F7EFC30C843E7A45FEB1F4CEF89FA5E1 /* FLEXUtility.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 610D3CC884988B80814AC0B55EA8F628 /* FLEXManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F88F09779E5F38396054DC308D93DD3 /* FLEXManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 613FC3081D4EE5729DB589166FABF76E /* object_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE77B99D5D5FC3B12AD8117349B7D33F /* object_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6261D97F8A9F732DAE448D88904AEF1F /* OAuth2Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E04AB34A2ED2722CB4ABBBBAFEB6BC2 /* OAuth2Swift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6271D1DCEBB86E5FFB5D15B8EC9ED188 /* LabelConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C854AD920C06992A6369B47A6B64CE40 /* LabelConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 62A259FE3DFD2573519B3793C5AC95FA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 62AC1DBEC83926D38B882698FA01F2B8 /* RLMAccessor.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 466045FA36C4BE1E3A9F1536F7AA11D3 /* RLMAccessor.h */; }; - 64725D53F149AF63F84E312E15091657 /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E1830164DC063A52D40334E2591C28B /* List.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 64AB9305B4E44980AD23E813A97294C5 /* NSError+RLMSync.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ECC9230D5406CEAB879B9B12B6C19B9 /* NSError+RLMSync.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 64B57A4C8972B28D00112302B7E3B05D /* FLEXClassesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 060A3AA199FDF349C87092B0E25986CC /* FLEXClassesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 652405D20D7B81D2ACD5BD22A9D4CC60 /* work_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C558C007B66AB9ECC3B7A6415710C133 /* work_queue.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 65CF1297A1D63EEDF6BDC01D25614633 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0714F2F2EFCA5F2AA64CB9F67191FDE /* Util.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 66017B924AC59FEEC438F202A37D4D6E /* StagedChangeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FA3FC3E8B29249DA170A9E3EB768900 /* StagedChangeset.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6671275F5692626BEE91781A799EAE36 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = D572D90EB8C63BC18CFCE49E897F214D /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 668D6B34745D5098ACD848D882DF57F1 /* GoogleUtilities-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E12C74EE66E7DCC72D317C2C56300D33 /* GoogleUtilities-dummy.m */; }; - 66F017E19F42F9975D89855D2313F945 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 670B9D2B2A7CA412650F48C0136A547E /* RLMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 349825FFA80C138BC1DFC9CCF1908F09 /* RLMObject.h */; }; - 671C44D28BA8610468787577C9CBDC38 /* RLMConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AEB40EB7BBDCAF5A880C55B99A31A17 /* RLMConstants.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 67A97FF007F0DB034E9153DCC408C0A8 /* DataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82A92F6103594C28EC55B15B13E1A103 /* DataLoader.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 67DF9E484B188A631226A2346A4BE7A4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 6809E684E4D43993BB4890E1F6151083 /* RLMObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01CA00DAE686DB9419BC0E9810CAA28A /* RLMObject.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 68B99FABDBF132DA3C5C46CD54F6912D /* MLPauseButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 83CD1E3780A6CA89D611986B065F3863 /* MLPauseButton@3x.png */; }; - 68EBFD2D9DD354991AF68F55B2860960 /* DifferenceKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E68A13031EEB237F6F5BC09416E08C37 /* DifferenceKit-dummy.m */; }; - 69F858108A29BF9E1E10E874F98E1ECB /* Nuke-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A79E38DA1BE05BAEFE678818525C77 /* Nuke-dummy.m */; }; - 6A7D8B326CCA522D0189A653A2CECBEB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 6B6ACE5AFDC3B2818AE4838FF3A099C8 /* semver-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D38C541222CC39BDCA7815CBEA5EC4 /* semver-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B751E6A1203D651E11B1206EFE49972 /* FLEXSystemLogTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C362F8E9316C3CD32C2A85B4747F3E2 /* FLEXSystemLogTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BA74A65918933ABA4CF2C097461F429 /* SwipeFeedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0434F59D3B013B5E7783FDEBCB31426 /* SwipeFeedback.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6C1202FD28A75971C36B63935414280B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 6C70236F5050BD71F020E26A4407B32E /* MLPlayButton.png in Resources */ = {isa = PBXBuildFile; fileRef = E5F633DEA551B8E964C5699C4FEA170D /* MLPlayButton.png */; }; - 6CBCE6D543D403F261AE09ED38C00281 /* RLMProperty_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8D5478333A6D40E000CC0BFB6DC84256 /* RLMProperty_Private.h */; }; - 6CD61432D519599D861D92D0497EA872 /* FLEXDefaultsExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 753F529A22C40D25C15E49D8B5405B86 /* FLEXDefaultsExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6CE9B8B5C099E1679D25D6BCCF6FB2BF /* ImageViewerDismissalTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2F3C0C70557DA6236B12E85DC2187 /* ImageViewerDismissalTransition.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6D00E0681A44F584FB8D34DBE9DF77D5 /* Nuke-FLAnimatedImage-Plugin-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 42852B842E0C2B1B346E6A1CB7C47E87 /* Nuke-FLAnimatedImage-Plugin-dummy.m */; }; - 6D309BA2C4D7EABD1707ED826214455F /* FLEXCookiesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5028398EE7F19A593D4AF732A21CCE13 /* FLEXCookiesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E21DB0B8C8E83111230D868111FE2F1 /* FLEXTableContentViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1D9594A6175E340D202D4B7A2C4324 /* FLEXTableContentViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6EAF65BB94E283EC52878AA568B9DA67 /* NSError+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = C08B19FF09433B06BFF088D559F6DED6 /* NSError+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6F5E2F8D22E972B925A66B9861731838 /* FLEXNetworkCurlLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F4B6846DE806959FB9778575C6970304 /* FLEXNetworkCurlLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6FDFD10357B89B611D16C463CDC4B2F9 /* schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C92DEF3E8ABB7DF152D1B5BFF96FFDB7 /* schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7044C9AF0467694481DEF31C5F9CD395 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 7046AF9A03FF83976F29161CF0726302 /* FLEXHierarchyTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D1219D2694F00090D842BFE5F9ECAA96 /* FLEXHierarchyTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7195D731D2A884C6F0C32040874D8716 /* SwipeCellKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E9AC103FFE12A12FCC27FF801EC3E73 /* SwipeCellKit-dummy.m */; }; - 71AE7B44AB91ACD571CCE54CEC1716DE /* RLMRealmConfiguration+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = A919D5933078E73098BB79939BD03A50 /* RLMRealmConfiguration+Sync.h */; }; - 725A6C09F32CD40FE9FE96B5E1833528 /* FLEXArgumentInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C51AA555424F211A5A51CB26540948B /* FLEXArgumentInputView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 72E3A3239721899F99A89CD1F08C3BB5 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF3DD329272E326F5386346860ADA6D7 /* Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 73B6A69E4B583075AC6FB2943D36B85A /* FLEXRealmDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 826E1A8898380EEA40DE2D57D550E68F /* FLEXRealmDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 741AA676CDE1A8690FBC189269B3653C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A343C28225F692A6D5807B549B20F941 /* QuartzCore.framework */; }; - 74B8B7C3E41B9FA42F8C7FD79495C2EE /* Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = B37B4AE6C01361C7F29925C497DCCF28 /* Compression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 74DC847E8926AB4B990136CA4BB7CD55 /* BarConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 820BBC0E45EC922E58E4FBFE7475326A /* BarConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 74F0482B43281400FAB938FD672C5E5F /* WatermarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7B591117F4C4104D012A4B3D2FE8F18 /* WatermarkViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 752AD7276EF51E47078A6200C0EFC2EB /* RLMOptionalBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 27B01EDF686D5010CEC58C63A0F6282C /* RLMOptionalBase.h */; }; - 755196B026CB2986E05EEEEDE67AEDDC /* FLEXFileBrowserFileOperationController.h in Headers */ = {isa = PBXBuildFile; fileRef = E5B12BB67F59DDF1ED66066D2E25EE48 /* FLEXFileBrowserFileOperationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7552CF602EC571629DD99A7279679555 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 67AC951FAE00BB6DFC38F91165B0644D /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 758D9C3214D1BC73A0C0AA4E5F1AFF98 /* RLMPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E70E25DEC9F5B01C65A1A7C47E0BDCA /* RLMPlatform.h */; }; - 7635B5C3F1519DA3D857CAF3ACD71A92 /* object_store.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 10706607940A92A9127E8A23803C9FEE /* object_store.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 76D76588B505B57D2538DD3DAE801F27 /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = C3E845091CA57B0CB60C92F840E7CEA0 /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7774965F9AFE0C12E265A0E1A3A7A8E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 7826F119BAB0D9F8EA9DB7F0FD49F1C4 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8683B85C2A41BC4718B8AE8269CF3EBE /* Optional.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7845C3BCE647A0DA5BA10B52A29DFFF8 /* FIRComponentRegistrant.h in Headers */ = {isa = PBXBuildFile; fileRef = 22A2B62DA04BFE9E1E419C2850E2F826 /* FIRComponentRegistrant.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7883840488C582ABEABC2F16EC719F51 /* RLMArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 47C81C6E5FDF0D349F7844EF9EBB0AEC /* RLMArray.h */; }; - 7901A7430A7CDFBBB6EA89241143BCAF /* OAuthSwiftClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 732C8968B42D24B85F923AE6814EE563 /* OAuthSwiftClient.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7902AA4B2048ED232C881D8A0F6B9C79 /* sync_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B4D7DBB7BD36D456B3004E14A5A8C31 /* sync_manager.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 79979F0E994E2DEC532F1FC8A99B9B69 /* OverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F50300C8AF4A3A0BE736C2E99C43B22F /* OverlayView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7A336528FED8820851D7C4B6D04C5BB5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 7A888D4A0107A596E73C20D2AC20C975 /* RLMRealm_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = C6AFD0E7403492EE7A0FA6F5B8637C1D /* RLMRealm_Dynamic.h */; }; - 7BB01C8EC08E68C03D9E7D8708AB45BF /* ToggleButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD507380753C41FA2AE5EA9C5D47557B /* ToggleButton.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7C17E6C8D2C5668D2682865283A72A67 /* RLMRealm+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 918AA79F408516E9CBC3EB2BF1C2D2EF /* RLMRealm+Sync.h */; }; - 7C503452FBF8A090368DEF61210F1C48 /* FLEXSQLiteDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 201B2421CFBBD4791B4AE9FDEE60B154 /* FLEXSQLiteDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CA118863A2C6C91D9A5264B6770DD09 /* Pods-Rocket.Chat.ShareExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 338BA795D36A42FED889E64769A429E2 /* Pods-Rocket.Chat.ShareExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CC0E440B7891C7BF9B240F46DBC35BC /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = AB43F2A2F95CAF6284BBDC7FAD11AE0A /* FIRConfiguration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7CE0283111855B963AD714F209DF58D5 /* StateHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D32862C3EC40DE02CFB051F86A4AAD /* StateHelper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7CE1392F42541A0429096086B35EB4DA /* FLEXSystemLogMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C1E1EA93796037971A4F4DEBF3F1757 /* FLEXSystemLogMessage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7D0544512D04C2E0DD3507F9109ED7F3 /* ComposerViewExpandedDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8863E5B7AD1EC8AA48ABA1C97E081BC /* ComposerViewExpandedDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7DAFC0D022E3BC65CB0237F3364DD4A9 /* MobilePlayerOverlayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7A7499536D94FFE98E8D15071CC2D28 /* MobilePlayerOverlayViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7DDB67D88B512BA7C9A209FAE1FC4332 /* Dictionary+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFF0482A0A936E414A1C081B1B7261C3 /* Dictionary+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7EADEC66F65CF566A52D7955893EC9C0 /* FLEXSystemLogMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F9DE1B50BA52051FEA4AD5B8C7859A9 /* FLEXSystemLogMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7EDDC2BA4FCCC6CFB2B4354F9F16D55D /* RocketChatViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E6D48C056D7ABD83A776326B4507574 /* RocketChatViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F17EF7363D8722D8241D428F81FF8B5 /* Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E2C5056CB2B0CE3AD4F2E3DCF335F7 /* Sync.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F4BB0AF8CE846D5C4601032A739E587 /* SwipeActionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95915708D93AEB94CCCAD96405132D89 /* SwipeActionsView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F6332A3AF73955F57B43797367ACD68 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8DE6134FC27F10590D74AA438A447904 /* de.lproj */; }; - 7FD2FF1E3F041E4C7CEFB085792385C9 /* RLMListBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35744F6F9C9710E653A58645B9FFB54F /* RLMListBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 80064EB7BCE5491F9A6B25DCD37C825A /* FLEXArgumentInputSwitchView.m in Sources */ = {isa = PBXBuildFile; fileRef = 228BA4B7007B34E72502E048F844316A /* FLEXArgumentInputSwitchView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 804F74884F1082AD0DA07BBA46756266 /* FLEXRealmDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EFB3041D0BB75BA64CD495A11C2BA35 /* FLEXRealmDatabaseManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8096CDC421AD608D9B30FFF61F49EC66 /* GULLoggerCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 286C51CC84C40FC29F8719213A2FBF39 /* GULLoggerCodes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80CB112CDED87FAFE95457037B22A6F5 /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3638726DBB87535CFD5E5E857D0839DA /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80E4D5BD066FDD0BF7814A87F4A425DD /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB792682047FB83F911265151339F39 /* WebSocket.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8148B65BD0B7684F6996917D3EBE47BA /* FLEXViewControllerExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAFA3BE6753F2B85D9C808445262B72 /* FLEXViewControllerExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 81A544955BC66402AD98F8D60119AC0B /* Realm.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4B523285C49D4C766B4E3FD2AB1CF8 /* Realm.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 81D10CD3DF27DFEEAE704CB70B4CA37C /* UIColor+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA7295DE7C56010AF51B3BA29417D50B /* UIColor+Hex.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8273F8901BEB241BBF24F6C41E86A124 /* Differentiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AF461CE70B2400786098E539A44531 /* Differentiable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 827DCF2EADEEA402146F38BFD4CF367E /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F56B686F064CB79FA878F59FD921E8C /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 833A8D8C40753C99DB0D7BE7F710A5CB /* FLEXMultilineTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 004371D61FCFE1DF8851BF3F3997962C /* FLEXMultilineTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 835353D62E4BDBDCE6F16F8BD0A21079 /* MobilePlayerControlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6815F73B2844B6C13FF4B7DA032A8749 /* MobilePlayerControlsView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 83619820600BFE3BB02C831F005CFD7E /* FLEXImageExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 307AE0608BFF02202D10550B05B91A3C /* FLEXImageExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83DDF0D1534D39E6DBDCF5E3B19DE05B /* YoutubeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A200004AD159B6358096A88063EFAB /* YoutubeParser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 845ADF03AF6F2310D23A503203D09427 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6CDABEF8661834BC659A48FEF8A10FD /* UIKit.framework */; }; - 846787877DF4AF7541781D3A0D58999D /* RLMSyncSubscription.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 60906A11715B122F22872EFD380628E2 /* RLMSyncSubscription.h */; }; - 849B7636C2282633E41AC2F179633354 /* EditingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BDE4A972BDEB815EC4DB5C1ADF2CFD /* EditingView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 84CCF89EA0B4D878378F05A42C4355D2 /* GULAppDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BF9DE0B1214CF4E8EF154C3A9EDDD85 /* GULAppDelegateSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 84E619A87B2A6A4E5BEC2B1C58EBF95F /* SwipeAccessibilityCustomAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCEB7B936D4BA5528973A1C7D4FFCB2E /* SwipeAccessibilityCustomAction.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 84FF9FE22A43566B9CE6BD4922D58125 /* Label.swift in Sources */ = {isa = PBXBuildFile; fileRef = 139FBF22ACDC54C9663E33C956203D6D /* Label.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8505D625E8B1F455D7A171C1B03F4FB3 /* SwipeCollectionViewCell+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A71A460DF030ABA6E1B8B2F563F3210 /* SwipeCollectionViewCell+Accessibility.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8676579EC1C14FF3401C62CD081F9A29 /* RealmCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCBFC246F8B8154B91889D276D7455E /* RealmCollection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 86BF9ECF36C5F3D26BDFD97C4EFA01D0 /* RLMObservation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C67F527A8C73E899AE7E94094F15C205 /* RLMObservation.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 871EA553269129D998E7088CF0FE649C /* RCMarkdownParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8612B52C91C4C62F080309BD60A1C325 /* RCMarkdownParser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 87419E575E71D2113FDF8E9F183C374C /* ArraySection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4365B1E87A65BBD28BD702195D25CD4F /* ArraySection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 87CD3C48F036BF47747AB116E80EC74E /* FLEXHeapEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C97572B8172FE994E76102534BBFC6 /* FLEXHeapEnumerator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 87F23D512B778CB1F239154C853A1B8D /* FLEXTableListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB49EC4CFB4A7B10920B556F47ADAA0 /* FLEXTableListViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88011FA89EE5AC537849C08A3E707756 /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5729D188C659DF70D6DDF7DD47FD2B6C /* nanopb-dummy.m */; }; - 8867CA7C67B28F87245E8591FC851719 /* FLEXArgumentInputViewFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 30169FC0871AD5AF72946FAEC09AE3FD /* FLEXArgumentInputViewFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 88899BA97231A772686D95A958A407DE /* FLEXNetworkTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 388E518F56DEFE49AC42A20309BD1733 /* FLEXNetworkTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88CCBFEBD20AAD003AA1049BDCF43885 /* RLMMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C101B48D6650673E9604BAF325249BD /* RLMMigration.h */; }; - 88D51D699CDE23D70CE257E3DD3626AF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 890461235D00B989D266E19B3A32A2E6 /* RLMPlatform.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7E70E25DEC9F5B01C65A1A7C47E0BDCA /* RLMPlatform.h */; }; - 891AEEA4060A2B9C42EB566DDC9D3AD1 /* FLEXPropertyEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = EBD99766A864FAB642165FD01C0E5C3F /* FLEXPropertyEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 895E052D1BA18D34026F8AE414695FE6 /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 37E8AB729A0AF60E2C057ED9B6DA8B5F /* cs.lproj */; }; - 8A2F23A2EA8D32700509142EDDB1E4D3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6CDABEF8661834BC659A48FEF8A10FD /* UIKit.framework */; }; - 8A4E9EBCDBA3010A59C61C560E2C9FC7 /* Results.swift in Sources */ = {isa = PBXBuildFile; fileRef = 699EC7D907033B1F4A7F30FA622396C3 /* Results.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8A9C8727244EB8F2BE608E0814A3AC14 /* RLMSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 87CAEB81973810971816E1CC04348823 /* RLMSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8B0EE2E366297E43805A548026C7169B /* external_commit_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A12C6EB0EACD0AD62A2335FB9A486 /* external_commit_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8BB30F7FD758FAA928CFD80844828209 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87BF682A2DCED18405D2C1FAD73FABB /* Property.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8BCF138B777A7C93A782F1C932D9A6F0 /* semver-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 20700EA0BBAAE00008B9A0711A0F38A8 /* semver-dummy.m */; }; - 8C1B94C813C70D1497379D90EF2A0FB3 /* OAuthSwiftMultipartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5F52A533BE0B053C8721359280606E /* OAuthSwiftMultipartData.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8C748D784EE5FB94C202D9CFD8C58F7A /* ThreadSafeReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 245236EE29F99E9B548DF1C34197B361 /* ThreadSafeReference.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8C76B6BDD3BC280ABE4512232925ABD0 /* MLShareButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F1E7F77D22CC61D5CB86EBC4C85E377E /* MLShareButton@2x.png */; }; - 8D51A84471A9F493CCAA5F5C69B2F718 /* RLMRealmConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6D9FB553CD5797C918211296D084E9C2 /* RLMRealmConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8DCAB7C722F01C78D89CFB8EA60575D1 /* RealmSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EDF1B2963056E9CBB2B68C27E4C81B4A /* RealmSwift-dummy.m */; }; - 8ECB296FB77765C0DFB207DA39CAA03C /* RLMSyncUser.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8B7A53D4B7AE35D3CDC1509C759858C6 /* RLMSyncUser.h */; }; - 8FBA09638F44D3E142635A796D6A011A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 8FD229CE3644D5A113FF6174ECDBC96F /* SwipeCollectionViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D669219E202A75BAD93EA2CB465832F /* SwipeCollectionViewCellDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9019E46D1A38ABA9D2F70A4E3C0086CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - 9048482B727C015295B9CA1CE931F3D7 /* FLAnimatedImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4A24816DB030E5F44CF4B64BD62AB56 /* FLAnimatedImage.framework */; }; - 9073F8C66F19251C41079A71C53AF88F /* FLEXHierarchyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C18756FE4FACD12129EA4E0285D54800 /* FLEXHierarchyTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9081FAA8A6F6D7EA4F651AD410FFDAE1 /* Semver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDE87492ECEE718DCF81E4278E79D8B2 /* Semver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91246CEB82E24612F8B85B2B07E9D8E8 /* FLEXClassExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FA1A7023998A1DB922519ED94F57F9B /* FLEXClassExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9177563606236AB10E39DA5B5B109727 /* FLEXNetworkTransactionDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBE6353E48C14F67A42E1FDA0436985 /* FLEXNetworkTransactionDetailTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91B5899ABD99C3BD70047349D634E0F5 /* OnePasswordExtensionResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 86E28611DC9981BAB3D3104D0771EC30 /* OnePasswordExtensionResources.bundle */; }; - 91C29956F0BB49E1EB471659C2FC16C4 /* RLMSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 77FEFC05F7713D8998FD9AD230822C58 /* RLMSyncManager.h */; }; - 91C7065DC6A750F47209DCAF9F6DD0B8 /* RLMCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF497262555FFC94E2A686B66343EBE /* RLMCollection_Private.h */; }; - 91E73ADA7F0896079FB2C6C2145A8AEA /* ElementPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 904E99BDDF757CBF3A23B4BEA0139C5B /* ElementPath.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91F851739A0B2C01DCB8746CAF7E88E9 /* FLEXArgumentInputDateView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7557C08BAD6F256877C525791305F256 /* FLEXArgumentInputDateView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 921E8D49B9DBDFFF71A75161C62195F3 /* RLMArray.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 47C81C6E5FDF0D349F7844EF9EBB0AEC /* RLMArray.h */; }; - 92437488F9FDA864989F2DACFF5292A1 /* FLEXExplorerToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 641D5E20394775152471BA273D2DDAD8 /* FLEXExplorerToolbar.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 92590055B55105ED909F32128C3C409C /* RLMArray_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 3754C508CFCEB5426546F297A424565F /* RLMArray_Private.h */; }; - 926C5432DAEDE56930E832E27A1BF098 /* RLMObject_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4156FEC2340172AE6BAC86DA34101E5E /* RLMObject_Private.h */; }; - 92C01EA2BFF96B977E4FB37C66E99EB5 /* RLMSyncConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4C77F7EBFF031407CF353689506884FF /* RLMSyncConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 92D9A966DB0411B2E1564D276C84A47D /* ButtonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = E69E3D818DC80F6D47335B112A8B592F /* ButtonConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 93416FAA3E234B619E240CD16068729D /* FLEXExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0669CB6A9948A75F55CD39F2F0F2A08C /* FLEXExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 93EDED29EB7334811E2B65D0D50115D4 /* RLMThreadSafeReference.h in Headers */ = {isa = PBXBuildFile; fileRef = E8B2709DAEF95AF1F994511C7FAF1CEB /* RLMThreadSafeReference.h */; }; - 949B323E9DEB7A2AD033410D8596CBD3 /* FLEXArgumentInputColorView.m in Sources */ = {isa = PBXBuildFile; fileRef = FC521FE9A86A5E8054EB6406AE25342B /* FLEXArgumentInputColorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 94B87F1F84E296AEC558DF513BD3FF81 /* ComposerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F999C35A673A0094EE7C4FBBDF69125C /* ComposerView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 95340A3F617582973169B40C09B3DE6C /* ClosureSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37F0161E37F277A1BC796C1E07D723D5 /* ClosureSupport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 959A2D0B2DA03B12B7F5C4C06107739B /* FLEXArgumentInputJSONObjectView.m in Sources */ = {isa = PBXBuildFile; fileRef = EA8239026C7BF50DBEACE511DAE2A23B /* FLEXArgumentInputJSONObjectView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 960831540BB1F704C980F5F5BB738CF1 /* placeholder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 119EDB076A8E33E4BE05FB1F3A0D5414 /* placeholder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 961AB3D3EE1FABB45C3BFDE8408F365C /* MLPauseButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 49BCC056FB7BF3EA9FC4E0E4B4395E0B /* MLPauseButton.png */; }; - 96213FCE8B2B59D37085F9796D3C1A1D /* FLEXDictionaryExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7399638953BCE3E0701EFD2F87E4D294 /* FLEXDictionaryExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 964294C40DC5BDCB61379A1439DA90F7 /* RLMAccessor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8435925FA8DEA6EC0C99379D9831AF8F /* RLMAccessor.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9647A905DEA97412056430D2335E8D04 /* RLMSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E4B95667407F6A5687B61C310AD5034E /* RLMSchema.h */; }; - 968AD7978374A2E4F917A57DC3659AF3 /* collection_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75836FD49C0AEC0D6148F9535B154192 /* collection_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9696FF3D969C7802678DAB4CE6144FA4 /* Slider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22BCB54C6D895ED964518BE798786952 /* Slider.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 971F265F0C4290EE4F05090FA1364A11 /* OAuthSwiftResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92EEF2BCE4F1E39DF6D6C38FED6593DD /* OAuthSwiftResponse.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 97594429015AE49F590E5FFF585D0E09 /* SwipeActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7193C8CB95F6E2FCC50F8769E69356FC /* SwipeActionButton.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 97C8ED600ECF970717C3EE280F81A0A7 /* MLPlayButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B331FCCD23D55EC94BBB3F4D639AD704 /* MLPlayButton@2x.png */; }; - 982052BDC43B8864DF0EA201CA3F5F00 /* RLMResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = E68F02BA7C5F71230164F0C74DE1E142 /* RLMResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 992E2C9C05AC6623BF99E0F325514A04 /* RLMSyncPermissionResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = 277852820C67991EDB54119236884B33 /* RLMSyncPermissionResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9A0854B0EEB48DCC2F59555A5A9171B7 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = E358F7841C07D325480255669E11A042 /* RLMRealmConfiguration_Private.h */; }; - 9A2FC3805A58ABD42AFE82CA255A070D /* FLEXViewExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E56093D5BD860A799A5DBA40E8EF830D /* FLEXViewExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A78B46BCC232214C6C1420A7942521E /* RLMRealmConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 647477D344D6FD8BF30A2927E4528EF1 /* RLMRealmConfiguration.h */; }; - 9AD95A89F9666214052F6CC91972A4DA /* sync_user.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF9BAEB06A933A49C63F4FC9B1DB79F /* sync_user.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9AFBE39E34BC64702AE7FD2243590222 /* FLEXGlobalsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 911E9503B0B27F20A254582755AE6F05 /* FLEXGlobalsTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B48FE656C49601D323748362C4FCF17 /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 194CBECC087C27DA2103D2C404E22B14 /* FIROptions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B58F68B28FAB958617A461F1BD49816 /* SwipeExpansionStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 734B24159DDB59425F56805686E80B16 /* SwipeExpansionStyle.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B8B2C76B95C12702675B7BF45998036 /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = B9A2A2EC617C89894A5250173542C923 /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9C512A1597AFEBE5C611F17DCEA38A88 /* OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 708DE808437E97D0B1FFE34CB5F4EBE5 /* OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9C540CB9E8903ED4A62FDBDA204165E2 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 497AE74B8ABFE5ED6D57484C65C3EFE6 /* Reachability.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9CE3B1A3091D17A00FB99755A5DA978F /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B8863FA0F7611CC597E6457F57798E3 /* FIRVersion.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9D95B2CDA064051F72219EBC220CE20E /* RLMRealm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8286CD7D6B521A659ECC0D10DE5D1C45 /* RLMRealm.h */; }; - 9DAEB8DDF210481C67E857CB1A66C584 /* FLEXResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B63423C7D950FEF16615BDB00424A52 /* FLEXResources.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9DDBAC387EC51F3E1EA10D2B8AA58A9F /* RLMListBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 21CC16E3C277434A36101D846291C4A5 /* RLMListBase.h */; }; - 9F337B407802C286FDAD64AFB40BD0E9 /* ComposerTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A316EC8C433D8078ABE58BEF7C4B389 /* ComposerTextView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9F7A7D3EE184BC5E3181FD94177CFE58 /* FIRComponentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACDB5FA5E76926989C3D043551E0F1D /* FIRComponentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9F9BE49C03DE4D2B6DB47E0E2AABA5AA /* FLEXLayerExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB14B0DF8B2530D68C6278241BB7A2F1 /* FLEXLayerExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9FC88C8BF32021F3E331A417E20D4184 /* FLEXDefaultEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6390EF7AE2F22559710F18DBE7E0E535 /* FLEXDefaultEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A0CD36483C0598453EB909ADA2ED241A /* SwipeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606926E9F514458AECB2301C96D7B8D5 /* SwipeOptions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A177345ABC88ED1488545A0FB2960F8E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1D0A8BDF8DF67F23E5050A0BE3A1242D /* Assets.xcassets */; }; - A2110A2C1A5F5855E3151A623B9549B7 /* results_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29BE3CC535BAB5E938FF22E4A05DD41A /* results_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A2553B4FB766F53A52B8B411EC8632AB /* UIApplication+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF45815F9976193FA67AEE42BD8DB884 /* UIApplication+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A337CE5657F3EC19F417EAEA778036D4 /* FLEXArgumentInputFontView.m in Sources */ = {isa = PBXBuildFile; fileRef = 12A1F2FB32D503A912D131AFA914617F /* FLEXArgumentInputFontView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A33D2BF9C580452464FB688052C25D4C /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A919D5933078E73098BB79939BD03A50 /* RLMRealmConfiguration+Sync.h */; }; - A350A55D21C3ED330F418737F620287F /* RLMCollection_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 4BF497262555FFC94E2A686B66343EBE /* RLMCollection_Private.h */; }; - A3B39710335F5B9955967BD5A84603B2 /* FLEXInstancesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 328020A2C8DFA9E6327A1EEDAEE98DF2 /* FLEXInstancesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A421BF28E12DA3932A56688873EE2C4F /* system_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73991BEAEE18D88AB5638D2D0D67E5A1 /* system_configuration.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A53245120FA494D6FA9244A6A4D70662 /* RLMResults_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D8126873ED1D9F90C833C21468FC00C /* RLMResults_Private.h */; }; - A55F014312257DB5DC68A00C7E9C6192 /* FIRDependency.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D00DE7A1E860DB1CEF37001EA4040C5 /* FIRDependency.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A5A1C935E35CC81EA82F05721EFC0E12 /* MLIncreaseVolume@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FD5062F29C9E91C09758AE5CA17FB955 /* MLIncreaseVolume@2x.png */; }; - A5B95ADB555DFF404755528B3B4306B6 /* FLEXInstancesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EFBD6250A9E8697FF8BEDCB7CA5AEFE /* FLEXInstancesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A61564E10118296875761D2AECBB958C /* GULSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = DFA13EF1EE21432BC8A7B0EBEB5C67D9 /* GULSwizzler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A626018E3C85121046C224601584AAC0 /* FLEXSystemLogTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EC1745041C6EEB684D6F3A792354688 /* FLEXSystemLogTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A64595F6087D4E8CF1D263D098E7BB13 /* SwipeCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FCF3CE27BB830A2562D483ECC97AC31 /* SwipeCollectionViewCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A6DC4DAE2837A9D868A46D24850BAEBA /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 867E9EE6BC2BC095B44C2A184FB0DA40 /* FIRApp.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A7877C478459687CF91D7DB66EF8BFCF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - A7DAF83A232F3AFF12042EE640E9B5E9 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2C17357D7810B44C7A6B0098377F0D7 /* HMAC.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A82DF7004D25FBC1F0CC884A5FFA2448 /* ImagePreheater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E65B6A242085971678624E3A9370E56 /* ImagePreheater.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A840AD06C57F587BDB8B86C2F873032E /* SwipeCollectionViewCell+Display.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACA9F2B0BB9373FD4FFED6671505035 /* SwipeCollectionViewCell+Display.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A92ADD3740FA704494BAF9604A377302 /* FLEXArgumentInputStringView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7231D01825C44F9DD92A006583CA1681 /* FLEXArgumentInputStringView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A93A33BA37E0F8F06D9422048341AD21 /* RLMAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 466045FA36C4BE1E3A9F1536F7AA11D3 /* RLMAccessor.h */; }; - A94A72B4F0F7AF31713E35F123EA7E06 /* RLMSyncPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = 954576F150CB7988A3EEE2A7C2D363C4 /* RLMSyncPermission.h */; }; - A9763F2B0079481E3825801458BF954C /* AnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2CBEAF8B7CC922BBB62D3998F5BF8E2 /* AnimatedImage.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA36FB3ED2AD7BCCDC2FBA54A7272E13 /* FLEXLiveObjectsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11F83FA488C5ADEF187432EE680F7169 /* FLEXLiveObjectsTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA5BB363CABC8ECC85A73C04BED3F72C /* Bar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4DC8419C707CB7A58B1A4C8BD9EE8DE /* Bar.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AAAD3AFCB3DA146AE70A341780E65D95 /* RLMSyncManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B3F8884283789EF7FBC4C355116E49D /* RLMSyncManager.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AACB6BE7C7FD66D21A350F2ADD0F1E28 /* FLEXWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = D686087ADD0B13E830F36F5837F796CD /* FLEXWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB0F8D79FC6BE947D4B47F4D0AED6B03 /* FLEXArgumentInputSwitchView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2304C6B205F918C7CDC63EEE18C01A55 /* FLEXArgumentInputSwitchView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB3A6BE71FC87F1243C5E6E50551A423 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A6AE2E6CC152954E232ADCF3DE699F68 /* fr.lproj */; }; - ABF7A93CD20B5F4A84E5CBDA1B3B4413 /* FLEXArgumentInputDateView.m in Sources */ = {isa = PBXBuildFile; fileRef = F4838BF36B9A705547F8FCA3B111A0B3 /* FLEXArgumentInputDateView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ADA03CC209D58DAA15CEC9223F935DAB /* UserHintCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B5CD11230D2F44727ED8FD1E00FD4BD /* UserHintCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ADFBB078F4C92583E61F12F09C297143 /* FIRComponentContainerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3D21DEBFEBC0B31AB1DF0B07694330 /* FIRComponentContainerInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AE2E3C4E5184A3F8989E44D387B8823E /* RLMCollection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 685CE693E930060D5FD7C11B923C96A3 /* RLMCollection.h */; }; - AEE07C982B4C91DE048AB695F654EC71 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = CBC26272DCD409CC0C76EBDCAA87D89F /* ja.lproj */; }; - AF3FF59DB860B1DCCB91E52BFD878BF1 /* RLMJSONModels.m in Sources */ = {isa = PBXBuildFile; fileRef = B368B6CFAECA096883CE6162F9F86AEF /* RLMJSONModels.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AFB0861892F28F386E3964A57440340D /* FLEXArgumentInputFontView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E6FAE14C2A7C125E403B49D407ED004 /* FLEXArgumentInputFontView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AFDAA31F0E9EB77EDDA9E53ACC86A71E /* FLEXNetworkHistoryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 68CA2E56789DFE459DBB556DE0B0584F /* FLEXNetworkHistoryTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AFFCF6E38DA31E93A3D3D43DC1DC8492 /* HintsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC76610BF8240039B04F54723129EB01 /* HintsView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B1218315F1F06D9CFF492ECD99F134E6 /* Pods-Rocket.ChatTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A97A6A7888761B1D76B91170AF650444 /* Pods-Rocket.ChatTests-dummy.m */; }; - B13C1F9B80AC7FC91B582F153504BB0C /* ImageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6C933EDF50AF26763FB4801B6266848 /* ImageRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B16CC2492CA7D495FD0B283AB751FD2E /* FLEXArgumentInputNotSupportedView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFC53FC61B729058278F1AE348127893 /* FLEXArgumentInputNotSupportedView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1C47A5F9D18AB15AA084FF069A2ED61 /* RLMSyncCredentials.m in Sources */ = {isa = PBXBuildFile; fileRef = 745EA400F9DE8A48EA7CCCE89EE9EE6B /* RLMSyncCredentials.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B1F5F7B19B98AF680B58BF4BABB39B7D /* RLMProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D906FA05608F00FFBBA9ED705A67F54 /* RLMProperty.h */; }; - B2105D60BEEE1ED86EA6921D87C3FDF9 /* SwipeCellKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FD17FE3AB2744C9F4DC32EA60D2F99 /* SwipeCellKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B2A1AF5D0CCAD53EB819B424A1B6694B /* RLMThreadSafeReference.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA540CA0E2F509CC4477BA837BEFE670 /* RLMThreadSafeReference.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B2C3DE98C725712268E37D28812DEC64 /* SwipeTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA4B0A4F28DEDBA17D88751014D309A /* SwipeTableViewCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B309093E62938D2401251C4F96F05D03 /* RLMObjectBase_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 87024D93078CBF14CC11C6C068547119 /* RLMObjectBase_Private.h */; }; - B30A6B3DFF83627671A067275B1F5A53 /* 1Password.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D7E5AE0D8500C740649AE1D5DFC55C70 /* 1Password.xcassets */; }; - B3420A14A2812FB194407ABE56459E05 /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4061DB9DCE5A003587A14EAF6065A17C /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3E63BDE477F8B822A46D70FB51C1C2F /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A8463B94FE9DE106ECDC0AACCCC37B8B /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B50EB15E008BE595E9B57A94E7BB1A78 /* GULReachabilityChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 490BAFBA48AE2FAA2163D53E7820C4DD /* GULReachabilityChecker.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B534C860CAE003002A6C216213840D63 /* Data+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41048F51B42851042EDD6F37BF450288 /* Data+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B5687A1A2A88D1900BAC1430A1F5F5C6 /* FLEXNetworkObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B14BCDAFAA3C1CEF006369BF756B04E /* FLEXNetworkObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5972653001428D8F23B76B9CE644C17 /* GULLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = E1D9156B52F527B2FCBF2D783DE5E94E /* GULLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B5AC98CC1085644465F733DAAA849856 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CB817525ED6968FE2191EC3E20574AE /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5C26C6DFC69CE497C613F5E9E3C5E98 /* sync_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22A07D82268E20A194FAEB660CB9D60E /* sync_file.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B5E733E01A376FEA48EC235A38AB9214 /* FLEXKeyboardShortcutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 26647F3074E9C668C91615818C904646 /* FLEXKeyboardShortcutManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B65089CA7D5EF1FFFF0EEE6259CEB95B /* RocketChatViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 704582F8880011AD6A11E2A93085D9ED /* RocketChatViewController-dummy.m */; }; - B6553CB632A55750444FC0E1B49C6AAC /* FIRErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA8A24571C847DB0021A7164E9BA91E /* FIRErrors.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B675F892C4E2C67712FB974D49E1B9AF /* ObjectSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09946E47B12567A6C085155432D02C /* ObjectSchema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B8DD324F6B9B467EABBF8D02872F46FB /* pt-BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BA4D9BE43C93682F960C151DCC94978B /* pt-BR.lproj */; }; - B912E0BF47673DC5E5C7267C43ECD745 /* FLEXExplorerToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 096AD7DEE43FA647EF7944B6F1034949 /* FLEXExplorerToolbar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B93062A59CD779C8346F250C3603B865 /* RLMSyncUtil_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 999CED0ADD0E00299A347C4B0018B4A6 /* RLMSyncUtil_Private.h */; }; - B94B072D52B97B5DF6B4A826331358E6 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB24BCF88EB03A8FB0AB9EB0285E8BD /* FIRDependency.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B9756D59C04C2A1966CD495FD5311D32 /* OAuthSwiftHTTPRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8665E59D3E588CF8565169CF753F276 /* OAuthSwiftHTTPRequest.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B99B25299780B6DB24C6EAAD0633BE3F /* AnimatableImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B94A79E375977F3C13DAAFCAAB04ED /* AnimatableImageView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B9A73771B15ECE69E6FC1C72FBB5291F /* GULNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = EA693B1DD36B4704718D9482B3513C95 /* GULNSData+zlib.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B9C1F15B0B479938213DF20C17F8CD6B /* RLMRealm_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C6AFD0E7403492EE7A0FA6F5B8637C1D /* RLMRealm_Dynamic.h */; }; - BB4179609A7A13912F210BB20DB717FC /* RLMMigration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1C101B48D6650673E9604BAF325249BD /* RLMMigration.h */; }; - BB51DFA71D7643C796864ACD09EBA53D /* RLMObjectSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 16794853642C950B677D5C19AC176101 /* RLMObjectSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BBB1CD194E297BAA37CFD123061B115F /* RLMObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 18FA1E414999CA28DABFAD6BB90A7C20 /* RLMObjectBase.h */; }; - BBB60A30C1236658D38F2D8B8D1A8101 /* ImageViewerPresentationTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8411D7490056AC3826FF0DD383097C48 /* ImageViewerPresentationTransition.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BCB1D2A3AE93F55D8AED2E2F87359EC4 /* GULAppDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7481AFE513428003FB3F8470D2ED7AC5 /* GULAppDelegateSwizzler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE85285C92AB8A1827E07188FE4D217E /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FECDBE39D9C91B48FB64208F9DE1A9F /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BEBAA6F4912D2BEB99A775C20D4AAC81 /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AFC00EAF2325960ED98559CE516BE31 /* SHA1.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BED2C817FD4B09280137062FF77118D4 /* MLCloseButton.png in Resources */ = {isa = PBXBuildFile; fileRef = A6D5F5F705506738A442BBC4957B5C78 /* MLCloseButton.png */; }; - BF0CD0F3B561CAFC70F2B7A1CE374544 /* FLEXNetworkTransactionTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8511C3C119919F148DF2CF42006E787E /* FLEXNetworkTransactionTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF30826D883BAAE122E11E7DDDE0651E /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 89585EFF3AD3296CF6F3D043C3C30D86 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BFB2A1A18CE3FD343BC91F0745CFC4E0 /* RLMSyncConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 0F2A31AC43A899263C655766ABFF61D9 /* RLMSyncConfiguration_Private.h */; }; - BFC881B72AB9E0403FF84D2D1D9D766B /* ToggleButtonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CE6CD8EFD0DA228F72B0D11A866303F /* ToggleButtonConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C009658EA7276A8DFC84CFFB5EB15903 /* RLMCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 685CE693E930060D5FD7C11B923C96A3 /* RLMCollection.h */; }; - C02F2CE57561E0AFEC77902CDB16B3CC /* FLEXLibrariesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F248EFE72289B774E4BB307019116B7 /* FLEXLibrariesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C04CA7ADED6D4028304C2CBFE803C7D5 /* SwipeTableViewCell+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB48A256934CC71FD42C7BF71C4C7615 /* SwipeTableViewCell+Accessibility.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C1CF2970B59AB417D5CA5FD6A75B4CED /* FLEXFileBrowserSearchOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A1B80182387C944CFFA36AA21C6A032 /* FLEXFileBrowserSearchOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C20D442B8EA8D6CFC673C2D83811AE54 /* Nuke-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 68666A74F592E2619283E9E11748F9E4 /* Nuke-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C210D0204740A6A4B60BA845AA039068 /* FLEXViewControllerExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EFE871E984CEC5ED7185A3C63C9868D /* FLEXViewControllerExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2215BBDD6180E69500E5639FB3559F1 /* NSAttributedString+Markdown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542348CB51352E230F3EA64F8EA04A95 /* NSAttributedString+Markdown.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C2A8F6DA340D1129A60A81B2784F401D /* FLEXArgumentInputStructView.m in Sources */ = {isa = PBXBuildFile; fileRef = BD4E945F8F0FC73F820DE02A1A449C60 /* FLEXArgumentInputStructView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C2AE39C35820CDD82239608DA5C2C701 /* sync_metadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 095F35593572F9E7971326256900B713 /* sync_metadata.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C31639B35BE2B1366F5D32B09FE2B685 /* FLEXArgumentInputNumberView.h in Headers */ = {isa = PBXBuildFile; fileRef = A4B4FDB3CEB11940EE828F1B9D4E6A0E /* FLEXArgumentInputNumberView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C35F8FA74CB4D286BDBB8B53BB81246E /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 489D3998B0EA8B5FFC734DB9DB330F19 /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C380BE0A77A11A663574776EF6C6E49D /* Pods-Rocket.Chat-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 380C67C09E012750FC968748008038D7 /* Pods-Rocket.Chat-dummy.m */; }; - C42193392DF7800AE87903C5C5821D44 /* LinkingObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3443C30791D3D893BA34B2EF68F7F11C /* LinkingObjects.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C479CA38E9D10A533B5E35C08D56A448 /* sync_permission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 776CA75A12D83DD573376E5CD0B68859 /* sync_permission.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C4D49C7C9FB3B64C2AC9BBA6B2FB995E /* RLMConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCAB46B83CC4C6F7B11BE44B0EF8E81 /* RLMConstants.h */; }; - C4F53054329795D4FE025F3ECF65126A /* RLMCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7651BBFE595549880C54FD738B09E52B /* RLMCollection.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C5C2B9E4C2CC80DFF7AED1E41ECC86E1 /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE0E1418996497A2EB9F6EB5C16DD97 /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5D07F11C8C05788A2AF6D1C03F5CC6F /* FLEX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 299DFDC663FA36689493F509E295226E /* FLEX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5F52A847402C1E01A24525EF78BF744 /* RecordAudioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B94446A8A5523D7777E71F0E578543 /* RecordAudioView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C6A4D8E394028754793017A163874171 /* Algorithm.swift in Sources */ = {isa = PBXBuildFile; fileRef = D015CE8582CD86E9AA8D23D0B0615826 /* Algorithm.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C6A8658D80937740028BD6CAFF4F0A66 /* SSLClientCertificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DF49FB633EBDE1F0F4CEF04221846 /* SSLClientCertificate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C9C47AB435D3FAA18BF92BB3D204C560 /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 962D64A210234D1F131A37BA50462ED1 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CA33B895059260AF36A5C06FA4A52B5B /* ImageViewerDismissalInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F409184780D14E976C75F31A60CF7AE /* ImageViewerDismissalInteractor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CA7E5B2F6FA5A5326C1FB0E2A6F6D4CA /* primitive_list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 392813035591A97ED5B33ACBF459CA9A /* primitive_list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CAA9C2D8A88E5C7DA950B00FE6B33523 /* RLMSyncUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = FF6277F9D0FB4A8398CBCD8C9A48AF23 /* RLMSyncUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CB03EB6F3E4CD458D028303C3B9CA875 /* FLEXObjectExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E011E78C804E28C5A8B415BC74759D4 /* FLEXObjectExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB4FE319860D21A3EB356C6B2DDDE0FE /* FLEXSystemLogTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D0057AC29575011F57CFC8BAE8651B40 /* FLEXSystemLogTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CB9E17CEE9492B428062695509ADC946 /* weak_realm_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 052BEF575B27F61DFEA2194251097584 /* weak_realm_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CC34682A0A405C5EE505D50FA32D140E /* RLMRealmConfiguration+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9A1391252771BE32FDDD1B84A61A6BF8 /* RLMRealmConfiguration+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CC39795960C2D58C30E7DABBC5A7F78C /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9481591ECAC4AA58CAEABAC0D861F257 /* Utilities.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CC4B281179F5D62904CB62568B3F8A35 /* RLMObjectBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 18FA1E414999CA28DABFAD6BB90A7C20 /* RLMObjectBase.h */; }; - CC941E35254CED5F91B5FEB3D6B2B4EF /* collection_change_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7DE9B5BCA3CC4393E359C30544C45ABD /* collection_change_builder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CCDA47507B5BD2AB538C51C50D6859C8 /* FLEXTableLeftCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F13F7DB64EE32E632922628F6DD93 /* FLEXTableLeftCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD62B87094FBEFA7EBD6A3CFC84C2440 /* FLEXNetworkTransactionDetailTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 796D6E828A32875CBAF3D07DE2C01109 /* FLEXNetworkTransactionDetailTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CDD613052E7D42F067D604B6FA368E42 /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = B954B665FCCCF2A2EB8073591EFEE4DC /* FIRComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CDFF7D09D53A8CB43682D3E16C139DF4 /* FLEXCookiesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 791E3425ED4FB137B8A6C6FAFD275430 /* FLEXCookiesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CEA5D4D446C04E511839DB05901C80E4 /* thread_safe_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DB5AF741E160861E85CBDCB39E2AED0C /* thread_safe_reference.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CEB3633B632C9DB24AA7A04616D02873 /* FLEXNetworkObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = D3CEBE0233D28136D2A04E0C03E70D4A /* FLEXNetworkObserver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CEF3C37CBDDFFA28EDBA569A9F786A5B /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DE1D66692297F513981267E8F1E8111 /* Starscream-dummy.m */; }; - CF017FB6E6F2B4903FCF3F408C8D88B7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - CF75EBE7AD313A4E3CFAB2D6D3835CFF /* FLEXIvarEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7698B58E7E99E6F0586427618D5275C8 /* FLEXIvarEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF8FEFFBBB2394D158067373F63E0C57 /* FLEXManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 954304773D6919A564C71692A564BC90 /* FLEXManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D002A16290003D21573665DEE4CBACE4 /* DifferenceKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F68093A764C4C49C1F1917336471BA7F /* DifferenceKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0738B2AF5BAED8B8C45BAC875BCE9EA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2743375C21685AFF14997E1A9AF3E8F9 /* SystemConfiguration.framework */; }; - D0B0E35D40EB37872E430FC35710CDC4 /* FLEXFieldEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9594D9DDF1CB6DBA34A18E1483172857 /* FLEXFieldEditorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D0C47BFC6EAD6C24B9531DB57C474418 /* FLEXLiveObjectsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 05931132F451BC03A5EE7546D64ED046 /* FLEXLiveObjectsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D0D01ADEE2AFD6069B0B3DB9061252E3 /* RLMResults_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8D8126873ED1D9F90C833C21468FC00C /* RLMResults_Private.h */; }; - D20706185CCE06311BC52F5D88043886 /* RLMObjectSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BC41362F624813DB0121D02DDC94265 /* RLMObjectSchema.h */; }; - D2EA0C1CB6BC0939457BA4FF7C2749EB /* MLReduceVolume@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = EFA8DF5E3270583AB6DAC0905A5B8CAB /* MLReduceVolume@3x.png */; }; - D3BF89154FA7D53A91376AA37F856A38 /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = BE64886F86F0117BC5EA565A6D52F486 /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3DE7370B2A6D5DDD0FC7C7721BF16F6 /* index_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 824A72FD55533BECB0B1E2E255A078AA /* index_set.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D3E75BF1CD71E652CC45FDCB4AE14614 /* Collection+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E2E860CA41D9D36DE6F8E7BD7D39B /* Collection+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D428679E58A37A0C8B646C1D3A1B2454 /* RLMOptionalBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 27B01EDF686D5010CEC58C63A0F6282C /* RLMOptionalBase.h */; }; - D4EBAA9CBB8A66411C3D08D674EC66F7 /* FLEXArgumentInputStructView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AEB16AE246C4FFD97E44353A092CB63 /* FLEXArgumentInputStructView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5CB6A5A0916147E91A6F83A9BA95553 /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24D95733F97323A17B730A07F9A669B7 /* Realm.framework */; }; - D65B0395C3625D826A81E11E09958334 /* RLMObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E2892F69325FF4818F125392E0408266 /* RLMObjectStore.h */; }; - D691B844E7F52EC3B687804153C8F60D /* RLMUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = E32205BDE1924486B4B64CB6643A662A /* RLMUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D693CD3B3281237B467754A53E19197E /* RLMSyncSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 634A77B1897FCA978E8B0425A659A00D /* RLMSyncSession.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D6BE85614C1AC719C3DD8898DB4CC9EC /* FLEXGlobalsTableViewControllerEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = B22EB28C8530725AAF2B6E74CAA4EC53 /* FLEXGlobalsTableViewControllerEntry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D70371FB44BC08E2151BDEB1C2DEDB5A /* GULNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BB7D3EDDCEBE6DD3FA5F8CF77CA478 /* GULNetwork.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D71D2A28A1A0B5741F08E6F556FA59C9 /* RLMListBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 21CC16E3C277434A36101D846291C4A5 /* RLMListBase.h */; }; - D73A7657CBA5471E2BB5AC3282BD3487 /* RLMNetworkClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = BE1135C4D86EED32F1395B6190A04D9C /* RLMNetworkClient.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D7E1302E5CCED44B57B2B8F61ADBAA64 /* Pods-Rocket.Chat-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 418A3C16F97F460EE04C82B1B36621A7 /* Pods-Rocket.Chat-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D808C6A37C157106940E3F1B03E4A9BD /* Element.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0DA500E4E163BC614C9692435D31BE0 /* Element.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D83FEFEE1A4B349DEF6E3E09E7DBE43E /* RLMSyncConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2A31AC43A899263C655766ABFF61D9 /* RLMSyncConfiguration_Private.h */; }; - D942CF48DB8D7CC5F8AB865B281E0DDB /* ImageViewer-Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 09D9E581152A01264DF9E411E22E0819 /* ImageViewer-Assets.xcassets */; }; - D9EE5087D2A5AEFF5AF926EFDDF47518 /* FLEXKeyboardHelpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E97F23C0E26C550CA50F7861969084 /* FLEXKeyboardHelpViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9EF9C2BDD5B5902F16EB9A99163D9A0 /* FLEXHierarchyTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 57E94FD833AFBEEB790E84B28BE6A8BF /* FLEXHierarchyTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA961F6EDCC6F524CBD98F2AC796DC1A /* RLMClassInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C3A69AF514D140C715C44E2515DEDA74 /* RLMClassInfo.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DB7F87EF2B6AB1F06B4F796C1A336173 /* FLEXMethodCallingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEAE2D94E693CAD03947EC2EAA74996 /* FLEXMethodCallingViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DBD2DB2B3E4C9EF8E503058751107DB0 /* VolumeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2054806D5B8F9F2A8778543E4B64ECC /* VolumeView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DD004138AA703ADBFA5D4DAA77133BB1 /* FLEXFileBrowserFileOperationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28C3ACCA7E93ED9D31C43924C1E50631 /* FLEXFileBrowserFileOperationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DD7C39AA749F46CC9AB3CB8E0D2EB771 /* FLEXDefaultEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FC5AEAE09E133FE94E45F98F36F2E29 /* FLEXDefaultEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDA0F5283587E5C96C70689AF0A895E8 /* DifferenceKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A25AFAFF9FA4E67E46CED6B319A00FE /* DifferenceKit.framework */; }; - DDD74FCA27A8910DA70D8A6831429F42 /* MLShareButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0C94EB5F0B5BA118E9C92227C286477 /* MLShareButton@3x.png */; }; - DE8E53C0EAEBC74FC1884E602D54BF0D /* OAuthSwiftURLHandlerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21684532737A2E530BB95EA450A196CB /* OAuthSwiftURLHandlerType.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E01A5F6DDF9217A1263917744D577556 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - E053CF4B5020C29594E7F90AC518F29A /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB803F4FDFE5F31571467AF6725768F /* Migration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E07F87B657AB63942E8EA86E7BABF367 /* results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612147161C426C9873A0899D260E9DC3 /* results.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E0CC89B41E54E1AD161B834EDF248223 /* RLMSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 2A9EA71CC98E3516152E5C31F1080C4F /* RLMSchema_Private.h */; }; - E0F0D4768CF0023824F8811C920EFFDB /* cancel_audio_record.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 9F7B9EDF0A2A78703CBFE722D1C53E88 /* cancel_audio_record.m4a */; }; - E10437DF3D2FD6F52CD3C020995F7D8F /* RealmSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B6DFB167AD792BBD9286517AAF00F507 /* RealmSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E10D659BE703378BD476AF7A6FC17C01 /* RealmConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0D9BEB8C0448D3D332BFEB35A1786A2 /* RealmConfiguration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E12991EAF25EE58531030FFAE305B9C0 /* FLEXExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F42DC90BFF3DAEB06ECEE25E7E1B22AE /* FLEXExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2020BB27E471BF19939A50A4965C95E /* MLVolumeButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C5FFB80B58CA96F03700D3C34BCAEE0 /* MLVolumeButton@2x.png */; }; - E213A509DFE3AB2FE9D316CA18DC39B6 /* GULNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = D4CD4156A4D93128A73BF9AE09B2FADE /* GULNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E2EBC05CCE1809F4D2DD7919DD1D3FA3 /* ImageProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE66F2F2C0CA9122E1CF96EBFAA5C09D /* ImageProcessing.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E3542C75F42CC5AC771DD13A09B44544 /* NotificationCenter+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF4F35CF41297CDCB6C12EA242D87EFB /* NotificationCenter+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E370131B1746DD2771B2C1C012659EC2 /* FLEXClassesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 169B7C3E2C83D2BD40A05337FC1C55D8 /* FLEXClassesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E3B2697F6230BC60E057EFF707F932EC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A0392C30C0A9B69AB3CC5182B059553 /* CoreGraphics.framework */; }; - E41981BCDEB0C01BB4447180AE077DDE /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B69B83BDD3B35F420C854EA89935B71A /* MobileCoreServices.framework */; }; - E41C3C68D4332B4B8324AD45AA903A02 /* FLEXArgumentInputColorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A8E3394E6D1D992A9137E31CAB07918 /* FLEXArgumentInputColorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E42BC93ACC35CDCB0461A0F8D39BEBF6 /* RLMObjectStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7E95D42CC110B6BB8BB58E4D463D7E64 /* RLMObjectStore.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E49B1BF96410F8EC30ADF895BBB72BAC /* FIRComponentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 04AD05BAA38078E4FF40AD9E2BC7F2F5 /* FIRComponentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E503D247C9658C821D9689737B8825D4 /* FLEXImageExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EDACADC4B973DCA3BED0BBF0AC62659 /* FLEXImageExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E554D0C12299CCDCC74F3E2B556074F0 /* FLEXLibrariesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 032F78601523CC21F907722C16AA1F41 /* FLEXLibrariesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E6127EE52B580F7CEE1D333FAD6EC875 /* object_schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA1D313D02933D3BBD268BD132C5A04D /* object_schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E6281056CA6CBFF8FFEB7CAE5B38B54F /* TextHintCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75430E7674311E9F95DE2D3328128D1 /* TextHintCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E6933CF37B9BB87C6659DC928CEF727D /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 76C69077C602931C4377E097368F2E89 /* en.lproj */; }; - E6D4692F2A50B88395A8378815F6A93D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - E7963691536D0507E5DFC68B2D0B72F9 /* AnyDifferentiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F9BD6DC96AD29A52E78E2080668829 /* AnyDifferentiable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7C38866DBBBE6F894C8AB0B093AE803 /* WatermarkConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03B020D51DF5AE2880800E4F4BF37C91 /* WatermarkConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7C435223DDA798F478EEB956536D026 /* ComposerLocalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68581B3780E62D4766045D9E4F908889 /* ComposerLocalizable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7F21FF035B931247A62EF294B86312F /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 457D1AE4E9951A55BC07032A9F24F09D /* MBProgressHUD.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E8B46E0DA1A273B5A8B7A1B53E123368 /* MLPlayButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6516AC8C64BE4DAC4BC8F3C35B98755 /* MLPlayButton@3x.png */; }; - E8C0DF78157B9131B3FCA9229D1DCA7A /* RLMRealm_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1406DADDAF55885054DF945A31BC7854 /* RLMRealm_Private.h */; }; - E8DBE0C2EFF276B100184285A56396B6 /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B70303A6DD06F792924CB14C9DCBC3A /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E8DD0333113DE2FBD78A6BA41F4E69EB /* RLMObjectStore.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = E2892F69325FF4818F125392E0408266 /* RLMObjectStore.h */; }; - E8F0DF2DDF9C1B868502049F5697B1B3 /* RLMObjectBase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 87024D93078CBF14CC11C6C068547119 /* RLMObjectBase_Private.h */; }; - E9A68A0108EDF613EC3DBA3E5412BEA5 /* String+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6DE520CFF5ADFE8750DC6435E2FD1A7 /* String+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA748A3FA6911D9F0934D4B961201634 /* RLMMigration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 715B9E5B7644BC3C381C4C604AC87F1F /* RLMMigration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EAC93DBB94199B372A052C954F76AAC7 /* FLEXToolbarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5715151DE5D51BD78131AF6F43684686 /* FLEXToolbarItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EAE3E6883527951DE4C3C54E44E23B37 /* FLEXRealmDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 96527EA33E2E7E3701AF76147A88EFA9 /* FLEXRealmDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EAFCB55C685BB3ADAEA5FFE6AD9A2BC8 /* GULAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1861C9CC2F4C922A89A662E161CD58 /* GULAppEnvironmentUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EB631311536C3561451520DBC0B787B1 /* FLEXResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 0708A00DD9DA35BF7C5AFCB1672E7068 /* FLEXResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EB8DFEBEE6EFD49BC33A51FF5A85EF40 /* FLEXPropertyEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE9FDDC31ACF0E28A520DB9DC4B15DF /* FLEXPropertyEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EBE2F40A3A0A4AA989D9C7A6D57F7D75 /* UIImage+CocoaPods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93B52102E1E20AE9D9262AD89A22359A /* UIImage+CocoaPods.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EC5820D48FFFD38A1D526ABB2A1C4F31 /* MLIncreaseVolume@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 551124F54C43C9771C249550FB1E5453 /* MLIncreaseVolume@3x.png */; }; - EC6BF3C540C28CE7AAE20EBC58EB5B4E /* RLMRealm_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 1406DADDAF55885054DF945A31BC7854 /* RLMRealm_Private.h */; }; - ECE9EDA925CB0A94E7A44D74450BD71B /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = B993FF31D0C199E9E659E2F904A107EF /* SwiftVersion.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ED7F5924DA44E1A7CFDBFEA5F21D5081 /* MLReduceVolume@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 723C99F907CEF7DC80CB4420C98ED2E6 /* MLReduceVolume@2x.png */; }; - EDE30B0D927529FC2F6BD56DA83EA700 /* RLMConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = CDCAB46B83CC4C6F7B11BE44B0EF8E81 /* RLMConstants.h */; }; - EE44E9B35C20A47036A4019B252B7168 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; - EEE5830D2CA8CCCE7EDDF124CA20724E /* RLMArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = EDF59DA5E950A1C0C9587C7A42E69D91 /* RLMArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EF1B8BB9CF95E80EF3CAE29793E2228F /* FIRComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D12101A1693F0452175DE44D7945CA3 /* FIRComponent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EF480A5CF36C84E0681A90E09ABC8E7E /* MobilePlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC32D1CD1F90773DB6C88B00F0F98FA /* MobilePlayerViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EF54D0700796117A5A5AB7B4FD1E4168 /* FLEXKeyboardShortcutManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 663B1327C0DAFC9B6DE4FB5ABBF91EF1 /* FLEXKeyboardShortcutManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EF7A31F45CD20CF7A47CC1C184CF5366 /* SwipeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC6C6B5559B2B1F8F9340A0738891986 /* SwipeController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EF83B7CC2AED7277FF841DD020DB1702 /* RLMObjectSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1BC41362F624813DB0121D02DDC94265 /* RLMObjectSchema.h */; }; - EF9D5680B8359C088BE67637D41938A9 /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = F01B30C46ABA9C8000B2361782F5CB70 /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EFC81816A7615211AD35D79369FFD389 /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D1E738887A33182BC884F513BF42B52C /* el.lproj */; }; - F041390EDAAB97E62598CD5BAD8DA951 /* FLEXArgumentInputViewFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 81889272BF32C5B86EBFB43BE8249D6D /* FLEXArgumentInputViewFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F05AE0983814749F63B571C1872B34CC /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = CD55EE56952130E7CD6E2CDB35DFB28F /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0C266BEC6CCCD1C28530F20E3F8B12A /* OAuthWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1381103A73FD1C17BB992E7F86A13120 /* OAuthWebViewController.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F10FEBD6CB2795D46702471B6D06BC1C /* FIRCoreConfigurable.h in Headers */ = {isa = PBXBuildFile; fileRef = B64196BFCA6777D886807D9B44A832BC /* FIRCoreConfigurable.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F1608C6B9317CED77682F7224B0744EC /* FLEXTableLeftCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FC07A104C00DEFADA5B359CEB2F1CEC /* FLEXTableLeftCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F395F6DE5616926E6AE212B92E6A99CC /* FLEXSystemLogTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DCF41E73D8E7A5ED6B54CE6D92557A6C /* FLEXSystemLogTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F3AF9D715CBDDCB9C8890AE3A02D77B7 /* FLEXArgumentInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 074BA104315D43DAA391D06A2E9D61A7 /* FLEXArgumentInputView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F3C32260307F800680F75A26DAD362B9 /* SwipeAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DD562941BBCA90C5560C9728FF52895 /* SwipeAction.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F3E7ABD9F6ADF674B647528012E2C3F2 /* FLEXFieldEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F3822E771329BEAE8F0F729998C4BCCF /* FLEXFieldEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F41796A1AE80A0C83D869C9ACB3BF1F7 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = EF230DB781EAEE83313A68ED6B03A557 /* RLMObjectBase_Dynamic.h */; }; - F5452AF32C51513A67544DC00AAF8579 /* FLEXFieldEditorView.h in Headers */ = {isa = PBXBuildFile; fileRef = CE58935F7D9E7C45CA46919D53056771 /* FLEXFieldEditorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F551919E9F2728C848750145B23AA6DC /* RLMSyncManager.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 77FEFC05F7713D8998FD9AD230822C58 /* RLMSyncManager.h */; }; - F565D23409F5F07DFBABE83EDC5B3F9E /* SimpleImageViewer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F2FD6E18A828C531B5AAD4E62B93A994 /* SimpleImageViewer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F609BBBD0D8578A9276BAD56F8A0915C /* OAuth1Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD33BD790F1A5A3BA51BE5B18C08DA8 /* OAuth1Swift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F6A1123305738E07E1DA4B3E24B642FB /* RLMSyncConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2BD1FB8C66381723F7940C1175DA21 /* RLMSyncConfiguration.h */; }; - F71EA8268787284DCF82CE645C83A636 /* GULOriginalIMPConvenienceMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 321D80E0D4CD56DB2914069D3B5F15D5 /* GULOriginalIMPConvenienceMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F7D1A76821C101C853123C73386F8722 /* partial_sync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9CE46578BF75F06647B8BA0B2FAE5CE /* partial_sync.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F9542356BC3F32B95B8D0E123CE8C73F /* SwipeExpanding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32D55CF364B918CDB7A7D3A9640F81C8 /* SwipeExpanding.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F97E0AE57ADA49BF29423B5B844AE0E2 /* RLMSyncConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8B2BD1FB8C66381723F7940C1175DA21 /* RLMSyncConfiguration.h */; }; - F998981B4736846E47AD3368B5CBC4DC /* MobilePlayer.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 06AE42FD103B3E8D76E34A202487932C /* MobilePlayer.bundle */; }; - F9DD31F67CB0D17D18097FA837620F59 /* RLMRealm.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33A67FC4AD27BB4BA2DB41DD4646567A /* RLMRealm.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FA5BB0D6F2E19517D95B59329CA7CF51 /* URL+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = D220F1566C7C5287809686B752732CD0 /* URL+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FAC6ACE29FC3B2DB97B5C261ABAA55A2 /* object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE775114A466C1F5293DD6EB2BED202 /* object.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.12.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FADABBE50EF23E119B44FA37E117D498 /* RLMSyncUtil.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B5B6AF0A97A7770C7C515F7EE5CE5807 /* RLMSyncUtil.h */; }; - FBF255107F242D504DE11BC35EECBFA5 /* GULAppDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 31D7EB19083A48DE3431963809B76AE8 /* GULAppDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBF27806D29315ECFAC86C8252C040B6 /* Objc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4006F0229617B8B3AA3BC8585294F07D /* Objc.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FC6B864A0A1851700147880AAAA8ED54 /* ElementConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7164F55269A0E1B5B3D48B856AF3D4D7 /* ElementConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FC8838FEFFD890A1347EAC958C263A39 /* DataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D5AC00790C9BF63FF99B5B7D1456618 /* DataCache.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FCCDCDA15A9CF39EFCAEA6E64FB308F6 /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 863C808B5A561495E916B18EE00C3D39 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FD4B67ACB285ED5E37CB5BA605139CFC /* ImageViewerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F508A762E4D7A8BBE17ABED654BF4A78 /* ImageViewerConfiguration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FE393BFCA0D2679FC26F5119FEAB5830 /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E4D7C32250CA05AF68ABA66BE197CE8A /* ru.lproj */; }; - FF9B0A54C07C9A9BBAB2D598FF8D8546 /* SwipeTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F7AD9D288D9A823297D4151AEDC5989 /* SwipeTableViewCellDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FFEFC7CFA50021821D0653C53A5A21F0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */; }; + 00184DEF06EF90DBFF7C72F550C5DE5E /* GDTCORPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE6AAE37D5DA3F65F7F6F0ED0B2BE38 /* GDTCORPlatform.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 01C79D63CCFDBA85212C1637C669AB87 /* SwipeActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8FC5A0355CC3AB5FA228ED10E81555A /* SwipeActionButton.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 01E2233E75CB225141CDB18688D79209 /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DE67726DB4CE17583D2A5CA441628E12 /* ru.lproj */; }; + 01F587E2098F5F2D1F8F4717B39DE82F /* FIRInstanceIDLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = D27E1F8929A875B724135E71FC07FB39 /* FIRInstanceIDLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 021E91FE24B18FF0F739001C3A3FA734 /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 534B1C2ADF835731FE745F74CC9B8AE6 /* FIROptions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 026F5AABA7100C4876F1EEB8CD3259F2 /* Label.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E10252339FC1F5EC4A69437D4105D4E /* Label.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 02DAEBBA15B942AA01EE49579E252695 /* NSError+FIRInstanceID.h in Headers */ = {isa = PBXBuildFile; fileRef = 8815D8023D368F55C005F3CB40D3707E /* NSError+FIRInstanceID.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02E0811D62948E509E4634A12E1C1DC3 /* FIRComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E6A242810F9CD2065D9E85F884DFFF1 /* FIRComponent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 03119FDA764DDCB0C3DD485605EF09C2 /* RLMUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDA1B8EE827AACDB8F63C9B072524A7C /* RLMUpdateChecker.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 031C16D05ECDE278793D77CA3E5897A9 /* Realm-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 829D08D16E985DB5AA0A40EED922D5C8 /* Realm-dummy.m */; }; + 0352CA2712D80CB18DAE5EF0A3636943 /* GDTCORTargets.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BAF8708420C92D15160E38955AC0552 /* GDTCORTargets.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0392BBF3A52139BE971F81F6A3B959FE /* SwipeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E0DFD07C88EFCE7E0A19F76E8CA7A6 /* SwipeOptions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0393D6E6195EED4856A3F13F2E7B84E7 /* FIRInstanceID.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB2BF04CABD7B3DF7F571A156EACBE3 /* FIRInstanceID.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 048D259CFAE91FB07E038A309346850B /* RLMThreadSafeReference.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D0F3CA793BF667EBFC2202FB92E40B23 /* RLMThreadSafeReference.h */; }; + 04A6285F0F90172D229B74FE21D012B6 /* FLEXSystemLogTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B1E6E7B5764B8C8B75477CBDB6652F /* FLEXSystemLogTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04BE452B9FFFF883F8EAA5E6BA4317C5 /* FIRInstanceIDTokenOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F1583B44F5D85B26BB25B3EF596B376D /* FIRInstanceIDTokenOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 053C049F0AF447D7EE0AE7DD0993E645 /* RLMListBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 736C373A6A91E4A983270AECDED523A0 /* RLMListBase.h */; }; + 058D16491CC7CEF4DA907FC3A59CB4D9 /* collection_notifications.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 25271A64B9812F6A1FD9BC50BE3E7CA3 /* collection_notifications.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 05BF8BE4E1325978EF75846942E7D8C6 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAD1F8EA0C29D5616747695982189D52 /* SystemConfiguration.framework */; }; + 0623B997BFFCB5D1A2188F7792F51052 /* GULLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 5768A14CC35F39A7CCACFFB986E8C9CD /* GULLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 064232A8BF61A3AB04EE71D007230222 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 0664E43AAEE7F86FCA565B80FED57D9C /* FIRInstanceIDTokenDeleteOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 92509B239202C3742762E47337188E5D /* FIRInstanceIDTokenDeleteOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0686EA8208E7B23D28AB357EFD7C38B7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 06C28DEE8DC8D308867C11FA35B7A15F /* FLEXImagePreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E6EAE5977E2A3321FC548E46CF9245 /* FLEXImagePreviewViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07090E9518A88E182EC18415F8B9CA32 /* FLEXManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CFAA0F512E1BA881065AA57397DC51AD /* FLEXManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 076AB8288C1F76FB8CFBCBFE3254570B /* RLMSwiftSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 1937A6F1A3F461335255632D4DEB5580 /* RLMSwiftSupport.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0787B71FC33DCEDEA501A79EFD69D184 /* FLEXArgumentInputNotSupportedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 56E4FB506218FF0C517D028C5031D735 /* FLEXArgumentInputNotSupportedView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 080F70849F2A45F71BE49C7A80BDA5E7 /* semver-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C1F641F2DFD16983B82C393F16B35E4 /* semver-dummy.m */; }; + 0956F81CAE7C745B6C835CFA10EABAA4 /* UserHintCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EDD239601ABA432E4FCD857E67A261E /* UserHintCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 095B713BE18FE3B1A0CD5665ED3435B7 /* RLMArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = D9CB5D34054221D49988F30DC471A47C /* RLMArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 09C953BEFE53D4C59FFF7E0A847B6B0E /* RLMCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 58AD769B3AA05A5384CB65124EBB7847 /* RLMCollection.h */; }; + 09E41163B944067AED79D6D62CEF58FE /* RLMObjectBase_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C267BF9A9956F537090DB8142D82BBC /* RLMObjectBase_Dynamic.h */; }; + 0A40D5F825CC50A6E1C57791A1CC4A65 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859FFDD68B5133014849E0FD10F7A57D /* HMAC.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A7B140A9D24A24C0EC7CE20278A2E55 /* FLEXDefaultsExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3020B5F4DB347C56D66C9CF6C7A7EC3 /* FLEXDefaultsExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0AFE759CABB24AD006290E2C73975777 /* RLMSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A8B053D58036089B7169E5286975AC84 /* RLMSyncManager.h */; }; + 0B1073E79A6932022711EB620B45CFC2 /* GDTCCTPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A30A9C466AA3CBDAB80CAFE26701A5 /* GDTCCTPrioritizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0B4862DD703C96406C2B679343C3CA3D /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B263B5BEAA8F57B6817AFB5D794E26AD /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0B59B1248AA193C3E7EC46D69AEF4C82 /* ImageDecoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E276B9E4F8937CB299EB7AA1B069204E /* ImageDecoding.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0B9169EED4B3B056803F9C236C725FE3 /* FLEXSystemLogTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CFA242D62F50462BDD7D73F21E25E61 /* FLEXSystemLogTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0B92E718925E3A6792C783634E9ADA90 /* Nuke-FLAnimatedImage-Plugin-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8340448DD320361607933E400EC63 /* Nuke-FLAnimatedImage-Plugin-dummy.m */; }; + 0BB65C625526D201A383349928F6EF5D /* FIRInstanceIDCheckinStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F5555115B038A8C6C0FA3C40127ED95 /* FIRInstanceIDCheckinStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C0F0A58E60595F2FEF26BA4439B46F4 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8DF83845CFDE15CCD2053980A57ECB8 /* MBProgressHUD-dummy.m */; }; + 0C91D0D817CE7F008CB3D7DE848CE90F /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3A4D86935AA10FC4A4FAD810167E83 /* Utilities.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0C988CE41AA83678137315A1BB090F0E /* FIRInstanceIDCheckinPreferences+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = A0793D075EAC0D626BA709D6DD82962D /* FIRInstanceIDCheckinPreferences+Internal.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0CB40B7EE34740C4864893A38D19E919 /* FIRInstanceIDKeyPair.m in Sources */ = {isa = PBXBuildFile; fileRef = B65A19FDD0A9643AB3D444269214D267 /* FIRInstanceIDKeyPair.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0CC29589D1D089F4C8D024B257CE58CF /* FIRInstanceIDAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = 006877289E6A25C760A3359FED3EE41B /* FIRInstanceIDAuthService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D39E6F94A6C4493EBA6275E6804DB85 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 0D4FDFE85BC2264BFC2393891F3D01A5 /* FLAnimatedImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02E282EFBA9E30E4C20C7CA809809A8 /* FLAnimatedImage.framework */; }; + 0D8681FCF15AFFFA1A7959DFCDE0BBE4 /* MobilePlayerControlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6DADD103242BAAA58FA2C0B80B4767 /* MobilePlayerControlsView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DB32C423C116AB35E5FA1D8107913F6 /* SSLSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F219197B7A42F3B6CE329DD05EBD187 /* SSLSecurity.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DC0B49E65FF18A8FE459F14AAC5BF68 /* FIRCoreDiagnosticsDateFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 0159B7EA36F02AD42E0E966ABD87C8B3 /* FIRCoreDiagnosticsDateFileStorage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DFCE9020DE5CFF774689C2BC301FC77 /* SwipeCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5F4DB73DBD81D78F94158B8F7E57E7A /* SwipeCollectionViewCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0E1AF0B56FCC8C7A4C5DF32FF75291F1 /* FIRInstanceIDCheckinPreferences_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E4657200448F8A9027FD570CB1CC6474 /* FIRInstanceIDCheckinPreferences_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E36CC57EBCA74FA285B83933EA497AA /* RocketChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 028D3D9CC4A4836F6F4C45F955216E60 /* RocketChatViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0EF763CF3859B0D5A0A87ABA323C03E3 /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 645966923591E09FA495B0F104809C51 /* RLMRealmConfiguration+Sync.h */; }; + 0EFC0A27114ABFEEB2DFD11763E39CD5 /* GULNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D5C3247F49FF7F3621387774E2063C9 /* GULNSData+zlib.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0F0D34A7B6AAC1116A5A3194DA6A58F9 /* FLEXMultilineTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5809A23FC460F7E42971D1127D624334 /* FLEXMultilineTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0F2A35A63A613EC1F0C85E99D248ED63 /* SwipeExpansionStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 278E2872F3D29F5B671C504F6C616EC8 /* SwipeExpansionStyle.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0F35370AF212657FED91345D20653D02 /* RLMSyncCredentials.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 09ADC45A6E0FE6AEDA105BEC2876C840 /* RLMSyncCredentials.h */; }; + 0F966A6DFFE314F61FD451BDB4CE8643 /* FLEXArgumentInputJSONObjectView.m in Sources */ = {isa = PBXBuildFile; fileRef = A44E316BC9CE530357191F82C16F6158 /* FLEXArgumentInputJSONObjectView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0FA9B73C94DB00AC5E5C905D248D700E /* FLEXGlobalsTableViewControllerEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 28CCA15793106B55CDED110A581646E7 /* FLEXGlobalsTableViewControllerEntry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0FC077E0D55536D84DB1A83A8133AE4A /* GDTCORReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = F46265E7848F9A7420D7E43B460E5AF9 /* GDTCORReachability.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0FEC00AAA1568C99FE212D3E30A9FB94 /* GULAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 95DADAF75B1AC47824F8EA9473EBA556 /* GULAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1020A6707655D3EE3EC1DA2935DB373F /* GDTCORConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A26B6C80709AA738F219539DF9A31DB /* GDTCORConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10B5EA9DD4514D40990387CAA2555A34 /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 1FF45139F16BF69478CA6E123A6B23BF /* el.lproj */; }; + 11B60B4F7A87182249DDC6FDB48CE43E /* FIRInstanceIDStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 67DB6A3044EC3098EA6BF3F48E02C8C7 /* FIRInstanceIDStore.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 11FD5A55A3E64582097B2C4730C24F22 /* FirebaseInstanceID.h in Headers */ = {isa = PBXBuildFile; fileRef = D7E5F6917838B2700657ABB7635429F6 /* FirebaseInstanceID.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 120A300FF8311A897BCFED708A112355 /* RLMSyncUtil.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 70AE76095E62308A5E153F59913A4E41 /* RLMSyncUtil.h */; }; + 127E3DF6E6217CE5EE4D3307233139DD /* async_open_task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53F5526FBBF15637B271AE7F3ED23713 /* async_open_task.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 12B0FC192BEFAD23B3946F5590931087 /* SwipeExpanding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E018591B2B2E4AAFA0E286A9615CA056 /* SwipeExpanding.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 12CE1FEDF1B92609934D44A003445836 /* FIRInstanceIDDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 00EAAB9A08035990EA5E6E26B7E3D8AB /* FIRInstanceIDDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 130574E890C9D63CD39D304F7D4AA238 /* FLEXResources.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3563EB324470CE4ABAF6EAD925660A /* FLEXResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 131809B3DAAEB90BD4DE144DFC91C64B /* GDTCORTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = 75C4A6A8DEBEA34D0D0C6E1069D4B27C /* GDTCORTransport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1333471C0B8B49E4C79B4B6900F1CCBC /* WatermarkConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD482BDB3E297A6B76BC9823CD14248 /* WatermarkConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 13793B7EBD7DF970D36B42BD96E7C71F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 137C2DB45D50E3311A903E855B92913F /* RLMObject_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5DCC459D967C96D6EBF151261B77521 /* RLMObject_Private.h */; }; + 13C6D793800D6235E7F16074FE99881F /* FIRInstanceID+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = C29F30F7E4021F09C942990F3C0D93D8 /* FIRInstanceID+Private.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 148CCBC88E91461BB6F719EE56083597 /* GULLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A0C825B59009C4F20BB70AF02960A3C /* GULLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14F642C56E061BEF6A544DE13D9B1DAC /* RLMRealmConfiguration+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = A08E85EF0AB940DCD9C31AFB73D8552A /* RLMRealmConfiguration+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1583AE47B4BC7B340410E033B938086D /* ImageProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28838A04C3B03ED1653F5C4F1A28928D /* ImageProcessing.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1593C5B6F13379E538557D75E4E4A0DF /* FLEXNetworkSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5A867D64D1361B471DD422E8BBDDC13 /* FLEXNetworkSettingsTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 166A906CF2766C7C4BFEC4990419A33D /* GDTCORUploadPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = DF41F9737472E39E74A2824BC7100F75 /* GDTCORUploadPackage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16B76400250F22CD46108C349F182332 /* GDTCORTransformer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 652953531342C5EF100D21F054BBC19A /* GDTCORTransformer_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 16BB3F50628E5B3198F8E63815101CF3 /* OverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8E1591D87AF949AE0156B4EBF9AC0A /* OverlayView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 17480573BFAAAB399777F599808D4994 /* object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF181E8B0D573A17A6DC64615C2DC294 /* object.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 18B0103857A5A2CB2401E445849DE23D /* RLMResults_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = A9B2B90A4949A9F8936F9F8D31B6C796 /* RLMResults_Private.h */; }; + 18CD16C656023A35B94ACFF9DA560CAE /* FLEXHierarchyTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C11FD1D24E3E9B59595B8070A046FB /* FLEXHierarchyTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19649D84934AF68169A23E3D97384156 /* FLEXInstancesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93A3EAC5E30C84949AC6FAA874FCF88F /* FLEXInstancesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 19707015C398AFBE8C667C619A1DA089 /* RocketChatViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A98112E41390D5B7E8C4327409AA329 /* RocketChatViewController-dummy.m */; }; + 1983C2D88705EE8B4BB0E66FB8ADBC86 /* GULAppDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = D4CC13706B74FA635DC0D8150728E4BD /* GULAppDelegateSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 198B3D56B5A70DB2665C7FB2C0B54C97 /* NSAttributedString+Markdown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E79E1D53048467E62C01EC55811842B /* NSAttributedString+Markdown.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 19B40483D5735512C8B30D4370570F5A /* RealmCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3A69553090B54A043BB24F56D02BB0 /* RealmCollection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1A19DBA7850D568914F5F932B50533C5 /* RLMRealmConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 543BA0788A83512AEA324A36B13F3151 /* RLMRealmConfiguration.h */; }; + 1A1E3A67A919E6F0A69F91DB864161CC /* FLEXTableContentViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5BB9BE5ADA2EB66A91461175799A87 /* FLEXTableContentViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A3506FA82C381B36B418EABCD97A2DB /* FLEXLiveObjectsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C2A8FE9EFF90E6FF9691B664983EF5E /* FLEXLiveObjectsTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1A3F82A8EC5196FDCC99750A21FB12EA /* MLIncreaseVolume@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 057A667D88036DCC69F69CA292086059 /* MLIncreaseVolume@2x.png */; }; + 1A68379F78690D04AAECB84E89AC56E3 /* network_reachability_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C01701E2AD86581CD2DCBF8E14C245FE /* network_reachability_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1A6B9D263E843DE4A710AEDB383A3DC0 /* Data+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C13C60C6A1F6C50A5E95F1B99744562 /* Data+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1B22FDED44B159FAA4AA8A3CE5DB9A71 /* GDTCORClock.m in Sources */ = {isa = PBXBuildFile; fileRef = AE9AEE62012CEA3D1A89247259F2BA99 /* GDTCORClock.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C0316F38622C41533F43E00D6E4EB42 /* FLEXFileBrowserTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C3A32113E8789239D6091DB44CA22F3 /* FLEXFileBrowserTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C0E77971B5EDFB7B648AA3A4B7A9AA0 /* FLEXGlobalsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 09444581DBEFC6EB9171B6359F70ED73 /* FLEXGlobalsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D144002EFE010866F1AE3A7447FD808 /* FLEXObjectExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 68BB330102EBD07832A5BD4D429F4F00 /* FLEXObjectExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D20D6B03F9F1942C7A6803670DBA7C9 /* FLEXArgumentInputFontView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E7F4A13D5D45AFD7BF930DB00952284 /* FLEXArgumentInputFontView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D281634F7D8F893AE1A0B1130BAAA74 /* FIRInstanceIDKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D928F4789892EAC4DF7A12848DD9D0 /* FIRInstanceIDKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D487F97D73F2875E7C606357982D918 /* FLEXViewExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E2D403CB050FD9389884C2BC449410D /* FLEXViewExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E6853A69301CDE3CCACBA791FA2D5F1 /* RLMListBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5F0E935100663F397DC59571E01310FD /* RLMListBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1E85829609573E5C39CD1EA26FE0F5B0 /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10C194B49F009FA039889164DCD9A6B8 /* ImageCache.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1EDEF7086FDAD53CA40597A1DB865793 /* MobilePlayerOverlayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22787536A79D3159E37C0FDED18B489 /* MobilePlayerOverlayViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1FBF5E0C6ED0D5F4ABF98D77FB354520 /* RLMObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = DF4212B8544357D58C13D8289B814917 /* RLMObject.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 20740A66928B9280E36E3DE9FE6C8030 /* MLPlayButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = F2C27DE19D0D763C2AE9C743CB64CF9B /* MLPlayButton@3x.png */; }; + 20A252DFBEBE7AF8D0FFD73137B5BCD6 /* SwipeTransitionLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57D21477E4D8AED10159C230030BBF16 /* SwipeTransitionLayout.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 20DBA819B7DB1393D6E7F62101CB13CC /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F91FA566EB5F8D66484629C89DE6D8 /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20F71E3F58F133AD3A0835A4182A7473 /* GDTCORUploadPackage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5512301E4530FC1B7DB10725DCBE5BF3 /* GDTCORUploadPackage_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 219D32353B2BDFDB048843F5897260CC /* FIRInstanceIDVersionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 472642F0567D7D7BFDD2A3974FE65278 /* FIRInstanceIDVersionUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 223C80F8B21025EA51D3462181721627 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 223D1E75FF1DEDC9F02EFF7DF23681AC /* SwipeCollectionViewCell+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E759D6F3B13E7902A055F6A3F7DF98A /* SwipeCollectionViewCell+Accessibility.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2288F7A752C945D0C90A01D12E76F64B /* DataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68DEC4FFFCF95801F5F075CCA18C7A9D /* DataCache.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 22D7AFACE6F5A595B6D96725DC533C37 /* MLReduceVolume.png in Resources */ = {isa = PBXBuildFile; fileRef = B5FB232A7E2AAA21A01CBE4DF3DA35D5 /* MLReduceVolume.png */; }; + 22DF7CFFD6037109EC6BB638C4B09308 /* sync_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 053E1C30790364F6A2AB7944B2DAF7A7 /* sync_config.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 22EE34A5CBC8F5DBDEA54E7CEE44704F /* GDTCORConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B6AC8702057407D72E69091AB3E7F73 /* GDTCORConsoleLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 23168284675E1F4B4CBDB48F725A4A90 /* FLEXArgumentInputSwitchView.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C6D2BA1B55E160EC3ADDE291025ED8 /* FLEXArgumentInputSwitchView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 241FFF5EE2ECA5A8A1711B64DDBBBCDF /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CE1111761DF2BF927371E792131365A /* MediaPlayer.framework */; }; + 24298BCB6234D01437F55138084FA556 /* FLEXArgumentInputStringView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AADE460A20466D1600A77702BC01AD /* FLEXArgumentInputStringView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 242B057E169AC96CBAD214EC02297F67 /* FLEXClassesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF5E62CBD49EA4BA6A8B3634D49CA0F0 /* FLEXClassesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 247E6C5B94F83DCA45DD01F8C3B3F0A7 /* RLMObjectSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5FD9F74534C91B7E1D2BBFAE7EE371F3 /* RLMObjectSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 25A07B209512910047E6658C49A18A67 /* FIRInstanceIDUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E91631F6930CF206DF8EA2D69A5620 /* FIRInstanceIDUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25FF629A181332BA2055B56E141F56CA /* RLMQueryUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = EDE6C7D48246A3AB7A51E0D1B204C3C6 /* RLMQueryUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 260A39507AEEDA3D5FE8F3B18CB38FB0 /* Aliases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10629BE87FD5CCA896E2AAB9A95D829E /* Aliases.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 262390B4404595D626D8AAAC53E647E7 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A9D3AE6168F11FFB7541CFB619DFBC9 /* UIKit.framework */; }; + 2651D841D836267803C8975AFFCC53C8 /* SwipeAccessibilityCustomAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1E5252DCCDB7B091042FB6DA1E66966 /* SwipeAccessibilityCustomAction.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 26CE668B3B082A48F763B845BA0EB84F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 26D3235319C85151AB12392271CEE10B /* RLMPredicateUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D26993A2527D89967D63F6B77AFFC0C /* RLMPredicateUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 272103CEA0D3D05796FCDAF98A36F500 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 278593624C9CFEBA08F88FE930B537B8 /* RLMSyncSession.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C0421F6FD49CC2E5D328FD3497F55E54 /* RLMSyncSession.h */; }; + 27989DDE5E4F35266DF0198A0A28DC64 /* GDTCORTransport_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A364EE6DBDF8A99AACD1804B0C51A457 /* GDTCORTransport_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 27BEFCF12C8CDCCC378006C7E00987E1 /* RLMSyncSessionRefreshHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7B72D6D3D956932769C1A2FC4725DBC6 /* RLMSyncSessionRefreshHandle.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 27F5C01CCFB5B8D3145AB8D455FFF438 /* FIRInstanceIDAuthService.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F42539788B0E96F735364910DD90E26 /* FIRInstanceIDAuthService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 282EABC35D50EE9310D8DC301ABDDAD9 /* GoogleDataTransport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FACFC88B8F01CC3E1B13210D3A937C1 /* GoogleDataTransport-dummy.m */; }; + 28C215B627699B57E6D23A1244C35C09 /* FLEXLayerExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A2923A47E760155E654AFEFD8923F7BB /* FLEXLayerExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 29294DD4E2AA9BB0C2DD7BEA3C17CA3D /* system_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8B04B22E82D996087C605062C29C500 /* system_configuration.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 295F915ADD39A106C43A173F72A23865 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A9D3AE6168F11FFB7541CFB619DFBC9 /* UIKit.framework */; }; + 296172009E36D06B28ABFDF0D470A159 /* Differentiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2A2C497117A66F61D70BF366BD8552C /* Differentiable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2A1134F48C016839713BBF8A5ED07966 /* FIRInstanceIDUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E08F7EA98940945E9ECB6C7DD06FC752 /* FIRInstanceIDUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2A8090F08BE1225B6C419CB6DFE1BF17 /* list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81F7DE71E9148B7DADB726764B12A930 /* list.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B08D00AF191FBD5FC6EDE3256851044 /* UIImage+CocoaPods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78635239CA2877A9734AFB89A1BE0286 /* UIImage+CocoaPods.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B17C52D8AF73A89E513F4DC327AE4B8 /* collection_change_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F18AFBFAE1DA7D32EF978687514FE9FE /* collection_change_builder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B77D151EECDF499327A21CEEB74FDBA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38444A1911A5EA9E26A660A8855FF528 /* CoreGraphics.framework */; }; + 2BC054C031C80BB3A839E9C9C766ADE2 /* sync_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E6E499D745F7F5E02905FB0319D52A6 /* sync_file.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2C1B0DCDE94ED11D6EBB0AEAA12A6E01 /* GULReachabilityChecker+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C7B68AC3BD9C08CAE846306E2405DFA /* GULReachabilityChecker+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C4BCDA4F1971676F30644ED4701DC2A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38444A1911A5EA9E26A660A8855FF528 /* CoreGraphics.framework */; }; + 2D307128ADD34357C071A5187248B238 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EB365B03AB1CC67F47B3A82B809C99D /* SwiftyJSON.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2D7AC1470678938407439FBD76FE899A /* GDTCORStoredEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C2CBC08C2988D867387EE0038D1C5ADD /* GDTCORStoredEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2DACCA680BEDCB91D3C77992116B7B2B /* FLEXArgumentInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = BCAE2D0402FC3F174047AC9C40EB1490 /* FLEXArgumentInputView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E30421363E6F810B6C4541BEF1C5B68 /* FLEXHierarchyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CDB084DECE37BD419E3FC1B9DBD56FB /* FLEXHierarchyTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E5340F1096F074167C24420CA7858D0 /* LinkingObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = D65D99D4E1298B008F80940EB8DDF000 /* LinkingObjects.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E5B77D08989858289C3E7EFA77FEC7B /* RLMSyncUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 70AE76095E62308A5E153F59913A4E41 /* RLMSyncUtil.h */; }; + 2ECBA2F5F0F4BF556281856C9EDF9E8E /* RLMOptionalBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = D16A1283BFCF487D488148D9EEE0C268 /* RLMOptionalBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F08644CD99BCA8D90EE229E1C2FDF0B /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4036A4534744BDBF4F77CF1F037DE9ED /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F54AFA30F815B10F1DD276E03B471AA /* MLCloseButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = A015DD8195DD1A2967701B1D9043B45C /* MLCloseButton@3x.png */; }; + 2F8063DC5EC4A8856F395D4625AC413C /* FLEXTableContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 279C14CB42E0CB3D7ED24203C35C02F4 /* FLEXTableContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2FE7D28D5FB55E9C0C427854338289BA /* firebasecore.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = CC7D122B769EDA34A9267CE10C62CD1C /* firebasecore.nanopb.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3031393FAC76A438CA6F664167DC532D /* FLEXIvarEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 837520921B035BB155A52BF9BBF7F39F /* FLEXIvarEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30E7A56C9F4A8E36AC1F7D013B9CD02B /* RLMRealm+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 508B3CF8D1BA1076534B46B2A7A843A0 /* RLMRealm+Sync.h */; }; + 311112999B462FCA3BA5BE2793C654DB /* pt-BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 7FBFBB220D94BBB269EEF2095C9B26C5 /* pt-BR.lproj */; }; + 3127F5E7CBD0ADD086C1490515C0B2A4 /* FIRInstanceIDTokenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B6374097FB5994A3953D8E0DCE5369AC /* FIRInstanceIDTokenManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3145BB915863E3357008D0C11D2DDCEA /* RLMObservation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55B0D0ED129D0BAA2EC3D148D811690C /* RLMObservation.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3187ECAC4533353EC9CC895C6FD74DB6 /* RLMThreadSafeReference.h in Headers */ = {isa = PBXBuildFile; fileRef = D0F3CA793BF667EBFC2202FB92E40B23 /* RLMThreadSafeReference.h */; }; + 319748D4761D17A7D9DAAC50BA360692 /* RLMProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F29729926FB89531EEF1FA5B914C724 /* RLMProperty.h */; }; + 32212F06A296E145629F371FCAAB2073 /* FLEXTableLeftCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F64E581EB77FE5DE0175695ACD1FF24 /* FLEXTableLeftCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 322C10225ACDDC4CE1D889E34744EB5E /* FIRErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 6522B6B0D23405FCDC2F28A0949C8436 /* FIRErrors.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3267EBBB72FBB182A043C3E43768C870 /* FIRInstanceIDAuthKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 517BA0AEE611A3EDA4D037DC50445C31 /* FIRInstanceIDAuthKeyChain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32F2F47186C578EE700D8FE5BABEED6F /* FLEXNetworkTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = CD6FBFB09B1B1E32DC09E535F003FCA6 /* FLEXNetworkTransaction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 32F576FA439C1C5416AF653F9C2CA488 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 3336B51AB550F45A8D28380E55166F6E /* pt-PT.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 591595C792165BF691748D49E3D67E5E /* pt-PT.lproj */; }; + 3349D78785AC5C02717AF6FA81EAC653 /* FLEXTableContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C8C7A4E2193BBCA87CE9D39D21886740 /* FLEXTableContentViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3380BD78EEAC66DFFC3E9E4AFD9CFDE6 /* FIRInstanceIDLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F78F5A14BDAD7ECCE76B0FED042E377 /* FIRInstanceIDLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33B5186B970690E13E7830E819EB1A48 /* FIRInstanceIDStore.h in Headers */ = {isa = PBXBuildFile; fileRef = B8043CF1F89E34FB8C50BCDE1FA42249 /* FIRInstanceIDStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34781352DFAF3A78D9BDA0511AF52F0C /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62029B76B1FEB8FC43398AB3B7CF855E /* WebSocket.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35BC9B74D4B9CFED1A06F43A44B94147 /* FLEXNetworkObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = B9AB21F51FA6B24D4F075459BB9118D3 /* FLEXNetworkObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 35D0E71D74AC2ED10B1A504D2F357263 /* SwipeCollectionViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C97EC3B9F550B7D0F59109B15F7F9670 /* SwipeCollectionViewCellDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 361C5782D844A204CF6B13E69D7B44D0 /* FIRIMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5796BCEB36FB1F2371522F782AC2E75E /* FIRIMessageCode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36A7D00BFEEE5B9C6B3A7769A56DCD47 /* FLEXNetworkRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 752434F4B72CFEE188D59FCC0CB0B42C /* FLEXNetworkRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36E0752DBE00B3398BBFFA6C1CAC105B /* SwipeAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB0A0136AC3DBA7DD3D6EC4D4C6CE1EF /* SwipeAnimator.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 37173B7A834068402765939B150F8325 /* FLEXSystemLogTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C830CEFD8CF23B3FA9E84217EC594626 /* FLEXSystemLogTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 377723A537C507FD82D3BA42074FBC44 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 3782323343DAB942A981C1C2C2ABFD98 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B8D5808A7D1B48DB579A0A32675B403 /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 37C0D010FF6CA49957D4ADDC6970BD1A /* FIRInstanceIDAPNSInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B2908C8C31A3E43DFEC35D8DA5FF1D0C /* FIRInstanceIDAPNSInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37E7CD211F1E3C8A60ED359054E562FC /* GDTCORRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = EA9026FD805FD86C1FFB9BE42CC3D8AA /* GDTCORRegistrar.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 388F043E93BF816CE052AD1EF5CC6ED1 /* RLMConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7D214BAA46366DEA7A9A5ECEC0966591 /* RLMConstants.h */; }; + 38E87B62BFC1C951D01184D6A2A78494 /* Tap.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66BB2A17D19F20E038B928768CA4F64 /* Tap.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3970EF9DD3408CB3F9869F19095B90FC /* GULLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E685B053E4D7805F2856778090E0FF9 /* GULLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 39C13CE42C68F7CA61A1CE530E4A4A7D /* FLEXSQLiteDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 324A3035364B91AA0E3AC7513CA9653E /* FLEXSQLiteDatabaseManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 39E1CEC38954A52207D26426DC83A6A6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCF87FEC35F61FED31B31740E9B2AB83 /* Security.framework */; }; + 3A3AFE1A757BED640641A681764DA0C5 /* Nuke-FLAnimatedImage-Plugin-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FB72A80D294A32241F28BF509A85CDD9 /* Nuke-FLAnimatedImage-Plugin-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A84473A2E0C4B756324BA732D27E7AD /* RLMRealm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 939693AB59EC78EDA0891E4FB8801D9C /* RLMRealm.h */; }; + 3B303C1E476EAA6110C6B133218D18C4 /* FLEXWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A974BD480207D1037843307439BC6B93 /* FLEXWebViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B3E85849A2FC75DAC149946B2A7A15A /* FIRInstanceIDKeyPairStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 044A03B44183A1B253B72B4576465012 /* FIRInstanceIDKeyPairStore.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B6928CDFD515F261D0BB9CB2FA1E183 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 3B7FBA5E2BBEB337BF525631209017C9 /* FLEXArgumentInputDateView.m in Sources */ = {isa = PBXBuildFile; fileRef = 77D504B61F21F59E8B4EFEE12E5EF943 /* FLEXArgumentInputDateView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3BA9B85E6EC7E6DA65DF41A067E2636E /* RLMObjectSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C29CE9D8430261AB6FE5D667F02717A1 /* RLMObjectSchema_Private.h */; }; + 3BABF23AEF1E17E954724E569E9ACC9D /* SwipeCollectionViewCell+Display.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7A2C757941CE226369DB316339117E9 /* SwipeCollectionViewCell+Display.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C1D4E29DEC14C3CC424257F428CE6DE /* FLEXDictionaryExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A2EC9D8A701EDEFA3B500CE0368DE298 /* FLEXDictionaryExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C232DAAA358660765095556799C18C5 /* GDTCORTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = F983606A3978CFFD6EF3B9EE64DBF020 /* GDTCORTransformer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C26668283FD8E30E69443EDF9B59CA4 /* RLMRealmUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = A14720A4D905C015D0002840C26A8F84 /* RLMRealmUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3CD4B6783D97C32AC9022A62CD8E8C5C /* Realm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F99E7A9F6EFD4D00C758C67B8B06886 /* Realm.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3CF7EA2054BA7B949EFEDEB96E297F65 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 3D545415BD09E42DA4E50A064EAD5BC1 /* MLReduceVolume@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FD6584D8E5A2E5034E5F47070C621484 /* MLReduceVolume@2x.png */; }; + 3DB4B85EB66AEAACF8D3284FE755D2DF /* GDTCCTNanopbHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E04D152C917E6A4B4BCBCB348E95736 /* GDTCCTNanopbHelpers.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3DF98AF008EFCDD4C6C017E63F55FFF6 /* FLEXNetworkCurlLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D405C1509AD19201F0ED60C0FEB3158 /* FLEXNetworkCurlLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E807BA23B91579883A86E01042416A3 /* DataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005AAFFED88042634E6AAB1AE347E947 /* DataLoader.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E8F01898AB08B111AED810583FB1785 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A9D3AE6168F11FFB7541CFB619DFBC9 /* UIKit.framework */; }; + 3EBC5C7E5E6DE1AF6D0C94DC69662B96 /* FLEXKeyboardShortcutManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D617A4F1AD31C74DE1139447BF84D2A4 /* FLEXKeyboardShortcutManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F0EA6C2EB9FA452CEAC75CFF8FA0E2C /* Collection+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF11A206856F1B0CBDB65F07B2BFA82F /* Collection+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F1BDD5A79986CCD63BFAC78E83C585A /* MLVolumeButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 3876EC1DCAF87A2DED08AF037A3BD377 /* MLVolumeButton.png */; }; + 3F99263D6F8DE2F3AEA7354795457FC7 /* GULNetworkLoggerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FD8A08AE115FAA5935FC2C75B6308970 /* GULNetworkLoggerProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3F9EBD200B112A3D4EEE17A3A00DAEB1 /* ComposerViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12100091E1EF44D77B9E75D640BE692B /* ComposerViewDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3FB340CACF89C696283275B4AD610229 /* GDTCORUploadCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F26580F0345FE9910FF66433B44392 /* GDTCORUploadCoordinator.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3FEAD561DDC030EE1A1F973AD9AA3E6A /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 84FA4E70EC930EC46FDAEF1F18D37852 /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 405953293E7114B092F97AE6CFDD922B /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 949C55848999D520D3DF3AFD031E4B32 /* FIRLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 405A499030BB4FCFCB57ACC4030B69D7 /* SwipeActionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD48E63D140551C0A8664D4ACA53E179 /* SwipeActionsView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4065614086D650AF1DB937277E656519 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15938CFEA0F012D7BC2466E8798921D9 /* Internal.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41ABEAA6D081C64C5F318403406E7EC9 /* RLMUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 851F301798BC5F6F1534B8F9443D5564 /* RLMUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41B4E25292BF2533F6249485DB1E6220 /* SwipeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B74CCF40BAEA0C71394AD7591946A970 /* SwipeController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41C86D34841EEABC1368F0B3C3706B8B /* Algorithm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9291E5EC9A0AF5830A95ADAD7C75F8D2 /* Algorithm.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41CE05093EC36E6FC96D662EC77C71D3 /* cancel_audio_record.m4a in Resources */ = {isa = PBXBuildFile; fileRef = BD220AD8305B1A3F1C9C002299662613 /* cancel_audio_record.m4a */; }; + 42A37418E4595A5506DE3587A0CC9D14 /* Pods-Rocket.Chat-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D03921F54934938F38B4585819BE1511 /* Pods-Rocket.Chat-dummy.m */; }; + 436D6749D2E6BF0DF1D3F62FEDC2E9AD /* GULMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AE4A61ACABAC3D758FBA07EB8354D7 /* GULMutableDictionary.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 43A5C5D5E84BA31F1EF7D495C7426333 /* FIRInstanceIDKeyPair.h in Headers */ = {isa = PBXBuildFile; fileRef = 521B1F8C5A8456AB129BA3C943C8201A /* FIRInstanceIDKeyPair.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43B50029B4A7DB842F04617B8BE0106D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAD1F8EA0C29D5616747695982189D52 /* SystemConfiguration.framework */; }; + 43EB00B2E93114FE76CF69294C1E85B0 /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AA511101DD20841575D3DD177DB374 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 44346B0B674055B978DB9739979F98E4 /* cct.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 427B8D9E52FA8F953AAC5FF40A8C3691 /* cct.nanopb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 446A8CBA4F52D2F70A5B29ED85A528B1 /* GoogleUtilities-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E811FF252A6DE87D015A07E5E7869138 /* GoogleUtilities-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44923E845676BA7681DD9623E673F2B5 /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 648D171C388E5697D5B498C78A9FBD93 /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44A51F7EC0A5ABEB085120049EE364E9 /* RLMRealm.mm in Sources */ = {isa = PBXBuildFile; fileRef = 44758F8C16EACCB5DAB9215B2BE36D58 /* RLMRealm.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 44CCDF4D3F56C4F252C5771365540CBC /* GoogleDataTransportCCTSupport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6909B5ABDBC14A463A86E1D32618FA4 /* GoogleDataTransportCCTSupport-dummy.m */; }; + 450361026619485E07CD3D85E4A4DB1F /* RLMResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A6EF5CC39175C5193A35A4F1521BDB7 /* RLMResults.h */; }; + 45045EB19C90EE6D523629011D729EB1 /* FIRInstanceIDTokenOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 240885571D6A1FC5C67CA517180A7A36 /* FIRInstanceIDTokenOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 45494B650D8AC574801C3BFB7E9EAD55 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 456EB9BA0A33DA35D075DE1CD8DD1801 /* object_store.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0031A8FB4EDB8DC254B6C535556B3879 /* object_store.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 460CC3900CFF1C46C8DF58CF03E16013 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB9ED20363E8E4AB931FC4FB130D3BD /* QuartzCore.framework */; }; + 4625F66424EEB36002BCB4257EE88A53 /* Algorithm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9291E5EC9A0AF5830A95ADAD7C75F8D2 /* Algorithm.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4631A136C380CDF5A1676B0AE4D801D2 /* MobilePlayerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 443994482073B5BADB536B713A37AD2F /* MobilePlayerConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 46512D25D30CB3ACC8AD04EC48F3E076 /* FLEXArgumentInputDateView.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA11F639A396489EE59AF4C93A9A20A /* FLEXArgumentInputDateView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46F8C224CE86ADCFD5B6B35FE6ED4F3C /* TextHintCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0A1703E9239CF6CFFEF5B2C7896C9D /* TextHintCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 472540D0268D70C1C3FCE815D1D3AE49 /* FirebaseInstanceID-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EA86BEEBE2B34813D665E8C675226275 /* FirebaseInstanceID-dummy.m */; }; + 474CD4F3BAD4D9AF168CC251CDE3B282 /* GDTCORStoredEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FE63196A56CAC7EE9069B33D5571E2 /* GDTCORStoredEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4771F18E9A7C8D98B58942AA34E400C4 /* FLEXArgumentInputSwitchView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AA41D50FC9AA19A8198BBDF4ACF3D2F /* FLEXArgumentInputSwitchView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 47A4CA168A89359A625C207407A4481F /* RLMRealm_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 06593A948E006D059354C07B79D8536F /* RLMRealm_Dynamic.h */; }; + 47AAE7A3E70ECFA5173BD823CA54F7F7 /* FLEXViewControllerExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 00EB84821CE127B30F57DCA4FC055F1A /* FLEXViewControllerExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 482D78815ABE04E3339F98DE6DA183D7 /* RLMCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 483EAAC04E8C54BD941813722288948E /* RLMCollection.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 48552F22F0BEDB9D106713ABF5FAB244 /* MLPlayButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9B67B4C26829D0F1244B61FA5CA09CE3 /* MLPlayButton@2x.png */; }; + 49622E342E8DAFD856DED6D956E1B37C /* 1PasswordExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DEE09FAA5184A7C655FA68A9878AB4FE /* 1PasswordExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A611CC47211A53DA1144EC2F585E526 /* RLMRealmConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = C8D523949ABA0FF9F3F2E37738450D3B /* RLMRealmConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B0BB2A32771289C43A311D0F537F197 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCF87FEC35F61FED31B31740E9B2AB83 /* Security.framework */; }; + 4C1DBA40323024AA1453AA54BE363DC1 /* FLEXExplorerToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 43E9884AC1C535455AFCCB7099E4E75C /* FLEXExplorerToolbar.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4CB05AC6ED61917C42B5AC859CC4A29A /* URL+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7B67C3137FC9230488FB4F91628B5E5 /* URL+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4D14EA3647CC5CF056D2429B1A88E447 /* GULOriginalIMPConvenienceMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FCA2F15A4419AA2F5390800ABCD597A /* GULOriginalIMPConvenienceMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4DEF3A7D815466C2ADA7EDA2E71B29F5 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38444A1911A5EA9E26A660A8855FF528 /* CoreGraphics.framework */; }; + 4EBDA84262AA762FEE557EA04F427D3D /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7786D040AD92308EC06D61AE600F434 /* List.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4EC960FAE9CF65B8A6FE0473AE5BFE0A /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FBB077249BA8F834579B9E4793DC9C2 /* SwiftyJSON-dummy.m */; }; + 4F146E5D122A59B387B3949D5C494DD1 /* FLEXToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE1FEBCD1217DC8D2CC41DC570834BC /* FLEXToolbarItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F77D270FEE889C4AD32A474B6292037 /* FIRInstanceIDURLQueryItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EB06A0F29E5AB0B5FAC6C737036FC66 /* FIRInstanceIDURLQueryItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4FBBB1C4C005FC6DBE891D9DB819D5D6 /* FLEXNetworkTransactionTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7059A7B2314772AF5D37AF6D6A5BD26F /* FLEXNetworkTransactionTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4FF3ED246093035E6E3F445029494A90 /* FLEXSetExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BA6860EA22A14CEDFCA44F57B0D7510A /* FLEXSetExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5033AD20C38EC7DEAF04350A500DD8F9 /* FLEXClassesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F6E7C077B88EF82B8AF91B72214EB68 /* FLEXClassesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 504973E9DC9B12A51E79A5AFB11250EB /* FLEXArgumentInputJSONObjectView.h in Headers */ = {isa = PBXBuildFile; fileRef = D4B3E130B99409184C868361CABDFA84 /* FLEXArgumentInputJSONObjectView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 509A485E95F3ABEFCC417087D169BD2A /* GDTCORDataFuture.m in Sources */ = {isa = PBXBuildFile; fileRef = BA940B05D607C84026ECBE1387F2BCAA /* GDTCORDataFuture.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 511ECE956EB375F73EA31250CFDCAB5E /* GDTCOREventTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 300C61D10253661229D56E02DF2DDFD0 /* GDTCOREventTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51202D7E2E75F502E2E8D618647EACA4 /* RLMObjectSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = BFDB547751B83CB0B76267052059FD56 /* RLMObjectSchema.h */; }; + 518910765C2DE5BA959EF69B489C6041 /* GDTCORAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = D06A72649FF38F0389D480872526EB90 /* GDTCORAssert.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5192839CEF6CB1F163EB28F6328506EF /* MLPauseButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A934ED089667DDAE28628D4D38495F2 /* MLPauseButton.png */; }; + 51E2DDB110A8CCB74712A14F8CFD2D96 /* ComposerAddonStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4DCA082C2713E9992C24FDA2364FC3 /* ComposerAddonStackView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51F1CFBA4655EF2590BA55B82FAD9686 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 528371BB864297DEE7472735E56B2331 /* FIRInstanceIDKeyPairStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 938BFA334497C2B1BBF0EAB07FB803DE /* FIRInstanceIDKeyPairStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53C165A7A846A65940DF01A9C75637BA /* RLMProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = 549D0CF989CC962B006E308E311B147E /* RLMProperty.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 53C214714639099AA1156DC68853ED2D /* FLEXArgumentInputViewFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = CD39919DCEBDF2C033EA4E55C31F3C0E /* FLEXArgumentInputViewFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 53FE0A2BB2BD88E6DB5423CF2096932F /* OAuthSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B996D741A426112E42F9D3FC5243D71A /* OAuthSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 54D3E1637FDE725EC4C4794DCC7DD956 /* RLMSyncPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = 37142B20FC9EA8E59811F270D7C81D62 /* RLMSyncPermission.h */; }; + 54EEC83760316C785EC964721601D1F1 /* FLEXSQLiteDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 667768AC72DD40E30955794FD871A9CB /* FLEXSQLiteDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55127731A157A730FF3010E3820E7429 /* Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B1A3625364E2B38F1B2913139AD0E0D /* Compression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 55CC62A87F1B574BFC9D3733F457F385 /* GDTCORClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 12CDE5A9A5E34A581D2CFA12A71C2352 /* GDTCORClock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 55EC4576E818021C3B95B55AADEBC063 /* RLMRealm+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 508B3CF8D1BA1076534B46B2A7A843A0 /* RLMRealm+Sync.h */; }; + 55FEDD075B48CFB0D142FC7ECF36C684 /* FLEXArgumentInputFontsPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 73099ACD75ABCF1C1A4C6588A2915674 /* FLEXArgumentInputFontsPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5689D5D02CD7712A5979A395DA43D963 /* RLMRealm_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 2CAF3B7181A1160FCCC878725721158D /* RLMRealm_Private.h */; }; + 56B3F1539B008767052B13C7CCE640CD /* FLEXRealmDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BA940FBEB61E5E6748B0A6A352E75E3B /* FLEXRealmDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56B91FCB926CBF05E985DB4B3B6F327D /* FLEXImageExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0377125438ED404CDD97453B12D413F2 /* FLEXImageExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56E34B0FC72D6712C6D99AB148DF4B38 /* RLMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D9A75558B531AC6FCA4A122225C91BC6 /* RLMObject.h */; }; + 57B3DFBEBD22378F7A8EFB2F41465A94 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 57B6987086694DA5A5B51A23877D3698 /* FIRInstanceIDCheckinPreferences+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B7A2D092F2A6A34D251032118D2ECB09 /* FIRInstanceIDCheckinPreferences+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58D541D5AEFD9540991A45C48647EAE2 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BEB42633FE33B1394ADCE8B03B6CB3 /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 58FC172C7DC9A91FE0A27C72FF923535 /* FIRInstanceID_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 60F419714174CBB8CB4FB48616B4B709 /* FIRInstanceID_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 594CC16B543502E593D986AF4AE589B8 /* FLEXViewExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DCADE050210A40BBFD221B115686E9E6 /* FLEXViewExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5953E96263B853EE3F8128ADE6447BDC /* UIKitExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1599B8028391AA115149DFAAD4BA2E3 /* UIKitExtension.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 59AC33FE4588EB06ADA2EE456FBB355A /* MLShareButton.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D390D85C87A5847795D86A63C3E12A /* MLShareButton.png */; }; + 5A63AF5727A3FDA1B1442C599295D3C9 /* FIRInstanceIDVersionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A81FAD3EBA8356536D137996CDE7D3DB /* FIRInstanceIDVersionUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BB99F154B9A83258D551CF49C6B2F5B /* RLMRealm.h in Headers */ = {isa = PBXBuildFile; fileRef = 939693AB59EC78EDA0891E4FB8801D9C /* RLMRealm.h */; }; + 5BE3DE22BAB39EF224DB1071A279119B /* DifferenceKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 316ED1636562B8CAE9DAECAF93370282 /* DifferenceKit.framework */; }; + 5BFFDD1CBD652C01E079A17086228611 /* FIRInstanceIDTokenOperation+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 62E91B314B649BED5910E91372D61583 /* FIRInstanceIDTokenOperation+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C2659BA4A11948475E1533DB9871D7F /* FIRInstanceIDBackupExcludedPlist.m in Sources */ = {isa = PBXBuildFile; fileRef = 98424B33F8B2DA923D34411D0195BBD7 /* FIRInstanceIDBackupExcludedPlist.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5CAE1AF90A524E9FC8DDE99986685BAA /* FLEXKeyboardHelpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 417CA68A97D995DDECCD3145CC1BE3E2 /* FLEXKeyboardHelpViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5DBF66A4EC5ACE20980D6E195B7F8156 /* FLEX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 479A6210B4D7CEC57F10675243DAC9D6 /* FLEX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DC53AD690E4457D6EE83E028E94B9F1 /* RealmSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 374CCAF529CC7DF6C9C3A6ABA9E0FF3B /* RealmSwift-dummy.m */; }; + 5E9C510283081999CE7BC49D61FF00CE /* RLMObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C1BDA29585B7602FAA49AA1D7CF3943E /* RLMObjectStore.h */; }; + 5F2EC30502035F161F87D14C6EAD59AE /* MLShareButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9AE09672F9A57A77BE6B2C6F091F1AC5 /* MLShareButton@3x.png */; }; + 5F5D81037DEA3C2C3B3112F6C6226AD0 /* FLEXArgumentInputTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4053237D3B9691491691C866358AE668 /* FLEXArgumentInputTextView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FEE0C05D547BB0F82DAF829A849BD75 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 72B9BCE02F0A919F86F86B3CD72D6DB5 /* GoogleDataTransportCCTSupport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FFA1F65652FFE38943E6F7201041148 /* RLMSyncPermission.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5E95F1576F7B3F17BDF7646E98194D21 /* RLMSyncPermission.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6010453DC9AAE9A766A704ED4FA853A2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EAD0D240EE8B5AA2A8C7C52808B60D32 /* Assets.xcassets */; }; + 60AE81C1D18CEAEFD3881649391C60EC /* RLMCollection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 58AD769B3AA05A5384CB65124EBB7847 /* RLMCollection.h */; }; + 60B3E318F701C6C6D1451975F660EF95 /* FLEXUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6172CA547E3FCB08A8E9A825577A2CB8 /* FLEXUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 60D06B15201B31901547CF7CAB52B097 /* ArraySection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF8AA7BB27CEB039E0221B873ADA9D8 /* ArraySection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 615682757305CA0B5B96C60B98EF3AEC /* RLMAccessor.mm in Sources */ = {isa = PBXBuildFile; fileRef = DADFE02C70266E260BB488332DD1A5C3 /* RLMAccessor.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 61DBC8F44D67390DB8C75DF44027FEC1 /* binding_callback_thread_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAAC216ED83F1A6A58A8FB338BDA4062 /* binding_callback_thread_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6260367ECB338AD36E5117C54726D039 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 79383392028C123A6041B15F53B6E4DE /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6265AFD4D98BB9F2167C1D48154413A5 /* RealmConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A5225832DB8FAD295998745FA0CE297 /* RealmConfiguration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 628C2523418829B6DEDC8138FBEACA55 /* FIRInstanceIDKeyPairUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 769CF561DAD104A360791ABF7C4EC40B /* FIRInstanceIDKeyPairUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 628ED7BE3E21F3EC381ADA2E41181F11 /* ToggleButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10DB97CD79D8218FDAE039932C1541BD /* ToggleButton.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 629798E988A45274B754BE7140F5C083 /* FLEXFieldEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A65A1B936FDE1E47ADE47217091A9D2 /* FLEXFieldEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62BEA28175902102C3B8AC4B84D505EE /* GDTCOREvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9695EEE40A1905B7FB7C304E4F4BA0 /* GDTCOREvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 62C67846B59021853AA09F233A963CA6 /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BDF5BC931E05E842AE1CF6E6ED36928 /* Realm.framework */; }; + 62F50A85A39FC30BAEE7103E5A3277A8 /* RLMObjectSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C29CE9D8430261AB6FE5D667F02717A1 /* RLMObjectSchema_Private.h */; }; + 6331057281A1134044546CDF07F64654 /* RLMArray_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C42192C833E6377A5C2AEA5586902AF4 /* RLMArray_Private.h */; }; + 63B53EDD2F4E523754F27DF6664A5583 /* FLEXFieldEditorView.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC122FAFB59501CBB1F5609224E14CA /* FLEXFieldEditorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63BBD5C4A4EC68E1FA0BDADDDCAB57C8 /* RLMProperty_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C754595AEFD579EDC883D63AD2A265D /* RLMProperty_Private.h */; }; + 63F49C731279480D3F860F7638194D83 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 644FB8981C9F51AEE14CFEA736F85B53 /* FLEXNetworkHistoryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 75886D6DEC25942D992FD8D087E5B5C6 /* FLEXNetworkHistoryTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64C6A8794D5F178DFBC9E278733756DA /* ReplyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A35C695C2AE7DE6114D6BA3FAF33DE /* ReplyView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 64F3CF391AA5E0A67482CE283F5DAFD0 /* SliderConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 057BC959525B3953B4065601EBD1660A /* SliderConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 64FDB90FB4F1614AE3967998D88E4FE8 /* GDTCORUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = B4F205F6DA15BDAD128E454D41828F55 /* GDTCORUploader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 653BF4A4A1AFB814A47C59AEE1CA2E1A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCF87FEC35F61FED31B31740E9B2AB83 /* Security.framework */; }; + 658D0B2EC9250FB027AE0F25C0CF0A26 /* GDTFLLUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 98EF7B2F56684B7D3B1C9597331BE43C /* GDTFLLUploader.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 65E7A61D86778F472B9920A4316031E7 /* RLMMigration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4531BF3796D5F2082CF112E41E5BCE0E /* RLMMigration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 65EFC67DC2AEE26D265B24487849D37D /* RLMSyncUser.h in Headers */ = {isa = PBXBuildFile; fileRef = E9FFA2669005FCF8BED83CB72841D6A2 /* RLMSyncUser.h */; }; + 6604FB25AFFC074631F1222874CE958C /* Pods-Rocket.Chat-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C565EDECAFA95B80AB6646514D22A0E9 /* Pods-Rocket.Chat-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6690D3299C78534F53014629DBA970C3 /* GDTCORUploadPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 501A8B83B08348171E851375825096F4 /* GDTCORUploadPackage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 66F8E679C5D22A85B43B0E7C5FEE5841 /* sync_metadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C8CA9696A228F83E5AF4FBBB19BAF914 /* sync_metadata.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 68942D0CD245FF0633C04D6B8A910C9D /* FLEXNetworkTransactionDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D1392F4045F7AC16AAE3CB325BA32B2 /* FLEXNetworkTransactionDetailTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 69AA4CEC7E218C60182E68BB140B864F /* RLMSyncCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = 09ADC45A6E0FE6AEDA105BEC2876C840 /* RLMSyncCredentials.h */; }; + 69B26FDDE602F0718700810BD0DFE47A /* AnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2E7A6445977727E003D281522A8FA41 /* AnimatedImage.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 69B4F6B91EBC84BB98302A7F6FE9258F /* FIRInstanceIDTokenInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 205ACD94C7D17A04A838312ABB0E7653 /* FIRInstanceIDTokenInfo.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 69F01F5CEC032C1B383AC5EF3A36DBD0 /* RLMManagedArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = DED8A12535136B9EC308B988C1FBB062 /* RLMManagedArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6A3A0864DAC91CF95C141954292C0251 /* RLMAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 13342D01F98A96B0D54B5C1A0D9BB139 /* RLMAccessor.h */; }; + 6A770229B257B64083DC294E22A56D16 /* sync_permission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6990E2B45A265C9462DC1FB4E3EC4 /* sync_permission.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6ACC1607567D6196BCCD2A54664875B2 /* RLMObjectBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 596C24ECB2DA6F52B91F85F5E18D737A /* RLMObjectBase.h */; }; + 6B049B2C2A6F0E56D3E5E98534EA3E1F /* ArraySection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF8AA7BB27CEB039E0221B873ADA9D8 /* ArraySection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6BC5DAEEC6B407D128CA34796A8FB91B /* FLEXPropertyEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = CC0EC79351E2DDE5970E9038131F00C9 /* FLEXPropertyEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D17B4DC1898166D1B578F7006205A28 /* FLEXLiveObjectsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 478F4CD18FF2F72A29D57EC7C6AF3312 /* FLEXLiveObjectsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D527628886493ED656774742B710E18 /* GDTCORPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = C40705BD705C9F00097DA38D53CCE23E /* GDTCORPrioritizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D8927DED2096CAF3DA22DF78AB9650C /* FLEXMethodCallingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 077BA0ABE152668146C5B31270FB10D3 /* FLEXMethodCallingViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6DA99D6E7FBFD775F1C4DA1342639AC2 /* RLMSyncSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = AD0A13B831BFB0C0060557212BFA8E4A /* RLMSyncSubscription.h */; }; + 6DB5EE0691B753FFD8B095175F196216 /* GULLoggerCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 779B16D74E07121482571AF4AE146287 /* GULLoggerCodes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6DCA43ED33719E699EF59F5BA710ABDE /* FIRComponentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 484BA0EE20C529C24C576621D43B2EBB /* FIRComponentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6DE952E08C0BE57F9E36C5617739FCEE /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D78F44859C091E3852DC821192F3B7B /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6E3EDD857035695933172EBE78C580BD /* ImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9D0189B31551C5367DEEEBCFECA7DF0 /* ImageView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E8D99CA678EBA0A104EA8936BFD680A /* RLMObject.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D9A75558B531AC6FCA4A122225C91BC6 /* RLMObject.h */; }; + 6EB62975BB01B4BF986F0185AF8CDE9F /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = F3476B7035F44968C312ED6B39D03A92 /* MBProgressHUD.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F2298EB486AD9BF0AE0005A604E97AA /* Differentiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2A2C497117A66F61D70BF366BD8552C /* Differentiable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F671DAAE046AEF4272D7ACA8BD97645 /* RLMObjectBase_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 7CEE5C71735650B508E41F081602255C /* RLMObjectBase_Private.h */; }; + 6F9ADEADE72FFAF7FD9055F0C8108B3C /* MobilePlayerNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22F6A2438CA91D0EB7D1FB9E1A720F0F /* MobilePlayerNotification.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 706BED53446685EE4AFE9FC696011032 /* ImageViewerTransitioningHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF8DDC1BDB2A865CCB609C58DEA7E7F /* ImageViewerTransitioningHandler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 712B206A80834D70948F139C60F637AD /* RLMArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 29C2014BAA6D242C5C0796A40D375AFA /* RLMArray.h */; }; + 7159130068D01DC037A4F66847A4FBE6 /* primitive_list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9D57DB227BB502AC366CDDB9DC9345F /* primitive_list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 717166B91FAE7482F8C3BB6DCCC2033B /* RLMRealmConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 5B60448F29F9201EE1732B9AFDC5AAE1 /* RLMRealmConfiguration_Private.h */; }; + 728EC7DF4D160139674090474DE06BEB /* FLEXRealmDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E992B6289A4AD51727B86B879DBBF7 /* FLEXRealmDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72B80D4F7BA03081158619A4A2230661 /* MobilePlayer.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A494F9EA5E3D384CE70D6887630ABC05 /* MobilePlayer.bundle */; }; + 72DDD127D17582498DD4B46CF5475726 /* FLAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D0747068ED55A3F00387E4EA0671A8E8 /* FLAnimatedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7362C8587D4763AEDB23E3F446B58074 /* PreviewAudioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1F0CDC24EC702F0A7BDBB38FC66DD1 /* PreviewAudioView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 73D7A73020869082DE85D4CEE026636D /* NSError+RLMSync.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE01589EB30D05B93F78B1C1163A174 /* NSError+RLMSync.h */; }; + 746D8CC262BCA470462C8CEA4BCCE256 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 74BBF4FC67146A905B2F47DED101A004 /* GoogleDataTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 79C24105DC6BF9265711D9E10B5E3BBD /* GoogleDataTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74C9A3D5B5EE03321B465E27A92E8975 /* FLEXNetworkRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41706C72E33AB2281FB21FF5F2C487B4 /* FLEXNetworkRecorder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 74EDF4E6DB81AAE85AA0AB3474E5DB82 /* ImagePipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C85D4D47003EBCB7E526F396AEAB4E /* ImagePipeline.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 74F84A2472A8B21025D88C203EE4ADAA /* FIRDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB46BD859ED232B2F0A506F6621CC31 /* FIRDiagnosticsData.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 75219360985FA39110DCF92D32A91EBA /* FLEXMethodCallingViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AD9E81B541A2F6ACE71858560AC8E0F7 /* FLEXMethodCallingViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7526BA213001D0B2D3FDB1903D377ECB /* MLIncreaseVolume.png in Resources */ = {isa = PBXBuildFile; fileRef = BADE05219A358EB1BC57717BC10E0713 /* MLIncreaseVolume.png */; }; + 75B3BA76A776B6C177F42512F875C569 /* FLEXArgumentInputStructView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50CF61641F035AB81866D055C455F541 /* FLEXArgumentInputStructView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75E12D0D04DED7DE57B127E2FA7D243D /* SwipeTableViewCell+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92FDF4F22E34B2A8614E936F909100D7 /* SwipeTableViewCell+Accessibility.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 75F60518DA4A0CD837495A5E080FD007 /* NSError+RLMSync.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D1A1B54C105F47C929BABDE66DDE2A7 /* NSError+RLMSync.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 763F0743EAC0C7C218F4A8ED7B6853FA /* RLMRealm_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 06593A948E006D059354C07B79D8536F /* RLMRealm_Dynamic.h */; }; + 769E02867A91AAA9B85C899F5851B328 /* SwipeCellKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9453DB1B91275B0DE135A6A1E171A208 /* SwipeCellKit-dummy.m */; }; + 76DB1FB9430AE01B879C173A7C21D3A2 /* shared_realm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE9E10928E34DE768B93A3F2A95D7295 /* shared_realm.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 76DE5C424E61DBB62EEE97C30362A126 /* NSError+RLMSync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 5FE01589EB30D05B93F78B1C1163A174 /* NSError+RLMSync.h */; }; + 77256B549BC01BB7CEE215980922F1A0 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = C5536BD2AE613CBD1468001B32464DCB /* FIRLibrary.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 77611AFABC3802398A75FD2005534D36 /* FLEXMultiColumnTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = C5382B398A7790F49B709BEB0B212009 /* FLEXMultiColumnTableView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 78A13EFBE667A84698148035C80136DF /* GULNetworkURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = F2A9623591E3F5D030981B89EDC126B2 /* GULNetworkURLSession.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 78F6E5827409412388EE84AA7C5763B6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 7900D7C77D6023F5D8679D685B49C30C /* Results.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1A9DBF61122E8279A5F2B90160AE777 /* Results.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 790B9149B9FE8839F4155068D84E1C5B /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 47166FC79DD2B626C59EA1820C595EEC /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 794122CB44A6376299C60DDFF3B9DD6C /* FirebaseCoreDiagnostics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BD644D92828CF301F94FAB9065DB3B5C /* FirebaseCoreDiagnostics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7946E48D49896EE74A11E78ACFA340CE /* GULNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 522925296C99DA26C4F3137E76AC31EC /* GULNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 799B74EF5D24D5343EAEBCCBE58CB353 /* Int+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18ADB6C4DA4444D57F2D6B80BE5ACB25 /* Int+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 79F7F14C6D191F6887AA6269D328004B /* OAuthSwiftClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934F21B2CD926AF13E2525BA22FA08B2 /* OAuthSwiftClient.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A629535053BF796E5FDD53A358ADE70 /* RLMListBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 736C373A6A91E4A983270AECDED523A0 /* RLMListBase.h */; }; + 7A872147C2975098B603DFC55906E35C /* FIRInstanceIDTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DD705DB493406CFE9756E24B0B402D0E /* FIRInstanceIDTokenManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B0165D5D135F49FBF2A7CFA5835FB2D /* UIApplication+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80699E4150D7FA44596907501065F78 /* UIApplication+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7B37EFA779FAD6431CD420203775BA95 /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 03A9DE2C81710DB8A30212C75DB4746B /* es.lproj */; }; + 7B3D80D82C16D8C0C1CB4E66960D72C2 /* GDTCORAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2909FD038E48F356B47E6C4ECBAF49 /* GDTCORAssert.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B57D471960D273FF22A3B68B7F56923 /* RCMarkdownParser-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 45B5EFAFC947FC41B00B304E812BD4BA /* RCMarkdownParser-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BACEF537A99FEA712D11C139CE244C9 /* FIRConfigurationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 942073495F157FB2C816F14B898AE57E /* FIRConfigurationInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 7BE96B4C06D6752B23F916A6A583DA4C /* FIRComponentContainerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 44DEC34DFC54A6E319F110386B6416AF /* FIRComponentContainerInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 7C08E3C139A6A1BE51206056F6BEC545 /* RLMRealmConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B60448F29F9201EE1732B9AFDC5AAE1 /* RLMRealmConfiguration_Private.h */; }; + 7C6341E8C8218B8D65EA770E7559334C /* ObjectSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60901E859E25B865CE71347B69BDCD23 /* ObjectSchema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7C92D836C52A63A757FC6DE136A59A6A /* FLEXArgumentInputTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 87CF9B28D6601476F2D0B65BCDCAE838 /* FLEXArgumentInputTextView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7CB81B44146F7B6E06AED6BFEADBDF8C /* FLEXExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C230E1359A248A1F79076DDA738ABD /* FLEXExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7CF0D0153C9E8842239541B243B63A29 /* NotificationCenter+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4232FA492312AAC864248F591661DA10 /* NotificationCenter+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E2C3606C852528A9DD905BF86D11DF2 /* OAuthSwiftResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06CAFCCFF0FF9960902753EBC6FDEBDF /* OAuthSwiftResponse.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E72DC7C553970CE15147589D1F34D56 /* MLCloseButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BF32ED95154050ACFD78362C12A9421 /* MLCloseButton.png */; }; + 7EAD7345BFA15BE0A798E2E6EDEEF449 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A9D3AE6168F11FFB7541CFB619DFBC9 /* UIKit.framework */; }; + 7EB8A0B273EBDF007F810D732E1E8059 /* FLEXNetworkObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 73B4D3B3BEBAF159B62020B879FCF0EA /* FLEXNetworkObserver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F132FE37D24354E30E27ADCAF9679F8 /* FLEXFileBrowserSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD160F00C107EC88F2CB5926EAB57D1 /* FLEXFileBrowserSearchOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F8F3D1CCB7B727EED498A13CB33E4E9 /* FLAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 064E7D1CD9BF9F08DE8E872CC0734169 /* FLAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FB5B01D7562A4BB6780DC7688D49DD1 /* OnePasswordExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 71BEB2A642A1CFEE3A7DBFAA9FB7E22D /* OnePasswordExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 809DA5D1A20AE0411138B9CE6678BA2D /* collection_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9630D8A234FBA86BE181C2C9B9E7193D /* collection_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 80C010CA21F71136A58F66C9FA180A30 /* Swipeable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 128930AEFC24615F910E45D913E15851 /* Swipeable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 80EBB774DC570657F4209746F0057A5C /* SwipeTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A8F597A001DFC31DA6062AE7AC46AD /* SwipeTableViewCell.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 817650BD30BA56AD50457BA4D38D8C14 /* Pods-Rocket.Chat.ShareExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 765BE420B1E8A3A67885C25396CAAE85 /* Pods-Rocket.Chat.ShareExtension-dummy.m */; }; + 8191205545E2F26B93D22092C66C05E3 /* GULAppDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA81B041B4E20BFFE22907E4C382FA /* GULAppDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 81F1AAA9898E59B6883C25EBA4874A08 /* RLMProperty.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 3F29729926FB89531EEF1FA5B914C724 /* RLMProperty.h */; }; + 8225EDC7ED9D0B42ECCBAEC52E22175E /* ImageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C4F45506EB8EFE786FF82E6B6345EBD /* ImageRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 82A17775FB9AB54BCE5BFC00AA4E41EC /* FIRInstanceIDStringEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C81FE76880DF48AF660CE84A5971B7C /* FIRInstanceIDStringEncoding.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 82D93DB936015290B8C7F4C4581BF35F /* Bar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D2EB66643CB492D65162C0A26E42508 /* Bar.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 82DF31B88B7DD7705A991D1E6DD43B6B /* GDTCORDataFuture.h in Headers */ = {isa = PBXBuildFile; fileRef = 59CC772EADF19BA70EDB311976B240BE /* GDTCORDataFuture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 83720ADCC8B9D44AFD927667A985CC0D /* FLEXLibrariesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B3BEA703C2E4A2555E1C27927DF69F9F /* FLEXLibrariesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 83D7192E5DCCB5225AFE5C9A856BDC5A /* FLEXArgumentInputColorView.m in Sources */ = {isa = PBXBuildFile; fileRef = A97D185B6CF9FA0E0B8E05FA3DCBC422 /* FLEXArgumentInputColorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 83F8D4F14F73373612B3D4125222066B /* OAuth1Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A9766DE3CD25C3B6AFD6167781E6348 /* OAuth1Swift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 84F729021409FF95A12BC4C7F908D502 /* GDTCORRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = 54F84112C4D6578FEAE6A6177B43B9F8 /* GDTCORRegistrar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 855D115B6F80C39A0E873E1899B78E9F /* UIColor+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86F57EFE8DCE74DA586425C2933386EB /* UIColor+Hex.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 855E2F2F52A894C24C2598B6438643CE /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D59F57C2DE709249994BDCD4D5C5DF2 /* SwiftVersion.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 85C269D9D960780CF91F1B5A6FCC044F /* FLEXExplorerToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = B716360E40C006675C6544D6BA5FCB76 /* FLEXExplorerToolbar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 85CB17B3BA3028C89B21BF612BAA08DE /* FLEXGlobalsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A0493EE6B4B30B4E5BAA610D9CE45C5D /* FLEXGlobalsTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 85ED4CB570BF2792CC416B331F753AA6 /* GULSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = FA50DFA8BDFF060ED04A111BF61A61DF /* GULSwizzler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8614CE23175545760A7E602F81093889 /* RLMAccessor.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 13342D01F98A96B0D54B5C1A0D9BB139 /* RLMAccessor.h */; }; + 86AED215D4153F63BA15E7BB75ABFB76 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 86CFD003C85AC91D3015FAC96D5C8BDA /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 014B6A9EE013D5281C412B5740704A64 /* MobileCoreServices.framework */; }; + 8742B3C1BF72AA6988DF43FE6D2050EB /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 638EDBA2170A4F4B26DACF7761C6E5E2 /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8750B15783988095C3BAD7DDA521B311 /* FIRInstanceIDKeyPairUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A181D4A3D5D88D0C0305A6EA33BBCB9D /* FIRInstanceIDKeyPairUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 87A5DFE275771D173A361E9091413743 /* DifferentiableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D8966CB73370A689B30C740239C9C3D /* DifferentiableSection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 890DA0810BC230A7BEB78FFCEEE98CDD /* RLMSyncConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B3C9A1960DC9DA166F5EC3D500B17BE6 /* RLMSyncConfiguration.h */; }; + 892B407017FCFD569137F49D8BD3417A /* ReachabilitySwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6651C10EE226E8D1139BC4FB5C8B51 /* ReachabilitySwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 894B6D84ABE83BFB8171EB14E64E0FFB /* FLEXFieldEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC828452716B19AD852947BE4BD2E004 /* FLEXFieldEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 894EFF0F94153CBCD981C3407C136491 /* GDTCOREventDataObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A71F1F0E727B5759DDD5FED669E0BF /* GDTCOREventDataObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 894FE910105FD69B8D6A0162444D6827 /* FIRInstanceIDTokenInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 972E480399377F1287E0EF70818C33C4 /* FIRInstanceIDTokenInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89F4C810CF844212794D8A3A2BE493FC /* FLEXHierarchyTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F06FF305454F67E3271ABC1F7311D83 /* FLEXHierarchyTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8A738E28B4B7FB1C23B3625FC61FFE7C /* FLEXManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0592BB101BDB3659B136E18FFFD1E16B /* FLEXManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8A98B93263A8DFFCABB518ED66EDAABA /* FIRInstanceIDCombinedHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A32021452F1053800E72076E2C0213DF /* FIRInstanceIDCombinedHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B095B4D75B7143F1EAC7B4730590586 /* FIRComponentType.m in Sources */ = {isa = PBXBuildFile; fileRef = A137D6CB291086A8F54B37C91467DAB4 /* FIRComponentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8B85DCC763BB380CA635EDF0D7EEC366 /* RLMSyncUser.mm in Sources */ = {isa = PBXBuildFile; fileRef = A224A92C601DBAAEBB8BF1D7D0F891AD /* RLMSyncUser.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8C2A461AAFAF414491CC486E4B2E1F40 /* FLEXViewControllerExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 99352CC81E5B56081CE5C3A54E3A3695 /* FLEXViewControllerExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CC2CD36861E3D63065B312F0BB7943A /* FIRInstanceIDTokenFetchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D34465C3B8C542E47E303507CE6A879 /* FIRInstanceIDTokenFetchOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D204ADC40D22118D7A162EDFA96A9BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 8D81C6EE4A5E112A06055D0CD9355F29 /* MLShareButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6A5863EAFA18463A3EF8CDC435506C41 /* MLShareButton@2x.png */; }; + 8DABB7A243348B43953F468267C8FC96 /* RLMRealm+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = A4858CC422D5596C68F661F6DBB8C243 /* RLMRealm+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8DC3D930E40CF61C9FD907797217AC17 /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 15427FC84688BB3E90070E8CA2FDDF4C /* FIRConfiguration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8DE287017265B81C9E7B72D9720C3A8F /* RLMSyncPermissionResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = 300FE660EF4DD975514D2F2375D84DBB /* RLMSyncPermissionResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E0C743A733BA718CEC97BCC499D2F92 /* FLEXArgumentInputFontsPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0BED042B031C59FF6C9FE94CF69454 /* FLEXArgumentInputFontsPickerView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E0F5F21BB5A4FA3DB931CDB92736025 /* 1PasswordExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EB8169A25F00A4FB6C295A550C47C7D /* 1PasswordExtension-dummy.m */; }; + 8E7B0BF3BBAD47858822B48097C42EC8 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4C267BF9A9956F537090DB8142D82BBC /* RLMObjectBase_Dynamic.h */; }; + 8E8E3FFE08DAB8514D6A2D7690299B01 /* MobilePlayer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 01DEB552863D030E9ACAA1C946CB0005 /* MobilePlayer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8EDF0D48A6B3C899B93EBC260B702534 /* RLMSyncSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 720BA95CF5D5C7B0F53B54B0E88AB8C7 /* RLMSyncSession.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8F1292330914791AAD23FFE908125180 /* RLMJSONModels.m in Sources */ = {isa = PBXBuildFile; fileRef = BBC219BB1D65D77A320574CBA5320F33 /* RLMJSONModels.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8FBCA93BA8A4006AF6DDC4CB41C848FE /* FLEXSystemLogMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = A8D3F75ADA56F34C2885A8F1438E047E /* FLEXSystemLogMessage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 90CF806A909C9570ABD7ABAE2D102A2B /* GULAppDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = DFFDF6254D503C4BB25D42EF2120831C /* GULAppDelegateSwizzler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 913E31D4B7FE1D0EE457A3F662588218 /* GDTCORTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = AD7938E6E603E00319A0E828FA13D74C /* GDTCORTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 913EF17272D2963B3657FEA7D74DDBB2 /* FLEXTableListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B78A4BE16C0B8A9609BFA0425CCD1828 /* FLEXTableListViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9143AA99CC670883F08E638CE4DFEF1C /* RLMSyncSubscription.mm in Sources */ = {isa = PBXBuildFile; fileRef = B68ED9528DECB546FF2178DF1797AAFD /* RLMSyncSubscription.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 91A6A08881E5557920301A8C8D270AA0 /* Nuke-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5555CE85CF436D7950C2B6E4C70A40AA /* Nuke-dummy.m */; }; + 91CB6B61C2734EE2AA031EC8584EC522 /* ImageViewer-Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8A8380138033FB563AE69397C08BC07C /* ImageViewer-Assets.xcassets */; }; + 91EC3240D6EB78120FF91814E2A7922A /* RLMObjectSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = BFDB547751B83CB0B76267052059FD56 /* RLMObjectSchema.h */; }; + 91F77A6E96F67BAEA779D351EAFBE0A1 /* FLEXWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA8A25D35C42FEBFAE0E1CEC0B1EBA5 /* FLEXWebViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 924BBB2D4BD0F0B299C70975890C3964 /* ComposerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B21478A78B9DC6410D459510C3246E62 /* ComposerView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 929021606764407D567D0218A8F899D4 /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A67BBF434A5B05A16E2FB749132152D /* FIRBundleUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 92BF9628912457C09C9C68152832D36E /* GULReachabilityChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = A160B7B0709E706A1F005EF3CF295032 /* GULReachabilityChecker.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 92C855B85FFB650DB5710D0C3D7FE3AA /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 974E74D61116A652062F8D69F7CFDBEB /* ImageIO.framework */; }; + 932194F95A64D40B5C196AF171140B8C /* FLAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = E00CB8D20A596AD59457C5D4C19DD93C /* FLAnimatedImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 935E1111DE438D6F7447C03695B49A7B /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = B989597516C43FBBE749A88ACDD533BA /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9363AFB4442904B0C16572397DA5260F /* RLMSyncConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = E71D1273E363FB9447B8A6209CFAC030 /* RLMSyncConfiguration_Private.h */; }; + 93ADDF997A28085EE2E1B7EFA21FCBCE /* ClosureSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FB0EBC8214E9F936FCE046E055921E3 /* ClosureSupport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 93C409412D7F2D1F2E0AAC6A83712D92 /* GDTCCTNanopbHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = EAF54011C28179CB3989B94D05481737 /* GDTCCTNanopbHelpers.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 93D3598D01E59A6D3C2F787110C6A3CA /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B18620F19478509A721E58CA95BB6DA /* FIRComponentType.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 94059B1702A34A81BD0F0B7C3320B011 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC06B372D793CF5D666EDE5D8FBFA28 /* Object.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 942BE5EC861093D7B18C29E7494521E2 /* GULNetworkMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 16B67C4736F18DC125AE88201387BFD2 /* GULNetworkMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 945B9ECDD2328391FA3CD55410E700A7 /* RLMRealmConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 543BA0788A83512AEA324A36B13F3151 /* RLMRealmConfiguration.h */; }; + 947171B3FB69A87521B3D4F65330F6C5 /* RLMConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D214BAA46366DEA7A9A5ECEC0966591 /* RLMConstants.h */; }; + 94D6442A9917239E083A251F575C32BC /* FLEXSetExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC09013DD8C3D921BA2890080A6534D7 /* FLEXSetExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 953A79EDEB22DEBC9EEE825DED8B8F7D /* FLEXNetworkSettingsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5879D2818EB85C10A3C924D370F321D8 /* FLEXNetworkSettingsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95C19C72A7493B93A11CF2AC379FCD13 /* ComposerViewExpandedDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A5730720CC001C4B89299C34A6BA600 /* ComposerViewExpandedDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 96011DEF3B0405643E5F23F3D1C433E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 96070804E03BF30C6FA07022DEBBDD23 /* FirebaseCoreDiagnostics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BEC142D1139605B2D33D9C174971D566 /* FirebaseCoreDiagnostics-dummy.m */; }; + 9674B50724984F81D71BEECC92EB5117 /* FLAnimatedImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02E282EFBA9E30E4C20C7CA809809A8 /* FLAnimatedImage.framework */; }; + 96B720E0DD87A8313175F939BAE2E957 /* MLVolumeButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E3DAB7A0527FF8002B28692033BDD1C2 /* MLVolumeButton@3x.png */; }; + 973F685292556848D123809E7CB24CAA /* AnimatableImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C274E424F704A18DF70A337371F6F721 /* AnimatableImageView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9796FD5EF3C687EB1C475CD76EEB23D4 /* GDTCORLifecycle.h in Headers */ = {isa = PBXBuildFile; fileRef = 53554BEFA2F03FEF8851800213876779 /* GDTCORLifecycle.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9811E4A47F425CCA922ECF6769767E1E /* LabelConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = D274E53D4440177A5A2DBE9DCAEF5C8E /* LabelConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 982791F2573A2B3F8E6F1F142135A13C /* FLEXTableContentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6346F7F3927A405432D48857B4CA7010 /* FLEXTableContentCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9873F7626EBFCB8B30FD54CBBA08178F /* RLMSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 77BFD6FF593B820265C1E63AAC4E82EF /* RLMSchema_Private.h */; }; + 99E08B2E09E7ED4E66129D577C2A46FE /* FIRInstanceIDStringEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 79FDE27E98FBCEEBB66CBA3C85035AA5 /* FIRInstanceIDStringEncoding.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A2F157C6DC62EC3E652793C74272A3C /* results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 377245FFE5CFBA06681AF1C212999DF5 /* results.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9AD5D4A5959E8F280BC956B802458690 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 9BC0B1DEA0B30DB4694C52AB66A300F6 /* Pods-Rocket.ChatTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EFD5686D1D31ACBAD2CEF5226454C24 /* Pods-Rocket.ChatTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9BD5FF8610B468F33560F0A82B588807 /* ComposerLocalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5967C3FFFEDB39BC24D84E5476E1899F /* ComposerLocalizable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9BDFE8C62E11DD07C598692E1B891F51 /* FLEXUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = DD79B6624EA1BADDEFA417BAB4A368BD /* FLEXUtility.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9BFB46B940FF9FA1C25F145D706CDF26 /* BarConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = B857989A16C0003C2D7E960432BBFD34 /* BarConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9C411B4528C3A714E857FF5FEF8B96F3 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B2B892919D56AD32496CF0741A31C8 /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9C55BAB8C6FDD99F96857D3568C31E84 /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = C7847669EA26B3E2F564575365CF1C6C /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C5FB41281A985A540B6EA74C6BAF8E8 /* RCMarkdownParser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F35300C792CE2C1912BA4A2191072907 /* RCMarkdownParser-dummy.m */; }; + 9CB64B3E5FE260008967F48625AFCB3F /* FLEXArgumentInputViewFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = E6EC738AF804EEBDC2FB175064DC7294 /* FLEXArgumentInputViewFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D5F19483EC40DC38AD364397B9D8B30 /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = AB5E5B0214E45BA5637D5795FC03F3E2 /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D9CB2490267C3979E835A0552CCE4CF /* Element.swift in Sources */ = {isa = PBXBuildFile; fileRef = F99E4B9F8FDC97460A1D44F93F27A144 /* Element.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9DB26AB970D7D1D84A5C75CE9ED3F6A2 /* ImagePreheater.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6423B29494ACF9C9DC11EE7AA82B730 /* ImagePreheater.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9DD81518DCF05A926C33B935A5782864 /* FLEXDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 613A346D7E8B63CA29D2782C1FFB6B5A /* FLEXDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EFC393FC4B8E2C9B6068EE74FB13B5B /* FIRCoreDiagnosticsConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AF8CBC30CE9ADD541A69BC2AB0C38AF /* FIRCoreDiagnosticsConnector.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9F2C758B5F9AB194604777EA29D027A0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + 9FADC98A8734A7FFCB2680EBEC792D0C /* GDTCORTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A5D803D69DB158ECDD888F64C78C3CD /* GDTCORTransformer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A053BC109421D359F92949FD2E1F469B /* RLMRealm_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CAF3B7181A1160FCCC878725721158D /* RLMRealm_Private.h */; }; + A082526C1F4ED66E997A8D3B744D114D /* RLMObjectStore.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C1BDA29585B7602FAA49AA1D7CF3943E /* RLMObjectStore.h */; }; + A09E9776D06C64E0381C740FBDA96010 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB9ED20363E8E4AB931FC4FB130D3BD /* QuartzCore.framework */; }; + A0BD29D6250B19B5FFC6FDEA2D58547D /* RLMObjectStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 64912F855ADE901A8E260E80CA9AB943 /* RLMObjectStore.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A0F62CE5C2D80F359911BC50640D93A4 /* ObjectiveCSupport+Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C48EEA722717605211ADE41F199B42 /* ObjectiveCSupport+Sync.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A0FC37F42CA3654E2098E1986DB95832 /* RCMarkdownParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438750D3C9EC7443CE4A50AC6FBB7F57 /* RCMarkdownParser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A168802E85649C397DBBEBA7EB8990C5 /* RCBaseParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7745CA6D616774AB456420114BF1DE /* RCBaseParser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A19F7236A044241489D3556CBF3F41A0 /* GULReachabilityChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 758087B03E6E66E5B8177915CC535762 /* GULReachabilityChecker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2B705BDA74A90000F0CA86ECC0F15D4 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7124E09AC87BC2040B9F6603623CBB8E /* Optional.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A302AFD2B1AF22E80AA0D9FF17FE7CE8 /* SwipeTableViewCell+Display.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9431C77653EE1D19A88C4E08F7197957 /* SwipeTableViewCell+Display.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A38B156651E0B8A58D7ABF46DDE0A037 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90CA305F1D9AA40BC0AB5D63513D17C1 /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A3A6BA37D1FD335F39C292607405CCBF /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72E622667770751D5D5C5FB0DDE4EAFB /* Error.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A3AF23903D0C780677B19DCCDB5C1653 /* RLMObject_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C5DCC459D967C96D6EBF151261B77521 /* RLMObject_Private.h */; }; + A3F9087EF40E92CD06F9FB88ABB7BF72 /* RLMSyncUtil_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8FD723202526D2D9F7AEF76F4F56F7D2 /* RLMSyncUtil_Private.h */; }; + A4BF770220116CA53A7B72119D35740C /* GULApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6DF7B090FD92E62BB80DBC4D5144C9 /* GULApplication.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A4D56DCBE8E145C494CF2C62996F93ED /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DD33E21A79B1E4A8F8283FEC0977B89D /* en.lproj */; }; + A5C68D97C0AD7C7A2FC3A5F2093DEB00 /* RLMSyncCredentials.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB27647D7FDDAEA329F835B2E1BC9A9 /* RLMSyncCredentials.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A5F3E9F4469ABF1475269C74538687C1 /* AnyDifferentiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90943AB43686CF64A4BC6EC89D18BF7 /* AnyDifferentiable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6133AE9A4BE8D72271CE2DEBC6A8991 /* GDTCOREvent_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C1FF97B57784B42747BCF8F4F65B2A5 /* GDTCOREvent_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A63F9C038CD6535B47768C23CED5AA10 /* FIRCoreDiagnostics.m in Sources */ = {isa = PBXBuildFile; fileRef = C91C105CCBC848E4D6D440AB606B640B /* FIRCoreDiagnostics.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6B4395B0E61A7EE6705FB3CBE54E313 /* RLMSyncUser.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E9FFA2669005FCF8BED83CB72841D6A2 /* RLMSyncUser.h */; }; + A6E08399A3C4DFE5EFF2EED8BAAA1257 /* Pods-Rocket.ChatTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 909F5C4480D7E82B0877A398AD694FEC /* Pods-Rocket.ChatTests-dummy.m */; }; + A6FC9EFA23E6FCB176E913906F72A408 /* RocketChatViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B62BF6184B7E89A6826B02050CEA82A3 /* RocketChatViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A71F71235C8C49E86E48B8BD2999E781 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F451DBBBBAE5A78217571E380A6ECCE /* Button.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A75A2F56183D7A0D05CE388778CA4E9F /* GDTFLLUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = C6ABC3CAF22D4567480D52831F316E2F /* GDTFLLUploader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A7C35622D1711EDBB938AB726068EF19 /* GULNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 1687CB6BFD67F92C631491FD7AC2818A /* GULNetwork.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A7D686EC28B1C30C7A333C67CC870E75 /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD4900C351E708F8491229C1EB54D25 /* FIRComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A82875AD63AA455F3F304BF5DA29DB3D /* RLMSyncManager.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A8B053D58036089B7169E5286975AC84 /* RLMSyncManager.h */; }; + A8428E7DC2BAD77F8C0FFBE6FF69AC31 /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A965A830969D292A0587C50197C9CE1 /* Changeset.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A887E94F48C833183F43E06EA0885579 /* thread_safe_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E18302951078475E8839BC5C9FB652C /* thread_safe_reference.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A8A19DB4F202CF5BF4096E0D8650AEBC /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = D9CA95951BC3EF2AA54285E1B67E6851 /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A981D6E65B23C7CF2592579EA86056BD /* cct.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F10E7351527A6A2BD0110F1CE83E14D /* cct.nanopb.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A983265EC5032F1FE964CA180C6FBCA7 /* FLEXArgumentInputStringView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF61B8DD2B356D139872B3D6193AFAC /* FLEXArgumentInputStringView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A98A4D9D453EBB5382EFF594721DEAE7 /* StagedChangeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925550252B2B50146B5913040AD7A54D /* StagedChangeset.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A9ABAB60FD75DEDA5A2AEBC12CD91A46 /* FLEXDefaultEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 347B83B82BDC5E38DE3279420F9F2724 /* FLEXDefaultEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9F9B1DE5D9FD47B2FF7B8A71344A932 /* FirebaseInstanceID-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BAF136986A17C6EEF580B2C7BE76B6E1 /* FirebaseInstanceID-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA23CE0A61423F97084104ADB9E15E24 /* FLEXDefaultEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15F92EFE10741A4011C635365DDD5D3C /* FLEXDefaultEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AAC884F848CB486A35551368DE4D47A7 /* FIRInstanceIDCheckinPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 0831B9643A69B9855B8021695225613C /* FIRInstanceIDCheckinPreferences.h */; settings = {ATTRIBUTES = (Private, ); }; }; + AACE0050EA5F63B58181B03D327FF700 /* NSError+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ADE7CAEDF81F7259C12A85604FDFCC5 /* NSError+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AAEDFD75E6F032DD92D1AA29F0B75A81 /* MLCloseButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9884CA4C5DEAE8438DDC5449834C4F00 /* MLCloseButton@2x.png */; }; + AB2EAF670EF3E7ED1392931E8E14303B /* SortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039C42C008DBCE8DFEA8596C759D423D /* SortDescriptor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB344DC8B84A9DAC2B74643422E86860 /* FLEXCookiesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E39939B5637E18541C1E65A43CDEA124 /* FLEXCookiesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB40F243D914F98D6B5EA3E90ED253D2 /* FIRInstanceIDAPNSInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 813A07E53D0F9E74B18E65E3A6B35D11 /* FIRInstanceIDAPNSInfo.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB771764A22E1BE7BF4464F356D2D166 /* ContentEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6FFDB718C77AACF95F6E3123888F83 /* ContentEquatable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB9DC499828B10F09E7695A423FB3571 /* FLEXHierarchyTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 821D0C129E3ABAB04A228CEEC4A5B675 /* FLEXHierarchyTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABB9412803779A21A3131BF54A11C3A9 /* RLMConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 05FC5ED8298D8FC80A16CAB58376DFC8 /* RLMConstants.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABBADD074AB7DAE19B3AE225E16A8392 /* FLEXManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 492905C529C2EAA2227A5AF97656F1A9 /* FLEXManager+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABBB92852A1586173B6E53FF681DC9E3 /* Nuke-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F796AD6128C846E07E2AF4A0A8DDFC7 /* Nuke-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACB99BC852E0102A0E647DC02EDBC086 /* RLMMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = E7EAE735D8A86D0B320B44F198F5D756 /* RLMMigration.h */; }; + ACDE4F4592B7F56F39BD914F3B3BE0F7 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31EF3647CF03CCF8A14508AAFEB28B57 /* Util.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ACE7FB200BC493DC57DD850851E1F6C4 /* GULMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 8696BFF9A70326F7361D5BD15A6BBC54 /* GULMutableDictionary.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ACE82C0D54F845C15711799438E7F9B2 /* RLMMigration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E7EAE735D8A86D0B320B44F198F5D756 /* RLMMigration.h */; }; + AD1F7EB0805534B6FA9D80087F61F880 /* FLEXRealmDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 68F06A304100450C387FB9311038FE5B /* FLEXRealmDatabaseManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD2DA9B97D695A307D4FE3F9F1CDCBCC /* OAuth2Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D90218EC834825052E1DD3C199D0FF /* OAuth2Swift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD5206DCDD38099E45A695EB0AA7DA65 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A00135644707D77F62D86FEEA0B2FD3 /* Property.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD70F43A048EA549718F7C49CD8A09C0 /* realm_coordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC9029ED92348504D1E864BB9A8A05CE /* realm_coordinator.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ADB9B19147774D2050630BA14BD46BD9 /* RLMSyncConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1E83143CA3B37DD064654E89E2A1808 /* RLMSyncConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AE2E063F4D3F7D2CA05D5BF8CCA58851 /* RLMSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 77BFD6FF593B820265C1E63AAC4E82EF /* RLMSchema_Private.h */; }; + AF4F93018841A21E91FABF20A3F665E3 /* ComposerAddon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733B701552FBE4C30E4FDB0D7F824707 /* ComposerAddon.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF98672A0448AC00503EFEE3B55EF8A8 /* GDTCORReachability_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FB387186BC80786CE53CAF81EC045EA0 /* GDTCORReachability_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + AFAE3D8B62E472E9723590B3FEEC2B92 /* FLEXFileBrowserFileOperationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D28CD4509EA1858AAEE97875FA73E2 /* FLEXFileBrowserFileOperationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AFE74A83A71B928B1CFABB2716E9A82C /* ImageViewerDismissalInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D30D0FED75EB1019C8A721AD680F7B /* ImageViewerDismissalInteractor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B03D93D34B4FAC32829C7D8F51158571 /* RLMSyncSubscription.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AD0A13B831BFB0C0060557212BFA8E4A /* RLMSyncSubscription.h */; }; + B0406BECFCF48A9134C0258E366D17FF /* ContentEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6FFDB718C77AACF95F6E3123888F83 /* ContentEquatable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B08E534A10221582A6C3DB125EF27921 /* OAuthSwiftMultipartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA9254FA659AA50F02EDACEFF1F4A /* OAuthSwiftMultipartData.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B18F314BBB5E28951F077F4A43E86F87 /* FIRInstanceIDConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9D2F89B1ADAFA5FE5136B2E3E2B427 /* FIRInstanceIDConstants.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B213723D96A21550F60BC406FAE5101E /* GDTCORStorage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C89DD7EAA8F2EA32E98A634C211EC1 /* GDTCORStorage_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B257A8AC75FA183691545081262E9F9E /* FIRInstanceIDTokenStore.h in Headers */ = {isa = PBXBuildFile; fileRef = AE32BB52F2B8E38256E480E32A03C07C /* FIRInstanceIDTokenStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B299E04F71E1209865F87A7346313815 /* FLEXIvarEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D950A0F7FA2B3EB6BB0D80E61B4F5D50 /* FLEXIvarEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2C7CB4AB79C7260DCE25B7D110DF244 /* FLEXSystemLogTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CAF212D083B8EF14D39CB5A19EB2B2CB /* FLEXSystemLogTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B3183972005B1C73CE7972545983DCFA /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A99B1F8C78AA14AB99228C6A587E679F /* Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B3CA1B1CF4C9BDCF65395E08FA414444 /* GDTCOREvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 04929AF0D716D838952919510A22983E /* GDTCOREvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B3F03960F46516185BAF55BF5E031408 /* RLMSyncUtil_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FD723202526D2D9F7AEF76F4F56F7D2 /* RLMSyncUtil_Private.h */; }; + B406576A0EF740930CB75EFC95F9A932 /* Semver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16EDA0697AB7EF753F3ECD1CE4232256 /* Semver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B49BD078C4D501714FD8A2B0BE7AC522 /* FLEXObjectExplorerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 0878BA4AF1B02FAAC0B3637974BD4BA6 /* FLEXObjectExplorerFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4B2AF86C7C6826D48F751F13ED2C03D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + B56E58E3D16201F23BC069047D18C07A /* DifferentiableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D8966CB73370A689B30C740239C9C3D /* DifferentiableSection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B58B0EE93F7C27BDC72A66D90DE3EDDD /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA16993E505EE934E4A6ED21EB8CEAC3 /* SHA1.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B59D11ECEFB527FF9B1F6242D1794180 /* uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7703BAE82F847CB92E5E240CDAE05BFF /* uuid.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B709EDD9B1673E7F1AFA13CFF497D4E4 /* ImageViewerController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 589513B8C9D767B2B99A6C9D97C1E61C /* ImageViewerController.xib */; }; + B767ED712EC8EEA04D0BC903700850A8 /* YoutubeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58A2FD0A34545BB56A4A26CF2B959B31 /* YoutubeParser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B7B1E0333F71FA009C9AC0DEDC090DE4 /* RLMSyncPermission.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 37142B20FC9EA8E59811F270D7C81D62 /* RLMSyncPermission.h */; }; + B7FE149A1B5BC871FBE59FB1B5D0579E /* SimpleImageViewer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 900759CACE9016B276291B411EAA6847 /* SimpleImageViewer-dummy.m */; }; + B80256CBA23EB1E6E01DC5DDDBFA501F /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 274B7427DAC2A5446451C366E393DD23 /* FIRApp.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B82A630B622423F576C269C440D9FC98 /* RLMObjectBase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CEE5C71735650B508E41F081602255C /* RLMObjectBase_Private.h */; }; + B85A84748B7E52EAD017AA3DDEA3F4E6 /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 33ED13762953F023C9DDD574D798CD7C /* pl.lproj */; }; + B883E1D0E83D93A6CBF0127F6F965405 /* MobilePlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 31599602E1CEEEE2CCFD5F9886B7CCB3 /* MobilePlayer-dummy.m */; }; + B8BEE6D0FA9384324210F64089FF38EE /* FIRInstanceIDConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = D69CD7CE2E44C61F376993D6D79070A8 /* FIRInstanceIDConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B8F9028722735130FAC65F7EFA4DD57A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + B926BFEC8D737BDC9D2C43D41A17642C /* ElementConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385B23F1248C4D0AB3C82E855219E4F1 /* ElementConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B933ED94C8891A85326AA3E54BE4D05D /* Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86FACFD952988088662F846ACCC1668 /* Sync.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B939507B488A019130EAA767BA5D722C /* ComposerAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5B795800A5637A7B0E6940B6343F27 /* ComposerAssets.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BA1A66AD570D806CB7A3B94D7FEEAADF /* FLEXTableColumnHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EA8FA52B30CC8078CF7A16F230E5EF /* FLEXTableColumnHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BA6A448AA202525BE49514CE100EC67D /* EditingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8977726EDC46129DF4D5513F674F88 /* EditingView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BA9B6F7220FD73093FB2BA0D7D9706D6 /* FLEXObjectExplorerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F7542B8EEC18DA39EC4451772BB38761 /* FLEXObjectExplorerFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BB0528A5A3CD516726D5DAD994377AD6 /* GDTCORStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 64E9C7D6259F376224794B4AFA224069 /* GDTCORStorage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BB0593B00497BC24D297402CFC1A59E4 /* FIRInstanceIDCombinedHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = A8245D3D31A18BD34C67671C7BBE079D /* FIRInstanceIDCombinedHandler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BB39E1FE8CFE28553CC2D089C2A15B28 /* VolumeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A59611CCEC6C081E12F386A05557AB2 /* VolumeView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BB9FB37A4779342B269450F3B601E659 /* FIRInstanceID+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FCD527797D3E7DE41E05D03B7AF17C9 /* FIRInstanceID+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BBC4928BC49E59CB07CEDE04D09AF14A /* DifferenceKit-Core-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B88AC4F30984A6B68438F23D577B4258 /* DifferenceKit-Core-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBDDE186D609EAB1C124452433BCD3C4 /* FLEXPropertyEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DEC543B627BF4425809C83D4813F3EFC /* FLEXPropertyEditorViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC0A6A8E7238E2B986C927D35AE6E117 /* ButtonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C75B556A12C59E5F876646A8617DC57 /* ButtonConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC78DFFF16DC79AEC9F4E74A9BAE83A1 /* RecordAudioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A688DDB6C090301B7A70E2F56CAE806 /* RecordAudioView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BCA69C999CBAFA0D38F91420303BF05E /* GULSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = CB68E25CAB993E991394E1AEC84615BF /* GULSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BE10DFEE00670388FE399123080E1446 /* FLEXHeapEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = AEC84D4AC77982A70BED1F1FCB526593 /* FLEXHeapEnumerator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE72A22A9E7D78081D4CA85E8FD40ABA /* keychain_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F807B8A7070CC2322765778DB6CCB1E /* keychain_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE88296A5D02E0B1A944D3CC1070C452 /* transact_log_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B147E7FD6FA31C3E3F404A9F91659FF /* transact_log_handler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BEA9FDF217FA44DC901033AC22C75D36 /* MobilePlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EAA5F02AA78F3BBD0A44FFC033E8E1 /* MobilePlayerViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BEADAD28769B276640E7BC93FC4566BF /* FLEXCookiesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2067D69F4479E6BCD7B74D7FF31E664A /* FLEXCookiesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BEF254CF1053A95EB5FC03A1E114849C /* RLMCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6981CC7C504B40E86D2EC43A7EB18683 /* RLMCollection_Private.h */; }; + BF84EF4EAB792757719427ADB89DB48B /* FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C9352EB798C7B500B9276CE05606A43C /* FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BFF6F7FFF06EA335CC19EAF61B70B9CA /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD01B12BD14478F1AA1E30519ABC33C /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C07F731E97B3E1A1902D111935BABF40 /* FLEXObjectExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3576156F3DA91C0FB19F70433ABEC641 /* FLEXObjectExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C09E9E73B1FFB28D9A72C854015016CB /* placeholder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C5A3E797137A91F5B65F68A0F4C64E /* placeholder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C10778DE67D30B7BBCD36B188CCCC610 /* FLEXArgumentInputColorView.h in Headers */ = {isa = PBXBuildFile; fileRef = D40F3B0E7F489A813BD6D320E2F3BC6F /* FLEXArgumentInputColorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1133A88E83E1D0D3311F1FE061C00A3 /* FLEXTableColumnHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = FAD8587A89E6DADCF9D0594A7B7EDEC6 /* FLEXTableColumnHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C16A9A82D2E420F0A4EB5062CD2502E6 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B49018733F2767C7C3ECECA516A9373 /* FIRDependency.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C18F57B6AD022B52D8B525ECD31155AC /* OAuthSwiftError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2924DFCB9F48384591F9477879936E99 /* OAuthSwiftError.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C21F1FF71A6122E0B7FB999ED0899F62 /* SwipeCellKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAC913B46A70F07B8EDD4219F40FB0A /* SwipeCellKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C22D12576D277E9ECF9EB8945EDB66E0 /* Realm.h in Headers */ = {isa = PBXBuildFile; fileRef = C124D7F4E2655DBF4DC5FBADBF12EC90 /* Realm.h */; }; + C25F611FFAEFBF56DC00ED2E157EAF26 /* FLEXRuntimeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = B65063FCD22FFC2D3D3508CA259A1CF3 /* FLEXRuntimeUtility.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C2E2C7C4B2B3CAB6D71341E206E72207 /* ImageTaskMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F3A9C766AA388BADA9A31364D252FC8 /* ImageTaskMetrics.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3489517DD4667D9495C0699EAD0591F /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88BB70907AA7570E038C817E9F5A3C65 /* Migration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3A729CEAE80CC11E2C48E1FD03F85C9 /* OAuthSwiftHTTPRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF99E28B18CDA013CF6FD170370F479D /* OAuthSwiftHTTPRequest.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C41B85AD6A2AEA95B91814E8DF255DC3 /* FIRErrorCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D6768FC46D3811AF3F851EA334181B /* FIRErrorCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C42E59F4C38494EEBBCF204C3D25ACB4 /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 114DF6CC9D416A2CFA555C07F11CDC3D /* nanopb-dummy.m */; }; + C4C03535BB63B139CA26ACD5E5768EDB /* FLAnimatedImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C6C7EDCC51D7925AB615FDBEEA3C3D5B /* FLAnimatedImage-dummy.m */; }; + C5511FA1498EE04F7DFB4600E9FFB3DB /* RLMSyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C0421F6FD49CC2E5D328FD3497F55E54 /* RLMSyncSession.h */; }; + C593F7BDEE806AA1FE9B5FF7B4B6A73B /* FLEXMultilineTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7949294F494D34DAADC124A1F418F764 /* FLEXMultilineTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5A409380C06A58C102D44AE82766C8C /* GDTCCTUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FA6726940DA52AEC7AD668DCACAA02 /* GDTCCTUploader.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C65C0B76860F10EFA575D13095DEB419 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + C681F3B58BCD37D3104C6C7881418AB5 /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F4476234062FC9F0BC028F3B472B6DBF /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C7CECCB0102E1026DDDF1866A23D853A /* SwipeAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00FDDD38DE4424361CDDB529C1F2B7B6 /* SwipeAction.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C8181A90D1B5496C243D202A6E6A1F7A /* ImageViewerPresentationTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89C5A359A75F03883BD32AB65B7CB731 /* ImageViewerPresentationTransition.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C8D12ED70CF0A84CC28C4C4CEE8BE3C7 /* ToggleButtonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FCBC6248717B708DD41730B2E7F305 /* ToggleButtonConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C909AAA0C33D3E6C61FF9233AB566ABC /* FLEXNetworkHistoryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAAAB96AB91F09C8E3C4C44B85DDABED /* FLEXNetworkHistoryTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C9FB53C2F90336D4E30D6092086AF69E /* ImageViewerDismissalTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C44A89B9582DF57EAB6881BD8D020A7 /* ImageViewerDismissalTransition.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CA2D6CEB741D69CA8D81B2AB338A3EFA /* FLEXArrayExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9734D5DD0317F85138965E3010C17 /* FLEXArrayExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CAB1DDEC2B982CC2939A5A123B85EEE0 /* FLEXWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = DF1E8243268A2EC5DF03611DC5636A4D /* FLEXWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB59431268DFB96D25DE982DD37F85BB /* FLEXResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DD49D7B93F00EC83E4F95899111D96C /* FLEXResources.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CB6898DF61F70B2E23669091B898178C /* Dictionary+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162F061BC96038DEA0D8E1D7D2AB2B88 /* Dictionary+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CBEA888F2B38BAB57BC0573A85FAAD91 /* MLPlayButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 8BD69A9042FBDDA3D5FBFDA917668DB4 /* MLPlayButton.png */; }; + CBF233824A9A55749FA739BB6236FF23 /* ElementPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A7C8CD2AD873AAC8E245DBBD4B78FA /* ElementPath.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CC9116967A5D307556EC1C471630B148 /* RLMSyncConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = B3C9A1960DC9DA166F5EC3D500B17BE6 /* RLMSyncConfiguration.h */; }; + CCAD9853D8E32B2028C2ACA3FBBE24AD /* FLEXTableListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F63F6C4D2A75EA40AEED6B63AA1D496 /* FLEXTableListViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CCF2ABA27718B634FB43FC038ACDAA82 /* FLEXArgumentInputNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B8AE6270FBED77C47DD4BD9C506AEC8 /* FLEXArgumentInputNumberView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD0510B60889A56BEA671D2034646164 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + CD936EF0F6FA45F62234D6048D82F8BA /* WatermarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B7CEDBF1F8D04791B4C64CEEFFFB101 /* WatermarkViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CE325242CBFE73E7C9AD3970F2F18571 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 301D151A6354125FFB06DA8AD55679E3 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE3E5E443C97140CDA51BC91FF3CBAB3 /* FIRInstanceIDURLQueryItem.h in Headers */ = {isa = PBXBuildFile; fileRef = DF1227849A2767C32E7EB2C900BEBBB2 /* FIRInstanceIDURLQueryItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE408A9815B269C8A459358366CE6AB3 /* GULNetworkConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 57925932393FBA35783E34A33BD02D4C /* GULNetworkConstants.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CE742E6212F4917D15C2E0BC3C17975E /* GoogleUtilities-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F88FF44B97D83A759129AC6B293521 /* GoogleUtilities-dummy.m */; }; + CEB671CD127EF8EF3E420FCEAA2AC3B5 /* work_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D875B7DAD6341765E1EA609398EE6C1C /* work_queue.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CEB983A6959550709952C7F3EF8E8D14 /* results_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 748C8BEBB0983FE14C304460F2F525F9 /* results_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF14688BD58BE50D9C4146D769807DF0 /* GULNetworkConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 149C10AA60E80F88C9328DD77B55BBFC /* GULNetworkConstants.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CF45F0233210110C1A05B0FEEC326416 /* FLEXWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = D357B4E119E1491386D0F3B2826A2781 /* FLEXWindow.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF901AB184D82822382A43858F11579C /* FIRInstanceID.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E7A629FD8D53021106BE5F53AB7A663 /* FIRInstanceID.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D021A52BA5A2D5D295DB4ED8BA9C4C01 /* FLEXKeyboardHelpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C2641D0FAF37F327591CEFD2ED2D6701 /* FLEXKeyboardHelpViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0948995AF0AEB2248323AC11EADA964 /* FLEXClassExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5834E6B4283F1EAE5EEE58BDB7DEA354 /* FLEXClassExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D097759688AEFB365751F5AD559533C6 /* OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E38EF8A5FD00B3754DD984789CBAB0 /* OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D10FE561CCB6EF4D7BA7E804A84799D1 /* FIRDiagnosticsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 08613D7B669BAA579B4AAB2D0E02E67F /* FIRDiagnosticsData.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1237A773BDBCDCA69F216390E8372B3 /* partial_sync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5483C97D916FE2B80E363A633FD362C1 /* partial_sync.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1299C33BD7B598E17D457E72059B477 /* FLEXGlobalsTableViewControllerEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 747C33DEBD796CE43D38F560A39AF57C /* FLEXGlobalsTableViewControllerEntry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D14097C66A7FCE2263D47B6D503AFF17 /* OnePasswordExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D4FE8AC63E30AA13F60DDF6BC6B369F /* OnePasswordExtension.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D141AA241E8A45FF3F851E97DB5C0632 /* OAuthWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA844C716C4C7D99AA31B75CBA8AC0FE /* OAuthWebViewController.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1A32C78030B8DF75C3381AF0D418EC4 /* sync_user.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4F3D7D325C36ED8FAFEBAF75ED960A1 /* sync_user.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1F4524F7B5F6D525173AF7B6F45B052 /* SwipeActionTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = A264CE728EA230515590CD2C1BB0BEAA /* SwipeActionTransitioning.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D21499B1CB4993C6ABA36161E599F12F /* FLAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 89BD0EECE7938AF9316B74B5BC9BBAD5 /* FLAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D230B036647516CB897710697A5859AD /* OAuthSwiftURLHandlerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96FBF4C4F6032B6D3A7BDBEC207D70C /* OAuthSwiftURLHandlerType.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D239CF60E9F9BA1131251CEDE49A0ACB /* GDTCORReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FAC703C156563CC9AC4E1A9ABAC34F /* GDTCORReachability.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D250859CE34250988F2946FEEB7C5A6A /* GDTCCTUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 27ACE74CC75BB1904160E29F01B41E69 /* GDTCCTUploader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D25C2F99A513F73C45698A475B61BFF8 /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = C6E77820E3E0B6CCAC63F65698B00DDD /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D36919D80066094B3B5A03F3A7FB6B2C /* sync_session.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D580222B8DB221896F60F8DE0AC833FB /* sync_session.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D389B6BF7955AEDF4AF3FA87C7000A4E /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = EF5552287E05E4A8902BE0E847D6255D /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D3B21B9269BA22B0CCEE063A00EA10CC /* RLMPlatform.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C703252722B5BD059B3006490EF905B1 /* RLMPlatform.h */; }; + D3CBEE07E5CA5525281C85A892FD4A32 /* FIRInstanceIDCheckinService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F09DA059DFA6A3C414F0919AB4DD23B /* FIRInstanceIDCheckinService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3E15FF7AF92BA2ECCAAA40606F17CFA /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = B809B004CF439076D32F9793D075B89A /* FIRAppAssociationRegistration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D3F2256F4E5F3C26A83D8E46BA1C017E /* FIRInstanceIDCheckinService.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD21AEE2F11DF41992C63D225B341D3 /* FIRInstanceIDCheckinService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D427C70D232860842784C5A99C1AE93D /* RLMClassInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DC1D208DB6277F86F6B3802EB4944538 /* RLMClassInfo.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D47904AC095EAD456915E65B47C72BC4 /* DifferenceKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E04723DA07D083E6DF0B4C858623372F /* DifferenceKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D4B5A216E62E246C39AED1990A5D50C7 /* list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D18BF80B296E1C1DBBA07B174AC6E3A5 /* list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D4D0797CE1DCB3592028FCEDFFD23DF3 /* NSError+FIRInstanceID.m in Sources */ = {isa = PBXBuildFile; fileRef = 85A87199244DDF3569B8B05702F69801 /* NSError+FIRInstanceID.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D507002B5FF47F8A81162EB956B67AF6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + D5A8408FFA6CFAC287A8F3FDECD85EAF /* FLEXFileBrowserSearchOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCB5CD64EBA69D9D874251ECA79D73 /* FLEXFileBrowserSearchOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5E44F672980F1F93A6DFFC824395D9A /* UIKitExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525826DB985FD6E12361ED70057AFF74 /* UIKitExtension.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5F0F7F693F2F3E7E33561AF446BF975 /* RLMSyncConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E71D1273E363FB9447B8A6209CFAC030 /* RLMSyncConfiguration_Private.h */; }; + D60F258258EFE68310E06EABFD20E681 /* FIRInstanceIDCheckinStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9746779AD95A0598C6C174A5CC68FAB4 /* FIRInstanceIDCheckinStore.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D62449A83FB2F94108B909FE73ABE28F /* schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37DD3CFBD024BACF75A5FF333377E8DF /* schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6BF36C7F6C012DF42A04089D3FD1828 /* RLMSyncManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9F6A38F6BC6327DEF6689FC8A4A19298 /* RLMSyncManager.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6CBCECE323FEFB8AAEF5A9F40DA4752 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A9D3AE6168F11FFB7541CFB619DFBC9 /* UIKit.framework */; }; + D70790316B73077273A0FD063BF2DB6F /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 75E794D0E68FD1F29EE39F74A63AA8C5 /* FIRVersion.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D7DCDEDD6020B10AC8409EAA677CCE1D /* FIRCoreDiagnosticsDateFileStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F75BCCE0FCAD663E6F68F226C60A76 /* FIRCoreDiagnosticsDateFileStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D80042BC12714FF8C5A947AB05073748 /* RLMSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 732EA36BE157F2550EB21BB721F9A7EB /* RLMSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D87CC1F85E685E59E25A6B495C2DCE22 /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = B1C419DB06BA54C9CB0A91D8AD3F3B76 /* FIRVersion.h */; settings = {ATTRIBUTES = (Private, ); }; }; + D8B716738F4424AF9B6F05A69385F3B6 /* FLEXExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F2DCF94E000BC26D3665ADC4C2CA31B /* FLEXExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8C642887850B0DED13D535CA24A23C1 /* GULNetworkURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 34DA8616C960B2BCA117CE3AA3E6E2F3 /* GULNetworkURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; + D9AE56055CEDEB3D81BB3365029027A8 /* semver-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 05B999E6E8A4D0B3CF7F4D49A8B25C14 /* semver-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA3B79895252E21002C09A6DE012A89C /* FIRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 20A6180EC0E0D2F096FCFD4F23CF8052 /* FIRErrors.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DAB10EF42C23805FA1A1FD964811A882 /* FIRInstanceIDBackupExcludedPlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1C1596071C2BFDB85EB7649FC7AA78 /* FIRInstanceIDBackupExcludedPlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DAE4CE4E8E3D21F069FA211BC316446E /* RLMListBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 736C373A6A91E4A983270AECDED523A0 /* RLMListBase.h */; }; + DB3F37C90F4BBD70B7B1F6BB7F42784E /* ComposerButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1A3E89518BAD83D8487E635BB044D6 /* ComposerButton.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DB83683446BE29F53CCA0D596F839A26 /* FIRInstanceIDTokenStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FD4793F9E68A8FA338FD255147A30DF /* FIRInstanceIDTokenStore.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DBBB9297152ECD1126C7A95D7719B8F7 /* MLPauseButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD7530BD8960451BFF2E042D320FE5C /* MLPauseButton@2x.png */; }; + DBD33EDA0C0821032AE9C0215A55FAB2 /* FIRInstanceIDAuthKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 673BF96AF5A8014F8BAB0D97975C7E9D /* FIRInstanceIDAuthKeyChain.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DBD5D63153A6FCEFCC9B55750DED5A69 /* FLEXLibrariesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B293285931ABBF36C9BCC93F56062158 /* FLEXLibrariesTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DC050C7CBD0A78FBC0043599B0C037E4 /* RLMResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4DAE9F5B47E940A5BED4EB4282AB23AB /* RLMResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DC579C1A1E61FF8D78CD7FFD7B5B2C7D /* FLEXMultiColumnTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 17181124BD1A13D7077D8C9324DAD2ED /* FLEXMultiColumnTableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD8A6292D8881283228BEB648E19270F /* StateHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B4698DF692D5774FAB60FCB6A78BE0F /* StateHelper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD94B35913C774A548B9325719B0E46F /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A082D282CA67DCF920E88D310EEB653A /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDC0E4E55ADA1C1523469CE5AC96F016 /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 23AEE44FB34F530015972AC5E5F90DA8 /* Starscream-dummy.m */; }; + DE52BFABD25204F68AD5C683789254B0 /* OAuthSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FC4BF75B4B0CD8F31957ACAD41D62986 /* OAuthSwift-dummy.m */; }; + DF217AA544E5D7A2A0C840AEF3A00681 /* ElementPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A7C8CD2AD873AAC8E245DBBD4B78FA /* ElementPath.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DFEDE0B1963700BF6380781DE74C0AAB /* FLEXArgumentInputNotSupportedView.m in Sources */ = {isa = PBXBuildFile; fileRef = AAFFF8BEBDE301A980BC6F8CF0BC9FDC /* FLEXArgumentInputNotSupportedView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E054CB178873476EF44A42F775BBB915 /* FLEXArgumentInputFontView.h in Headers */ = {isa = PBXBuildFile; fileRef = E1C82CDE3FE80EC44F6F1FACCEEF8C2D /* FLEXArgumentInputFontView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0991DAF14B5038C61029E2D905B99F1 /* RLMNetworkClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = E42DB03F12B1BF034CB5026021A4FF5D /* RLMNetworkClient.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0A6AFE0CA4FF6FC2E9C889B87262DBB /* object_schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D83A3EE42DA8C2F0E4659BBF8D28B3B1 /* object_schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0B3377C52683B18B9D31F5E0A141A88 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = B30C7FC73273E7953CFBD7407B2E63F0 /* ja.lproj */; }; + E0FAB8B96409B42A667B7BAD4A4DB24D /* Pods-Rocket.Chat.ShareExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E9A0B3EF5FD106794FEF96BD62725695 /* Pods-Rocket.Chat.ShareExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E19E9F35E296BA5F4876F3B0286E84D7 /* index_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 981A674B9313798B80322CD47CD7DF58 /* index_set.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E1C0A520CD4C1200B714393236FBA7BE /* FLEXKeyboardShortcutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE7D49F293DB910F82789262C92863F /* FLEXKeyboardShortcutManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E22F639EA4EB58E247FC999190386E17 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = C88D0C0E13D0122C75BDB0F73CD861EC /* Reachability.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2323C4DB49A5E561356529E19956072 /* FLEXToolbarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E878DF5B1675FF84FEF046C8D9F0F487 /* FLEXToolbarItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E277D22CF104154C461B8AC57D39CDF5 /* RLMSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = D013DD9788B654DE042713BD871EEC38 /* RLMSchema.h */; }; + E29659D9B9E971688AB82797CAE48BB8 /* FLEXClassExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC8F5273AB9D4B41DE9277F4BA3FB70 /* FLEXClassExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2C327327C04A0BAA0C88923D8C8F57A /* FLEXFileBrowserTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FACDCA83835FCF2784F19CBE29CD008 /* FLEXFileBrowserTableViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2EE13295579752D025DC80CA5F7732E /* FLEXArgumentInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 68458971E097FC27F17EABB29A486FEF /* FLEXArgumentInputView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E3CF9B7C659C4A306271AD55E31BBCE6 /* ImageViewerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F24FB11FCACC5E30EAA1E2F19D5CCA69 /* ImageViewerConfiguration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E40C35EF79D04B39F49231773943359F /* FLEXNetworkCurlLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E2190E8A37F85A61F2FADB6FEDD26F8 /* FLEXNetworkCurlLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E47B110D18CF94436A6C4978A22C5A9B /* HintsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E06B26C6906A781AC65EE095EA63AC9 /* HintsView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E4807586C37E136C782458E8C508A198 /* URLConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21852CB65AF7686069C504F4E60BFD47 /* URLConvertible.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E4905D399D1A0A134ED08B776033A642 /* SwipeTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85146536AE791582909D81B922676C3B /* SwipeTableViewCellDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E4CDFEF58D24D440F835494CB28A133F /* MLVolumeButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D71388B72429959FDC97FD33684EF015 /* MLVolumeButton@2x.png */; }; + E4FC4A8FD41869015A38DF562F1CD4D7 /* String+OAuthSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90805EA5BB276B3C559EF22AEACD1159 /* String+OAuthSwift.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E4FF242A3FCDAEBE9E3D270E75DBF3A3 /* GDTCORPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = B924134E2EE0686D9BF3382ED024F705 /* GDTCORPlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E53A223800ED5EEB0A28D94D90E77EEC /* RLMSyncUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0072B7196E7CC188E0B39B2CF2A4716F /* RLMSyncUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5CAC15E419978123930A5E88FE29C68 /* firebasecore.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = B615513DFBED45FCE4E1166EE8875D74 /* firebasecore.nanopb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E5F1EF1AFACD64AE6EDB3193296662A1 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 014B6A9EE013D5281C412B5740704A64 /* MobileCoreServices.framework */; }; + E63FAD363A8BF35B54F07FDFBD5EBE76 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A794DEA627D9D8B55FBDBFBC89A4545 /* CoreTelephony.framework */; }; + E684DCE2AD246EDFCCA50569D1605C77 /* RLMThreadSafeReference.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20CE461F1D16E3A9B3B73B44A068ED9D /* RLMThreadSafeReference.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6C9DF52D1D228B02209CA263C36AEBD /* FIRInstanceIDTokenFetchOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 67C69364D596975B084DEC6EF4622273 /* FIRInstanceIDTokenFetchOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E73496724CCD7ED168B688422247AD6B /* ImageViewerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C5BFABF37150D62756229774BAF91F7 /* ImageViewerController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E735288A237BC7EF7571170CF2C64889 /* FIRInstanceIDCheckinPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 92F22832B1F1A1E44409D465B2F87E08 /* FIRInstanceIDCheckinPreferences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E73939D88A37BC1385F7AD7F24A102C5 /* GDTFLLPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = E08B176F442C281998E6B4A361C97092 /* GDTFLLPrioritizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E77F082C388CD0F858E1B7245BC73A10 /* SSLClientCertificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44E0C195BBFF6F2F505F923CB5FF0DC5 /* SSLClientCertificate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E82DFC9C6F9FDC4264E7A0F55E12E582 /* RLMObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 596C24ECB2DA6F52B91F85F5E18D737A /* RLMObjectBase.h */; }; + E86CDB05EB4574A3B57A5C96AC5BAD4F /* FLEXDictionaryExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1399219E7E4F74A191C8103BC4CA94AD /* FLEXDictionaryExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E873B22EE274DFA80A0D416691EE4821 /* FLEXImageExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6D668E9341C25D3203626CEFEB921E /* FLEXImageExplorerViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E879A0A63310DC50AF88CC9C9A6B6D15 /* FIRInstanceIDKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = BC63D90F0FC2E280E9337A225B5FE8F6 /* FIRInstanceIDKeychain.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E92EA3FFFF41FC13ACEA481E10FB0021 /* GULNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F19B152B4EC4511D6480C4738517E2 /* GULNetwork.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E94FF0E5A6336E17766E71BAC32B5E9E /* AnyDifferentiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90943AB43686CF64A4BC6EC89D18BF7 /* AnyDifferentiable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E988CFBCE6ED033CC75687D24A7EE3C7 /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A965A830969D292A0587C50197C9CE1 /* Changeset.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E98E69F507874585407087D39FDE207E /* RLMResults.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8A6EF5CC39175C5193A35A4F1521BDB7 /* RLMResults.h */; }; + E9A79711B81146FA616FC92C4CC00B08 /* FLEXArrayExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5034EB136E35843437255B724DE16C62 /* FLEXArrayExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9A896DD5E97A6F09F8EBDFAC397A457 /* FLEXArgumentInputStructView.m in Sources */ = {isa = PBXBuildFile; fileRef = B69A149D7F44F54B8F93A86A7C66BB71 /* FLEXArgumentInputStructView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E9C126FED60C7F9D6E809EB8E6C35BE8 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9070AFCFAE0B7726460796A0A278EC /* Utils.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EAAE6797385806E9E747448395C743D0 /* OAuthSwiftCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = 675E008DF604CD041F3F7364DF3689EE /* OAuthSwiftCredential.swift */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EAD02A70D3839664B8BB64C95D390FE4 /* FLEXNetworkTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = C85C66B2B2E2830FCB88057827E5F6E4 /* FLEXNetworkTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EAE71B6807EB38626B53A2F7793ED6F7 /* GDTCORLifecycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F89B4417CE3620F4CEB93792972743F /* GDTCORLifecycle.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EBADAB2BDA83DEB92DD823159A1E0CB3 /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F60E6979340A56B7D55F3B17E77C5E77 /* cs.lproj */; }; + EBEB5B70FA588EA2F0086AF80D6CDCC1 /* RLMArray_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C42192C833E6377A5C2AEA5586902AF4 /* RLMArray_Private.h */; }; + ECE29A340D347B83C82024DA9076914A /* FLEXImagePreviewViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53591F9F963F74B587AE9BA3ED2F1420 /* FLEXImagePreviewViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ECEC84E41BFEB69F84AD04481E3A01E8 /* Realm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C124D7F4E2655DBF4DC5FBADBF12EC90 /* Realm.h */; }; + ED387D2242D7C56FED8C201AA4A28C71 /* RLMOptionalBase.h in Headers */ = {isa = PBXBuildFile; fileRef = C1FD15BEB588659CE9D06FB3EBD10C71 /* RLMOptionalBase.h */; }; + ED5C7ACA16945B4C4BE698F5E730759A /* RLMProperty_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 5C754595AEFD579EDC883D63AD2A265D /* RLMProperty_Private.h */; }; + EDB62032AD789057EC015B37392AAB1C /* FLEXRuntimeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 3161111B6F09F73A01C42288228B792B /* FLEXRuntimeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE10D6A25C8C7717A01854E9F9E0F672 /* external_commit_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E223545FA3205F45223B32AA11AEE442 /* external_commit_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE61C5F803CF3BEF6D9858CB24A336D6 /* MLReduceVolume@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = DD2402EA03AD1326FD94C8BF42D1BA03 /* MLReduceVolume@3x.png */; }; + EE6AB85801CD7AC05430D1D1262BEDCD /* GULReachabilityMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 891B93510720F244C576109AA527296D /* GULReachabilityMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; + EE9D46F53E07BF44BD7A0526D090DADD /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = BC32A9655D8CAE5506DEB11E2BEA3274 /* FIRAnalyticsConfiguration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EEA9DC3847BC6DB5F29E7CEDADF17103 /* SwipeFeedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF11D4CFF982027D9B3DC946E0498A61 /* SwipeFeedback.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EF66EDC8072A6A95892817A4AA6FC3A4 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 190E457578743BA513B440170CC346DC /* fr.lproj */; }; + F0562CC23DDE66520ABCA633F3D6A4C3 /* RLMArray.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 29C2014BAA6D242C5C0796A40D375AFA /* RLMArray.h */; }; + F0A3D9CE3786D0B0007CB084F4E08FA4 /* GULUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 706E9B1184AE5DBA8F0FA83DC07F030F /* GULUserDefaults.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F0A6CAC64FAE03A2F83012176D304839 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3400592DDCAEF1F6FC4E8933D94DD845 /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F11F5480DACC803C2B90EDD8D6E0BFE2 /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CB58F2F80147A42B7BE3356509CA6AC /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F25BDE2C76CDED5241979B736413D257 /* FLEX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 701A5399051E42039AA8BB820B4DB17C /* FLEX-dummy.m */; }; + F2CF2215EBE59A1F18A813B02253CF39 /* RLMCollection_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 6981CC7C504B40E86D2EC43A7EB18683 /* RLMCollection_Private.h */; }; + F36CF02E28A46DCB6B532213833D51E4 /* RLMResults_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B2B90A4949A9F8936F9F8D31B6C796 /* RLMResults_Private.h */; }; + F3A6BE9B27BCF036F809B97A4A569DF6 /* RLMRealmConfiguration+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 645966923591E09FA495B0F104809C51 /* RLMRealmConfiguration+Sync.h */; }; + F3D3869F001EE1D091A0F92269BAE613 /* Slider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55F23D231BC9A96094EC1846342E3DEA /* Slider.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F3EF19121DEB2E7346F24AE6EEA8A971 /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E29F99E768FC1FC0BB5E199BB53B109 /* FirebaseCore-dummy.m */; }; + F42DD0B8221D99260691D232689E417E /* GULUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D2FAB6A4F75DAF6C0CE8583EE6C5D532 /* GULUserDefaults.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F49D5480E8FD3F2144B95E6A84838B4E /* sync_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9AC367DEA12DB83634189F1B81BAF0D /* sync_manager.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F4DF0FB7F016C17997C4DCE3D8820894 /* AudioRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC971DA2AA2CE4E8C4DDB50D1208D0F /* AudioRecorder.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F50E548E6E4C5FC59364FFAA01C351CE /* RLMOptionalBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C1FD15BEB588659CE9D06FB3EBD10C71 /* RLMOptionalBase.h */; }; + F5200CEEDFAAFA701CBB25E69654AD72 /* StagedChangeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925550252B2B50146B5913040AD7A54D /* StagedChangeset.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F5DAD773964AD60A3DEADEDB22FB35E0 /* FLEXNetworkTransactionDetailTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 80B89DF87951E100445B4206D3A5CBE4 /* FLEXNetworkTransactionDetailTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F64C0542D44B627D41C6F9D29583C736 /* FLEXLayerExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BAA1BB220DCAE1A4FD8B9040B4868891 /* FLEXLayerExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F6894655874926C81CAF72A726C83E34 /* FIRInstanceIDTokenDeleteOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 766984AFDC283FA8A32FFFC452888DBB /* FIRInstanceIDTokenDeleteOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F68D5273106DD71DF223E4262FB89CE5 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2D729E7967554BD50F00DC3C78B66A87 /* de.lproj */; }; + F69ECA76BCCD2E44AFD7F28D9E4CB85A /* 1Password.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5E2F6FF40F907B90E73CA347B6BF0790 /* 1Password.xcassets */; }; + F70F749BCFF46B0146F6257A5C7A3105 /* GDTCORRegistrar_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 38D361488CDD877419903670BF4495AE /* GDTCORRegistrar_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F76B2638CFE732E2D8D7DFFEA8E7A398 /* RLMAnalytics.mm in Sources */ = {isa = PBXBuildFile; fileRef = CEEFD90266F9B42F9D92E366E80B67F3 /* RLMAnalytics.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F78B983ED5665802544D3352E0C2FEC7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + F7A32A4D9929D64AE7D0FE015CB608C1 /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8E324C5C0AB1EA8057E7E8EC430EF4 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F7B107D481E1A61C79290DE80607F0E7 /* SimpleImageViewer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5473D53A4DAC79666B68571F102A23 /* SimpleImageViewer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7C1AB82491C286997B542B24A5B5904 /* RLMObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 99CC6145068429E1C620B265CC545591 /* RLMObjectBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F82206D4E245C71CDA9A76160D88D0CE /* GDTFLLPrioritizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F7B3C2DBB715DF0BE8BFFBCF275498C /* GDTFLLPrioritizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F823CED6E296BE7C7A18024A4A409B66 /* FIRDependency.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E31DD39569C8D361EFF997E28C2A7B6 /* FIRDependency.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F82D331F0D8F5B9CCC1FAA821A0726AF /* GoogleDataTransport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F608FCD47FC5F4F376C85947F6897F5 /* GoogleDataTransport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F87BEC6F2641051FEFD81EF0DA99E9A3 /* FLEXTableLeftCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F6C49193CF3C0677FFAA55AAF2F7E621 /* FLEXTableLeftCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F8828233C63CBF0C3E25EFB99421890E /* ComposerTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0116F62849EF37D4F9B16F1412981136 /* ComposerTextView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F8CA73D37A0E4E67E94E4D9B0255159E /* weak_realm_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 231802D6149E184AF4D59C1B71AAC6C8 /* weak_realm_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F8DFB3D991F4F11B9EF3D38F2DC71FE4 /* FLEXSystemLogMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 4893A4CA3092FCFF1562732C12A188B5 /* FLEXSystemLogMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F90DD2B045EF52C5FE9A43245018B31A /* FLAnimatedImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 69ED44786F808CA2A67FF3C1D3E756D4 /* FLAnimatedImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F9D630EECC7E498158340F2202B13773 /* MLIncreaseVolume@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5038AF800CB05C298D99D0A8C755BDDE /* MLIncreaseVolume@3x.png */; }; + FA2AB6918A4ED887FF78C9A2676317AF /* ObjectiveCSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC19AA0982C3D76458D9AD12D9394B5F /* ObjectiveCSupport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FA4D31EE5AD9194D95F532A27EC24092 /* OnePasswordExtensionResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 30FEFB929544CCB63FA738F715041190 /* OnePasswordExtensionResources.bundle */; }; + FAC9219F8CE2558D135FA141BCBF6B1E /* GULAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A2A1A580B9153A7127EA84EF0C4EAE /* GULAppEnvironmentUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB723679AC3F4B6C2C41D937E747EEE6 /* FLEXNetworkTransactionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 57AB6A94F6BB964431B5FE7EA3FFA6E8 /* FLEXNetworkTransactionTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FBBF48888D2B4788FA26F6E708515844 /* DifferenceKit-Core-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 566F5658677DB157D7BF7C4DD8983EE4 /* DifferenceKit-Core-dummy.m */; }; + FC0E121A3C52E3E86B62BA756C5771B9 /* FLEXInstancesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 91FA07CF0F9045364D2A989AD2BC0084 /* FLEXInstancesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC89822023D8FCF89B4BFAB693EB4484 /* GDTCORStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = D152FB3834EB0C1F7B5E1A05C3FBF8D6 /* GDTCORStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + FCC5CC78EF7EA4D78761FB90D786A544 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + FCDEAAA53A940365792DA9F6472FEF31 /* FLEXDefaultsExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = CB035331E0F7B6E91A32A1BEF050DBB1 /* FLEXDefaultsExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD2E483C73CA6266282387629C6DD331 /* FLEXFileBrowserFileOperationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C01A5B48D9B1D1B20B9E0FCB35350A /* FLEXFileBrowserFileOperationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD344A59880CFD74B429C82CF780538F /* Nuke.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950E704FA1FE6FA1C91CA0A3BB4D3449 /* Nuke.framework */; }; + FD4F82B12D3E530C76781C4867C5582B /* object_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4ABDF6D0ED6DD38143206CAB1ADCD36A /* object_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.20.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FD81CE4D77836E18415D490317156C27 /* RLMSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D013DD9788B654DE042713BD871EEC38 /* RLMSchema.h */; }; + FD93A8563CB16886E9E181F16966918E /* DifferenceKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 70AF9C8F8E0DDDFD11281DC4E6C80CBF /* DifferenceKit-dummy.m */; }; + FDAB7C596EBF90BD232F8CF4D62E6E61 /* GDTCORUploadCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5286961235DD80FE4A844AC1422D108A /* GDTCORUploadCoordinator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDB7358B03A7A8565E9208D3B881BEC8 /* GDTCCTPrioritizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C9E3BED955DF0A14EB069D1EE908A77 /* GDTCCTPrioritizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDECC4C178610587A37E9A77920F071F /* FLEXFieldEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9290D754AB7C64265183DF1278E843CC /* FLEXFieldEditorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FE020306C1B4E78B2170E857FCC7F10D /* FLEXHeapEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = F4565B53F71AE70CC8396A4CD3A1215B /* FLEXHeapEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FEEE42255DD713EACE2793F1DDB1ED66 /* ThreadSafeReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECA678A24312DC36342DCF658EFBA3B8 /* ThreadSafeReference.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FEEE76DDB0C0FC6DBA45775F1B241026 /* RLMOptionalBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C1FD15BEB588659CE9D06FB3EBD10C71 /* RLMOptionalBase.h */; }; + FF0B8B73DB8677FE058757624343256B /* RLMPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = C703252722B5BD059B3006490EF905B1 /* RLMPlatform.h */; }; + FF3E902A7C757EB6E0BA98FF96B2E5A1 /* FLEXArgumentInputNumberView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50C8770E60E884215A3F677CA2B1A76E /* FLEXArgumentInputNumberView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF52B03DED5F5BBB2C20941430814AB7 /* ReachabilitySwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FFEAC674A8B976BA5D57152848C3EE36 /* ReachabilitySwift-dummy.m */; }; + FFAE7CCDDCA8E4549CE2275D2E3FE4EC /* start_audio_record.m4a in Resources */ = {isa = PBXBuildFile; fileRef = D134DBBBCD1309A25589CF99A9F9E627 /* start_audio_record.m4a */; }; + FFD1DA733CB2F9BCF6E8D0C52204FFD6 /* MLPauseButton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E7FC0517B73CD989C8BF0841EB78FA3E /* MLPauseButton@3x.png */; }; + FFDCF1F11EB8337D10E32887DB18A1C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */; }; + FFE336CB04E30C64EA811504AC692786 /* RealmSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A5F6AF66179433098AA253AFE4793C /* RealmSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 00F6FC09268AC53BE1F7C6D68FCC5ADE /* PBXContainerItemProxy */ = { + 00681E3B0418ACD984360540760A07C3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = DE5935DD370A98D07EB105CDD08427F0; - remoteInfo = MobilePlayer; + remoteGlobalIDString = F111C819DEF16A03C3E5E43FC1E83146; + remoteInfo = GoogleDataTransport; }; - 014862E9FF8341AE1ADC700BE759EF36 /* PBXContainerItemProxy */ = { + 01B2A073E9AA89ED2E2898930C400137 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F4511B9022EA5EC32335380F005F6AD; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = 67FE5E457C21DEAD34748941C5B15AD4; + remoteInfo = SimpleImageViewer; }; - 01FFAF138F098B5300730EBD0451F563 /* PBXContainerItemProxy */ = { + 03E7B50272B938CB52AD5FCF5BFE82B4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = CAFA4CBCA3898A6F62989262E04582A8; - remoteInfo = GoogleAppMeasurement; + remoteGlobalIDString = DBB9E8FC42AD71B397F9719F46F8C8DA; + remoteInfo = DifferenceKit; }; - 07B587F6417F9330638C9D97BD3C50B2 /* PBXContainerItemProxy */ = { + 087ABC4A2B6FE7A8043C58E968BDFBE3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BC2B4D06432AD962396EB82B589340B7; - remoteInfo = FirebaseInstanceID; + remoteGlobalIDString = AD9F7CE16C23215D6E90116FC4017D5F; + remoteInfo = FirebaseCoreDiagnostics; }; - 0BEBEF506358A31A236A44DB5D516673 /* PBXContainerItemProxy */ = { + 10A6F4B9D0E898E03D043717876BFA17 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D2A8A4D7433918EF402134DBD93D9269; - remoteInfo = semver; + remoteGlobalIDString = FDDB9C61D1339D570C1BF4DDE393D6DD; + remoteInfo = nanopb; }; - 0D47425E328B48D42F9A6C681479F258 /* PBXContainerItemProxy */ = { + 1350478CA2226879D88CFFE3591FB0C8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C9732C970DC56F54EA5F3AA0F10697B3; - remoteInfo = DifferenceKit; + remoteGlobalIDString = 67FE5E457C21DEAD34748941C5B15AD4; + remoteInfo = SimpleImageViewer; }; - 0E9C313088CC512C71AA270A57B0EBEC /* PBXContainerItemProxy */ = { + 13BE29929AD2B21A71738912B7410617 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F4511B9022EA5EC32335380F005F6AD; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = 80E23AABF0943180B6599EA449C2CEF2; + remoteInfo = MobilePlayer; }; - 15527AD99D933A97F9E2FD8DFA5B21CE /* PBXContainerItemProxy */ = { + 185D05CDE6E5B82BE10CC7BA2D311D3E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6EB25B8A3C04F51C8B687957379623B1; - remoteInfo = "MobilePlayer-MobilePlayer"; + remoteGlobalIDString = A179C4D7DC05024EBB1258F1BE332836; + remoteInfo = semver; }; - 1C08DB4DAE69747533E6DD0ABCDD7042 /* PBXContainerItemProxy */ = { + 1A1793AEDCAADBE9DCAD48D3AEAEC513 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 293E484C14E8255A78D47D2E48DDFCEE; + remoteGlobalIDString = FAC0EDA22C68AE54A68C056BA09FBA71; remoteInfo = "Nuke-FLAnimatedImage-Plugin"; }; - 1DB1851A39BF24F28804F4181C6445C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 088C502077FC6305966DF84EEC3A4A07; - remoteInfo = FLEX; - }; - 20AF8CA16D1FCC0F8DDA10328E46A3C7 /* PBXContainerItemProxy */ = { + 1C718F25691B2096121748AE34ADB8C9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7CE49DE8B659FE84C6885E456503139D; - remoteInfo = Fabric; + remoteGlobalIDString = 0FB10C95F9BBD21C45E9DD56E9DE66DC; + remoteInfo = Realm; }; - 251B8D1DC4CC2E5CD2B566BCE6138C3C /* PBXContainerItemProxy */ = { + 1F57EA2A46A74A9803A5C2D2BC179FA1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6551B0A997F3C3EC1BF5CCCE8C9D7640; - remoteInfo = FirebaseCore; + remoteGlobalIDString = AD9F7CE16C23215D6E90116FC4017D5F; + remoteInfo = FirebaseCoreDiagnostics; }; - 279F254BFB18E776226DA5F2C3CF3274 /* PBXContainerItemProxy */ = { + 2053C36B2BD7E0175087DC43208F28B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = CAFA4CBCA3898A6F62989262E04582A8; - remoteInfo = GoogleAppMeasurement; + remoteGlobalIDString = 81E27232DC00A881ACF75C7B5F193333; + remoteInfo = "MobilePlayer-MobilePlayer"; }; - 288D693B0886EACBAE8D85E82D739514 /* PBXContainerItemProxy */ = { + 29849BA96627907D86ABF68ADB041FCC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AA61720B36F74B4975EDA51370C03FB8; - remoteInfo = nanopb; + remoteGlobalIDString = DBB9E8FC42AD71B397F9719F46F8C8DA; + remoteInfo = DifferenceKit; }; - 2B196BD980019C8B0D70402E8CA6C5F4 /* PBXContainerItemProxy */ = { + 29BCA30A491641E666696E498AEB63B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9C1854A0145F43E74B79C3F491E94E2E; - remoteInfo = MBProgressHUD; + remoteGlobalIDString = FBAC02E8630366D9AF85309F1C074CD3; + remoteInfo = OAuthSwift; }; - 2B3F1F3C03BA6F4EEEF570F6FA77A21E /* PBXContainerItemProxy */ = { + 2CD74DFFE80489929D1FEF51286CB191 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = DE5EE8EEA217EAEF464BE0F1D44A3248; - remoteInfo = Firebase; + remoteGlobalIDString = D5423DFD97A84BB4F2EE18A653B49765; + remoteInfo = FLEX; }; - 2C9DA0D27E91C72D9CF18C37CB98A8D1 /* PBXContainerItemProxy */ = { + 30EEC25EB7236259EFEE703762986F2C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = DE5935DD370A98D07EB105CDD08427F0; - remoteInfo = MobilePlayer; + remoteGlobalIDString = B6422D152FC79825719A02B3C10FC3D2; + remoteInfo = SwipeCellKit; }; - 2CA9D99716704480D69182F74FD0AEAF /* PBXContainerItemProxy */ = { + 348E51D3DBE5FD2A5830B53FE9340D87 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6551B0A997F3C3EC1BF5CCCE8C9D7640; - remoteInfo = FirebaseCore; + remoteGlobalIDString = FDDB9C61D1339D570C1BF4DDE393D6DD; + remoteInfo = nanopb; }; - 3E2063F38BD487F16D5F048E06665C3A /* PBXContainerItemProxy */ = { + 36B914BBBD6DB568F08EF62CDFECF329 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C15E14C9CA53451D53CC350CCA44CA3D; - remoteInfo = 1PasswordExtension; + remoteGlobalIDString = 0C9B6293E2C60B3B502A97DB9F4A09AF; + remoteInfo = SwiftyJSON; }; - 3E4E9E72DC590E21852AD38990D55B0B /* PBXContainerItemProxy */ = { + 38242B8DD54911A858AC1DF3EF0F5587 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BDC9D0A453E0589198E53EF71AF3A6B1; - remoteInfo = SimpleImageViewer; + remoteGlobalIDString = 0601E30DD8EB3E5C4CA86433D77ED08C; + remoteInfo = RocketChatViewController; }; - 4043075BB6445BD4A4FFB11BBB3BFFA0 /* PBXContainerItemProxy */ = { + 3AE48EA4BEBE161AD3AEBC33FC22E86C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = FC398047D96D5EB82DC34A1AA22FECEE; - remoteInfo = RealmSwift; + remoteGlobalIDString = 37515DB33E76B4A4B1E375D2075F615C; + remoteInfo = "DifferenceKit-Core"; }; - 4050AE1E75F09EE623A00327E9C39790 /* PBXContainerItemProxy */ = { + 44D46688D1438725A60D66F7ED4F4EE5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F4511B9022EA5EC32335380F005F6AD; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = 7A188CE4BDA89D941184C4CC4C426B07; + remoteInfo = FirebaseInstanceID; }; - 4184B450BEF4C28EF0527487E3157BEE /* PBXContainerItemProxy */ = { + 50AB6F36910B87118617AEE3335AA1F8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F114C53C144DED6ADCA1BA4F2BC1EB05; - remoteInfo = Starscream; + remoteGlobalIDString = FDDB9C61D1339D570C1BF4DDE393D6DD; + remoteInfo = nanopb; }; - 42CEB2BDA98FE13544E44465CD490DB4 /* PBXContainerItemProxy */ = { + 517D7FE0EE115031DA9F3AB0B64F77FC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F4511B9022EA5EC32335380F005F6AD; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = 891841C3419A52929FB5D16A575798DB; + remoteInfo = MBProgressHUD; }; - 45E1EEDF2DB718BC65744D4224A15F14 /* PBXContainerItemProxy */ = { + 51F2A67A4F2223554FB93281B79BBB7C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A5F394DBBF164FD98BF2BF258D2CDFCE; - remoteInfo = RCMarkdownParser; + remoteGlobalIDString = 0DF9FEC4D52DBD2F86898986EC1B46AE; + remoteInfo = Nuke; }; - 4649348E1569CD985A78166E7BA8BF5A /* PBXContainerItemProxy */ = { + 567088D87E8A3A86B705FEB2C2710BA2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D2A8A4D7433918EF402134DBD93D9269; + remoteGlobalIDString = A179C4D7DC05024EBB1258F1BE332836; remoteInfo = semver; }; - 49BCC80683F150181B3F5F08A9F326B4 /* PBXContainerItemProxy */ = { + 57FD164AD68261538E41E02B35F72933 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = CAFA4CBCA3898A6F62989262E04582A8; - remoteInfo = GoogleAppMeasurement; + remoteGlobalIDString = FDDB9C61D1339D570C1BF4DDE393D6DD; + remoteInfo = nanopb; }; - 4C5141EFF2B3059B29C88AC021072D2E /* PBXContainerItemProxy */ = { + 58EB88CEC84B668FFB02CB1E8D9D4241 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9C1854A0145F43E74B79C3F491E94E2E; - remoteInfo = MBProgressHUD; + remoteGlobalIDString = E00311318D3052CB3429E9B5303B854B; + remoteInfo = FLAnimatedImage; }; - 507B499A11B76CD8852940E8F5D6A366 /* PBXContainerItemProxy */ = { + 59A888483A0DC5A7F413B8398CB0ADB8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AA61720B36F74B4975EDA51370C03FB8; - remoteInfo = nanopb; + remoteGlobalIDString = AD9F7CE16C23215D6E90116FC4017D5F; + remoteInfo = FirebaseCoreDiagnostics; }; - 53E5039C3064A0770D5A16A9633B3263 /* PBXContainerItemProxy */ = { + 5F79EA503511D3C71B5FD9DF6B5DE156 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = DE5EE8EEA217EAEF464BE0F1D44A3248; - remoteInfo = Firebase; + remoteGlobalIDString = F111C819DEF16A03C3E5E43FC1E83146; + remoteInfo = GoogleDataTransport; }; - 57014401CF64B8AEB61D2513E12C226B /* PBXContainerItemProxy */ = { + 5F8BBBF3DB15295DB2578C1E9AF16279 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A8A5A77D99AF2642C050686191AAC5A6; - remoteInfo = SwiftyJSON; + remoteGlobalIDString = E00311318D3052CB3429E9B5303B854B; + remoteInfo = FLAnimatedImage; }; - 594F563E8ADE42B327F0DB7271C6F67F /* PBXContainerItemProxy */ = { + 600821B0E2A4998DA3BFB325807F9A15 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 55FA0B285608509C58926F57847AB4D2; - remoteInfo = RocketChatViewController; + remoteGlobalIDString = E00311318D3052CB3429E9B5303B854B; + remoteInfo = FLAnimatedImage; }; - 5B808703E4118B89EF0FC23335A057FE /* PBXContainerItemProxy */ = { + 60B8877E387B1047C34A5D3B55180906 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A1A0FE2A9E90F5B42D68DD55E0C304C7; - remoteInfo = Nuke; + remoteGlobalIDString = 4548FD0F52098CA90D3A62745F0C1474; + remoteInfo = RealmSwift; }; - 5C89E2F070D74263A637E86F142966FC /* PBXContainerItemProxy */ = { + 63227B76CBE764E983BDB5ADC9AAE519 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C9732C970DC56F54EA5F3AA0F10697B3; - remoteInfo = DifferenceKit; + remoteGlobalIDString = E8E03261919E1552240E2A9AF312DCE1; + remoteInfo = GoogleUtilities; }; - 5D03F858F90E51E4D9769171403C9B61 /* PBXContainerItemProxy */ = { + 6BF630DC68CA3DF22CE637F530F55BEC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C9732C970DC56F54EA5F3AA0F10697B3; - remoteInfo = DifferenceKit; + remoteGlobalIDString = D5423DFD97A84BB4F2EE18A653B49765; + remoteInfo = FLEX; }; - 65A9E030A9007C5CA709E88D8C065C83 /* PBXContainerItemProxy */ = { + 6C44CEF863A93F57895147888650F34E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7CE49DE8B659FE84C6885E456503139D; - remoteInfo = Fabric; + remoteGlobalIDString = 7A188CE4BDA89D941184C4CC4C426B07; + remoteInfo = FirebaseInstanceID; }; - 6A0BFB091894EF996751C5C1A1E54D79 /* PBXContainerItemProxy */ = { + 73C9DE461F2D1F43D4B476B027E71196 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F34AB23A45E66B5330A74220CE95958C; - remoteInfo = FLAnimatedImage; + remoteGlobalIDString = DBB9E8FC42AD71B397F9719F46F8C8DA; + remoteInfo = DifferenceKit; }; - 6AE8140D315B09CD7FE005EFEDB4DD77 /* PBXContainerItemProxy */ = { + 74722EE8343A925C507CD9463B1499E3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F34AB23A45E66B5330A74220CE95958C; - remoteInfo = FLAnimatedImage; + remoteGlobalIDString = 0DF9FEC4D52DBD2F86898986EC1B46AE; + remoteInfo = Nuke; }; - 6B68BDA3C81FD1938AD4E9739483521A /* PBXContainerItemProxy */ = { + 752892E79A12CEEFB650F1EAF0D81069 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A1A0FE2A9E90F5B42D68DD55E0C304C7; - remoteInfo = Nuke; + remoteGlobalIDString = 0FB10C95F9BBD21C45E9DD56E9DE66DC; + remoteInfo = Realm; }; - 6D145967FE98B0A1B6267FD0D61554A5 /* PBXContainerItemProxy */ = { + 77E956D0CB4538BE1DCE3AA32CC36491 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BDC9D0A453E0589198E53EF71AF3A6B1; - remoteInfo = SimpleImageViewer; + remoteGlobalIDString = 1067FA952B76EED7AA2A52057C7B7DB4; + remoteInfo = GoogleDataTransportCCTSupport; }; - 7246068DFC8175B9B9F43F33109F7E09 /* PBXContainerItemProxy */ = { + 790CEDF7E363E26DC89EBD6467632932 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9C1854A0145F43E74B79C3F491E94E2E; - remoteInfo = MBProgressHUD; + remoteGlobalIDString = 7564F88B01F601AAC832E1AD63849278; + remoteInfo = RCMarkdownParser; }; - 769065DF76EABFE60C71C92A7FA7F1A7 /* PBXContainerItemProxy */ = { + 7D004E11C62125A132EDAEBC364BB1F1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = FC398047D96D5EB82DC34A1AA22FECEE; - remoteInfo = RealmSwift; + remoteGlobalIDString = 1067FA952B76EED7AA2A52057C7B7DB4; + remoteInfo = GoogleDataTransportCCTSupport; }; - 7D456E586D5F925D3306EC3FF9CF9A07 /* PBXContainerItemProxy */ = { + 7D7D35B034517495169CA0A2FA79D675 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7F79AF09BDA0EB7EE86AA958E0F97C7B; - remoteInfo = Crashlytics; + remoteGlobalIDString = DAC25189504B9C8910EC20AF68E62D3A; + remoteInfo = ReachabilitySwift; }; - 7E4B9C23150D6EBDC6D852EBAAAFD6F3 /* PBXContainerItemProxy */ = { + 7E02971CBD9D292E2A2275ED7791D77F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = FC398047D96D5EB82DC34A1AA22FECEE; - remoteInfo = RealmSwift; + remoteGlobalIDString = E00311318D3052CB3429E9B5303B854B; + remoteInfo = FLAnimatedImage; }; - 838AF81E2C47E4AECDBC7275C5BCAB7F /* PBXContainerItemProxy */ = { + 82A05F2BD56FA350CBDE64CCB8E8CFAA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C15E14C9CA53451D53CC350CCA44CA3D; - remoteInfo = 1PasswordExtension; + remoteGlobalIDString = E8E03261919E1552240E2A9AF312DCE1; + remoteInfo = GoogleUtilities; }; - 870116F72869A2C24E8A61977D4E4D38 /* PBXContainerItemProxy */ = { + 87EB81AE3F2D6C5E9A7DD92DBCADB12D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 0562504F6D4CBC4932D70CDDC0D2AFD6; - remoteInfo = FirebaseAnalytics; + remoteGlobalIDString = F111C819DEF16A03C3E5E43FC1E83146; + remoteInfo = GoogleDataTransport; }; - 88088FA244656BAE9D38BB1ACCE149F9 /* PBXContainerItemProxy */ = { + 88852B8768907DE641A8D1717DB740B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BC2B4D06432AD962396EB82B589340B7; - remoteInfo = FirebaseInstanceID; + remoteGlobalIDString = 0DF9FEC4D52DBD2F86898986EC1B46AE; + remoteInfo = Nuke; }; - 881E563DD8B8E0AC39D97EE60516468A /* PBXContainerItemProxy */ = { + 88B70783D6EAEB7506593D49CFAE7A57 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BC2B4D06432AD962396EB82B589340B7; - remoteInfo = FirebaseInstanceID; + remoteGlobalIDString = 7564F88B01F601AAC832E1AD63849278; + remoteInfo = RCMarkdownParser; }; - 94BC4EC3457006245F7D495C0D631B90 /* PBXContainerItemProxy */ = { + 8948E45AEADD80BF8E2323529594D3ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C9732C970DC56F54EA5F3AA0F10697B3; - remoteInfo = DifferenceKit; + remoteGlobalIDString = F111C819DEF16A03C3E5E43FC1E83146; + remoteInfo = GoogleDataTransport; }; - 95E8263C2FC7822EB1C698F435370638 /* PBXContainerItemProxy */ = { + 8B6CBBA05BDFCC011D3E241F485376B7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F4511B9022EA5EC32335380F005F6AD; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = F111C819DEF16A03C3E5E43FC1E83146; + remoteInfo = GoogleDataTransport; }; - 9E0FD8268F4500D652C3B6A2DC09D824 /* PBXContainerItemProxy */ = { + 961757FB7C95477CB08A7CC93C6C3B89 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7F79AF09BDA0EB7EE86AA958E0F97C7B; - remoteInfo = Crashlytics; + remoteGlobalIDString = FAC0EDA22C68AE54A68C056BA09FBA71; + remoteInfo = "Nuke-FLAnimatedImage-Plugin"; }; - AB7E7610691AA279E43B0BDA56CC6898 /* PBXContainerItemProxy */ = { + 9DC56B2F13FDDB99D2F148E143EBF6D1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 55E1FDE52DD9C139D679CC408529CF94; - remoteInfo = SwiftLint; + remoteGlobalIDString = 0DF9FEC4D52DBD2F86898986EC1B46AE; + remoteInfo = Nuke; }; - AD9267D3FFDBE34012738B841FA33980 /* PBXContainerItemProxy */ = { + AA452171618777AB219B3B6349493033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F34AB23A45E66B5330A74220CE95958C; - remoteInfo = FLAnimatedImage; + remoteGlobalIDString = DAC25189504B9C8910EC20AF68E62D3A; + remoteInfo = ReachabilitySwift; }; - AE1474EF48314D191B3DB3DBCE765ED7 /* PBXContainerItemProxy */ = { + AE2D2F0FF5E3C43748409C80C3F96B28 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7A00110467ACE628B80ABBD9F1E83698; - remoteInfo = "1PasswordExtension-OnePasswordExtensionResources"; + remoteGlobalIDString = 4548FD0F52098CA90D3A62745F0C1474; + remoteInfo = RealmSwift; }; - BBA2A43A240F71C3741AE1ADDC9E9D85 /* PBXContainerItemProxy */ = { + B0831D2FC7269F82D8D7D02D048D3D3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 293E484C14E8255A78D47D2E48DDFCEE; - remoteInfo = "Nuke-FLAnimatedImage-Plugin"; + remoteGlobalIDString = 3C68CBEBC7AA24BEECA1BAE10D69B4F7; + remoteInfo = FirebaseCore; }; - BD61C0EBDCEC4A0718B774BE20DA5BDA /* PBXContainerItemProxy */ = { + B0CED0A42B9F1B888B3CCDCF90897D07 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F3F9ECFF28CD85D964A7912AFAE3ED86; - remoteInfo = ReachabilitySwift; + remoteGlobalIDString = 1067FA952B76EED7AA2A52057C7B7DB4; + remoteInfo = GoogleDataTransportCCTSupport; }; - BD790818B6E057E4E9F38A066E7279DE /* PBXContainerItemProxy */ = { + B0DFCC581B5F960B493E731D07022925 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F114C53C144DED6ADCA1BA4F2BC1EB05; - remoteInfo = Starscream; + remoteGlobalIDString = 0FB10C95F9BBD21C45E9DD56E9DE66DC; + remoteInfo = Realm; }; - BFCCD4B33C367483049221F062D91B10 /* PBXContainerItemProxy */ = { + B14EF70E896C5E601DA5118C998F1957 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A8A5A77D99AF2642C050686191AAC5A6; - remoteInfo = SwiftyJSON; + remoteGlobalIDString = E8E03261919E1552240E2A9AF312DCE1; + remoteInfo = GoogleUtilities; }; - C10738CDD52D04C9AD2B2005F89110EE /* PBXContainerItemProxy */ = { + B271FF7EA39131F02354BC19E1AD0454 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 237BDF70A0D24421463790971334A771; - remoteInfo = Realm; + remoteGlobalIDString = E8E03261919E1552240E2A9AF312DCE1; + remoteInfo = GoogleUtilities; }; - C39F893CFA19F9A58EFAF99A3DB3AD29 /* PBXContainerItemProxy */ = { + B27A5D3E5CA7CBE216A09821DB822066 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F4511B9022EA5EC32335380F005F6AD; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = AD9F7CE16C23215D6E90116FC4017D5F; + remoteInfo = FirebaseCoreDiagnostics; }; - C67DA1FCA7D28AD33D59915539297397 /* PBXContainerItemProxy */ = { + B2F288A36F5B44ED093C623EBA127BC4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6551B0A997F3C3EC1BF5CCCE8C9D7640; - remoteInfo = FirebaseCore; + remoteGlobalIDString = 891841C3419A52929FB5D16A575798DB; + remoteInfo = MBProgressHUD; }; - CEB5A384D7375380EF597B1AB18385B1 /* PBXContainerItemProxy */ = { + B30E2530C2692C700B2050AE86DEA0F9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 0562504F6D4CBC4932D70CDDC0D2AFD6; - remoteInfo = FirebaseAnalytics; + remoteGlobalIDString = FDDB9C61D1339D570C1BF4DDE393D6DD; + remoteInfo = nanopb; }; - D17ED097301C309C9506218BDB5E0E87 /* PBXContainerItemProxy */ = { + B3B015DE68BE7FDB29A6B89FD114BCF8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F34AB23A45E66B5330A74220CE95958C; - remoteInfo = FLAnimatedImage; + remoteGlobalIDString = 4548FD0F52098CA90D3A62745F0C1474; + remoteInfo = RealmSwift; }; - D505602CC38A13D29F62DF277CD01047 /* PBXContainerItemProxy */ = { + C1DF3C80FEAF237D3A41B7F9A91BD143 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7CE49DE8B659FE84C6885E456503139D; - remoteInfo = Fabric; + remoteGlobalIDString = DBE96A9B8FFA441C679FFF903BC1CFC0; + remoteInfo = Starscream; }; - D6B9E98FF4615F39E6280498BA0AE77B /* PBXContainerItemProxy */ = { + CA1E0976FE97B72C2BC716BA1CF87E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AA61720B36F74B4975EDA51370C03FB8; - remoteInfo = nanopb; + remoteGlobalIDString = EA9D15B80EC4F97B280430247E0F213B; + remoteInfo = 1PasswordExtension; }; - D7D7D40DFC125A3EA84A38CF4B9E0E7F /* PBXContainerItemProxy */ = { + CB933BD2C14EAF0F5FAAF71977A276DF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E4A590260CAF606E014E5F9937A9066B; - remoteInfo = SwipeCellKit; + remoteGlobalIDString = 37515DB33E76B4A4B1E375D2075F615C; + remoteInfo = "DifferenceKit-Core"; }; - D97D4DDFA9AFA8AD23725EF66EE38AF8 /* PBXContainerItemProxy */ = { + CE07650AFD3694CA943FB93CBC81FA16 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AA61720B36F74B4975EDA51370C03FB8; - remoteInfo = nanopb; + remoteGlobalIDString = 1067FA952B76EED7AA2A52057C7B7DB4; + remoteInfo = GoogleDataTransportCCTSupport; }; - DA57081D20F86C2B605FCC283004E9ED /* PBXContainerItemProxy */ = { + CF8643E025E10B2B054E2E056F9F2C94 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 995313EC42D812DEC94B33A8FE4F0344; - remoteInfo = OAuthSwift; + remoteGlobalIDString = 1067FA952B76EED7AA2A52057C7B7DB4; + remoteInfo = GoogleDataTransportCCTSupport; }; - DBBCDBD31BF4665B1F5BD9DB9B027F37 /* PBXContainerItemProxy */ = { + D72EE3D6D0B266902E06C203CA38D996 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 237BDF70A0D24421463790971334A771; - remoteInfo = Realm; + remoteGlobalIDString = FAC0EDA22C68AE54A68C056BA09FBA71; + remoteInfo = "Nuke-FLAnimatedImage-Plugin"; }; - DC689D1E93E0251DC51856EC0457694B /* PBXContainerItemProxy */ = { + D7BC438FEB4578D6FC6DF0C5156E137D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E4A590260CAF606E014E5F9937A9066B; - remoteInfo = SwipeCellKit; + remoteGlobalIDString = 80E23AABF0943180B6599EA449C2CEF2; + remoteInfo = MobilePlayer; }; - E02306C8F98CB3F70A2ADDC8E0CBCC2E /* PBXContainerItemProxy */ = { + D92DB76F1F18F618C520E478F3060D89 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6551B0A997F3C3EC1BF5CCCE8C9D7640; + remoteGlobalIDString = 3C68CBEBC7AA24BEECA1BAE10D69B4F7; remoteInfo = FirebaseCore; }; - E1ED07827CC50DA221097D2598B6E25E /* PBXContainerItemProxy */ = { + E2EA8E3E0B0C0D8B07E4FB4DE911C26E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F3F9ECFF28CD85D964A7912AFAE3ED86; - remoteInfo = ReachabilitySwift; + remoteGlobalIDString = FDDB9C61D1339D570C1BF4DDE393D6DD; + remoteInfo = nanopb; }; - E46CC5DD9A978D1323966597E0C840E0 /* PBXContainerItemProxy */ = { + E3837D11B2202D35D8DD1DD4E41AE530 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A1A0FE2A9E90F5B42D68DD55E0C304C7; - remoteInfo = Nuke; + remoteGlobalIDString = 0C9B6293E2C60B3B502A97DB9F4A09AF; + remoteInfo = SwiftyJSON; }; - E4F6E6D1ADC7E661A9965D45E3EEB928 /* PBXContainerItemProxy */ = { + E84A7422D251F8301D30157B31B48E2F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6551B0A997F3C3EC1BF5CCCE8C9D7640; - remoteInfo = FirebaseCore; + remoteGlobalIDString = DBE96A9B8FFA441C679FFF903BC1CFC0; + remoteInfo = Starscream; }; - E5E9070F79A69DA38D0B2C770F8B32DD /* PBXContainerItemProxy */ = { + E9A4C2A1F7491914BD46C2C2B67592CC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A5F394DBBF164FD98BF2BF258D2CDFCE; - remoteInfo = RCMarkdownParser; + remoteGlobalIDString = 891841C3419A52929FB5D16A575798DB; + remoteInfo = MBProgressHUD; }; - E83679484254D0ECF741DF5764348FC1 /* PBXContainerItemProxy */ = { + E9BC7BAC2255C94E2946C1292E029DE7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 55E1FDE52DD9C139D679CC408529CF94; - remoteInfo = SwiftLint; + remoteGlobalIDString = EA9D15B80EC4F97B280430247E0F213B; + remoteInfo = 1PasswordExtension; }; - EA418C174E1F4E90B80923C302770831 /* PBXContainerItemProxy */ = { + ED4BFD41F6CCE7CDE07AF3D57B8C6F4F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F34AB23A45E66B5330A74220CE95958C; - remoteInfo = FLAnimatedImage; + remoteGlobalIDString = 0601E30DD8EB3E5C4CA86433D77ED08C; + remoteInfo = RocketChatViewController; }; - EC3AF76984EAE732C1944F05702F8B58 /* PBXContainerItemProxy */ = { + F3D6FB85E43A9BA6C66BDC2A9ED3D478 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 237BDF70A0D24421463790971334A771; - remoteInfo = Realm; + remoteGlobalIDString = BEDC62E1AF6B87F407DE20E920BB428C; + remoteInfo = "1PasswordExtension-OnePasswordExtensionResources"; }; - F04CFE2EE95390FE1F584E86D2834B7B /* PBXContainerItemProxy */ = { + F57B40E9ACF1CACD8DD4E2ED7809E3B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 0562504F6D4CBC4932D70CDDC0D2AFD6; - remoteInfo = FirebaseAnalytics; + remoteGlobalIDString = 0C9B6293E2C60B3B502A97DB9F4A09AF; + remoteInfo = SwiftyJSON; }; - F1DC038FC6EB4FB0CF8CCF59F4EA169F /* PBXContainerItemProxy */ = { + F5B49D0A167C8A4EA7BC64566119FBD9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 088C502077FC6305966DF84EEC3A4A07; - remoteInfo = FLEX; + remoteGlobalIDString = E8E03261919E1552240E2A9AF312DCE1; + remoteInfo = GoogleUtilities; }; - F4F5DFF3A9FC44291EC8E4175339338A /* PBXContainerItemProxy */ = { + F5E54D8139758F2B1C70DD1972BBAD41 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 55FA0B285608509C58926F57847AB4D2; - remoteInfo = RocketChatViewController; + remoteGlobalIDString = 3C68CBEBC7AA24BEECA1BAE10D69B4F7; + remoteInfo = FirebaseCore; }; - F5CAA17728D1024783FDA8EB7459EF7F /* PBXContainerItemProxy */ = { + F6DB12AEEB271A0D16FC0847026B2F5B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A8A5A77D99AF2642C050686191AAC5A6; - remoteInfo = SwiftyJSON; + remoteGlobalIDString = FBAC02E8630366D9AF85309F1C074CD3; + remoteInfo = OAuthSwift; }; - F839C3D52F0A2E328F749EB48AD2C228 /* PBXContainerItemProxy */ = { + F84CF8869715C8D73BFD4C6C8EDF146E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 237BDF70A0D24421463790971334A771; - remoteInfo = Realm; + remoteGlobalIDString = E00311318D3052CB3429E9B5303B854B; + remoteInfo = FLAnimatedImage; }; - FB0473BF7F0C0547A6A6534EE7EF62A7 /* PBXContainerItemProxy */ = { + FA39A3972795B06C520D9B3457073C38 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A1A0FE2A9E90F5B42D68DD55E0C304C7; - remoteInfo = Nuke; + remoteGlobalIDString = B6422D152FC79825719A02B3C10FC3D2; + remoteInfo = SwipeCellKit; }; - FB3F736BEA0A7638025C76C0CFD81097 /* PBXContainerItemProxy */ = { + FE7D559AF00B1F4039F0A5E585C47DC2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 995313EC42D812DEC94B33A8FE4F0344; - remoteInfo = OAuthSwift; + remoteGlobalIDString = 0FB10C95F9BBD21C45E9DD56E9DE66DC; + remoteInfo = Realm; }; - FCF61E191BB84B1A9809AF1EBBAFDD30 /* PBXContainerItemProxy */ = { + FEAB863E34221F588B51BD0A0A609A42 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 293E484C14E8255A78D47D2E48DDFCEE; - remoteInfo = "Nuke-FLAnimatedImage-Plugin"; + remoteGlobalIDString = F111C819DEF16A03C3E5E43FC1E83146; + remoteInfo = GoogleDataTransport; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 610DD2B1048A56B5F23F8CFE1365A1BA /* Copy . Public Headers */ = { + 6ADD8EF58AAB0FCCCDF3A3FD3854B462 /* Copy . Public Headers */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; dstSubfolderSpec = 16; files = ( - 29AFA0CCF0C0A39A053E76B4CF5EBA69 /* NSError+RLMSync.h in Copy . Public Headers */, - 0353EF2C9C6B7F36E80C46D6FCD6F983 /* Realm.h in Copy . Public Headers */, - 921E8D49B9DBDFFF71A75161C62195F3 /* RLMArray.h in Copy . Public Headers */, - AE2E3C4E5184A3F8989E44D387B8823E /* RLMCollection.h in Copy . Public Headers */, - EDE30B0D927529FC2F6BD56DA83EA700 /* RLMConstants.h in Copy . Public Headers */, - D71D2A28A1A0B5741F08E6F556FA59C9 /* RLMListBase.h in Copy . Public Headers */, - BB4179609A7A13912F210BB20DB717FC /* RLMMigration.h in Copy . Public Headers */, - 560E9559B28336392CA1898DEBC47A5A /* RLMObject.h in Copy . Public Headers */, - CC4B281179F5D62904CB62568B3F8A35 /* RLMObjectBase.h in Copy . Public Headers */, - F41796A1AE80A0C83D869C9ACB3BF1F7 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */, - EF83B7CC2AED7277FF841DD020DB1702 /* RLMObjectSchema.h in Copy . Public Headers */, - 0C704845AF62BA938063CE1DCA6A86E1 /* RLMOptionalBase.h in Copy . Public Headers */, - 890461235D00B989D266E19B3A32A2E6 /* RLMPlatform.h in Copy . Public Headers */, - 275693A74EB4DBF5315CD46E5E4B7FBE /* RLMProperty.h in Copy . Public Headers */, - 7C17E6C8D2C5668D2682865283A72A67 /* RLMRealm+Sync.h in Copy . Public Headers */, - 9D95B2CDA064051F72219EBC220CE20E /* RLMRealm.h in Copy . Public Headers */, - B9C1F15B0B479938213DF20C17F8CD6B /* RLMRealm_Dynamic.h in Copy . Public Headers */, - A33D2BF9C580452464FB688052C25D4C /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */, - 9A78B46BCC232214C6C1420A7942521E /* RLMRealmConfiguration.h in Copy . Public Headers */, - 287F004CFB6749E9B0F3F3D257D26265 /* RLMResults.h in Copy . Public Headers */, - 9647A905DEA97412056430D2335E8D04 /* RLMSchema.h in Copy . Public Headers */, - F97E0AE57ADA49BF29423B5B844AE0E2 /* RLMSyncConfiguration.h in Copy . Public Headers */, - 3A577C429242D488FAD5777B6395B785 /* RLMSyncCredentials.h in Copy . Public Headers */, - F551919E9F2728C848750145B23AA6DC /* RLMSyncManager.h in Copy . Public Headers */, - 596EE81E77B4730C042831463B7E0350 /* RLMSyncPermission.h in Copy . Public Headers */, - 0C2B0AFBAA1755045B799A1BFC92199A /* RLMSyncSession.h in Copy . Public Headers */, - 846787877DF4AF7541781D3A0D58999D /* RLMSyncSubscription.h in Copy . Public Headers */, - 8ECB296FB77765C0DFB207DA39CAA03C /* RLMSyncUser.h in Copy . Public Headers */, - FADABBE50EF23E119B44FA37E117D498 /* RLMSyncUtil.h in Copy . Public Headers */, - 46841826620804EF18A548C4839418A1 /* RLMThreadSafeReference.h in Copy . Public Headers */, + 76DE5C424E61DBB62EEE97C30362A126 /* NSError+RLMSync.h in Copy . Public Headers */, + ECEC84E41BFEB69F84AD04481E3A01E8 /* Realm.h in Copy . Public Headers */, + F0562CC23DDE66520ABCA633F3D6A4C3 /* RLMArray.h in Copy . Public Headers */, + 60AE81C1D18CEAEFD3881649391C60EC /* RLMCollection.h in Copy . Public Headers */, + 388F043E93BF816CE052AD1EF5CC6ED1 /* RLMConstants.h in Copy . Public Headers */, + DAE4CE4E8E3D21F069FA211BC316446E /* RLMListBase.h in Copy . Public Headers */, + ACE82C0D54F845C15711799438E7F9B2 /* RLMMigration.h in Copy . Public Headers */, + 6E8D99CA678EBA0A104EA8936BFD680A /* RLMObject.h in Copy . Public Headers */, + 6ACC1607567D6196BCCD2A54664875B2 /* RLMObjectBase.h in Copy . Public Headers */, + 8E7B0BF3BBAD47858822B48097C42EC8 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */, + 91EC3240D6EB78120FF91814E2A7922A /* RLMObjectSchema.h in Copy . Public Headers */, + F50E548E6E4C5FC59364FFAA01C351CE /* RLMOptionalBase.h in Copy . Public Headers */, + D3B21B9269BA22B0CCEE063A00EA10CC /* RLMPlatform.h in Copy . Public Headers */, + 81F1AAA9898E59B6883C25EBA4874A08 /* RLMProperty.h in Copy . Public Headers */, + 55EC4576E818021C3B95B55AADEBC063 /* RLMRealm+Sync.h in Copy . Public Headers */, + 3A84473A2E0C4B756324BA732D27E7AD /* RLMRealm.h in Copy . Public Headers */, + 763F0743EAC0C7C218F4A8ED7B6853FA /* RLMRealm_Dynamic.h in Copy . Public Headers */, + 0EF763CF3859B0D5A0A87ABA323C03E3 /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */, + 945B9ECDD2328391FA3CD55410E700A7 /* RLMRealmConfiguration.h in Copy . Public Headers */, + E98E69F507874585407087D39FDE207E /* RLMResults.h in Copy . Public Headers */, + FD81CE4D77836E18415D490317156C27 /* RLMSchema.h in Copy . Public Headers */, + 890DA0810BC230A7BEB78FFCEEE98CDD /* RLMSyncConfiguration.h in Copy . Public Headers */, + 0F35370AF212657FED91345D20653D02 /* RLMSyncCredentials.h in Copy . Public Headers */, + A82875AD63AA455F3F304BF5DA29DB3D /* RLMSyncManager.h in Copy . Public Headers */, + B7B1E0333F71FA009C9AC0DEDC090DE4 /* RLMSyncPermission.h in Copy . Public Headers */, + 278593624C9CFEBA08F88FE930B537B8 /* RLMSyncSession.h in Copy . Public Headers */, + B03D93D34B4FAC32829C7D8F51158571 /* RLMSyncSubscription.h in Copy . Public Headers */, + A6B4395B0E61A7EE6705FB3CBE54E313 /* RLMSyncUser.h in Copy . Public Headers */, + 120A300FF8311A897BCFED708A112355 /* RLMSyncUtil.h in Copy . Public Headers */, + 048D259CFAE91FB07E038A309346850B /* RLMThreadSafeReference.h in Copy . Public Headers */, ); name = "Copy . Public Headers"; runOnlyForDeploymentPostprocessing = 0; }; - 8A068DB994824A092FB2D1D7411BDD0A /* Copy . Private Headers */ = { + 99AD7BB8436B432F5718728916C9A6A4 /* Copy . Private Headers */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; dstSubfolderSpec = 16; files = ( - 62AC1DBEC83926D38B882698FA01F2B8 /* RLMAccessor.h in Copy . Private Headers */, - 92590055B55105ED909F32128C3C409C /* RLMArray_Private.h in Copy . Private Headers */, - A350A55D21C3ED330F418737F620287F /* RLMCollection_Private.h in Copy . Private Headers */, - 5CEBAF8644006933DCAA5E12B4EEC059 /* RLMListBase.h in Copy . Private Headers */, - 2047AF56D9BA4549150095516CAAE58E /* RLMObject_Private.h in Copy . Private Headers */, - B309093E62938D2401251C4F96F05D03 /* RLMObjectBase_Private.h in Copy . Private Headers */, - 3B0316E0CD7FA7C642120704FF68D280 /* RLMObjectSchema_Private.h in Copy . Private Headers */, - E8DD0333113DE2FBD78A6BA41F4E69EB /* RLMObjectStore.h in Copy . Private Headers */, - D428679E58A37A0C8B646C1D3A1B2454 /* RLMOptionalBase.h in Copy . Private Headers */, - 6CBCE6D543D403F261AE09ED38C00281 /* RLMProperty_Private.h in Copy . Private Headers */, - EC6BF3C540C28CE7AAE20EBC58EB5B4E /* RLMRealm_Private.h in Copy . Private Headers */, - 9A0854B0EEB48DCC2F59555A5A9171B7 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */, - D0D01ADEE2AFD6069B0B3DB9061252E3 /* RLMResults_Private.h in Copy . Private Headers */, - E0CC89B41E54E1AD161B834EDF248223 /* RLMSchema_Private.h in Copy . Private Headers */, - BFB2A1A18CE3FD343BC91F0745CFC4E0 /* RLMSyncConfiguration_Private.h in Copy . Private Headers */, - 3765B9EF0BCCB9B38E0AD7B9BD36CE3B /* RLMSyncUtil_Private.h in Copy . Private Headers */, + 8614CE23175545760A7E602F81093889 /* RLMAccessor.h in Copy . Private Headers */, + 6331057281A1134044546CDF07F64654 /* RLMArray_Private.h in Copy . Private Headers */, + F2CF2215EBE59A1F18A813B02253CF39 /* RLMCollection_Private.h in Copy . Private Headers */, + 7A629535053BF796E5FDD53A358ADE70 /* RLMListBase.h in Copy . Private Headers */, + A3AF23903D0C780677B19DCCDB5C1653 /* RLMObject_Private.h in Copy . Private Headers */, + 6F671DAAE046AEF4272D7ACA8BD97645 /* RLMObjectBase_Private.h in Copy . Private Headers */, + 62F50A85A39FC30BAEE7103E5A3277A8 /* RLMObjectSchema_Private.h in Copy . Private Headers */, + A082526C1F4ED66E997A8D3B744D114D /* RLMObjectStore.h in Copy . Private Headers */, + FEEE76DDB0C0FC6DBA45775F1B241026 /* RLMOptionalBase.h in Copy . Private Headers */, + ED5C7ACA16945B4C4BE698F5E730759A /* RLMProperty_Private.h in Copy . Private Headers */, + 5689D5D02CD7712A5979A395DA43D963 /* RLMRealm_Private.h in Copy . Private Headers */, + 717166B91FAE7482F8C3BB6DCCC2033B /* RLMRealmConfiguration_Private.h in Copy . Private Headers */, + 18B0103857A5A2CB2401E445849DE23D /* RLMResults_Private.h in Copy . Private Headers */, + 9873F7626EBFCB8B30FD54CBBA08178F /* RLMSchema_Private.h in Copy . Private Headers */, + 9363AFB4442904B0C16572397DA5260F /* RLMSyncConfiguration_Private.h in Copy . Private Headers */, + A3F9087EF40E92CD06F9FB88ABB7BF72 /* RLMSyncUtil_Private.h in Copy . Private Headers */, ); name = "Copy . Private Headers"; runOnlyForDeploymentPostprocessing = 0; @@ -1458,3206 +1523,3669 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0026A20F0F7ABD308811BBFAD64045C7 /* GULNetworkConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkConstants.h; path = GoogleUtilities/Network/Private/GULNetworkConstants.h; sourceTree = ""; }; - 004371D61FCFE1DF8851BF3F3997962C /* FLEXMultilineTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultilineTableViewCell.m; path = Classes/Utility/FLEXMultilineTableViewCell.m; sourceTree = ""; }; - 0048E2AD18612D5E846CEC5DBC8C9970 /* FLEX.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FLEX.modulemap; sourceTree = ""; }; - 004A78012ACB0F4D3851F033B159FC96 /* Swipeable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Swipeable.swift; path = Source/Swipeable.swift; sourceTree = ""; }; - 0074C772C18EB8F44F03E638475C9D28 /* ImageTaskMetrics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTaskMetrics.swift; path = Sources/ImageTaskMetrics.swift; sourceTree = ""; }; - 00B35D8F8E0E37DF1CBD9888F0A1C1A9 /* FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEX.h; path = Classes/FLEX.h; sourceTree = ""; }; - 01CA00DAE686DB9419BC0E9810CAA28A /* RLMObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObject.mm; path = Realm/RLMObject.mm; sourceTree = ""; }; - 025C83735A93ED07147EDE3A24C00D0F /* Pods-Rocket.ChatTests.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.beta.xcconfig"; sourceTree = ""; }; - 032F78601523CC21F907722C16AA1F41 /* FLEXLibrariesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLibrariesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.m; sourceTree = ""; }; - 037871A3645C1844FD0C6B595D7475E5 /* FLEXGlobalsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsTableViewController.h; path = Classes/GlobalStateExplorers/FLEXGlobalsTableViewController.h; sourceTree = ""; }; - 0382CBF81F5C02077DC9094B33149A23 /* RLMSyncSessionRefreshHandle.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSessionRefreshHandle.mm; path = Realm/RLMSyncSessionRefreshHandle.mm; sourceTree = ""; }; - 03B020D51DF5AE2880800E4F4BF37C91 /* WatermarkConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WatermarkConfig.swift; path = MobilePlayer/Config/WatermarkConfig.swift; sourceTree = ""; }; - 04521581D99269932E1EFF9806589C8D /* RealmSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RealmSwift-Info.plist"; sourceTree = ""; }; - 0496423F7189F9EF6EE8C879C572C6B7 /* OAuthSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OAuthSwift-dummy.m"; sourceTree = ""; }; - 04AD05BAA38078E4FF40AD9E2BC7F2F5 /* FIRComponentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentType.m; path = Firebase/Core/FIRComponentType.m; sourceTree = ""; }; - 052BEF575B27F61DFEA2194251097584 /* weak_realm_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = weak_realm_notifier.cpp; path = Realm/ObjectStore/src/impl/weak_realm_notifier.cpp; sourceTree = ""; }; - 056B11BCCC190F1AC7F0565A24A7E673 /* MLVolumeButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLVolumeButton@3x.png"; path = "MobilePlayer/Resources/MLVolumeButton@3x.png"; sourceTree = ""; }; - 05931132F451BC03A5EE7546D64ED046 /* FLEXLiveObjectsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLiveObjectsTableViewController.h; path = Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.h; sourceTree = ""; }; - 05CE49B0052C20F7A2CCD38CE38D6822 /* RCMarkdownParser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RCMarkdownParser-prefix.pch"; sourceTree = ""; }; - 060A3AA199FDF349C87092B0E25986CC /* FLEXClassesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXClassesTableViewController.m; sourceTree = ""; }; - 063D08043465A2809B92C6E7BE7B5CCC /* 1PasswordExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = 1PasswordExtension.modulemap; sourceTree = ""; }; - 0669CB6A9948A75F55CD39F2F0F2A08C /* FLEXExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerViewController.m; path = Classes/ExplorerInterface/FLEXExplorerViewController.m; sourceTree = ""; }; - 06AE42FD103B3E8D76E34A202487932C /* MobilePlayer.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MobilePlayer.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 0708A00DD9DA35BF7C5AFCB1672E7068 /* FLEXResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXResources.h; path = Classes/Utility/FLEXResources.h; sourceTree = ""; }; - 074BA104315D43DAA391D06A2E9D61A7 /* FLEXArgumentInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h; sourceTree = ""; }; - 07515F8C2934A7DE5B97F53E6D2B1CFD /* FLEXDictionaryExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDictionaryExplorerViewController.h; path = Classes/ObjectExplorers/FLEXDictionaryExplorerViewController.h; sourceTree = ""; }; - 081EB2E6AE215189C5454782073C8CC7 /* Pods-Rocket.Chat-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Rocket.Chat-acknowledgements.markdown"; sourceTree = ""; }; - 083B3E12BA0D212D551EEDB0392993C9 /* FLEXViewExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewExplorerViewController.m; path = Classes/ObjectExplorers/FLEXViewExplorerViewController.m; sourceTree = ""; }; - 093BB86B235598B8D67C35130BB77A0A /* RocketChatViewController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RocketChatViewController-Info.plist"; sourceTree = ""; }; - 095F35593572F9E7971326256900B713 /* sync_metadata.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_metadata.cpp; path = Realm/ObjectStore/src/sync/impl/sync_metadata.cpp; sourceTree = ""; }; - 096AD7DEE43FA647EF7944B6F1034949 /* FLEXExplorerToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerToolbar.h; path = Classes/Toolbar/FLEXExplorerToolbar.h; sourceTree = ""; }; - 09D9E581152A01264DF9E411E22E0819 /* ImageViewer-Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = "ImageViewer-Assets.xcassets"; path = "ImageViewer/Resources/ImageViewer-Assets.xcassets"; sourceTree = ""; }; - 0A1B80182387C944CFFA36AA21C6A032 /* FLEXFileBrowserSearchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserSearchOperation.m; path = Classes/GlobalStateExplorers/FLEXFileBrowserSearchOperation.m; sourceTree = ""; }; - 0AD714D10207BE5FF0DCD232257A9521 /* Realm-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Realm-prefix.pch"; sourceTree = ""; }; - 0AFAFA01D2E57646F4112DFA12650E36 /* MLShareButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLShareButton.png; path = MobilePlayer/Resources/MLShareButton.png; sourceTree = ""; }; - 0C1A2EA71D72730FB9A04042D2490708 /* Nuke-FLAnimatedImage-Plugin-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nuke-FLAnimatedImage-Plugin-Info.plist"; sourceTree = ""; }; - 0CB817525ED6968FE2191EC3E20574AE /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = Firebase/Core/Public/FIRAnalyticsConfiguration.h; sourceTree = ""; }; - 0D12101A1693F0452175DE44D7945CA3 /* FIRComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponent.m; path = Firebase/Core/FIRComponent.m; sourceTree = ""; }; - 0D746001EED6F54BA45F69E1FC4C3DE9 /* Nuke.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nuke.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0E97530C8E1DADA328151A7B5D74CF74 /* SimpleImageViewer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SimpleImageViewer.modulemap; sourceTree = ""; }; - 0F2A31AC43A899263C655766ABFF61D9 /* RLMSyncConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration_Private.h; path = include/RLMSyncConfiguration_Private.h; sourceTree = ""; }; - 0F3122D0864BC36EA6B66DB3B4B0BE1A /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = RealmSwift/Schema.swift; sourceTree = ""; }; - 0F335C48847B32C7AAD2204ED00462E3 /* Nuke-FLAnimatedImage-Plugin-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-FLAnimatedImage-Plugin-umbrella.h"; sourceTree = ""; }; - 0F9DC88DA91C60A1B5DF304C4EFD6C63 /* Starscream-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Starscream-Info.plist"; sourceTree = ""; }; - 0FBE6353E48C14F67A42E1FDA0436985 /* FLEXNetworkTransactionDetailTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionDetailTableViewController.m; path = Classes/Network/FLEXNetworkTransactionDetailTableViewController.m; sourceTree = ""; }; - 0FD41C816E41BA7B1E1EFF433F297298 /* FLEX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLEX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0FE0E1418996497A2EB9F6EB5C16DD97 /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = ""; }; - 1004C513B590C4EE779A88CCCAF6582F /* FLEXMultiColumnTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultiColumnTableView.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h; sourceTree = ""; }; - 10706607940A92A9127E8A23803C9FEE /* object_store.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_store.cpp; path = Realm/ObjectStore/src/object_store.cpp; sourceTree = ""; }; - 114133F8DCA61E6FA69D01C05262D460 /* FLAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLAnimatedImage.h; path = FLAnimatedImage/FLAnimatedImage.h; sourceTree = ""; }; - 114F6A4DEEB55422A91C00397A57F25A /* FLEXArgumentInputNumberView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNumberView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m; sourceTree = ""; }; - 116828EF4369238ED13BEDAFBEB11F01 /* FirebaseCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.xcconfig; sourceTree = ""; }; - 119EDB076A8E33E4BE05FB1F3A0D5414 /* placeholder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = placeholder.cpp; path = Realm/ObjectStore/src/placeholder.cpp; sourceTree = ""; }; - 11F1F790154FAFE5FFC71DC6C6D25225 /* FLEXArgumentInputFontsPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontsPickerView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m; sourceTree = ""; }; - 11F83FA488C5ADEF187432EE680F7169 /* FLEXLiveObjectsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLiveObjectsTableViewController.m; path = Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m; sourceTree = ""; }; - 12A1F2FB32D503A912D131AFA914617F /* FLEXArgumentInputFontView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m; sourceTree = ""; }; - 12DB2CBD480E0FE8E359B01EEC60A369 /* ImageViewerController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerController.swift; path = ImageViewer/ImageViewerController.swift; sourceTree = ""; }; - 1381103A73FD1C17BB992E7F86A13120 /* OAuthWebViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthWebViewController.swift; path = Sources/OAuthWebViewController.swift; sourceTree = ""; }; - 139FBF22ACDC54C9663E33C956203D6D /* Label.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Label.swift; path = MobilePlayer/Views/Label.swift; sourceTree = ""; }; - 1406DADDAF55885054DF945A31BC7854 /* RLMRealm_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Private.h; path = include/RLMRealm_Private.h; sourceTree = ""; }; - 1458D07F9EB94342AB68E117BBE44BDC /* MobilePlayer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MobilePlayer-dummy.m"; sourceTree = ""; }; - 14EB1E1656EB324205F11B8730EB5A07 /* GoogleUtilities.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleUtilities.modulemap; sourceTree = ""; }; - 1506768766CE4E4B8B02BD35C5CE5A43 /* GULReachabilityChecker+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULReachabilityChecker+Internal.h"; path = "GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h"; sourceTree = ""; }; - 15EBFAF3F750FC13221323B27E31EFC2 /* RLMSyncSubscription.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSubscription.mm; path = Realm/RLMSyncSubscription.mm; sourceTree = ""; }; - 1611987CFA9535B38C916845620AB6B6 /* RCMarkdownParser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RCMarkdownParser-dummy.m"; sourceTree = ""; }; - 1644E4106E0562D82D260ABCFB75A2C7 /* UIKitExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIKitExtension.swift; path = Sources/Extensions/UIKitExtension.swift; sourceTree = ""; }; - 16794853642C950B677D5C19AC176101 /* RLMObjectSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectSchema.mm; path = Realm/RLMObjectSchema.mm; sourceTree = ""; }; - 169B7C3E2C83D2BD40A05337FC1C55D8 /* FLEXClassesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXClassesTableViewController.h; sourceTree = ""; }; - 16BB51F732785C50F65D5026359E00DA /* RLMSyncSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSession.h; path = include/RLMSyncSession.h; sourceTree = ""; }; - 16EF9F2B9693CAE4436AFC40BD388362 /* Realm.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.xcconfig; sourceTree = ""; }; - 18C3E57F06CDB59E19D3ABB90F3A796A /* FLEXWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWindow.m; path = Classes/ExplorerInterface/FLEXWindow.m; sourceTree = ""; }; - 18FA1E414999CA28DABFAD6BB90A7C20 /* RLMObjectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase.h; path = include/RLMObjectBase.h; sourceTree = ""; }; - 19032D8AB94A4E708F3B6FE930AAE684 /* Pods-Rocket.Chat.ShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.debug.xcconfig"; sourceTree = ""; }; - 192AF64ECDE705D4124240D353FAE769 /* Pods-Rocket.ChatTests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.test.xcconfig"; sourceTree = ""; }; - 194CBECC087C27DA2103D2C404E22B14 /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = Firebase/Core/FIROptions.m; sourceTree = ""; }; - 1A39AAF2AF9A3A3D27CF4EF97E7DFDB0 /* SwiftyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyJSON-Info.plist"; sourceTree = ""; }; - 1A753A55ACF22BB4343DC64BD32464B3 /* SortDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SortDescriptor.swift; path = RealmSwift/SortDescriptor.swift; sourceTree = ""; }; - 1A97D2037391BED8C528962A04FE0ABD /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; - 1AA1437142C700B16DEB2FC19195CBEE /* FLEXHierarchyTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewController.h; path = Classes/ViewHierarchy/FLEXHierarchyTableViewController.h; sourceTree = ""; }; - 1ACDB5FA5E76926989C3D043551E0F1D /* FIRComponentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentContainer.m; path = Firebase/Core/FIRComponentContainer.m; sourceTree = ""; }; - 1B8863FA0F7611CC597E6457F57798E3 /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = Firebase/Core/Private/FIRVersion.h; sourceTree = ""; }; - 1BB792682047FB83F911265151339F39 /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Sources/Starscream/WebSocket.swift; sourceTree = ""; }; - 1BC41362F624813DB0121D02DDC94265 /* RLMObjectSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema.h; path = include/RLMObjectSchema.h; sourceTree = ""; }; - 1BD4F09662FB465F34179B045585D620 /* FLAnimatedImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLAnimatedImage-prefix.pch"; sourceTree = ""; }; - 1BF3AC9C4348BAB5887E77CB2E5711DD /* FLEXTableListViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableListViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m; sourceTree = ""; }; - 1C101B48D6650673E9604BAF325249BD /* RLMMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration.h; path = include/RLMMigration.h; sourceTree = ""; }; - 1C362F8E9316C3CD32C2A85B4747F3E2 /* FLEXSystemLogTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogTableViewController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.h; sourceTree = ""; }; - 1C436036B465D0F314D33846E089B929 /* Starscream.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.xcconfig; sourceTree = ""; }; - 1CED8E51536DB09425948342C153B64B /* FLEXTableContentCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableContentCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.h; sourceTree = ""; }; - 1D0A8BDF8DF67F23E5050A0BE3A1242D /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Composer/Assets/Assets.xcassets; sourceTree = ""; }; - 1D13B187AEAFC73D6F41875CCD92B2CB /* ReachabilitySwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.xcconfig; sourceTree = ""; }; - 1DAA361DC3F8420552A3FC75D840E287 /* RLMSwiftSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSwiftSupport.m; path = Realm/RLMSwiftSupport.m; sourceTree = ""; }; - 1DEDB36512AFEDCF4F7681D3948EE214 /* Crashlytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.xcconfig; sourceTree = ""; }; - 1DFFAD5E224631DEE82999589BE602CC /* 1PasswordExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "1PasswordExtension-dummy.m"; sourceTree = ""; }; - 1E1CB03B761513D88FAA0B597C7940C8 /* SwipeCellKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwipeCellKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1E89A4F6B522D0B5FBC1E6ECE8ED47FC /* FLAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLAnimatedImageView.h; path = FLAnimatedImage/FLAnimatedImageView.h; sourceTree = ""; }; - 1EDACADC4B973DCA3BED0BBF0AC62659 /* FLEXImageExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImageExplorerViewController.m; path = Classes/ObjectExplorers/FLEXImageExplorerViewController.m; sourceTree = ""; }; - 1F377C55C9AD6BE64915CD9A4E133B25 /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Starscream.modulemap; sourceTree = ""; }; - 1F38FA20FA98FD1C5193F1D1B1067D0D /* SimpleImageViewer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SimpleImageViewer-prefix.pch"; sourceTree = ""; }; - 1FBE0974C24004A857479378B91EE7F1 /* GULNetworkMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkMessageCode.h; path = GoogleUtilities/Network/Private/GULNetworkMessageCode.h; sourceTree = ""; }; - 201B2421CFBBD4791B4AE9FDEE60B154 /* FLEXSQLiteDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSQLiteDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h; sourceTree = ""; }; - 20700EA0BBAAE00008B9A0711A0F38A8 /* semver-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "semver-dummy.m"; sourceTree = ""; }; - 21684532737A2E530BB95EA450A196CB /* OAuthSwiftURLHandlerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftURLHandlerType.swift; path = Sources/OAuthSwiftURLHandlerType.swift; sourceTree = ""; }; - 21696A1223D4146657BBCE34F837F73A /* librealmcore-ios.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "librealmcore-ios.a"; path = "core/librealmcore-ios.a"; sourceTree = ""; }; - 2178B59C7EA4F39EFFDDB5A5452A256F /* GoogleUtilities-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleUtilities-Info.plist"; sourceTree = ""; }; - 217C1675728ACCF15078B7844E655F34 /* Nuke.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nuke.modulemap; sourceTree = ""; }; - 21CC16E3C277434A36101D846291C4A5 /* RLMListBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMListBase.h; path = include/RLMListBase.h; sourceTree = ""; }; - 22138788CF28FAA12243DF4700FD3E4C /* FLEXObjectExplorerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerFactory.h; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.h; sourceTree = ""; }; - 227C67E48F0616FED2D4B7841BABD029 /* MLReduceVolume.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLReduceVolume.png; path = MobilePlayer/Resources/MLReduceVolume.png; sourceTree = ""; }; - 228BA4B7007B34E72502E048F844316A /* FLEXArgumentInputSwitchView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputSwitchView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m; sourceTree = ""; }; - 22A07D82268E20A194FAEB660CB9D60E /* sync_file.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_file.cpp; path = Realm/ObjectStore/src/sync/impl/sync_file.cpp; sourceTree = ""; }; - 22A2B62DA04BFE9E1E419C2850E2F826 /* FIRComponentRegistrant.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentRegistrant.h; path = Firebase/Core/Private/FIRComponentRegistrant.h; sourceTree = ""; }; - 22A4844A5354DB0EF598F2C14F9DD565 /* FLEXTableColumnHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableColumnHeader.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h; sourceTree = ""; }; - 22BCB54C6D895ED964518BE798786952 /* Slider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Slider.swift; path = MobilePlayer/Views/Slider.swift; sourceTree = ""; }; - 2304C6B205F918C7CDC63EEE18C01A55 /* FLEXArgumentInputSwitchView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputSwitchView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h; sourceTree = ""; }; - 238C67B6DE069C5CC117BF105AACBD31 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON.swift; sourceTree = ""; }; - 2414E9C33515E63CC18B34C77036A3E0 /* 1PasswordExtension-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "1PasswordExtension-prefix.pch"; sourceTree = ""; }; - 245236EE29F99E9B548DF1C34197B361 /* ThreadSafeReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadSafeReference.swift; path = RealmSwift/ThreadSafeReference.swift; sourceTree = ""; }; - 24988D9DDF0738249D9C5CF716899A97 /* Pods-Rocket.Chat-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.Chat-acknowledgements.plist"; sourceTree = ""; }; - 24D95733F97323A17B730A07F9A669B7 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 25183871FE979B151925BA759F0CB5C6 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; - 251CF09B5F640711C8BF60E504E7610D /* GoogleAppMeasurement.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAppMeasurement.xcconfig; sourceTree = ""; }; - 25C6692E35A4E233298A12EEDFBDAD7C /* Pods-Rocket.Chat.ShareExtension.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.test.xcconfig"; sourceTree = ""; }; - 25EEC2599B7BB409FC7823E1550A0342 /* FLEXArgumentInputNotSupportedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNotSupportedView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m; sourceTree = ""; }; - 2640037A77FA57A45B0B72BEBBE015F3 /* Pods-Rocket.Chat.ShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.release.xcconfig"; sourceTree = ""; }; - 26647F3074E9C668C91615818C904646 /* FLEXKeyboardShortcutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardShortcutManager.h; path = Classes/Utility/FLEXKeyboardShortcutManager.h; sourceTree = ""; }; - 2743375C21685AFF14997E1A9AF3E8F9 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 277852820C67991EDB54119236884B33 /* RLMSyncPermissionResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermissionResults.mm; path = Realm/RLMSyncPermissionResults.mm; sourceTree = ""; }; - 27B01EDF686D5010CEC58C63A0F6282C /* RLMOptionalBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMOptionalBase.h; path = include/RLMOptionalBase.h; sourceTree = ""; }; - 27EF820450FAEBE475C6DC9E68CBA178 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 28103B5D3598B8622BF3A72812531557 /* SimpleImageViewer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SimpleImageViewer-Info.plist"; sourceTree = ""; }; - 286C51CC84C40FC29F8719213A2FBF39 /* GULLoggerCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerCodes.h; path = GoogleUtilities/Common/GULLoggerCodes.h; sourceTree = ""; }; - 28C3ACCA7E93ED9D31C43924C1E50631 /* FLEXFileBrowserFileOperationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserFileOperationController.m; path = Classes/GlobalStateExplorers/FLEXFileBrowserFileOperationController.m; sourceTree = ""; }; - 29927A5189487AE1C8ED31386A6C110A /* FLEXGlobalsTableViewControllerEntry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsTableViewControllerEntry.m; path = Classes/ObjectExplorers/FLEXGlobalsTableViewControllerEntry.m; sourceTree = ""; }; - 299DFDC663FA36689493F509E295226E /* FLEX-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-umbrella.h"; sourceTree = ""; }; - 29B7A9BE309AEDD9746C8067D8773BF3 /* GULReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULReachabilityChecker.m; path = GoogleUtilities/Reachability/GULReachabilityChecker.m; sourceTree = ""; }; - 29B94446A8A5523D7777E71F0E578543 /* RecordAudioView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecordAudioView.swift; path = Composer/Classes/Overlays/RecordAudioView.swift; sourceTree = ""; }; - 29BE3CC535BAB5E938FF22E4A05DD41A /* results_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results_notifier.cpp; path = Realm/ObjectStore/src/impl/results_notifier.cpp; sourceTree = ""; }; - 29C08D42462D83C95524290184CE65D3 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 29CC7747A3A6E5FEBC83EFC4F23495C7 /* FLEXNetworkRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkRecorder.h; path = Classes/Network/FLEXNetworkRecorder.h; sourceTree = ""; }; - 2A9540ABDA0362D948DC59A0965A3EBA /* FLEXRuntimeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeUtility.m; path = Classes/Utility/FLEXRuntimeUtility.m; sourceTree = ""; }; - 2A9EA71CC98E3516152E5C31F1080C4F /* RLMSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema_Private.h; path = include/RLMSchema_Private.h; sourceTree = ""; }; - 2AB803F4FDFE5F31571467AF6725768F /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = RealmSwift/Migration.swift; sourceTree = ""; }; - 2AEB16AE246C4FFD97E44353A092CB63 /* FLEXArgumentInputStructView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStructView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h; sourceTree = ""; }; - 2AF5F4874F144D7CCC48EDE4FDF5E4D7 /* GULNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkURLSession.m; path = GoogleUtilities/Network/GULNetworkURLSession.m; sourceTree = ""; }; - 2AF9BAEB06A933A49C63F4FC9B1DB79F /* sync_user.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_user.cpp; path = Realm/ObjectStore/src/sync/sync_user.cpp; sourceTree = ""; }; - 2AFC00EAF2325960ED98559CE516BE31 /* SHA1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA1.swift; path = Sources/SHA1.swift; sourceTree = ""; }; - 2B14BCDAFAA3C1CEF006369BF756B04E /* FLEXNetworkObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkObserver.h; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.h; sourceTree = ""; }; - 2BA8A24571C847DB0021A7164E9BA91E /* FIRErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrors.h; path = Firebase/Core/Private/FIRErrors.h; sourceTree = ""; }; - 2BF9DE0B1214CF4E8EF154C3A9EDDD85 /* GULAppDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h; sourceTree = ""; }; - 2C7E5DB78FE7D473F90250C5179EEC29 /* FIRAnalyticsConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRAnalyticsConfiguration+Internal.h"; path = "Firebase/Core/Private/FIRAnalyticsConfiguration+Internal.h"; sourceTree = ""; }; - 2D15697CF3296A071ACF6E258A57ACBC /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = Firebase/Core/FIRAppAssociationRegistration.m; sourceTree = ""; }; - 2E6FAE14C2A7C125E403B49D407ED004 /* FLEXArgumentInputFontView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h; sourceTree = ""; }; - 2E9AC103FFE12A12FCC27FF801EC3E73 /* SwipeCellKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwipeCellKit-dummy.m"; sourceTree = ""; }; - 2EB46F8EE9C0DE738579F8200D7A50C5 /* GULMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULMutableDictionary.m; path = GoogleUtilities/Network/GULMutableDictionary.m; sourceTree = ""; }; - 2EBFC12B7062AFE102BF1CAEA0956BD9 /* FLEX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FLEX-dummy.m"; sourceTree = ""; }; - 2F3338B8C0672CB2FE0BF94CF1696554 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 2F37CF1EF871BCCB7EC88AD14CBB333B /* Pods-Rocket.ChatTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.ChatTests-Info.plist"; sourceTree = ""; }; - 2FA3FC3E8B29249DA170A9E3EB768900 /* StagedChangeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagedChangeset.swift; path = Sources/StagedChangeset.swift; sourceTree = ""; }; - 2FAA94EE72422044E580BBF94D22525F /* Pods-Rocket.Chat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.debug.xcconfig"; sourceTree = ""; }; - 2FC41BE6D95236D68475DA07E939BC93 /* RealmSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RealmSwift.modulemap; sourceTree = ""; }; - 2FCDFAEDCDFE4AA4E772D1909B0406F5 /* PreviewAudioView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewAudioView.swift; path = Composer/Classes/Overlays/PreviewAudioView.swift; sourceTree = ""; }; - 30169FC0871AD5AF72946FAEC09AE3FD /* FLEXArgumentInputViewFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputViewFactory.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.m; sourceTree = ""; }; - 307184C1A9E078A93C6E60BEF3B2BEC8 /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseInstanceID.framework; path = Frameworks/FirebaseInstanceID.framework; sourceTree = ""; }; - 307AE0608BFF02202D10550B05B91A3C /* FLEXImageExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImageExplorerViewController.h; path = Classes/ObjectExplorers/FLEXImageExplorerViewController.h; sourceTree = ""; }; - 30F9BD6DC96AD29A52E78E2080668829 /* AnyDifferentiable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyDifferentiable.swift; path = Sources/AnyDifferentiable.swift; sourceTree = ""; }; - 31D7EB19083A48DE3431963809B76AE8 /* GULAppDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h; sourceTree = ""; }; - 32037FEBB8B1061A9DBF2D1BF66D4852 /* SwipeTransitionLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeTransitionLayout.swift; path = Source/SwipeTransitionLayout.swift; sourceTree = ""; }; - 321D80E0D4CD56DB2914069D3B5F15D5 /* GULOriginalIMPConvenienceMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULOriginalIMPConvenienceMacros.h; path = GoogleUtilities/MethodSwizzler/Private/GULOriginalIMPConvenienceMacros.h; sourceTree = ""; }; - 328020A2C8DFA9E6327A1EEDAEE98DF2 /* FLEXInstancesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXInstancesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXInstancesTableViewController.h; sourceTree = ""; }; - 329E49E8944C8DBF1EB2C35AA62EF71F /* Pods_Rocket_Chat_ShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Rocket_Chat_ShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 32D55CF364B918CDB7A7D3A9640F81C8 /* SwipeExpanding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeExpanding.swift; path = Source/SwipeExpanding.swift; sourceTree = ""; }; - 334EBAF76205BE715D399E2E13D5B20D /* MobilePlayer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MobilePlayer-umbrella.h"; sourceTree = ""; }; - 338BA795D36A42FED889E64769A429E2 /* Pods-Rocket.Chat.ShareExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Rocket.Chat.ShareExtension-umbrella.h"; sourceTree = ""; }; - 33A200004AD159B6358096A88063EFAB /* YoutubeParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YoutubeParser.swift; path = MobilePlayer/Parsers/YoutubeParser.swift; sourceTree = ""; }; - 33A67FC4AD27BB4BA2DB41DD4646567A /* RLMRealm.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealm.mm; path = Realm/RLMRealm.mm; sourceTree = ""; }; - 341F1F0A76355127E9976547D36D5680 /* FLAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLAnimatedImage.m; path = FLAnimatedImage/FLAnimatedImage.m; sourceTree = ""; }; - 3443C30791D3D893BA34B2EF68F7F11C /* LinkingObjects.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkingObjects.swift; path = RealmSwift/LinkingObjects.swift; sourceTree = ""; }; - 349825FFA80C138BC1DFC9CCF1908F09 /* RLMObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject.h; path = include/RLMObject.h; sourceTree = ""; }; - 34EF1DDB1FE7BC0B1621480CCD2A8BE1 /* Pods-Rocket.Chat.ShareExtension-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Rocket.Chat.ShareExtension-acknowledgements.markdown"; sourceTree = ""; }; - 351B49E4EC79B8EB1BBE83FDF343373F /* FLEXFileBrowserSearchOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserSearchOperation.h; path = Classes/GlobalStateExplorers/FLEXFileBrowserSearchOperation.h; sourceTree = ""; }; - 35744F6F9C9710E653A58645B9FFB54F /* RLMListBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMListBase.mm; path = Realm/RLMListBase.mm; sourceTree = ""; }; - 3638726DBB87535CFD5E5E857D0839DA /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; - 363B499AF27D659B45AD3C708BC1FAD4 /* RLMManagedArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMManagedArray.mm; path = Realm/RLMManagedArray.mm; sourceTree = ""; }; - 364B9FDD3EA053C0E43BE38C9243D68F /* Realm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Realm.h; path = include/Realm.h; sourceTree = ""; }; - 36A14BEF1D8BE9DB00B78CFC12DD0A57 /* Pods-Rocket.ChatTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Rocket.ChatTests-frameworks.sh"; sourceTree = ""; }; - 3754C508CFCEB5426546F297A424565F /* RLMArray_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray_Private.h; path = include/RLMArray_Private.h; sourceTree = ""; }; - 37E8AB729A0AF60E2C057ED9B6DA8B5F /* cs.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = cs.lproj; path = Composer/Assets/cs.lproj; sourceTree = ""; }; - 37F0161E37F277A1BC796C1E07D723D5 /* ClosureSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ClosureSupport.swift; path = MobilePlayer/Extensions/ClosureSupport.swift; sourceTree = ""; }; - 37F4B658CD5B174F767B125F4A704940 /* FLAnimatedImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLAnimatedImage.xcconfig; sourceTree = ""; }; - 37F579CD5587D0E3C0A9C5DEBA22B1B7 /* RLMResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults.h; path = include/RLMResults.h; sourceTree = ""; }; - 380C67C09E012750FC968748008038D7 /* Pods-Rocket.Chat-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Rocket.Chat-dummy.m"; sourceTree = ""; }; - 3889D68898B5D508669E3C7802DDC8E7 /* Pods-Rocket.Chat-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.Chat-Info.plist"; sourceTree = ""; }; - 388E518F56DEFE49AC42A20309BD1733 /* FLEXNetworkTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransaction.h; path = Classes/Network/FLEXNetworkTransaction.h; sourceTree = ""; }; - 38A51A99FA0D2A903B27AD7D7F70A103 /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = Firebase/Core/Private/FIRComponentType.h; sourceTree = ""; }; - 392137F509703B56F173F888580A1DB5 /* start_audio_record.m4a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = start_audio_record.m4a; path = Composer/Sounds/start_audio_record.m4a; sourceTree = ""; }; - 392813035591A97ED5B33ACBF459CA9A /* primitive_list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = primitive_list_notifier.cpp; path = Realm/ObjectStore/src/impl/primitive_list_notifier.cpp; sourceTree = ""; }; - 394F88F19C58BC5C34A1A6A26D9174C6 /* FLEXFileBrowserTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserTableViewController.m; path = Classes/GlobalStateExplorers/FLEXFileBrowserTableViewController.m; sourceTree = ""; }; - 3958693CAEA2367EFD2DC98EEF49D3AD /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; - 39D32862C3EC40DE02CFB051F86A4AAD /* StateHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StateHelper.swift; path = MobilePlayer/Helpers/StateHelper.swift; sourceTree = ""; }; - 39E902CB5C014A9D226645A7767CEB0B /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; }; - 3A56DDFF8AA56B65F865263EC3E0684C /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; - 3AEB40EB7BBDCAF5A880C55B99A31A17 /* RLMConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMConstants.m; path = Realm/RLMConstants.m; sourceTree = ""; }; - 3B08739DD416393E49984A28452F49A8 /* Changeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Changeset.swift; path = Sources/Changeset.swift; sourceTree = ""; }; - 3CD33BD790F1A5A3BA51BE5B18C08DA8 /* OAuth1Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuth1Swift.swift; path = Sources/OAuth1Swift.swift; sourceTree = ""; }; - 3CF30DCB14A06ECD5A5C84C1CF6B0F3C /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; - 3D00DE7A1E860DB1CEF37001EA4040C5 /* FIRDependency.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDependency.m; path = Firebase/Core/FIRDependency.m; sourceTree = ""; }; - 3D33147ED2FC9DDADC5F09E224F445BE /* SimpleImageViewer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SimpleImageViewer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3D45AFAB3D21A74C7F1400737B20F5C8 /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = Firebase/Core/FIRLogger.m; sourceTree = ""; }; - 3D906FA05608F00FFBBA9ED705A67F54 /* RLMProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty.h; path = include/RLMProperty.h; sourceTree = ""; }; - 3E15777F6486B1013B4DF0C82D0E50E1 /* FLAnimatedImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FLAnimatedImage-dummy.m"; sourceTree = ""; }; - 3F875C825AC6483AE79ABE33B7F4FAA5 /* Pods-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.release.xcconfig"; sourceTree = ""; }; - 3FA60F578BBB5462B01F663E38555649 /* FIRErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrorCode.h; path = Firebase/Core/Private/FIRErrorCode.h; sourceTree = ""; }; - 4006F0229617B8B3AA3BC8585294F07D /* Objc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Objc.swift; path = Sources/Objc.swift; sourceTree = ""; }; - 4061DB9DCE5A003587A14EAF6065A17C /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; - 41048F51B42851042EDD6F37BF450288 /* Data+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+OAuthSwift.swift"; path = "Sources/Data+OAuthSwift.swift"; sourceTree = ""; }; - 413449DBF0EFC17117560ED7BDF23D5F /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = ""; }; - 4156FEC2340172AE6BAC86DA34101E5E /* RLMObject_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject_Private.h; path = include/RLMObject_Private.h; sourceTree = ""; }; - 418A3C16F97F460EE04C82B1B36621A7 /* Pods-Rocket.Chat-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Rocket.Chat-umbrella.h"; sourceTree = ""; }; - 41D3A8A2BC5D9F151C1090BB7E36D38F /* DifferenceKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DifferenceKit.xcconfig; sourceTree = ""; }; - 42852B842E0C2B1B346E6A1CB7C47E87 /* Nuke-FLAnimatedImage-Plugin-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nuke-FLAnimatedImage-Plugin-dummy.m"; sourceTree = ""; }; - 42DBAE45C59137E3085C0C9A7F37AD46 /* Int+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+OAuthSwift.swift"; path = "Sources/Int+OAuthSwift.swift"; sourceTree = ""; }; - 42F7A009DA86EB14F6C616F92FEFDDC7 /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = Firebase/Core/FIRBundleUtil.m; sourceTree = ""; }; - 4365B1E87A65BBD28BD702195D25CD4F /* ArraySection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ArraySection.swift; path = Sources/ArraySection.swift; sourceTree = ""; }; - 437904CE6A5355C7420660AA03BC607E /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; - 43F4C31F67984F12C9D421A7C2FA4D10 /* FLEXFieldEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorViewController.h; path = Classes/Editing/FLEXFieldEditorViewController.h; sourceTree = ""; }; - 44F1609E80E8677C7ECCC1904199C74D /* FLEXImagePreviewViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImagePreviewViewController.m; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.m; sourceTree = ""; }; - 457D1AE4E9951A55BC07032A9F24F09D /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; - 459E2E860CA41D9D36DE6F8E7BD7D39B /* Collection+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+OAuthSwift.swift"; path = "Sources/Collection+OAuthSwift.swift"; sourceTree = ""; }; - 4619EE3C6132791055887B917E68786E /* Button.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Button.swift; path = MobilePlayer/Views/Button.swift; sourceTree = ""; }; - 46358FB8364621A758602717F2ED2480 /* SwipeAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeAnimator.swift; path = Source/SwipeAnimator.swift; sourceTree = ""; }; - 464069EE53F315F02882BA66DDE649C1 /* Pods-Rocket.Chat.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Rocket.Chat.modulemap"; sourceTree = ""; }; - 466045FA36C4BE1E3A9F1536F7AA11D3 /* RLMAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMAccessor.h; path = include/RLMAccessor.h; sourceTree = ""; }; - 46EF8682D4C18035901BEBED0D84F854 /* Nuke-FLAnimatedImage-Plugin-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-FLAnimatedImage-Plugin-prefix.pch"; sourceTree = ""; }; - 46F2525C49AE88E935C131661CD144C0 /* MLCloseButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLCloseButton@3x.png"; path = "MobilePlayer/Resources/MLCloseButton@3x.png"; sourceTree = ""; }; - 47A952BE7A5898FC22B107897BAFE65F /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = ""; }; - 47C81C6E5FDF0D349F7844EF9EBB0AEC /* RLMArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray.h; path = include/RLMArray.h; sourceTree = ""; }; - 47CDA8A83CA35B304DCA30A510A01B0D /* FLEXTableColumnHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableColumnHeader.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m; sourceTree = ""; }; - 489D3998B0EA8B5FFC734DB9DB330F19 /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = Firebase/Core/Private/FIRBundleUtil.h; sourceTree = ""; }; - 48C8286DD90818D91642D489B29268A5 /* UIKitExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIKitExtension.swift; path = RocketChatViewController/Classes/UIKitExtension.swift; sourceTree = ""; }; - 490BAFBA48AE2FAA2163D53E7820C4DD /* GULReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityChecker.h; path = GoogleUtilities/Reachability/Private/GULReachabilityChecker.h; sourceTree = ""; }; - 497AE74B8ABFE5ED6D57484C65C3EFE6 /* Reachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reachability.swift; path = Sources/Reachability.swift; sourceTree = ""; }; - 49BCC056FB7BF3EA9FC4E0E4B4395E0B /* MLPauseButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLPauseButton.png; path = MobilePlayer/Resources/MLPauseButton.png; sourceTree = ""; }; - 4A0392C30C0A9B69AB3CC5182B059553 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 4AC22966F95E94F595F9796C03046838 /* RLMProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMProperty.mm; path = Realm/RLMProperty.mm; sourceTree = ""; }; - 4B1A12C6EB0EACD0AD62A2335FB9A486 /* external_commit_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = external_commit_helper.cpp; path = Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp; sourceTree = ""; }; - 4B3F8884283789EF7FBC4C355116E49D /* RLMSyncManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncManager.mm; path = Realm/RLMSyncManager.mm; sourceTree = ""; }; - 4B9C8F146839268E10269F4C07475A07 /* Nuke-FLAnimatedImage-Plugin.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Nuke-FLAnimatedImage-Plugin.xcconfig"; sourceTree = ""; }; - 4BB10C61E82F34D979EAE0B7D7CDCB28 /* RLMQueryUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMQueryUtil.mm; path = Realm/RLMQueryUtil.mm; sourceTree = ""; }; - 4BF497262555FFC94E2A686B66343EBE /* RLMCollection_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection_Private.h; path = include/RLMCollection_Private.h; sourceTree = ""; }; - 4C5FFB80B58CA96F03700D3C34BCAEE0 /* MLVolumeButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLVolumeButton@2x.png"; path = "MobilePlayer/Resources/MLVolumeButton@2x.png"; sourceTree = ""; }; - 4C77F7EBFF031407CF353689506884FF /* RLMSyncConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncConfiguration.mm; path = Realm/RLMSyncConfiguration.mm; sourceTree = ""; }; - 4CC298E0DD3344AE3C207F4BA2F81F49 /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = ""; }; - 4CF32D7FFBD99A1B5B9BB6DC05DE94EA /* semver.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = semver.modulemap; sourceTree = ""; }; - 4D5AC00790C9BF63FF99B5B7D1456618 /* DataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataCache.swift; path = Sources/DataCache.swift; sourceTree = ""; }; - 4DCBFC246F8B8154B91889D276D7455E /* RealmCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCollection.swift; path = RealmSwift/RealmCollection.swift; sourceTree = ""; }; - 4DD562941BBCA90C5560C9728FF52895 /* SwipeAction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeAction.swift; path = Source/SwipeAction.swift; sourceTree = ""; }; - 4E1830164DC063A52D40334E2591C28B /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = RealmSwift/List.swift; sourceTree = ""; }; - 4E232F6CD56E49EDD175075EA815CB39 /* SimpleImageViewer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SimpleImageViewer.xcconfig; sourceTree = ""; }; - 4EC1745041C6EEB684D6F3A792354688 /* FLEXSystemLogTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogTableViewCell.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.h; sourceTree = ""; }; - 4ECE22068196E6792E4C610118958420 /* ReachabilitySwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-umbrella.h"; sourceTree = ""; }; - 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MobilePlayer.xcconfig; sourceTree = ""; }; - 4F95F7374CB094ABE20102F82C43E623 /* ResourceBundle-MobilePlayer-MobilePlayer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MobilePlayer-MobilePlayer-Info.plist"; sourceTree = ""; }; - 5028398EE7F19A593D4AF732A21CCE13 /* FLEXCookiesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCookiesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXCookiesTableViewController.h; sourceTree = ""; }; - 509D517757023446A7248C515D973F06 /* SliderConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SliderConfig.swift; path = MobilePlayer/Config/SliderConfig.swift; sourceTree = ""; }; - 50A79E38DA1BE05BAEFE678818525C77 /* Nuke-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nuke-dummy.m"; sourceTree = ""; }; - 51AD2563AD48B427809F99FB84AB3F2F /* Pods-Rocket.ChatTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Rocket.ChatTests-acknowledgements.markdown"; sourceTree = ""; }; - 5217410D8040E960F63674F990CEA93E /* ImagePipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePipeline.swift; path = Sources/ImagePipeline.swift; sourceTree = ""; }; - 52D38C541222CC39BDCA7815CBEA5EC4 /* semver-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "semver-umbrella.h"; sourceTree = ""; }; - 539710E03DA4ADD1D5A451EA0330A639 /* pt-PT.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "pt-PT.lproj"; path = "Composer/Assets/pt-PT.lproj"; sourceTree = ""; }; - 53FD17FE3AB2744C9F4DC32EA60D2F99 /* SwipeCellKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwipeCellKit-umbrella.h"; sourceTree = ""; }; - 542348CB51352E230F3EA64F8EA04A95 /* NSAttributedString+Markdown.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSAttributedString+Markdown.swift"; path = "Pod/Classes/NSAttributedString+Markdown.swift"; sourceTree = ""; }; - 551124F54C43C9771C249550FB1E5453 /* MLIncreaseVolume@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLIncreaseVolume@3x.png"; path = "MobilePlayer/Resources/MLIncreaseVolume@3x.png"; sourceTree = ""; }; - 55191D846AB52B041E27FF3D457CD78B /* GULMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULMutableDictionary.h; path = GoogleUtilities/Network/Private/GULMutableDictionary.h; sourceTree = ""; }; - 56B52B4F2FA2290B3309CA29D49A5F6A /* GULSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSwizzler.h; path = GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h; sourceTree = ""; }; - 5715151DE5D51BD78131AF6F43684686 /* FLEXToolbarItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXToolbarItem.h; path = Classes/Toolbar/FLEXToolbarItem.h; sourceTree = ""; }; - 5729D188C659DF70D6DDF7DD47FD2B6C /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; - 575F21FA02FEFB3F82E1A8E65234CB76 /* RLMObjectBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectBase.mm; path = Realm/RLMObjectBase.mm; sourceTree = ""; }; - 57E94FD833AFBEEB790E84B28BE6A8BF /* FLEXHierarchyTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewCell.h; path = Classes/ViewHierarchy/FLEXHierarchyTableViewCell.h; sourceTree = ""; }; - 5A71A460DF030ABA6E1B8B2F563F3210 /* SwipeCollectionViewCell+Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeCollectionViewCell+Accessibility.swift"; path = "Source/SwipeCollectionViewCell+Accessibility.swift"; sourceTree = ""; }; - 5AA4B0A4F28DEDBA17D88751014D309A /* SwipeTableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeTableViewCell.swift; path = Source/SwipeTableViewCell.swift; sourceTree = ""; }; - 5ACA9F2B0BB9373FD4FFED6671505035 /* SwipeCollectionViewCell+Display.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeCollectionViewCell+Display.swift"; path = "Source/SwipeCollectionViewCell+Display.swift"; sourceTree = ""; }; - 5AF0B9DAA4D78665A00105B68E4EF1AE /* FirebaseCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCore-Info.plist"; sourceTree = ""; }; - 5B07902F6F56A5A082518305833E2EEE /* Pods-Rocket.Chat.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.beta.xcconfig"; sourceTree = ""; }; - 5B4D7DBB7BD36D456B3004E14A5A8C31 /* sync_manager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_manager.cpp; path = Realm/ObjectStore/src/sync/sync_manager.cpp; sourceTree = ""; }; - 5B5D088EDD0B8F72AEBE7962C8953B33 /* RLMAnalytics.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAnalytics.mm; path = Realm/RLMAnalytics.mm; sourceTree = ""; }; - 5BAFD99E2E110F9C973B46B5D1919091 /* RealmSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-prefix.pch"; sourceTree = ""; }; - 5CD5BEE0B7F0546C37906EE39EC2C5A7 /* OAuthSwiftError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftError.swift; path = Sources/OAuthSwiftError.swift; sourceTree = ""; }; - 5CFB5DFDD833A52F428A9894D1515E25 /* FLEXKeyboardHelpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardHelpViewController.m; path = Classes/Utility/FLEXKeyboardHelpViewController.m; sourceTree = ""; }; - 5D669219E202A75BAD93EA2CB465832F /* SwipeCollectionViewCellDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeCollectionViewCellDelegate.swift; path = Source/SwipeCollectionViewCellDelegate.swift; sourceTree = ""; }; - 5D89B8817FD2DB77EEBB3EFCB4FE38D7 /* FLAnimatedImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLAnimatedImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E5D51EA73314A85387979E485BFB676 /* GoogleUtilities-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-umbrella.h"; sourceTree = ""; }; - 5EC35EA87CD1371AF2288CB1DC1EE0D1 /* FLEXMultiColumnTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultiColumnTableView.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m; sourceTree = ""; }; - 5F248EFE72289B774E4BB307019116B7 /* FLEXLibrariesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLibrariesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.h; sourceTree = ""; }; - 5FC07A104C00DEFADA5B359CEB2F1CEC /* FLEXTableLeftCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableLeftCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m; sourceTree = ""; }; - 5FEA0258275713E25EE0268767A94CF5 /* FLEXSetExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSetExplorerViewController.m; path = Classes/ObjectExplorers/FLEXSetExplorerViewController.m; sourceTree = ""; }; - 606926E9F514458AECB2301C96D7B8D5 /* SwipeOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeOptions.swift; path = Source/SwipeOptions.swift; sourceTree = ""; }; - 60906A11715B122F22872EFD380628E2 /* RLMSyncSubscription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSubscription.h; path = include/RLMSyncSubscription.h; sourceTree = ""; }; - 60C4A8411D5839E265D15AB52CC0A8AD /* GoogleUtilities.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.xcconfig; sourceTree = ""; }; - 612147161C426C9873A0899D260E9DC3 /* results.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results.cpp; path = Realm/ObjectStore/src/results.cpp; sourceTree = ""; }; - 61D4589927E912A7200E77C8400B2081 /* FLEXArgumentInputFontsPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontsPickerView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.h; sourceTree = ""; }; - 634240391D791661A3349AFF707C4CB0 /* FLEXArgumentInputStringView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStringView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m; sourceTree = ""; }; - 634A77B1897FCA978E8B0425A659A00D /* RLMSyncSession.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSession.mm; path = Realm/RLMSyncSession.mm; sourceTree = ""; }; - 6390EF7AE2F22559710F18DBE7E0E535 /* FLEXDefaultEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultEditorViewController.m; path = Classes/Editing/FLEXDefaultEditorViewController.m; sourceTree = ""; }; - 63DAE88E52ADC3DF3C18548E17235501 /* FLEXToolbarItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXToolbarItem.m; path = Classes/Toolbar/FLEXToolbarItem.m; sourceTree = ""; }; - 641D5E20394775152471BA273D2DDAD8 /* FLEXExplorerToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerToolbar.m; path = Classes/Toolbar/FLEXExplorerToolbar.m; sourceTree = ""; }; - 647477D344D6FD8BF30A2927E4528EF1 /* RLMRealmConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration.h; path = include/RLMRealmConfiguration.h; sourceTree = ""; }; - 64AF461CE70B2400786098E539A44531 /* Differentiable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Differentiable.swift; path = Sources/Differentiable.swift; sourceTree = ""; }; - 663B1327C0DAFC9B6DE4FB5ABBF91EF1 /* FLEXKeyboardShortcutManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardShortcutManager.m; path = Classes/Utility/FLEXKeyboardShortcutManager.m; sourceTree = ""; }; - 670695D2A2516543C17D38FEFE843466 /* FLEXNetworkCurlLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkCurlLogger.m; path = Classes/Network/FLEXNetworkCurlLogger.m; sourceTree = ""; }; - 67AC951FAE00BB6DFC38F91165B0644D /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = Firebase/Core/Private/FIRAppInternal.h; sourceTree = ""; }; - 6815F73B2844B6C13FF4B7DA032A8749 /* MobilePlayerControlsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerControlsView.swift; path = MobilePlayer/Views/MobilePlayerControlsView.swift; sourceTree = ""; }; - 6841BDFB53AD59EBAD698B598677E339 /* RLMSyncPermission.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermission.mm; path = Realm/RLMSyncPermission.mm; sourceTree = ""; }; - 68581B3780E62D4766045D9E4F908889 /* ComposerLocalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerLocalizable.swift; path = Composer/Classes/Library/ComposerLocalizable.swift; sourceTree = ""; }; - 685CE693E930060D5FD7C11B923C96A3 /* RLMCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection.h; path = include/RLMCollection.h; sourceTree = ""; }; - 68666A74F592E2619283E9E11748F9E4 /* Nuke-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-umbrella.h"; sourceTree = ""; }; - 688D9AE1FBD17844A3DBDB25AECB2EDA /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.beta.xcconfig"; sourceTree = ""; }; - 68CA2E56789DFE459DBB556DE0B0584F /* FLEXNetworkHistoryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkHistoryTableViewController.m; path = Classes/Network/FLEXNetworkHistoryTableViewController.m; sourceTree = ""; }; - 69641B760872C3DAE1CDF55E0B59583E /* SwipeTableViewCell+Display.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeTableViewCell+Display.swift"; path = "Source/SwipeTableViewCell+Display.swift"; sourceTree = ""; }; - 6999FD8AAF5920BA57E91EFED7E5C0BA /* ComposerAddon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerAddon.swift; path = Composer/Classes/Addons/ComposerAddon.swift; sourceTree = ""; }; - 699EC7D907033B1F4A7F30FA622396C3 /* Results.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Results.swift; path = RealmSwift/Results.swift; sourceTree = ""; }; - 69EFF24B73DBBF5DA777DD8BF340544A /* MobilePlayer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MobilePlayer.modulemap; sourceTree = ""; }; - 6A0E06AA041106F2FF1D6AB4081106D2 /* Pods-Rocket.Chat-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Rocket.Chat-frameworks.sh"; sourceTree = ""; }; - 6A6563001F6677C6838FA34CAE1ED7CE /* NukeFLAnimatedImagePlugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NukeFLAnimatedImagePlugin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B09946E47B12567A6C085155432D02C /* ObjectSchema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectSchema.swift; path = RealmSwift/ObjectSchema.swift; sourceTree = ""; }; - 6BDC98A16D5E56AA2EC12BBE4EF79986 /* GULNetwork.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetwork.m; path = GoogleUtilities/Network/GULNetwork.m; sourceTree = ""; }; - 6C51AA555424F211A5A51CB26540948B /* FLEXArgumentInputView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m; sourceTree = ""; }; - 6CE6CD8EFD0DA228F72B0D11A866303F /* ToggleButtonConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToggleButtonConfig.swift; path = MobilePlayer/Config/ToggleButtonConfig.swift; sourceTree = ""; }; - 6D0FEA2CFF9A73891D03E928CE758932 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6D9787BA34B4FAAC67148D4F2E7A0293 /* FLEXNetworkTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransaction.m; path = Classes/Network/FLEXNetworkTransaction.m; sourceTree = ""; }; - 6D9FB553CD5797C918211296D084E9C2 /* RLMRealmConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmConfiguration.mm; path = Realm/RLMRealmConfiguration.mm; sourceTree = ""; }; - 6DE1D66692297F513981267E8F1E8111 /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; - 6E5F52A533BE0B053C8721359280606E /* OAuthSwiftMultipartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftMultipartData.swift; path = Sources/OAuthSwiftMultipartData.swift; sourceTree = ""; }; - 6EC32D1CD1F90773DB6C88B00F0F98FA /* MobilePlayerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerViewController.swift; path = MobilePlayer/MobilePlayerViewController.swift; sourceTree = ""; }; - 6EE8E89316BBFCAF76B3B36353CD0103 /* Pods-Rocket.ChatTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Rocket.ChatTests-umbrella.h"; sourceTree = ""; }; - 6EFBD6250A9E8697FF8BEDCB7CA5AEFE /* FLEXInstancesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXInstancesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXInstancesTableViewController.m; sourceTree = ""; }; - 6EFE871E984CEC5ED7185A3C63C9868D /* FLEXViewControllerExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewControllerExplorerViewController.h; path = Classes/ObjectExplorers/FLEXViewControllerExplorerViewController.h; sourceTree = ""; }; - 6F9DE1B50BA52051FEA4AD5B8C7859A9 /* FLEXSystemLogMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogMessage.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.h; sourceTree = ""; }; - 6FED1339CE7DF6B0E95B01A18F890C8B /* pl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = pl.lproj; path = Composer/Assets/pl.lproj; sourceTree = ""; }; - 704582F8880011AD6A11E2A93085D9ED /* RocketChatViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RocketChatViewController-dummy.m"; sourceTree = ""; }; - 706C17ED09DBDF2A7ABD08B5BA6BDC91 /* FLAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLAnimatedImageView.m; path = FLAnimatedImage/FLAnimatedImageView.m; sourceTree = ""; }; - 708DE808437E97D0B1FFE34CB5F4EBE5 /* OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwift.swift; path = Sources/OAuthSwift.swift; sourceTree = ""; }; - 715B9E5B7644BC3C381C4C604AC87F1F /* RLMMigration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMMigration.mm; path = Realm/RLMMigration.mm; sourceTree = ""; }; - 7164F55269A0E1B5B3D48B856AF3D4D7 /* ElementConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementConfig.swift; path = MobilePlayer/Config/ElementConfig.swift; sourceTree = ""; }; - 7193C8CB95F6E2FCC50F8769E69356FC /* SwipeActionButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActionButton.swift; path = Source/SwipeActionButton.swift; sourceTree = ""; }; - 7231D01825C44F9DD92A006583CA1681 /* FLEXArgumentInputStringView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStringView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h; sourceTree = ""; }; - 723C99F907CEF7DC80CB4420C98ED2E6 /* MLReduceVolume@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLReduceVolume@2x.png"; path = "MobilePlayer/Resources/MLReduceVolume@2x.png"; sourceTree = ""; }; - 728C3890E14E1D2F3879DEB0AC70552A /* SwipeActionTransitioning.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActionTransitioning.swift; path = Source/SwipeActionTransitioning.swift; sourceTree = ""; }; - 731EBC56B953ECC92C201B3428C10F17 /* sync_session.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_session.cpp; path = Realm/ObjectStore/src/sync/sync_session.cpp; sourceTree = ""; }; - 732C8968B42D24B85F923AE6814EE563 /* OAuthSwiftClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftClient.swift; path = Sources/OAuthSwiftClient.swift; sourceTree = ""; }; - 734B24159DDB59425F56805686E80B16 /* SwipeExpansionStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeExpansionStyle.swift; path = Source/SwipeExpansionStyle.swift; sourceTree = ""; }; - 73991BEAEE18D88AB5638D2D0D67E5A1 /* system_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = system_configuration.cpp; path = Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp; sourceTree = ""; }; - 7399638953BCE3E0701EFD2F87E4D294 /* FLEXDictionaryExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDictionaryExplorerViewController.m; path = Classes/ObjectExplorers/FLEXDictionaryExplorerViewController.m; sourceTree = ""; }; - 745EA400F9DE8A48EA7CCCE89EE9EE6B /* RLMSyncCredentials.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSyncCredentials.m; path = Realm/RLMSyncCredentials.m; sourceTree = ""; }; - 7481AFE513428003FB3F8470D2ED7AC5 /* GULAppDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppDelegateSwizzler.m; path = GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m; sourceTree = ""; }; - 753F529A22C40D25C15E49D8B5405B86 /* FLEXDefaultsExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultsExplorerViewController.m; path = Classes/ObjectExplorers/FLEXDefaultsExplorerViewController.m; sourceTree = ""; }; - 7557C08BAD6F256877C525791305F256 /* FLEXArgumentInputDateView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputDateView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h; sourceTree = ""; }; - 75794BB8FB84267973ADBDE638B9D2BC /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; - 75836FD49C0AEC0D6148F9535B154192 /* collection_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifier.cpp; path = Realm/ObjectStore/src/impl/collection_notifier.cpp; sourceTree = ""; }; - 75B6D9D892E2D9B6AF8C33F640E600C3 /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Frameworks/FirebaseAnalytics.framework; sourceTree = ""; }; - 7651BBFE595549880C54FD738B09E52B /* RLMCollection.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMCollection.mm; path = Realm/RLMCollection.mm; sourceTree = ""; }; - 7698B58E7E99E6F0586427618D5275C8 /* FLEXIvarEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXIvarEditorViewController.h; path = Classes/Editing/FLEXIvarEditorViewController.h; sourceTree = ""; }; - 7699D059E9712089FA073C7301218117 /* FIRAnalyticsConnector.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FIRAnalyticsConnector.framework; path = Frameworks/FIRAnalyticsConnector.framework; sourceTree = ""; }; - 76B94A79E375977F3C13DAAFCAAB04ED /* AnimatableImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatableImageView.swift; path = ImageViewer/AnimatableImageView.swift; sourceTree = ""; }; - 76C69077C602931C4377E097368F2E89 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Composer/Assets/en.lproj; sourceTree = ""; }; - 77047FBA7D0754149FB7AA6B7E5B8193 /* GULUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULUserDefaults.m; path = GoogleUtilities/UserDefaults/GULUserDefaults.m; sourceTree = ""; }; - 776CA75A12D83DD573376E5CD0B68859 /* sync_permission.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_permission.cpp; path = Realm/ObjectStore/src/sync/sync_permission.cpp; sourceTree = ""; }; - 77A1AD4285C9534D8B0E6F74EC1F41D7 /* FLEXHeapEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHeapEnumerator.h; path = Classes/Utility/FLEXHeapEnumerator.h; sourceTree = ""; }; - 77FEFC05F7713D8998FD9AD230822C58 /* RLMSyncManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager.h; path = include/RLMSyncManager.h; sourceTree = ""; }; - 78CDF23EF74A55E1B5A79E3C79431859 /* RCMarkdownParser.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCMarkdownParser.xcconfig; sourceTree = ""; }; - 791E3425ED4FB137B8A6C6FAFD275430 /* FLEXCookiesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCookiesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXCookiesTableViewController.m; sourceTree = ""; }; - 796D6E828A32875CBAF3D07DE2C01109 /* FLEXNetworkTransactionDetailTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionDetailTableViewController.h; path = Classes/Network/FLEXNetworkTransactionDetailTableViewController.h; sourceTree = ""; }; - 798DA69125DC3108FF0F140ABD378E4B /* RCMarkdownParser.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RCMarkdownParser.modulemap; sourceTree = ""; }; - 79F74E975F25D66AF4EE31BDC2BB014D /* Pods_Rocket_ChatTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Rocket_ChatTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B2C6DFEA576926CBC7F88EAC76CB12B /* RealmSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.xcconfig; sourceTree = ""; }; - 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = 1PasswordExtension.xcconfig; sourceTree = ""; }; - 7C5AE199B06AC9C455C758CB5D83ECAC /* FLEX-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FLEX-Info.plist"; sourceTree = ""; }; - 7DE9B5BCA3CC4393E359C30544C45ABD /* collection_change_builder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_change_builder.cpp; path = Realm/ObjectStore/src/impl/collection_change_builder.cpp; sourceTree = ""; }; - 7E0BC1C180EC36A05AA8435E482605B1 /* RLMRealmUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmUtil.mm; path = Realm/RLMRealmUtil.mm; sourceTree = ""; }; - 7E36D9ABDD90981A063503CCC1B8ED85 /* ImageDecoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDecoding.swift; path = Sources/ImageDecoding.swift; sourceTree = ""; }; - 7E70E25DEC9F5B01C65A1A7C47E0BDCA /* RLMPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMPlatform.h; path = include/RLMPlatform.h; sourceTree = ""; }; - 7E95D42CC110B6BB8BB58E4D463D7E64 /* RLMObjectStore.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectStore.mm; path = Realm/RLMObjectStore.mm; sourceTree = ""; }; - 7F409184780D14E976C75F31A60CF7AE /* ImageViewerDismissalInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerDismissalInteractor.swift; path = ImageViewer/Transitions/ImageViewerDismissalInteractor.swift; sourceTree = ""; }; - 7F647DBA0A69DBF8C9340D5F6353EE3D /* FLEXArgumentInputJSONObjectView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputJSONObjectView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputJSONObjectView.h; sourceTree = ""; }; - 7F6CC8E74831CF84264BC0445BFD1C2D /* ReachabilitySwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-prefix.pch"; sourceTree = ""; }; - 7FA28609574769E808D96630222ED236 /* OnePasswordExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OnePasswordExtension.h; sourceTree = ""; }; - 7FADE431871FC57D24E57F74C99FFA2F /* MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MBProgressHUD-Info.plist"; sourceTree = ""; }; - 8044325BC78DA37299AF018ED199C759 /* RLMUpdateChecker.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUpdateChecker.mm; path = Realm/RLMUpdateChecker.mm; sourceTree = ""; }; - 80F9C24D73D452759A46C8BB3CA05BDC /* FLEXIvarEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXIvarEditorViewController.m; path = Classes/Editing/FLEXIvarEditorViewController.m; sourceTree = ""; }; - 8170A6895172754BC2C0FC4295139A7C /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 81889272BF32C5B86EBFB43BE8249D6D /* FLEXArgumentInputViewFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputViewFactory.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.h; sourceTree = ""; }; - 818E61ABD382F8AA81525AF139542CA7 /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = ""; }; - 81B5FA125F83D144707ADF380931E385 /* FLEXTableContentViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableContentViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m; sourceTree = ""; }; - 81D15D0A68134923D32F017D39DCD45E /* MLCloseButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLCloseButton@2x.png"; path = "MobilePlayer/Resources/MLCloseButton@2x.png"; sourceTree = ""; }; - 81E97F23C0E26C550CA50F7861969084 /* FLEXKeyboardHelpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardHelpViewController.h; path = Classes/Utility/FLEXKeyboardHelpViewController.h; sourceTree = ""; }; - 820BBC0E45EC922E58E4FBFE7475326A /* BarConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarConfig.swift; path = MobilePlayer/Config/BarConfig.swift; sourceTree = ""; }; - 824A72FD55533BECB0B1E2E255A078AA /* index_set.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_set.cpp; path = Realm/ObjectStore/src/index_set.cpp; sourceTree = ""; }; - 826E1A8898380EEA40DE2D57D550E68F /* FLEXRealmDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.h; sourceTree = ""; }; - 8286CD7D6B521A659ECC0D10DE5D1C45 /* RLMRealm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm.h; path = include/RLMRealm.h; sourceTree = ""; }; - 82A92F6103594C28EC55B15B13E1A103 /* DataLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataLoader.swift; path = Sources/DataLoader.swift; sourceTree = ""; }; - 83B1D5C23A7979BA0F956F58C20B87C0 /* AudioRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AudioRecorder.swift; path = Composer/Classes/Library/AudioRecorder.swift; sourceTree = ""; }; - 83CC7729A09D7F330690924600CB80E7 /* MobilePlayerConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerConfig.swift; path = MobilePlayer/Config/MobilePlayerConfig.swift; sourceTree = ""; }; - 83CD1E3780A6CA89D611986B065F3863 /* MLPauseButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPauseButton@3x.png"; path = "MobilePlayer/Resources/MLPauseButton@3x.png"; sourceTree = ""; }; - 83FC40EEF2905DD98B17C73AA10CAD6F /* FLEXRuntimeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeUtility.h; path = Classes/Utility/FLEXRuntimeUtility.h; sourceTree = ""; }; - 8411D7490056AC3826FF0DD383097C48 /* ImageViewerPresentationTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerPresentationTransition.swift; path = ImageViewer/Transitions/ImageViewerPresentationTransition.swift; sourceTree = ""; }; - 8435925FA8DEA6EC0C99379D9831AF8F /* RLMAccessor.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAccessor.mm; path = Realm/RLMAccessor.mm; sourceTree = ""; }; - 847E3D89261E291BE83390D7E8F35753 /* FLEXArrayExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArrayExplorerViewController.h; path = Classes/ObjectExplorers/FLEXArrayExplorerViewController.h; sourceTree = ""; }; - 849FC48B10564B2AC105751EFF73CE3E /* semver-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "semver-Info.plist"; sourceTree = ""; }; - 8511C3C119919F148DF2CF42006E787E /* FLEXNetworkTransactionTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionTableViewCell.h; path = Classes/Network/FLEXNetworkTransactionTableViewCell.h; sourceTree = ""; }; - 85A8D36287A25CE89A566AF46B98D006 /* FLEXManager+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXManager+Private.h"; path = "Classes/Manager/FLEXManager+Private.h"; sourceTree = ""; }; - 8612B52C91C4C62F080309BD60A1C325 /* RCMarkdownParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RCMarkdownParser.swift; path = Pod/Classes/RCMarkdownParser.swift; sourceTree = ""; }; - 863C808B5A561495E916B18EE00C3D39 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = Firebase/Core/Private/FIRComponentContainer.h; sourceTree = ""; }; - 867759C653584B29823EDA409706762B /* MobilePlayerNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerNotification.swift; path = MobilePlayer/MobilePlayerNotification.swift; sourceTree = ""; }; - 867E9EE6BC2BC095B44C2A184FB0DA40 /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = Firebase/Core/FIRApp.m; sourceTree = ""; }; - 8683B85C2A41BC4718B8AE8269CF3EBE /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RealmSwift/Optional.swift; sourceTree = ""; }; - 8685FB3EEE56A4FFDDADA18A9BD5F9A2 /* RLMObjectSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema_Private.h; path = include/RLMObjectSchema_Private.h; sourceTree = ""; }; - 86938266EC29B43C2DF06591C98204CF /* MBProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.xcconfig; sourceTree = ""; }; - 86E28611DC9981BAB3D3104D0771EC30 /* OnePasswordExtensionResources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OnePasswordExtensionResources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 87024D93078CBF14CC11C6C068547119 /* RLMObjectBase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Private.h; path = include/RLMObjectBase_Private.h; sourceTree = ""; }; - 873BDD41B2C5A1C538193B073AC63D33 /* network_reachability_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = network_reachability_observer.cpp; path = Realm/ObjectStore/src/sync/impl/apple/network_reachability_observer.cpp; sourceTree = ""; }; - 87C16892706E5D418FB46595BE4B63F7 /* Pods-Rocket.Chat.ShareExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Rocket.Chat.ShareExtension.modulemap"; sourceTree = ""; }; - 87CAEB81973810971816E1CC04348823 /* RLMSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSchema.mm; path = Realm/RLMSchema.mm; sourceTree = ""; }; - 88C04BC13FF8D0DE547E3D8A3C188FF1 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; - 88FD033FABB3575F75034CDA0A9DD622 /* Nuke.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nuke.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 89585EFF3AD3296CF6F3D043C3C30D86 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = Firebase/Core/Private/FIROptionsInternal.h; sourceTree = ""; }; - 896A6CB4506286067519743B474D0397 /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h; sourceTree = ""; }; - 89FAE773A765F976BA9028A1E69B02D4 /* FLEXLayerExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLayerExplorerViewController.h; path = Classes/ObjectExplorers/FLEXLayerExplorerViewController.h; sourceTree = ""; }; - 8A316EC8C433D8078ABE58BEF7C4B389 /* ComposerTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerTextView.swift; path = Composer/Classes/Views/ComposerTextView.swift; sourceTree = ""; }; - 8A803F05382B8EE4AF900452013EA16D /* Pods-Rocket.ChatTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.ChatTests-acknowledgements.plist"; sourceTree = ""; }; - 8AB942C29CCDD1A2922E097B076C2C7E /* FLAnimatedImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLAnimatedImage-umbrella.h"; sourceTree = ""; }; - 8AC8DD3D3994F2AD081230813AB0BB83 /* RLMOptionalBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMOptionalBase.mm; path = Realm/RLMOptionalBase.mm; sourceTree = ""; }; - 8B2BD1FB8C66381723F7940C1175DA21 /* RLMSyncConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration.h; path = include/RLMSyncConfiguration.h; sourceTree = ""; }; - 8B5CD11230D2F44727ED8FD1E00FD4BD /* UserHintCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserHintCell.swift; path = Composer/Classes/Addons/Hints/UserHintCell.swift; sourceTree = ""; }; - 8B63423C7D950FEF16615BDB00424A52 /* FLEXResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXResources.m; path = Classes/Utility/FLEXResources.m; sourceTree = ""; }; - 8B7A53D4B7AE35D3CDC1509C759858C6 /* RLMSyncUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUser.h; path = include/RLMSyncUser.h; sourceTree = ""; }; - 8C1E1EA93796037971A4F4DEBF3F1757 /* FLEXSystemLogMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogMessage.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m; sourceTree = ""; }; - 8C4900C3016A636B06E492E3DB3951B4 /* SwipeCellKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwipeCellKit.xcconfig; sourceTree = ""; }; - 8C9DE3F04FD9FB5957B4455214449789 /* semver.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = semver.xcconfig; sourceTree = ""; }; - 8D11F5BBB6791B4CABE9659A01148E99 /* 1PasswordExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "1PasswordExtension-umbrella.h"; sourceTree = ""; }; - 8D5478333A6D40E000CC0BFB6DC84256 /* RLMProperty_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty_Private.h; path = include/RLMProperty_Private.h; sourceTree = ""; }; - 8D58035EB17E6B53CAE166DBFEEF18AA /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D8126873ED1D9F90C833C21468FC00C /* RLMResults_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults_Private.h; path = include/RLMResults_Private.h; sourceTree = ""; }; - 8DC6B3F86C6FC7954D2D419757D81D89 /* FLEXNetworkRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkRecorder.m; path = Classes/Network/FLEXNetworkRecorder.m; sourceTree = ""; }; - 8DE6134FC27F10590D74AA438A447904 /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = de.lproj; path = Composer/Assets/de.lproj; sourceTree = ""; }; - 8E011E78C804E28C5A8B415BC74759D4 /* FLEXObjectExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerViewController.h; path = Classes/ObjectExplorers/FLEXObjectExplorerViewController.h; sourceTree = ""; }; - 8E04AB34A2ED2722CB4ABBBBAFEB6BC2 /* OAuth2Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuth2Swift.swift; path = Sources/OAuth2Swift.swift; sourceTree = ""; }; - 8E3CA7FBFC0F7DBA3CD4ACD5847BE32D /* Pods-Rocket.ChatTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Rocket.ChatTests.modulemap"; sourceTree = ""; }; - 8E5C578EFA97B1F81DA1AED85DE2AEC3 /* binding_callback_thread_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = binding_callback_thread_observer.cpp; path = Realm/ObjectStore/src/binding_callback_thread_observer.cpp; sourceTree = ""; }; - 8E6D48C056D7ABD83A776326B4507574 /* RocketChatViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RocketChatViewController-umbrella.h"; sourceTree = ""; }; - 8EC2F3C0C70557DA6236B12E85DC2187 /* ImageViewerDismissalTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerDismissalTransition.swift; path = ImageViewer/Transitions/ImageViewerDismissalTransition.swift; sourceTree = ""; }; - 8FA1A7023998A1DB922519ED94F57F9B /* FLEXClassExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassExplorerViewController.h; path = Classes/ObjectExplorers/FLEXClassExplorerViewController.h; sourceTree = ""; }; - 8FCF3CE27BB830A2562D483ECC97AC31 /* SwipeCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeCollectionViewCell.swift; path = Source/SwipeCollectionViewCell.swift; sourceTree = ""; }; - 8FECDBE39D9C91B48FB64208F9DE1A9F /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = Firebase/Core/Public/FIRApp.h; sourceTree = ""; }; - 9007201FAAB29A329608A7205E93E317 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; - 904E99BDDF757CBF3A23B4BEA0139C5B /* ElementPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementPath.swift; path = Sources/ElementPath.swift; sourceTree = ""; }; - 9067A29740884A4F372A2C82437AAE50 /* ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist"; sourceTree = ""; }; - 906A2E3A85529204C6DD8CD0880CD33E /* FLEX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLEX.xcconfig; sourceTree = ""; }; - 911E9503B0B27F20A254582755AE6F05 /* FLEXGlobalsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsTableViewController.m; path = Classes/GlobalStateExplorers/FLEXGlobalsTableViewController.m; sourceTree = ""; }; - 9182FAC44120C95821B2A90C2A38BF9E /* keychain_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = keychain_helper.cpp; path = Realm/ObjectStore/src/impl/apple/keychain_helper.cpp; sourceTree = ""; }; - 918AA79F408516E9CBC3EB2BF1C2D2EF /* RLMRealm+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealm+Sync.h"; path = "include/RLMRealm+Sync.h"; sourceTree = ""; }; - 91CC5127C3460D3FFE572F5FEF65FDA8 /* OAuthSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OAuthSwift.xcconfig; sourceTree = ""; }; - 9245C86C37ED898BB7ADF27826C44AB1 /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 92A55A5AD77CAE98BFFDA1B0F46D78BE /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = ""; }; - 92BB7D3EDDCEBE6DD3FA5F8CF77CA478 /* GULNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetwork.h; path = GoogleUtilities/Network/Private/GULNetwork.h; sourceTree = ""; }; - 92D69B83D7891B46071F3526C887D4BA /* FLEXDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h; sourceTree = ""; }; - 92EEF2BCE4F1E39DF6D6C38FED6593DD /* OAuthSwiftResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftResponse.swift; path = Sources/OAuthSwiftResponse.swift; sourceTree = ""; }; - 9319971B69A41A780F031EBF2D11295F /* RocketChatViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RocketChatViewController.xcconfig; sourceTree = ""; }; - 93B52102E1E20AE9D9262AD89A22359A /* UIImage+CocoaPods.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+CocoaPods.swift"; path = "MobilePlayer/Extensions/UIImage+CocoaPods.swift"; sourceTree = ""; }; - 93B888C8657DA23C1C1B3F68594B4E21 /* Pods-Rocket.ChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.debug.xcconfig"; sourceTree = ""; }; - 9481591ECAC4AA58CAEABAC0D861F257 /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = ImageViewer/Utilities.swift; sourceTree = ""; }; - 94CE0EF4031DF16493DBE8607001E0F3 /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = ""; }; - 954304773D6919A564C71692A564BC90 /* FLEXManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXManager.m; path = Classes/Manager/FLEXManager.m; sourceTree = ""; }; - 954576F150CB7988A3EEE2A7C2D363C4 /* RLMSyncPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncPermission.h; path = include/RLMSyncPermission.h; sourceTree = ""; }; - 95915708D93AEB94CCCAD96405132D89 /* SwipeActionsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActionsView.swift; path = Source/SwipeActionsView.swift; sourceTree = ""; }; - 9594D9DDF1CB6DBA34A18E1483172857 /* FLEXFieldEditorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorView.m; path = Classes/Editing/FLEXFieldEditorView.m; sourceTree = ""; }; - 962D64A210234D1F131A37BA50462ED1 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = Firebase/Core/Private/FIRAppAssociationRegistration.h; sourceTree = ""; }; - 9635A914BA16BE425CF7A9FE90C4A08F /* ReachabilitySwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReachabilitySwift-dummy.m"; sourceTree = ""; }; - 96527EA33E2E7E3701AF76147A88EFA9 /* FLEXRealmDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDefines.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDefines.h; sourceTree = ""; }; - 967D0A831C720A0B066899EDB2F69A55 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; - 969D0486120BAE5D88D3D4DD70CB0522 /* FLEXNetworkSettingsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkSettingsTableViewController.m; path = Classes/Network/FLEXNetworkSettingsTableViewController.m; sourceTree = ""; }; - 96C4B139AE5D41F6AD9C1B27401E4D33 /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 979D08C64AD5FB4A34654B541C3281A5 /* FLEXSQLiteDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSQLiteDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m; sourceTree = ""; }; - 98B804357BDFCD50C234C231A89F1680 /* FLEXNetworkSettingsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkSettingsTableViewController.h; path = Classes/Network/FLEXNetworkSettingsTableViewController.h; sourceTree = ""; }; - 98EF7922584BE97377DF9E9DDD731A03 /* OAuthSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = OAuthSwift.modulemap; sourceTree = ""; }; - 993E532729116D48F88493D73FE79E19 /* RCMarkdownParser-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RCMarkdownParser-Info.plist"; sourceTree = ""; }; - 999CED0ADD0E00299A347C4B0018B4A6 /* RLMSyncUtil_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil_Private.h; path = include/RLMSyncUtil_Private.h; sourceTree = ""; }; - 99B9CB016D6BB90EA7B9B4333DE03E52 /* DifferenceKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DifferenceKit.modulemap; sourceTree = ""; }; - 9A1391252771BE32FDDD1B84A61A6BF8 /* RLMRealmConfiguration+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealmConfiguration+Sync.mm"; path = "Realm/RLMRealmConfiguration+Sync.mm"; sourceTree = ""; }; - 9A2548DEB969DB63DFBCAF8832B91DB9 /* FLEXTableContentCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableContentCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.m; sourceTree = ""; }; - 9A25AFAFF9FA4E67E46CED6B319A00FE /* DifferenceKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DifferenceKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9A8E3394E6D1D992A9137E31CAB07918 /* FLEXArgumentInputColorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputColorView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h; sourceTree = ""; }; - 9AC71010277BB1E505EB29DBB340CB83 /* Firebase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.xcconfig; sourceTree = ""; }; - 9B70303A6DD06F792924CB14C9DCBC3A /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; - 9B8C6D0A6CDFE78076B58E7417DEDCB1 /* RocketChatViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RocketChatViewController.modulemap; sourceTree = ""; }; - 9CE3778197A1EA95A81765F97EA31A90 /* FLEXMethodCallingViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMethodCallingViewController.h; path = Classes/Editing/FLEXMethodCallingViewController.h; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E65B6A242085971678624E3A9370E56 /* ImagePreheater.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePreheater.swift; path = Sources/ImagePreheater.swift; sourceTree = ""; }; - 9EC0A7E9E176A9FFFD6187F877345152 /* FLEXImagePreviewViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImagePreviewViewController.h; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.h; sourceTree = ""; }; - 9ECC9230D5406CEAB879B9B12B6C19B9 /* NSError+RLMSync.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+RLMSync.m"; path = "Realm/NSError+RLMSync.m"; sourceTree = ""; }; - 9EFB3041D0BB75BA64CD495A11C2BA35 /* FLEXRealmDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRealmDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m; sourceTree = ""; }; - 9F2ADDAFACB44CE5B2065B37389A796E /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; - 9F40DFBE767AA8B8E80170E89B264D5F /* GULReachabilityMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityMessageCode.h; path = GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h; sourceTree = ""; }; - 9F56B686F064CB79FA878F59FD921E8C /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; - 9F7AD9D288D9A823297D4151AEDC5989 /* SwipeTableViewCellDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeTableViewCellDelegate.swift; path = Source/SwipeTableViewCellDelegate.swift; sourceTree = ""; }; - 9F7B9EDF0A2A78703CBFE722D1C53E88 /* cancel_audio_record.m4a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = cancel_audio_record.m4a; path = Composer/Sounds/cancel_audio_record.m4a; sourceTree = ""; }; - 9F88F09779E5F38396054DC308D93DD3 /* FLEXManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXManager.h; path = Classes/FLEXManager.h; sourceTree = ""; }; - 9FC5AEAE09E133FE94E45F98F36F2E29 /* FLEXDefaultEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultEditorViewController.h; path = Classes/Editing/FLEXDefaultEditorViewController.h; sourceTree = ""; }; - A081DC0431FC5C674DBF72BCB53BE020 /* SwipeCellKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwipeCellKit-prefix.pch"; sourceTree = ""; }; - A0D9BEB8C0448D3D332BFEB35A1786A2 /* RealmConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmConfiguration.swift; path = RealmSwift/RealmConfiguration.swift; sourceTree = ""; }; - A12FB7830D00F6A87A3794AD67963296 /* list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list.cpp; path = Realm/ObjectStore/src/list.cpp; sourceTree = ""; }; - A1A1C086EE9337CD50981DE8B28B4A5F /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = ""; }; - A1CCFBCC8EA2F6EF486A6BCB62049612 /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; - A2C41E1E9EE56698C3DD8D94E53B2C06 /* sync_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_config.cpp; path = Realm/ObjectStore/src/sync/sync_config.cpp; sourceTree = ""; }; - A2C49B4C3C90BF494A04763D16971A9F /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A2C82064BB9E953E95908FBFBE1FA282 /* FLEXMultilineTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultilineTableViewCell.h; path = Classes/Utility/FLEXMultilineTableViewCell.h; sourceTree = ""; }; - A2C857D5300CA57C9A0FCF10F917787F /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = RealmSwift/Object.swift; sourceTree = ""; }; - A343C28225F692A6D5807B549B20F941 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - A3D4BE9ECC9BDF3F96D0766314D06716 /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_decode.c; sourceTree = ""; }; - A42B95A1B36420D6DDF302C135B27C0B /* FLEXSetExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSetExplorerViewController.h; path = Classes/ObjectExplorers/FLEXSetExplorerViewController.h; sourceTree = ""; }; - A49BD0D1A80430606A9CDF4945B97E80 /* ReachabilitySwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ReachabilitySwift-Info.plist"; sourceTree = ""; }; - A4B4FDB3CEB11940EE828F1B9D4E6A0E /* FLEXArgumentInputNumberView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNumberView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h; sourceTree = ""; }; - A516366709C5FBFDFFB4CF4E0603CBAD /* MLIncreaseVolume.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLIncreaseVolume.png; path = MobilePlayer/Resources/MLIncreaseVolume.png; sourceTree = ""; }; - A59F6900FC05330C26A6D2A15784F3C1 /* OnePasswordExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OnePasswordExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A6AE2E6CC152954E232ADCF3DE699F68 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = fr.lproj; path = Composer/Assets/fr.lproj; sourceTree = ""; }; - A6D5F5F705506738A442BBC4957B5C78 /* MLCloseButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLCloseButton.png; path = MobilePlayer/Resources/MLCloseButton.png; sourceTree = ""; }; - A6DE520CFF5ADFE8750DC6435E2FD1A7 /* String+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+OAuthSwift.swift"; path = "Sources/String+OAuthSwift.swift"; sourceTree = ""; }; - A6F12113E5BA6BBA7C3A1BFEE018FBB8 /* DifferenceKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DifferenceKit-Info.plist"; sourceTree = ""; }; - A75430E7674311E9F95DE2D3328128D1 /* TextHintCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextHintCell.swift; path = Composer/Classes/Addons/Hints/TextHintCell.swift; sourceTree = ""; }; - A8463B94FE9DE106ECDC0AACCCC37B8B /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = Firebase/Core/Private/FIRLogger.h; sourceTree = ""; }; - A86E7496C36DFCA4BEF9A936343AEBCE /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RealmSwift/Error.swift; sourceTree = ""; }; - A919D5933078E73098BB79939BD03A50 /* RLMRealmConfiguration+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealmConfiguration+Sync.h"; path = "include/RLMRealmConfiguration+Sync.h"; sourceTree = ""; }; - A97A6A7888761B1D76B91170AF650444 /* Pods-Rocket.ChatTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Rocket.ChatTests-dummy.m"; sourceTree = ""; }; - A9E643C8FD24AA722EA3BBD7556AF31D /* MLVolumeButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLVolumeButton.png; path = MobilePlayer/Resources/MLVolumeButton.png; sourceTree = ""; }; - AA3AE7B25413CCD83F80029463021C04 /* RLMSyncCredentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncCredentials.h; path = include/RLMSyncCredentials.h; sourceTree = ""; }; - AA7295DE7C56010AF51B3BA29417D50B /* UIColor+Hex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Hex.swift"; path = "MobilePlayer/Extensions/UIColor+Hex.swift"; sourceTree = ""; }; - AA81613DE1471C0B617C6B56D3CC7D53 /* uuid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = uuid.cpp; path = Realm/ObjectStore/src/util/uuid.cpp; sourceTree = ""; }; - AB43F2A2F95CAF6284BBDC7FAD11AE0A /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = Firebase/Core/FIRConfiguration.m; sourceTree = ""; }; - AB4583124EB9ED0806D51E02CCB6C78B /* SimpleImageViewer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SimpleImageViewer-dummy.m"; sourceTree = ""; }; - AB48A256934CC71FD42C7BF71C4C7615 /* SwipeTableViewCell+Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeTableViewCell+Accessibility.swift"; path = "Source/SwipeTableViewCell+Accessibility.swift"; sourceTree = ""; }; - AC6EB4D9AA75E476CE3473079FDD8285 /* Realm-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Realm-Info.plist"; sourceTree = ""; }; - AE56B243F7D71695C1B497CD058778EF /* SwipeCellKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwipeCellKit-Info.plist"; sourceTree = ""; }; - AE71D8D4CFC80899EE3A1C22ADEFB43B /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; - AE77B99D5D5FC3B12AD8117349B7D33F /* object_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_notifier.cpp; path = Realm/ObjectStore/src/impl/object_notifier.cpp; sourceTree = ""; }; - AEC0DEF098D6FB99DD668E05E5E200A9 /* MobilePlayer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MobilePlayer-Info.plist"; sourceTree = ""; }; - AFD638193B9A813DE1CE641018D7896A /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; - B0434F59D3B013B5E7783FDEBCB31426 /* SwipeFeedback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeFeedback.swift; path = Source/SwipeFeedback.swift; sourceTree = ""; }; - B0DA500E4E163BC614C9692435D31BE0 /* Element.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Element.swift; path = MobilePlayer/Views/Element.swift; sourceTree = ""; }; - B1DA28C1426491DC2DC048847150DA9D /* ObjectiveCSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectiveCSupport.swift; path = RealmSwift/ObjectiveCSupport.swift; sourceTree = ""; }; - B1E2F0525F8BA55DA747C6DCBE6AD265 /* transact_log_handler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = transact_log_handler.cpp; path = Realm/ObjectStore/src/impl/transact_log_handler.cpp; sourceTree = ""; }; - B2054806D5B8F9F2A8778543E4B64ECC /* VolumeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VolumeView.swift; path = MobilePlayer/Views/VolumeView.swift; sourceTree = ""; }; - B22EB28C8530725AAF2B6E74CAA4EC53 /* FLEXGlobalsTableViewControllerEntry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsTableViewControllerEntry.h; path = Classes/ObjectExplorers/FLEXGlobalsTableViewControllerEntry.h; sourceTree = ""; }; - B287CF5D59754FB3CD491AD495BDAE1F /* OAuthSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "OAuthSwift-Info.plist"; sourceTree = ""; }; - B2B8750AF8513ADF98B1BFC1F2A85C86 /* GoogleAppMeasurement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAppMeasurement.framework; path = Frameworks/GoogleAppMeasurement.framework; sourceTree = ""; }; - B331FCCD23D55EC94BBB3F4D639AD704 /* MLPlayButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPlayButton@2x.png"; path = "MobilePlayer/Resources/MLPlayButton@2x.png"; sourceTree = ""; }; - B3457F4D0C7059CC4FC0745E548FE151 /* RCMarkdownParser-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RCMarkdownParser-umbrella.h"; sourceTree = ""; }; - B368B6CFAECA096883CE6162F9F86AEF /* RLMJSONModels.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMJSONModels.m; path = Realm/RLMJSONModels.m; sourceTree = ""; }; - B37B4AE6C01361C7F29925C497DCCF28 /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Starscream/Compression.swift; sourceTree = ""; }; - B41C985CEEE62DB1ACB176852C0FC81F /* FLEX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-prefix.pch"; sourceTree = ""; }; - B4E211CF1C23F56B6EB7E4C81ABB7D2E /* DifferenceKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DifferenceKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B55CA127D07E4BC47582B67874595FFC /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; - B5B6AF0A97A7770C7C515F7EE5CE5807 /* RLMSyncUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil.h; path = include/RLMSyncUtil.h; sourceTree = ""; }; - B61B8781AA8BD87BEA9DD6EC6393FCB0 /* SwiftLint.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.xcconfig; sourceTree = ""; }; - B64196BFCA6777D886807D9B44A832BC /* FIRCoreConfigurable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreConfigurable.h; path = Firebase/Core/Private/FIRCoreConfigurable.h; sourceTree = ""; }; - B69B83BDD3B35F420C854EA89935B71A /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - B6CDABEF8661834BC659A48FEF8A10FD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - B6DDD21F074DFD96EB8ABAB263DB4E6C /* RCMarkdownParser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RCMarkdownParser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6DFB167AD792BBD9286517AAF00F507 /* RealmSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-umbrella.h"; sourceTree = ""; }; - B755BDB9283DE6874D3905351DEAC69A /* RCBaseParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RCBaseParser.swift; path = Pod/Classes/RCBaseParser.swift; sourceTree = ""; }; - B75D954F3A0190270EB44DCE3028AEF1 /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = ""; }; - B785F0699D7A2B3DC184A88B0217F9CE /* RocketChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RocketChatViewController.swift; path = RocketChatViewController/Classes/RocketChatViewController.swift; sourceTree = ""; }; - B7A7499536D94FFE98E8D15071CC2D28 /* MobilePlayerOverlayViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerOverlayViewController.swift; path = MobilePlayer/MobilePlayerOverlayViewController.swift; sourceTree = ""; }; - B7E955FA2C1937887C91DA7C8BB380EC /* ImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageView.swift; path = Sources/ImageView.swift; sourceTree = ""; }; - B83D9F83C0DE51AD32D04844B2A1A908 /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; }; - B845D4D251CCDDF953CA7EFB274FA084 /* Fabric.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.xcconfig; sourceTree = ""; }; - B88B354E1CEBD934B5D065EA09102030 /* FLEXArgumentInputTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputTextView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.h; sourceTree = ""; }; - B8B18C22880C9BE78CDE9E4625A54F56 /* Pods-Rocket.Chat.ShareExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Rocket.Chat.ShareExtension-dummy.m"; sourceTree = ""; }; - B8C21A11A4EE68B34A8CEFCDA3C6C64B /* RLMPredicateUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMPredicateUtil.mm; path = Realm/RLMPredicateUtil.mm; sourceTree = ""; }; - B954B665FCCCF2A2EB8073591EFEE4DC /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = Firebase/Core/Private/FIRComponent.h; sourceTree = ""; }; - B993FF31D0C199E9E659E2F904A107EF /* SwiftVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftVersion.swift; path = RealmSwift/SwiftVersion.swift; sourceTree = ""; }; - B9A2A2EC617C89894A5250173542C923 /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_encode.c; sourceTree = ""; }; - BA1D313D02933D3BBD268BD132C5A04D /* object_schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_schema.cpp; path = Realm/ObjectStore/src/object_schema.cpp; sourceTree = ""; }; - BA4D9BE43C93682F960C151DCC94978B /* pt-BR.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "pt-BR.lproj"; path = "Composer/Assets/pt-BR.lproj"; sourceTree = ""; }; - BB1861C9CC2F4C922A89A662E161CD58 /* GULAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppEnvironmentUtil.m; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m; sourceTree = ""; }; - BC1DF49FB633EBDE1F0F4CEF04221846 /* SSLClientCertificate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLClientCertificate.swift; path = Sources/Starscream/SSLClientCertificate.swift; sourceTree = ""; }; - BC672B1A13049DA8F08990F9C75B282C /* Realm-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Realm-dummy.m"; sourceTree = ""; }; - BC6C6B5559B2B1F8F9340A0738891986 /* SwipeController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeController.swift; path = Source/SwipeController.swift; sourceTree = ""; }; - BCA620EAC2C424330BBBF790E43ED40A /* ComposerAddonStackView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerAddonStackView.swift; path = Composer/Classes/Views/ComposerAddonStackView.swift; sourceTree = ""; }; - BD4E945F8F0FC73F820DE02A1A449C60 /* FLEXArgumentInputStructView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStructView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m; sourceTree = ""; }; - BD507380753C41FA2AE5EA9C5D47557B /* ToggleButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToggleButton.swift; path = MobilePlayer/Views/ToggleButton.swift; sourceTree = ""; }; - BD5D5E68F49E1AC3FDA314A5179175B1 /* Nuke-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nuke-Info.plist"; sourceTree = ""; }; - BDE87492ECEE718DCF81E4278E79D8B2 /* Semver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Semver.swift; path = SemverSwift/Semver.swift; sourceTree = ""; }; - BE10F135A2E072105BA9A4E246DE7A83 /* GULNetworkURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkURLSession.h; path = GoogleUtilities/Network/Private/GULNetworkURLSession.h; sourceTree = ""; }; - BE1135C4D86EED32F1395B6190A04D9C /* RLMNetworkClient.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMNetworkClient.mm; path = Realm/RLMNetworkClient.mm; sourceTree = ""; }; - BE5441D0EBC0ABAEEB13B1E7A309A0CE /* ContentEquatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContentEquatable.swift; path = Sources/ContentEquatable.swift; sourceTree = ""; }; - BE64886F86F0117BC5EA565A6D52F486 /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = Firebase/Core/Public/FIRLoggerLevel.h; sourceTree = ""; }; - C003348FAFB6601A1E30EC32B1BA44A5 /* shared_realm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = shared_realm.cpp; path = Realm/ObjectStore/src/shared_realm.cpp; sourceTree = ""; }; - C08B19FF09433B06BFF088D559F6DED6 /* NSError+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSError+OAuthSwift.swift"; path = "Sources/NSError+OAuthSwift.swift"; sourceTree = ""; }; - C0E2C5056CB2B0CE3AD4F2E3DCF335F7 /* Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sync.swift; path = RealmSwift/Sync.swift; sourceTree = ""; }; - C18756FE4FACD12129EA4E0285D54800 /* FLEXHierarchyTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewCell.m; path = Classes/ViewHierarchy/FLEXHierarchyTableViewCell.m; sourceTree = ""; }; - C328D9E1DB954DB7AFCF5FA5FA87F534 /* DifferentiableSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DifferentiableSection.swift; path = Sources/DifferentiableSection.swift; sourceTree = ""; }; - C3A69AF514D140C715C44E2515DEDA74 /* RLMClassInfo.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMClassInfo.mm; path = Realm/RLMClassInfo.mm; sourceTree = ""; }; - C3E845091CA57B0CB60C92F840E7CEA0 /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_common.c; sourceTree = ""; }; - C3F649B08D51C5A8841000F835AAF0C8 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/ImageCache.swift; sourceTree = ""; }; - C53D5F85612E6A569A757F8D0B3E8322 /* Aliases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Aliases.swift; path = RealmSwift/Aliases.swift; sourceTree = ""; }; - C558C007B66AB9ECC3B7A6415710C133 /* work_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = work_queue.cpp; path = Realm/ObjectStore/src/sync/impl/work_queue.cpp; sourceTree = ""; }; - C589B0D2026585B4BA49C237246F4471 /* FLEXDefaultsExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultsExplorerViewController.h; path = Classes/ObjectExplorers/FLEXDefaultsExplorerViewController.h; sourceTree = ""; }; - C6516AC8C64BE4DAC4BC8F3C35B98755 /* MLPlayButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPlayButton@3x.png"; path = "MobilePlayer/Resources/MLPlayButton@3x.png"; sourceTree = ""; }; - C67F527A8C73E899AE7E94094F15C205 /* RLMObservation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObservation.mm; path = Realm/RLMObservation.mm; sourceTree = ""; }; - C6AFD0E7403492EE7A0FA6F5B8637C1D /* RLMRealm_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Dynamic.h; path = include/RLMRealm_Dynamic.h; sourceTree = ""; }; - C6D76D762253123EAB82963E31C13545 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; - C7B591117F4C4104D012A4B3D2FE8F18 /* WatermarkViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WatermarkViewController.swift; path = MobilePlayer/WatermarkViewController.swift; sourceTree = ""; }; - C7C3DAAF10A23CAB5C70F5C5C6E671FC /* OAuthSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OAuthSwift-umbrella.h"; sourceTree = ""; }; - C854AD920C06992A6369B47A6B64CE40 /* LabelConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LabelConfig.swift; path = MobilePlayer/Config/LabelConfig.swift; sourceTree = ""; }; - C92DEF3E8ABB7DF152D1B5BFF96FFDB7 /* schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = schema.cpp; path = Realm/ObjectStore/src/schema.cpp; sourceTree = ""; }; - C99E751F9C08DBD17D36B4189E98C16C /* FLEXUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXUtility.h; path = Classes/Utility/FLEXUtility.h; sourceTree = ""; }; - CA1D9594A6175E340D202D4B7A2C4324 /* FLEXTableContentViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableContentViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h; sourceTree = ""; }; - CA540CA0E2F509CC4477BA837BEFE670 /* RLMThreadSafeReference.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMThreadSafeReference.mm; path = Realm/RLMThreadSafeReference.mm; sourceTree = ""; }; - CA5A3BAFCF86A0C65F805637E4FAD714 /* GULLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerLevel.h; path = GoogleUtilities/Logger/Public/GULLoggerLevel.h; sourceTree = ""; }; - CB46F77649A0F46C637AB35A568D6246 /* Tap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tap.swift; path = Composer/Classes/Library/Tap.swift; sourceTree = ""; }; - CB82B66C6129554C4773028C16C1CC2E /* 1PasswordExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "1PasswordExtension-Info.plist"; sourceTree = ""; }; - CBC26272DCD409CC0C76EBDCAA87D89F /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = ja.lproj; path = Composer/Assets/ja.lproj; sourceTree = ""; }; - CBEAD04A0E5F31AA86927502F8508ABB /* GULNetworkConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkConstants.m; path = GoogleUtilities/Network/GULNetworkConstants.m; sourceTree = ""; }; - CD40E9931BA5F2A80E665FCAD01A1C28 /* FLEXObjectExplorerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerFactory.m; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.m; sourceTree = ""; }; - CD4B523285C49D4C766B4E3FD2AB1CF8 /* Realm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Realm.swift; path = RealmSwift/Realm.swift; sourceTree = ""; }; - CD55EE56952130E7CD6E2CDB35DFB28F /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = Firebase/Core/Public/FirebaseCore.h; sourceTree = ""; }; - CDBEA0C4DE528B0C657790627DD770D3 /* ComposerButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerButton.swift; path = Composer/Classes/Views/ComposerButton.swift; sourceTree = ""; }; - CDCAB46B83CC4C6F7B11BE44B0EF8E81 /* RLMConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMConstants.h; path = include/RLMConstants.h; sourceTree = ""; }; - CDE9FDDC31ACF0E28A520DB9DC4B15DF /* FLEXPropertyEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXPropertyEditorViewController.m; path = Classes/Editing/FLEXPropertyEditorViewController.m; sourceTree = ""; }; - CDFE33444AB890450A20EB926C016E16 /* collection_notifications.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifications.cpp; path = Realm/ObjectStore/src/collection_notifications.cpp; sourceTree = ""; }; - CE58935F7D9E7C45CA46919D53056771 /* FLEXFieldEditorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorView.h; path = Classes/Editing/FLEXFieldEditorView.h; sourceTree = ""; }; - CF3DD329272E326F5386346860ADA6D7 /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Source/Extensions.swift; sourceTree = ""; }; - CF8F8D59756E1568CF32142641B3D7EF /* GULNetworkLoggerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkLoggerProtocol.h; path = GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h; sourceTree = ""; }; - D0057AC29575011F57CFC8BAE8651B40 /* FLEXSystemLogTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogTableViewController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.m; sourceTree = ""; }; - D015CE8582CD86E9AA8D23D0B0615826 /* Algorithm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Algorithm.swift; path = Sources/Algorithm.swift; sourceTree = ""; }; - D0490E939A523972B86AB852ADCED49A /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = es.lproj; path = Composer/Assets/es.lproj; sourceTree = ""; }; - D04E47013B463E602EFA26C46E4204D9 /* OnePasswordExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = OnePasswordExtension.m; sourceTree = ""; }; - D07605BDC898A283EEAC96300AB07D4E /* OAuthSwiftCredential.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftCredential.swift; path = Sources/OAuthSwiftCredential.swift; sourceTree = ""; }; - D0C94EB5F0B5BA118E9C92227C286477 /* MLShareButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLShareButton@3x.png"; path = "MobilePlayer/Resources/MLShareButton@3x.png"; sourceTree = ""; }; - D0E4AD423C2152EC1663E2DE0773B3C8 /* Pods-Rocket.Chat.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.test.xcconfig"; sourceTree = ""; }; - D1219D2694F00090D842BFE5F9ECAA96 /* FLEXHierarchyTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewController.m; path = Classes/ViewHierarchy/FLEXHierarchyTableViewController.m; sourceTree = ""; }; - D12C82EBD7C08A6268E6338FDF6A9059 /* MLPauseButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPauseButton@2x.png"; path = "MobilePlayer/Resources/MLPauseButton@2x.png"; sourceTree = ""; }; - D19A3732188476D43EA3B1C4DB8847B4 /* FLEXObjectExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerViewController.m; path = Classes/ObjectExplorers/FLEXObjectExplorerViewController.m; sourceTree = ""; }; - D1E738887A33182BC884F513BF42B52C /* el.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = el.lproj; path = Composer/Assets/el.lproj; sourceTree = ""; }; - D220F1566C7C5287809686B752732CD0 /* URL+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+OAuthSwift.swift"; path = "Sources/URL+OAuthSwift.swift"; sourceTree = ""; }; - D24B53DEEB80CB83A38DC85B98542278 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - D369BD2876EA0E176D2C2CDFB13265FC /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = Firebase/Core/FIRErrors.m; sourceTree = ""; }; - D3CEBE0233D28136D2A04E0C03E70D4A /* FLEXNetworkObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkObserver.m; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.m; sourceTree = ""; }; - D47FA9B9846304CAC6CEC9E2F448F6E0 /* Pods-Rocket.Chat.ShareExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.Chat.ShareExtension-Info.plist"; sourceTree = ""; }; - D4A24816DB030E5F44CF4B64BD62AB56 /* FLAnimatedImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLAnimatedImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D4CD4156A4D93128A73BF9AE09B2FADE /* GULNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULNSData+zlib.h"; path = "GoogleUtilities/NSData+zlib/GULNSData+zlib.h"; sourceTree = ""; }; - D4DC8419C707CB7A58B1A4C8BD9EE8DE /* Bar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bar.swift; path = MobilePlayer/Views/Bar.swift; sourceTree = ""; }; - D572D90EB8C63BC18CFCE49E897F214D /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = Firebase/Core/Public/FIROptions.h; sourceTree = ""; }; - D574BF8AB83F209202F1E6CA06EA1EBD /* FLEXWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWebViewController.h; path = Classes/GlobalStateExplorers/FLEXWebViewController.h; sourceTree = ""; }; - D5E6BF186195C4DE9D824C0FA57EEDCA /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = Firebase/Core/FIRVersion.m; sourceTree = ""; }; - D686087ADD0B13E830F36F5837F796CD /* FLEXWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWindow.h; path = Classes/ExplorerInterface/FLEXWindow.h; sourceTree = ""; }; - D6E4006484BA11C72639E2E375110299 /* FLAnimatedImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FLAnimatedImage.modulemap; sourceTree = ""; }; - D71B18A1A09C86F3590800BD6D6CE5AD /* nanopb.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.xcconfig; sourceTree = ""; }; - D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - D7E5AE0D8500C740649AE1D5DFC55C70 /* 1Password.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = 1Password.xcassets; sourceTree = ""; }; - D8BA413DF6667899004295B0A97FFE6F /* semver.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = semver.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D91FB20BD3B0774A3BCDB4EB719B9201 /* Nuke-FLAnimatedImage-Plugin.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Nuke-FLAnimatedImage-Plugin.modulemap"; sourceTree = ""; }; - D96912A8D45377B0A76C2D2640926BFA /* FirebaseAnalytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAnalytics.xcconfig; sourceTree = ""; }; - D9E54A94B1291E4EDBA9DE36947B9A54 /* ImageViewerController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = ImageViewerController.xib; path = ImageViewer/Resources/ImageViewerController.xib; sourceTree = ""; }; - DB5AF741E160861E85CBDCB39E2AED0C /* thread_safe_reference.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = thread_safe_reference.cpp; path = Realm/ObjectStore/src/thread_safe_reference.cpp; sourceTree = ""; }; - DCF41E73D8E7A5ED6B54CE6D92557A6C /* FLEXSystemLogTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogTableViewCell.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.m; sourceTree = ""; }; - DF061855E7FC8F3E056AF04F8C69122C /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; - DFA0392A3B76A31ED0442975B758801B /* Realm.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Realm.modulemap; sourceTree = ""; }; - DFA13EF1EE21432BC8A7B0EBEB5C67D9 /* GULSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSwizzler.m; path = GoogleUtilities/MethodSwizzler/GULSwizzler.m; sourceTree = ""; }; - DFE775114A466C1F5293DD6EB2BED202 /* object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object.cpp; path = Realm/ObjectStore/src/object.cpp; sourceTree = ""; }; - DFF0482A0A936E414A1C081B1B7261C3 /* Dictionary+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Dictionary+OAuthSwift.swift"; path = "Sources/Dictionary+OAuthSwift.swift"; sourceTree = ""; }; - E12C74EE66E7DCC72D317C2C56300D33 /* GoogleUtilities-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleUtilities-dummy.m"; sourceTree = ""; }; - E163D1A1E138AA1F6DBD37E1600EABA2 /* ReplyView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplyView.swift; path = Composer/Classes/Addons/Reply/ReplyView.swift; sourceTree = ""; }; - E1D9156B52F527B2FCBF2D783DE5E94E /* GULLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLogger.h; path = GoogleUtilities/Logger/Private/GULLogger.h; sourceTree = ""; }; - E201DA3DC06651D6EDE2A8CC6114F974 /* FLEXFileBrowserTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserTableViewController.h; path = Classes/GlobalStateExplorers/FLEXFileBrowserTableViewController.h; sourceTree = ""; }; - E21468C093AED1C2F83AE34C04A643CB /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = Sources/Utils.swift; sourceTree = ""; }; - E2892F69325FF4818F125392E0408266 /* RLMObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectStore.h; path = include/RLMObjectStore.h; sourceTree = ""; }; - E291CCEFE708EBCB77BDC54FFFF013B6 /* SSLSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLSecurity.swift; path = Sources/Starscream/SSLSecurity.swift; sourceTree = ""; }; - E2C17357D7810B44C7A6B0098377F0D7 /* HMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HMAC.swift; path = Sources/HMAC.swift; sourceTree = ""; }; - E2CBEAF8B7CC922BBB62D3998F5BF8E2 /* AnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImage.swift; path = Source/AnimatedImage.swift; sourceTree = ""; }; - E3125C7DF70278930391E54959ADC1CE /* FLEXClassExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassExplorerViewController.m; path = Classes/ObjectExplorers/FLEXClassExplorerViewController.m; sourceTree = ""; }; - E32205BDE1924486B4B64CB6643A662A /* RLMUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUtil.mm; path = Realm/RLMUtil.mm; sourceTree = ""; }; - E33C8CFCE27A0CEE1768090569F5E0CE /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseCoreDiagnostics.framework; path = Frameworks/FirebaseCoreDiagnostics.framework; sourceTree = ""; }; - E33F13F7DB64EE32E632922628F6DD93 /* FLEXTableLeftCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableLeftCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.h; sourceTree = ""; }; - E34074D5400DFC7C86ECC22684958AA7 /* FirebaseInstanceID.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstanceID.xcconfig; sourceTree = ""; }; - E358F7841C07D325480255669E11A042 /* RLMRealmConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration_Private.h; path = include/RLMRealmConfiguration_Private.h; sourceTree = ""; }; - E3E69BBCDFA65E7C84026E22497D2B8F /* GoogleUtilities-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-prefix.pch"; sourceTree = ""; }; - E3F9A059FEEA91EBCC0B8BF34003BF7E /* ReachabilitySwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReachabilitySwift.modulemap; sourceTree = ""; }; - E4B95667407F6A5687B61C310AD5034E /* RLMSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema.h; path = include/RLMSchema.h; sourceTree = ""; }; - E4B99FF077D34AF1B589425FFCBB924E /* Pods-Rocket.Chat.ShareExtension-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.Chat.ShareExtension-acknowledgements.plist"; sourceTree = ""; }; - E4D7C32250CA05AF68ABA66BE197CE8A /* ru.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = ru.lproj; path = Composer/Assets/ru.lproj; sourceTree = ""; }; - E56093D5BD860A799A5DBA40E8EF830D /* FLEXViewExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewExplorerViewController.h; path = Classes/ObjectExplorers/FLEXViewExplorerViewController.h; sourceTree = ""; }; - E5B12BB67F59DDF1ED66066D2E25EE48 /* FLEXFileBrowserFileOperationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserFileOperationController.h; path = Classes/GlobalStateExplorers/FLEXFileBrowserFileOperationController.h; sourceTree = ""; }; - E5D9EE3A5B918EF1E59437A9D810190C /* SwipeCellKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwipeCellKit.modulemap; sourceTree = ""; }; - E5F633DEA551B8E964C5699C4FEA170D /* MLPlayButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLPlayButton.png; path = MobilePlayer/Resources/MLPlayButton.png; sourceTree = ""; }; - E665F9A6D848F147EE9D04FD73C092D4 /* MobilePlayer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MobilePlayer-prefix.pch"; sourceTree = ""; }; - E67CB29116FF4E829199751F2CE73E9B /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; - E68A13031EEB237F6F5BC09416E08C37 /* DifferenceKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DifferenceKit-dummy.m"; sourceTree = ""; }; - E68F02BA7C5F71230164F0C74DE1E142 /* RLMResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMResults.mm; path = Realm/RLMResults.mm; sourceTree = ""; }; - E69E3D818DC80F6D47335B112A8B592F /* ButtonConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonConfig.swift; path = MobilePlayer/Config/ButtonConfig.swift; sourceTree = ""; }; - E7D798ED30C9E698734E58256FBE923F /* ImageViewerTransitioningHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerTransitioningHandler.swift; path = ImageViewer/Transitions/ImageViewerTransitioningHandler.swift; sourceTree = ""; }; - E8863E5B7AD1EC8AA48ABA1C97E081BC /* ComposerViewExpandedDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerViewExpandedDelegate.swift; path = Composer/Classes/Delegate/ComposerViewExpandedDelegate.swift; sourceTree = ""; }; - E894CF72E1DE32F26F27AAF4E9D74203 /* OAuthSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OAuthSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E8B2709DAEF95AF1F994511C7FAF1CEB /* RLMThreadSafeReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMThreadSafeReference.h; path = include/RLMThreadSafeReference.h; sourceTree = ""; }; - E9B6CD519E3A3F6FDAC4FCA6FAB2E6AB /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/Internal.swift; sourceTree = ""; }; - E9C97572B8172FE994E76102534BBFC6 /* FLEXHeapEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHeapEnumerator.m; path = Classes/Utility/FLEXHeapEnumerator.m; sourceTree = ""; }; - EA693B1DD36B4704718D9482B3513C95 /* GULNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GULNSData+zlib.m"; path = "GoogleUtilities/NSData+zlib/GULNSData+zlib.m"; sourceTree = ""; }; - EA8239026C7BF50DBEACE511DAE2A23B /* FLEXArgumentInputJSONObjectView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputJSONObjectView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputJSONObjectView.m; sourceTree = ""; }; - EAAFA3BE6753F2B85D9C808445262B72 /* FLEXViewControllerExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewControllerExplorerViewController.m; path = Classes/ObjectExplorers/FLEXViewControllerExplorerViewController.m; sourceTree = ""; }; - EAB24BCF88EB03A8FB0AB9EB0285E8BD /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = Firebase/Core/Private/FIRDependency.h; sourceTree = ""; }; - EAB49EC4CFB4A7B10920B556F47ADAA0 /* FLEXTableListViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableListViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h; sourceTree = ""; }; - EBD99766A864FAB642165FD01C0E5C3F /* FLEXPropertyEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXPropertyEditorViewController.h; path = Classes/Editing/FLEXPropertyEditorViewController.h; sourceTree = ""; }; - EBDA01F79924E302E04EF88D52E00F81 /* realm_coordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = realm_coordinator.cpp; path = Realm/ObjectStore/src/impl/realm_coordinator.cpp; sourceTree = ""; }; - ED7368AC59AA79A20229B2DF561A20F1 /* NSError+RLMSync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+RLMSync.h"; path = "include/NSError+RLMSync.h"; sourceTree = ""; }; - EDF1B2963056E9CBB2B68C27E4C81B4A /* RealmSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RealmSwift-dummy.m"; sourceTree = ""; }; - EDF59DA5E950A1C0C9587C7A42E69D91 /* RLMArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMArray.mm; path = Realm/RLMArray.mm; sourceTree = ""; }; - EE22E97AEC611881905C329B3392A631 /* RLMSyncUser.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUser.mm; path = Realm/RLMSyncUser.mm; sourceTree = ""; }; - EEBAA91E7927BF103B02F06A163BF3D2 /* nanopb-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "nanopb-Info.plist"; sourceTree = ""; }; - EEE7AFB31FF8559653259C047D8CAC57 /* RLMRealm+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealm+Sync.mm"; path = "Realm/RLMRealm+Sync.mm"; sourceTree = ""; }; - EF230DB781EAEE83313A68ED6B03A557 /* RLMObjectBase_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Dynamic.h; path = include/RLMObjectBase_Dynamic.h; sourceTree = ""; }; - EF4F35CF41297CDCB6C12EA242D87EFB /* NotificationCenter+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NotificationCenter+OAuthSwift.swift"; path = "Sources/NotificationCenter+OAuthSwift.swift"; sourceTree = ""; }; - EF7F0035BB929D2CF9997197058BACCB /* FLEXNetworkTransactionTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionTableViewCell.m; path = Classes/Network/FLEXNetworkTransactionTableViewCell.m; sourceTree = ""; }; - EFA8DF5E3270583AB6DAC0905A5B8CAB /* MLReduceVolume@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLReduceVolume@3x.png"; path = "MobilePlayer/Resources/MLReduceVolume@3x.png"; sourceTree = ""; }; - EFB571DDB632EB661884AE40761D6973 /* FLAnimatedImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FLAnimatedImage-Info.plist"; sourceTree = ""; }; - EFC57E7EF073B1684688D140B5E9375A /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; - F01B30C46ABA9C8000B2361782F5CB70 /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = Firebase/Core/Public/FIRConfiguration.h; sourceTree = ""; }; - F02E4923AA8BA2A60B7102235BBBF041 /* RocketChatViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RocketChatViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F0714F2F2EFCA5F2AA64CB9F67191FDE /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = RealmSwift/Util.swift; sourceTree = ""; }; - F1D58E48FF695A59AFF50FC4BB4AC347 /* FLEXWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWebViewController.m; path = Classes/GlobalStateExplorers/FLEXWebViewController.m; sourceTree = ""; }; - F1E7F77D22CC61D5CB86EBC4C85E377E /* MLShareButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLShareButton@2x.png"; path = "MobilePlayer/Resources/MLShareButton@2x.png"; sourceTree = ""; }; - F201F4CA1B3B2608D04E327D3AFD5633 /* ComposerAssets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerAssets.swift; path = Composer/Classes/ComposerAssets.swift; sourceTree = ""; }; - F2FD6E18A828C531B5AAD4E62B93A994 /* SimpleImageViewer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SimpleImageViewer-umbrella.h"; sourceTree = ""; }; - F2FF7BAA87C1710846942EB13AAE58E0 /* RocketChatViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RocketChatViewController-prefix.pch"; sourceTree = ""; }; - F3676979D1F99F0914606E87754995F6 /* Pods-Rocket.ChatTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.release.xcconfig"; sourceTree = ""; }; - F3822E771329BEAE8F0F729998C4BCCF /* FLEXFieldEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorViewController.m; path = Classes/Editing/FLEXFieldEditorViewController.m; sourceTree = ""; }; - F42DC90BFF3DAEB06ECEE25E7E1B22AE /* FLEXExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerViewController.h; path = Classes/ExplorerInterface/FLEXExplorerViewController.h; sourceTree = ""; }; - F4838BF36B9A705547F8FCA3B111A0B3 /* FLEXArgumentInputDateView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputDateView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m; sourceTree = ""; }; - F4B6846DE806959FB9778575C6970304 /* FLEXNetworkCurlLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkCurlLogger.h; path = Classes/Network/FLEXNetworkCurlLogger.h; sourceTree = ""; }; - F50300C8AF4A3A0BE736C2E99C43B22F /* OverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OverlayView.swift; path = Composer/Classes/Overlays/OverlayView.swift; sourceTree = ""; }; - F508A762E4D7A8BBE17ABED654BF4A78 /* ImageViewerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerConfiguration.swift; path = ImageViewer/ImageViewerConfiguration.swift; sourceTree = ""; }; - F5A940A556BE07E18E8A2B7B870A3B00 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = Firebase/Core/FIRAnalyticsConfiguration.m; sourceTree = ""; }; - F64DB2B3B70A030DFF8DB2E7D8B9B713 /* ComposerViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerViewDelegate.swift; path = Composer/Classes/Delegate/ComposerViewDelegate.swift; sourceTree = ""; }; - F68093A764C4C49C1F1917336471BA7F /* DifferenceKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DifferenceKit-umbrella.h"; sourceTree = ""; }; - F6C933EDF50AF26763FB4801B6266848 /* ImageRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageRequest.swift; path = Sources/ImageRequest.swift; sourceTree = ""; }; - F745D69135D8C26AC9C8CE5505509D48 /* MobilePlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MobilePlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F7BDE4A972BDEB815EC4DB5C1ADF2CFD /* EditingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditingView.swift; path = Composer/Classes/Addons/Editing/EditingView.swift; sourceTree = ""; }; - F7D1A4638E1E37D616189125D16EF1CF /* FLEXArgumentInputTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputTextView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m; sourceTree = ""; }; - F7EFC30C843E7A45FEB1F4CEF89FA5E1 /* FLEXUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXUtility.m; path = Classes/Utility/FLEXUtility.m; sourceTree = ""; }; - F8665E59D3E588CF8565169CF753F276 /* OAuthSwiftHTTPRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftHTTPRequest.swift; path = Sources/OAuthSwiftHTTPRequest.swift; sourceTree = ""; }; - F87BF682A2DCED18405D2C1FAD73FABB /* Property.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Property.swift; path = RealmSwift/Property.swift; sourceTree = ""; }; - F8F22BFB9BB17B2BA34E3CB47D46962C /* FLEXArrayExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArrayExplorerViewController.m; path = Classes/ObjectExplorers/FLEXArrayExplorerViewController.m; sourceTree = ""; }; - F999C35A673A0094EE7C4FBBDF69125C /* ComposerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerView.swift; path = Composer/Classes/Views/ComposerView.swift; sourceTree = ""; }; - F9C68FE77DB7A4AE2DA7799E88A3A0DB /* Nuke-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-prefix.pch"; sourceTree = ""; }; - F9CE46578BF75F06647B8BA0B2FAE5CE /* partial_sync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = partial_sync.cpp; path = Realm/ObjectStore/src/sync/partial_sync.cpp; sourceTree = ""; }; - FB14B0DF8B2530D68C6278241BB7A2F1 /* FLEXLayerExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLayerExplorerViewController.m; path = Classes/ObjectExplorers/FLEXLayerExplorerViewController.m; sourceTree = ""; }; - FBDF3BD1FC22ABA158FEADC0C462F87B /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FBEAE2D94E693CAD03947EC2EAA74996 /* FLEXMethodCallingViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMethodCallingViewController.m; path = Classes/Editing/FLEXMethodCallingViewController.m; sourceTree = ""; }; - FC521FE9A86A5E8054EB6406AE25342B /* FLEXArgumentInputColorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputColorView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m; sourceTree = ""; }; - FC76610BF8240039B04F54723129EB01 /* HintsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HintsView.swift; path = Composer/Classes/Addons/Hints/HintsView.swift; sourceTree = ""; }; - FC853BD6EDD4E69E20BE1FCB5258259C /* Pods_Rocket_Chat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Rocket_Chat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FCD20B99678EE9ED307E72AA8931B264 /* OAuthSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OAuthSwift-prefix.pch"; sourceTree = ""; }; - FCE4BB16A98664DDFDBB285A1FB9EE7A /* DifferenceKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DifferenceKit-prefix.pch"; sourceTree = ""; }; - FCEB7B936D4BA5528973A1C7D4FFCB2E /* SwipeAccessibilityCustomAction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeAccessibilityCustomAction.swift; path = Source/SwipeAccessibilityCustomAction.swift; sourceTree = ""; }; - FD06C77FAFBB24EEE34842708B6F03A2 /* Nuke.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nuke.xcconfig; sourceTree = ""; }; - FD5062F29C9E91C09758AE5CA17FB955 /* MLIncreaseVolume@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLIncreaseVolume@2x.png"; path = "MobilePlayer/Resources/MLIncreaseVolume@2x.png"; sourceTree = ""; }; - FD7DD9B1835121BCC94D6B0033DC90D9 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; - FD82CCB6F9E49CD67395A108B86F02BC /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; - FD8A82FD396472B27886A246B1546240 /* FLEXNetworkHistoryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkHistoryTableViewController.h; path = Classes/Network/FLEXNetworkHistoryTableViewController.h; sourceTree = ""; }; - FDC68D83D2FFC444267C0C7C5179D4C9 /* list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list_notifier.cpp; path = Realm/ObjectStore/src/impl/list_notifier.cpp; sourceTree = ""; }; - FE09DAE831C0F4DD2A3FEE0DA7B4CF4B /* semver-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "semver-prefix.pch"; sourceTree = ""; }; - FE1FFCB9922777A67C459476B6C3D218 /* GULUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULUserDefaults.h; path = GoogleUtilities/UserDefaults/Private/GULUserDefaults.h; sourceTree = ""; }; - FE3D21DEBFEBC0B31AB1DF0B07694330 /* FIRComponentContainerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainerInternal.h; path = Firebase/Core/Private/FIRComponentContainerInternal.h; sourceTree = ""; }; - FE66F2F2C0CA9122E1CF96EBFAA5C09D /* ImageProcessing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessing.swift; path = Sources/ImageProcessing.swift; sourceTree = ""; }; - FF45815F9976193FA67AEE42BD8DB884 /* UIApplication+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIApplication+OAuthSwift.swift"; path = "Sources/UIApplication+OAuthSwift.swift"; sourceTree = ""; }; - FF6277F9D0FB4A8398CBCD8C9A48AF23 /* RLMSyncUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUtil.mm; path = Realm/RLMSyncUtil.mm; sourceTree = ""; }; - FFC53FC61B729058278F1AE348127893 /* FLEXArgumentInputNotSupportedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNotSupportedView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h; sourceTree = ""; }; + 0031A8FB4EDB8DC254B6C535556B3879 /* object_store.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_store.cpp; path = Realm/ObjectStore/src/object_store.cpp; sourceTree = ""; }; + 005AAFFED88042634E6AAB1AE347E947 /* DataLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataLoader.swift; path = Sources/DataLoader.swift; sourceTree = ""; }; + 006877289E6A25C760A3359FED3EE41B /* FIRInstanceIDAuthService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDAuthService.m; path = Firebase/InstanceID/FIRInstanceIDAuthService.m; sourceTree = ""; }; + 0072B7196E7CC188E0B39B2CF2A4716F /* RLMSyncUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUtil.mm; path = Realm/RLMSyncUtil.mm; sourceTree = ""; }; + 00EAAB9A08035990EA5E6E26B7E3D8AB /* FIRInstanceIDDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDDefines.h; path = Firebase/InstanceID/FIRInstanceIDDefines.h; sourceTree = ""; }; + 00EB84821CE127B30F57DCA4FC055F1A /* FLEXViewControllerExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewControllerExplorerViewController.m; path = Classes/ObjectExplorers/FLEXViewControllerExplorerViewController.m; sourceTree = ""; }; + 00F19B152B4EC4511D6480C4738517E2 /* GULNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetwork.h; path = GoogleUtilities/Network/Private/GULNetwork.h; sourceTree = ""; }; + 00FDDD38DE4424361CDDB529C1F2B7B6 /* SwipeAction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeAction.swift; path = Source/SwipeAction.swift; sourceTree = ""; }; + 0116F62849EF37D4F9B16F1412981136 /* ComposerTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerTextView.swift; path = Composer/Classes/Views/ComposerTextView.swift; sourceTree = ""; }; + 014B6A9EE013D5281C412B5740704A64 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 0159B7EA36F02AD42E0E966ABD87C8B3 /* FIRCoreDiagnosticsDateFileStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnosticsDateFileStorage.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.m; sourceTree = ""; }; + 01A30A9C466AA3CBDAB80CAFE26701A5 /* GDTCCTPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTPrioritizer.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h; sourceTree = ""; }; + 01DEB552863D030E9ACAA1C946CB0005 /* MobilePlayer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MobilePlayer-umbrella.h"; sourceTree = ""; }; + 028D3D9CC4A4836F6F4C45F955216E60 /* RocketChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RocketChatViewController.swift; path = RocketChatViewController/Classes/RocketChatViewController.swift; sourceTree = ""; }; + 0377125438ED404CDD97453B12D413F2 /* FLEXImageExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImageExplorerViewController.h; path = Classes/ObjectExplorers/FLEXImageExplorerViewController.h; sourceTree = ""; }; + 039C42C008DBCE8DFEA8596C759D423D /* SortDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SortDescriptor.swift; path = RealmSwift/SortDescriptor.swift; sourceTree = ""; }; + 03A7C8CD2AD873AAC8E245DBBD4B78FA /* ElementPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementPath.swift; path = Sources/ElementPath.swift; sourceTree = ""; }; + 03A9DE2C81710DB8A30212C75DB4746B /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = es.lproj; path = Composer/Assets/es.lproj; sourceTree = ""; }; + 03B2E440322944242314A9B7B36442F7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../DifferenceKit-Core/Info.plist"; sourceTree = ""; }; + 044A03B44183A1B253B72B4576465012 /* FIRInstanceIDKeyPairStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDKeyPairStore.m; path = Firebase/InstanceID/FIRInstanceIDKeyPairStore.m; sourceTree = ""; }; + 04929AF0D716D838952919510A22983E /* GDTCOREvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREvent.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m; sourceTree = ""; }; + 053E1C30790364F6A2AB7944B2DAF7A7 /* sync_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_config.cpp; path = Realm/ObjectStore/src/sync/sync_config.cpp; sourceTree = ""; }; + 057A667D88036DCC69F69CA292086059 /* MLIncreaseVolume@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLIncreaseVolume@2x.png"; path = "MobilePlayer/Resources/MLIncreaseVolume@2x.png"; sourceTree = ""; }; + 057BC959525B3953B4065601EBD1660A /* SliderConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SliderConfig.swift; path = MobilePlayer/Config/SliderConfig.swift; sourceTree = ""; }; + 0592BB101BDB3659B136E18FFFD1E16B /* FLEXManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXManager.m; path = Classes/Manager/FLEXManager.m; sourceTree = ""; }; + 05B999E6E8A4D0B3CF7F4D49A8B25C14 /* semver-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "semver-umbrella.h"; sourceTree = ""; }; + 05FC5ED8298D8FC80A16CAB58376DFC8 /* RLMConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMConstants.m; path = Realm/RLMConstants.m; sourceTree = ""; }; + 064E7D1CD9BF9F08DE8E872CC0734169 /* FLAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLAnimatedImageView.h; path = FLAnimatedImage/FLAnimatedImageView.h; sourceTree = ""; }; + 06593A948E006D059354C07B79D8536F /* RLMRealm_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Dynamic.h; path = include/RLMRealm_Dynamic.h; sourceTree = ""; }; + 06CAFCCFF0FF9960902753EBC6FDEBDF /* OAuthSwiftResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftResponse.swift; path = Sources/OAuthSwiftResponse.swift; sourceTree = ""; }; + 077BA0ABE152668146C5B31270FB10D3 /* FLEXMethodCallingViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMethodCallingViewController.m; path = Classes/Editing/FLEXMethodCallingViewController.m; sourceTree = ""; }; + 0831B9643A69B9855B8021695225613C /* FIRInstanceIDCheckinPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCheckinPreferences.h; path = Firebase/InstanceID/Private/FIRInstanceIDCheckinPreferences.h; sourceTree = ""; }; + 08613D7B669BAA579B4AAB2D0E02E67F /* FIRDiagnosticsData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDiagnosticsData.m; path = Firebase/Core/FIRDiagnosticsData.m; sourceTree = ""; }; + 0878BA4AF1B02FAAC0B3637974BD4BA6 /* FLEXObjectExplorerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerFactory.h; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.h; sourceTree = ""; }; + 08C01A5B48D9B1D1B20B9E0FCB35350A /* FLEXFileBrowserFileOperationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserFileOperationController.h; path = Classes/GlobalStateExplorers/FLEXFileBrowserFileOperationController.h; sourceTree = ""; }; + 08FAC703C156563CC9AC4E1A9ABAC34F /* GDTCORReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORReachability.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m; sourceTree = ""; }; + 09444581DBEFC6EB9171B6359F70ED73 /* FLEXGlobalsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsTableViewController.h; path = Classes/GlobalStateExplorers/FLEXGlobalsTableViewController.h; sourceTree = ""; }; + 09ADC45A6E0FE6AEDA105BEC2876C840 /* RLMSyncCredentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncCredentials.h; path = include/RLMSyncCredentials.h; sourceTree = ""; }; + 0AA41D50FC9AA19A8198BBDF4ACF3D2F /* FLEXArgumentInputSwitchView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputSwitchView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m; sourceTree = ""; }; + 0AF61B8DD2B356D139872B3D6193AFAC /* FLEXArgumentInputStringView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStringView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h; sourceTree = ""; }; + 0B1A3625364E2B38F1B2913139AD0E0D /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Starscream/Compression.swift; sourceTree = ""; }; + 0B6AC8702057407D72E69091AB3E7F73 /* GDTCORConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORConsoleLogger.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m; sourceTree = ""; }; + 0BF32ED95154050ACFD78362C12A9421 /* MLCloseButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLCloseButton.png; path = MobilePlayer/Resources/MLCloseButton.png; sourceTree = ""; }; + 0C4F45506EB8EFE786FF82E6B6345EBD /* ImageRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageRequest.swift; path = Sources/ImageRequest.swift; sourceTree = ""; }; + 0E2D403CB050FD9389884C2BC449410D /* FLEXViewExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewExplorerViewController.h; path = Classes/ObjectExplorers/FLEXViewExplorerViewController.h; sourceTree = ""; }; + 0F451DBBBBAE5A78217571E380A6ECCE /* Button.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Button.swift; path = MobilePlayer/Views/Button.swift; sourceTree = ""; }; + 10629BE87FD5CCA896E2AAB9A95D829E /* Aliases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Aliases.swift; path = RealmSwift/Aliases.swift; sourceTree = ""; }; + 10C194B49F009FA039889164DCD9A6B8 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/ImageCache.swift; sourceTree = ""; }; + 10DB97CD79D8218FDAE039932C1541BD /* ToggleButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToggleButton.swift; path = MobilePlayer/Views/ToggleButton.swift; sourceTree = ""; }; + 11119D73F47ED2ED59C093139C2AECCD /* FLAnimatedImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FLAnimatedImage.modulemap; sourceTree = ""; }; + 114DF6CC9D416A2CFA555C07F11CDC3D /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; + 12100091E1EF44D77B9E75D640BE692B /* ComposerViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerViewDelegate.swift; path = Composer/Classes/Delegate/ComposerViewDelegate.swift; sourceTree = ""; }; + 128930AEFC24615F910E45D913E15851 /* Swipeable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Swipeable.swift; path = Source/Swipeable.swift; sourceTree = ""; }; + 12BEB42633FE33B1394ADCE8B03B6CB3 /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = Firebase/Core/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; + 12CDE5A9A5E34A581D2CFA12A71C2352 /* GDTCORClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORClock.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h; sourceTree = ""; }; + 12F2EC24BEAFC86A87F98D430F823770 /* Pods-Rocket.Chat-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Rocket.Chat-frameworks.sh"; sourceTree = ""; }; + 13342D01F98A96B0D54B5C1A0D9BB139 /* RLMAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMAccessor.h; path = include/RLMAccessor.h; sourceTree = ""; }; + 136E65FBE54384B4C8862DD556CA0DC9 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; + 1399219E7E4F74A191C8103BC4CA94AD /* FLEXDictionaryExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDictionaryExplorerViewController.h; path = Classes/ObjectExplorers/FLEXDictionaryExplorerViewController.h; sourceTree = ""; }; + 13F1EFC1D8AEBFBFD9FC14C6DA73E694 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 149C10AA60E80F88C9328DD77B55BBFC /* GULNetworkConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkConstants.h; path = GoogleUtilities/Network/Private/GULNetworkConstants.h; sourceTree = ""; }; + 14ADD1E11F40E64A4455A4B8A5F2632A /* GoogleAppMeasurement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAppMeasurement.framework; path = Frameworks/GoogleAppMeasurement.framework; sourceTree = ""; }; + 15427FC84688BB3E90070E8CA2FDDF4C /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = Firebase/Core/FIRConfiguration.m; sourceTree = ""; }; + 157D1CBBCFED1655B9C889D97B13F5F6 /* Pods-Rocket.ChatTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Rocket.ChatTests-resources.sh"; sourceTree = ""; }; + 15938CFEA0F012D7BC2466E8798921D9 /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/Internal.swift; sourceTree = ""; }; + 15F92EFE10741A4011C635365DDD5D3C /* FLEXDefaultEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultEditorViewController.m; path = Classes/Editing/FLEXDefaultEditorViewController.m; sourceTree = ""; }; + 162F061BC96038DEA0D8E1D7D2AB2B88 /* Dictionary+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Dictionary+OAuthSwift.swift"; path = "Sources/Dictionary+OAuthSwift.swift"; sourceTree = ""; }; + 1687CB6BFD67F92C631491FD7AC2818A /* GULNetwork.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetwork.m; path = GoogleUtilities/Network/GULNetwork.m; sourceTree = ""; }; + 16B67C4736F18DC125AE88201387BFD2 /* GULNetworkMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkMessageCode.h; path = GoogleUtilities/Network/Private/GULNetworkMessageCode.h; sourceTree = ""; }; + 16E6EAE5977E2A3321FC548E46CF9245 /* FLEXImagePreviewViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImagePreviewViewController.m; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.m; sourceTree = ""; }; + 16EDA0697AB7EF753F3ECD1CE4232256 /* Semver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Semver.swift; path = SemverSwift/Semver.swift; sourceTree = ""; }; + 17181124BD1A13D7077D8C9324DAD2ED /* FLEXMultiColumnTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultiColumnTableView.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h; sourceTree = ""; }; + 17C6D2BA1B55E160EC3ADDE291025ED8 /* FLEXArgumentInputSwitchView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputSwitchView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h; sourceTree = ""; }; + 17CD0BD73C60F4266510F73C01780F32 /* Nuke.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nuke.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 183C952CB41915982BAB89E9F35F8867 /* SwipeCellKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwipeCellKit.xcconfig; sourceTree = ""; }; + 186211F8B3F99614A673BE02FE6B4703 /* Nuke-FLAnimatedImage-Plugin-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-FLAnimatedImage-Plugin-prefix.pch"; sourceTree = ""; }; + 18A35C695C2AE7DE6114D6BA3FAF33DE /* ReplyView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplyView.swift; path = Composer/Classes/Addons/Reply/ReplyView.swift; sourceTree = ""; }; + 18ADB6C4DA4444D57F2D6B80BE5ACB25 /* Int+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+OAuthSwift.swift"; path = "Sources/Int+OAuthSwift.swift"; sourceTree = ""; }; + 190E457578743BA513B440170CC346DC /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = fr.lproj; path = Composer/Assets/fr.lproj; sourceTree = ""; }; + 1937A6F1A3F461335255632D4DEB5580 /* RLMSwiftSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSwiftSupport.m; path = Realm/RLMSwiftSupport.m; sourceTree = ""; }; + 1A26B6C80709AA738F219539DF9A31DB /* GDTCORConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORConsoleLogger.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h; sourceTree = ""; }; + 1A965A830969D292A0587C50197C9CE1 /* Changeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Changeset.swift; path = Sources/Changeset.swift; sourceTree = ""; }; + 1AA60168E6EF97B87C18DB58627D079D /* nanopb.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.xcconfig; sourceTree = ""; }; + 1B8D5808A7D1B48DB579A0A32675B403 /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = Firebase/Core/Private/FIRAppInternal.h; sourceTree = ""; }; + 1C09E3612D2D8CF46BE2E4F0DF3DEA59 /* Pods_Rocket_ChatTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Rocket_ChatTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C5951331CE0F79ABC4BE35C8BDFAB3A /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; }; + 1D34465C3B8C542E47E303507CE6A879 /* FIRInstanceIDTokenFetchOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenFetchOperation.h; path = Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.h; sourceTree = ""; }; + 1D4FE8AC63E30AA13F60DDF6BC6B369F /* OnePasswordExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = OnePasswordExtension.m; sourceTree = ""; }; + 1D8966CB73370A689B30C740239C9C3D /* DifferentiableSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DifferentiableSection.swift; path = Sources/DifferentiableSection.swift; sourceTree = ""; }; + 1DCE9DFBEEDAF1F0E0A9E6967E022DA8 /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; + 1DD49D7B93F00EC83E4F95899111D96C /* FLEXResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXResources.m; path = Classes/Utility/FLEXResources.m; sourceTree = ""; }; + 1E00FCCC5BF84790059FC438D482F6A6 /* Nuke-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-prefix.pch"; sourceTree = ""; }; + 1E6E499D745F7F5E02905FB0319D52A6 /* sync_file.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_file.cpp; path = Realm/ObjectStore/src/sync/impl/sync_file.cpp; sourceTree = ""; }; + 1E759D6F3B13E7902A055F6A3F7DF98A /* SwipeCollectionViewCell+Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeCollectionViewCell+Accessibility.swift"; path = "Source/SwipeCollectionViewCell+Accessibility.swift"; sourceTree = ""; }; + 1E79E1D53048467E62C01EC55811842B /* NSAttributedString+Markdown.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSAttributedString+Markdown.swift"; path = "Pod/Classes/NSAttributedString+Markdown.swift"; sourceTree = ""; }; + 1EAC913B46A70F07B8EDD4219F40FB0A /* SwipeCellKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwipeCellKit-umbrella.h"; sourceTree = ""; }; + 1EE7D49F293DB910F82789262C92863F /* FLEXKeyboardShortcutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardShortcutManager.h; path = Classes/Utility/FLEXKeyboardShortcutManager.h; sourceTree = ""; }; + 1F0D3E564CC3106AF1411B77917C4462 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1F10E7351527A6A2BD0110F1CE83E14D /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cct.nanopb.c; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = ""; }; + 1F1F0CDC24EC702F0A7BDBB38FC66DD1 /* PreviewAudioView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewAudioView.swift; path = Composer/Classes/Overlays/PreviewAudioView.swift; sourceTree = ""; }; + 1F59759BCF2E93EFC49489AEE69D2EB0 /* 1PasswordExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = 1PasswordExtension.modulemap; sourceTree = ""; }; + 1F7745CA6D616774AB456420114BF1DE /* RCBaseParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RCBaseParser.swift; path = Pod/Classes/RCBaseParser.swift; sourceTree = ""; }; + 1F78F5A14BDAD7ECCE76B0FED042E377 /* FIRInstanceIDLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDLogger.h; path = Firebase/InstanceID/FIRInstanceIDLogger.h; sourceTree = ""; }; + 1F868BCBA48C7E3A1466AC076A64D99C /* FIRAnalyticsConnector.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FIRAnalyticsConnector.framework; path = Frameworks/FIRAnalyticsConnector.framework; sourceTree = ""; }; + 1FD21AEE2F11DF41992C63D225B341D3 /* FIRInstanceIDCheckinService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDCheckinService.m; path = Firebase/InstanceID/FIRInstanceIDCheckinService.m; sourceTree = ""; }; + 1FF45139F16BF69478CA6E123A6B23BF /* el.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = el.lproj; path = Composer/Assets/el.lproj; sourceTree = ""; }; + 205ACD94C7D17A04A838312ABB0E7653 /* FIRInstanceIDTokenInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenInfo.m; path = Firebase/InstanceID/FIRInstanceIDTokenInfo.m; sourceTree = ""; }; + 2067D69F4479E6BCD7B74D7FF31E664A /* FLEXCookiesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCookiesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXCookiesTableViewController.m; sourceTree = ""; }; + 20A6180EC0E0D2F096FCFD4F23CF8052 /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = Firebase/Core/FIRErrors.m; sourceTree = ""; }; + 20CE461F1D16E3A9B3B73B44A068ED9D /* RLMThreadSafeReference.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMThreadSafeReference.mm; path = Realm/RLMThreadSafeReference.mm; sourceTree = ""; }; + 21558A53A17217C1C216E0B30DC07F2B /* DifferenceKit-Core.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "DifferenceKit-Core.modulemap"; path = "../DifferenceKit-Core/DifferenceKit-Core.modulemap"; sourceTree = ""; }; + 21852CB65AF7686069C504F4E60BFD47 /* URLConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLConvertible.swift; path = Sources/URLConvertible.swift; sourceTree = ""; }; + 22D30D0FED75EB1019C8A721AD680F7B /* ImageViewerDismissalInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerDismissalInteractor.swift; path = ImageViewer/Transitions/ImageViewerDismissalInteractor.swift; sourceTree = ""; }; + 22F6A2438CA91D0EB7D1FB9E1A720F0F /* MobilePlayerNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerNotification.swift; path = MobilePlayer/MobilePlayerNotification.swift; sourceTree = ""; }; + 231802D6149E184AF4D59C1B71AAC6C8 /* weak_realm_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = weak_realm_notifier.cpp; path = Realm/ObjectStore/src/impl/weak_realm_notifier.cpp; sourceTree = ""; }; + 23AEE44FB34F530015972AC5E5F90DA8 /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; + 23C48EEA722717605211ADE41F199B42 /* ObjectiveCSupport+Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObjectiveCSupport+Sync.swift"; path = "RealmSwift/ObjectiveCSupport+Sync.swift"; sourceTree = ""; }; + 240885571D6A1FC5C67CA517180A7A36 /* FIRInstanceIDTokenOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenOperation.m; path = Firebase/InstanceID/FIRInstanceIDTokenOperation.m; sourceTree = ""; }; + 24A5F6AF66179433098AA253AFE4793C /* RealmSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-umbrella.h"; sourceTree = ""; }; + 24EADC6E30E5C8B9E6AA121AFB762F42 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 25271A64B9812F6A1FD9BC50BE3E7CA3 /* collection_notifications.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifications.cpp; path = Realm/ObjectStore/src/collection_notifications.cpp; sourceTree = ""; }; + 274B7427DAC2A5446451C366E393DD23 /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = Firebase/Core/FIRApp.m; sourceTree = ""; }; + 278E2872F3D29F5B671C504F6C616EC8 /* SwipeExpansionStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeExpansionStyle.swift; path = Source/SwipeExpansionStyle.swift; sourceTree = ""; }; + 279C14CB42E0CB3D7ED24203C35C02F4 /* FLEXTableContentCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableContentCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.h; sourceTree = ""; }; + 27ACE74CC75BB1904160E29F01B41E69 /* GDTCCTUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploader.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m; sourceTree = ""; }; + 28838A04C3B03ED1653F5C4F1A28928D /* ImageProcessing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessing.swift; path = Sources/ImageProcessing.swift; sourceTree = ""; }; + 28B5278BC2CCF657DFF385FD2DD4CB5D /* Pods-Rocket.Chat.ShareExtension.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.test.xcconfig"; sourceTree = ""; }; + 28CCA15793106B55CDED110A581646E7 /* FLEXGlobalsTableViewControllerEntry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsTableViewControllerEntry.h; path = Classes/ObjectExplorers/FLEXGlobalsTableViewControllerEntry.h; sourceTree = ""; }; + 28FA6726940DA52AEC7AD668DCACAA02 /* GDTCCTUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploader.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h; sourceTree = ""; }; + 2924DFCB9F48384591F9477879936E99 /* OAuthSwiftError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftError.swift; path = Sources/OAuthSwiftError.swift; sourceTree = ""; }; + 29C2014BAA6D242C5C0796A40D375AFA /* RLMArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray.h; path = include/RLMArray.h; sourceTree = ""; }; + 2A9766DE3CD25C3B6AFD6167781E6348 /* OAuth1Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuth1Swift.swift; path = Sources/OAuth1Swift.swift; sourceTree = ""; }; + 2ACCB5CD64EBA69D9D874251ECA79D73 /* FLEXFileBrowserSearchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserSearchOperation.m; path = Classes/GlobalStateExplorers/FLEXFileBrowserSearchOperation.m; sourceTree = ""; }; + 2BD160F00C107EC88F2CB5926EAB57D1 /* FLEXFileBrowserSearchOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserSearchOperation.h; path = Classes/GlobalStateExplorers/FLEXFileBrowserSearchOperation.h; sourceTree = ""; }; + 2BDF5BC931E05E842AE1CF6E6ED36928 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2C0BED042B031C59FF6C9FE94CF69454 /* FLEXArgumentInputFontsPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontsPickerView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m; sourceTree = ""; }; + 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = 1PasswordExtension.xcconfig; sourceTree = ""; }; + 2CAF3B7181A1160FCCC878725721158D /* RLMRealm_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Private.h; path = include/RLMRealm_Private.h; sourceTree = ""; }; + 2CFA242D62F50462BDD7D73F21E25E61 /* FLEXSystemLogTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogTableViewController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.m; sourceTree = ""; }; + 2D1A1B54C105F47C929BABDE66DDE2A7 /* NSError+RLMSync.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+RLMSync.m"; path = "Realm/NSError+RLMSync.m"; sourceTree = ""; }; + 2D5B795800A5637A7B0E6940B6343F27 /* ComposerAssets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerAssets.swift; path = Composer/Classes/ComposerAssets.swift; sourceTree = ""; }; + 2D729E7967554BD50F00DC3C78B66A87 /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = de.lproj; path = Composer/Assets/de.lproj; sourceTree = ""; }; + 2E18302951078475E8839BC5C9FB652C /* thread_safe_reference.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = thread_safe_reference.cpp; path = Realm/ObjectStore/src/thread_safe_reference.cpp; sourceTree = ""; }; + 2E685B053E4D7805F2856778090E0FF9 /* GULLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLogger.h; path = GoogleUtilities/Logger/Private/GULLogger.h; sourceTree = ""; }; + 2EB06A0F29E5AB0B5FAC6C737036FC66 /* FIRInstanceIDURLQueryItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDURLQueryItem.m; path = Firebase/InstanceID/FIRInstanceIDURLQueryItem.m; sourceTree = ""; }; + 2EB365B03AB1CC67F47B3A82B809C99D /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON/SwiftyJSON.swift; sourceTree = ""; }; + 2F2DCF94E000BC26D3665ADC4C2CA31B /* FLEXExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerViewController.h; path = Classes/ExplorerInterface/FLEXExplorerViewController.h; sourceTree = ""; }; + 2F796AD6128C846E07E2AF4A0A8DDFC7 /* Nuke-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-umbrella.h"; sourceTree = ""; }; + 2FAD15C85DD391961BA10B3EB7EC0CAD /* RCMarkdownParser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RCMarkdownParser-prefix.pch"; sourceTree = ""; }; + 2FB0EBC8214E9F936FCE046E055921E3 /* ClosureSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ClosureSupport.swift; path = MobilePlayer/Extensions/ClosureSupport.swift; sourceTree = ""; }; + 300C61D10253661229D56E02DF2DDFD0 /* GDTCOREventTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h; sourceTree = ""; }; + 300FE660EF4DD975514D2F2375D84DBB /* RLMSyncPermissionResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermissionResults.mm; path = Realm/RLMSyncPermissionResults.mm; sourceTree = ""; }; + 301D151A6354125FFB06DA8AD55679E3 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; + 30FEFB929544CCB63FA738F715041190 /* OnePasswordExtensionResources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OnePasswordExtensionResources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 31599602E1CEEEE2CCFD5F9886B7CCB3 /* MobilePlayer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MobilePlayer-dummy.m"; sourceTree = ""; }; + 3161111B6F09F73A01C42288228B792B /* FLEXRuntimeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeUtility.h; path = Classes/Utility/FLEXRuntimeUtility.h; sourceTree = ""; }; + 316ED1636562B8CAE9DAECAF93370282 /* DifferenceKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DifferenceKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 31EF3647CF03CCF8A14508AAFEB28B57 /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = RealmSwift/Util.swift; sourceTree = ""; }; + 324A3035364B91AA0E3AC7513CA9653E /* FLEXSQLiteDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSQLiteDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m; sourceTree = ""; }; + 33073E928D7349D304C1A2B2ABED2351 /* ResourceBundle-OnePasswordExtensionResources-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-OnePasswordExtensionResources-Info.plist"; sourceTree = ""; }; + 33EAE086E63C23847209A6FF02A5E350 /* SimpleImageViewer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SimpleImageViewer.modulemap; sourceTree = ""; }; + 33ED13762953F023C9DDD574D798CD7C /* pl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = pl.lproj; path = Composer/Assets/pl.lproj; sourceTree = ""; }; + 3400592DDCAEF1F6FC4E8933D94DD845 /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = Firebase/Core/Public/FIROptions.h; sourceTree = ""; }; + 3426D3EEE40DA7B90180E390592F9C46 /* Pods-Rocket.Chat.ShareExtension-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Rocket.Chat.ShareExtension-acknowledgements.markdown"; sourceTree = ""; }; + 347B83B82BDC5E38DE3279420F9F2724 /* FLEXDefaultEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultEditorViewController.h; path = Classes/Editing/FLEXDefaultEditorViewController.h; sourceTree = ""; }; + 34DA8616C960B2BCA117CE3AA3E6E2F3 /* GULNetworkURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkURLSession.h; path = GoogleUtilities/Network/Private/GULNetworkURLSession.h; sourceTree = ""; }; + 3576156F3DA91C0FB19F70433ABEC641 /* FLEXObjectExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerViewController.h; path = Classes/ObjectExplorers/FLEXObjectExplorerViewController.h; sourceTree = ""; }; + 35A34967BD2FE519E355E26DC9CD04E1 /* RocketChatViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RocketChatViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 37142B20FC9EA8E59811F270D7C81D62 /* RLMSyncPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncPermission.h; path = include/RLMSyncPermission.h; sourceTree = ""; }; + 374CCAF529CC7DF6C9C3A6ABA9E0FF3B /* RealmSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RealmSwift-dummy.m"; sourceTree = ""; }; + 377245FFE5CFBA06681AF1C212999DF5 /* results.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results.cpp; path = Realm/ObjectStore/src/results.cpp; sourceTree = ""; }; + 37DD3CFBD024BACF75A5FF333377E8DF /* schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = schema.cpp; path = Realm/ObjectStore/src/schema.cpp; sourceTree = ""; }; + 37E91631F6930CF206DF8EA2D69A5620 /* FIRInstanceIDUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDUtilities.h; path = Firebase/InstanceID/FIRInstanceIDUtilities.h; sourceTree = ""; }; + 37EA5C62A914BE9A0F0F998EEFE3E955 /* FLEX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLEX.xcconfig; sourceTree = ""; }; + 38444A1911A5EA9E26A660A8855FF528 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 385B23F1248C4D0AB3C82E855219E4F1 /* ElementConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementConfig.swift; path = MobilePlayer/Config/ElementConfig.swift; sourceTree = ""; }; + 3876EC1DCAF87A2DED08AF037A3BD377 /* MLVolumeButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLVolumeButton.png; path = MobilePlayer/Resources/MLVolumeButton.png; sourceTree = ""; }; + 389593A453F30DF710DBCE788A2078BB /* Nuke-FLAnimatedImage-Plugin.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Nuke-FLAnimatedImage-Plugin.modulemap"; sourceTree = ""; }; + 38D361488CDD877419903670BF4495AE /* GDTCORRegistrar_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h; sourceTree = ""; }; + 39A1420BAA24711D1133938BD1849B43 /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; + 39F26580F0345FE9910FF66433B44392 /* GDTCORUploadCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadCoordinator.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h; sourceTree = ""; }; + 3A67BBF434A5B05A16E2FB749132152D /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = Firebase/Core/FIRBundleUtil.m; sourceTree = ""; }; + 3AF8CBC30CE9ADD541A69BC2AB0C38AF /* FIRCoreDiagnosticsConnector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnosticsConnector.m; path = Firebase/Core/FIRCoreDiagnosticsConnector.m; sourceTree = ""; }; + 3B4698DF692D5774FAB60FCB6A78BE0F /* StateHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StateHelper.swift; path = MobilePlayer/Helpers/StateHelper.swift; sourceTree = ""; }; + 3C1FF97B57784B42747BCF8F4F65B2A5 /* GDTCOREvent_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h; sourceTree = ""; }; + 3C2A8FE9EFF90E6FF9691B664983EF5E /* FLEXLiveObjectsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLiveObjectsTableViewController.m; path = Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m; sourceTree = ""; }; + 3C5BFABF37150D62756229774BAF91F7 /* ImageViewerController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerController.swift; path = ImageViewer/ImageViewerController.swift; sourceTree = ""; }; + 3C81FE76880DF48AF660CE84A5971B7C /* FIRInstanceIDStringEncoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDStringEncoding.m; path = Firebase/InstanceID/FIRInstanceIDStringEncoding.m; sourceTree = ""; }; + 3C9D2F89B1ADAFA5FE5136B2E3E2B427 /* FIRInstanceIDConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDConstants.m; path = Firebase/InstanceID/FIRInstanceIDConstants.m; sourceTree = ""; }; + 3CB46BD859ED232B2F0A506F6621CC31 /* FIRDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDiagnosticsData.h; path = Firebase/Core/Private/FIRDiagnosticsData.h; sourceTree = ""; }; + 3D26993A2527D89967D63F6B77AFFC0C /* RLMPredicateUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMPredicateUtil.mm; path = Realm/RLMPredicateUtil.mm; sourceTree = ""; }; + 3E10252339FC1F5EC4A69437D4105D4E /* Label.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Label.swift; path = MobilePlayer/Views/Label.swift; sourceTree = ""; }; + 3E29F99E768FC1FC0BB5E199BB53B109 /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = ""; }; + 3E2AD4BB9A335A5A0F5043B5BD362C95 /* FirebaseInstanceID.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseInstanceID.modulemap; sourceTree = ""; }; + 3E5473D53A4DAC79666B68571F102A23 /* SimpleImageViewer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SimpleImageViewer-umbrella.h"; sourceTree = ""; }; + 3EA55D22D5912A2C86AB7627E711A2B9 /* DifferenceKit-Core.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "DifferenceKit-Core.xcconfig"; path = "../DifferenceKit-Core/DifferenceKit-Core.xcconfig"; sourceTree = ""; }; + 3EFD5686D1D31ACBAD2CEF5226454C24 /* Pods-Rocket.ChatTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Rocket.ChatTests-umbrella.h"; sourceTree = ""; }; + 3F06FF305454F67E3271ABC1F7311D83 /* FLEXHierarchyTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewController.m; path = Classes/ViewHierarchy/FLEXHierarchyTableViewController.m; sourceTree = ""; }; + 3F29729926FB89531EEF1FA5B914C724 /* RLMProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty.h; path = include/RLMProperty.h; sourceTree = ""; }; + 3F3A9C766AA388BADA9A31364D252FC8 /* ImageTaskMetrics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTaskMetrics.swift; path = Sources/ImageTaskMetrics.swift; sourceTree = ""; }; + 3F42539788B0E96F735364910DD90E26 /* FIRInstanceIDAuthService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDAuthService.h; path = Firebase/InstanceID/FIRInstanceIDAuthService.h; sourceTree = ""; }; + 3F5555115B038A8C6C0FA3C40127ED95 /* FIRInstanceIDCheckinStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCheckinStore.h; path = Firebase/InstanceID/FIRInstanceIDCheckinStore.h; sourceTree = ""; }; + 3F5D0C90F3F06BB579634943C41856DC /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; + 3F873F09E5A016714EE5E7E93A94181B /* DifferenceKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DifferenceKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3FACFC88B8F01CC3E1B13210D3A937C1 /* GoogleDataTransport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransport-dummy.m"; sourceTree = ""; }; + 3FFDA37060D80EF79408590D6E8F38D6 /* SwipeCellKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwipeCellKit.modulemap; sourceTree = ""; }; + 4036A4534744BDBF4F77CF1F037DE9ED /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = Firebase/Core/Public/FIRApp.h; sourceTree = ""; }; + 4053237D3B9691491691C866358AE668 /* FLEXArgumentInputTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputTextView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.h; sourceTree = ""; }; + 40535F80A39B0649ACD3833406DC42E8 /* GoogleUtilities.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.xcconfig; sourceTree = ""; }; + 411448D5363B66F79F3BFF1F76AB47A9 /* GoogleDataTransport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransport.modulemap; sourceTree = ""; }; + 41706C72E33AB2281FB21FF5F2C487B4 /* FLEXNetworkRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkRecorder.m; path = Classes/Network/FLEXNetworkRecorder.m; sourceTree = ""; }; + 417CA68A97D995DDECCD3145CC1BE3E2 /* FLEXKeyboardHelpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardHelpViewController.m; path = Classes/Utility/FLEXKeyboardHelpViewController.m; sourceTree = ""; }; + 4232FA492312AAC864248F591661DA10 /* NotificationCenter+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NotificationCenter+OAuthSwift.swift"; path = "Sources/NotificationCenter+OAuthSwift.swift"; sourceTree = ""; }; + 427B8D9E52FA8F953AAC5FF40A8C3691 /* cct.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cct.nanopb.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h; sourceTree = ""; }; + 435280CF24B54074396E1B32A6843D4B /* RocketChatViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RocketChatViewController-prefix.pch"; sourceTree = ""; }; + 438750D3C9EC7443CE4A50AC6FBB7F57 /* RCMarkdownParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RCMarkdownParser.swift; path = Pod/Classes/RCMarkdownParser.swift; sourceTree = ""; }; + 439A39FB13D63F87983F021124302E30 /* Pods-Rocket.Chat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.debug.xcconfig"; sourceTree = ""; }; + 43AD415141E23C2C0A1DC8B66FDDB833 /* Pods-Rocket.Chat.ShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.debug.xcconfig"; sourceTree = ""; }; + 43E9884AC1C535455AFCCB7099E4E75C /* FLEXExplorerToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerToolbar.m; path = Classes/Toolbar/FLEXExplorerToolbar.m; sourceTree = ""; }; + 443994482073B5BADB536B713A37AD2F /* MobilePlayerConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerConfig.swift; path = MobilePlayer/Config/MobilePlayerConfig.swift; sourceTree = ""; }; + 44758F8C16EACCB5DAB9215B2BE36D58 /* RLMRealm.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealm.mm; path = Realm/RLMRealm.mm; sourceTree = ""; }; + 4475ECFA5B6F32225A32177F548BAC69 /* ReachabilitySwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.xcconfig; sourceTree = ""; }; + 44DEC34DFC54A6E319F110386B6416AF /* FIRComponentContainerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainerInternal.h; path = Firebase/Core/Private/FIRComponentContainerInternal.h; sourceTree = ""; }; + 44E0C195BBFF6F2F505F923CB5FF0DC5 /* SSLClientCertificate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLClientCertificate.swift; path = Sources/Starscream/SSLClientCertificate.swift; sourceTree = ""; }; + 4531BF3796D5F2082CF112E41E5BCE0E /* RLMMigration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMMigration.mm; path = Realm/RLMMigration.mm; sourceTree = ""; }; + 458D55B8BAAFC0118DFA4610A339C0DB /* GoogleUtilities.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleUtilities.modulemap; sourceTree = ""; }; + 45B5EFAFC947FC41B00B304E812BD4BA /* RCMarkdownParser-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RCMarkdownParser-umbrella.h"; sourceTree = ""; }; + 47166FC79DD2B626C59EA1820C595EEC /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = Firebase/Core/Private/FIRBundleUtil.h; sourceTree = ""; }; + 472642F0567D7D7BFDD2A3974FE65278 /* FIRInstanceIDVersionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDVersionUtilities.m; path = Firebase/InstanceID/FIRInstanceIDVersionUtilities.m; sourceTree = ""; }; + 478F4CD18FF2F72A29D57EC7C6AF3312 /* FLEXLiveObjectsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLiveObjectsTableViewController.h; path = Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.h; sourceTree = ""; }; + 479A6210B4D7CEC57F10675243DAC9D6 /* FLEX-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-umbrella.h"; sourceTree = ""; }; + 47AADE460A20466D1600A77702BC01AD /* FLEXArgumentInputStringView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStringView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m; sourceTree = ""; }; + 47F88FF44B97D83A759129AC6B293521 /* GoogleUtilities-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleUtilities-dummy.m"; sourceTree = ""; }; + 483EAAC04E8C54BD941813722288948E /* RLMCollection.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMCollection.mm; path = Realm/RLMCollection.mm; sourceTree = ""; }; + 484BA0EE20C529C24C576621D43B2EBB /* FIRComponentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentContainer.m; path = Firebase/Core/FIRComponentContainer.m; sourceTree = ""; }; + 4893A4CA3092FCFF1562732C12A188B5 /* FLEXSystemLogMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogMessage.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.h; sourceTree = ""; }; + 48B5842107C21920D5CC5CC5EBBF95F4 /* Pods-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.release.xcconfig"; sourceTree = ""; }; + 492905C529C2EAA2227A5AF97656F1A9 /* FLEXManager+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXManager+Private.h"; path = "Classes/Manager/FLEXManager+Private.h"; sourceTree = ""; }; + 4A59611CCEC6C081E12F386A05557AB2 /* VolumeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VolumeView.swift; path = MobilePlayer/Views/VolumeView.swift; sourceTree = ""; }; + 4A98112E41390D5B7E8C4327409AA329 /* RocketChatViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RocketChatViewController-dummy.m"; sourceTree = ""; }; + 4ABDF6D0ED6DD38143206CAB1ADCD36A /* object_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_notifier.cpp; path = Realm/ObjectStore/src/impl/object_notifier.cpp; sourceTree = ""; }; + 4B7CEDBF1F8D04791B4C64CEEFFFB101 /* WatermarkViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WatermarkViewController.swift; path = MobilePlayer/WatermarkViewController.swift; sourceTree = ""; }; + 4B8AE6270FBED77C47DD4BD9C506AEC8 /* FLEXArgumentInputNumberView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNumberView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m; sourceTree = ""; }; + 4C267BF9A9956F537090DB8142D82BBC /* RLMObjectBase_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Dynamic.h; path = include/RLMObjectBase_Dynamic.h; sourceTree = ""; }; + 4CB8340448DD320361607933E400EC63 /* Nuke-FLAnimatedImage-Plugin-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nuke-FLAnimatedImage-Plugin-dummy.m"; sourceTree = ""; }; + 4CC21EB4B250036E93185A7AF95DF75F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4CE1111761DF2BF927371E792131365A /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; + 4CE9734D5DD0317F85138965E3010C17 /* FLEXArrayExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArrayExplorerViewController.m; path = Classes/ObjectExplorers/FLEXArrayExplorerViewController.m; sourceTree = ""; }; + 4D7363F0565A325DDDD52B0C7A5EA323 /* librealmcore-ios.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "librealmcore-ios.a"; path = "core/librealmcore-ios.a"; sourceTree = ""; }; + 4DAE9F5B47E940A5BED4EB4282AB23AB /* RLMResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMResults.mm; path = Realm/RLMResults.mm; sourceTree = ""; }; + 4DB8D249556332731EBBF3FDDA82CA87 /* OnePasswordExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OnePasswordExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4E7F4A13D5D45AFD7BF930DB00952284 /* FLEXArgumentInputFontView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m; sourceTree = ""; }; + 4E8E1591D87AF949AE0156B4EBF9AC0A /* OverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OverlayView.swift; path = Composer/Classes/Overlays/OverlayView.swift; sourceTree = ""; }; + 4ECF7BEBE953DFC761AC18F7D5BF15E9 /* OAuthSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OAuthSwift.xcconfig; sourceTree = ""; }; + 4F09DA059DFA6A3C414F0919AB4DD23B /* FIRInstanceIDCheckinService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCheckinService.h; path = Firebase/InstanceID/FIRInstanceIDCheckinService.h; sourceTree = ""; }; + 4F8742A28E3D7B8D07FB29B661245FAC /* Pods-Rocket.Chat.ShareExtension-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.Chat.ShareExtension-acknowledgements.plist"; sourceTree = ""; }; + 4FACDCA83835FCF2784F19CBE29CD008 /* FLEXFileBrowserTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserTableViewController.m; path = Classes/GlobalStateExplorers/FLEXFileBrowserTableViewController.m; sourceTree = ""; }; + 4FCD527797D3E7DE41E05D03B7AF17C9 /* FIRInstanceID+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRInstanceID+Private.h"; path = "Firebase/InstanceID/Private/FIRInstanceID+Private.h"; sourceTree = ""; }; + 501A8B83B08348171E851375825096F4 /* GDTCORUploadPackage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadPackage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m; sourceTree = ""; }; + 5034EB136E35843437255B724DE16C62 /* FLEXArrayExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArrayExplorerViewController.h; path = Classes/ObjectExplorers/FLEXArrayExplorerViewController.h; sourceTree = ""; }; + 5038AF800CB05C298D99D0A8C755BDDE /* MLIncreaseVolume@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLIncreaseVolume@3x.png"; path = "MobilePlayer/Resources/MLIncreaseVolume@3x.png"; sourceTree = ""; }; + 508B3CF8D1BA1076534B46B2A7A843A0 /* RLMRealm+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealm+Sync.h"; path = "include/RLMRealm+Sync.h"; sourceTree = ""; }; + 50C8770E60E884215A3F677CA2B1A76E /* FLEXArgumentInputNumberView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNumberView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h; sourceTree = ""; }; + 50CF61641F035AB81866D055C455F541 /* FLEXArgumentInputStructView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStructView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h; sourceTree = ""; }; + 517BA0AEE611A3EDA4D037DC50445C31 /* FIRInstanceIDAuthKeyChain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDAuthKeyChain.h; path = Firebase/InstanceID/FIRInstanceIDAuthKeyChain.h; sourceTree = ""; }; + 521B1F8C5A8456AB129BA3C943C8201A /* FIRInstanceIDKeyPair.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDKeyPair.h; path = Firebase/InstanceID/FIRInstanceIDKeyPair.h; sourceTree = ""; }; + 522925296C99DA26C4F3137E76AC31EC /* GULNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULNSData+zlib.h"; path = "GoogleUtilities/NSData+zlib/GULNSData+zlib.h"; sourceTree = ""; }; + 525826DB985FD6E12361ED70057AFF74 /* UIKitExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIKitExtension.swift; path = Sources/Extensions/UIKitExtension.swift; sourceTree = ""; }; + 5265EED62F0757D32BAC12BDD1094797 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; + 5286961235DD80FE4A844AC1422D108A /* GDTCORUploadCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadCoordinator.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m; sourceTree = ""; }; + 534B1C2ADF835731FE745F74CC9B8AE6 /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = Firebase/Core/FIROptions.m; sourceTree = ""; }; + 53554BEFA2F03FEF8851800213876779 /* GDTCORLifecycle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORLifecycle.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h; sourceTree = ""; }; + 53591F9F963F74B587AE9BA3ED2F1420 /* FLEXImagePreviewViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImagePreviewViewController.h; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.h; sourceTree = ""; }; + 53F5526FBBF15637B271AE7F3ED23713 /* async_open_task.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = async_open_task.cpp; path = Realm/ObjectStore/src/sync/async_open_task.cpp; sourceTree = ""; }; + 53F75BCCE0FCAD663E6F68F226C60A76 /* FIRCoreDiagnosticsDateFileStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsDateFileStorage.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnosticsDateFileStorage.h; sourceTree = ""; }; + 543BA0788A83512AEA324A36B13F3151 /* RLMRealmConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration.h; path = include/RLMRealmConfiguration.h; sourceTree = ""; }; + 5467B19843BBFFC2B5C5CC4930C78D27 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5483C97D916FE2B80E363A633FD362C1 /* partial_sync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = partial_sync.cpp; path = Realm/ObjectStore/src/sync/partial_sync.cpp; sourceTree = ""; }; + 5485C62ADD4CFB40CECEAE0227D3A4D1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 549D0CF989CC962B006E308E311B147E /* RLMProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMProperty.mm; path = Realm/RLMProperty.mm; sourceTree = ""; }; + 54F84112C4D6578FEAE6A6177B43B9F8 /* GDTCORRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h; sourceTree = ""; }; + 5512301E4530FC1B7DB10725DCBE5BF3 /* GDTCORUploadPackage_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h; sourceTree = ""; }; + 5555CE85CF436D7950C2B6E4C70A40AA /* Nuke-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nuke-dummy.m"; sourceTree = ""; }; + 55B0D0ED129D0BAA2EC3D148D811690C /* RLMObservation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObservation.mm; path = Realm/RLMObservation.mm; sourceTree = ""; }; + 55F23D231BC9A96094EC1846342E3DEA /* Slider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Slider.swift; path = MobilePlayer/Views/Slider.swift; sourceTree = ""; }; + 566F5658677DB157D7BF7C4DD8983EE4 /* DifferenceKit-Core-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DifferenceKit-Core-dummy.m"; path = "../DifferenceKit-Core/DifferenceKit-Core-dummy.m"; sourceTree = ""; }; + 56E4FB506218FF0C517D028C5031D735 /* FLEXArgumentInputNotSupportedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNotSupportedView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h; sourceTree = ""; }; + 5768A14CC35F39A7CCACFFB986E8C9CD /* GULLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerLevel.h; path = GoogleUtilities/Logger/Public/GULLoggerLevel.h; sourceTree = ""; }; + 57925932393FBA35783E34A33BD02D4C /* GULNetworkConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkConstants.m; path = GoogleUtilities/Network/GULNetworkConstants.m; sourceTree = ""; }; + 5796BCEB36FB1F2371522F782AC2E75E /* FIRIMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRIMessageCode.h; path = Firebase/InstanceID/FIRIMessageCode.h; sourceTree = ""; }; + 57AB6A94F6BB964431B5FE7EA3FFA6E8 /* FLEXNetworkTransactionTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionTableViewCell.m; path = Classes/Network/FLEXNetworkTransactionTableViewCell.m; sourceTree = ""; }; + 57D21477E4D8AED10159C230030BBF16 /* SwipeTransitionLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeTransitionLayout.swift; path = Source/SwipeTransitionLayout.swift; sourceTree = ""; }; + 57F1ADA4F2EB2D5FACBE9BBD87069EEC /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Frameworks/FirebaseAnalytics.framework; sourceTree = ""; }; + 5809A23FC460F7E42971D1127D624334 /* FLEXMultilineTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultilineTableViewCell.m; path = Classes/Utility/FLEXMultilineTableViewCell.m; sourceTree = ""; }; + 5834E6B4283F1EAE5EEE58BDB7DEA354 /* FLEXClassExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassExplorerViewController.h; path = Classes/ObjectExplorers/FLEXClassExplorerViewController.h; sourceTree = ""; }; + 5879D2818EB85C10A3C924D370F321D8 /* FLEXNetworkSettingsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkSettingsTableViewController.h; path = Classes/Network/FLEXNetworkSettingsTableViewController.h; sourceTree = ""; }; + 589513B8C9D767B2B99A6C9D97C1E61C /* ImageViewerController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = ImageViewerController.xib; path = ImageViewer/Resources/ImageViewerController.xib; sourceTree = ""; }; + 58A2FD0A34545BB56A4A26CF2B959B31 /* YoutubeParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YoutubeParser.swift; path = MobilePlayer/Parsers/YoutubeParser.swift; sourceTree = ""; }; + 58AD769B3AA05A5384CB65124EBB7847 /* RLMCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection.h; path = include/RLMCollection.h; sourceTree = ""; }; + 591595C792165BF691748D49E3D67E5E /* pt-PT.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "pt-PT.lproj"; path = "Composer/Assets/pt-PT.lproj"; sourceTree = ""; }; + 5967C3FFFEDB39BC24D84E5476E1899F /* ComposerLocalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerLocalizable.swift; path = Composer/Classes/Library/ComposerLocalizable.swift; sourceTree = ""; }; + 596C24ECB2DA6F52B91F85F5E18D737A /* RLMObjectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase.h; path = include/RLMObjectBase.h; sourceTree = ""; }; + 59CC772EADF19BA70EDB311976B240BE /* GDTCORDataFuture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORDataFuture.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORDataFuture.h; sourceTree = ""; }; + 5A5225832DB8FAD295998745FA0CE297 /* RealmConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmConfiguration.swift; path = RealmSwift/RealmConfiguration.swift; sourceTree = ""; }; + 5A5730720CC001C4B89299C34A6BA600 /* ComposerViewExpandedDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerViewExpandedDelegate.swift; path = Composer/Classes/Delegate/ComposerViewExpandedDelegate.swift; sourceTree = ""; }; + 5ADE7CAEDF81F7259C12A85604FDFCC5 /* NSError+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSError+OAuthSwift.swift"; path = "Sources/NSError+OAuthSwift.swift"; sourceTree = ""; }; + 5B49018733F2767C7C3ECECA516A9373 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = Firebase/Core/Private/FIRDependency.h; sourceTree = ""; }; + 5B60448F29F9201EE1732B9AFDC5AAE1 /* RLMRealmConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration_Private.h; path = include/RLMRealmConfiguration_Private.h; sourceTree = ""; }; + 5BD2B8BD11FF89E41585E1D8C00D48CB /* RealmSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.xcconfig; sourceTree = ""; }; + 5C1F641F2DFD16983B82C393F16B35E4 /* semver-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "semver-dummy.m"; sourceTree = ""; }; + 5C3A32113E8789239D6091DB44CA22F3 /* FLEXFileBrowserTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserTableViewController.h; path = Classes/GlobalStateExplorers/FLEXFileBrowserTableViewController.h; sourceTree = ""; }; + 5C754595AEFD579EDC883D63AD2A265D /* RLMProperty_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty_Private.h; path = include/RLMProperty_Private.h; sourceTree = ""; }; + 5D1C1596071C2BFDB85EB7649FC7AA78 /* FIRInstanceIDBackupExcludedPlist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDBackupExcludedPlist.h; path = Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.h; sourceTree = ""; }; + 5D2EB66643CB492D65162C0A26E42508 /* Bar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bar.swift; path = MobilePlayer/Views/Bar.swift; sourceTree = ""; }; + 5DF8DDC1BDB2A865CCB609C58DEA7E7F /* ImageViewerTransitioningHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerTransitioningHandler.swift; path = ImageViewer/Transitions/ImageViewerTransitioningHandler.swift; sourceTree = ""; }; + 5E2F6FF40F907B90E73CA347B6BF0790 /* 1Password.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = 1Password.xcassets; sourceTree = ""; }; + 5E95F1576F7B3F17BDF7646E98194D21 /* RLMSyncPermission.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermission.mm; path = Realm/RLMSyncPermission.mm; sourceTree = ""; }; + 5EB8169A25F00A4FB6C295A550C47C7D /* 1PasswordExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "1PasswordExtension-dummy.m"; sourceTree = ""; }; + 5F0E935100663F397DC59571E01310FD /* RLMListBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMListBase.mm; path = Realm/RLMListBase.mm; sourceTree = ""; }; + 5F6E7C077B88EF82B8AF91B72214EB68 /* FLEXClassesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXClassesTableViewController.h; sourceTree = ""; }; + 5F807B8A7070CC2322765778DB6CCB1E /* keychain_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = keychain_helper.cpp; path = Realm/ObjectStore/src/impl/apple/keychain_helper.cpp; sourceTree = ""; }; + 5F99E7A9F6EFD4D00C758C67B8B06886 /* Realm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Realm.swift; path = RealmSwift/Realm.swift; sourceTree = ""; }; + 5FD9F74534C91B7E1D2BBFAE7EE371F3 /* RLMObjectSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectSchema.mm; path = Realm/RLMObjectSchema.mm; sourceTree = ""; }; + 5FE01589EB30D05B93F78B1C1163A174 /* NSError+RLMSync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+RLMSync.h"; path = "include/NSError+RLMSync.h"; sourceTree = ""; }; + 5FE6AAE37D5DA3F65F7F6F0ED0B2BE38 /* GDTCORPlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORPlatform.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m; sourceTree = ""; }; + 604EAB6CB49583063DB671550CC58F54 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; + 6060D9993EBCE2E7D112A989CCA17B9F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 60901E859E25B865CE71347B69BDCD23 /* ObjectSchema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectSchema.swift; path = RealmSwift/ObjectSchema.swift; sourceTree = ""; }; + 60B953365C306AC919244A432B9B6AA7 /* Realm.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Realm.modulemap; sourceTree = ""; }; + 60F419714174CBB8CB4FB48616B4B709 /* FIRInstanceID_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceID_Private.h; path = Firebase/InstanceID/Private/FIRInstanceID_Private.h; sourceTree = ""; }; + 613A346D7E8B63CA29D2782C1FFB6B5A /* FLEXDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h; sourceTree = ""; }; + 6172CA547E3FCB08A8E9A825577A2CB8 /* FLEXUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXUtility.h; path = Classes/Utility/FLEXUtility.h; sourceTree = ""; }; + 61C5A3E797137A91F5B65F68A0F4C64E /* placeholder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = placeholder.cpp; path = Realm/ObjectStore/src/placeholder.cpp; sourceTree = ""; }; + 61E38EF8A5FD00B3754DD984789CBAB0 /* OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwift.swift; path = Sources/OAuthSwift.swift; sourceTree = ""; }; + 62029B76B1FEB8FC43398AB3B7CF855E /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Sources/Starscream/WebSocket.swift; sourceTree = ""; }; + 6286F9417AA3B7400D144512191E886F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6295E8C80C600AF653A12F8814869FC7 /* Realm.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.xcconfig; sourceTree = ""; }; + 62E91B314B649BED5910E91372D61583 /* FIRInstanceIDTokenOperation+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRInstanceIDTokenOperation+Private.h"; path = "Firebase/InstanceID/FIRInstanceIDTokenOperation+Private.h"; sourceTree = ""; }; + 6346F7F3927A405432D48857B4CA7010 /* FLEXTableContentCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableContentCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.m; sourceTree = ""; }; + 638EDBA2170A4F4B26DACF7761C6E5E2 /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = ""; }; + 63B962EB0CCE584A79BACF4B1D4B6420 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; + 645966923591E09FA495B0F104809C51 /* RLMRealmConfiguration+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealmConfiguration+Sync.h"; path = "include/RLMRealmConfiguration+Sync.h"; sourceTree = ""; }; + 648D171C388E5697D5B498C78A9FBD93 /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; + 64912F855ADE901A8E260E80CA9AB943 /* RLMObjectStore.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectStore.mm; path = Realm/RLMObjectStore.mm; sourceTree = ""; }; + 64B8785594CD15968588D667E608A262 /* FLEX.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FLEX.modulemap; sourceTree = ""; }; + 64E9C7D6259F376224794B4AFA224069 /* GDTCORStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORStorage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORStorage.m; sourceTree = ""; }; + 6522B6B0D23405FCDC2F28A0949C8436 /* FIRErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrors.h; path = Firebase/Core/Private/FIRErrors.h; sourceTree = ""; }; + 652953531342C5EF100D21F054BBC19A /* GDTCORTransformer_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h; sourceTree = ""; }; + 667768AC72DD40E30955794FD871A9CB /* FLEXSQLiteDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSQLiteDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h; sourceTree = ""; }; + 667C0A85342E19C0E3349157DF91CE50 /* FLAnimatedImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLAnimatedImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 673BF96AF5A8014F8BAB0D97975C7E9D /* FIRInstanceIDAuthKeyChain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDAuthKeyChain.m; path = Firebase/InstanceID/FIRInstanceIDAuthKeyChain.m; sourceTree = ""; }; + 675E008DF604CD041F3F7364DF3689EE /* OAuthSwiftCredential.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftCredential.swift; path = Sources/OAuthSwiftCredential.swift; sourceTree = ""; }; + 67C0BFC6B66549562FC2B2BFD2BA2166 /* GoogleUtilities-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-prefix.pch"; sourceTree = ""; }; + 67C69364D596975B084DEC6EF4622273 /* FIRInstanceIDTokenFetchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenFetchOperation.m; path = Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.m; sourceTree = ""; }; + 67DB6A3044EC3098EA6BF3F48E02C8C7 /* FIRInstanceIDStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDStore.m; path = Firebase/InstanceID/FIRInstanceIDStore.m; sourceTree = ""; }; + 68458971E097FC27F17EABB29A486FEF /* FLEXArgumentInputView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m; sourceTree = ""; }; + 68BB330102EBD07832A5BD4D429F4F00 /* FLEXObjectExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerViewController.m; path = Classes/ObjectExplorers/FLEXObjectExplorerViewController.m; sourceTree = ""; }; + 68DEC4FFFCF95801F5F075CCA18C7A9D /* DataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataCache.swift; path = Sources/DataCache.swift; sourceTree = ""; }; + 68F06A304100450C387FB9311038FE5B /* FLEXRealmDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRealmDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m; sourceTree = ""; }; + 6929B5C2D09D7D72BBF19F56C05EC210 /* MobilePlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MobilePlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6981CC7C504B40E86D2EC43A7EB18683 /* RLMCollection_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection_Private.h; path = include/RLMCollection_Private.h; sourceTree = ""; }; + 69ED44786F808CA2A67FF3C1D3E756D4 /* FLAnimatedImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLAnimatedImage-umbrella.h"; sourceTree = ""; }; + 6A5863EAFA18463A3EF8CDC435506C41 /* MLShareButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLShareButton@2x.png"; path = "MobilePlayer/Resources/MLShareButton@2x.png"; sourceTree = ""; }; + 6A65A1B936FDE1E47ADE47217091A9D2 /* FLEXFieldEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorViewController.h; path = Classes/Editing/FLEXFieldEditorViewController.h; sourceTree = ""; }; + 6C44A89B9582DF57EAB6881BD8D020A7 /* ImageViewerDismissalTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerDismissalTransition.swift; path = ImageViewer/Transitions/ImageViewerDismissalTransition.swift; sourceTree = ""; }; + 6CDB084DECE37BD419E3FC1B9DBD56FB /* FLEXHierarchyTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewCell.m; path = Classes/ViewHierarchy/FLEXHierarchyTableViewCell.m; sourceTree = ""; }; + 6D59F57C2DE709249994BDCD4D5C5DF2 /* SwiftVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftVersion.swift; path = RealmSwift/SwiftVersion.swift; sourceTree = ""; }; + 6E04D152C917E6A4B4BCBCB348E95736 /* GDTCCTNanopbHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTNanopbHelpers.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h; sourceTree = ""; }; + 6E3A4D86935AA10FC4A4FAD810167E83 /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = ImageViewer/Utilities.swift; sourceTree = ""; }; + 6E6A242810F9CD2065D9E85F884DFFF1 /* FIRComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponent.m; path = Firebase/Core/FIRComponent.m; sourceTree = ""; }; + 6E9126CD24773AA6731E99E39F7B9D8F /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; + 6F64E581EB77FE5DE0175695ACD1FF24 /* FLEXTableLeftCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableLeftCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.h; sourceTree = ""; }; + 6FC246F25B9235D731897D446A4BC163 /* semver-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "semver-prefix.pch"; sourceTree = ""; }; + 701A5399051E42039AA8BB820B4DB17C /* FLEX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FLEX-dummy.m"; sourceTree = ""; }; + 7059A7B2314772AF5D37AF6D6A5BD26F /* FLEXNetworkTransactionTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionTableViewCell.h; path = Classes/Network/FLEXNetworkTransactionTableViewCell.h; sourceTree = ""; }; + 706E9B1184AE5DBA8F0FA83DC07F030F /* GULUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULUserDefaults.h; path = GoogleUtilities/UserDefaults/Private/GULUserDefaults.h; sourceTree = ""; }; + 70AE76095E62308A5E153F59913A4E41 /* RLMSyncUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil.h; path = include/RLMSyncUtil.h; sourceTree = ""; }; + 70AF9C8F8E0DDDFD11281DC4E6C80CBF /* DifferenceKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DifferenceKit-dummy.m"; sourceTree = ""; }; + 7124E09AC87BC2040B9F6603623CBB8E /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RealmSwift/Optional.swift; sourceTree = ""; }; + 71BEB2A642A1CFEE3A7DBFAA9FB7E22D /* OnePasswordExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OnePasswordExtension.h; sourceTree = ""; }; + 720BA95CF5D5C7B0F53B54B0E88AB8C7 /* RLMSyncSession.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSession.mm; path = Realm/RLMSyncSession.mm; sourceTree = ""; }; + 72B9BCE02F0A919F86F86B3CD72D6DB5 /* GoogleDataTransportCCTSupport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransportCCTSupport-umbrella.h"; sourceTree = ""; }; + 72E622667770751D5D5C5FB0DDE4EAFB /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RealmSwift/Error.swift; sourceTree = ""; }; + 73099ACD75ABCF1C1A4C6588A2915674 /* FLEXArgumentInputFontsPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontsPickerView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.h; sourceTree = ""; }; + 732EA36BE157F2550EB21BB721F9A7EB /* RLMSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSchema.mm; path = Realm/RLMSchema.mm; sourceTree = ""; }; + 733B701552FBE4C30E4FDB0D7F824707 /* ComposerAddon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerAddon.swift; path = Composer/Classes/Addons/ComposerAddon.swift; sourceTree = ""; }; + 736C373A6A91E4A983270AECDED523A0 /* RLMListBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMListBase.h; path = include/RLMListBase.h; sourceTree = ""; }; + 73B4D3B3BEBAF159B62020B879FCF0EA /* FLEXNetworkObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkObserver.m; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.m; sourceTree = ""; }; + 747C33DEBD796CE43D38F560A39AF57C /* FLEXGlobalsTableViewControllerEntry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsTableViewControllerEntry.m; path = Classes/ObjectExplorers/FLEXGlobalsTableViewControllerEntry.m; sourceTree = ""; }; + 748C8BEBB0983FE14C304460F2F525F9 /* results_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results_notifier.cpp; path = Realm/ObjectStore/src/impl/results_notifier.cpp; sourceTree = ""; }; + 74B1E6E7B5764B8C8B75477CBDB6652F /* FLEXSystemLogTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogTableViewCell.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.h; sourceTree = ""; }; + 752434F4B72CFEE188D59FCC0CB0B42C /* FLEXNetworkRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkRecorder.h; path = Classes/Network/FLEXNetworkRecorder.h; sourceTree = ""; }; + 7527C818345BFC0DA6BF4609B55BF949 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 758087B03E6E66E5B8177915CC535762 /* GULReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULReachabilityChecker.m; path = GoogleUtilities/Reachability/GULReachabilityChecker.m; sourceTree = ""; }; + 75886D6DEC25942D992FD8D087E5B5C6 /* FLEXNetworkHistoryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkHistoryTableViewController.h; path = Classes/Network/FLEXNetworkHistoryTableViewController.h; sourceTree = ""; }; + 75C4A6A8DEBEA34D0D0C6E1069D4B27C /* GDTCORTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransport.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m; sourceTree = ""; }; + 75D6768FC46D3811AF3F851EA334181B /* FIRErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrorCode.h; path = Firebase/Core/Private/FIRErrorCode.h; sourceTree = ""; }; + 75E794D0E68FD1F29EE39F74A63AA8C5 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = Firebase/Core/FIRVersion.m; sourceTree = ""; }; + 7608A9C444EFF50ED52ABDB083991790 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 765BE420B1E8A3A67885C25396CAAE85 /* Pods-Rocket.Chat.ShareExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Rocket.Chat.ShareExtension-dummy.m"; sourceTree = ""; }; + 766984AFDC283FA8A32FFFC452888DBB /* FIRInstanceIDTokenDeleteOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenDeleteOperation.h; path = Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.h; sourceTree = ""; }; + 769CF561DAD104A360791ABF7C4EC40B /* FIRInstanceIDKeyPairUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDKeyPairUtilities.h; path = Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.h; sourceTree = ""; }; + 76C89DD7EAA8F2EA32E98A634C211EC1 /* GDTCORStorage_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorage_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage_Private.h; sourceTree = ""; }; + 7703BAE82F847CB92E5E240CDAE05BFF /* uuid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = uuid.cpp; path = Realm/ObjectStore/src/util/uuid.cpp; sourceTree = ""; }; + 779B16D74E07121482571AF4AE146287 /* GULLoggerCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerCodes.h; path = GoogleUtilities/Common/GULLoggerCodes.h; sourceTree = ""; }; + 77BFD6FF593B820265C1E63AAC4E82EF /* RLMSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema_Private.h; path = include/RLMSchema_Private.h; sourceTree = ""; }; + 77D504B61F21F59E8B4EFEE12E5EF943 /* FLEXArgumentInputDateView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputDateView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m; sourceTree = ""; }; + 78635239CA2877A9734AFB89A1BE0286 /* UIImage+CocoaPods.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+CocoaPods.swift"; path = "MobilePlayer/Extensions/UIImage+CocoaPods.swift"; sourceTree = ""; }; + 78F431B816E8AC30DF33810B47BB39E0 /* Pods-Rocket.Chat.ShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.release.xcconfig"; sourceTree = ""; }; + 79383392028C123A6041B15F53B6E4DE /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_decode.c; sourceTree = ""; }; + 7949294F494D34DAADC124A1F418F764 /* FLEXMultilineTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultilineTableViewCell.h; path = Classes/Utility/FLEXMultilineTableViewCell.h; sourceTree = ""; }; + 79C24105DC6BF9265711D9E10B5E3BBD /* GoogleDataTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleDataTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h; sourceTree = ""; }; + 79FDE27E98FBCEEBB66CBA3C85035AA5 /* FIRInstanceIDStringEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDStringEncoding.h; path = Firebase/InstanceID/FIRInstanceIDStringEncoding.h; sourceTree = ""; }; + 7A011A0AD0F974D4D6949C288986FCBE /* Pods-Rocket.ChatTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Rocket.ChatTests-acknowledgements.markdown"; sourceTree = ""; }; + 7A688DDB6C090301B7A70E2F56CAE806 /* RecordAudioView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecordAudioView.swift; path = Composer/Classes/Overlays/RecordAudioView.swift; sourceTree = ""; }; + 7A794DEA627D9D8B55FBDBFBC89A4545 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; + 7A840DE10837EE801ED73D5427086D9F /* 1PasswordExtension-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "1PasswordExtension-prefix.pch"; sourceTree = ""; }; + 7B0A1703E9239CF6CFFEF5B2C7896C9D /* TextHintCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextHintCell.swift; path = Composer/Classes/Addons/Hints/TextHintCell.swift; sourceTree = ""; }; + 7B147E7FD6FA31C3E3F404A9F91659FF /* transact_log_handler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = transact_log_handler.cpp; path = Realm/ObjectStore/src/impl/transact_log_handler.cpp; sourceTree = ""; }; + 7B25BCE9A6604A53365DDE51EF7803D6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7B72D6D3D956932769C1A2FC4725DBC6 /* RLMSyncSessionRefreshHandle.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSessionRefreshHandle.mm; path = Realm/RLMSyncSessionRefreshHandle.mm; sourceTree = ""; }; + 7BAF8708420C92D15160E38955AC0552 /* GDTCORTargets.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTargets.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h; sourceTree = ""; }; + 7C13C60C6A1F6C50A5E95F1B99744562 /* Data+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+OAuthSwift.swift"; path = "Sources/Data+OAuthSwift.swift"; sourceTree = ""; }; + 7C9E3BED955DF0A14EB069D1EE908A77 /* GDTCCTPrioritizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTPrioritizer.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m; sourceTree = ""; }; + 7CB58F2F80147A42B7BE3356509CA6AC /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; }; + 7CEE5C71735650B508E41F081602255C /* RLMObjectBase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Private.h; path = include/RLMObjectBase_Private.h; sourceTree = ""; }; + 7D04A209DDA5CEA846E43E77126A28EC /* Pods_Rocket_Chat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Rocket_Chat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7D1392F4045F7AC16AAE3CB325BA32B2 /* FLEXNetworkTransactionDetailTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionDetailTableViewController.m; path = Classes/Network/FLEXNetworkTransactionDetailTableViewController.m; sourceTree = ""; }; + 7D214BAA46366DEA7A9A5ECEC0966591 /* RLMConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMConstants.h; path = include/RLMConstants.h; sourceTree = ""; }; + 7D405C1509AD19201F0ED60C0FEB3158 /* FLEXNetworkCurlLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkCurlLogger.m; path = Classes/Network/FLEXNetworkCurlLogger.m; sourceTree = ""; }; + 7D8C56882FB12EDB72D35BD47CC0EB40 /* Pods-Rocket.Chat.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.beta.xcconfig"; sourceTree = ""; }; + 7E06B26C6906A781AC65EE095EA63AC9 /* HintsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HintsView.swift; path = Composer/Classes/Addons/Hints/HintsView.swift; sourceTree = ""; }; + 7E2190E8A37F85A61F2FADB6FEDD26F8 /* FLEXNetworkCurlLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkCurlLogger.h; path = Classes/Network/FLEXNetworkCurlLogger.h; sourceTree = ""; }; + 7E748D746DD1F48DB60F9B1577B2A9C2 /* Pods-Rocket.ChatTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.release.xcconfig"; sourceTree = ""; }; + 7EBB63996160FF52AFCB093E4C36F2ED /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Starscream.modulemap; sourceTree = ""; }; + 7F08F04244028A076C0A024B7958BC78 /* MBProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.xcconfig; sourceTree = ""; }; + 7F63F6C4D2A75EA40AEED6B63AA1D496 /* FLEXTableListViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableListViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m; sourceTree = ""; }; + 7F89B4417CE3620F4CEB93792972743F /* GDTCORLifecycle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORLifecycle.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m; sourceTree = ""; }; + 7FBFBB220D94BBB269EEF2095C9B26C5 /* pt-BR.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "pt-BR.lproj"; path = "Composer/Assets/pt-BR.lproj"; sourceTree = ""; }; + 80B89DF87951E100445B4206D3A5CBE4 /* FLEXNetworkTransactionDetailTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionDetailTableViewController.h; path = Classes/Network/FLEXNetworkTransactionDetailTableViewController.h; sourceTree = ""; }; + 80E7CC2FD823AC8FD597FFED0A80973E /* SimpleImageViewer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SimpleImageViewer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 80E992B6289A4AD51727B86B879DBBF7 /* FLEXRealmDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDefines.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDefines.h; sourceTree = ""; }; + 813A07E53D0F9E74B18E65E3A6B35D11 /* FIRInstanceIDAPNSInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDAPNSInfo.m; path = Firebase/InstanceID/FIRInstanceIDAPNSInfo.m; sourceTree = ""; }; + 81C230E1359A248A1F79076DDA738ABD /* FLEXExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerViewController.m; path = Classes/ExplorerInterface/FLEXExplorerViewController.m; sourceTree = ""; }; + 81F7DE71E9148B7DADB726764B12A930 /* list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list.cpp; path = Realm/ObjectStore/src/list.cpp; sourceTree = ""; }; + 821D0C129E3ABAB04A228CEEC4A5B675 /* FLEXHierarchyTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewController.h; path = Classes/ViewHierarchy/FLEXHierarchyTableViewController.h; sourceTree = ""; }; + 829D08D16E985DB5AA0A40EED922D5C8 /* Realm-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Realm-dummy.m"; sourceTree = ""; }; + 82A56D7E60C16F7D5201EC514277E267 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 837520921B035BB155A52BF9BBF7F39F /* FLEXIvarEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXIvarEditorViewController.h; path = Classes/Editing/FLEXIvarEditorViewController.h; sourceTree = ""; }; + 846B59AD6F4744DB86368DF8AF0C22B7 /* DifferenceKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DifferenceKit-prefix.pch"; sourceTree = ""; }; + 84FA4E70EC930EC46FDAEF1F18D37852 /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_encode.c; sourceTree = ""; }; + 84FCBC6248717B708DD41730B2E7F305 /* ToggleButtonConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToggleButtonConfig.swift; path = MobilePlayer/Config/ToggleButtonConfig.swift; sourceTree = ""; }; + 8508C05B93A6E1C4E2B4DE212ED5F14F /* SimpleImageViewer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SimpleImageViewer.xcconfig; sourceTree = ""; }; + 85146536AE791582909D81B922676C3B /* SwipeTableViewCellDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeTableViewCellDelegate.swift; path = Source/SwipeTableViewCellDelegate.swift; sourceTree = ""; }; + 851F301798BC5F6F1534B8F9443D5564 /* RLMUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUtil.mm; path = Realm/RLMUtil.mm; sourceTree = ""; }; + 8548AE0B3848ECFFB88A9B54DD9C2985 /* ResourceBundle-MobilePlayer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MobilePlayer-Info.plist"; sourceTree = ""; }; + 859FFDD68B5133014849E0FD10F7A57D /* HMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HMAC.swift; path = Sources/HMAC.swift; sourceTree = ""; }; + 85A87199244DDF3569B8B05702F69801 /* NSError+FIRInstanceID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+FIRInstanceID.m"; path = "Firebase/InstanceID/NSError+FIRInstanceID.m"; sourceTree = ""; }; + 8696BFF9A70326F7361D5BD15A6BBC54 /* GULMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULMutableDictionary.m; path = GoogleUtilities/Network/GULMutableDictionary.m; sourceTree = ""; }; + 86F57EFE8DCE74DA586425C2933386EB /* UIColor+Hex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Hex.swift"; path = "MobilePlayer/Extensions/UIColor+Hex.swift"; sourceTree = ""; }; + 87348ED25040782AD5987C26638802FB /* semver.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = semver.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 874C8E9055E6642AF2AB03EB7E5AEA01 /* semver.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = semver.xcconfig; sourceTree = ""; }; + 8786D03212235D85EB47965BCCC45EF6 /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 87CF9B28D6601476F2D0B65BCDCAE838 /* FLEXArgumentInputTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputTextView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m; sourceTree = ""; }; + 8815D8023D368F55C005F3CB40D3707E /* NSError+FIRInstanceID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+FIRInstanceID.h"; path = "Firebase/InstanceID/NSError+FIRInstanceID.h"; sourceTree = ""; }; + 889836AB075D206595A1AD51D66BAD5E /* FLAnimatedImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLAnimatedImage.xcconfig; sourceTree = ""; }; + 88BB70907AA7570E038C817E9F5A3C65 /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = RealmSwift/Migration.swift; sourceTree = ""; }; + 891B93510720F244C576109AA527296D /* GULReachabilityMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityMessageCode.h; path = GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h; sourceTree = ""; }; + 89BD0EECE7938AF9316B74B5BC9BBAD5 /* FLAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLAnimatedImage.h; path = FLAnimatedImage/FLAnimatedImage.h; sourceTree = ""; }; + 89C5A359A75F03883BD32AB65B7CB731 /* ImageViewerPresentationTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerPresentationTransition.swift; path = ImageViewer/Transitions/ImageViewerPresentationTransition.swift; sourceTree = ""; }; + 8A5D803D69DB158ECDD888F64C78C3CD /* GDTCORTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h; sourceTree = ""; }; + 8A6EF5CC39175C5193A35A4F1521BDB7 /* RLMResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults.h; path = include/RLMResults.h; sourceTree = ""; }; + 8A8380138033FB563AE69397C08BC07C /* ImageViewer-Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = "ImageViewer-Assets.xcassets"; path = "ImageViewer/Resources/ImageViewer-Assets.xcassets"; sourceTree = ""; }; + 8A934ED089667DDAE28628D4D38495F2 /* MLPauseButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLPauseButton.png; path = MobilePlayer/Resources/MLPauseButton.png; sourceTree = ""; }; + 8AD01B12BD14478F1AA1E30519ABC33C /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; + 8B18620F19478509A721E58CA95BB6DA /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = Firebase/Core/Private/FIRComponentType.h; sourceTree = ""; }; + 8B8A5B05E6D5702E2C4A5AB6791A739A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8B99745914AAEA919C2A3E36CCC6AF19 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8BD69A9042FBDDA3D5FBFDA917668DB4 /* MLPlayButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLPlayButton.png; path = MobilePlayer/Resources/MLPlayButton.png; sourceTree = ""; }; + 8BE1FEBCD1217DC8D2CC41DC570834BC /* FLEXToolbarItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXToolbarItem.m; path = Classes/Toolbar/FLEXToolbarItem.m; sourceTree = ""; }; + 8C5CB48437C552A81CA9FF4440631436 /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; + 8C75B556A12C59E5F876646A8617DC57 /* ButtonConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonConfig.swift; path = MobilePlayer/Config/ButtonConfig.swift; sourceTree = ""; }; + 8C7B68AC3BD9C08CAE846306E2405DFA /* GULReachabilityChecker+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULReachabilityChecker+Internal.h"; path = "GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h"; sourceTree = ""; }; + 8CF90CDFD7E7ADDCED449A110432FAD4 /* OAuthSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = OAuthSwift.modulemap; sourceTree = ""; }; + 8D3715622954BC6F0320657DF292E19C /* Pods-Rocket.Chat.ShareExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Rocket.Chat.ShareExtension.modulemap"; sourceTree = ""; }; + 8D5C3247F49FF7F3621387774E2063C9 /* GULNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GULNSData+zlib.m"; path = "GoogleUtilities/NSData+zlib/GULNSData+zlib.m"; sourceTree = ""; }; + 8DA4CC1B8469807B05A89DFC730B0CF4 /* Pods-Rocket.Chat-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Rocket.Chat-acknowledgements.markdown"; sourceTree = ""; }; + 8DF6FB175BB8D880ABBEB1471CCDD82E /* FirebaseCoreDiagnostics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.xcconfig; sourceTree = ""; }; + 8E31DD39569C8D361EFF997E28C2A7B6 /* FIRDependency.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDependency.m; path = Firebase/Core/FIRDependency.m; sourceTree = ""; }; + 8E52165A1AEC56E61127267FBF1F8C2B /* RCMarkdownParser.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RCMarkdownParser.modulemap; sourceTree = ""; }; + 8E7A629FD8D53021106BE5F53AB7A663 /* FIRInstanceID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceID.m; path = Firebase/InstanceID/FIRInstanceID.m; sourceTree = ""; }; + 8E897B0A8D4E34D0B3103DE27B8F4017 /* DifferenceKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DifferenceKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8F219197B7A42F3B6CE329DD05EBD187 /* SSLSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLSecurity.swift; path = Sources/Starscream/SSLSecurity.swift; sourceTree = ""; }; + 8F7962B25D138580D910445045E19398 /* OAuthSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OAuthSwift-prefix.pch"; sourceTree = ""; }; + 8FA8A25D35C42FEBFAE0E1CEC0B1EBA5 /* FLEXWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWebViewController.m; path = Classes/GlobalStateExplorers/FLEXWebViewController.m; sourceTree = ""; }; + 8FB2BF04CABD7B3DF7F571A156EACBE3 /* FIRInstanceID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceID.h; path = Firebase/InstanceID/Public/FIRInstanceID.h; sourceTree = ""; }; + 8FD723202526D2D9F7AEF76F4F56F7D2 /* RLMSyncUtil_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil_Private.h; path = include/RLMSyncUtil_Private.h; sourceTree = ""; }; + 900759CACE9016B276291B411EAA6847 /* SimpleImageViewer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SimpleImageViewer-dummy.m"; sourceTree = ""; }; + 90805EA5BB276B3C559EF22AEACD1159 /* String+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+OAuthSwift.swift"; path = "Sources/String+OAuthSwift.swift"; sourceTree = ""; }; + 909F5C4480D7E82B0877A398AD694FEC /* Pods-Rocket.ChatTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Rocket.ChatTests-dummy.m"; sourceTree = ""; }; + 90C4BE9B2BC6BC2FAE00D9AB226F7B2F /* FLEX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLEX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 90CA305F1D9AA40BC0AB5D63513D17C1 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = RealmSwift/Schema.swift; sourceTree = ""; }; + 91962B6FEB8F1FCD5D87ACD4D3AD088E /* Pods_Rocket_Chat_ShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Rocket_Chat_ShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 91EAA5F02AA78F3BBD0A44FFC033E8E1 /* MobilePlayerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerViewController.swift; path = MobilePlayer/MobilePlayerViewController.swift; sourceTree = ""; }; + 91FA07CF0F9045364D2A989AD2BC0084 /* FLEXInstancesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXInstancesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXInstancesTableViewController.h; sourceTree = ""; }; + 92509B239202C3742762E47337188E5D /* FIRInstanceIDTokenDeleteOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenDeleteOperation.m; path = Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.m; sourceTree = ""; }; + 925550252B2B50146B5913040AD7A54D /* StagedChangeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagedChangeset.swift; path = Sources/StagedChangeset.swift; sourceTree = ""; }; + 9271776212F75926BE145742D1ADFA03 /* DifferenceKit-Core-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DifferenceKit-Core-prefix.pch"; path = "../DifferenceKit-Core/DifferenceKit-Core-prefix.pch"; sourceTree = ""; }; + 9290D754AB7C64265183DF1278E843CC /* FLEXFieldEditorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorView.m; path = Classes/Editing/FLEXFieldEditorView.m; sourceTree = ""; }; + 9291E5EC9A0AF5830A95ADAD7C75F8D2 /* Algorithm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Algorithm.swift; path = Sources/Algorithm.swift; sourceTree = ""; }; + 92F22832B1F1A1E44409D465B2F87E08 /* FIRInstanceIDCheckinPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDCheckinPreferences.m; path = Firebase/InstanceID/FIRInstanceIDCheckinPreferences.m; sourceTree = ""; }; + 92FDF4F22E34B2A8614E936F909100D7 /* SwipeTableViewCell+Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeTableViewCell+Accessibility.swift"; path = "Source/SwipeTableViewCell+Accessibility.swift"; sourceTree = ""; }; + 93078337775DA9EF95DA5AA05275CB83 /* Pods-Rocket.Chat.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.test.xcconfig"; sourceTree = ""; }; + 934F21B2CD926AF13E2525BA22FA08B2 /* OAuthSwiftClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftClient.swift; path = Sources/OAuthSwiftClient.swift; sourceTree = ""; }; + 938BFA334497C2B1BBF0EAB07FB803DE /* FIRInstanceIDKeyPairStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDKeyPairStore.h; path = Firebase/InstanceID/FIRInstanceIDKeyPairStore.h; sourceTree = ""; }; + 939693AB59EC78EDA0891E4FB8801D9C /* RLMRealm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm.h; path = include/RLMRealm.h; sourceTree = ""; }; + 93A3EAC5E30C84949AC6FAA874FCF88F /* FLEXInstancesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXInstancesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXInstancesTableViewController.m; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 93ADDAD924D7252DE6A3EFDDEA9BF699 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 942073495F157FB2C816F14B898AE57E /* FIRConfigurationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfigurationInternal.h; path = Firebase/Core/Private/FIRConfigurationInternal.h; sourceTree = ""; }; + 9431C77653EE1D19A88C4E08F7197957 /* SwipeTableViewCell+Display.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeTableViewCell+Display.swift"; path = "Source/SwipeTableViewCell+Display.swift"; sourceTree = ""; }; + 9453DB1B91275B0DE135A6A1E171A208 /* SwipeCellKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwipeCellKit-dummy.m"; sourceTree = ""; }; + 949C55848999D520D3DF3AFD031E4B32 /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = Firebase/Core/FIRLogger.m; sourceTree = ""; }; + 94FE63196A56CAC7EE9069B33D5571E2 /* GDTCORStoredEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORStoredEvent.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORStoredEvent.m; sourceTree = ""; }; + 950E704FA1FE6FA1C91CA0A3BB4D3449 /* Nuke.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nuke.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95D5362E11D7CC44A575B515C029C8BB /* MobilePlayer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MobilePlayer.modulemap; sourceTree = ""; }; + 95DADAF75B1AC47824F8EA9473EBA556 /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h; sourceTree = ""; }; + 9630D8A234FBA86BE181C2C9B9E7193D /* collection_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifier.cpp; path = Realm/ObjectStore/src/impl/collection_notifier.cpp; sourceTree = ""; }; + 9694333BF52AAEFFD514D14D9CE8D9EE /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 972E480399377F1287E0EF70818C33C4 /* FIRInstanceIDTokenInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenInfo.h; path = Firebase/InstanceID/FIRInstanceIDTokenInfo.h; sourceTree = ""; }; + 9746779AD95A0598C6C174A5CC68FAB4 /* FIRInstanceIDCheckinStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDCheckinStore.m; path = Firebase/InstanceID/FIRInstanceIDCheckinStore.m; sourceTree = ""; }; + 974E74D61116A652062F8D69F7CFDBEB /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 97BB9190361F8E673F4A033B0ADF977B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 97F6EACAD24B96C06052172DEB281624 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 981A674B9313798B80322CD47CD7DF58 /* index_set.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_set.cpp; path = Realm/ObjectStore/src/index_set.cpp; sourceTree = ""; }; + 98424B33F8B2DA923D34411D0195BBD7 /* FIRInstanceIDBackupExcludedPlist.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDBackupExcludedPlist.m; path = Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.m; sourceTree = ""; }; + 9884CA4C5DEAE8438DDC5449834C4F00 /* MLCloseButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLCloseButton@2x.png"; path = "MobilePlayer/Resources/MLCloseButton@2x.png"; sourceTree = ""; }; + 98AC64352E3F48A417A5B2B7E7CF08A9 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98E2E9CE6A337D455D776E07205C8C02 /* Nuke-FLAnimatedImage-Plugin.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Nuke-FLAnimatedImage-Plugin.xcconfig"; sourceTree = ""; }; + 98EF7B2F56684B7D3B1C9597331BE43C /* GDTFLLUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTFLLUploader.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLUploader.h; sourceTree = ""; }; + 99352CC81E5B56081CE5C3A54E3A3695 /* FLEXViewControllerExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewControllerExplorerViewController.h; path = Classes/ObjectExplorers/FLEXViewControllerExplorerViewController.h; sourceTree = ""; }; + 99CC6145068429E1C620B265CC545591 /* RLMObjectBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectBase.mm; path = Realm/RLMObjectBase.mm; sourceTree = ""; }; + 9A00135644707D77F62D86FEEA0B2FD3 /* Property.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Property.swift; path = RealmSwift/Property.swift; sourceTree = ""; }; + 9A0C825B59009C4F20BB70AF02960A3C /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = ""; }; + 9A7F05242B5B31F97E28B87039A79FBD /* SwipeCellKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwipeCellKit-prefix.pch"; sourceTree = ""; }; + 9A9D3AE6168F11FFB7541CFB619DFBC9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 9AE09672F9A57A77BE6B2C6F091F1AC5 /* MLShareButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLShareButton@3x.png"; path = "MobilePlayer/Resources/MLShareButton@3x.png"; sourceTree = ""; }; + 9B67B4C26829D0F1244B61FA5CA09CE3 /* MLPlayButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPlayButton@2x.png"; path = "MobilePlayer/Resources/MLPlayButton@2x.png"; sourceTree = ""; }; + 9B8977726EDC46129DF4D5513F674F88 /* EditingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditingView.swift; path = Composer/Classes/Addons/Editing/EditingView.swift; sourceTree = ""; }; + 9D78F44859C091E3852DC821192F3B7B /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; + 9E49935ADE10E35E5C2557F818400C1C /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9EDD239601ABA432E4FCD857E67A261E /* UserHintCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserHintCell.swift; path = Composer/Classes/Addons/Hints/UserHintCell.swift; sourceTree = ""; }; + 9F608FCD47FC5F4F376C85947F6897F5 /* GoogleDataTransport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransport-umbrella.h"; sourceTree = ""; }; + 9F6A38F6BC6327DEF6689FC8A4A19298 /* RLMSyncManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncManager.mm; path = Realm/RLMSyncManager.mm; sourceTree = ""; }; + 9F7B3C2DBB715DF0BE8BFFBCF275498C /* GDTFLLPrioritizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTFLLPrioritizer.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLPrioritizer.m; sourceTree = ""; }; + 9FBB077249BA8F834579B9E4793DC9C2 /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; + 9FCA2F15A4419AA2F5390800ABCD597A /* GULOriginalIMPConvenienceMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULOriginalIMPConvenienceMacros.h; path = GoogleUtilities/MethodSwizzler/Private/GULOriginalIMPConvenienceMacros.h; sourceTree = ""; }; + 9FD4793F9E68A8FA338FD255147A30DF /* FIRInstanceIDTokenStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenStore.m; path = Firebase/InstanceID/FIRInstanceIDTokenStore.m; sourceTree = ""; }; + 9FF8AA7BB27CEB039E0221B873ADA9D8 /* ArraySection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ArraySection.swift; path = Sources/ArraySection.swift; sourceTree = ""; }; + A015DD8195DD1A2967701B1D9043B45C /* MLCloseButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLCloseButton@3x.png"; path = "MobilePlayer/Resources/MLCloseButton@3x.png"; sourceTree = ""; }; + A01F5F2805A61F331D1782E59E19A60E /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + A0493EE6B4B30B4E5BAA610D9CE45C5D /* FLEXGlobalsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsTableViewController.m; path = Classes/GlobalStateExplorers/FLEXGlobalsTableViewController.m; sourceTree = ""; }; + A0793D075EAC0D626BA709D6DD82962D /* FIRInstanceIDCheckinPreferences+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FIRInstanceIDCheckinPreferences+Internal.m"; path = "Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.m"; sourceTree = ""; }; + A082D282CA67DCF920E88D310EEB653A /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; + A08E85EF0AB940DCD9C31AFB73D8552A /* RLMRealmConfiguration+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealmConfiguration+Sync.mm"; path = "Realm/RLMRealmConfiguration+Sync.mm"; sourceTree = ""; }; + A0C520D64507F4BB0E87FCB3BF06C670 /* Starscream.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.xcconfig; sourceTree = ""; }; + A0CA7BA7D423E2FD057D1FA1A0DE3EDD /* Pods-Rocket.Chat.ShareExtension-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Rocket.Chat.ShareExtension-resources.sh"; sourceTree = ""; }; + A137D6CB291086A8F54B37C91467DAB4 /* FIRComponentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentType.m; path = Firebase/Core/FIRComponentType.m; sourceTree = ""; }; + A14720A4D905C015D0002840C26A8F84 /* RLMRealmUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmUtil.mm; path = Realm/RLMRealmUtil.mm; sourceTree = ""; }; + A160B7B0709E706A1F005EF3CF295032 /* GULReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityChecker.h; path = GoogleUtilities/Reachability/Private/GULReachabilityChecker.h; sourceTree = ""; }; + A181D4A3D5D88D0C0305A6EA33BBCB9D /* FIRInstanceIDKeyPairUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDKeyPairUtilities.m; path = Firebase/InstanceID/FIRInstanceIDKeyPairUtilities.m; sourceTree = ""; }; + A18A9B6CDC28EB90FAFAF10F31AA02D3 /* FirebaseInstanceID.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstanceID.xcconfig; sourceTree = ""; }; + A1E83143CA3B37DD064654E89E2A1808 /* RLMSyncConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncConfiguration.mm; path = Realm/RLMSyncConfiguration.mm; sourceTree = ""; }; + A224A92C601DBAAEBB8BF1D7D0F891AD /* RLMSyncUser.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUser.mm; path = Realm/RLMSyncUser.mm; sourceTree = ""; }; + A264CE728EA230515590CD2C1BB0BEAA /* SwipeActionTransitioning.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActionTransitioning.swift; path = Source/SwipeActionTransitioning.swift; sourceTree = ""; }; + A2923A47E760155E654AFEFD8923F7BB /* FLEXLayerExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLayerExplorerViewController.m; path = Classes/ObjectExplorers/FLEXLayerExplorerViewController.m; sourceTree = ""; }; + A2A2C497117A66F61D70BF366BD8552C /* Differentiable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Differentiable.swift; path = Sources/Differentiable.swift; sourceTree = ""; }; + A2EC9D8A701EDEFA3B500CE0368DE298 /* FLEXDictionaryExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDictionaryExplorerViewController.m; path = Classes/ObjectExplorers/FLEXDictionaryExplorerViewController.m; sourceTree = ""; }; + A32021452F1053800E72076E2C0213DF /* FIRInstanceIDCombinedHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCombinedHandler.h; path = Firebase/InstanceID/FIRInstanceIDCombinedHandler.h; sourceTree = ""; }; + A364EE6DBDF8A99AACD1804B0C51A457 /* GDTCORTransport_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h; sourceTree = ""; }; + A3A1FC57DC356E18447791DFF5C87DE4 /* Pods-Rocket.Chat-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Rocket.Chat-resources.sh"; sourceTree = ""; }; + A44E316BC9CE530357191F82C16F6158 /* FLEXArgumentInputJSONObjectView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputJSONObjectView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputJSONObjectView.m; sourceTree = ""; }; + A4858CC422D5596C68F661F6DBB8C243 /* RLMRealm+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealm+Sync.mm"; path = "Realm/RLMRealm+Sync.mm"; sourceTree = ""; }; + A494F9EA5E3D384CE70D6887630ABC05 /* MobilePlayer.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MobilePlayer.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + A6909B5ABDBC14A463A86E1D32618FA4 /* GoogleDataTransportCCTSupport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransportCCTSupport-dummy.m"; sourceTree = ""; }; + A7786D040AD92308EC06D61AE600F434 /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = RealmSwift/List.swift; sourceTree = ""; }; + A81FAD3EBA8356536D137996CDE7D3DB /* FIRInstanceIDVersionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDVersionUtilities.h; path = Firebase/InstanceID/FIRInstanceIDVersionUtilities.h; sourceTree = ""; }; + A8245D3D31A18BD34C67671C7BBE079D /* FIRInstanceIDCombinedHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDCombinedHandler.m; path = Firebase/InstanceID/FIRInstanceIDCombinedHandler.m; sourceTree = ""; }; + A8B053D58036089B7169E5286975AC84 /* RLMSyncManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager.h; path = include/RLMSyncManager.h; sourceTree = ""; }; + A8C85D4D47003EBCB7E526F396AEAB4E /* ImagePipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePipeline.swift; path = Sources/ImagePipeline.swift; sourceTree = ""; }; + A8D3F75ADA56F34C2885A8F1438E047E /* FLEXSystemLogMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogMessage.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m; sourceTree = ""; }; + A8D928F4789892EAC4DF7A12848DD9D0 /* FIRInstanceIDKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDKeychain.h; path = Firebase/InstanceID/FIRInstanceIDKeychain.h; sourceTree = ""; }; + A90943AB43686CF64A4BC6EC89D18BF7 /* AnyDifferentiable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyDifferentiable.swift; path = Sources/AnyDifferentiable.swift; sourceTree = ""; }; + A974BD480207D1037843307439BC6B93 /* FLEXWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWebViewController.h; path = Classes/GlobalStateExplorers/FLEXWebViewController.h; sourceTree = ""; }; + A97D185B6CF9FA0E0B8E05FA3DCBC422 /* FLEXArgumentInputColorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputColorView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m; sourceTree = ""; }; + A99B1F8C78AA14AB99228C6A587E679F /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Source/Extensions.swift; sourceTree = ""; }; + A9B2B90A4949A9F8936F9F8D31B6C796 /* RLMResults_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults_Private.h; path = include/RLMResults_Private.h; sourceTree = ""; }; + AA2909FD038E48F356B47E6C4ECBAF49 /* GDTCORAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORAssert.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h; sourceTree = ""; }; + AA844C716C4C7D99AA31B75CBA8AC0FE /* OAuthWebViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthWebViewController.swift; path = Sources/OAuthWebViewController.swift; sourceTree = ""; }; + AAB9ED20363E8E4AB931FC4FB130D3BD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + AAD1F8EA0C29D5616747695982189D52 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + AAFFF8BEBDE301A980BC6F8CF0BC9FDC /* FLEXArgumentInputNotSupportedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNotSupportedView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m; sourceTree = ""; }; + AB5E5B0214E45BA5637D5795FC03F3E2 /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = Firebase/Core/Public/FIRLoggerLevel.h; sourceTree = ""; }; + AB6D668E9341C25D3203626CEFEB921E /* FLEXImageExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImageExplorerViewController.m; path = Classes/ObjectExplorers/FLEXImageExplorerViewController.m; sourceTree = ""; }; + ABF15E713D08B0831547104F3E0F572E /* GoogleDataTransportCCTSupport.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransportCCTSupport.xcconfig; sourceTree = ""; }; + AC19AA0982C3D76458D9AD12D9394B5F /* ObjectiveCSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectiveCSupport.swift; path = RealmSwift/ObjectiveCSupport.swift; sourceTree = ""; }; + AC7817EEE0EA024DABA212EEDC81CB5F /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = ""; }; + AD0A13B831BFB0C0060557212BFA8E4A /* RLMSyncSubscription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSubscription.h; path = include/RLMSyncSubscription.h; sourceTree = ""; }; + AD5F998F7DB138F15F5DBAAADD1F377F /* NukeFLAnimatedImagePlugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NukeFLAnimatedImagePlugin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AD7938E6E603E00319A0E828FA13D74C /* GDTCORTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h; sourceTree = ""; }; + AD9E81B541A2F6ACE71858560AC8E0F7 /* FLEXMethodCallingViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMethodCallingViewController.h; path = Classes/Editing/FLEXMethodCallingViewController.h; sourceTree = ""; }; + AE32BB52F2B8E38256E480E32A03C07C /* FIRInstanceIDTokenStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenStore.h; path = Firebase/InstanceID/FIRInstanceIDTokenStore.h; sourceTree = ""; }; + AE3ABB70D4B32F37D46411CFEBB847A0 /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = ""; }; + AE6DADD103242BAAA58FA2C0B80B4767 /* MobilePlayerControlsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerControlsView.swift; path = MobilePlayer/Views/MobilePlayerControlsView.swift; sourceTree = ""; }; + AE9AEE62012CEA3D1A89247259F2BA99 /* GDTCORClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORClock.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORClock.m; sourceTree = ""; }; + AEC84D4AC77982A70BED1F1FCB526593 /* FLEXHeapEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHeapEnumerator.m; path = Classes/Utility/FLEXHeapEnumerator.m; sourceTree = ""; }; + AF1263DDA285E94A71E9DDB7F271668E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AFA6307A12FFA2ECA84AF74576986F62 /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = ""; }; + AFD482BDB3E297A6B76BC9823CD14248 /* WatermarkConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WatermarkConfig.swift; path = MobilePlayer/Config/WatermarkConfig.swift; sourceTree = ""; }; + AFDA81B041B4E20BFFE22907E4C382FA /* GULAppDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h; sourceTree = ""; }; + B19C7A6C63CD7E26651A158E091C102E /* Pods-Rocket.Chat-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.Chat-acknowledgements.plist"; sourceTree = ""; }; + B1B52695B835B434FFDAED794308DEEE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B1C419DB06BA54C9CB0A91D8AD3F3B76 /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = Firebase/Core/Private/FIRVersion.h; sourceTree = ""; }; + B21478A78B9DC6410D459510C3246E62 /* ComposerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerView.swift; path = Composer/Classes/Views/ComposerView.swift; sourceTree = ""; }; + B22787536A79D3159E37C0FDED18B489 /* MobilePlayerOverlayViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MobilePlayerOverlayViewController.swift; path = MobilePlayer/MobilePlayerOverlayViewController.swift; sourceTree = ""; }; + B257AA674397EBBCDD5BB05C7DC23152 /* GoogleDataTransport.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.xcconfig; sourceTree = ""; }; + B263B5BEAA8F57B6817AFB5D794E26AD /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = Firebase/Core/Private/FIROptionsInternal.h; sourceTree = ""; }; + B2908C8C31A3E43DFEC35D8DA5FF1D0C /* FIRInstanceIDAPNSInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDAPNSInfo.h; path = Firebase/InstanceID/FIRInstanceIDAPNSInfo.h; sourceTree = ""; }; + B293285931ABBF36C9BCC93F56062158 /* FLEXLibrariesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLibrariesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.m; sourceTree = ""; }; + B2E7A6445977727E003D281522A8FA41 /* AnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImage.swift; path = Source/AnimatedImage.swift; sourceTree = ""; }; + B30C7FC73273E7953CFBD7407B2E63F0 /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = ja.lproj; path = Composer/Assets/ja.lproj; sourceTree = ""; }; + B3BEA703C2E4A2555E1C27927DF69F9F /* FLEXLibrariesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLibrariesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.h; sourceTree = ""; }; + B3C9A1960DC9DA166F5EC3D500B17BE6 /* RLMSyncConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration.h; path = include/RLMSyncConfiguration.h; sourceTree = ""; }; + B442D92180F8FFAC7385F55BCFEF1129 /* Pods-Rocket.ChatTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Rocket.ChatTests-acknowledgements.plist"; sourceTree = ""; }; + B4F205F6DA15BDAD128E454D41828F55 /* GDTCORUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploader.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h; sourceTree = ""; }; + B5FB232A7E2AAA21A01CBE4DF3DA35D5 /* MLReduceVolume.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLReduceVolume.png; path = MobilePlayer/Resources/MLReduceVolume.png; sourceTree = ""; }; + B615513DFBED45FCE4E1166EE8875D74 /* firebasecore.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = firebasecore.nanopb.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h; sourceTree = ""; }; + B62BF6184B7E89A6826B02050CEA82A3 /* RocketChatViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RocketChatViewController-umbrella.h"; sourceTree = ""; }; + B6374097FB5994A3953D8E0DCE5369AC /* FIRInstanceIDTokenManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenManager.m; path = Firebase/InstanceID/FIRInstanceIDTokenManager.m; sourceTree = ""; }; + B65063FCD22FFC2D3D3508CA259A1CF3 /* FLEXRuntimeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeUtility.m; path = Classes/Utility/FLEXRuntimeUtility.m; sourceTree = ""; }; + B65A19FDD0A9643AB3D444269214D267 /* FIRInstanceIDKeyPair.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDKeyPair.m; path = Firebase/InstanceID/FIRInstanceIDKeyPair.m; sourceTree = ""; }; + B66BB2A17D19F20E038B928768CA4F64 /* Tap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tap.swift; path = Composer/Classes/Library/Tap.swift; sourceTree = ""; }; + B68ED9528DECB546FF2178DF1797AAFD /* RLMSyncSubscription.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSubscription.mm; path = Realm/RLMSyncSubscription.mm; sourceTree = ""; }; + B69A149D7F44F54B8F93A86A7C66BB71 /* FLEXArgumentInputStructView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStructView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m; sourceTree = ""; }; + B70A8D6D7A2B655663D5CBC099DA73B3 /* RealmSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RealmSwift.modulemap; sourceTree = ""; }; + B716360E40C006675C6544D6BA5FCB76 /* FLEXExplorerToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerToolbar.h; path = Classes/Toolbar/FLEXExplorerToolbar.h; sourceTree = ""; }; + B74CCF40BAEA0C71394AD7591946A970 /* SwipeController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeController.swift; path = Source/SwipeController.swift; sourceTree = ""; }; + B78A4BE16C0B8A9609BFA0425CCD1828 /* FLEXTableListViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableListViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h; sourceTree = ""; }; + B7A2D092F2A6A34D251032118D2ECB09 /* FIRInstanceIDCheckinPreferences+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRInstanceIDCheckinPreferences+Internal.h"; path = "Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.h"; sourceTree = ""; }; + B8043CF1F89E34FB8C50BCDE1FA42249 /* FIRInstanceIDStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDStore.h; path = Firebase/InstanceID/FIRInstanceIDStore.h; sourceTree = ""; }; + B809B004CF439076D32F9793D075B89A /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = Firebase/Core/FIRAppAssociationRegistration.m; sourceTree = ""; }; + B857989A16C0003C2D7E960432BBFD34 /* BarConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarConfig.swift; path = MobilePlayer/Config/BarConfig.swift; sourceTree = ""; }; + B88AC4F30984A6B68438F23D577B4258 /* DifferenceKit-Core-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DifferenceKit-Core-umbrella.h"; path = "../DifferenceKit-Core/DifferenceKit-Core-umbrella.h"; sourceTree = ""; }; + B8D1CAEB6DB736881066616EF5A7293F /* Pods-Rocket.ChatTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Rocket.ChatTests.modulemap"; sourceTree = ""; }; + B8DCD230ECC47AD2CF67081F62CA094F /* GoogleDataTransportCCTSupport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransportCCTSupport.modulemap; sourceTree = ""; }; + B8FC5A0355CC3AB5FA228ED10E81555A /* SwipeActionButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActionButton.swift; path = Source/SwipeActionButton.swift; sourceTree = ""; }; + B924134E2EE0686D9BF3382ED024F705 /* GDTCORPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPlatform.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h; sourceTree = ""; }; + B989597516C43FBBE749A88ACDD533BA /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_common.c; sourceTree = ""; }; + B996D741A426112E42F9D3FC5243D71A /* OAuthSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OAuthSwift-umbrella.h"; sourceTree = ""; }; + B9AB21F51FA6B24D4F075459BB9118D3 /* FLEXNetworkObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkObserver.h; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.h; sourceTree = ""; }; + BA6860EA22A14CEDFCA44F57B0D7510A /* FLEXSetExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSetExplorerViewController.h; path = Classes/ObjectExplorers/FLEXSetExplorerViewController.h; sourceTree = ""; }; + BA940B05D607C84026ECBE1387F2BCAA /* GDTCORDataFuture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORDataFuture.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m; sourceTree = ""; }; + BA940FBEB61E5E6748B0A6A352E75E3B /* FLEXRealmDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.h; sourceTree = ""; }; + BAA1BB220DCAE1A4FD8B9040B4868891 /* FLEXLayerExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLayerExplorerViewController.h; path = Classes/ObjectExplorers/FLEXLayerExplorerViewController.h; sourceTree = ""; }; + BADE05219A358EB1BC57717BC10E0713 /* MLIncreaseVolume.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLIncreaseVolume.png; path = MobilePlayer/Resources/MLIncreaseVolume.png; sourceTree = ""; }; + BAF136986A17C6EEF580B2C7BE76B6E1 /* FirebaseInstanceID-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseInstanceID-umbrella.h"; sourceTree = ""; }; + BBC219BB1D65D77A320574CBA5320F33 /* RLMJSONModels.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMJSONModels.m; path = Realm/RLMJSONModels.m; sourceTree = ""; }; + BC32A9655D8CAE5506DEB11E2BEA3274 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = Firebase/Core/FIRAnalyticsConfiguration.m; sourceTree = ""; }; + BC63D90F0FC2E280E9337A225B5FE8F6 /* FIRInstanceIDKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDKeychain.m; path = Firebase/InstanceID/FIRInstanceIDKeychain.m; sourceTree = ""; }; + BC9029ED92348504D1E864BB9A8A05CE /* realm_coordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = realm_coordinator.cpp; path = Realm/ObjectStore/src/impl/realm_coordinator.cpp; sourceTree = ""; }; + BC9695EEE40A1905B7FB7C304E4F4BA0 /* GDTCOREvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h; sourceTree = ""; }; + BCA11F639A396489EE59AF4C93A9A20A /* FLEXArgumentInputDateView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputDateView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h; sourceTree = ""; }; + BCAE2D0402FC3F174047AC9C40EB1490 /* FLEXArgumentInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h; sourceTree = ""; }; + BCC8F5273AB9D4B41DE9277F4BA3FB70 /* FLEXClassExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassExplorerViewController.m; path = Classes/ObjectExplorers/FLEXClassExplorerViewController.m; sourceTree = ""; }; + BCF87FEC35F61FED31B31740E9B2AB83 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + BD220AD8305B1A3F1C9C002299662613 /* cancel_audio_record.m4a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = cancel_audio_record.m4a; path = Composer/Sounds/cancel_audio_record.m4a; sourceTree = ""; }; + BD459B4A8AF6DD2689794D875EB701E6 /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; + BD4DCA082C2713E9992C24FDA2364FC3 /* ComposerAddonStackView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerAddonStackView.swift; path = Composer/Classes/Views/ComposerAddonStackView.swift; sourceTree = ""; }; + BD644D92828CF301F94FAB9065DB3B5C /* FirebaseCoreDiagnostics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCoreDiagnostics-umbrella.h"; sourceTree = ""; }; + BD6651C10EE226E8D1139BC4FB5C8B51 /* ReachabilitySwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-umbrella.h"; sourceTree = ""; }; + BD6DF7B090FD92E62BB80DBC4D5144C9 /* GULApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULApplication.h; path = GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h; sourceTree = ""; }; + BEC142D1139605B2D33D9C174971D566 /* FirebaseCoreDiagnostics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCoreDiagnostics-dummy.m"; sourceTree = ""; }; + BF8E324C5C0AB1EA8057E7E8EC430EF4 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = Firebase/Core/Private/FIRAppAssociationRegistration.h; sourceTree = ""; }; + BFDB547751B83CB0B76267052059FD56 /* RLMObjectSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema.h; path = include/RLMObjectSchema.h; sourceTree = ""; }; + C01701E2AD86581CD2DCBF8E14C245FE /* network_reachability_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = network_reachability_observer.cpp; path = Realm/ObjectStore/src/sync/impl/apple/network_reachability_observer.cpp; sourceTree = ""; }; + C0421F6FD49CC2E5D328FD3497F55E54 /* RLMSyncSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSession.h; path = include/RLMSyncSession.h; sourceTree = ""; }; + C0681B845139EF4034B0B3A62D1D54BD /* FLAnimatedImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLAnimatedImage-prefix.pch"; sourceTree = ""; }; + C0C678A19E7DA05B9FD127F0BE66CF7E /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseInstanceID.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C124D7F4E2655DBF4DC5FBADBF12EC90 /* Realm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Realm.h; path = include/Realm.h; sourceTree = ""; }; + C1676C487D07D076C0FDF636CCAAD153 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C1A9DBF61122E8279A5F2B90160AE777 /* Results.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Results.swift; path = RealmSwift/Results.swift; sourceTree = ""; }; + C1B990AA8ADE0CD420C24170391544F2 /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = ""; }; + C1BDA29585B7602FAA49AA1D7CF3943E /* RLMObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectStore.h; path = include/RLMObjectStore.h; sourceTree = ""; }; + C1FD15BEB588659CE9D06FB3EBD10C71 /* RLMOptionalBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMOptionalBase.h; path = include/RLMOptionalBase.h; sourceTree = ""; }; + C2641D0FAF37F327591CEFD2ED2D6701 /* FLEXKeyboardHelpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardHelpViewController.h; path = Classes/Utility/FLEXKeyboardHelpViewController.h; sourceTree = ""; }; + C274E424F704A18DF70A337371F6F721 /* AnimatableImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatableImageView.swift; path = ImageViewer/AnimatableImageView.swift; sourceTree = ""; }; + C29CE9D8430261AB6FE5D667F02717A1 /* RLMObjectSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema_Private.h; path = include/RLMObjectSchema_Private.h; sourceTree = ""; }; + C29F30F7E4021F09C942990F3C0D93D8 /* FIRInstanceID+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FIRInstanceID+Private.m"; path = "Firebase/InstanceID/FIRInstanceID+Private.m"; sourceTree = ""; }; + C2CBC08C2988D867387EE0038D1C5ADD /* GDTCORStoredEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStoredEvent.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORStoredEvent.h; sourceTree = ""; }; + C3020B5F4DB347C56D66C9CF6C7A7EC3 /* FLEXDefaultsExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultsExplorerViewController.m; path = Classes/ObjectExplorers/FLEXDefaultsExplorerViewController.m; sourceTree = ""; }; + C3AE4A61ACABAC3D758FBA07EB8354D7 /* GULMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULMutableDictionary.h; path = GoogleUtilities/Network/Private/GULMutableDictionary.h; sourceTree = ""; }; + C40705BD705C9F00097DA38D53CCE23E /* GDTCORPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPrioritizer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h; sourceTree = ""; }; + C42192C833E6377A5C2AEA5586902AF4 /* RLMArray_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray_Private.h; path = include/RLMArray_Private.h; sourceTree = ""; }; + C5382B398A7790F49B709BEB0B212009 /* FLEXMultiColumnTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultiColumnTableView.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m; sourceTree = ""; }; + C5536BD2AE613CBD1468001B32464DCB /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = Firebase/Core/Private/FIRLibrary.h; sourceTree = ""; }; + C565EDECAFA95B80AB6646514D22A0E9 /* Pods-Rocket.Chat-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Rocket.Chat-umbrella.h"; sourceTree = ""; }; + C5B2B892919D56AD32496CF0741A31C8 /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = Firebase/Core/Private/FIRAnalyticsConfiguration.h; sourceTree = ""; }; + C5DCC459D967C96D6EBF151261B77521 /* RLMObject_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject_Private.h; path = include/RLMObject_Private.h; sourceTree = ""; }; + C6ABC3CAF22D4567480D52831F316E2F /* GDTFLLUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTFLLUploader.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTFLLUploader.m; sourceTree = ""; }; + C6C7EDCC51D7925AB615FDBEEA3C3D5B /* FLAnimatedImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FLAnimatedImage-dummy.m"; sourceTree = ""; }; + C6E77820E3E0B6CCAC63F65698B00DDD /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + C703252722B5BD059B3006490EF905B1 /* RLMPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMPlatform.h; path = include/RLMPlatform.h; sourceTree = ""; }; + C7847669EA26B3E2F564575365CF1C6C /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; + C78F313991532A219DC6FF57518346FF /* FLEX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-prefix.pch"; sourceTree = ""; }; + C7B67C3137FC9230488FB4F91628B5E5 /* URL+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+OAuthSwift.swift"; path = "Sources/URL+OAuthSwift.swift"; sourceTree = ""; }; + C830CEFD8CF23B3FA9E84217EC594626 /* FLEXSystemLogTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogTableViewController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.h; sourceTree = ""; }; + C85C66B2B2E2830FCB88057827E5F6E4 /* FLEXNetworkTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransaction.h; path = Classes/Network/FLEXNetworkTransaction.h; sourceTree = ""; }; + C86E7BE5EB409303F7FD28D5A89C0F07 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C88D0C0E13D0122C75BDB0F73CD861EC /* Reachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reachability.swift; path = Sources/Reachability.swift; sourceTree = ""; }; + C89CC87C5B7F09A9A63DCCDCABEC514F /* ReachabilitySwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-prefix.pch"; sourceTree = ""; }; + C8C7A4E2193BBCA87CE9D39D21886740 /* FLEXTableContentViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableContentViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m; sourceTree = ""; }; + C8CA9696A228F83E5AF4FBBB19BAF914 /* sync_metadata.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_metadata.cpp; path = Realm/ObjectStore/src/sync/impl/sync_metadata.cpp; sourceTree = ""; }; + C8D523949ABA0FF9F3F2E37738450D3B /* RLMRealmConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmConfiguration.mm; path = Realm/RLMRealmConfiguration.mm; sourceTree = ""; }; + C91C105CCBC848E4D6D440AB606B640B /* FIRCoreDiagnostics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnostics.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m; sourceTree = ""; }; + C9352EB798C7B500B9276CE05606A43C /* FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEX.h; path = Classes/FLEX.h; sourceTree = ""; }; + C93F9C8B6AD51F8CD74761E2D620B4C2 /* Nuke.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nuke.xcconfig; sourceTree = ""; }; + C941253FE41A1566D2EB8B69C5C7A194 /* FirebaseCoreDiagnostics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCoreDiagnostics.modulemap; sourceTree = ""; }; + C97EC3B9F550B7D0F59109B15F7F9670 /* SwipeCollectionViewCellDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeCollectionViewCellDelegate.swift; path = Source/SwipeCollectionViewCellDelegate.swift; sourceTree = ""; }; + C9D0189B31551C5367DEEEBCFECA7DF0 /* ImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageView.swift; path = Sources/ImageView.swift; sourceTree = ""; }; + CA3A69553090B54A043BB24F56D02BB0 /* RealmCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCollection.swift; path = RealmSwift/RealmCollection.swift; sourceTree = ""; }; + CA794C93B8A658C4B011EF27A531DFA1 /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.Chat.ShareExtension.beta.xcconfig"; sourceTree = ""; }; + CAF212D083B8EF14D39CB5A19EB2B2CB /* FLEXSystemLogTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogTableViewCell.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.m; sourceTree = ""; }; + CB035331E0F7B6E91A32A1BEF050DBB1 /* FLEXDefaultsExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultsExplorerViewController.h; path = Classes/ObjectExplorers/FLEXDefaultsExplorerViewController.h; sourceTree = ""; }; + CB224D4CAFCFA72778D1EFE04FB955B3 /* ReachabilitySwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReachabilitySwift.modulemap; sourceTree = ""; }; + CB2A3214080B4C67E46114B0DCC6785E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CB68E25CAB993E991394E1AEC84615BF /* GULSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSwizzler.h; path = GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h; sourceTree = ""; }; + CBF1E78837F31D8815FC0F446F4D239C /* RealmSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-prefix.pch"; sourceTree = ""; }; + CC0EC79351E2DDE5970E9038131F00C9 /* FLEXPropertyEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXPropertyEditorViewController.h; path = Classes/Editing/FLEXPropertyEditorViewController.h; sourceTree = ""; }; + CC7D122B769EDA34A9267CE10C62CD1C /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = ""; }; + CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MobilePlayer.xcconfig; sourceTree = ""; }; + CD39919DCEBDF2C033EA4E55C31F3C0E /* FLEXArgumentInputViewFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputViewFactory.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.m; sourceTree = ""; }; + CD3C44330949B61F23B9F0E6DFFEA33A /* FirebaseCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.xcconfig; sourceTree = ""; }; + CD6FBFB09B1B1E32DC09E535F003FCA6 /* FLEXNetworkTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransaction.m; path = Classes/Network/FLEXNetworkTransaction.m; sourceTree = ""; }; + CDA1B8EE827AACDB8F63C9B072524A7C /* RLMUpdateChecker.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUpdateChecker.mm; path = Realm/RLMUpdateChecker.mm; sourceTree = ""; }; + CDB27647D7FDDAEA329F835B2E1BC9A9 /* RLMSyncCredentials.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSyncCredentials.m; path = Realm/RLMSyncCredentials.m; sourceTree = ""; }; + CE9E10928E34DE768B93A3F2A95D7295 /* shared_realm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = shared_realm.cpp; path = Realm/ObjectStore/src/shared_realm.cpp; sourceTree = ""; }; + CEEFD90266F9B42F9D92E366E80B67F3 /* RLMAnalytics.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAnalytics.mm; path = Realm/RLMAnalytics.mm; sourceTree = ""; }; + CFAA0F512E1BA881065AA57397DC51AD /* FLEXManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXManager.h; path = Classes/FLEXManager.h; sourceTree = ""; }; + CFD3B81A4E692C0C56DE59C7A20405BA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D013DD9788B654DE042713BD871EEC38 /* RLMSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema.h; path = include/RLMSchema.h; sourceTree = ""; }; + D02E282EFBA9E30E4C20C7CA809809A8 /* FLAnimatedImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLAnimatedImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D03921F54934938F38B4585819BE1511 /* Pods-Rocket.Chat-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Rocket.Chat-dummy.m"; sourceTree = ""; }; + D068F63E361BBA784B580498F930203A /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D06A72649FF38F0389D480872526EB90 /* GDTCORAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORAssert.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m; sourceTree = ""; }; + D0747068ED55A3F00387E4EA0671A8E8 /* FLAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLAnimatedImageView.m; path = FLAnimatedImage/FLAnimatedImageView.m; sourceTree = ""; }; + D0F3CA793BF667EBFC2202FB92E40B23 /* RLMThreadSafeReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMThreadSafeReference.h; path = include/RLMThreadSafeReference.h; sourceTree = ""; }; + D134DBBBCD1309A25589CF99A9F9E627 /* start_audio_record.m4a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = start_audio_record.m4a; path = Composer/Sounds/start_audio_record.m4a; sourceTree = ""; }; + D152FB3834EB0C1F7B5E1A05C3FBF8D6 /* GDTCORStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorage.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORStorage.h; sourceTree = ""; }; + D16A1283BFCF487D488148D9EEE0C268 /* RLMOptionalBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMOptionalBase.mm; path = Realm/RLMOptionalBase.mm; sourceTree = ""; }; + D18BF80B296E1C1DBBA07B174AC6E3A5 /* list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list_notifier.cpp; path = Realm/ObjectStore/src/impl/list_notifier.cpp; sourceTree = ""; }; + D274E53D4440177A5A2DBE9DCAEF5C8E /* LabelConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LabelConfig.swift; path = MobilePlayer/Config/LabelConfig.swift; sourceTree = ""; }; + D27E1F8929A875B724135E71FC07FB39 /* FIRInstanceIDLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDLogger.m; path = Firebase/InstanceID/FIRInstanceIDLogger.m; sourceTree = ""; }; + D2FAB6A4F75DAF6C0CE8583EE6C5D532 /* GULUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULUserDefaults.m; path = GoogleUtilities/UserDefaults/GULUserDefaults.m; sourceTree = ""; }; + D357B4E119E1491386D0F3B2826A2781 /* FLEXWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWindow.m; path = Classes/ExplorerInterface/FLEXWindow.m; sourceTree = ""; }; + D4086735641EDAE97236BA5507BFFD04 /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D40F3B0E7F489A813BD6D320E2F3BC6F /* FLEXArgumentInputColorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputColorView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h; sourceTree = ""; }; + D49C8209C0E1059DF74468E62157AA7D /* Nuke.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nuke.modulemap; sourceTree = ""; }; + D4AA511101DD20841575D3DD177DB374 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = Firebase/Core/Private/FIRComponentContainer.h; sourceTree = ""; }; + D4B3E130B99409184C868361CABDFA84 /* FLEXArgumentInputJSONObjectView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputJSONObjectView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputJSONObjectView.h; sourceTree = ""; }; + D4CC13706B74FA635DC0D8150728E4BD /* GULAppDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h; sourceTree = ""; }; + D4F3D7D325C36ED8FAFEBAF75ED960A1 /* sync_user.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_user.cpp; path = Realm/ObjectStore/src/sync/sync_user.cpp; sourceTree = ""; }; + D4F91FA566EB5F8D66484629C89DE6D8 /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = ""; }; + D580222B8DB221896F60F8DE0AC833FB /* sync_session.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_session.cpp; path = Realm/ObjectStore/src/sync/sync_session.cpp; sourceTree = ""; }; + D5A973DEBD80F3D8AEFE813F1749A5E3 /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D5C3F68AE3C331F51F017299A1E26BD8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D5F4DB73DBD81D78F94158B8F7E57E7A /* SwipeCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeCollectionViewCell.swift; path = Source/SwipeCollectionViewCell.swift; sourceTree = ""; }; + D617A4F1AD31C74DE1139447BF84D2A4 /* FLEXKeyboardShortcutManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardShortcutManager.m; path = Classes/Utility/FLEXKeyboardShortcutManager.m; sourceTree = ""; }; + D65D99D4E1298B008F80940EB8DDF000 /* LinkingObjects.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkingObjects.swift; path = RealmSwift/LinkingObjects.swift; sourceTree = ""; }; + D69CD7CE2E44C61F376993D6D79070A8 /* FIRInstanceIDConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDConstants.h; path = Firebase/InstanceID/FIRInstanceIDConstants.h; sourceTree = ""; }; + D6F00AA011F05775F26050F45C98234C /* DifferenceKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DifferenceKit.modulemap; sourceTree = ""; }; + D71388B72429959FDC97FD33684EF015 /* MLVolumeButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLVolumeButton@2x.png"; path = "MobilePlayer/Resources/MLVolumeButton@2x.png"; sourceTree = ""; }; + D7E0DFD07C88EFCE7E0A19F76E8CA7A6 /* SwipeOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeOptions.swift; path = Source/SwipeOptions.swift; sourceTree = ""; }; + D7E5F6917838B2700657ABB7635429F6 /* FirebaseInstanceID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstanceID.h; path = Firebase/InstanceID/Public/FirebaseInstanceID.h; sourceTree = ""; }; + D80699E4150D7FA44596907501065F78 /* UIApplication+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIApplication+OAuthSwift.swift"; path = "Sources/UIApplication+OAuthSwift.swift"; sourceTree = ""; }; + D83A3EE42DA8C2F0E4659BBF8D28B3B1 /* object_schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_schema.cpp; path = Realm/ObjectStore/src/object_schema.cpp; sourceTree = ""; }; + D86FACFD952988088662F846ACCC1668 /* Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sync.swift; path = RealmSwift/Sync.swift; sourceTree = ""; }; + D875B7DAD6341765E1EA609398EE6C1C /* work_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = work_queue.cpp; path = Realm/ObjectStore/src/sync/impl/work_queue.cpp; sourceTree = ""; }; + D8A2A1A580B9153A7127EA84EF0C4EAE /* GULAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppEnvironmentUtil.m; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m; sourceTree = ""; }; + D8B70B25EFAFDE32CBA81134AF7908A2 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; + D8DF83845CFDE15CCD2053980A57ECB8 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; + D950A0F7FA2B3EB6BB0D80E61B4F5D50 /* FLEXIvarEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXIvarEditorViewController.m; path = Classes/Editing/FLEXIvarEditorViewController.m; sourceTree = ""; }; + D9A75558B531AC6FCA4A122225C91BC6 /* RLMObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject.h; path = include/RLMObject.h; sourceTree = ""; }; + D9AC367DEA12DB83634189F1B81BAF0D /* sync_manager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_manager.cpp; path = Realm/ObjectStore/src/sync/sync_manager.cpp; sourceTree = ""; }; + D9CA95951BC3EF2AA54285E1B67E6851 /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = Firebase/Core/Public/FirebaseCore.h; sourceTree = ""; }; + D9CB5D34054221D49988F30DC471A47C /* RLMArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMArray.mm; path = Realm/RLMArray.mm; sourceTree = ""; }; + DA2CA9254FA659AA50F02EDACEFF1F4A /* OAuthSwiftMultipartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftMultipartData.swift; path = Sources/OAuthSwiftMultipartData.swift; sourceTree = ""; }; + DA3563EB324470CE4ABAF6EAD925660A /* FLEXResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXResources.h; path = Classes/Utility/FLEXResources.h; sourceTree = ""; }; + DA85340FF86AC31DBCA0B0DF8BB4BAFE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DAAAB96AB91F09C8E3C4C44B85DDABED /* FLEXNetworkHistoryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkHistoryTableViewController.m; path = Classes/Network/FLEXNetworkHistoryTableViewController.m; sourceTree = ""; }; + DADFE02C70266E260BB488332DD1A5C3 /* RLMAccessor.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAccessor.mm; path = Realm/RLMAccessor.mm; sourceTree = ""; }; + DB9070AFCFAE0B7726460796A0A278EC /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = Sources/Utils.swift; sourceTree = ""; }; + DC1D208DB6277F86F6B3802EB4944538 /* RLMClassInfo.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMClassInfo.mm; path = Realm/RLMClassInfo.mm; sourceTree = ""; }; + DCADE050210A40BBFD221B115686E9E6 /* FLEXViewExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewExplorerViewController.m; path = Classes/ObjectExplorers/FLEXViewExplorerViewController.m; sourceTree = ""; }; + DD0099DC85F9F046F71DFA77FE3122F3 /* Pods-Rocket.ChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.debug.xcconfig"; sourceTree = ""; }; + DD2402EA03AD1326FD94C8BF42D1BA03 /* MLReduceVolume@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLReduceVolume@3x.png"; path = "MobilePlayer/Resources/MLReduceVolume@3x.png"; sourceTree = ""; }; + DD33E21A79B1E4A8F8283FEC0977B89D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Composer/Assets/en.lproj; sourceTree = ""; }; + DD705DB493406CFE9756E24B0B402D0E /* FIRInstanceIDTokenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenManager.h; path = Firebase/InstanceID/FIRInstanceIDTokenManager.h; sourceTree = ""; }; + DD79B6624EA1BADDEFA417BAB4A368BD /* FLEXUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXUtility.m; path = Classes/Utility/FLEXUtility.m; sourceTree = ""; }; + DE67726DB4CE17583D2A5CA441628E12 /* ru.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = ru.lproj; path = Composer/Assets/ru.lproj; sourceTree = ""; }; + DEC543B627BF4425809C83D4813F3EFC /* FLEXPropertyEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXPropertyEditorViewController.m; path = Classes/Editing/FLEXPropertyEditorViewController.m; sourceTree = ""; }; + DED66438943725547A782DB5D47662F9 /* Pods-Rocket.ChatTests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.test.xcconfig"; sourceTree = ""; }; + DED8A12535136B9EC308B988C1FBB062 /* RLMManagedArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMManagedArray.mm; path = Realm/RLMManagedArray.mm; sourceTree = ""; }; + DEE09FAA5184A7C655FA68A9878AB4FE /* 1PasswordExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "1PasswordExtension-umbrella.h"; sourceTree = ""; }; + DF1227849A2767C32E7EB2C900BEBBB2 /* FIRInstanceIDURLQueryItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDURLQueryItem.h; path = Firebase/InstanceID/FIRInstanceIDURLQueryItem.h; sourceTree = ""; }; + DF181E8B0D573A17A6DC64615C2DC294 /* object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object.cpp; path = Realm/ObjectStore/src/object.cpp; sourceTree = ""; }; + DF1E8243268A2EC5DF03611DC5636A4D /* FLEXWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWindow.h; path = Classes/ExplorerInterface/FLEXWindow.h; sourceTree = ""; }; + DF41F9737472E39E74A2824BC7100F75 /* GDTCORUploadPackage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h; sourceTree = ""; }; + DF4212B8544357D58C13D8289B814917 /* RLMObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObject.mm; path = Realm/RLMObject.mm; sourceTree = ""; }; + DF5BB9BE5ADA2EB66A91461175799A87 /* FLEXTableContentViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableContentViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h; sourceTree = ""; }; + DF99E28B18CDA013CF6FD170370F479D /* OAuthSwiftHTTPRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftHTTPRequest.swift; path = Sources/OAuthSwiftHTTPRequest.swift; sourceTree = ""; }; + DFB6990E2B45A265C9462DC1FB4E3EC4 /* sync_permission.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_permission.cpp; path = Realm/ObjectStore/src/sync/sync_permission.cpp; sourceTree = ""; }; + DFFDF6254D503C4BB25D42EF2120831C /* GULAppDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppDelegateSwizzler.m; path = GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m; sourceTree = ""; }; + E00CB8D20A596AD59457C5D4C19DD93C /* FLAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLAnimatedImage.m; path = FLAnimatedImage/FLAnimatedImage.m; sourceTree = ""; }; + E018591B2B2E4AAFA0E286A9615CA056 /* SwipeExpanding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeExpanding.swift; path = Source/SwipeExpanding.swift; sourceTree = ""; }; + E04723DA07D083E6DF0B4C858623372F /* DifferenceKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DifferenceKit-umbrella.h"; sourceTree = ""; }; + E08B176F442C281998E6B4A361C97092 /* GDTFLLPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTFLLPrioritizer.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTFLLPrioritizer.h; sourceTree = ""; }; + E08F7EA98940945E9ECB6C7DD06FC752 /* FIRInstanceIDUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDUtilities.m; path = Firebase/InstanceID/FIRInstanceIDUtilities.m; sourceTree = ""; }; + E1599B8028391AA115149DFAAD4BA2E3 /* UIKitExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIKitExtension.swift; path = RocketChatViewController/Classes/UIKitExtension.swift; sourceTree = ""; }; + E1A71F1F0E727B5759DDD5FED669E0BF /* GDTCOREventDataObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventDataObject.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h; sourceTree = ""; }; + E1C04B3058760D3353DA3FD558382BDF /* RocketChatViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RocketChatViewController.xcconfig; sourceTree = ""; }; + E1C82CDE3FE80EC44F6F1FACCEEF8C2D /* FLEXArgumentInputFontView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h; sourceTree = ""; }; + E20F0004531B07BD7732D17EDEDB5904 /* semver.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = semver.modulemap; sourceTree = ""; }; + E223545FA3205F45223B32AA11AEE442 /* external_commit_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = external_commit_helper.cpp; path = Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp; sourceTree = ""; }; + E276B9E4F8937CB299EB7AA1B069204E /* ImageDecoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDecoding.swift; path = Sources/ImageDecoding.swift; sourceTree = ""; }; + E39939B5637E18541C1E65A43CDEA124 /* FLEXCookiesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCookiesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXCookiesTableViewController.h; sourceTree = ""; }; + E3D18D10C1865C61DF3EF8B81011228F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E3DAB7A0527FF8002B28692033BDD1C2 /* MLVolumeButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLVolumeButton@3x.png"; path = "MobilePlayer/Resources/MLVolumeButton@3x.png"; sourceTree = ""; }; + E42DB03F12B1BF034CB5026021A4FF5D /* RLMNetworkClient.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMNetworkClient.mm; path = Realm/RLMNetworkClient.mm; sourceTree = ""; }; + E4657200448F8A9027FD570CB1CC6474 /* FIRInstanceIDCheckinPreferences_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCheckinPreferences_Private.h; path = Firebase/InstanceID/FIRInstanceIDCheckinPreferences_Private.h; sourceTree = ""; }; + E4A25F0EAED6BACEB69B2EE92A2DCA97 /* SimpleImageViewer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SimpleImageViewer-prefix.pch"; sourceTree = ""; }; + E4D390D85C87A5847795D86A63C3E12A /* MLShareButton.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MLShareButton.png; path = MobilePlayer/Resources/MLShareButton.png; sourceTree = ""; }; + E599B72734E8014A8E31BECB3F4FD52C /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; + E6EC738AF804EEBDC2FB175064DC7294 /* FLEXArgumentInputViewFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputViewFactory.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.h; sourceTree = ""; }; + E71D1273E363FB9447B8A6209CFAC030 /* RLMSyncConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration_Private.h; path = include/RLMSyncConfiguration_Private.h; sourceTree = ""; }; + E7A2C757941CE226369DB316339117E9 /* SwipeCollectionViewCell+Display.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwipeCollectionViewCell+Display.swift"; path = "Source/SwipeCollectionViewCell+Display.swift"; sourceTree = ""; }; + E7EAE735D8A86D0B320B44F198F5D756 /* RLMMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration.h; path = include/RLMMigration.h; sourceTree = ""; }; + E7FC0517B73CD989C8BF0841EB78FA3E /* MLPauseButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPauseButton@3x.png"; path = "MobilePlayer/Resources/MLPauseButton@3x.png"; sourceTree = ""; }; + E811FF252A6DE87D015A07E5E7869138 /* GoogleUtilities-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-umbrella.h"; sourceTree = ""; }; + E878DF5B1675FF84FEF046C8D9F0F487 /* FLEXToolbarItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXToolbarItem.h; path = Classes/Toolbar/FLEXToolbarItem.h; sourceTree = ""; }; + E9A0B3EF5FD106794FEF96BD62725695 /* Pods-Rocket.Chat.ShareExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Rocket.Chat.ShareExtension-umbrella.h"; sourceTree = ""; }; + E9A8F597A001DFC31DA6062AE7AC46AD /* SwipeTableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeTableViewCell.swift; path = Source/SwipeTableViewCell.swift; sourceTree = ""; }; + E9D57DB227BB502AC366CDDB9DC9345F /* primitive_list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = primitive_list_notifier.cpp; path = Realm/ObjectStore/src/impl/primitive_list_notifier.cpp; sourceTree = ""; }; + E9FFA2669005FCF8BED83CB72841D6A2 /* RLMSyncUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUser.h; path = include/RLMSyncUser.h; sourceTree = ""; }; + EA02640B6A8A6222F4EBC2A74340C48A /* Pods-Rocket.ChatTests.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Rocket.ChatTests.beta.xcconfig"; sourceTree = ""; }; + EA16993E505EE934E4A6ED21EB8CEAC3 /* SHA1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA1.swift; path = Sources/SHA1.swift; sourceTree = ""; }; + EA1A3E89518BAD83D8487E635BB044D6 /* ComposerButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComposerButton.swift; path = Composer/Classes/Views/ComposerButton.swift; sourceTree = ""; }; + EA52325FA497EEE07D1703278CC007AE /* RCMarkdownParser.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCMarkdownParser.xcconfig; sourceTree = ""; }; + EA86BEEBE2B34813D665E8C675226275 /* FirebaseInstanceID-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseInstanceID-dummy.m"; sourceTree = ""; }; + EA9026FD805FD86C1FFB9BE42CC3D8AA /* GDTCORRegistrar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORRegistrar.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m; sourceTree = ""; }; + EAD0D240EE8B5AA2A8C7C52808B60D32 /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Composer/Assets/Assets.xcassets; sourceTree = ""; }; + EAF54011C28179CB3989B94D05481737 /* GDTCCTNanopbHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTNanopbHelpers.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m; sourceTree = ""; }; + EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + EC6FFDB718C77AACF95F6E3123888F83 /* ContentEquatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContentEquatable.swift; path = Sources/ContentEquatable.swift; sourceTree = ""; }; + EC828452716B19AD852947BE4BD2E004 /* FLEXFieldEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorViewController.m; path = Classes/Editing/FLEXFieldEditorViewController.m; sourceTree = ""; }; + ECA678A24312DC36342DCF658EFBA3B8 /* ThreadSafeReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadSafeReference.swift; path = RealmSwift/ThreadSafeReference.swift; sourceTree = ""; }; + ED332F3F26F8A59AF2F976C03C715A58 /* GoogleDataTransportCCTSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleDataTransportCCTSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EDD4909D6A375466663B012FBD7936D2 /* Pods-Rocket.ChatTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Rocket.ChatTests-frameworks.sh"; sourceTree = ""; }; + EDE6C7D48246A3AB7A51E0D1B204C3C6 /* RLMQueryUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMQueryUtil.mm; path = Realm/RLMQueryUtil.mm; sourceTree = ""; }; + EEC122FAFB59501CBB1F5609224E14CA /* FLEXFieldEditorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorView.h; path = Classes/Editing/FLEXFieldEditorView.h; sourceTree = ""; }; + EEF1A71C55946D10D2BA2AF2D7BDA8B7 /* OAuthSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OAuthSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EF5552287E05E4A8902BE0E847D6255D /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = Firebase/Core/Public/FIRConfiguration.h; sourceTree = ""; }; + EF5E62CBD49EA4BA6A8B3634D49CA0F0 /* FLEXClassesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXClassesTableViewController.m; sourceTree = ""; }; + EF917E0DB175B2510CB4639887D9C683 /* Pods-Rocket.Chat.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Rocket.Chat.modulemap"; sourceTree = ""; }; + F0E36689A34B70C03AD17431571E1B69 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; + F1583B44F5D85B26BB25B3EF596B376D /* FIRInstanceIDTokenOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenOperation.h; path = Firebase/InstanceID/FIRInstanceIDTokenOperation.h; sourceTree = ""; }; + F18AFBFAE1DA7D32EF978687514FE9FE /* collection_change_builder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_change_builder.cpp; path = Realm/ObjectStore/src/impl/collection_change_builder.cpp; sourceTree = ""; }; + F1E5252DCCDB7B091042FB6DA1E66966 /* SwipeAccessibilityCustomAction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeAccessibilityCustomAction.swift; path = Source/SwipeAccessibilityCustomAction.swift; sourceTree = ""; }; + F24FB11FCACC5E30EAA1E2F19D5CCA69 /* ImageViewerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewerConfiguration.swift; path = ImageViewer/ImageViewerConfiguration.swift; sourceTree = ""; }; + F2A9623591E3F5D030981B89EDC126B2 /* GULNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkURLSession.m; path = GoogleUtilities/Network/GULNetworkURLSession.m; sourceTree = ""; }; + F2C27DE19D0D763C2AE9C743CB64CF9B /* MLPlayButton@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPlayButton@3x.png"; path = "MobilePlayer/Resources/MLPlayButton@3x.png"; sourceTree = ""; }; + F2D90218EC834825052E1DD3C199D0FF /* OAuth2Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuth2Swift.swift; path = Sources/OAuth2Swift.swift; sourceTree = ""; }; + F3476B7035F44968C312ED6B39D03A92 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + F35300C792CE2C1912BA4A2191072907 /* RCMarkdownParser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RCMarkdownParser-dummy.m"; sourceTree = ""; }; + F4476234062FC9F0BC028F3B472B6DBF /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = Firebase/Core/Private/FIRLogger.h; sourceTree = ""; }; + F4565B53F71AE70CC8396A4CD3A1215B /* FLEXHeapEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHeapEnumerator.h; path = Classes/Utility/FLEXHeapEnumerator.h; sourceTree = ""; }; + F46265E7848F9A7420D7E43B460E5AF9 /* GDTCORReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability.h; sourceTree = ""; }; + F4C11FD1D24E3E9B59595B8070A046FB /* FLEXHierarchyTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewCell.h; path = Classes/ViewHierarchy/FLEXHierarchyTableViewCell.h; sourceTree = ""; }; + F4EA8FA52B30CC8078CF7A16F230E5EF /* FLEXTableColumnHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableColumnHeader.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m; sourceTree = ""; }; + F4ECBB89143891E5F07DE7C8E87CF10C /* DifferenceKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DifferenceKit.xcconfig; sourceTree = ""; }; + F5A867D64D1361B471DD422E8BBDDC13 /* FLEXNetworkSettingsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkSettingsTableViewController.m; path = Classes/Network/FLEXNetworkSettingsTableViewController.m; sourceTree = ""; }; + F60E6979340A56B7D55F3B17E77C5E77 /* cs.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = cs.lproj; path = Composer/Assets/cs.lproj; sourceTree = ""; }; + F6423B29494ACF9C9DC11EE7AA82B730 /* ImagePreheater.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePreheater.swift; path = Sources/ImagePreheater.swift; sourceTree = ""; }; + F65A2643F5B09F821BDAF383C422F034 /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = ""; }; + F67046E774FAC0AE18C6B1F2C7256D6F /* MobilePlayer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MobilePlayer-prefix.pch"; sourceTree = ""; }; + F6C49193CF3C0677FFAA55AAF2F7E621 /* FLEXTableLeftCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableLeftCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m; sourceTree = ""; }; + F7542B8EEC18DA39EC4451772BB38761 /* FLEXObjectExplorerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerFactory.m; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.m; sourceTree = ""; }; + F8AA16F6354AF07EBA44B3292E8878A8 /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = ""; }; + F8B04B22E82D996087C605062C29C500 /* system_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = system_configuration.cpp; path = Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp; sourceTree = ""; }; + F96FBF4C4F6032B6D3A7BDBEC207D70C /* OAuthSwiftURLHandlerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftURLHandlerType.swift; path = Sources/OAuthSwiftURLHandlerType.swift; sourceTree = ""; }; + F97F8D330DD37D381DB8CF6D0EDEF8C2 /* Realm-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Realm-prefix.pch"; sourceTree = ""; }; + F983606A3978CFFD6EF3B9EE64DBF020 /* GDTCORTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransformer.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m; sourceTree = ""; }; + F99E4B9F8FDC97460A1D44F93F27A144 /* Element.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Element.swift; path = MobilePlayer/Views/Element.swift; sourceTree = ""; }; + F9D28CD4509EA1858AAEE97875FA73E2 /* FLEXFileBrowserFileOperationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserFileOperationController.m; path = Classes/GlobalStateExplorers/FLEXFileBrowserFileOperationController.m; sourceTree = ""; }; + FA50DFA8BDFF060ED04A111BF61A61DF /* GULSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSwizzler.m; path = GoogleUtilities/MethodSwizzler/GULSwizzler.m; sourceTree = ""; }; + FAAC216ED83F1A6A58A8FB338BDA4062 /* binding_callback_thread_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = binding_callback_thread_observer.cpp; path = Realm/ObjectStore/src/binding_callback_thread_observer.cpp; sourceTree = ""; }; + FAC971DA2AA2CE4E8C4DDB50D1208D0F /* AudioRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AudioRecorder.swift; path = Composer/Classes/Library/AudioRecorder.swift; sourceTree = ""; }; + FAD8587A89E6DADCF9D0594A7B7EDEC6 /* FLEXTableColumnHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableColumnHeader.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h; sourceTree = ""; }; + FB0A0136AC3DBA7DD3D6EC4D4C6CE1EF /* SwipeAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeAnimator.swift; path = Source/SwipeAnimator.swift; sourceTree = ""; }; + FB387186BC80786CE53CAF81EC045EA0 /* GDTCORReachability_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h; sourceTree = ""; }; + FB72A80D294A32241F28BF509A85CDD9 /* Nuke-FLAnimatedImage-Plugin-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-FLAnimatedImage-Plugin-umbrella.h"; sourceTree = ""; }; + FB9B22FEBF1B653DC1423D6AADA4BA9C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FC09013DD8C3D921BA2890080A6534D7 /* FLEXSetExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSetExplorerViewController.m; path = Classes/ObjectExplorers/FLEXSetExplorerViewController.m; sourceTree = ""; }; + FC4BF75B4B0CD8F31957ACAD41D62986 /* OAuthSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OAuthSwift-dummy.m"; sourceTree = ""; }; + FCBDF43C038254D455214063857A5147 /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = ""; }; + FCC06B372D793CF5D666EDE5D8FBFA28 /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = RealmSwift/Object.swift; sourceTree = ""; }; + FCD052E01656B22F5D5849A972D69AD2 /* RCMarkdownParser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RCMarkdownParser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FCD7530BD8960451BFF2E042D320FE5C /* MLPauseButton@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLPauseButton@2x.png"; path = "MobilePlayer/Resources/MLPauseButton@2x.png"; sourceTree = ""; }; + FD48E63D140551C0A8664D4ACA53E179 /* SwipeActionsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActionsView.swift; path = Source/SwipeActionsView.swift; sourceTree = ""; }; + FD6584D8E5A2E5034E5F47070C621484 /* MLReduceVolume@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MLReduceVolume@2x.png"; path = "MobilePlayer/Resources/MLReduceVolume@2x.png"; sourceTree = ""; }; + FD8A08AE115FAA5935FC2C75B6308970 /* GULNetworkLoggerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkLoggerProtocol.h; path = GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h; sourceTree = ""; }; + FDFF8A0E813FB0D0A5325F72A72530A3 /* RocketChatViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RocketChatViewController.modulemap; sourceTree = ""; }; + FE523FE7BCEBA671EE255662C21F702C /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FEA1AA445F59FFBEDD8C7A561844F039 /* SwipeCellKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwipeCellKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF0B9ECC109B6268666DCD67359313F3 /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; + FF11A206856F1B0CBDB65F07B2BFA82F /* Collection+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+OAuthSwift.swift"; path = "Sources/Collection+OAuthSwift.swift"; sourceTree = ""; }; + FF11D4CFF982027D9B3DC946E0498A61 /* SwipeFeedback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeFeedback.swift; path = Source/SwipeFeedback.swift; sourceTree = ""; }; + FFD4900C351E708F8491229C1EB54D25 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = Firebase/Core/Private/FIRComponent.h; sourceTree = ""; }; + FFEAC674A8B976BA5D57152848C3EE36 /* ReachabilitySwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReachabilitySwift-dummy.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0A421EC8DEE0FDA89C91D44D769490A8 /* Frameworks */ = { + 0064D6465B15BEE77CC61A625665FF1C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 272103CEA0D3D05796FCDAF98A36F500 /* Foundation.framework in Frameworks */, + 4B0BB2A32771289C43A311D0F537F197 /* Security.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ED8617B8DDE14DD6B96AB39987953F3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E63FAD363A8BF35B54F07FDFBD5EBE76 /* CoreTelephony.framework in Frameworks */, + FFDCF1F11EB8337D10E32887DB18A1C6 /* Foundation.framework in Frameworks */, + 05BF8BE4E1325978EF75846942E7D8C6 /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1FFDBCB3BE6B77F5903DA10DEC45F344 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0686EA8208E7B23D28AB357EFD7C38B7 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2785D31B7D575CCB6BF33BD96CCD6B48 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FCC5CC78EF7EA4D78761FB90D786A544 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B2D5E30703380CBB12B1861B2D2C02E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 377723A537C507FD82D3BA42074FBC44 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D61AB9AD72456ADA1D6004D4C22D8AC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 408EACF3F50264E982FF82A34D143319 /* CoreGraphics.framework in Frameworks */, - 1789626BE3DD91CCC4587E2F597C3A0F /* Foundation.framework in Frameworks */, - 741AA676CDE1A8690FBC189269B3653C /* QuartzCore.framework in Frameworks */, + 5BE3DE22BAB39EF224DB1071A279119B /* DifferenceKit.framework in Frameworks */, + 223C80F8B21025EA51D3462181721627 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0F7C4FE71F482C3560B5A5C015605796 /* Frameworks */ = { + 2E762217140D17455F6568C05E6712D2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0B9179DB09DA4516830272763573C1BF /* FLAnimatedImage.framework in Frameworks */, - CF017FB6E6F2B4903FCF3F408C8D88B7 /* Foundation.framework in Frameworks */, - 1E8222FAE9479EA276950EDE630491DC /* Nuke.framework in Frameworks */, + 9674B50724984F81D71BEECC92EB5117 /* FLAnimatedImage.framework in Frameworks */, + C65C0B76860F10EFA575D13095DEB419 /* Foundation.framework in Frameworks */, + FD344A59880CFD74B429C82CF780538F /* Nuke.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 14442E112E97BB6840FE5DF52B45CCD0 /* Frameworks */ = { + 34E59CE37745DCCA2AAD821D0D6BF875 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 66F017E19F42F9975D89855D2313F945 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1A8C539BB7A66D9A83B705D32D0B1ED3 /* Frameworks */ = { + 3510A55A0E917F2A06164DB6CB84DF8E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E01A5F6DDF9217A1263917744D577556 /* Foundation.framework in Frameworks */, - 845ADF03AF6F2310D23A503203D09427 /* UIKit.framework in Frameworks */, + 86AED215D4153F63BA15E7BB75ABFB76 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1EEF144745A439E446D012D01E530462 /* Frameworks */ = { + 39E25E840279FCF488E6752EC3C947DD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D507002B5FF47F8A81162EB956B67AF6 /* Foundation.framework in Frameworks */, + E5F1EF1AFACD64AE6EDB3193296662A1 /* MobileCoreServices.framework in Frameworks */, + D6CBCECE323FEFB8AAEF5A9F40DA4752 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 23FF610C99EBEBB2F369A7EFEB677CFE /* Frameworks */ = { + 4A67BC9E4C19CC4C89C43FEAAAAB9E98 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9048482B727C015295B9CA1CE931F3D7 /* FLAnimatedImage.framework in Frameworks */, - 42946D84310B841E34DE37979C58848A /* Foundation.framework in Frameworks */, + 2B77D151EECDF499327A21CEEB74FDBA /* CoreGraphics.framework in Frameworks */, + 32F576FA439C1C5416AF653F9C2CA488 /* Foundation.framework in Frameworks */, + 92C855B85FFB650DB5710D0C3D7FE3AA /* ImageIO.framework in Frameworks */, + 86CFD003C85AC91D3015FAC96D5C8BDA /* MobileCoreServices.framework in Frameworks */, + A09E9776D06C64E0381C740FBDA96010 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 45D5E87A5D14BAF389FF2AC9053451D9 /* Frameworks */ = { + 4BF6F140E118E562527518FAF71B482B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9019E46D1A38ABA9D2F70A4E3C0086CB /* Foundation.framework in Frameworks */, + 63F49C731279480D3F860F7638194D83 /* Foundation.framework in Frameworks */, + 62C67846B59021853AA09F233A963CA6 /* Realm.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5654CBBE42205FE2BCD1DCABBBD7BC8C /* Frameworks */ = { + 585B379150261DEB0F3677F14383A89F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 365ECAF969835849893A23DEF502B1C1 /* Foundation.framework in Frameworks */, + 78F6E5827409412388EE84AA7C5763B6 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5981AD4E3057663B5B3E5E163F1CDC8B /* Frameworks */ = { + 5C4FDA4EC9995FA6682FAEC518654F3A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 51F1CFBA4655EF2590BA55B82FAD9686 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 599A5BA62AAAC02F1EACE1B6813F0EC4 /* Frameworks */ = { + 6685F7C44867765D09D5596667CFD4A5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7774965F9AFE0C12E265A0E1A3A7A8E1 /* Foundation.framework in Frameworks */, + 2C4BCDA4F1971676F30644ED4701DC2A /* CoreGraphics.framework in Frameworks */, + 9AD5D4A5959E8F280BC956B802458690 /* Foundation.framework in Frameworks */, + 262390B4404595D626D8AAAC53E647E7 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5BA6F6B79A71277267409AF5669FC85A /* Frameworks */ = { + 791C024C4D47AD4206795824ECCA8146 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EE44E9B35C20A47036A4019B252B7168 /* Foundation.framework in Frameworks */, + 3B6928CDFD515F261D0BB9CB2FA1E183 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5DEBA221972F7BB333232617B97DD5AD /* Frameworks */ = { + 818B1AF4FAAED24F998A0FD811659EF9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0B521E3C4835ED5F9CA411D02C098E1F /* Foundation.framework in Frameworks */, + 57B3DFBEBD22378F7A8EFB2F41465A94 /* Foundation.framework in Frameworks */, + 39E1CEC38954A52207D26426DC83A6A6 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6A2A9368ED56EED64C61DD269AC4493E /* Frameworks */ = { + 857F54CD8C20774B70F90B782E8D9C20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E6D4692F2A50B88395A8378815F6A93D /* Foundation.framework in Frameworks */, - 1269BFB8FDECA71956F94157D8D8D410 /* MediaPlayer.framework in Frameworks */, - 5B1BDB1C120D49251657E4CADA47C373 /* UIKit.framework in Frameworks */, + 746D8CC262BCA470462C8CEA4BCCE256 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 79F9157BA4A4D06676E00A987E3A176A /* Frameworks */ = { + 8761CADA4178C8116CC4E44CDADE9025 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7044C9AF0467694481DEF31C5F9CD395 /* Foundation.framework in Frameworks */, + 0D4FDFE85BC2264BFC2393891F3D01A5 /* FLAnimatedImage.framework in Frameworks */, + 0D39E6F94A6C4493EBA6275E6804DB85 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 80DD1AD5E7D0A181C5811E6752DC3BCC /* Frameworks */ = { + 8953F1CD95B5BF59E5E9C48153772B39 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62A259FE3DFD2573519B3793C5AC95FA /* Foundation.framework in Frameworks */, - 4132C7A33FBD7DC4D2863A4E272A2682 /* MobileCoreServices.framework in Frameworks */, - 3787A771BB15AD3494D15F311BD8BE57 /* UIKit.framework in Frameworks */, + 3CF7EA2054BA7B949EFEDEB96E297F65 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 91A430840F6A40C492266172A21A2E5F /* Frameworks */ = { + 8B950A88A3692B5F6D08448185D6257A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6A7D8B326CCA522D0189A653A2CECBEB /* Foundation.framework in Frameworks */, + F78B983ED5665802544D3352E0C2FEC7 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9366578AB0C51966BB367B74A7A5882C /* Frameworks */ = { + A48C46A1A4A72F44F8507F8D35735F72 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 88D51D699CDE23D70CE257E3DD3626AF /* Foundation.framework in Frameworks */, + 45494B650D8AC574801C3BFB7E9EAD55 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9568E199E88BB65BF0BDFB47D864B57F /* Frameworks */ = { + AD053F239F7253B7D31E77B8B4C638AD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 30A6016E802BB154D715C09E54ECA3DF /* CoreGraphics.framework in Frameworks */, - 54536913B329CEF1056414FCBB7BF2DB /* Foundation.framework in Frameworks */, - 8A2F23A2EA8D32700509142EDDB1E4D3 /* UIKit.framework in Frameworks */, + B4B2AF86C7C6826D48F751F13ED2C03D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 98B6B1A6D4CE7937D1D2E778DFCDBA93 /* Frameworks */ = { + B6F6BC02A433BA97CF27C38473E0FD67 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 67DF9E484B188A631226A2346A4BE7A4 /* Foundation.framework in Frameworks */, + 26CE668B3B082A48F763B845BA0EB84F /* Foundation.framework in Frameworks */, + 241FFF5EE2ECA5A8A1711B64DDBBBCDF /* MediaPlayer.framework in Frameworks */, + 295F915ADD39A106C43A173F72A23865 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9D3A69220AA01130F5BB8589A0BB2C16 /* Frameworks */ = { + BFE6689F46D174F7DDACB416EC3BD0AB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FFEFC7CFA50021821D0653C53A5A21F0 /* Foundation.framework in Frameworks */, - D5CB6A5A0916147E91A6F83A9BA95553 /* Realm.framework in Frameworks */, + 96011DEF3B0405643E5F23F3D1C433E4 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A491BC7BB3378D1B493A9D570D3677AC /* Frameworks */ = { + C552E23E6BAEE088F210AF86C33890F4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E3B2697F6230BC60E057EFF707F932EC /* CoreGraphics.framework in Frameworks */, - 41B2B2B59B3911103011F12BEDBBDB55 /* Foundation.framework in Frameworks */, - 3D310119473B5C77C489C7BC808AB904 /* ImageIO.framework in Frameworks */, - E41981BCDEB0C01BB4447180AE077DDE /* MobileCoreServices.framework in Frameworks */, - 0872BEE3CBB755DA509723BB0769217F /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C984B0005F16913A95FD2D5053B2CA54 /* Frameworks */ = { + DCE0167E9B76EA65A7E25019EFB1D085 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2CE8125197676C8C195721B3594B58BE /* Foundation.framework in Frameworks */, + 4DEF3A7D815466C2ADA7EDA2E71B29F5 /* CoreGraphics.framework in Frameworks */, + 064232A8BF61A3AB04EE71D007230222 /* Foundation.framework in Frameworks */, + 460CC3900CFF1C46C8DF58CF03E16013 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D5C9F275FC21EA77572820DB7BD33E69 /* Frameworks */ = { + E8F23A2934F983831941BF1EDCB03941 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DDA0F5283587E5C96C70689AF0A895E8 /* DifferenceKit.framework in Frameworks */, - 4A751BA19E9412AFAA2F941434EFF5DD /* Foundation.framework in Frameworks */, + 13793B7EBD7DF970D36B42BD96E7C71F /* Foundation.framework in Frameworks */, + 3E8F01898AB08B111AED810583FB1785 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DFF9DE72642CC9216BA57F72024F98B3 /* Frameworks */ = { + EC1C995D24731C0B41909E3CDE5F56B1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A7877C478459687CF91D7DB66EF8BFCF /* Foundation.framework in Frameworks */, + 8D204ADC40D22118D7A162EDFA96A9BF /* Foundation.framework in Frameworks */, + 653BF4A4A1AFB814A47C59AEE1CA2E1A /* Security.framework in Frameworks */, + 43B50029B4A7DB842F04617B8BE0106D /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E588A02C16A6AA28CC0987FC43964C6C /* Frameworks */ = { + ED07C5153D953AB77051B080199BEB5F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8FBA09638F44D3E142635A796D6A011A /* Foundation.framework in Frameworks */, - 2799B1DC58880BBE1D5059DA0EC72F8B /* SystemConfiguration.framework in Frameworks */, + CD0510B60889A56BEA671D2034646164 /* Foundation.framework in Frameworks */, + 7EAD7345BFA15BE0A798E2E6EDEEF449 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F66849DE9A6B21D59F76B3F268DCC5A9 /* Frameworks */ = { + F3B36BE4FF2FB22AEFEF60935199D70E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A336528FED8820851D7C4B6D04C5BB5 /* Foundation.framework in Frameworks */, - 2100EFBF0C901CA457EC5002DD691484 /* Security.framework in Frameworks */, - D0738B2AF5BAED8B8C45BAC875BCE9EA /* SystemConfiguration.framework in Frameworks */, + B8F9028722735130FAC65F7EFA4DD57A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FC5743D25AE1E8A5ADD4594AA0F1241D /* Frameworks */ = { + F90F23F01B63D7C64C3E985D81EC0369 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6C1202FD28A75971C36B63935414280B /* Foundation.framework in Frameworks */, - 2EB5DBD9F597DB6134FBEE3F79331B3A /* Security.framework in Frameworks */, + 9F2C758B5F9AB194604777EA29D027A0 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 019D0E701F5C8579CA8BF6C7E184A570 /* GoogleAppMeasurement */ = { - isa = PBXGroup; - children = ( - FA04D3B01DD2B5C8966BE065C59E191A /* Frameworks */, - 0275A0733B374BB87D34AEA802DCB364 /* Support Files */, - ); - path = GoogleAppMeasurement; - sourceTree = ""; - }; - 0275A0733B374BB87D34AEA802DCB364 /* Support Files */ = { + 03758832773E58AC2869C174AB45E1FF /* Frameworks */ = { isa = PBXGroup; children = ( - 251CF09B5F640711C8BF60E504E7610D /* GoogleAppMeasurement.xcconfig */, + A01F5F2805A61F331D1782E59E19A60E /* Fabric.framework */, ); - name = "Support Files"; - path = "../Target Support Files/GoogleAppMeasurement"; + name = Frameworks; sourceTree = ""; }; - 027F900EFC65307FF2692214B7F50797 /* Logger */ = { + 0AE17530D966B4C1F18650093A2F5600 /* Products */ = { isa = PBXGroup; children = ( - E1D9156B52F527B2FCBF2D783DE5E94E /* GULLogger.h */, - 4CC298E0DD3344AE3C207F4BA2F81F49 /* GULLogger.m */, - CA5A3BAFCF86A0C65F805637E4FAD714 /* GULLoggerLevel.h */, + 3F873F09E5A016714EE5E7E93A94181B /* DifferenceKit.framework */, + 8E897B0A8D4E34D0B3103DE27B8F4017 /* DifferenceKit.framework */, + D4086735641EDAE97236BA5507BFFD04 /* FirebaseCore.framework */, + C86E7BE5EB409303F7FD28D5A89C0F07 /* FirebaseCoreDiagnostics.framework */, + C0C678A19E7DA05B9FD127F0BE66CF7E /* FirebaseInstanceID.framework */, + 667C0A85342E19C0E3349157DF91CE50 /* FLAnimatedImage.framework */, + 90C4BE9B2BC6BC2FAE00D9AB226F7B2F /* FLEX.framework */, + 9E49935ADE10E35E5C2557F818400C1C /* GoogleDataTransport.framework */, + ED332F3F26F8A59AF2F976C03C715A58 /* GoogleDataTransportCCTSupport.framework */, + 8786D03212235D85EB47965BCCC45EF6 /* GoogleUtilities.framework */, + FE523FE7BCEBA671EE255662C21F702C /* MBProgressHUD.framework */, + A494F9EA5E3D384CE70D6887630ABC05 /* MobilePlayer.bundle */, + 6929B5C2D09D7D72BBF19F56C05EC210 /* MobilePlayer.framework */, + D068F63E361BBA784B580498F930203A /* nanopb.framework */, + 17CD0BD73C60F4266510F73C01780F32 /* Nuke.framework */, + AD5F998F7DB138F15F5DBAAADD1F377F /* NukeFLAnimatedImagePlugin.framework */, + EEF1A71C55946D10D2BA2AF2D7BDA8B7 /* OAuthSwift.framework */, + 4DB8D249556332731EBBF3FDDA82CA87 /* OnePasswordExtension.framework */, + 30FEFB929544CCB63FA738F715041190 /* OnePasswordExtensionResources.bundle */, + 7D04A209DDA5CEA846E43E77126A28EC /* Pods_Rocket_Chat.framework */, + 91962B6FEB8F1FCD5D87ACD4D3AD088E /* Pods_Rocket_Chat_ShareExtension.framework */, + 1C09E3612D2D8CF46BE2E4F0DF3DEA59 /* Pods_Rocket_ChatTests.framework */, + FCD052E01656B22F5D5849A972D69AD2 /* RCMarkdownParser.framework */, + D5A973DEBD80F3D8AEFE813F1749A5E3 /* Reachability.framework */, + 9694333BF52AAEFFD514D14D9CE8D9EE /* Realm.framework */, + 7527C818345BFC0DA6BF4609B55BF949 /* RealmSwift.framework */, + 35A34967BD2FE519E355E26DC9CD04E1 /* RocketChatViewController.framework */, + 87348ED25040782AD5987C26638802FB /* semver.framework */, + 80E7CC2FD823AC8FD597FFED0A80973E /* SimpleImageViewer.framework */, + 98AC64352E3F48A417A5B2B7E7CF08A9 /* Starscream.framework */, + 7608A9C444EFF50ED52ABDB083991790 /* SwiftyJSON.framework */, + FEA1AA445F59FFBEDD8C7A561844F039 /* SwipeCellKit.framework */, ); - name = Logger; + name = Products; sourceTree = ""; }; - 02D6AFEEC62DF49E8717F5F3E59B450E /* Network */ = { + 13B099D4F15643F75BE4590AFDD90616 /* Nuke-FLAnimatedImage-Plugin */ = { isa = PBXGroup; children = ( - 55191D846AB52B041E27FF3D457CD78B /* GULMutableDictionary.h */, - 2EB46F8EE9C0DE738579F8200D7A50C5 /* GULMutableDictionary.m */, - 92BB7D3EDDCEBE6DD3FA5F8CF77CA478 /* GULNetwork.h */, - 6BDC98A16D5E56AA2EC12BBE4EF79986 /* GULNetwork.m */, - 0026A20F0F7ABD308811BBFAD64045C7 /* GULNetworkConstants.h */, - CBEAD04A0E5F31AA86927502F8508ABB /* GULNetworkConstants.m */, - CF8F8D59756E1568CF32142641B3D7EF /* GULNetworkLoggerProtocol.h */, - 1FBE0974C24004A857479378B91EE7F1 /* GULNetworkMessageCode.h */, - BE10F135A2E072105BA9A4E246DE7A83 /* GULNetworkURLSession.h */, - 2AF5F4874F144D7CCC48EDE4FDF5E4D7 /* GULNetworkURLSession.m */, + B2E7A6445977727E003D281522A8FA41 /* AnimatedImage.swift */, + DD663442EE686E058C76909B7F0E5A99 /* Support Files */, ); - name = Network; + path = "Nuke-FLAnimatedImage-Plugin"; sourceTree = ""; }; - 0568E471F724C5C0FA4886F04A02A3CE /* Fabric */ = { + 143AAE8C978352D83CF5856901602221 /* Resources */ = { isa = PBXGroup; children = ( - EFC57E7EF073B1684688D140B5E9375A /* FABAttributes.h */, - 3958693CAEA2367EFD2DC98EEF49D3AD /* Fabric.h */, - 06FFCED400D04B5A193FBB36A126582A /* Frameworks */, - BBD62FCFFB8808A325200C178B00C6C6 /* Support Files */, + 0BF32ED95154050ACFD78362C12A9421 /* MLCloseButton.png */, + 9884CA4C5DEAE8438DDC5449834C4F00 /* MLCloseButton@2x.png */, + A015DD8195DD1A2967701B1D9043B45C /* MLCloseButton@3x.png */, + BADE05219A358EB1BC57717BC10E0713 /* MLIncreaseVolume.png */, + 057A667D88036DCC69F69CA292086059 /* MLIncreaseVolume@2x.png */, + 5038AF800CB05C298D99D0A8C755BDDE /* MLIncreaseVolume@3x.png */, + 8A934ED089667DDAE28628D4D38495F2 /* MLPauseButton.png */, + FCD7530BD8960451BFF2E042D320FE5C /* MLPauseButton@2x.png */, + E7FC0517B73CD989C8BF0841EB78FA3E /* MLPauseButton@3x.png */, + 8BD69A9042FBDDA3D5FBFDA917668DB4 /* MLPlayButton.png */, + 9B67B4C26829D0F1244B61FA5CA09CE3 /* MLPlayButton@2x.png */, + F2C27DE19D0D763C2AE9C743CB64CF9B /* MLPlayButton@3x.png */, + B5FB232A7E2AAA21A01CBE4DF3DA35D5 /* MLReduceVolume.png */, + FD6584D8E5A2E5034E5F47070C621484 /* MLReduceVolume@2x.png */, + DD2402EA03AD1326FD94C8BF42D1BA03 /* MLReduceVolume@3x.png */, + E4D390D85C87A5847795D86A63C3E12A /* MLShareButton.png */, + 6A5863EAFA18463A3EF8CDC435506C41 /* MLShareButton@2x.png */, + 9AE09672F9A57A77BE6B2C6F091F1AC5 /* MLShareButton@3x.png */, + 3876EC1DCAF87A2DED08AF037A3BD377 /* MLVolumeButton.png */, + D71388B72429959FDC97FD33684EF015 /* MLVolumeButton@2x.png */, + E3DAB7A0527FF8002B28692033BDD1C2 /* MLVolumeButton@3x.png */, ); - path = Fabric; + name = Resources; sourceTree = ""; }; - 06FFCED400D04B5A193FBB36A126582A /* Frameworks */ = { + 1AF9DBABB6A202EFD588950EA33FCC72 /* Starscream */ = { isa = PBXGroup; children = ( - 88C04BC13FF8D0DE547E3D8A3C188FF1 /* Fabric.framework */, + 0B1A3625364E2B38F1B2913139AD0E0D /* Compression.swift */, + 44E0C195BBFF6F2F505F923CB5FF0DC5 /* SSLClientCertificate.swift */, + 8F219197B7A42F3B6CE329DD05EBD187 /* SSLSecurity.swift */, + 62029B76B1FEB8FC43398AB3B7CF855E /* WebSocket.swift */, + FEA9D60568E45C257315708F511121C6 /* Support Files */, ); - name = Frameworks; + path = Starscream; sourceTree = ""; }; - 08DCCCE24C4109BAF8EA15286F510803 /* GoogleUtilities */ = { + 1E50ABA907E1EB96BAF698F8329ADCCD /* Support Files */ = { isa = PBXGroup; children = ( - 33C44B02B17975A8EBBABB2DE0556035 /* AppDelegateSwizzler */, - 8104130FA7F411593CD2EDA2DA8A36C7 /* Environment */, - 027F900EFC65307FF2692214B7F50797 /* Logger */, - 4663AC0756AD6CEF34CE635D155D8A9C /* MethodSwizzler */, - 02D6AFEEC62DF49E8717F5F3E59B450E /* Network */, - 709CF09E01C8E75977236660BD76375E /* NSData+zlib */, - D8791589DBA03A12C5F6CAC7F5D5CDA9 /* Reachability */, - 42989374A1CBDFA513364BF1F90E5E10 /* Support Files */, - B932E0D42CEDC55C3FE6EC2263D26A3C /* UserDefaults */, + D6F00AA011F05775F26050F45C98234C /* DifferenceKit.modulemap */, + F4ECBB89143891E5F07DE7C8E87CF10C /* DifferenceKit.xcconfig */, + 21558A53A17217C1C216E0B30DC07F2B /* DifferenceKit-Core.modulemap */, + 3EA55D22D5912A2C86AB7627E711A2B9 /* DifferenceKit-Core.xcconfig */, + 566F5658677DB157D7BF7C4DD8983EE4 /* DifferenceKit-Core-dummy.m */, + 9271776212F75926BE145742D1ADFA03 /* DifferenceKit-Core-prefix.pch */, + B88AC4F30984A6B68438F23D577B4258 /* DifferenceKit-Core-umbrella.h */, + 70AF9C8F8E0DDDFD11281DC4E6C80CBF /* DifferenceKit-dummy.m */, + 846B59AD6F4744DB86368DF8AF0C22B7 /* DifferenceKit-prefix.pch */, + E04723DA07D083E6DF0B4C858623372F /* DifferenceKit-umbrella.h */, + 03B2E440322944242314A9B7B36442F7 /* Info.plist */, + 97BB9190361F8E673F4A033B0ADF977B /* Info.plist */, ); - path = GoogleUtilities; + name = "Support Files"; + path = "../Target Support Files/DifferenceKit"; sourceTree = ""; }; - 0B50CF8B1E4C0F7B73E9F009CD10BF92 /* SimpleImageViewer */ = { + 1F9A5B8E125FB03E4BC758418A2F4924 /* Pods-Rocket.Chat */ = { isa = PBXGroup; children = ( - 76B94A79E375977F3C13DAAFCAAB04ED /* AnimatableImageView.swift */, - F508A762E4D7A8BBE17ABED654BF4A78 /* ImageViewerConfiguration.swift */, - 12DB2CBD480E0FE8E359B01EEC60A369 /* ImageViewerController.swift */, - 7F409184780D14E976C75F31A60CF7AE /* ImageViewerDismissalInteractor.swift */, - 8EC2F3C0C70557DA6236B12E85DC2187 /* ImageViewerDismissalTransition.swift */, - 8411D7490056AC3826FF0DD383097C48 /* ImageViewerPresentationTransition.swift */, - E7D798ED30C9E698734E58256FBE923F /* ImageViewerTransitioningHandler.swift */, - 9481591ECAC4AA58CAEABAC0D861F257 /* Utilities.swift */, - 1B8E41315A23E6B8750B57ABEB7D8CCD /* Resources */, - F33C2B537B2D8ED6B31D17F2219F356B /* Support Files */, + 97F6EACAD24B96C06052172DEB281624 /* Info.plist */, + EF917E0DB175B2510CB4639887D9C683 /* Pods-Rocket.Chat.modulemap */, + 8DA4CC1B8469807B05A89DFC730B0CF4 /* Pods-Rocket.Chat-acknowledgements.markdown */, + B19C7A6C63CD7E26651A158E091C102E /* Pods-Rocket.Chat-acknowledgements.plist */, + D03921F54934938F38B4585819BE1511 /* Pods-Rocket.Chat-dummy.m */, + 12F2EC24BEAFC86A87F98D430F823770 /* Pods-Rocket.Chat-frameworks.sh */, + A3A1FC57DC356E18447791DFF5C87DE4 /* Pods-Rocket.Chat-resources.sh */, + C565EDECAFA95B80AB6646514D22A0E9 /* Pods-Rocket.Chat-umbrella.h */, + 7D8C56882FB12EDB72D35BD47CC0EB40 /* Pods-Rocket.Chat.beta.xcconfig */, + 439A39FB13D63F87983F021124302E30 /* Pods-Rocket.Chat.debug.xcconfig */, + 48B5842107C21920D5CC5CC5EBBF95F4 /* Pods-Rocket.Chat.release.xcconfig */, + 93078337775DA9EF95DA5AA05275CB83 /* Pods-Rocket.Chat.test.xcconfig */, ); - path = SimpleImageViewer; + name = "Pods-Rocket.Chat"; + path = "Target Support Files/Pods-Rocket.Chat"; sourceTree = ""; }; - 0B9D6FBF94C57A389CC619CDBD87311D /* Support Files */ = { + 1FE77FE048A1AD7D6C358E5B211881A1 /* Support Files */ = { isa = PBXGroup; children = ( - 47A952BE7A5898FC22B107897BAFE65F /* FirebaseCore.modulemap */, - 116828EF4369238ED13BEDAFBEB11F01 /* FirebaseCore.xcconfig */, - 818E61ABD382F8AA81525AF139542CA7 /* FirebaseCore-dummy.m */, - 5AF0B9DAA4D78665A00105B68E4EF1AE /* FirebaseCore-Info.plist */, - 3638726DBB87535CFD5E5E857D0839DA /* FirebaseCore-umbrella.h */, + 3E2AD4BB9A335A5A0F5043B5BD362C95 /* FirebaseInstanceID.modulemap */, + A18A9B6CDC28EB90FAFAF10F31AA02D3 /* FirebaseInstanceID.xcconfig */, + EA86BEEBE2B34813D665E8C675226275 /* FirebaseInstanceID-dummy.m */, + BAF136986A17C6EEF580B2C7BE76B6E1 /* FirebaseInstanceID-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/FirebaseCore"; + path = "../Target Support Files/FirebaseInstanceID"; sourceTree = ""; }; - 12DA77529C67D931791EC5A661E2D53F /* decode */ = { + 23BC4D9B128237F459F3D9F045E7386B /* ReachabilitySwift */ = { isa = PBXGroup; children = ( + C88D0C0E13D0122C75BDB0F73CD861EC /* Reachability.swift */, + 3F42AC4E179026C033E646CB75579EAC /* Support Files */, ); - name = decode; + path = ReachabilitySwift; sourceTree = ""; }; - 134566D3C3DC8A4C4E26CD05F5B380F4 /* Support Files */ = { + 286F25EF012081B058CE4E4C7DB3CE49 /* Support Files */ = { isa = PBXGroup; children = ( - 98EF7922584BE97377DF9E9DDD731A03 /* OAuthSwift.modulemap */, - 91CC5127C3460D3FFE572F5FEF65FDA8 /* OAuthSwift.xcconfig */, - 0496423F7189F9EF6EE8C879C572C6B7 /* OAuthSwift-dummy.m */, - B287CF5D59754FB3CD491AD495BDAE1F /* OAuthSwift-Info.plist */, - FCD20B99678EE9ED307E72AA8931B264 /* OAuthSwift-prefix.pch */, - C7C3DAAF10A23CAB5C70F5C5C6E671FC /* OAuthSwift-umbrella.h */, + 1F0D3E564CC3106AF1411B77917C4462 /* Info.plist */, + BD459B4A8AF6DD2689794D875EB701E6 /* MBProgressHUD.modulemap */, + 7F08F04244028A076C0A024B7958BC78 /* MBProgressHUD.xcconfig */, + D8DF83845CFDE15CCD2053980A57ECB8 /* MBProgressHUD-dummy.m */, + 6E9126CD24773AA6731E99E39F7B9D8F /* MBProgressHUD-prefix.pch */, + 9D78F44859C091E3852DC821192F3B7B /* MBProgressHUD-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/OAuthSwift"; + path = "../Target Support Files/MBProgressHUD"; sourceTree = ""; }; - 13DE33AC84F28EFF2D88230D9CCCB042 /* Support Files */ = { + 2B70A3D11C584DEF798DF151A47B9FB0 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 94CE0EF4031DF16493DBE8607001E0F3 /* nanopb.modulemap */, - D71B18A1A09C86F3590800BD6D6CE5AD /* nanopb.xcconfig */, - 5729D188C659DF70D6DDF7DD47FD2B6C /* nanopb-dummy.m */, - EEBAA91E7927BF103B02F06A163BF3D2 /* nanopb-Info.plist */, - B75D954F3A0190270EB44DCE3028AEF1 /* nanopb-prefix.pch */, - 413449DBF0EFC17117560ED7BDF23D5F /* nanopb-umbrella.h */, + 1F9A5B8E125FB03E4BC758418A2F4924 /* Pods-Rocket.Chat */, + B0E87491EB81EDE7A4095E4CEA0592D5 /* Pods-Rocket.ChatTests */, + 92D2FC2B460886584E9C6645DE15E50D /* Pods-Rocket.Chat.ShareExtension */, ); - name = "Support Files"; - path = "../Target Support Files/nanopb"; + name = "Targets Support Files"; sourceTree = ""; }; - 18110FA56CEB24150F3015C47AA9899F /* Support Files */ = { + 2CB95EBB288B044747A314336FEFD7A7 /* Environment */ = { isa = PBXGroup; children = ( - D6E4006484BA11C72639E2E375110299 /* FLAnimatedImage.modulemap */, - 37F4B658CD5B174F767B125F4A704940 /* FLAnimatedImage.xcconfig */, - 3E15777F6486B1013B4DF0C82D0E50E1 /* FLAnimatedImage-dummy.m */, - EFB571DDB632EB661884AE40761D6973 /* FLAnimatedImage-Info.plist */, - 1BD4F09662FB465F34179B045585D620 /* FLAnimatedImage-prefix.pch */, - 8AB942C29CCDD1A2922E097B076C2C7E /* FLAnimatedImage-umbrella.h */, + 95DADAF75B1AC47824F8EA9473EBA556 /* GULAppEnvironmentUtil.h */, + D8A2A1A580B9153A7127EA84EF0C4EAE /* GULAppEnvironmentUtil.m */, ); - name = "Support Files"; - path = "../Target Support Files/FLAnimatedImage"; + name = Environment; sourceTree = ""; }; - 1B8E41315A23E6B8750B57ABEB7D8CCD /* Resources */ = { + 3346D445F9A51511AC9B1BC7A86AD34A /* Support Files */ = { isa = PBXGroup; children = ( - 09D9E581152A01264DF9E411E22E0819 /* ImageViewer-Assets.xcassets */, - D9E54A94B1291E4EDBA9DE36947B9A54 /* ImageViewerController.xib */, + 64B8785594CD15968588D667E608A262 /* FLEX.modulemap */, + 37EA5C62A914BE9A0F0F998EEFE3E955 /* FLEX.xcconfig */, + 701A5399051E42039AA8BB820B4DB17C /* FLEX-dummy.m */, + C78F313991532A219DC6FF57518346FF /* FLEX-prefix.pch */, + 479A6210B4D7CEC57F10675243DAC9D6 /* FLEX-umbrella.h */, + 93ADDAD924D7252DE6A3EFDDEA9BF699 /* Info.plist */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/FLEX"; sourceTree = ""; }; - 1BA61030506B1F2B958E055CF5B74A6B /* Support Files */ = { + 33C8EE9A651AF5252BA2B11D37759FB4 /* encode */ = { isa = PBXGroup; children = ( - 9B8C6D0A6CDFE78076B58E7417DEDCB1 /* RocketChatViewController.modulemap */, - 9319971B69A41A780F031EBF2D11295F /* RocketChatViewController.xcconfig */, - 704582F8880011AD6A11E2A93085D9ED /* RocketChatViewController-dummy.m */, - 093BB86B235598B8D67C35130BB77A0A /* RocketChatViewController-Info.plist */, - F2FF7BAA87C1710846942EB13AAE58E0 /* RocketChatViewController-prefix.pch */, - 8E6D48C056D7ABD83A776326B4507574 /* RocketChatViewController-umbrella.h */, ); - name = "Support Files"; - path = "../Target Support Files/RocketChatViewController"; + name = encode; sourceTree = ""; }; - 227F4E6F2828B71C08107927E59B4D83 /* UIKitExtension */ = { + 33EC368DDA7DB458F07DFA9F183E5A47 /* Frameworks */ = { isa = PBXGroup; children = ( - 1644E4106E0562D82D260ABCFB75A2C7 /* UIKitExtension.swift */, + 14ADD1E11F40E64A4455A4B8A5F2632A /* GoogleAppMeasurement.framework */, ); - name = UIKitExtension; + name = Frameworks; sourceTree = ""; }; - 22E90E9EF203B26C7EB132D3B2FD87BE /* MobilePlayer */ = { + 34F63CD2B8E276FCDE718B71243FFBB6 /* MobilePlayer */ = { isa = PBXGroup; children = ( - D4DC8419C707CB7A58B1A4C8BD9EE8DE /* Bar.swift */, - 820BBC0E45EC922E58E4FBFE7475326A /* BarConfig.swift */, - 4619EE3C6132791055887B917E68786E /* Button.swift */, - E69E3D818DC80F6D47335B112A8B592F /* ButtonConfig.swift */, - 37F0161E37F277A1BC796C1E07D723D5 /* ClosureSupport.swift */, - B0DA500E4E163BC614C9692435D31BE0 /* Element.swift */, - 7164F55269A0E1B5B3D48B856AF3D4D7 /* ElementConfig.swift */, - 139FBF22ACDC54C9663E33C956203D6D /* Label.swift */, - C854AD920C06992A6369B47A6B64CE40 /* LabelConfig.swift */, - 83CC7729A09D7F330690924600CB80E7 /* MobilePlayerConfig.swift */, - 6815F73B2844B6C13FF4B7DA032A8749 /* MobilePlayerControlsView.swift */, - 867759C653584B29823EDA409706762B /* MobilePlayerNotification.swift */, - B7A7499536D94FFE98E8D15071CC2D28 /* MobilePlayerOverlayViewController.swift */, - 6EC32D1CD1F90773DB6C88B00F0F98FA /* MobilePlayerViewController.swift */, - 22BCB54C6D895ED964518BE798786952 /* Slider.swift */, - 509D517757023446A7248C515D973F06 /* SliderConfig.swift */, - 39D32862C3EC40DE02CFB051F86A4AAD /* StateHelper.swift */, - BD507380753C41FA2AE5EA9C5D47557B /* ToggleButton.swift */, - 6CE6CD8EFD0DA228F72B0D11A866303F /* ToggleButtonConfig.swift */, - AA7295DE7C56010AF51B3BA29417D50B /* UIColor+Hex.swift */, - 93B52102E1E20AE9D9262AD89A22359A /* UIImage+CocoaPods.swift */, - B2054806D5B8F9F2A8778543E4B64ECC /* VolumeView.swift */, - 03B020D51DF5AE2880800E4F4BF37C91 /* WatermarkConfig.swift */, - C7B591117F4C4104D012A4B3D2FE8F18 /* WatermarkViewController.swift */, - 33A200004AD159B6358096A88063EFAB /* YoutubeParser.swift */, - B30930AC48A1E6DE990806A0446F4563 /* Resources */, - 73098374486B877A7EBC325899C59C94 /* Support Files */, + 5D2EB66643CB492D65162C0A26E42508 /* Bar.swift */, + B857989A16C0003C2D7E960432BBFD34 /* BarConfig.swift */, + 0F451DBBBBAE5A78217571E380A6ECCE /* Button.swift */, + 8C75B556A12C59E5F876646A8617DC57 /* ButtonConfig.swift */, + 2FB0EBC8214E9F936FCE046E055921E3 /* ClosureSupport.swift */, + F99E4B9F8FDC97460A1D44F93F27A144 /* Element.swift */, + 385B23F1248C4D0AB3C82E855219E4F1 /* ElementConfig.swift */, + 3E10252339FC1F5EC4A69437D4105D4E /* Label.swift */, + D274E53D4440177A5A2DBE9DCAEF5C8E /* LabelConfig.swift */, + 443994482073B5BADB536B713A37AD2F /* MobilePlayerConfig.swift */, + AE6DADD103242BAAA58FA2C0B80B4767 /* MobilePlayerControlsView.swift */, + 22F6A2438CA91D0EB7D1FB9E1A720F0F /* MobilePlayerNotification.swift */, + B22787536A79D3159E37C0FDED18B489 /* MobilePlayerOverlayViewController.swift */, + 91EAA5F02AA78F3BBD0A44FFC033E8E1 /* MobilePlayerViewController.swift */, + 55F23D231BC9A96094EC1846342E3DEA /* Slider.swift */, + 057BC959525B3953B4065601EBD1660A /* SliderConfig.swift */, + 3B4698DF692D5774FAB60FCB6A78BE0F /* StateHelper.swift */, + 10DB97CD79D8218FDAE039932C1541BD /* ToggleButton.swift */, + 84FCBC6248717B708DD41730B2E7F305 /* ToggleButtonConfig.swift */, + 86F57EFE8DCE74DA586425C2933386EB /* UIColor+Hex.swift */, + 78635239CA2877A9734AFB89A1BE0286 /* UIImage+CocoaPods.swift */, + 4A59611CCEC6C081E12F386A05557AB2 /* VolumeView.swift */, + AFD482BDB3E297A6B76BC9823CD14248 /* WatermarkConfig.swift */, + 4B7CEDBF1F8D04791B4C64CEEFFFB101 /* WatermarkViewController.swift */, + 58A2FD0A34545BB56A4A26CF2B959B31 /* YoutubeParser.swift */, + 143AAE8C978352D83CF5856901602221 /* Resources */, + CA8CE18C201D0B1F28F9A311B7F19D65 /* Support Files */, ); path = MobilePlayer; sourceTree = ""; }; - 23C4A96793730D28584A86B629E5062E /* Frameworks */ = { + 3A250869153E5AFEE62B28D215D07B34 /* Resources */ = { isa = PBXGroup; children = ( - 21696A1223D4146657BBCE34F837F73A /* librealmcore-ios.a */, + 5E2F6FF40F907B90E73CA347B6BF0790 /* 1Password.xcassets */, ); - name = Frameworks; + name = Resources; sourceTree = ""; }; - 2866CEFB989ED4BC393FB23360807B7E /* ViewController */ = { + 3C0668636691C9206B49736A2F8A2DF9 /* Logger */ = { isa = PBXGroup; children = ( - B785F0699D7A2B3DC184A88B0217F9CE /* RocketChatViewController.swift */, - 48C8286DD90818D91642D489B29268A5 /* UIKitExtension.swift */, + 2E685B053E4D7805F2856778090E0FF9 /* GULLogger.h */, + 9A0C825B59009C4F20BB70AF02960A3C /* GULLogger.m */, + 5768A14CC35F39A7CCACFFB986E8C9CD /* GULLoggerLevel.h */, ); - name = ViewController; + name = Logger; sourceTree = ""; }; - 29B4A947BB7011C27115FE950C47E5EA /* Support Files */ = { + 3F42AC4E179026C033E646CB75579EAC /* Support Files */ = { isa = PBXGroup; children = ( - A1A1C086EE9337CD50981DE8B28B4A5F /* SwiftyJSON.modulemap */, - B83D9F83C0DE51AD32D04844B2A1A908 /* SwiftyJSON.xcconfig */, - 3A56DDFF8AA56B65F865263EC3E0684C /* SwiftyJSON-dummy.m */, - 1A39AAF2AF9A3A3D27CF4EF97E7DFDB0 /* SwiftyJSON-Info.plist */, - 437904CE6A5355C7420660AA03BC607E /* SwiftyJSON-prefix.pch */, - 1A97D2037391BED8C528962A04FE0ABD /* SwiftyJSON-umbrella.h */, + FB9B22FEBF1B653DC1423D6AADA4BA9C /* Info.plist */, + CB224D4CAFCFA72778D1EFE04FB955B3 /* ReachabilitySwift.modulemap */, + 4475ECFA5B6F32225A32177F548BAC69 /* ReachabilitySwift.xcconfig */, + FFEAC674A8B976BA5D57152848C3EE36 /* ReachabilitySwift-dummy.m */, + C89CC87C5B7F09A9A63DCCDCABEC514F /* ReachabilitySwift-prefix.pch */, + BD6651C10EE226E8D1139BC4FB5C8B51 /* ReachabilitySwift-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/SwiftyJSON"; + path = "../Target Support Files/ReachabilitySwift"; sourceTree = ""; }; - 2C5317294C44315716730B17B1D0A41A /* FirebaseCore */ = { + 40C2DF71CB390463D005B485B987C443 /* FLEX */ = { isa = PBXGroup; children = ( - 0CB817525ED6968FE2191EC3E20574AE /* FIRAnalyticsConfiguration.h */, - F5A940A556BE07E18E8A2B7B870A3B00 /* FIRAnalyticsConfiguration.m */, - 2C7E5DB78FE7D473F90250C5179EEC29 /* FIRAnalyticsConfiguration+Internal.h */, - 8FECDBE39D9C91B48FB64208F9DE1A9F /* FIRApp.h */, - 867E9EE6BC2BC095B44C2A184FB0DA40 /* FIRApp.m */, - 962D64A210234D1F131A37BA50462ED1 /* FIRAppAssociationRegistration.h */, - 2D15697CF3296A071ACF6E258A57ACBC /* FIRAppAssociationRegistration.m */, - 67AC951FAE00BB6DFC38F91165B0644D /* FIRAppInternal.h */, - 489D3998B0EA8B5FFC734DB9DB330F19 /* FIRBundleUtil.h */, - 42F7A009DA86EB14F6C616F92FEFDDC7 /* FIRBundleUtil.m */, - B954B665FCCCF2A2EB8073591EFEE4DC /* FIRComponent.h */, - 0D12101A1693F0452175DE44D7945CA3 /* FIRComponent.m */, - 863C808B5A561495E916B18EE00C3D39 /* FIRComponentContainer.h */, - 1ACDB5FA5E76926989C3D043551E0F1D /* FIRComponentContainer.m */, - FE3D21DEBFEBC0B31AB1DF0B07694330 /* FIRComponentContainerInternal.h */, - 22A2B62DA04BFE9E1E419C2850E2F826 /* FIRComponentRegistrant.h */, - 38A51A99FA0D2A903B27AD7D7F70A103 /* FIRComponentType.h */, - 04AD05BAA38078E4FF40AD9E2BC7F2F5 /* FIRComponentType.m */, - F01B30C46ABA9C8000B2361782F5CB70 /* FIRConfiguration.h */, - AB43F2A2F95CAF6284BBDC7FAD11AE0A /* FIRConfiguration.m */, - B64196BFCA6777D886807D9B44A832BC /* FIRCoreConfigurable.h */, - EAB24BCF88EB03A8FB0AB9EB0285E8BD /* FIRDependency.h */, - 3D00DE7A1E860DB1CEF37001EA4040C5 /* FIRDependency.m */, - CD55EE56952130E7CD6E2CDB35DFB28F /* FirebaseCore.h */, - 3FA60F578BBB5462B01F663E38555649 /* FIRErrorCode.h */, - 2BA8A24571C847DB0021A7164E9BA91E /* FIRErrors.h */, - D369BD2876EA0E176D2C2CDFB13265FC /* FIRErrors.m */, - A8463B94FE9DE106ECDC0AACCCC37B8B /* FIRLogger.h */, - 3D45AFAB3D21A74C7F1400737B20F5C8 /* FIRLogger.m */, - BE64886F86F0117BC5EA565A6D52F486 /* FIRLoggerLevel.h */, - D572D90EB8C63BC18CFCE49E897F214D /* FIROptions.h */, - 194CBECC087C27DA2103D2C404E22B14 /* FIROptions.m */, - 89585EFF3AD3296CF6F3D043C3C30D86 /* FIROptionsInternal.h */, - 1B8863FA0F7611CC597E6457F57798E3 /* FIRVersion.h */, - D5E6BF186195C4DE9D824C0FA57EEDCA /* FIRVersion.m */, - 0B9D6FBF94C57A389CC619CDBD87311D /* Support Files */, + C9352EB798C7B500B9276CE05606A43C /* FLEX.h */, + D40F3B0E7F489A813BD6D320E2F3BC6F /* FLEXArgumentInputColorView.h */, + A97D185B6CF9FA0E0B8E05FA3DCBC422 /* FLEXArgumentInputColorView.m */, + BCA11F639A396489EE59AF4C93A9A20A /* FLEXArgumentInputDateView.h */, + 77D504B61F21F59E8B4EFEE12E5EF943 /* FLEXArgumentInputDateView.m */, + 73099ACD75ABCF1C1A4C6588A2915674 /* FLEXArgumentInputFontsPickerView.h */, + 2C0BED042B031C59FF6C9FE94CF69454 /* FLEXArgumentInputFontsPickerView.m */, + E1C82CDE3FE80EC44F6F1FACCEEF8C2D /* FLEXArgumentInputFontView.h */, + 4E7F4A13D5D45AFD7BF930DB00952284 /* FLEXArgumentInputFontView.m */, + D4B3E130B99409184C868361CABDFA84 /* FLEXArgumentInputJSONObjectView.h */, + A44E316BC9CE530357191F82C16F6158 /* FLEXArgumentInputJSONObjectView.m */, + 56E4FB506218FF0C517D028C5031D735 /* FLEXArgumentInputNotSupportedView.h */, + AAFFF8BEBDE301A980BC6F8CF0BC9FDC /* FLEXArgumentInputNotSupportedView.m */, + 50C8770E60E884215A3F677CA2B1A76E /* FLEXArgumentInputNumberView.h */, + 4B8AE6270FBED77C47DD4BD9C506AEC8 /* FLEXArgumentInputNumberView.m */, + 0AF61B8DD2B356D139872B3D6193AFAC /* FLEXArgumentInputStringView.h */, + 47AADE460A20466D1600A77702BC01AD /* FLEXArgumentInputStringView.m */, + 50CF61641F035AB81866D055C455F541 /* FLEXArgumentInputStructView.h */, + B69A149D7F44F54B8F93A86A7C66BB71 /* FLEXArgumentInputStructView.m */, + 17C6D2BA1B55E160EC3ADDE291025ED8 /* FLEXArgumentInputSwitchView.h */, + 0AA41D50FC9AA19A8198BBDF4ACF3D2F /* FLEXArgumentInputSwitchView.m */, + 4053237D3B9691491691C866358AE668 /* FLEXArgumentInputTextView.h */, + 87CF9B28D6601476F2D0B65BCDCAE838 /* FLEXArgumentInputTextView.m */, + BCAE2D0402FC3F174047AC9C40EB1490 /* FLEXArgumentInputView.h */, + 68458971E097FC27F17EABB29A486FEF /* FLEXArgumentInputView.m */, + E6EC738AF804EEBDC2FB175064DC7294 /* FLEXArgumentInputViewFactory.h */, + CD39919DCEBDF2C033EA4E55C31F3C0E /* FLEXArgumentInputViewFactory.m */, + 5034EB136E35843437255B724DE16C62 /* FLEXArrayExplorerViewController.h */, + 4CE9734D5DD0317F85138965E3010C17 /* FLEXArrayExplorerViewController.m */, + 5F6E7C077B88EF82B8AF91B72214EB68 /* FLEXClassesTableViewController.h */, + EF5E62CBD49EA4BA6A8B3634D49CA0F0 /* FLEXClassesTableViewController.m */, + 5834E6B4283F1EAE5EEE58BDB7DEA354 /* FLEXClassExplorerViewController.h */, + BCC8F5273AB9D4B41DE9277F4BA3FB70 /* FLEXClassExplorerViewController.m */, + E39939B5637E18541C1E65A43CDEA124 /* FLEXCookiesTableViewController.h */, + 2067D69F4479E6BCD7B74D7FF31E664A /* FLEXCookiesTableViewController.m */, + 613A346D7E8B63CA29D2782C1FFB6B5A /* FLEXDatabaseManager.h */, + 347B83B82BDC5E38DE3279420F9F2724 /* FLEXDefaultEditorViewController.h */, + 15F92EFE10741A4011C635365DDD5D3C /* FLEXDefaultEditorViewController.m */, + CB035331E0F7B6E91A32A1BEF050DBB1 /* FLEXDefaultsExplorerViewController.h */, + C3020B5F4DB347C56D66C9CF6C7A7EC3 /* FLEXDefaultsExplorerViewController.m */, + 1399219E7E4F74A191C8103BC4CA94AD /* FLEXDictionaryExplorerViewController.h */, + A2EC9D8A701EDEFA3B500CE0368DE298 /* FLEXDictionaryExplorerViewController.m */, + B716360E40C006675C6544D6BA5FCB76 /* FLEXExplorerToolbar.h */, + 43E9884AC1C535455AFCCB7099E4E75C /* FLEXExplorerToolbar.m */, + 2F2DCF94E000BC26D3665ADC4C2CA31B /* FLEXExplorerViewController.h */, + 81C230E1359A248A1F79076DDA738ABD /* FLEXExplorerViewController.m */, + EEC122FAFB59501CBB1F5609224E14CA /* FLEXFieldEditorView.h */, + 9290D754AB7C64265183DF1278E843CC /* FLEXFieldEditorView.m */, + 6A65A1B936FDE1E47ADE47217091A9D2 /* FLEXFieldEditorViewController.h */, + EC828452716B19AD852947BE4BD2E004 /* FLEXFieldEditorViewController.m */, + 08C01A5B48D9B1D1B20B9E0FCB35350A /* FLEXFileBrowserFileOperationController.h */, + F9D28CD4509EA1858AAEE97875FA73E2 /* FLEXFileBrowserFileOperationController.m */, + 2BD160F00C107EC88F2CB5926EAB57D1 /* FLEXFileBrowserSearchOperation.h */, + 2ACCB5CD64EBA69D9D874251ECA79D73 /* FLEXFileBrowserSearchOperation.m */, + 5C3A32113E8789239D6091DB44CA22F3 /* FLEXFileBrowserTableViewController.h */, + 4FACDCA83835FCF2784F19CBE29CD008 /* FLEXFileBrowserTableViewController.m */, + 09444581DBEFC6EB9171B6359F70ED73 /* FLEXGlobalsTableViewController.h */, + A0493EE6B4B30B4E5BAA610D9CE45C5D /* FLEXGlobalsTableViewController.m */, + 28CCA15793106B55CDED110A581646E7 /* FLEXGlobalsTableViewControllerEntry.h */, + 747C33DEBD796CE43D38F560A39AF57C /* FLEXGlobalsTableViewControllerEntry.m */, + F4565B53F71AE70CC8396A4CD3A1215B /* FLEXHeapEnumerator.h */, + AEC84D4AC77982A70BED1F1FCB526593 /* FLEXHeapEnumerator.m */, + F4C11FD1D24E3E9B59595B8070A046FB /* FLEXHierarchyTableViewCell.h */, + 6CDB084DECE37BD419E3FC1B9DBD56FB /* FLEXHierarchyTableViewCell.m */, + 821D0C129E3ABAB04A228CEEC4A5B675 /* FLEXHierarchyTableViewController.h */, + 3F06FF305454F67E3271ABC1F7311D83 /* FLEXHierarchyTableViewController.m */, + 0377125438ED404CDD97453B12D413F2 /* FLEXImageExplorerViewController.h */, + AB6D668E9341C25D3203626CEFEB921E /* FLEXImageExplorerViewController.m */, + 53591F9F963F74B587AE9BA3ED2F1420 /* FLEXImagePreviewViewController.h */, + 16E6EAE5977E2A3321FC548E46CF9245 /* FLEXImagePreviewViewController.m */, + 91FA07CF0F9045364D2A989AD2BC0084 /* FLEXInstancesTableViewController.h */, + 93A3EAC5E30C84949AC6FAA874FCF88F /* FLEXInstancesTableViewController.m */, + 837520921B035BB155A52BF9BBF7F39F /* FLEXIvarEditorViewController.h */, + D950A0F7FA2B3EB6BB0D80E61B4F5D50 /* FLEXIvarEditorViewController.m */, + C2641D0FAF37F327591CEFD2ED2D6701 /* FLEXKeyboardHelpViewController.h */, + 417CA68A97D995DDECCD3145CC1BE3E2 /* FLEXKeyboardHelpViewController.m */, + 1EE7D49F293DB910F82789262C92863F /* FLEXKeyboardShortcutManager.h */, + D617A4F1AD31C74DE1139447BF84D2A4 /* FLEXKeyboardShortcutManager.m */, + BAA1BB220DCAE1A4FD8B9040B4868891 /* FLEXLayerExplorerViewController.h */, + A2923A47E760155E654AFEFD8923F7BB /* FLEXLayerExplorerViewController.m */, + B3BEA703C2E4A2555E1C27927DF69F9F /* FLEXLibrariesTableViewController.h */, + B293285931ABBF36C9BCC93F56062158 /* FLEXLibrariesTableViewController.m */, + 478F4CD18FF2F72A29D57EC7C6AF3312 /* FLEXLiveObjectsTableViewController.h */, + 3C2A8FE9EFF90E6FF9691B664983EF5E /* FLEXLiveObjectsTableViewController.m */, + CFAA0F512E1BA881065AA57397DC51AD /* FLEXManager.h */, + 0592BB101BDB3659B136E18FFFD1E16B /* FLEXManager.m */, + 492905C529C2EAA2227A5AF97656F1A9 /* FLEXManager+Private.h */, + AD9E81B541A2F6ACE71858560AC8E0F7 /* FLEXMethodCallingViewController.h */, + 077BA0ABE152668146C5B31270FB10D3 /* FLEXMethodCallingViewController.m */, + 17181124BD1A13D7077D8C9324DAD2ED /* FLEXMultiColumnTableView.h */, + C5382B398A7790F49B709BEB0B212009 /* FLEXMultiColumnTableView.m */, + 7949294F494D34DAADC124A1F418F764 /* FLEXMultilineTableViewCell.h */, + 5809A23FC460F7E42971D1127D624334 /* FLEXMultilineTableViewCell.m */, + 7E2190E8A37F85A61F2FADB6FEDD26F8 /* FLEXNetworkCurlLogger.h */, + 7D405C1509AD19201F0ED60C0FEB3158 /* FLEXNetworkCurlLogger.m */, + 75886D6DEC25942D992FD8D087E5B5C6 /* FLEXNetworkHistoryTableViewController.h */, + DAAAB96AB91F09C8E3C4C44B85DDABED /* FLEXNetworkHistoryTableViewController.m */, + B9AB21F51FA6B24D4F075459BB9118D3 /* FLEXNetworkObserver.h */, + 73B4D3B3BEBAF159B62020B879FCF0EA /* FLEXNetworkObserver.m */, + 752434F4B72CFEE188D59FCC0CB0B42C /* FLEXNetworkRecorder.h */, + 41706C72E33AB2281FB21FF5F2C487B4 /* FLEXNetworkRecorder.m */, + 5879D2818EB85C10A3C924D370F321D8 /* FLEXNetworkSettingsTableViewController.h */, + F5A867D64D1361B471DD422E8BBDDC13 /* FLEXNetworkSettingsTableViewController.m */, + C85C66B2B2E2830FCB88057827E5F6E4 /* FLEXNetworkTransaction.h */, + CD6FBFB09B1B1E32DC09E535F003FCA6 /* FLEXNetworkTransaction.m */, + 80B89DF87951E100445B4206D3A5CBE4 /* FLEXNetworkTransactionDetailTableViewController.h */, + 7D1392F4045F7AC16AAE3CB325BA32B2 /* FLEXNetworkTransactionDetailTableViewController.m */, + 7059A7B2314772AF5D37AF6D6A5BD26F /* FLEXNetworkTransactionTableViewCell.h */, + 57AB6A94F6BB964431B5FE7EA3FFA6E8 /* FLEXNetworkTransactionTableViewCell.m */, + 0878BA4AF1B02FAAC0B3637974BD4BA6 /* FLEXObjectExplorerFactory.h */, + F7542B8EEC18DA39EC4451772BB38761 /* FLEXObjectExplorerFactory.m */, + 3576156F3DA91C0FB19F70433ABEC641 /* FLEXObjectExplorerViewController.h */, + 68BB330102EBD07832A5BD4D429F4F00 /* FLEXObjectExplorerViewController.m */, + CC0EC79351E2DDE5970E9038131F00C9 /* FLEXPropertyEditorViewController.h */, + DEC543B627BF4425809C83D4813F3EFC /* FLEXPropertyEditorViewController.m */, + BA940FBEB61E5E6748B0A6A352E75E3B /* FLEXRealmDatabaseManager.h */, + 68F06A304100450C387FB9311038FE5B /* FLEXRealmDatabaseManager.m */, + 80E992B6289A4AD51727B86B879DBBF7 /* FLEXRealmDefines.h */, + DA3563EB324470CE4ABAF6EAD925660A /* FLEXResources.h */, + 1DD49D7B93F00EC83E4F95899111D96C /* FLEXResources.m */, + 3161111B6F09F73A01C42288228B792B /* FLEXRuntimeUtility.h */, + B65063FCD22FFC2D3D3508CA259A1CF3 /* FLEXRuntimeUtility.m */, + BA6860EA22A14CEDFCA44F57B0D7510A /* FLEXSetExplorerViewController.h */, + FC09013DD8C3D921BA2890080A6534D7 /* FLEXSetExplorerViewController.m */, + 667768AC72DD40E30955794FD871A9CB /* FLEXSQLiteDatabaseManager.h */, + 324A3035364B91AA0E3AC7513CA9653E /* FLEXSQLiteDatabaseManager.m */, + 4893A4CA3092FCFF1562732C12A188B5 /* FLEXSystemLogMessage.h */, + A8D3F75ADA56F34C2885A8F1438E047E /* FLEXSystemLogMessage.m */, + 74B1E6E7B5764B8C8B75477CBDB6652F /* FLEXSystemLogTableViewCell.h */, + CAF212D083B8EF14D39CB5A19EB2B2CB /* FLEXSystemLogTableViewCell.m */, + C830CEFD8CF23B3FA9E84217EC594626 /* FLEXSystemLogTableViewController.h */, + 2CFA242D62F50462BDD7D73F21E25E61 /* FLEXSystemLogTableViewController.m */, + FAD8587A89E6DADCF9D0594A7B7EDEC6 /* FLEXTableColumnHeader.h */, + F4EA8FA52B30CC8078CF7A16F230E5EF /* FLEXTableColumnHeader.m */, + 279C14CB42E0CB3D7ED24203C35C02F4 /* FLEXTableContentCell.h */, + 6346F7F3927A405432D48857B4CA7010 /* FLEXTableContentCell.m */, + DF5BB9BE5ADA2EB66A91461175799A87 /* FLEXTableContentViewController.h */, + C8C7A4E2193BBCA87CE9D39D21886740 /* FLEXTableContentViewController.m */, + 6F64E581EB77FE5DE0175695ACD1FF24 /* FLEXTableLeftCell.h */, + F6C49193CF3C0677FFAA55AAF2F7E621 /* FLEXTableLeftCell.m */, + B78A4BE16C0B8A9609BFA0425CCD1828 /* FLEXTableListViewController.h */, + 7F63F6C4D2A75EA40AEED6B63AA1D496 /* FLEXTableListViewController.m */, + E878DF5B1675FF84FEF046C8D9F0F487 /* FLEXToolbarItem.h */, + 8BE1FEBCD1217DC8D2CC41DC570834BC /* FLEXToolbarItem.m */, + 6172CA547E3FCB08A8E9A825577A2CB8 /* FLEXUtility.h */, + DD79B6624EA1BADDEFA417BAB4A368BD /* FLEXUtility.m */, + 99352CC81E5B56081CE5C3A54E3A3695 /* FLEXViewControllerExplorerViewController.h */, + 00EB84821CE127B30F57DCA4FC055F1A /* FLEXViewControllerExplorerViewController.m */, + 0E2D403CB050FD9389884C2BC449410D /* FLEXViewExplorerViewController.h */, + DCADE050210A40BBFD221B115686E9E6 /* FLEXViewExplorerViewController.m */, + A974BD480207D1037843307439BC6B93 /* FLEXWebViewController.h */, + 8FA8A25D35C42FEBFAE0E1CEC0B1EBA5 /* FLEXWebViewController.m */, + DF1E8243268A2EC5DF03611DC5636A4D /* FLEXWindow.h */, + D357B4E119E1491386D0F3B2826A2781 /* FLEXWindow.m */, + 3346D445F9A51511AC9B1BC7A86AD34A /* Support Files */, ); - path = FirebaseCore; + path = FLEX; sourceTree = ""; }; - 30012769B24165E20C2B8C7264120216 /* Starscream */ = { + 43C9EB59F0781486BF87D3FE59E309A7 /* Support Files */ = { isa = PBXGroup; children = ( - B37B4AE6C01361C7F29925C497DCCF28 /* Compression.swift */, - BC1DF49FB633EBDE1F0F4CEF04221846 /* SSLClientCertificate.swift */, - E291CCEFE708EBCB77BDC54FFFF013B6 /* SSLSecurity.swift */, - 1BB792682047FB83F911265151339F39 /* WebSocket.swift */, - 70470F188DD48BE7862AC0ABDF6B650E /* Support Files */, + FCBDF43C038254D455214063857A5147 /* FirebaseCore.modulemap */, + CD3C44330949B61F23B9F0E6DFFEA33A /* FirebaseCore.xcconfig */, + 3E29F99E768FC1FC0BB5E199BB53B109 /* FirebaseCore-dummy.m */, + 648D171C388E5697D5B498C78A9FBD93 /* FirebaseCore-umbrella.h */, ); - path = Starscream; + name = "Support Files"; + path = "../Target Support Files/FirebaseCore"; sourceTree = ""; }; - 33C44B02B17975A8EBBABB2DE0556035 /* AppDelegateSwizzler */ = { + 444482DB8501FBD9A25D907A2C9B5AB6 /* OAuthSwift */ = { isa = PBXGroup; children = ( - 2BF9DE0B1214CF4E8EF154C3A9EDDD85 /* GULAppDelegateSwizzler.h */, - 7481AFE513428003FB3F8470D2ED7AC5 /* GULAppDelegateSwizzler.m */, - 31D7EB19083A48DE3431963809B76AE8 /* GULAppDelegateSwizzler_Private.h */, - 286C51CC84C40FC29F8719213A2FBF39 /* GULLoggerCodes.h */, + FF11A206856F1B0CBDB65F07B2BFA82F /* Collection+OAuthSwift.swift */, + 7C13C60C6A1F6C50A5E95F1B99744562 /* Data+OAuthSwift.swift */, + 162F061BC96038DEA0D8E1D7D2AB2B88 /* Dictionary+OAuthSwift.swift */, + 859FFDD68B5133014849E0FD10F7A57D /* HMAC.swift */, + 18ADB6C4DA4444D57F2D6B80BE5ACB25 /* Int+OAuthSwift.swift */, + 4232FA492312AAC864248F591661DA10 /* NotificationCenter+OAuthSwift.swift */, + 5ADE7CAEDF81F7259C12A85604FDFCC5 /* NSError+OAuthSwift.swift */, + 2A9766DE3CD25C3B6AFD6167781E6348 /* OAuth1Swift.swift */, + F2D90218EC834825052E1DD3C199D0FF /* OAuth2Swift.swift */, + 61E38EF8A5FD00B3754DD984789CBAB0 /* OAuthSwift.swift */, + 934F21B2CD926AF13E2525BA22FA08B2 /* OAuthSwiftClient.swift */, + 675E008DF604CD041F3F7364DF3689EE /* OAuthSwiftCredential.swift */, + 2924DFCB9F48384591F9477879936E99 /* OAuthSwiftError.swift */, + DF99E28B18CDA013CF6FD170370F479D /* OAuthSwiftHTTPRequest.swift */, + DA2CA9254FA659AA50F02EDACEFF1F4A /* OAuthSwiftMultipartData.swift */, + 06CAFCCFF0FF9960902753EBC6FDEBDF /* OAuthSwiftResponse.swift */, + F96FBF4C4F6032B6D3A7BDBEC207D70C /* OAuthSwiftURLHandlerType.swift */, + AA844C716C4C7D99AA31B75CBA8AC0FE /* OAuthWebViewController.swift */, + EA16993E505EE934E4A6ED21EB8CEAC3 /* SHA1.swift */, + 90805EA5BB276B3C559EF22AEACD1159 /* String+OAuthSwift.swift */, + D80699E4150D7FA44596907501065F78 /* UIApplication+OAuthSwift.swift */, + C7B67C3137FC9230488FB4F91628B5E5 /* URL+OAuthSwift.swift */, + 21852CB65AF7686069C504F4E60BFD47 /* URLConvertible.swift */, + DB9070AFCFAE0B7726460796A0A278EC /* Utils.swift */, + D251F245418AD463FFC002818C47A12E /* Support Files */, ); - name = AppDelegateSwizzler; - sourceTree = ""; - }; - 3628C6D1CD7534EE3B937D7C60CFED6A /* Headers */ = { - isa = PBXGroup; - children = ( - ED7368AC59AA79A20229B2DF561A20F1 /* NSError+RLMSync.h */, - 364B9FDD3EA053C0E43BE38C9243D68F /* Realm.h */, - 47C81C6E5FDF0D349F7844EF9EBB0AEC /* RLMArray.h */, - 685CE693E930060D5FD7C11B923C96A3 /* RLMCollection.h */, - CDCAB46B83CC4C6F7B11BE44B0EF8E81 /* RLMConstants.h */, - 1C101B48D6650673E9604BAF325249BD /* RLMMigration.h */, - 349825FFA80C138BC1DFC9CCF1908F09 /* RLMObject.h */, - 18FA1E414999CA28DABFAD6BB90A7C20 /* RLMObjectBase.h */, - EF230DB781EAEE83313A68ED6B03A557 /* RLMObjectBase_Dynamic.h */, - 1BC41362F624813DB0121D02DDC94265 /* RLMObjectSchema.h */, - 7E70E25DEC9F5B01C65A1A7C47E0BDCA /* RLMPlatform.h */, - 3D906FA05608F00FFBBA9ED705A67F54 /* RLMProperty.h */, - 8286CD7D6B521A659ECC0D10DE5D1C45 /* RLMRealm.h */, - 918AA79F408516E9CBC3EB2BF1C2D2EF /* RLMRealm+Sync.h */, - C6AFD0E7403492EE7A0FA6F5B8637C1D /* RLMRealm_Dynamic.h */, - 647477D344D6FD8BF30A2927E4528EF1 /* RLMRealmConfiguration.h */, - A919D5933078E73098BB79939BD03A50 /* RLMRealmConfiguration+Sync.h */, - 37F579CD5587D0E3C0A9C5DEBA22B1B7 /* RLMResults.h */, - E4B95667407F6A5687B61C310AD5034E /* RLMSchema.h */, - 8B2BD1FB8C66381723F7940C1175DA21 /* RLMSyncConfiguration.h */, - AA3AE7B25413CCD83F80029463021C04 /* RLMSyncCredentials.h */, - 77FEFC05F7713D8998FD9AD230822C58 /* RLMSyncManager.h */, - 954576F150CB7988A3EEE2A7C2D363C4 /* RLMSyncPermission.h */, - 16BB51F732785C50F65D5026359E00DA /* RLMSyncSession.h */, - 60906A11715B122F22872EFD380628E2 /* RLMSyncSubscription.h */, - 8B7A53D4B7AE35D3CDC1509C759858C6 /* RLMSyncUser.h */, - B5B6AF0A97A7770C7C515F7EE5CE5807 /* RLMSyncUtil.h */, - E8B2709DAEF95AF1F994511C7FAF1CEB /* RLMThreadSafeReference.h */, - ); - name = Headers; + path = OAuthSwift; sourceTree = ""; }; - 3711CFB05250FB8A86ACF447B39F3E23 /* MBProgressHUD */ = { + 45554F74B5F85F3BB07DF75C650323F0 /* nanopb */ = { isa = PBXGroup; children = ( - 3CF30DCB14A06ECD5A5C84C1CF6B0F3C /* MBProgressHUD.h */, - 457D1AE4E9951A55BC07032A9F24F09D /* MBProgressHUD.m */, - A727FFB91CE16E63CD3CFEBB054EA35F /* Support Files */, + 7CB58F2F80147A42B7BE3356509CA6AC /* pb.h */, + B989597516C43FBBE749A88ACDD533BA /* pb_common.c */, + C7847669EA26B3E2F564575365CF1C6C /* pb_common.h */, + 79383392028C123A6041B15F53B6E4DE /* pb_decode.c */, + 8AD01B12BD14478F1AA1E30519ABC33C /* pb_decode.h */, + 84FA4E70EC930EC46FDAEF1F18D37852 /* pb_encode.c */, + 638EDBA2170A4F4B26DACF7761C6E5E2 /* pb_encode.h */, + D4FE2E48381B424045F352D8B125E1F2 /* decode */, + 33C8EE9A651AF5252BA2B11D37759FB4 /* encode */, + FB4487A03F5604684D70DBD05422196B /* Support Files */, ); - path = MBProgressHUD; + path = nanopb; sourceTree = ""; }; - 3744B16063685A71AE0A8FCD93577C6D /* RocketChatViewController */ = { + 46F288E0DA5FDE5AB86BBF0A09FDFC20 /* Core */ = { isa = PBXGroup; children = ( - 59A8CDEAD02CD87274CD6D0D0F9C8C4A /* Composer */, - 1BA61030506B1F2B958E055CF5B74A6B /* Support Files */, - 2866CEFB989ED4BC393FB23360807B7E /* ViewController */, + 9291E5EC9A0AF5830A95ADAD7C75F8D2 /* Algorithm.swift */, + A90943AB43686CF64A4BC6EC89D18BF7 /* AnyDifferentiable.swift */, + 9FF8AA7BB27CEB039E0221B873ADA9D8 /* ArraySection.swift */, + 1A965A830969D292A0587C50197C9CE1 /* Changeset.swift */, + EC6FFDB718C77AACF95F6E3123888F83 /* ContentEquatable.swift */, + A2A2C497117A66F61D70BF366BD8552C /* Differentiable.swift */, + 1D8966CB73370A689B30C740239C9C3D /* DifferentiableSection.swift */, + 03A7C8CD2AD873AAC8E245DBBD4B78FA /* ElementPath.swift */, + 925550252B2B50146B5913040AD7A54D /* StagedChangeset.swift */, ); - path = RocketChatViewController; + name = Core; sourceTree = ""; }; - 376093A87DD60254C53631A8CD4E81EE /* semver */ = { + 4DCADF88A236A83659470E20004C8971 /* Resources */ = { isa = PBXGroup; children = ( - BDE87492ECEE718DCF81E4278E79D8B2 /* Semver.swift */, - E73AA31631F340126A3265FFE3E55D0E /* Support Files */, + 8A8380138033FB563AE69397C08BC07C /* ImageViewer-Assets.xcassets */, + 589513B8C9D767B2B99A6C9D97C1E61C /* ImageViewerController.xib */, ); - path = semver; + name = Resources; sourceTree = ""; }; - 3834E29E5BB587C4CAE2E98D9F90BC78 /* Support Files */ = { + 514BC3C0B3F786BDCE40442BAECCB3EF /* DifferenceKit */ = { isa = PBXGroup; children = ( - B61B8781AA8BD87BEA9DD6EC6393FCB0 /* SwiftLint.xcconfig */, + 46F288E0DA5FDE5AB86BBF0A09FDFC20 /* Core */, + 1E50ABA907E1EB96BAF698F8329ADCCD /* Support Files */, + 60DD8905296D2ABF500AEFFCA5C62A4D /* UIKitExtension */, ); - name = "Support Files"; - path = "../Target Support Files/SwiftLint"; + path = DifferenceKit; sourceTree = ""; }; - 3927275A19EC5C223163F081BB049FA2 /* Crashlytics */ = { + 570C0AB65FA8B4F1D9F34BCA9D016180 /* Firebase */ = { isa = PBXGroup; children = ( - C6D76D762253123EAB82963E31C13545 /* ANSCompatibility.h */, - 967D0A831C720A0B066899EDB2F69A55 /* Answers.h */, - 9F2ADDAFACB44CE5B2065B37389A796E /* CLSAttributes.h */, - E67CB29116FF4E829199751F2CE73E9B /* CLSLogging.h */, - FD7DD9B1835121BCC94D6B0033DC90D9 /* CLSReport.h */, - DF061855E7FC8F3E056AF04F8C69122C /* CLSStackFrame.h */, - FD82CCB6F9E49CD67395A108B86F02BC /* Crashlytics.h */, - D178B7DBE1D53A58CEC87D25B6EBBEC0 /* Frameworks */, - 684BA339D773DCD013740E1C0372636A /* Support Files */, + DB0A554A3D2CEE112033DDF60C9EF5E3 /* CoreOnly */, ); - path = Crashlytics; + path = Firebase; sourceTree = ""; }; - 39D4C4DA55B4F5B461668CCE7C4455A3 /* Frameworks */ = { + 58325AC1776601A999FFA54FE5F73E5A /* Network */ = { isa = PBXGroup; children = ( - 9A25AFAFF9FA4E67E46CED6B319A00FE /* DifferenceKit.framework */, - D4A24816DB030E5F44CF4B64BD62AB56 /* FLAnimatedImage.framework */, - 0D746001EED6F54BA45F69E1FC4C3DE9 /* Nuke.framework */, - 24D95733F97323A17B730A07F9A669B7 /* Realm.framework */, - 92C93A748867D0DAD8D6EDBCDDBDB5A5 /* iOS */, + C3AE4A61ACABAC3D758FBA07EB8354D7 /* GULMutableDictionary.h */, + 8696BFF9A70326F7361D5BD15A6BBC54 /* GULMutableDictionary.m */, + 00F19B152B4EC4511D6480C4738517E2 /* GULNetwork.h */, + 1687CB6BFD67F92C631491FD7AC2818A /* GULNetwork.m */, + 149C10AA60E80F88C9328DD77B55BBFC /* GULNetworkConstants.h */, + 57925932393FBA35783E34A33BD02D4C /* GULNetworkConstants.m */, + FD8A08AE115FAA5935FC2C75B6308970 /* GULNetworkLoggerProtocol.h */, + 16B67C4736F18DC125AE88201387BFD2 /* GULNetworkMessageCode.h */, + 34DA8616C960B2BCA117CE3AA3E6E2F3 /* GULNetworkURLSession.h */, + F2A9623591E3F5D030981B89EDC126B2 /* GULNetworkURLSession.m */, ); - name = Frameworks; + name = Network; sourceTree = ""; }; - 3C61A87D5D482331E922D256B8F237C1 /* Pods */ = { + 586B922DDD88EB9F31A3B538097A5B9B /* ViewController */ = { isa = PBXGroup; children = ( - 74F5B1357F8F5C70BA732510B4ED8379 /* 1PasswordExtension */, - 3927275A19EC5C223163F081BB049FA2 /* Crashlytics */, - 5EDDC3CA6EAD350E79D6CB87F36BDDF4 /* DifferenceKit */, - 0568E471F724C5C0FA4886F04A02A3CE /* Fabric */, - B0CC10C8F09559F9129149AA5C0154DC /* Firebase */, - C0D64F56C6AFFD576E815C76831603B2 /* FirebaseAnalytics */, - 2C5317294C44315716730B17B1D0A41A /* FirebaseCore */, - F5AE161D0FCC4D932909F287AB54D948 /* FirebaseInstanceID */, - B3C3E0FF6F9A5E58D29988CF7C88FD8D /* FLAnimatedImage */, - 3F9CC7A8FC9D53CB7AE8632577D28070 /* FLEX */, - 019D0E701F5C8579CA8BF6C7E184A570 /* GoogleAppMeasurement */, - 08DCCCE24C4109BAF8EA15286F510803 /* GoogleUtilities */, - 3711CFB05250FB8A86ACF447B39F3E23 /* MBProgressHUD */, - 22E90E9EF203B26C7EB132D3B2FD87BE /* MobilePlayer */, - 6F6E768F19085CE4B0EF1E4C9E6BD2B8 /* nanopb */, - F693633C3AD1677A74C38A7320A64398 /* Nuke */, - B6048DEE9653C2D6A1B4292F0CC8F009 /* Nuke-FLAnimatedImage-Plugin */, - B312A973292585F9573A90A44EB51CE0 /* OAuthSwift */, - B35C667BFA6915069D0F7FD93B5E1FF2 /* RCMarkdownParser */, - 621C1BE4F71D0C536FF6EAF96CA843DE /* ReachabilitySwift */, - 76CCFC0D72145B8F489DFE1AAD0AD0A4 /* Realm */, - 434C9B1F4FD6077E3BCE3727034DB7D4 /* RealmSwift */, - 3744B16063685A71AE0A8FCD93577C6D /* RocketChatViewController */, - 376093A87DD60254C53631A8CD4E81EE /* semver */, - 0B50CF8B1E4C0F7B73E9F009CD10BF92 /* SimpleImageViewer */, - 30012769B24165E20C2B8C7264120216 /* Starscream */, - A264C4B7BE55920D7742D8C4F0F8E5D6 /* SwiftLint */, - 3CBCCC7F0AA7ED1C59E3E75CD624C309 /* SwiftyJSON */, - 8C462AF2FE075F41263A74A72DD4F3E6 /* SwipeCellKit */, + 028D3D9CC4A4836F6F4C45F955216E60 /* RocketChatViewController.swift */, + E1599B8028391AA115149DFAAD4BA2E3 /* UIKitExtension.swift */, ); - name = Pods; + name = ViewController; sourceTree = ""; }; - 3CBCCC7F0AA7ED1C59E3E75CD624C309 /* SwiftyJSON */ = { + 5AE526159F7067E47AA08D593B95DA56 /* SwiftyJSON */ = { isa = PBXGroup; children = ( - 238C67B6DE069C5CC117BF105AACBD31 /* SwiftyJSON.swift */, - 29B4A947BB7011C27115FE950C47E5EA /* Support Files */, + 2EB365B03AB1CC67F47B3A82B809C99D /* SwiftyJSON.swift */, + D8731045600832C8364AD939B65B8A2D /* Support Files */, ); path = SwiftyJSON; sourceTree = ""; }; - 3F9CC7A8FC9D53CB7AE8632577D28070 /* FLEX */ = { + 606F48A7D9A39AFF9FA8C217AE8AFDD8 /* 1PasswordExtension */ = { isa = PBXGroup; children = ( - 00B35D8F8E0E37DF1CBD9888F0A1C1A9 /* FLEX.h */, - 9A8E3394E6D1D992A9137E31CAB07918 /* FLEXArgumentInputColorView.h */, - FC521FE9A86A5E8054EB6406AE25342B /* FLEXArgumentInputColorView.m */, - 7557C08BAD6F256877C525791305F256 /* FLEXArgumentInputDateView.h */, - F4838BF36B9A705547F8FCA3B111A0B3 /* FLEXArgumentInputDateView.m */, - 61D4589927E912A7200E77C8400B2081 /* FLEXArgumentInputFontsPickerView.h */, - 11F1F790154FAFE5FFC71DC6C6D25225 /* FLEXArgumentInputFontsPickerView.m */, - 2E6FAE14C2A7C125E403B49D407ED004 /* FLEXArgumentInputFontView.h */, - 12A1F2FB32D503A912D131AFA914617F /* FLEXArgumentInputFontView.m */, - 7F647DBA0A69DBF8C9340D5F6353EE3D /* FLEXArgumentInputJSONObjectView.h */, - EA8239026C7BF50DBEACE511DAE2A23B /* FLEXArgumentInputJSONObjectView.m */, - FFC53FC61B729058278F1AE348127893 /* FLEXArgumentInputNotSupportedView.h */, - 25EEC2599B7BB409FC7823E1550A0342 /* FLEXArgumentInputNotSupportedView.m */, - A4B4FDB3CEB11940EE828F1B9D4E6A0E /* FLEXArgumentInputNumberView.h */, - 114F6A4DEEB55422A91C00397A57F25A /* FLEXArgumentInputNumberView.m */, - 7231D01825C44F9DD92A006583CA1681 /* FLEXArgumentInputStringView.h */, - 634240391D791661A3349AFF707C4CB0 /* FLEXArgumentInputStringView.m */, - 2AEB16AE246C4FFD97E44353A092CB63 /* FLEXArgumentInputStructView.h */, - BD4E945F8F0FC73F820DE02A1A449C60 /* FLEXArgumentInputStructView.m */, - 2304C6B205F918C7CDC63EEE18C01A55 /* FLEXArgumentInputSwitchView.h */, - 228BA4B7007B34E72502E048F844316A /* FLEXArgumentInputSwitchView.m */, - B88B354E1CEBD934B5D065EA09102030 /* FLEXArgumentInputTextView.h */, - F7D1A4638E1E37D616189125D16EF1CF /* FLEXArgumentInputTextView.m */, - 074BA104315D43DAA391D06A2E9D61A7 /* FLEXArgumentInputView.h */, - 6C51AA555424F211A5A51CB26540948B /* FLEXArgumentInputView.m */, - 81889272BF32C5B86EBFB43BE8249D6D /* FLEXArgumentInputViewFactory.h */, - 30169FC0871AD5AF72946FAEC09AE3FD /* FLEXArgumentInputViewFactory.m */, - 847E3D89261E291BE83390D7E8F35753 /* FLEXArrayExplorerViewController.h */, - F8F22BFB9BB17B2BA34E3CB47D46962C /* FLEXArrayExplorerViewController.m */, - 169B7C3E2C83D2BD40A05337FC1C55D8 /* FLEXClassesTableViewController.h */, - 060A3AA199FDF349C87092B0E25986CC /* FLEXClassesTableViewController.m */, - 8FA1A7023998A1DB922519ED94F57F9B /* FLEXClassExplorerViewController.h */, - E3125C7DF70278930391E54959ADC1CE /* FLEXClassExplorerViewController.m */, - 5028398EE7F19A593D4AF732A21CCE13 /* FLEXCookiesTableViewController.h */, - 791E3425ED4FB137B8A6C6FAFD275430 /* FLEXCookiesTableViewController.m */, - 92D69B83D7891B46071F3526C887D4BA /* FLEXDatabaseManager.h */, - 9FC5AEAE09E133FE94E45F98F36F2E29 /* FLEXDefaultEditorViewController.h */, - 6390EF7AE2F22559710F18DBE7E0E535 /* FLEXDefaultEditorViewController.m */, - C589B0D2026585B4BA49C237246F4471 /* FLEXDefaultsExplorerViewController.h */, - 753F529A22C40D25C15E49D8B5405B86 /* FLEXDefaultsExplorerViewController.m */, - 07515F8C2934A7DE5B97F53E6D2B1CFD /* FLEXDictionaryExplorerViewController.h */, - 7399638953BCE3E0701EFD2F87E4D294 /* FLEXDictionaryExplorerViewController.m */, - 096AD7DEE43FA647EF7944B6F1034949 /* FLEXExplorerToolbar.h */, - 641D5E20394775152471BA273D2DDAD8 /* FLEXExplorerToolbar.m */, - F42DC90BFF3DAEB06ECEE25E7E1B22AE /* FLEXExplorerViewController.h */, - 0669CB6A9948A75F55CD39F2F0F2A08C /* FLEXExplorerViewController.m */, - CE58935F7D9E7C45CA46919D53056771 /* FLEXFieldEditorView.h */, - 9594D9DDF1CB6DBA34A18E1483172857 /* FLEXFieldEditorView.m */, - 43F4C31F67984F12C9D421A7C2FA4D10 /* FLEXFieldEditorViewController.h */, - F3822E771329BEAE8F0F729998C4BCCF /* FLEXFieldEditorViewController.m */, - E5B12BB67F59DDF1ED66066D2E25EE48 /* FLEXFileBrowserFileOperationController.h */, - 28C3ACCA7E93ED9D31C43924C1E50631 /* FLEXFileBrowserFileOperationController.m */, - 351B49E4EC79B8EB1BBE83FDF343373F /* FLEXFileBrowserSearchOperation.h */, - 0A1B80182387C944CFFA36AA21C6A032 /* FLEXFileBrowserSearchOperation.m */, - E201DA3DC06651D6EDE2A8CC6114F974 /* FLEXFileBrowserTableViewController.h */, - 394F88F19C58BC5C34A1A6A26D9174C6 /* FLEXFileBrowserTableViewController.m */, - 037871A3645C1844FD0C6B595D7475E5 /* FLEXGlobalsTableViewController.h */, - 911E9503B0B27F20A254582755AE6F05 /* FLEXGlobalsTableViewController.m */, - B22EB28C8530725AAF2B6E74CAA4EC53 /* FLEXGlobalsTableViewControllerEntry.h */, - 29927A5189487AE1C8ED31386A6C110A /* FLEXGlobalsTableViewControllerEntry.m */, - 77A1AD4285C9534D8B0E6F74EC1F41D7 /* FLEXHeapEnumerator.h */, - E9C97572B8172FE994E76102534BBFC6 /* FLEXHeapEnumerator.m */, - 57E94FD833AFBEEB790E84B28BE6A8BF /* FLEXHierarchyTableViewCell.h */, - C18756FE4FACD12129EA4E0285D54800 /* FLEXHierarchyTableViewCell.m */, - 1AA1437142C700B16DEB2FC19195CBEE /* FLEXHierarchyTableViewController.h */, - D1219D2694F00090D842BFE5F9ECAA96 /* FLEXHierarchyTableViewController.m */, - 307AE0608BFF02202D10550B05B91A3C /* FLEXImageExplorerViewController.h */, - 1EDACADC4B973DCA3BED0BBF0AC62659 /* FLEXImageExplorerViewController.m */, - 9EC0A7E9E176A9FFFD6187F877345152 /* FLEXImagePreviewViewController.h */, - 44F1609E80E8677C7ECCC1904199C74D /* FLEXImagePreviewViewController.m */, - 328020A2C8DFA9E6327A1EEDAEE98DF2 /* FLEXInstancesTableViewController.h */, - 6EFBD6250A9E8697FF8BEDCB7CA5AEFE /* FLEXInstancesTableViewController.m */, - 7698B58E7E99E6F0586427618D5275C8 /* FLEXIvarEditorViewController.h */, - 80F9C24D73D452759A46C8BB3CA05BDC /* FLEXIvarEditorViewController.m */, - 81E97F23C0E26C550CA50F7861969084 /* FLEXKeyboardHelpViewController.h */, - 5CFB5DFDD833A52F428A9894D1515E25 /* FLEXKeyboardHelpViewController.m */, - 26647F3074E9C668C91615818C904646 /* FLEXKeyboardShortcutManager.h */, - 663B1327C0DAFC9B6DE4FB5ABBF91EF1 /* FLEXKeyboardShortcutManager.m */, - 89FAE773A765F976BA9028A1E69B02D4 /* FLEXLayerExplorerViewController.h */, - FB14B0DF8B2530D68C6278241BB7A2F1 /* FLEXLayerExplorerViewController.m */, - 5F248EFE72289B774E4BB307019116B7 /* FLEXLibrariesTableViewController.h */, - 032F78601523CC21F907722C16AA1F41 /* FLEXLibrariesTableViewController.m */, - 05931132F451BC03A5EE7546D64ED046 /* FLEXLiveObjectsTableViewController.h */, - 11F83FA488C5ADEF187432EE680F7169 /* FLEXLiveObjectsTableViewController.m */, - 9F88F09779E5F38396054DC308D93DD3 /* FLEXManager.h */, - 954304773D6919A564C71692A564BC90 /* FLEXManager.m */, - 85A8D36287A25CE89A566AF46B98D006 /* FLEXManager+Private.h */, - 9CE3778197A1EA95A81765F97EA31A90 /* FLEXMethodCallingViewController.h */, - FBEAE2D94E693CAD03947EC2EAA74996 /* FLEXMethodCallingViewController.m */, - 1004C513B590C4EE779A88CCCAF6582F /* FLEXMultiColumnTableView.h */, - 5EC35EA87CD1371AF2288CB1DC1EE0D1 /* FLEXMultiColumnTableView.m */, - A2C82064BB9E953E95908FBFBE1FA282 /* FLEXMultilineTableViewCell.h */, - 004371D61FCFE1DF8851BF3F3997962C /* FLEXMultilineTableViewCell.m */, - F4B6846DE806959FB9778575C6970304 /* FLEXNetworkCurlLogger.h */, - 670695D2A2516543C17D38FEFE843466 /* FLEXNetworkCurlLogger.m */, - FD8A82FD396472B27886A246B1546240 /* FLEXNetworkHistoryTableViewController.h */, - 68CA2E56789DFE459DBB556DE0B0584F /* FLEXNetworkHistoryTableViewController.m */, - 2B14BCDAFAA3C1CEF006369BF756B04E /* FLEXNetworkObserver.h */, - D3CEBE0233D28136D2A04E0C03E70D4A /* FLEXNetworkObserver.m */, - 29CC7747A3A6E5FEBC83EFC4F23495C7 /* FLEXNetworkRecorder.h */, - 8DC6B3F86C6FC7954D2D419757D81D89 /* FLEXNetworkRecorder.m */, - 98B804357BDFCD50C234C231A89F1680 /* FLEXNetworkSettingsTableViewController.h */, - 969D0486120BAE5D88D3D4DD70CB0522 /* FLEXNetworkSettingsTableViewController.m */, - 388E518F56DEFE49AC42A20309BD1733 /* FLEXNetworkTransaction.h */, - 6D9787BA34B4FAAC67148D4F2E7A0293 /* FLEXNetworkTransaction.m */, - 796D6E828A32875CBAF3D07DE2C01109 /* FLEXNetworkTransactionDetailTableViewController.h */, - 0FBE6353E48C14F67A42E1FDA0436985 /* FLEXNetworkTransactionDetailTableViewController.m */, - 8511C3C119919F148DF2CF42006E787E /* FLEXNetworkTransactionTableViewCell.h */, - EF7F0035BB929D2CF9997197058BACCB /* FLEXNetworkTransactionTableViewCell.m */, - 22138788CF28FAA12243DF4700FD3E4C /* FLEXObjectExplorerFactory.h */, - CD40E9931BA5F2A80E665FCAD01A1C28 /* FLEXObjectExplorerFactory.m */, - 8E011E78C804E28C5A8B415BC74759D4 /* FLEXObjectExplorerViewController.h */, - D19A3732188476D43EA3B1C4DB8847B4 /* FLEXObjectExplorerViewController.m */, - EBD99766A864FAB642165FD01C0E5C3F /* FLEXPropertyEditorViewController.h */, - CDE9FDDC31ACF0E28A520DB9DC4B15DF /* FLEXPropertyEditorViewController.m */, - 826E1A8898380EEA40DE2D57D550E68F /* FLEXRealmDatabaseManager.h */, - 9EFB3041D0BB75BA64CD495A11C2BA35 /* FLEXRealmDatabaseManager.m */, - 96527EA33E2E7E3701AF76147A88EFA9 /* FLEXRealmDefines.h */, - 0708A00DD9DA35BF7C5AFCB1672E7068 /* FLEXResources.h */, - 8B63423C7D950FEF16615BDB00424A52 /* FLEXResources.m */, - 83FC40EEF2905DD98B17C73AA10CAD6F /* FLEXRuntimeUtility.h */, - 2A9540ABDA0362D948DC59A0965A3EBA /* FLEXRuntimeUtility.m */, - A42B95A1B36420D6DDF302C135B27C0B /* FLEXSetExplorerViewController.h */, - 5FEA0258275713E25EE0268767A94CF5 /* FLEXSetExplorerViewController.m */, - 201B2421CFBBD4791B4AE9FDEE60B154 /* FLEXSQLiteDatabaseManager.h */, - 979D08C64AD5FB4A34654B541C3281A5 /* FLEXSQLiteDatabaseManager.m */, - 6F9DE1B50BA52051FEA4AD5B8C7859A9 /* FLEXSystemLogMessage.h */, - 8C1E1EA93796037971A4F4DEBF3F1757 /* FLEXSystemLogMessage.m */, - 4EC1745041C6EEB684D6F3A792354688 /* FLEXSystemLogTableViewCell.h */, - DCF41E73D8E7A5ED6B54CE6D92557A6C /* FLEXSystemLogTableViewCell.m */, - 1C362F8E9316C3CD32C2A85B4747F3E2 /* FLEXSystemLogTableViewController.h */, - D0057AC29575011F57CFC8BAE8651B40 /* FLEXSystemLogTableViewController.m */, - 22A4844A5354DB0EF598F2C14F9DD565 /* FLEXTableColumnHeader.h */, - 47CDA8A83CA35B304DCA30A510A01B0D /* FLEXTableColumnHeader.m */, - 1CED8E51536DB09425948342C153B64B /* FLEXTableContentCell.h */, - 9A2548DEB969DB63DFBCAF8832B91DB9 /* FLEXTableContentCell.m */, - CA1D9594A6175E340D202D4B7A2C4324 /* FLEXTableContentViewController.h */, - 81B5FA125F83D144707ADF380931E385 /* FLEXTableContentViewController.m */, - E33F13F7DB64EE32E632922628F6DD93 /* FLEXTableLeftCell.h */, - 5FC07A104C00DEFADA5B359CEB2F1CEC /* FLEXTableLeftCell.m */, - EAB49EC4CFB4A7B10920B556F47ADAA0 /* FLEXTableListViewController.h */, - 1BF3AC9C4348BAB5887E77CB2E5711DD /* FLEXTableListViewController.m */, - 5715151DE5D51BD78131AF6F43684686 /* FLEXToolbarItem.h */, - 63DAE88E52ADC3DF3C18548E17235501 /* FLEXToolbarItem.m */, - C99E751F9C08DBD17D36B4189E98C16C /* FLEXUtility.h */, - F7EFC30C843E7A45FEB1F4CEF89FA5E1 /* FLEXUtility.m */, - 6EFE871E984CEC5ED7185A3C63C9868D /* FLEXViewControllerExplorerViewController.h */, - EAAFA3BE6753F2B85D9C808445262B72 /* FLEXViewControllerExplorerViewController.m */, - E56093D5BD860A799A5DBA40E8EF830D /* FLEXViewExplorerViewController.h */, - 083B3E12BA0D212D551EEDB0392993C9 /* FLEXViewExplorerViewController.m */, - D574BF8AB83F209202F1E6CA06EA1EBD /* FLEXWebViewController.h */, - F1D58E48FF695A59AFF50FC4BB4AC347 /* FLEXWebViewController.m */, - D686087ADD0B13E830F36F5837F796CD /* FLEXWindow.h */, - 18C3E57F06CDB59E19D3ABB90F3A796A /* FLEXWindow.m */, - A785B7EFEBE46E6336646F0909E1FC67 /* Support Files */, + 71BEB2A642A1CFEE3A7DBFAA9FB7E22D /* OnePasswordExtension.h */, + 1D4FE8AC63E30AA13F60DDF6BC6B369F /* OnePasswordExtension.m */, + 3A250869153E5AFEE62B28D215D07B34 /* Resources */, + 9D9D184EDB6F0EAAFD2D0C9B3B4735F9 /* Support Files */, ); - path = FLEX; + path = 1PasswordExtension; sourceTree = ""; }; - 3FE743C6FB50508E121471A56BFB7411 /* Core */ = { + 60DD8905296D2ABF500AEFFCA5C62A4D /* UIKitExtension */ = { isa = PBXGroup; children = ( - D015CE8582CD86E9AA8D23D0B0615826 /* Algorithm.swift */, - 30F9BD6DC96AD29A52E78E2080668829 /* AnyDifferentiable.swift */, - 4365B1E87A65BBD28BD702195D25CD4F /* ArraySection.swift */, - 3B08739DD416393E49984A28452F49A8 /* Changeset.swift */, - BE5441D0EBC0ABAEEB13B1E7A309A0CE /* ContentEquatable.swift */, - 64AF461CE70B2400786098E539A44531 /* Differentiable.swift */, - C328D9E1DB954DB7AFCF5FA5FA87F534 /* DifferentiableSection.swift */, - 904E99BDDF757CBF3A23B4BEA0139C5B /* ElementPath.swift */, - 2FA3FC3E8B29249DA170A9E3EB768900 /* StagedChangeset.swift */, + 525826DB985FD6E12361ED70057AFF74 /* UIKitExtension.swift */, ); - name = Core; + name = UIKitExtension; sourceTree = ""; }; - 42989374A1CBDFA513364BF1F90E5E10 /* Support Files */ = { + 613A35EE52F2C7A387B7CF9B93DC4425 /* Support Files */ = { isa = PBXGroup; children = ( - 14EB1E1656EB324205F11B8730EB5A07 /* GoogleUtilities.modulemap */, - 60C4A8411D5839E265D15AB52CC0A8AD /* GoogleUtilities.xcconfig */, - E12C74EE66E7DCC72D317C2C56300D33 /* GoogleUtilities-dummy.m */, - 2178B59C7EA4F39EFFDDB5A5452A256F /* GoogleUtilities-Info.plist */, - E3E69BBCDFA65E7C84026E22497D2B8F /* GoogleUtilities-prefix.pch */, - 5E5D51EA73314A85387979E485BFB676 /* GoogleUtilities-umbrella.h */, + 458D55B8BAAFC0118DFA4610A339C0DB /* GoogleUtilities.modulemap */, + 40535F80A39B0649ACD3833406DC42E8 /* GoogleUtilities.xcconfig */, + 47F88FF44B97D83A759129AC6B293521 /* GoogleUtilities-dummy.m */, + 67C0BFC6B66549562FC2B2BFD2BA2166 /* GoogleUtilities-prefix.pch */, + E811FF252A6DE87D015A07E5E7869138 /* GoogleUtilities-umbrella.h */, + 8B99745914AAEA919C2A3E36CCC6AF19 /* Info.plist */, ); name = "Support Files"; path = "../Target Support Files/GoogleUtilities"; sourceTree = ""; }; - 434C9B1F4FD6077E3BCE3727034DB7D4 /* RealmSwift */ = { + 6BC576FCD40BE752AB4F841963BF20C1 /* FirebaseCore */ = { isa = PBXGroup; children = ( - C53D5F85612E6A569A757F8D0B3E8322 /* Aliases.swift */, - A86E7496C36DFCA4BEF9A936343AEBCE /* Error.swift */, - 3443C30791D3D893BA34B2EF68F7F11C /* LinkingObjects.swift */, - 4E1830164DC063A52D40334E2591C28B /* List.swift */, - 2AB803F4FDFE5F31571467AF6725768F /* Migration.swift */, - A2C857D5300CA57C9A0FCF10F917787F /* Object.swift */, - B1DA28C1426491DC2DC048847150DA9D /* ObjectiveCSupport.swift */, - 6B09946E47B12567A6C085155432D02C /* ObjectSchema.swift */, - 8683B85C2A41BC4718B8AE8269CF3EBE /* Optional.swift */, - F87BF682A2DCED18405D2C1FAD73FABB /* Property.swift */, - CD4B523285C49D4C766B4E3FD2AB1CF8 /* Realm.swift */, - 4DCBFC246F8B8154B91889D276D7455E /* RealmCollection.swift */, - A0D9BEB8C0448D3D332BFEB35A1786A2 /* RealmConfiguration.swift */, - 699EC7D907033B1F4A7F30FA622396C3 /* Results.swift */, - 0F3122D0864BC36EA6B66DB3B4B0BE1A /* Schema.swift */, - 1A753A55ACF22BB4343DC64BD32464B3 /* SortDescriptor.swift */, - B993FF31D0C199E9E659E2F904A107EF /* SwiftVersion.swift */, - C0E2C5056CB2B0CE3AD4F2E3DCF335F7 /* Sync.swift */, - 245236EE29F99E9B548DF1C34197B361 /* ThreadSafeReference.swift */, - F0714F2F2EFCA5F2AA64CB9F67191FDE /* Util.swift */, - 7E2721FCE760E862F4D3E1CA16264BCC /* Support Files */, + C5B2B892919D56AD32496CF0741A31C8 /* FIRAnalyticsConfiguration.h */, + BC32A9655D8CAE5506DEB11E2BEA3274 /* FIRAnalyticsConfiguration.m */, + 4036A4534744BDBF4F77CF1F037DE9ED /* FIRApp.h */, + 274B7427DAC2A5446451C366E393DD23 /* FIRApp.m */, + BF8E324C5C0AB1EA8057E7E8EC430EF4 /* FIRAppAssociationRegistration.h */, + B809B004CF439076D32F9793D075B89A /* FIRAppAssociationRegistration.m */, + 1B8D5808A7D1B48DB579A0A32675B403 /* FIRAppInternal.h */, + 47166FC79DD2B626C59EA1820C595EEC /* FIRBundleUtil.h */, + 3A67BBF434A5B05A16E2FB749132152D /* FIRBundleUtil.m */, + FFD4900C351E708F8491229C1EB54D25 /* FIRComponent.h */, + 6E6A242810F9CD2065D9E85F884DFFF1 /* FIRComponent.m */, + D4AA511101DD20841575D3DD177DB374 /* FIRComponentContainer.h */, + 484BA0EE20C529C24C576621D43B2EBB /* FIRComponentContainer.m */, + 44DEC34DFC54A6E319F110386B6416AF /* FIRComponentContainerInternal.h */, + 8B18620F19478509A721E58CA95BB6DA /* FIRComponentType.h */, + A137D6CB291086A8F54B37C91467DAB4 /* FIRComponentType.m */, + EF5552287E05E4A8902BE0E847D6255D /* FIRConfiguration.h */, + 15427FC84688BB3E90070E8CA2FDDF4C /* FIRConfiguration.m */, + 942073495F157FB2C816F14B898AE57E /* FIRConfigurationInternal.h */, + 12BEB42633FE33B1394ADCE8B03B6CB3 /* FIRCoreDiagnosticsConnector.h */, + 3AF8CBC30CE9ADD541A69BC2AB0C38AF /* FIRCoreDiagnosticsConnector.m */, + 5B49018733F2767C7C3ECECA516A9373 /* FIRDependency.h */, + 8E31DD39569C8D361EFF997E28C2A7B6 /* FIRDependency.m */, + 3CB46BD859ED232B2F0A506F6621CC31 /* FIRDiagnosticsData.h */, + 08613D7B669BAA579B4AAB2D0E02E67F /* FIRDiagnosticsData.m */, + D9CA95951BC3EF2AA54285E1B67E6851 /* FirebaseCore.h */, + 75D6768FC46D3811AF3F851EA334181B /* FIRErrorCode.h */, + 6522B6B0D23405FCDC2F28A0949C8436 /* FIRErrors.h */, + 20A6180EC0E0D2F096FCFD4F23CF8052 /* FIRErrors.m */, + C5536BD2AE613CBD1468001B32464DCB /* FIRLibrary.h */, + F4476234062FC9F0BC028F3B472B6DBF /* FIRLogger.h */, + 949C55848999D520D3DF3AFD031E4B32 /* FIRLogger.m */, + AB5E5B0214E45BA5637D5795FC03F3E2 /* FIRLoggerLevel.h */, + 3400592DDCAEF1F6FC4E8933D94DD845 /* FIROptions.h */, + 534B1C2ADF835731FE745F74CC9B8AE6 /* FIROptions.m */, + B263B5BEAA8F57B6817AFB5D794E26AD /* FIROptionsInternal.h */, + B1C419DB06BA54C9CB0A91D8AD3F3B76 /* FIRVersion.h */, + 75E794D0E68FD1F29EE39F74A63AA8C5 /* FIRVersion.m */, + 43C9EB59F0781486BF87D3FE59E309A7 /* Support Files */, ); - path = RealmSwift; + path = FirebaseCore; sourceTree = ""; }; - 44C2DE8A54EC8F8685552FDBE854F062 /* Support Files */ = { + 6DC0BCB872BB3A61F479B7FA73817B70 /* SwipeCellKit */ = { isa = PBXGroup; children = ( - 798DA69125DC3108FF0F140ABD378E4B /* RCMarkdownParser.modulemap */, - 78CDF23EF74A55E1B5A79E3C79431859 /* RCMarkdownParser.xcconfig */, - 1611987CFA9535B38C916845620AB6B6 /* RCMarkdownParser-dummy.m */, - 993E532729116D48F88493D73FE79E19 /* RCMarkdownParser-Info.plist */, - 05CE49B0052C20F7A2CCD38CE38D6822 /* RCMarkdownParser-prefix.pch */, - B3457F4D0C7059CC4FC0745E548FE151 /* RCMarkdownParser-umbrella.h */, + A99B1F8C78AA14AB99228C6A587E679F /* Extensions.swift */, + 128930AEFC24615F910E45D913E15851 /* Swipeable.swift */, + F1E5252DCCDB7B091042FB6DA1E66966 /* SwipeAccessibilityCustomAction.swift */, + 00FDDD38DE4424361CDDB529C1F2B7B6 /* SwipeAction.swift */, + B8FC5A0355CC3AB5FA228ED10E81555A /* SwipeActionButton.swift */, + FD48E63D140551C0A8664D4ACA53E179 /* SwipeActionsView.swift */, + A264CE728EA230515590CD2C1BB0BEAA /* SwipeActionTransitioning.swift */, + FB0A0136AC3DBA7DD3D6EC4D4C6CE1EF /* SwipeAnimator.swift */, + D5F4DB73DBD81D78F94158B8F7E57E7A /* SwipeCollectionViewCell.swift */, + 1E759D6F3B13E7902A055F6A3F7DF98A /* SwipeCollectionViewCell+Accessibility.swift */, + E7A2C757941CE226369DB316339117E9 /* SwipeCollectionViewCell+Display.swift */, + C97EC3B9F550B7D0F59109B15F7F9670 /* SwipeCollectionViewCellDelegate.swift */, + B74CCF40BAEA0C71394AD7591946A970 /* SwipeController.swift */, + E018591B2B2E4AAFA0E286A9615CA056 /* SwipeExpanding.swift */, + 278E2872F3D29F5B671C504F6C616EC8 /* SwipeExpansionStyle.swift */, + FF11D4CFF982027D9B3DC946E0498A61 /* SwipeFeedback.swift */, + D7E0DFD07C88EFCE7E0A19F76E8CA7A6 /* SwipeOptions.swift */, + E9A8F597A001DFC31DA6062AE7AC46AD /* SwipeTableViewCell.swift */, + 92FDF4F22E34B2A8614E936F909100D7 /* SwipeTableViewCell+Accessibility.swift */, + 9431C77653EE1D19A88C4E08F7197957 /* SwipeTableViewCell+Display.swift */, + 85146536AE791582909D81B922676C3B /* SwipeTableViewCellDelegate.swift */, + 57D21477E4D8AED10159C230030BBF16 /* SwipeTransitionLayout.swift */, + 84FC0D7BA2E58AE3A5BB0AF669FBCD04 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/RCMarkdownParser"; + path = SwipeCellKit; sourceTree = ""; }; - 4663AC0756AD6CEF34CE635D155D8A9C /* MethodSwizzler */ = { + 6EF14962381C4E55F5DA27A00107EF8C /* Support Files */ = { isa = PBXGroup; children = ( - 321D80E0D4CD56DB2914069D3B5F15D5 /* GULOriginalIMPConvenienceMacros.h */, - 56B52B4F2FA2290B3309CA29D49A5F6A /* GULSwizzler.h */, - DFA13EF1EE21432BC8A7B0EBEB5C67D9 /* GULSwizzler.m */, + 6286F9417AA3B7400D144512191E886F /* Info.plist */, + 33EAE086E63C23847209A6FF02A5E350 /* SimpleImageViewer.modulemap */, + 8508C05B93A6E1C4E2B4DE212ED5F14F /* SimpleImageViewer.xcconfig */, + 900759CACE9016B276291B411EAA6847 /* SimpleImageViewer-dummy.m */, + E4A25F0EAED6BACEB69B2EE92A2DCA97 /* SimpleImageViewer-prefix.pch */, + 3E5473D53A4DAC79666B68571F102A23 /* SimpleImageViewer-umbrella.h */, ); - name = MethodSwizzler; + name = "Support Files"; + path = "../Target Support Files/SimpleImageViewer"; sourceTree = ""; }; - 48FE465E41F38841FEAA960C3AD3E203 /* Support Files */ = { + 6FB5564B4F66D839F26410C1375220A2 /* FirebaseCoreDiagnosticsInterop */ = { isa = PBXGroup; children = ( - 99B9CB016D6BB90EA7B9B4333DE03E52 /* DifferenceKit.modulemap */, - 41D3A8A2BC5D9F151C1090BB7E36D38F /* DifferenceKit.xcconfig */, - E68A13031EEB237F6F5BC09416E08C37 /* DifferenceKit-dummy.m */, - A6F12113E5BA6BBA7C3A1BFEE018FBB8 /* DifferenceKit-Info.plist */, - FCE4BB16A98664DDFDBB285A1FB9EE7A /* DifferenceKit-prefix.pch */, - F68093A764C4C49C1F1917336471BA7F /* DifferenceKit-umbrella.h */, + F65A2643F5B09F821BDAF383C422F034 /* FIRCoreDiagnosticsData.h */, + AE3ABB70D4B32F37D46411CFEBB847A0 /* FIRCoreDiagnosticsInterop.h */, ); - name = "Support Files"; - path = "../Target Support Files/DifferenceKit"; + path = FirebaseCoreDiagnosticsInterop; sourceTree = ""; }; - 560C75DF11B90E8EC8ADEAF1425FCB75 /* encode */ = { + 717368C2F57303FE2847FF288638F6DE /* Fabric */ = { isa = PBXGroup; children = ( + FF0B9ECC109B6268666DCD67359313F3 /* FABAttributes.h */, + 8C5CB48437C552A81CA9FF4440631436 /* Fabric.h */, + 03758832773E58AC2869C174AB45E1FF /* Frameworks */, ); - name = encode; + path = Fabric; sourceTree = ""; }; - 59A8CDEAD02CD87274CD6D0D0F9C8C4A /* Composer */ = { + 78206ED5315E88C0867E6A6E5BBBBF5B /* Support Files */ = { isa = PBXGroup; children = ( - 83B1D5C23A7979BA0F956F58C20B87C0 /* AudioRecorder.swift */, - 6999FD8AAF5920BA57E91EFED7E5C0BA /* ComposerAddon.swift */, - BCA620EAC2C424330BBBF790E43ED40A /* ComposerAddonStackView.swift */, - F201F4CA1B3B2608D04E327D3AFD5633 /* ComposerAssets.swift */, - CDBEA0C4DE528B0C657790627DD770D3 /* ComposerButton.swift */, - 68581B3780E62D4766045D9E4F908889 /* ComposerLocalizable.swift */, - 8A316EC8C433D8078ABE58BEF7C4B389 /* ComposerTextView.swift */, - F999C35A673A0094EE7C4FBBDF69125C /* ComposerView.swift */, - F64DB2B3B70A030DFF8DB2E7D8B9B713 /* ComposerViewDelegate.swift */, - E8863E5B7AD1EC8AA48ABA1C97E081BC /* ComposerViewExpandedDelegate.swift */, - F7BDE4A972BDEB815EC4DB5C1ADF2CFD /* EditingView.swift */, - FC76610BF8240039B04F54723129EB01 /* HintsView.swift */, - F50300C8AF4A3A0BE736C2E99C43B22F /* OverlayView.swift */, - 2FCDFAEDCDFE4AA4E772D1909B0406F5 /* PreviewAudioView.swift */, - 29B94446A8A5523D7777E71F0E578543 /* RecordAudioView.swift */, - E163D1A1E138AA1F6DBD37E1600EABA2 /* ReplyView.swift */, - CB46F77649A0F46C637AB35A568D6246 /* Tap.swift */, - A75430E7674311E9F95DE2D3328128D1 /* TextHintCell.swift */, - 8B5CD11230D2F44727ED8FD1E00FD4BD /* UserHintCell.swift */, - CFD7114C192401A130077DA8980541FF /* Resources */, + C1676C487D07D076C0FDF636CCAAD153 /* Info.plist */, + B70A8D6D7A2B655663D5CBC099DA73B3 /* RealmSwift.modulemap */, + 5BD2B8BD11FF89E41585E1D8C00D48CB /* RealmSwift.xcconfig */, + 374CCAF529CC7DF6C9C3A6ABA9E0FF3B /* RealmSwift-dummy.m */, + CBF1E78837F31D8815FC0F446F4D239C /* RealmSwift-prefix.pch */, + 24A5F6AF66179433098AA253AFE4793C /* RealmSwift-umbrella.h */, ); - name = Composer; + name = "Support Files"; + path = "../Target Support Files/RealmSwift"; sourceTree = ""; }; - 5D2627EC85CE2C8C42BF1D5C8574AB8B /* Support Files */ = { + 78F7069F73148D0F33188E8BCA6EAE69 /* MethodSwizzler */ = { isa = PBXGroup; children = ( - E34074D5400DFC7C86ECC22684958AA7 /* FirebaseInstanceID.xcconfig */, + 9FCA2F15A4419AA2F5390800ABCD597A /* GULOriginalIMPConvenienceMacros.h */, + CB68E25CAB993E991394E1AEC84615BF /* GULSwizzler.h */, + FA50DFA8BDFF060ED04A111BF61A61DF /* GULSwizzler.m */, ); - name = "Support Files"; - path = "../Target Support Files/FirebaseInstanceID"; + name = MethodSwizzler; sourceTree = ""; }; - 5EDDC3CA6EAD350E79D6CB87F36BDDF4 /* DifferenceKit */ = { + 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( - 3FE743C6FB50508E121471A56BFB7411 /* Core */, - 48FE465E41F38841FEAA960C3AD3E203 /* Support Files */, - 227F4E6F2828B71C08107927E59B4D83 /* UIKitExtension */, + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + F72307B495F2B0516CCCCAE0FE46F1B3 /* Frameworks */, + D908A74C5660AB5864884F58C7E842B3 /* Pods */, + 0AE17530D966B4C1F18650093A2F5600 /* Products */, + 2B70A3D11C584DEF798DF151A47B9FB0 /* Targets Support Files */, ); - path = DifferenceKit; sourceTree = ""; }; - 621C1BE4F71D0C536FF6EAF96CA843DE /* ReachabilitySwift */ = { + 84D012520B6EEA24927D37FABAD93C1A /* Crashlytics */ = { isa = PBXGroup; children = ( - 497AE74B8ABFE5ED6D57484C65C3EFE6 /* Reachability.swift */, - DEC2C128963B26DF8E612EC9D2930321 /* Support Files */, + 136E65FBE54384B4C8862DD556CA0DC9 /* ANSCompatibility.h */, + 5265EED62F0757D32BAC12BDD1094797 /* Answers.h */, + 63B962EB0CCE584A79BACF4B1D4B6420 /* CLSAttributes.h */, + E599B72734E8014A8E31BECB3F4FD52C /* CLSLogging.h */, + F0E36689A34B70C03AD17431571E1B69 /* CLSReport.h */, + 1DCE9DFBEEDAF1F0E0A9E6967E022DA8 /* CLSStackFrame.h */, + 3F5D0C90F3F06BB579634943C41856DC /* Crashlytics.h */, + EC46CB2D80F3A50BFC1E041CA7BFC639 /* Frameworks */, ); - path = ReachabilitySwift; + path = Crashlytics; sourceTree = ""; }; - 67B101B9E181F03CBBFF698EF112F45F /* Support Files */ = { + 84FC0D7BA2E58AE3A5BB0AF669FBCD04 /* Support Files */ = { isa = PBXGroup; children = ( - 217C1675728ACCF15078B7844E655F34 /* Nuke.modulemap */, - FD06C77FAFBB24EEE34842708B6F03A2 /* Nuke.xcconfig */, - 50A79E38DA1BE05BAEFE678818525C77 /* Nuke-dummy.m */, - BD5D5E68F49E1AC3FDA314A5179175B1 /* Nuke-Info.plist */, - F9C68FE77DB7A4AE2DA7799E88A3A0DB /* Nuke-prefix.pch */, - 68666A74F592E2619283E9E11748F9E4 /* Nuke-umbrella.h */, + 13F1EFC1D8AEBFBFD9FC14C6DA73E694 /* Info.plist */, + 3FFDA37060D80EF79408590D6E8F38D6 /* SwipeCellKit.modulemap */, + 183C952CB41915982BAB89E9F35F8867 /* SwipeCellKit.xcconfig */, + 9453DB1B91275B0DE135A6A1E171A208 /* SwipeCellKit-dummy.m */, + 9A7F05242B5B31F97E28B87039A79FBD /* SwipeCellKit-prefix.pch */, + 1EAC913B46A70F07B8EDD4219F40FB0A /* SwipeCellKit-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Nuke"; + path = "../Target Support Files/SwipeCellKit"; sourceTree = ""; }; - 684BA339D773DCD013740E1C0372636A /* Support Files */ = { + 86778FB23C89A8ACBB1A742FD04EB48D /* Support Files */ = { isa = PBXGroup; children = ( - 1DEDB36512AFEDCF4F7681D3948EE214 /* Crashlytics.xcconfig */, + D5C3F68AE3C331F51F017299A1E26BD8 /* Info.plist */, + 60B953365C306AC919244A432B9B6AA7 /* Realm.modulemap */, + 6295E8C80C600AF653A12F8814869FC7 /* Realm.xcconfig */, + 829D08D16E985DB5AA0A40EED922D5C8 /* Realm-dummy.m */, + F97F8D330DD37D381DB8CF6D0EDEF8C2 /* Realm-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Crashlytics"; + path = "../Target Support Files/Realm"; sourceTree = ""; }; - 691083FE30FD7A48AB9D2E390CB88124 /* CoreOnly */ = { + 8C8C01843F429600DD6A15FA52058469 /* Support Files */ = { isa = PBXGroup; children = ( - 92A55A5AD77CAE98BFFDA1B0F46D78BE /* Firebase.h */, + C941253FE41A1566D2EB8B69C5C7A194 /* FirebaseCoreDiagnostics.modulemap */, + 8DF6FB175BB8D880ABBEB1471CCDD82E /* FirebaseCoreDiagnostics.xcconfig */, + BEC142D1139605B2D33D9C174971D566 /* FirebaseCoreDiagnostics-dummy.m */, + BD644D92828CF301F94FAB9065DB3B5C /* FirebaseCoreDiagnostics-umbrella.h */, ); - name = CoreOnly; + name = "Support Files"; + path = "../Target Support Files/FirebaseCoreDiagnostics"; sourceTree = ""; }; - 6F6E768F19085CE4B0EF1E4C9E6BD2B8 /* nanopb */ = { + 90165FA09952FEA9E9DE503C56CDA3D2 /* FirebaseAnalytics */ = { isa = PBXGroup; children = ( - 39E902CB5C014A9D226645A7767CEB0B /* pb.h */, - C3E845091CA57B0CB60C92F840E7CEA0 /* pb_common.c */, - 9B70303A6DD06F792924CB14C9DCBC3A /* pb_common.h */, - A3D4BE9ECC9BDF3F96D0766314D06716 /* pb_decode.c */, - A1CCFBCC8EA2F6EF486A6BCB62049612 /* pb_decode.h */, - B9A2A2EC617C89894A5250173542C923 /* pb_encode.c */, - 0FE0E1418996497A2EB9F6EB5C16DD97 /* pb_encode.h */, - 12DA77529C67D931791EC5A661E2D53F /* decode */, - 560C75DF11B90E8EC8ADEAF1425FCB75 /* encode */, - 13DE33AC84F28EFF2D88230D9CCCB042 /* Support Files */, + A42316A8D10AE938804912231C649A89 /* Frameworks */, ); - path = nanopb; + path = FirebaseAnalytics; sourceTree = ""; }; - 70470F188DD48BE7862AC0ABDF6B650E /* Support Files */ = { + 907ACB39CA91AB0EE1C920C10DADF5D2 /* Support Files */ = { isa = PBXGroup; children = ( - 1F377C55C9AD6BE64915CD9A4E133B25 /* Starscream.modulemap */, - 1C436036B465D0F314D33846E089B929 /* Starscream.xcconfig */, - 6DE1D66692297F513981267E8F1E8111 /* Starscream-dummy.m */, - 0F9DC88DA91C60A1B5DF304C4EFD6C63 /* Starscream-Info.plist */, - B55CA127D07E4BC47582B67874595FFC /* Starscream-prefix.pch */, - 9F56B686F064CB79FA878F59FD921E8C /* Starscream-umbrella.h */, + CFD3B81A4E692C0C56DE59C7A20405BA /* Info.plist */, + E20F0004531B07BD7732D17EDEDB5904 /* semver.modulemap */, + 874C8E9055E6642AF2AB03EB7E5AEA01 /* semver.xcconfig */, + 5C1F641F2DFD16983B82C393F16B35E4 /* semver-dummy.m */, + 6FC246F25B9235D731897D446A4BC163 /* semver-prefix.pch */, + 05B999E6E8A4D0B3CF7F4D49A8B25C14 /* semver-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Starscream"; + path = "../Target Support Files/semver"; sourceTree = ""; }; - 709CF09E01C8E75977236660BD76375E /* NSData+zlib */ = { + 92D2FC2B460886584E9C6645DE15E50D /* Pods-Rocket.Chat.ShareExtension */ = { isa = PBXGroup; children = ( - D4CD4156A4D93128A73BF9AE09B2FADE /* GULNSData+zlib.h */, - EA693B1DD36B4704718D9482B3513C95 /* GULNSData+zlib.m */, + 5485C62ADD4CFB40CECEAE0227D3A4D1 /* Info.plist */, + 8D3715622954BC6F0320657DF292E19C /* Pods-Rocket.Chat.ShareExtension.modulemap */, + 3426D3EEE40DA7B90180E390592F9C46 /* Pods-Rocket.Chat.ShareExtension-acknowledgements.markdown */, + 4F8742A28E3D7B8D07FB29B661245FAC /* Pods-Rocket.Chat.ShareExtension-acknowledgements.plist */, + 765BE420B1E8A3A67885C25396CAAE85 /* Pods-Rocket.Chat.ShareExtension-dummy.m */, + A0CA7BA7D423E2FD057D1FA1A0DE3EDD /* Pods-Rocket.Chat.ShareExtension-resources.sh */, + E9A0B3EF5FD106794FEF96BD62725695 /* Pods-Rocket.Chat.ShareExtension-umbrella.h */, + CA794C93B8A658C4B011EF27A531DFA1 /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */, + 43AD415141E23C2C0A1DC8B66FDDB833 /* Pods-Rocket.Chat.ShareExtension.debug.xcconfig */, + 78F431B816E8AC30DF33810B47BB39E0 /* Pods-Rocket.Chat.ShareExtension.release.xcconfig */, + 28B5278BC2CCF657DFF385FD2DD4CB5D /* Pods-Rocket.Chat.ShareExtension.test.xcconfig */, ); - name = "NSData+zlib"; + name = "Pods-Rocket.Chat.ShareExtension"; + path = "Target Support Files/Pods-Rocket.Chat.ShareExtension"; sourceTree = ""; }; - 72F6B98D58E815783639C602F8D9113C /* Support Files */ = { + 97712C430965814CC6EA3DD0A5035839 /* Support Files */ = { isa = PBXGroup; children = ( - DFA0392A3B76A31ED0442975B758801B /* Realm.modulemap */, - 16EF9F2B9693CAE4436AFC40BD388362 /* Realm.xcconfig */, - BC672B1A13049DA8F08990F9C75B282C /* Realm-dummy.m */, - AC6EB4D9AA75E476CE3473079FDD8285 /* Realm-Info.plist */, - 0AD714D10207BE5FF0DCD232257A9521 /* Realm-prefix.pch */, + 5467B19843BBFFC2B5C5CC4930C78D27 /* Info.plist */, + D49C8209C0E1059DF74468E62157AA7D /* Nuke.modulemap */, + C93F9C8B6AD51F8CD74761E2D620B4C2 /* Nuke.xcconfig */, + 5555CE85CF436D7950C2B6E4C70A40AA /* Nuke-dummy.m */, + 1E00FCCC5BF84790059FC438D482F6A6 /* Nuke-prefix.pch */, + 2F796AD6128C846E07E2AF4A0A8DDFC7 /* Nuke-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Realm"; + path = "../Target Support Files/Nuke"; sourceTree = ""; }; - 73098374486B877A7EBC325899C59C94 /* Support Files */ = { + 980BD6209E9A56F5300B9868F791089E /* NSData+zlib */ = { isa = PBXGroup; children = ( - 69EFF24B73DBBF5DA777DD8BF340544A /* MobilePlayer.modulemap */, - 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */, - 1458D07F9EB94342AB68E117BBE44BDC /* MobilePlayer-dummy.m */, - AEC0DEF098D6FB99DD668E05E5E200A9 /* MobilePlayer-Info.plist */, - E665F9A6D848F147EE9D04FD73C092D4 /* MobilePlayer-prefix.pch */, - 334EBAF76205BE715D399E2E13D5B20D /* MobilePlayer-umbrella.h */, - 4F95F7374CB094ABE20102F82C43E623 /* ResourceBundle-MobilePlayer-MobilePlayer-Info.plist */, + 522925296C99DA26C4F3137E76AC31EC /* GULNSData+zlib.h */, + 8D5C3247F49FF7F3621387774E2063C9 /* GULNSData+zlib.m */, ); - name = "Support Files"; - path = "../Target Support Files/MobilePlayer"; + name = "NSData+zlib"; sourceTree = ""; }; - 74F5B1357F8F5C70BA732510B4ED8379 /* 1PasswordExtension */ = { + 997E3CE7288C4D4E1583DCE069CB1478 /* Nuke */ = { isa = PBXGroup; children = ( - 7FA28609574769E808D96630222ED236 /* OnePasswordExtension.h */, - D04E47013B463E602EFA26C46E4204D9 /* OnePasswordExtension.m */, - 99700A9773B0C578869CD4808CBF33AC /* Resources */, - D974DBE6B03F3BCD6BAC8B7C4CF935EC /* Support Files */, + 68DEC4FFFCF95801F5F075CCA18C7A9D /* DataCache.swift */, + 005AAFFED88042634E6AAB1AE347E947 /* DataLoader.swift */, + 10C194B49F009FA039889164DCD9A6B8 /* ImageCache.swift */, + E276B9E4F8937CB299EB7AA1B069204E /* ImageDecoding.swift */, + A8C85D4D47003EBCB7E526F396AEAB4E /* ImagePipeline.swift */, + F6423B29494ACF9C9DC11EE7AA82B730 /* ImagePreheater.swift */, + 28838A04C3B03ED1653F5C4F1A28928D /* ImageProcessing.swift */, + 0C4F45506EB8EFE786FF82E6B6345EBD /* ImageRequest.swift */, + 3F3A9C766AA388BADA9A31364D252FC8 /* ImageTaskMetrics.swift */, + C9D0189B31551C5367DEEEBCFECA7DF0 /* ImageView.swift */, + 15938CFEA0F012D7BC2466E8798921D9 /* Internal.swift */, + 97712C430965814CC6EA3DD0A5035839 /* Support Files */, ); - path = 1PasswordExtension; + path = Nuke; sourceTree = ""; }; - 76CCFC0D72145B8F489DFE1AAD0AD0A4 /* Realm */ = { + 9C82500AB7C01492CAF4ED8E74FB710E /* Composer */ = { isa = PBXGroup; children = ( - 8E5C578EFA97B1F81DA1AED85DE2AEC3 /* binding_callback_thread_observer.cpp */, - 7DE9B5BCA3CC4393E359C30544C45ABD /* collection_change_builder.cpp */, - CDFE33444AB890450A20EB926C016E16 /* collection_notifications.cpp */, - 75836FD49C0AEC0D6148F9535B154192 /* collection_notifier.cpp */, - 4B1A12C6EB0EACD0AD62A2335FB9A486 /* external_commit_helper.cpp */, - 824A72FD55533BECB0B1E2E255A078AA /* index_set.cpp */, - 9182FAC44120C95821B2A90C2A38BF9E /* keychain_helper.cpp */, - A12FB7830D00F6A87A3794AD67963296 /* list.cpp */, - FDC68D83D2FFC444267C0C7C5179D4C9 /* list_notifier.cpp */, - 873BDD41B2C5A1C538193B073AC63D33 /* network_reachability_observer.cpp */, - 9ECC9230D5406CEAB879B9B12B6C19B9 /* NSError+RLMSync.m */, - DFE775114A466C1F5293DD6EB2BED202 /* object.cpp */, - AE77B99D5D5FC3B12AD8117349B7D33F /* object_notifier.cpp */, - BA1D313D02933D3BBD268BD132C5A04D /* object_schema.cpp */, - 10706607940A92A9127E8A23803C9FEE /* object_store.cpp */, - F9CE46578BF75F06647B8BA0B2FAE5CE /* partial_sync.cpp */, - 119EDB076A8E33E4BE05FB1F3A0D5414 /* placeholder.cpp */, - 392813035591A97ED5B33ACBF459CA9A /* primitive_list_notifier.cpp */, - EBDA01F79924E302E04EF88D52E00F81 /* realm_coordinator.cpp */, - 612147161C426C9873A0899D260E9DC3 /* results.cpp */, - 29BE3CC535BAB5E938FF22E4A05DD41A /* results_notifier.cpp */, - 466045FA36C4BE1E3A9F1536F7AA11D3 /* RLMAccessor.h */, - 8435925FA8DEA6EC0C99379D9831AF8F /* RLMAccessor.mm */, - 5B5D088EDD0B8F72AEBE7962C8953B33 /* RLMAnalytics.mm */, - EDF59DA5E950A1C0C9587C7A42E69D91 /* RLMArray.mm */, - 3754C508CFCEB5426546F297A424565F /* RLMArray_Private.h */, - C3A69AF514D140C715C44E2515DEDA74 /* RLMClassInfo.mm */, - 7651BBFE595549880C54FD738B09E52B /* RLMCollection.mm */, - 4BF497262555FFC94E2A686B66343EBE /* RLMCollection_Private.h */, - 3AEB40EB7BBDCAF5A880C55B99A31A17 /* RLMConstants.m */, - B368B6CFAECA096883CE6162F9F86AEF /* RLMJSONModels.m */, - 21CC16E3C277434A36101D846291C4A5 /* RLMListBase.h */, - 35744F6F9C9710E653A58645B9FFB54F /* RLMListBase.mm */, - 363B499AF27D659B45AD3C708BC1FAD4 /* RLMManagedArray.mm */, - 715B9E5B7644BC3C381C4C604AC87F1F /* RLMMigration.mm */, - BE1135C4D86EED32F1395B6190A04D9C /* RLMNetworkClient.mm */, - 01CA00DAE686DB9419BC0E9810CAA28A /* RLMObject.mm */, - 4156FEC2340172AE6BAC86DA34101E5E /* RLMObject_Private.h */, - 575F21FA02FEFB3F82E1A8E65234CB76 /* RLMObjectBase.mm */, - 87024D93078CBF14CC11C6C068547119 /* RLMObjectBase_Private.h */, - 16794853642C950B677D5C19AC176101 /* RLMObjectSchema.mm */, - 8685FB3EEE56A4FFDDADA18A9BD5F9A2 /* RLMObjectSchema_Private.h */, - E2892F69325FF4818F125392E0408266 /* RLMObjectStore.h */, - 7E95D42CC110B6BB8BB58E4D463D7E64 /* RLMObjectStore.mm */, - C67F527A8C73E899AE7E94094F15C205 /* RLMObservation.mm */, - 27B01EDF686D5010CEC58C63A0F6282C /* RLMOptionalBase.h */, - 8AC8DD3D3994F2AD081230813AB0BB83 /* RLMOptionalBase.mm */, - B8C21A11A4EE68B34A8CEFCDA3C6C64B /* RLMPredicateUtil.mm */, - 4AC22966F95E94F595F9796C03046838 /* RLMProperty.mm */, - 8D5478333A6D40E000CC0BFB6DC84256 /* RLMProperty_Private.h */, - 4BB10C61E82F34D979EAE0B7D7CDCB28 /* RLMQueryUtil.mm */, - 33A67FC4AD27BB4BA2DB41DD4646567A /* RLMRealm.mm */, - EEE7AFB31FF8559653259C047D8CAC57 /* RLMRealm+Sync.mm */, - 1406DADDAF55885054DF945A31BC7854 /* RLMRealm_Private.h */, - 6D9FB553CD5797C918211296D084E9C2 /* RLMRealmConfiguration.mm */, - 9A1391252771BE32FDDD1B84A61A6BF8 /* RLMRealmConfiguration+Sync.mm */, - E358F7841C07D325480255669E11A042 /* RLMRealmConfiguration_Private.h */, - 7E0BC1C180EC36A05AA8435E482605B1 /* RLMRealmUtil.mm */, - E68F02BA7C5F71230164F0C74DE1E142 /* RLMResults.mm */, - 8D8126873ED1D9F90C833C21468FC00C /* RLMResults_Private.h */, - 87CAEB81973810971816E1CC04348823 /* RLMSchema.mm */, - 2A9EA71CC98E3516152E5C31F1080C4F /* RLMSchema_Private.h */, - 1DAA361DC3F8420552A3FC75D840E287 /* RLMSwiftSupport.m */, - 4C77F7EBFF031407CF353689506884FF /* RLMSyncConfiguration.mm */, - 0F2A31AC43A899263C655766ABFF61D9 /* RLMSyncConfiguration_Private.h */, - 745EA400F9DE8A48EA7CCCE89EE9EE6B /* RLMSyncCredentials.m */, - 4B3F8884283789EF7FBC4C355116E49D /* RLMSyncManager.mm */, - 6841BDFB53AD59EBAD698B598677E339 /* RLMSyncPermission.mm */, - 277852820C67991EDB54119236884B33 /* RLMSyncPermissionResults.mm */, - 634A77B1897FCA978E8B0425A659A00D /* RLMSyncSession.mm */, - 0382CBF81F5C02077DC9094B33149A23 /* RLMSyncSessionRefreshHandle.mm */, - 15EBFAF3F750FC13221323B27E31EFC2 /* RLMSyncSubscription.mm */, - EE22E97AEC611881905C329B3392A631 /* RLMSyncUser.mm */, - FF6277F9D0FB4A8398CBCD8C9A48AF23 /* RLMSyncUtil.mm */, - 999CED0ADD0E00299A347C4B0018B4A6 /* RLMSyncUtil_Private.h */, - CA540CA0E2F509CC4477BA837BEFE670 /* RLMThreadSafeReference.mm */, - 8044325BC78DA37299AF018ED199C759 /* RLMUpdateChecker.mm */, - E32205BDE1924486B4B64CB6643A662A /* RLMUtil.mm */, - C92DEF3E8ABB7DF152D1B5BFF96FFDB7 /* schema.cpp */, - C003348FAFB6601A1E30EC32B1BA44A5 /* shared_realm.cpp */, - A2C41E1E9EE56698C3DD8D94E53B2C06 /* sync_config.cpp */, - 22A07D82268E20A194FAEB660CB9D60E /* sync_file.cpp */, - 5B4D7DBB7BD36D456B3004E14A5A8C31 /* sync_manager.cpp */, - 095F35593572F9E7971326256900B713 /* sync_metadata.cpp */, - 776CA75A12D83DD573376E5CD0B68859 /* sync_permission.cpp */, - 731EBC56B953ECC92C201B3428C10F17 /* sync_session.cpp */, - 2AF9BAEB06A933A49C63F4FC9B1DB79F /* sync_user.cpp */, - 73991BEAEE18D88AB5638D2D0D67E5A1 /* system_configuration.cpp */, - DB5AF741E160861E85CBDCB39E2AED0C /* thread_safe_reference.cpp */, - B1E2F0525F8BA55DA747C6DCBE6AD265 /* transact_log_handler.cpp */, - AA81613DE1471C0B617C6B56D3CC7D53 /* uuid.cpp */, - 052BEF575B27F61DFEA2194251097584 /* weak_realm_notifier.cpp */, - C558C007B66AB9ECC3B7A6415710C133 /* work_queue.cpp */, - 23C4A96793730D28584A86B629E5062E /* Frameworks */, - 3628C6D1CD7534EE3B937D7C60CFED6A /* Headers */, - 72F6B98D58E815783639C602F8D9113C /* Support Files */, + FAC971DA2AA2CE4E8C4DDB50D1208D0F /* AudioRecorder.swift */, + 733B701552FBE4C30E4FDB0D7F824707 /* ComposerAddon.swift */, + BD4DCA082C2713E9992C24FDA2364FC3 /* ComposerAddonStackView.swift */, + 2D5B795800A5637A7B0E6940B6343F27 /* ComposerAssets.swift */, + EA1A3E89518BAD83D8487E635BB044D6 /* ComposerButton.swift */, + 5967C3FFFEDB39BC24D84E5476E1899F /* ComposerLocalizable.swift */, + 0116F62849EF37D4F9B16F1412981136 /* ComposerTextView.swift */, + B21478A78B9DC6410D459510C3246E62 /* ComposerView.swift */, + 12100091E1EF44D77B9E75D640BE692B /* ComposerViewDelegate.swift */, + 5A5730720CC001C4B89299C34A6BA600 /* ComposerViewExpandedDelegate.swift */, + 9B8977726EDC46129DF4D5513F674F88 /* EditingView.swift */, + 7E06B26C6906A781AC65EE095EA63AC9 /* HintsView.swift */, + 4E8E1591D87AF949AE0156B4EBF9AC0A /* OverlayView.swift */, + 1F1F0CDC24EC702F0A7BDBB38FC66DD1 /* PreviewAudioView.swift */, + 7A688DDB6C090301B7A70E2F56CAE806 /* RecordAudioView.swift */, + 18A35C695C2AE7DE6114D6BA3FAF33DE /* ReplyView.swift */, + B66BB2A17D19F20E038B928768CA4F64 /* Tap.swift */, + 7B0A1703E9239CF6CFFEF5B2C7896C9D /* TextHintCell.swift */, + 9EDD239601ABA432E4FCD857E67A261E /* UserHintCell.swift */, + FF6924B2D562C741CA305AFEF225D1C3 /* Resources */, ); - path = Realm; + name = Composer; sourceTree = ""; }; - 7E2721FCE760E862F4D3E1CA16264BCC /* Support Files */ = { + 9C83B72998968409B92866AB409A994D /* GoogleAppMeasurement */ = { isa = PBXGroup; children = ( - 2FC41BE6D95236D68475DA07E939BC93 /* RealmSwift.modulemap */, - 7B2C6DFEA576926CBC7F88EAC76CB12B /* RealmSwift.xcconfig */, - EDF1B2963056E9CBB2B68C27E4C81B4A /* RealmSwift-dummy.m */, - 04521581D99269932E1EFF9806589C8D /* RealmSwift-Info.plist */, - 5BAFD99E2E110F9C973B46B5D1919091 /* RealmSwift-prefix.pch */, - B6DFB167AD792BBD9286517AAF00F507 /* RealmSwift-umbrella.h */, + 33EC368DDA7DB458F07DFA9F183E5A47 /* Frameworks */, ); - name = "Support Files"; - path = "../Target Support Files/RealmSwift"; + path = GoogleAppMeasurement; sourceTree = ""; }; - 8104130FA7F411593CD2EDA2DA8A36C7 /* Environment */ = { + 9D9D184EDB6F0EAAFD2D0C9B3B4735F9 /* Support Files */ = { isa = PBXGroup; children = ( - 896A6CB4506286067519743B474D0397 /* GULAppEnvironmentUtil.h */, - BB1861C9CC2F4C922A89A662E161CD58 /* GULAppEnvironmentUtil.m */, + 1F59759BCF2E93EFC49489AEE69D2EB0 /* 1PasswordExtension.modulemap */, + 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */, + 5EB8169A25F00A4FB6C295A550C47C7D /* 1PasswordExtension-dummy.m */, + 7A840DE10837EE801ED73D5427086D9F /* 1PasswordExtension-prefix.pch */, + DEE09FAA5184A7C655FA68A9878AB4FE /* 1PasswordExtension-umbrella.h */, + 8B8A5B05E6D5702E2C4A5AB6791A739A /* Info.plist */, + 33073E928D7349D304C1A2B2ABED2351 /* ResourceBundle-OnePasswordExtensionResources-Info.plist */, ); - name = Environment; + name = "Support Files"; + path = "../Target Support Files/1PasswordExtension"; sourceTree = ""; }; - 8C462AF2FE075F41263A74A72DD4F3E6 /* SwipeCellKit */ = { + 9E5BB20ECE66FC0AF7BB170EC1685418 /* SimpleImageViewer */ = { isa = PBXGroup; children = ( - CF3DD329272E326F5386346860ADA6D7 /* Extensions.swift */, - 004A78012ACB0F4D3851F033B159FC96 /* Swipeable.swift */, - FCEB7B936D4BA5528973A1C7D4FFCB2E /* SwipeAccessibilityCustomAction.swift */, - 4DD562941BBCA90C5560C9728FF52895 /* SwipeAction.swift */, - 7193C8CB95F6E2FCC50F8769E69356FC /* SwipeActionButton.swift */, - 95915708D93AEB94CCCAD96405132D89 /* SwipeActionsView.swift */, - 728C3890E14E1D2F3879DEB0AC70552A /* SwipeActionTransitioning.swift */, - 46358FB8364621A758602717F2ED2480 /* SwipeAnimator.swift */, - 8FCF3CE27BB830A2562D483ECC97AC31 /* SwipeCollectionViewCell.swift */, - 5A71A460DF030ABA6E1B8B2F563F3210 /* SwipeCollectionViewCell+Accessibility.swift */, - 5ACA9F2B0BB9373FD4FFED6671505035 /* SwipeCollectionViewCell+Display.swift */, - 5D669219E202A75BAD93EA2CB465832F /* SwipeCollectionViewCellDelegate.swift */, - BC6C6B5559B2B1F8F9340A0738891986 /* SwipeController.swift */, - 32D55CF364B918CDB7A7D3A9640F81C8 /* SwipeExpanding.swift */, - 734B24159DDB59425F56805686E80B16 /* SwipeExpansionStyle.swift */, - B0434F59D3B013B5E7783FDEBCB31426 /* SwipeFeedback.swift */, - 606926E9F514458AECB2301C96D7B8D5 /* SwipeOptions.swift */, - 5AA4B0A4F28DEDBA17D88751014D309A /* SwipeTableViewCell.swift */, - AB48A256934CC71FD42C7BF71C4C7615 /* SwipeTableViewCell+Accessibility.swift */, - 69641B760872C3DAE1CDF55E0B59583E /* SwipeTableViewCell+Display.swift */, - 9F7AD9D288D9A823297D4151AEDC5989 /* SwipeTableViewCellDelegate.swift */, - 32037FEBB8B1061A9DBF2D1BF66D4852 /* SwipeTransitionLayout.swift */, - C67E533848A534D5E74AEEDC4668D2A5 /* Support Files */, + C274E424F704A18DF70A337371F6F721 /* AnimatableImageView.swift */, + F24FB11FCACC5E30EAA1E2F19D5CCA69 /* ImageViewerConfiguration.swift */, + 3C5BFABF37150D62756229774BAF91F7 /* ImageViewerController.swift */, + 22D30D0FED75EB1019C8A721AD680F7B /* ImageViewerDismissalInteractor.swift */, + 6C44A89B9582DF57EAB6881BD8D020A7 /* ImageViewerDismissalTransition.swift */, + 89C5A359A75F03883BD32AB65B7CB731 /* ImageViewerPresentationTransition.swift */, + 5DF8DDC1BDB2A865CCB609C58DEA7E7F /* ImageViewerTransitioningHandler.swift */, + 6E3A4D86935AA10FC4A4FAD810167E83 /* Utilities.swift */, + 4DCADF88A236A83659470E20004C8971 /* Resources */, + 6EF14962381C4E55F5DA27A00107EF8C /* Support Files */, ); - path = SwipeCellKit; + path = SimpleImageViewer; sourceTree = ""; }; - 90A61B6E664A1390CEAEC52C0179ABFB /* Products */ = { + 9F6E810F27C41D9373396E444C184E01 /* GoogleDataTransportCCTSupport */ = { isa = PBXGroup; children = ( - B4E211CF1C23F56B6EB7E4C81ABB7D2E /* DifferenceKit.framework */, - 9245C86C37ED898BB7ADF27826C44AB1 /* FirebaseCore.framework */, - 5D89B8817FD2DB77EEBB3EFCB4FE38D7 /* FLAnimatedImage.framework */, - 0FD41C816E41BA7B1E1EFF433F297298 /* FLEX.framework */, - 96C4B139AE5D41F6AD9C1B27401E4D33 /* GoogleUtilities.framework */, - 8D58035EB17E6B53CAE166DBFEEF18AA /* MBProgressHUD.framework */, - 06AE42FD103B3E8D76E34A202487932C /* MobilePlayer.bundle */, - F745D69135D8C26AC9C8CE5505509D48 /* MobilePlayer.framework */, - 29C08D42462D83C95524290184CE65D3 /* nanopb.framework */, - 88FD033FABB3575F75034CDA0A9DD622 /* Nuke.framework */, - 6A6563001F6677C6838FA34CAE1ED7CE /* NukeFLAnimatedImagePlugin.framework */, - E894CF72E1DE32F26F27AAF4E9D74203 /* OAuthSwift.framework */, - A59F6900FC05330C26A6D2A15784F3C1 /* OnePasswordExtension.framework */, - 86E28611DC9981BAB3D3104D0771EC30 /* OnePasswordExtensionResources.bundle */, - FC853BD6EDD4E69E20BE1FCB5258259C /* Pods_Rocket_Chat.framework */, - 329E49E8944C8DBF1EB2C35AA62EF71F /* Pods_Rocket_Chat_ShareExtension.framework */, - 79F74E975F25D66AF4EE31BDC2BB014D /* Pods_Rocket_ChatTests.framework */, - B6DDD21F074DFD96EB8ABAB263DB4E6C /* RCMarkdownParser.framework */, - FBDF3BD1FC22ABA158FEADC0C462F87B /* Reachability.framework */, - 8170A6895172754BC2C0FC4295139A7C /* Realm.framework */, - 6D0FEA2CFF9A73891D03E928CE758932 /* RealmSwift.framework */, - F02E4923AA8BA2A60B7102235BBBF041 /* RocketChatViewController.framework */, - D8BA413DF6667899004295B0A97FFE6F /* semver.framework */, - 3D33147ED2FC9DDADC5F09E224F445BE /* SimpleImageViewer.framework */, - A2C49B4C3C90BF494A04763D16971A9F /* Starscream.framework */, - 27EF820450FAEBE475C6DC9E68CBA178 /* SwiftyJSON.framework */, - 1E1CB03B761513D88FAA0B597C7940C8 /* SwipeCellKit.framework */, - ); - name = Products; + 1F10E7351527A6A2BD0110F1CE83E14D /* cct.nanopb.c */, + 427B8D9E52FA8F953AAC5FF40A8C3691 /* cct.nanopb.h */, + 6E04D152C917E6A4B4BCBCB348E95736 /* GDTCCTNanopbHelpers.h */, + EAF54011C28179CB3989B94D05481737 /* GDTCCTNanopbHelpers.m */, + 01A30A9C466AA3CBDAB80CAFE26701A5 /* GDTCCTPrioritizer.h */, + 7C9E3BED955DF0A14EB069D1EE908A77 /* GDTCCTPrioritizer.m */, + 28FA6726940DA52AEC7AD668DCACAA02 /* GDTCCTUploader.h */, + 27ACE74CC75BB1904160E29F01B41E69 /* GDTCCTUploader.m */, + E08B176F442C281998E6B4A361C97092 /* GDTFLLPrioritizer.h */, + 9F7B3C2DBB715DF0BE8BFFBCF275498C /* GDTFLLPrioritizer.m */, + 98EF7B2F56684B7D3B1C9597331BE43C /* GDTFLLUploader.h */, + C6ABC3CAF22D4567480D52831F316E2F /* GDTFLLUploader.m */, + CAD34C11E6A17D384E3B231FBADD9FE3 /* Support Files */, + ); + path = GoogleDataTransportCCTSupport; sourceTree = ""; }; - 92C93A748867D0DAD8D6EDBCDDBDB5A5 /* iOS */ = { + A42316A8D10AE938804912231C649A89 /* Frameworks */ = { isa = PBXGroup; children = ( - 4A0392C30C0A9B69AB3CC5182B059553 /* CoreGraphics.framework */, - D741E634FA81FC18A9A8756F336DC838 /* Foundation.framework */, - 2F3338B8C0672CB2FE0BF94CF1696554 /* ImageIO.framework */, - AE71D8D4CFC80899EE3A1C22ADEFB43B /* MediaPlayer.framework */, - B69B83BDD3B35F420C854EA89935B71A /* MobileCoreServices.framework */, - A343C28225F692A6D5807B549B20F941 /* QuartzCore.framework */, - D24B53DEEB80CB83A38DC85B98542278 /* Security.framework */, - 2743375C21685AFF14997E1A9AF3E8F9 /* SystemConfiguration.framework */, - B6CDABEF8661834BC659A48FEF8A10FD /* UIKit.framework */, + 1F868BCBA48C7E3A1466AC076A64D99C /* FIRAnalyticsConnector.framework */, + 57F1ADA4F2EB2D5FACBE9BBD87069EEC /* FirebaseAnalytics.framework */, ); - name = iOS; + name = Frameworks; sourceTree = ""; }; - 965340FA79185D2C62AEB917FCCAAC7F /* Support Files */ = { + B0E87491EB81EDE7A4095E4CEA0592D5 /* Pods-Rocket.ChatTests */ = { isa = PBXGroup; children = ( - D96912A8D45377B0A76C2D2640926BFA /* FirebaseAnalytics.xcconfig */, + 7B25BCE9A6604A53365DDE51EF7803D6 /* Info.plist */, + B8D1CAEB6DB736881066616EF5A7293F /* Pods-Rocket.ChatTests.modulemap */, + 7A011A0AD0F974D4D6949C288986FCBE /* Pods-Rocket.ChatTests-acknowledgements.markdown */, + B442D92180F8FFAC7385F55BCFEF1129 /* Pods-Rocket.ChatTests-acknowledgements.plist */, + 909F5C4480D7E82B0877A398AD694FEC /* Pods-Rocket.ChatTests-dummy.m */, + EDD4909D6A375466663B012FBD7936D2 /* Pods-Rocket.ChatTests-frameworks.sh */, + 157D1CBBCFED1655B9C889D97B13F5F6 /* Pods-Rocket.ChatTests-resources.sh */, + 3EFD5686D1D31ACBAD2CEF5226454C24 /* Pods-Rocket.ChatTests-umbrella.h */, + EA02640B6A8A6222F4EBC2A74340C48A /* Pods-Rocket.ChatTests.beta.xcconfig */, + DD0099DC85F9F046F71DFA77FE3122F3 /* Pods-Rocket.ChatTests.debug.xcconfig */, + 7E748D746DD1F48DB60F9B1577B2A9C2 /* Pods-Rocket.ChatTests.release.xcconfig */, + DED66438943725547A782DB5D47662F9 /* Pods-Rocket.ChatTests.test.xcconfig */, ); - name = "Support Files"; - path = "../Target Support Files/FirebaseAnalytics"; + name = "Pods-Rocket.ChatTests"; + path = "Target Support Files/Pods-Rocket.ChatTests"; sourceTree = ""; }; - 99700A9773B0C578869CD4808CBF33AC /* Resources */ = { + BA6885036F6B45329434D4E9EBDF9054 /* Reachability */ = { isa = PBXGroup; children = ( - D7E5AE0D8500C740649AE1D5DFC55C70 /* 1Password.xcassets */, + A160B7B0709E706A1F005EF3CF295032 /* GULReachabilityChecker.h */, + 758087B03E6E66E5B8177915CC535762 /* GULReachabilityChecker.m */, + 8C7B68AC3BD9C08CAE846306E2405DFA /* GULReachabilityChecker+Internal.h */, + 891B93510720F244C576109AA527296D /* GULReachabilityMessageCode.h */, ); - name = Resources; + name = Reachability; sourceTree = ""; }; - A264C4B7BE55920D7742D8C4F0F8E5D6 /* SwiftLint */ = { + BCF8333DB101F0DBCB36A5F93976EBA7 /* RealmSwift */ = { isa = PBXGroup; children = ( - 3834E29E5BB587C4CAE2E98D9F90BC78 /* Support Files */, + 10629BE87FD5CCA896E2AAB9A95D829E /* Aliases.swift */, + 72E622667770751D5D5C5FB0DDE4EAFB /* Error.swift */, + D65D99D4E1298B008F80940EB8DDF000 /* LinkingObjects.swift */, + A7786D040AD92308EC06D61AE600F434 /* List.swift */, + 88BB70907AA7570E038C817E9F5A3C65 /* Migration.swift */, + FCC06B372D793CF5D666EDE5D8FBFA28 /* Object.swift */, + AC19AA0982C3D76458D9AD12D9394B5F /* ObjectiveCSupport.swift */, + 23C48EEA722717605211ADE41F199B42 /* ObjectiveCSupport+Sync.swift */, + 60901E859E25B865CE71347B69BDCD23 /* ObjectSchema.swift */, + 7124E09AC87BC2040B9F6603623CBB8E /* Optional.swift */, + 9A00135644707D77F62D86FEEA0B2FD3 /* Property.swift */, + 5F99E7A9F6EFD4D00C758C67B8B06886 /* Realm.swift */, + CA3A69553090B54A043BB24F56D02BB0 /* RealmCollection.swift */, + 5A5225832DB8FAD295998745FA0CE297 /* RealmConfiguration.swift */, + C1A9DBF61122E8279A5F2B90160AE777 /* Results.swift */, + 90CA305F1D9AA40BC0AB5D63513D17C1 /* Schema.swift */, + 039C42C008DBCE8DFEA8596C759D423D /* SortDescriptor.swift */, + 6D59F57C2DE709249994BDCD4D5C5DF2 /* SwiftVersion.swift */, + D86FACFD952988088662F846ACCC1668 /* Sync.swift */, + ECA678A24312DC36342DCF658EFBA3B8 /* ThreadSafeReference.swift */, + 31EF3647CF03CCF8A14508AAFEB28B57 /* Util.swift */, + 78206ED5315E88C0867E6A6E5BBBBF5B /* Support Files */, ); - path = SwiftLint; + path = RealmSwift; sourceTree = ""; }; - A2DDD9F3ABDE84E54119F2A916CC4F43 /* Pods-Rocket.ChatTests */ = { + C8EB6B80B48F15BCB1E18AC72DF966A1 /* RocketChatViewController */ = { isa = PBXGroup; children = ( - 8E3CA7FBFC0F7DBA3CD4ACD5847BE32D /* Pods-Rocket.ChatTests.modulemap */, - 51AD2563AD48B427809F99FB84AB3F2F /* Pods-Rocket.ChatTests-acknowledgements.markdown */, - 8A803F05382B8EE4AF900452013EA16D /* Pods-Rocket.ChatTests-acknowledgements.plist */, - A97A6A7888761B1D76B91170AF650444 /* Pods-Rocket.ChatTests-dummy.m */, - 36A14BEF1D8BE9DB00B78CFC12DD0A57 /* Pods-Rocket.ChatTests-frameworks.sh */, - 2F37CF1EF871BCCB7EC88AD14CBB333B /* Pods-Rocket.ChatTests-Info.plist */, - 6EE8E89316BBFCAF76B3B36353CD0103 /* Pods-Rocket.ChatTests-umbrella.h */, - 025C83735A93ED07147EDE3A24C00D0F /* Pods-Rocket.ChatTests.beta.xcconfig */, - 93B888C8657DA23C1C1B3F68594B4E21 /* Pods-Rocket.ChatTests.debug.xcconfig */, - F3676979D1F99F0914606E87754995F6 /* Pods-Rocket.ChatTests.release.xcconfig */, - 192AF64ECDE705D4124240D353FAE769 /* Pods-Rocket.ChatTests.test.xcconfig */, + 9C82500AB7C01492CAF4ED8E74FB710E /* Composer */, + E607335BC681ACD67DF4C19A104A89C8 /* Support Files */, + 586B922DDD88EB9F31A3B538097A5B9B /* ViewController */, ); - name = "Pods-Rocket.ChatTests"; - path = "Target Support Files/Pods-Rocket.ChatTests"; + path = RocketChatViewController; sourceTree = ""; }; - A727FFB91CE16E63CD3CFEBB054EA35F /* Support Files */ = { + CA8CE18C201D0B1F28F9A311B7F19D65 /* Support Files */ = { isa = PBXGroup; children = ( - AFD638193B9A813DE1CE641018D7896A /* MBProgressHUD.modulemap */, - 86938266EC29B43C2DF06591C98204CF /* MBProgressHUD.xcconfig */, - 9007201FAAB29A329608A7205E93E317 /* MBProgressHUD-dummy.m */, - 7FADE431871FC57D24E57F74C99FFA2F /* MBProgressHUD-Info.plist */, - 25183871FE979B151925BA759F0CB5C6 /* MBProgressHUD-prefix.pch */, - 4061DB9DCE5A003587A14EAF6065A17C /* MBProgressHUD-umbrella.h */, + 24EADC6E30E5C8B9E6AA121AFB762F42 /* Info.plist */, + 95D5362E11D7CC44A575B515C029C8BB /* MobilePlayer.modulemap */, + CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */, + 31599602E1CEEEE2CCFD5F9886B7CCB3 /* MobilePlayer-dummy.m */, + F67046E774FAC0AE18C6B1F2C7256D6F /* MobilePlayer-prefix.pch */, + 01DEB552863D030E9ACAA1C946CB0005 /* MobilePlayer-umbrella.h */, + 8548AE0B3848ECFFB88A9B54DD9C2985 /* ResourceBundle-MobilePlayer-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/MBProgressHUD"; + path = "../Target Support Files/MobilePlayer"; sourceTree = ""; }; - A785B7EFEBE46E6336646F0909E1FC67 /* Support Files */ = { + CAD34C11E6A17D384E3B231FBADD9FE3 /* Support Files */ = { isa = PBXGroup; children = ( - 0048E2AD18612D5E846CEC5DBC8C9970 /* FLEX.modulemap */, - 906A2E3A85529204C6DD8CD0880CD33E /* FLEX.xcconfig */, - 2EBFC12B7062AFE102BF1CAEA0956BD9 /* FLEX-dummy.m */, - 7C5AE199B06AC9C455C758CB5D83ECAC /* FLEX-Info.plist */, - B41C985CEEE62DB1ACB176852C0FC81F /* FLEX-prefix.pch */, - 299DFDC663FA36689493F509E295226E /* FLEX-umbrella.h */, + B8DCD230ECC47AD2CF67081F62CA094F /* GoogleDataTransportCCTSupport.modulemap */, + ABF15E713D08B0831547104F3E0F572E /* GoogleDataTransportCCTSupport.xcconfig */, + A6909B5ABDBC14A463A86E1D32618FA4 /* GoogleDataTransportCCTSupport-dummy.m */, + 72B9BCE02F0A919F86F86B3CD72D6DB5 /* GoogleDataTransportCCTSupport-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/FLEX"; + path = "../Target Support Files/GoogleDataTransportCCTSupport"; sourceTree = ""; }; - B0CC10C8F09559F9129149AA5C0154DC /* Firebase */ = { + CC0DF29C28311738FA6A1A514ABC333E /* SwiftLint */ = { isa = PBXGroup; children = ( - 691083FE30FD7A48AB9D2E390CB88124 /* CoreOnly */, - B4E5ED861585C5A038B47584E79B7633 /* Support Files */, ); - path = Firebase; + path = SwiftLint; + sourceTree = ""; + }; + CC242967D3141834D4D81C3EE9CC078B /* GoogleDataTransport */ = { + isa = PBXGroup; + children = ( + AA2909FD038E48F356B47E6C4ECBAF49 /* GDTCORAssert.h */, + D06A72649FF38F0389D480872526EB90 /* GDTCORAssert.m */, + 12CDE5A9A5E34A581D2CFA12A71C2352 /* GDTCORClock.h */, + AE9AEE62012CEA3D1A89247259F2BA99 /* GDTCORClock.m */, + 1A26B6C80709AA738F219539DF9A31DB /* GDTCORConsoleLogger.h */, + 0B6AC8702057407D72E69091AB3E7F73 /* GDTCORConsoleLogger.m */, + 59CC772EADF19BA70EDB311976B240BE /* GDTCORDataFuture.h */, + BA940B05D607C84026ECBE1387F2BCAA /* GDTCORDataFuture.m */, + BC9695EEE40A1905B7FB7C304E4F4BA0 /* GDTCOREvent.h */, + 04929AF0D716D838952919510A22983E /* GDTCOREvent.m */, + 3C1FF97B57784B42747BCF8F4F65B2A5 /* GDTCOREvent_Private.h */, + E1A71F1F0E727B5759DDD5FED669E0BF /* GDTCOREventDataObject.h */, + 300C61D10253661229D56E02DF2DDFD0 /* GDTCOREventTransformer.h */, + 53554BEFA2F03FEF8851800213876779 /* GDTCORLifecycle.h */, + 7F89B4417CE3620F4CEB93792972743F /* GDTCORLifecycle.m */, + B924134E2EE0686D9BF3382ED024F705 /* GDTCORPlatform.h */, + 5FE6AAE37D5DA3F65F7F6F0ED0B2BE38 /* GDTCORPlatform.m */, + C40705BD705C9F00097DA38D53CCE23E /* GDTCORPrioritizer.h */, + F46265E7848F9A7420D7E43B460E5AF9 /* GDTCORReachability.h */, + 08FAC703C156563CC9AC4E1A9ABAC34F /* GDTCORReachability.m */, + FB387186BC80786CE53CAF81EC045EA0 /* GDTCORReachability_Private.h */, + 54F84112C4D6578FEAE6A6177B43B9F8 /* GDTCORRegistrar.h */, + EA9026FD805FD86C1FFB9BE42CC3D8AA /* GDTCORRegistrar.m */, + 38D361488CDD877419903670BF4495AE /* GDTCORRegistrar_Private.h */, + D152FB3834EB0C1F7B5E1A05C3FBF8D6 /* GDTCORStorage.h */, + 64E9C7D6259F376224794B4AFA224069 /* GDTCORStorage.m */, + 76C89DD7EAA8F2EA32E98A634C211EC1 /* GDTCORStorage_Private.h */, + C2CBC08C2988D867387EE0038D1C5ADD /* GDTCORStoredEvent.h */, + 94FE63196A56CAC7EE9069B33D5571E2 /* GDTCORStoredEvent.m */, + 7BAF8708420C92D15160E38955AC0552 /* GDTCORTargets.h */, + 8A5D803D69DB158ECDD888F64C78C3CD /* GDTCORTransformer.h */, + F983606A3978CFFD6EF3B9EE64DBF020 /* GDTCORTransformer.m */, + 652953531342C5EF100D21F054BBC19A /* GDTCORTransformer_Private.h */, + AD7938E6E603E00319A0E828FA13D74C /* GDTCORTransport.h */, + 75C4A6A8DEBEA34D0D0C6E1069D4B27C /* GDTCORTransport.m */, + A364EE6DBDF8A99AACD1804B0C51A457 /* GDTCORTransport_Private.h */, + 39F26580F0345FE9910FF66433B44392 /* GDTCORUploadCoordinator.h */, + 5286961235DD80FE4A844AC1422D108A /* GDTCORUploadCoordinator.m */, + B4F205F6DA15BDAD128E454D41828F55 /* GDTCORUploader.h */, + DF41F9737472E39E74A2824BC7100F75 /* GDTCORUploadPackage.h */, + 501A8B83B08348171E851375825096F4 /* GDTCORUploadPackage.m */, + 5512301E4530FC1B7DB10725DCBE5BF3 /* GDTCORUploadPackage_Private.h */, + 79C24105DC6BF9265711D9E10B5E3BBD /* GoogleDataTransport.h */, + D21E2127B00DBB5C595121C3BF2E3BF8 /* Support Files */, + ); + path = GoogleDataTransport; sourceTree = ""; }; - B142BE0172416C9FEB6ADB25D01B5BD1 /* Frameworks */ = { + D21E2127B00DBB5C595121C3BF2E3BF8 /* Support Files */ = { isa = PBXGroup; children = ( - 7699D059E9712089FA073C7301218117 /* FIRAnalyticsConnector.framework */, - 75B6D9D892E2D9B6AF8C33F640E600C3 /* FirebaseAnalytics.framework */, - E33C8CFCE27A0CEE1768090569F5E0CE /* FirebaseCoreDiagnostics.framework */, + 411448D5363B66F79F3BFF1F76AB47A9 /* GoogleDataTransport.modulemap */, + B257AA674397EBBCDD5BB05C7DC23152 /* GoogleDataTransport.xcconfig */, + 3FACFC88B8F01CC3E1B13210D3A937C1 /* GoogleDataTransport-dummy.m */, + 9F608FCD47FC5F4F376C85947F6897F5 /* GoogleDataTransport-umbrella.h */, ); - name = Frameworks; + name = "Support Files"; + path = "../Target Support Files/GoogleDataTransport"; sourceTree = ""; }; - B30930AC48A1E6DE990806A0446F4563 /* Resources */ = { + D251F245418AD463FFC002818C47A12E /* Support Files */ = { isa = PBXGroup; children = ( - A6D5F5F705506738A442BBC4957B5C78 /* MLCloseButton.png */, - 81D15D0A68134923D32F017D39DCD45E /* MLCloseButton@2x.png */, - 46F2525C49AE88E935C131661CD144C0 /* MLCloseButton@3x.png */, - A516366709C5FBFDFFB4CF4E0603CBAD /* MLIncreaseVolume.png */, - FD5062F29C9E91C09758AE5CA17FB955 /* MLIncreaseVolume@2x.png */, - 551124F54C43C9771C249550FB1E5453 /* MLIncreaseVolume@3x.png */, - 49BCC056FB7BF3EA9FC4E0E4B4395E0B /* MLPauseButton.png */, - D12C82EBD7C08A6268E6338FDF6A9059 /* MLPauseButton@2x.png */, - 83CD1E3780A6CA89D611986B065F3863 /* MLPauseButton@3x.png */, - E5F633DEA551B8E964C5699C4FEA170D /* MLPlayButton.png */, - B331FCCD23D55EC94BBB3F4D639AD704 /* MLPlayButton@2x.png */, - C6516AC8C64BE4DAC4BC8F3C35B98755 /* MLPlayButton@3x.png */, - 227C67E48F0616FED2D4B7841BABD029 /* MLReduceVolume.png */, - 723C99F907CEF7DC80CB4420C98ED2E6 /* MLReduceVolume@2x.png */, - EFA8DF5E3270583AB6DAC0905A5B8CAB /* MLReduceVolume@3x.png */, - 0AFAFA01D2E57646F4112DFA12650E36 /* MLShareButton.png */, - F1E7F77D22CC61D5CB86EBC4C85E377E /* MLShareButton@2x.png */, - D0C94EB5F0B5BA118E9C92227C286477 /* MLShareButton@3x.png */, - A9E643C8FD24AA722EA3BBD7556AF31D /* MLVolumeButton.png */, - 4C5FFB80B58CA96F03700D3C34BCAEE0 /* MLVolumeButton@2x.png */, - 056B11BCCC190F1AC7F0565A24A7E673 /* MLVolumeButton@3x.png */, + DA85340FF86AC31DBCA0B0DF8BB4BAFE /* Info.plist */, + 8CF90CDFD7E7ADDCED449A110432FAD4 /* OAuthSwift.modulemap */, + 4ECF7BEBE953DFC761AC18F7D5BF15E9 /* OAuthSwift.xcconfig */, + FC4BF75B4B0CD8F31957ACAD41D62986 /* OAuthSwift-dummy.m */, + 8F7962B25D138580D910445045E19398 /* OAuthSwift-prefix.pch */, + B996D741A426112E42F9D3FC5243D71A /* OAuthSwift-umbrella.h */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/OAuthSwift"; sourceTree = ""; }; - B312A973292585F9573A90A44EB51CE0 /* OAuthSwift */ = { + D4FE2E48381B424045F352D8B125E1F2 /* decode */ = { isa = PBXGroup; children = ( - 459E2E860CA41D9D36DE6F8E7BD7D39B /* Collection+OAuthSwift.swift */, - 41048F51B42851042EDD6F37BF450288 /* Data+OAuthSwift.swift */, - DFF0482A0A936E414A1C081B1B7261C3 /* Dictionary+OAuthSwift.swift */, - E2C17357D7810B44C7A6B0098377F0D7 /* HMAC.swift */, - 42DBAE45C59137E3085C0C9A7F37AD46 /* Int+OAuthSwift.swift */, - EF4F35CF41297CDCB6C12EA242D87EFB /* NotificationCenter+OAuthSwift.swift */, - C08B19FF09433B06BFF088D559F6DED6 /* NSError+OAuthSwift.swift */, - 3CD33BD790F1A5A3BA51BE5B18C08DA8 /* OAuth1Swift.swift */, - 8E04AB34A2ED2722CB4ABBBBAFEB6BC2 /* OAuth2Swift.swift */, - 708DE808437E97D0B1FFE34CB5F4EBE5 /* OAuthSwift.swift */, - 732C8968B42D24B85F923AE6814EE563 /* OAuthSwiftClient.swift */, - D07605BDC898A283EEAC96300AB07D4E /* OAuthSwiftCredential.swift */, - 5CD5BEE0B7F0546C37906EE39EC2C5A7 /* OAuthSwiftError.swift */, - F8665E59D3E588CF8565169CF753F276 /* OAuthSwiftHTTPRequest.swift */, - 6E5F52A533BE0B053C8721359280606E /* OAuthSwiftMultipartData.swift */, - 92EEF2BCE4F1E39DF6D6C38FED6593DD /* OAuthSwiftResponse.swift */, - 21684532737A2E530BB95EA450A196CB /* OAuthSwiftURLHandlerType.swift */, - 1381103A73FD1C17BB992E7F86A13120 /* OAuthWebViewController.swift */, - 4006F0229617B8B3AA3BC8585294F07D /* Objc.swift */, - 2AFC00EAF2325960ED98559CE516BE31 /* SHA1.swift */, - A6DE520CFF5ADFE8750DC6435E2FD1A7 /* String+OAuthSwift.swift */, - FF45815F9976193FA67AEE42BD8DB884 /* UIApplication+OAuthSwift.swift */, - D220F1566C7C5287809686B752732CD0 /* URL+OAuthSwift.swift */, - E21468C093AED1C2F83AE34C04A643CB /* Utils.swift */, - 134566D3C3DC8A4C4E26CD05F5B380F4 /* Support Files */, ); - path = OAuthSwift; + name = decode; sourceTree = ""; }; - B35C667BFA6915069D0F7FD93B5E1FF2 /* RCMarkdownParser */ = { + D712F0D93B76ECF161842FF0B883098B /* AppDelegateSwizzler */ = { isa = PBXGroup; children = ( - 542348CB51352E230F3EA64F8EA04A95 /* NSAttributedString+Markdown.swift */, - B755BDB9283DE6874D3905351DEAC69A /* RCBaseParser.swift */, - 8612B52C91C4C62F080309BD60A1C325 /* RCMarkdownParser.swift */, - 44C2DE8A54EC8F8685552FDBE854F062 /* Support Files */, + D4CC13706B74FA635DC0D8150728E4BD /* GULAppDelegateSwizzler.h */, + DFFDF6254D503C4BB25D42EF2120831C /* GULAppDelegateSwizzler.m */, + AFDA81B041B4E20BFFE22907E4C382FA /* GULAppDelegateSwizzler_Private.h */, + BD6DF7B090FD92E62BB80DBC4D5144C9 /* GULApplication.h */, + 779B16D74E07121482571AF4AE146287 /* GULLoggerCodes.h */, ); - path = RCMarkdownParser; + name = AppDelegateSwizzler; sourceTree = ""; }; - B3C3E0FF6F9A5E58D29988CF7C88FD8D /* FLAnimatedImage */ = { + D83A38BEBF8F660B89F2982A3B1B6E06 /* FirebaseInstanceID */ = { isa = PBXGroup; children = ( - 114133F8DCA61E6FA69D01C05262D460 /* FLAnimatedImage.h */, - 341F1F0A76355127E9976547D36D5680 /* FLAnimatedImage.m */, - 1E89A4F6B522D0B5FBC1E6ECE8ED47FC /* FLAnimatedImageView.h */, - 706C17ED09DBDF2A7ABD08B5BA6BDC91 /* FLAnimatedImageView.m */, - 18110FA56CEB24150F3015C47AA9899F /* Support Files */, + D7E5F6917838B2700657ABB7635429F6 /* FirebaseInstanceID.h */, + 5796BCEB36FB1F2371522F782AC2E75E /* FIRIMessageCode.h */, + 8FB2BF04CABD7B3DF7F571A156EACBE3 /* FIRInstanceID.h */, + 8E7A629FD8D53021106BE5F53AB7A663 /* FIRInstanceID.m */, + 4FCD527797D3E7DE41E05D03B7AF17C9 /* FIRInstanceID+Private.h */, + C29F30F7E4021F09C942990F3C0D93D8 /* FIRInstanceID+Private.m */, + 60F419714174CBB8CB4FB48616B4B709 /* FIRInstanceID_Private.h */, + B2908C8C31A3E43DFEC35D8DA5FF1D0C /* FIRInstanceIDAPNSInfo.h */, + 813A07E53D0F9E74B18E65E3A6B35D11 /* FIRInstanceIDAPNSInfo.m */, + 517BA0AEE611A3EDA4D037DC50445C31 /* FIRInstanceIDAuthKeyChain.h */, + 673BF96AF5A8014F8BAB0D97975C7E9D /* FIRInstanceIDAuthKeyChain.m */, + 3F42539788B0E96F735364910DD90E26 /* FIRInstanceIDAuthService.h */, + 006877289E6A25C760A3359FED3EE41B /* FIRInstanceIDAuthService.m */, + 5D1C1596071C2BFDB85EB7649FC7AA78 /* FIRInstanceIDBackupExcludedPlist.h */, + 98424B33F8B2DA923D34411D0195BBD7 /* FIRInstanceIDBackupExcludedPlist.m */, + 0831B9643A69B9855B8021695225613C /* FIRInstanceIDCheckinPreferences.h */, + 92F22832B1F1A1E44409D465B2F87E08 /* FIRInstanceIDCheckinPreferences.m */, + B7A2D092F2A6A34D251032118D2ECB09 /* FIRInstanceIDCheckinPreferences+Internal.h */, + A0793D075EAC0D626BA709D6DD82962D /* FIRInstanceIDCheckinPreferences+Internal.m */, + E4657200448F8A9027FD570CB1CC6474 /* FIRInstanceIDCheckinPreferences_Private.h */, + 4F09DA059DFA6A3C414F0919AB4DD23B /* FIRInstanceIDCheckinService.h */, + 1FD21AEE2F11DF41992C63D225B341D3 /* FIRInstanceIDCheckinService.m */, + 3F5555115B038A8C6C0FA3C40127ED95 /* FIRInstanceIDCheckinStore.h */, + 9746779AD95A0598C6C174A5CC68FAB4 /* FIRInstanceIDCheckinStore.m */, + A32021452F1053800E72076E2C0213DF /* FIRInstanceIDCombinedHandler.h */, + A8245D3D31A18BD34C67671C7BBE079D /* FIRInstanceIDCombinedHandler.m */, + D69CD7CE2E44C61F376993D6D79070A8 /* FIRInstanceIDConstants.h */, + 3C9D2F89B1ADAFA5FE5136B2E3E2B427 /* FIRInstanceIDConstants.m */, + 00EAAB9A08035990EA5E6E26B7E3D8AB /* FIRInstanceIDDefines.h */, + A8D928F4789892EAC4DF7A12848DD9D0 /* FIRInstanceIDKeychain.h */, + BC63D90F0FC2E280E9337A225B5FE8F6 /* FIRInstanceIDKeychain.m */, + 521B1F8C5A8456AB129BA3C943C8201A /* FIRInstanceIDKeyPair.h */, + B65A19FDD0A9643AB3D444269214D267 /* FIRInstanceIDKeyPair.m */, + 938BFA334497C2B1BBF0EAB07FB803DE /* FIRInstanceIDKeyPairStore.h */, + 044A03B44183A1B253B72B4576465012 /* FIRInstanceIDKeyPairStore.m */, + 769CF561DAD104A360791ABF7C4EC40B /* FIRInstanceIDKeyPairUtilities.h */, + A181D4A3D5D88D0C0305A6EA33BBCB9D /* FIRInstanceIDKeyPairUtilities.m */, + 1F78F5A14BDAD7ECCE76B0FED042E377 /* FIRInstanceIDLogger.h */, + D27E1F8929A875B724135E71FC07FB39 /* FIRInstanceIDLogger.m */, + B8043CF1F89E34FB8C50BCDE1FA42249 /* FIRInstanceIDStore.h */, + 67DB6A3044EC3098EA6BF3F48E02C8C7 /* FIRInstanceIDStore.m */, + 79FDE27E98FBCEEBB66CBA3C85035AA5 /* FIRInstanceIDStringEncoding.h */, + 3C81FE76880DF48AF660CE84A5971B7C /* FIRInstanceIDStringEncoding.m */, + 766984AFDC283FA8A32FFFC452888DBB /* FIRInstanceIDTokenDeleteOperation.h */, + 92509B239202C3742762E47337188E5D /* FIRInstanceIDTokenDeleteOperation.m */, + 1D34465C3B8C542E47E303507CE6A879 /* FIRInstanceIDTokenFetchOperation.h */, + 67C69364D596975B084DEC6EF4622273 /* FIRInstanceIDTokenFetchOperation.m */, + 972E480399377F1287E0EF70818C33C4 /* FIRInstanceIDTokenInfo.h */, + 205ACD94C7D17A04A838312ABB0E7653 /* FIRInstanceIDTokenInfo.m */, + DD705DB493406CFE9756E24B0B402D0E /* FIRInstanceIDTokenManager.h */, + B6374097FB5994A3953D8E0DCE5369AC /* FIRInstanceIDTokenManager.m */, + F1583B44F5D85B26BB25B3EF596B376D /* FIRInstanceIDTokenOperation.h */, + 240885571D6A1FC5C67CA517180A7A36 /* FIRInstanceIDTokenOperation.m */, + 62E91B314B649BED5910E91372D61583 /* FIRInstanceIDTokenOperation+Private.h */, + AE32BB52F2B8E38256E480E32A03C07C /* FIRInstanceIDTokenStore.h */, + 9FD4793F9E68A8FA338FD255147A30DF /* FIRInstanceIDTokenStore.m */, + DF1227849A2767C32E7EB2C900BEBBB2 /* FIRInstanceIDURLQueryItem.h */, + 2EB06A0F29E5AB0B5FAC6C737036FC66 /* FIRInstanceIDURLQueryItem.m */, + 37E91631F6930CF206DF8EA2D69A5620 /* FIRInstanceIDUtilities.h */, + E08F7EA98940945E9ECB6C7DD06FC752 /* FIRInstanceIDUtilities.m */, + A81FAD3EBA8356536D137996CDE7D3DB /* FIRInstanceIDVersionUtilities.h */, + 472642F0567D7D7BFDD2A3974FE65278 /* FIRInstanceIDVersionUtilities.m */, + 8815D8023D368F55C005F3CB40D3707E /* NSError+FIRInstanceID.h */, + 85A87199244DDF3569B8B05702F69801 /* NSError+FIRInstanceID.m */, + 1FE77FE048A1AD7D6C358E5B211881A1 /* Support Files */, ); - path = FLAnimatedImage; + path = FirebaseInstanceID; sourceTree = ""; }; - B4E5ED861585C5A038B47584E79B7633 /* Support Files */ = { + D8731045600832C8364AD939B65B8A2D /* Support Files */ = { isa = PBXGroup; children = ( - 9AC71010277BB1E505EB29DBB340CB83 /* Firebase.xcconfig */, + AF1263DDA285E94A71E9DDB7F271668E /* Info.plist */, + AC7817EEE0EA024DABA212EEDC81CB5F /* SwiftyJSON.modulemap */, + 1C5951331CE0F79ABC4BE35C8BDFAB3A /* SwiftyJSON.xcconfig */, + 9FBB077249BA8F834579B9E4793DC9C2 /* SwiftyJSON-dummy.m */, + 604EAB6CB49583063DB671550CC58F54 /* SwiftyJSON-prefix.pch */, + 301D151A6354125FFB06DA8AD55679E3 /* SwiftyJSON-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Firebase"; + path = "../Target Support Files/SwiftyJSON"; sourceTree = ""; }; - B6048DEE9653C2D6A1B4292F0CC8F009 /* Nuke-FLAnimatedImage-Plugin */ = { + D908A74C5660AB5864884F58C7E842B3 /* Pods */ = { isa = PBXGroup; children = ( - E2CBEAF8B7CC922BBB62D3998F5BF8E2 /* AnimatedImage.swift */, - FBDB0428F4F3C19974A71D2E86F45E9A /* Support Files */, + 606F48A7D9A39AFF9FA8C217AE8AFDD8 /* 1PasswordExtension */, + 84D012520B6EEA24927D37FABAD93C1A /* Crashlytics */, + 514BC3C0B3F786BDCE40442BAECCB3EF /* DifferenceKit */, + 717368C2F57303FE2847FF288638F6DE /* Fabric */, + 570C0AB65FA8B4F1D9F34BCA9D016180 /* Firebase */, + 90165FA09952FEA9E9DE503C56CDA3D2 /* FirebaseAnalytics */, + 6BC576FCD40BE752AB4F841963BF20C1 /* FirebaseCore */, + FD147622E946B5B50544DA48BC307D7F /* FirebaseCoreDiagnostics */, + 6FB5564B4F66D839F26410C1375220A2 /* FirebaseCoreDiagnosticsInterop */, + D83A38BEBF8F660B89F2982A3B1B6E06 /* FirebaseInstanceID */, + F7924F48C9EEAC042E8CADAB1A3A4905 /* FLAnimatedImage */, + 40C2DF71CB390463D005B485B987C443 /* FLEX */, + 9C83B72998968409B92866AB409A994D /* GoogleAppMeasurement */, + CC242967D3141834D4D81C3EE9CC078B /* GoogleDataTransport */, + 9F6E810F27C41D9373396E444C184E01 /* GoogleDataTransportCCTSupport */, + EB8F4BB0FF3D90CE269067E6CDC0AC51 /* GoogleUtilities */, + D9A4E977496E4026FDE6A9D1326562FB /* MBProgressHUD */, + 34F63CD2B8E276FCDE718B71243FFBB6 /* MobilePlayer */, + 45554F74B5F85F3BB07DF75C650323F0 /* nanopb */, + 997E3CE7288C4D4E1583DCE069CB1478 /* Nuke */, + 13B099D4F15643F75BE4590AFDD90616 /* Nuke-FLAnimatedImage-Plugin */, + 444482DB8501FBD9A25D907A2C9B5AB6 /* OAuthSwift */, + E1BA2792AF54EA0A0DD4E69944B013EF /* RCMarkdownParser */, + 23BC4D9B128237F459F3D9F045E7386B /* ReachabilitySwift */, + F3E092B4C096B737D24A87131E3747EF /* Realm */, + BCF8333DB101F0DBCB36A5F93976EBA7 /* RealmSwift */, + C8EB6B80B48F15BCB1E18AC72DF966A1 /* RocketChatViewController */, + FA0D700D27929423A063A9208FF89A3A /* semver */, + 9E5BB20ECE66FC0AF7BB170EC1685418 /* SimpleImageViewer */, + 1AF9DBABB6A202EFD588950EA33FCC72 /* Starscream */, + CC0DF29C28311738FA6A1A514ABC333E /* SwiftLint */, + 5AE526159F7067E47AA08D593B95DA56 /* SwiftyJSON */, + 6DC0BCB872BB3A61F479B7FA73817B70 /* SwipeCellKit */, ); - path = "Nuke-FLAnimatedImage-Plugin"; + name = Pods; sourceTree = ""; }; - B932E0D42CEDC55C3FE6EC2263D26A3C /* UserDefaults */ = { + D9A4E977496E4026FDE6A9D1326562FB /* MBProgressHUD */ = { isa = PBXGroup; children = ( - FE1FFCB9922777A67C459476B6C3D218 /* GULUserDefaults.h */, - 77047FBA7D0754149FB7AA6B7E5B8193 /* GULUserDefaults.m */, + C6E77820E3E0B6CCAC63F65698B00DDD /* MBProgressHUD.h */, + F3476B7035F44968C312ED6B39D03A92 /* MBProgressHUD.m */, + 286F25EF012081B058CE4E4C7DB3CE49 /* Support Files */, ); - name = UserDefaults; + path = MBProgressHUD; sourceTree = ""; }; - BBD62FCFFB8808A325200C178B00C6C6 /* Support Files */ = { + DB0A554A3D2CEE112033DDF60C9EF5E3 /* CoreOnly */ = { isa = PBXGroup; children = ( - B845D4D251CCDDF953CA7EFB274FA084 /* Fabric.xcconfig */, + C1B990AA8ADE0CD420C24170391544F2 /* Firebase.h */, ); - name = "Support Files"; - path = "../Target Support Files/Fabric"; + name = CoreOnly; sourceTree = ""; }; - BC486A89E599A6AE8A6EE291EFEB58EA /* Targets Support Files */ = { + DD663442EE686E058C76909B7F0E5A99 /* Support Files */ = { isa = PBXGroup; children = ( - E70220913ACAD1EE677926EF88A2AEA0 /* Pods-Rocket.Chat */, - A2DDD9F3ABDE84E54119F2A916CC4F43 /* Pods-Rocket.ChatTests */, - E9DC5C5E4045155212222882B67D0948 /* Pods-Rocket.Chat.ShareExtension */, + B1B52695B835B434FFDAED794308DEEE /* Info.plist */, + 389593A453F30DF710DBCE788A2078BB /* Nuke-FLAnimatedImage-Plugin.modulemap */, + 98E2E9CE6A337D455D776E07205C8C02 /* Nuke-FLAnimatedImage-Plugin.xcconfig */, + 4CB8340448DD320361607933E400EC63 /* Nuke-FLAnimatedImage-Plugin-dummy.m */, + 186211F8B3F99614A673BE02FE6B4703 /* Nuke-FLAnimatedImage-Plugin-prefix.pch */, + FB72A80D294A32241F28BF509A85CDD9 /* Nuke-FLAnimatedImage-Plugin-umbrella.h */, ); - name = "Targets Support Files"; + name = "Support Files"; + path = "../Target Support Files/Nuke-FLAnimatedImage-Plugin"; sourceTree = ""; }; - C0D64F56C6AFFD576E815C76831603B2 /* FirebaseAnalytics */ = { + DE93E0FB139AD0CECCA8E312AA0AF9A5 /* Headers */ = { isa = PBXGroup; children = ( - B142BE0172416C9FEB6ADB25D01B5BD1 /* Frameworks */, - 965340FA79185D2C62AEB917FCCAAC7F /* Support Files */, + 5FE01589EB30D05B93F78B1C1163A174 /* NSError+RLMSync.h */, + C124D7F4E2655DBF4DC5FBADBF12EC90 /* Realm.h */, + 29C2014BAA6D242C5C0796A40D375AFA /* RLMArray.h */, + 58AD769B3AA05A5384CB65124EBB7847 /* RLMCollection.h */, + 7D214BAA46366DEA7A9A5ECEC0966591 /* RLMConstants.h */, + E7EAE735D8A86D0B320B44F198F5D756 /* RLMMigration.h */, + D9A75558B531AC6FCA4A122225C91BC6 /* RLMObject.h */, + 596C24ECB2DA6F52B91F85F5E18D737A /* RLMObjectBase.h */, + 4C267BF9A9956F537090DB8142D82BBC /* RLMObjectBase_Dynamic.h */, + BFDB547751B83CB0B76267052059FD56 /* RLMObjectSchema.h */, + C703252722B5BD059B3006490EF905B1 /* RLMPlatform.h */, + 3F29729926FB89531EEF1FA5B914C724 /* RLMProperty.h */, + 939693AB59EC78EDA0891E4FB8801D9C /* RLMRealm.h */, + 508B3CF8D1BA1076534B46B2A7A843A0 /* RLMRealm+Sync.h */, + 06593A948E006D059354C07B79D8536F /* RLMRealm_Dynamic.h */, + 543BA0788A83512AEA324A36B13F3151 /* RLMRealmConfiguration.h */, + 645966923591E09FA495B0F104809C51 /* RLMRealmConfiguration+Sync.h */, + 8A6EF5CC39175C5193A35A4F1521BDB7 /* RLMResults.h */, + D013DD9788B654DE042713BD871EEC38 /* RLMSchema.h */, + B3C9A1960DC9DA166F5EC3D500B17BE6 /* RLMSyncConfiguration.h */, + 09ADC45A6E0FE6AEDA105BEC2876C840 /* RLMSyncCredentials.h */, + A8B053D58036089B7169E5286975AC84 /* RLMSyncManager.h */, + 37142B20FC9EA8E59811F270D7C81D62 /* RLMSyncPermission.h */, + C0421F6FD49CC2E5D328FD3497F55E54 /* RLMSyncSession.h */, + AD0A13B831BFB0C0060557212BFA8E4A /* RLMSyncSubscription.h */, + E9FFA2669005FCF8BED83CB72841D6A2 /* RLMSyncUser.h */, + 70AE76095E62308A5E153F59913A4E41 /* RLMSyncUtil.h */, + D0F3CA793BF667EBFC2202FB92E40B23 /* RLMThreadSafeReference.h */, ); - path = FirebaseAnalytics; + name = Headers; sourceTree = ""; }; - C67E533848A534D5E74AEEDC4668D2A5 /* Support Files */ = { + E1BA2792AF54EA0A0DD4E69944B013EF /* RCMarkdownParser */ = { isa = PBXGroup; children = ( - E5D9EE3A5B918EF1E59437A9D810190C /* SwipeCellKit.modulemap */, - 8C4900C3016A636B06E492E3DB3951B4 /* SwipeCellKit.xcconfig */, - 2E9AC103FFE12A12FCC27FF801EC3E73 /* SwipeCellKit-dummy.m */, - AE56B243F7D71695C1B497CD058778EF /* SwipeCellKit-Info.plist */, - A081DC0431FC5C674DBF72BCB53BE020 /* SwipeCellKit-prefix.pch */, - 53FD17FE3AB2744C9F4DC32EA60D2F99 /* SwipeCellKit-umbrella.h */, + 1E79E1D53048467E62C01EC55811842B /* NSAttributedString+Markdown.swift */, + 1F7745CA6D616774AB456420114BF1DE /* RCBaseParser.swift */, + 438750D3C9EC7443CE4A50AC6FBB7F57 /* RCMarkdownParser.swift */, + EC4F11DC304CBC12D406B9D3A7BA25C9 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SwipeCellKit"; + path = RCMarkdownParser; sourceTree = ""; }; - CF1408CF629C7361332E53B88F7BD30C = { + E3E451E798B1D5330D50F61840F39CB1 /* UserDefaults */ = { isa = PBXGroup; children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 39D4C4DA55B4F5B461668CCE7C4455A3 /* Frameworks */, - 3C61A87D5D482331E922D256B8F237C1 /* Pods */, - 90A61B6E664A1390CEAEC52C0179ABFB /* Products */, - BC486A89E599A6AE8A6EE291EFEB58EA /* Targets Support Files */, + 706E9B1184AE5DBA8F0FA83DC07F030F /* GULUserDefaults.h */, + D2FAB6A4F75DAF6C0CE8583EE6C5D532 /* GULUserDefaults.m */, ); + name = UserDefaults; sourceTree = ""; }; - CFD7114C192401A130077DA8980541FF /* Resources */ = { + E607335BC681ACD67DF4C19A104A89C8 /* Support Files */ = { isa = PBXGroup; children = ( - 1D0A8BDF8DF67F23E5050A0BE3A1242D /* Assets.xcassets */, - 9F7B9EDF0A2A78703CBFE722D1C53E88 /* cancel_audio_record.m4a */, - 37E8AB729A0AF60E2C057ED9B6DA8B5F /* cs.lproj */, - 8DE6134FC27F10590D74AA438A447904 /* de.lproj */, - D1E738887A33182BC884F513BF42B52C /* el.lproj */, - 76C69077C602931C4377E097368F2E89 /* en.lproj */, - D0490E939A523972B86AB852ADCED49A /* es.lproj */, - A6AE2E6CC152954E232ADCF3DE699F68 /* fr.lproj */, - CBC26272DCD409CC0C76EBDCAA87D89F /* ja.lproj */, - 6FED1339CE7DF6B0E95B01A18F890C8B /* pl.lproj */, - BA4D9BE43C93682F960C151DCC94978B /* pt-BR.lproj */, - 539710E03DA4ADD1D5A451EA0330A639 /* pt-PT.lproj */, - E4D7C32250CA05AF68ABA66BE197CE8A /* ru.lproj */, - 392137F509703B56F173F888580A1DB5 /* start_audio_record.m4a */, + E3D18D10C1865C61DF3EF8B81011228F /* Info.plist */, + FDFF8A0E813FB0D0A5325F72A72530A3 /* RocketChatViewController.modulemap */, + E1C04B3058760D3353DA3FD558382BDF /* RocketChatViewController.xcconfig */, + 4A98112E41390D5B7E8C4327409AA329 /* RocketChatViewController-dummy.m */, + 435280CF24B54074396E1B32A6843D4B /* RocketChatViewController-prefix.pch */, + B62BF6184B7E89A6826B02050CEA82A3 /* RocketChatViewController-umbrella.h */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/RocketChatViewController"; sourceTree = ""; }; - D178B7DBE1D53A58CEC87D25B6EBBEC0 /* Frameworks */ = { + E627E5C9B83C1C5D5EB3D90A88A62140 /* iOS */ = { isa = PBXGroup; children = ( - 75794BB8FB84267973ADBDE638B9D2BC /* Crashlytics.framework */, + 38444A1911A5EA9E26A660A8855FF528 /* CoreGraphics.framework */, + 7A794DEA627D9D8B55FBDBFBC89A4545 /* CoreTelephony.framework */, + EC42673F1A82C4D6C6B88AF466BC11F3 /* Foundation.framework */, + 974E74D61116A652062F8D69F7CFDBEB /* ImageIO.framework */, + 4CE1111761DF2BF927371E792131365A /* MediaPlayer.framework */, + 014B6A9EE013D5281C412B5740704A64 /* MobileCoreServices.framework */, + AAB9ED20363E8E4AB931FC4FB130D3BD /* QuartzCore.framework */, + BCF87FEC35F61FED31B31740E9B2AB83 /* Security.framework */, + AAD1F8EA0C29D5616747695982189D52 /* SystemConfiguration.framework */, + 9A9D3AE6168F11FFB7541CFB619DFBC9 /* UIKit.framework */, ); - name = Frameworks; + name = iOS; sourceTree = ""; }; - D8791589DBA03A12C5F6CAC7F5D5CDA9 /* Reachability */ = { + EB8F4BB0FF3D90CE269067E6CDC0AC51 /* GoogleUtilities */ = { isa = PBXGroup; children = ( - 490BAFBA48AE2FAA2163D53E7820C4DD /* GULReachabilityChecker.h */, - 29B7A9BE309AEDD9746C8067D8773BF3 /* GULReachabilityChecker.m */, - 1506768766CE4E4B8B02BD35C5CE5A43 /* GULReachabilityChecker+Internal.h */, - 9F40DFBE767AA8B8E80170E89B264D5F /* GULReachabilityMessageCode.h */, + D712F0D93B76ECF161842FF0B883098B /* AppDelegateSwizzler */, + 2CB95EBB288B044747A314336FEFD7A7 /* Environment */, + 3C0668636691C9206B49736A2F8A2DF9 /* Logger */, + 78F7069F73148D0F33188E8BCA6EAE69 /* MethodSwizzler */, + 58325AC1776601A999FFA54FE5F73E5A /* Network */, + 980BD6209E9A56F5300B9868F791089E /* NSData+zlib */, + BA6885036F6B45329434D4E9EBDF9054 /* Reachability */, + 613A35EE52F2C7A387B7CF9B93DC4425 /* Support Files */, + E3E451E798B1D5330D50F61840F39CB1 /* UserDefaults */, ); - name = Reachability; + path = GoogleUtilities; sourceTree = ""; }; - D974DBE6B03F3BCD6BAC8B7C4CF935EC /* Support Files */ = { + EC46CB2D80F3A50BFC1E041CA7BFC639 /* Frameworks */ = { isa = PBXGroup; children = ( - 063D08043465A2809B92C6E7BE7B5CCC /* 1PasswordExtension.modulemap */, - 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */, - 1DFFAD5E224631DEE82999589BE602CC /* 1PasswordExtension-dummy.m */, - CB82B66C6129554C4773028C16C1CC2E /* 1PasswordExtension-Info.plist */, - 2414E9C33515E63CC18B34C77036A3E0 /* 1PasswordExtension-prefix.pch */, - 8D11F5BBB6791B4CABE9659A01148E99 /* 1PasswordExtension-umbrella.h */, - 9067A29740884A4F372A2C82437AAE50 /* ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist */, + D8B70B25EFAFDE32CBA81134AF7908A2 /* Crashlytics.framework */, ); - name = "Support Files"; - path = "../Target Support Files/1PasswordExtension"; + name = Frameworks; sourceTree = ""; }; - DEC2C128963B26DF8E612EC9D2930321 /* Support Files */ = { + EC4F11DC304CBC12D406B9D3A7BA25C9 /* Support Files */ = { isa = PBXGroup; children = ( - E3F9A059FEEA91EBCC0B8BF34003BF7E /* ReachabilitySwift.modulemap */, - 1D13B187AEAFC73D6F41875CCD92B2CB /* ReachabilitySwift.xcconfig */, - 9635A914BA16BE425CF7A9FE90C4A08F /* ReachabilitySwift-dummy.m */, - A49BD0D1A80430606A9CDF4945B97E80 /* ReachabilitySwift-Info.plist */, - 7F6CC8E74831CF84264BC0445BFD1C2D /* ReachabilitySwift-prefix.pch */, - 4ECE22068196E6792E4C610118958420 /* ReachabilitySwift-umbrella.h */, + 4CC21EB4B250036E93185A7AF95DF75F /* Info.plist */, + 8E52165A1AEC56E61127267FBF1F8C2B /* RCMarkdownParser.modulemap */, + EA52325FA497EEE07D1703278CC007AE /* RCMarkdownParser.xcconfig */, + F35300C792CE2C1912BA4A2191072907 /* RCMarkdownParser-dummy.m */, + 2FAD15C85DD391961BA10B3EB7EC0CAD /* RCMarkdownParser-prefix.pch */, + 45B5EFAFC947FC41B00B304E812BD4BA /* RCMarkdownParser-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/ReachabilitySwift"; + path = "../Target Support Files/RCMarkdownParser"; sourceTree = ""; }; - DF73711B174CFD8FFA0155AB98998C4B /* Frameworks */ = { + EF1D61E80A9611C0EFFAA827F66C1426 /* Frameworks */ = { isa = PBXGroup; children = ( - 307184C1A9E078A93C6E60BEF3B2BEC8 /* FirebaseInstanceID.framework */, + 4D7363F0565A325DDDD52B0C7A5EA323 /* librealmcore-ios.a */, ); name = Frameworks; sourceTree = ""; }; - E70220913ACAD1EE677926EF88A2AEA0 /* Pods-Rocket.Chat */ = { + F3E092B4C096B737D24A87131E3747EF /* Realm */ = { isa = PBXGroup; children = ( - 464069EE53F315F02882BA66DDE649C1 /* Pods-Rocket.Chat.modulemap */, - 081EB2E6AE215189C5454782073C8CC7 /* Pods-Rocket.Chat-acknowledgements.markdown */, - 24988D9DDF0738249D9C5CF716899A97 /* Pods-Rocket.Chat-acknowledgements.plist */, - 380C67C09E012750FC968748008038D7 /* Pods-Rocket.Chat-dummy.m */, - 6A0E06AA041106F2FF1D6AB4081106D2 /* Pods-Rocket.Chat-frameworks.sh */, - 3889D68898B5D508669E3C7802DDC8E7 /* Pods-Rocket.Chat-Info.plist */, - 418A3C16F97F460EE04C82B1B36621A7 /* Pods-Rocket.Chat-umbrella.h */, - 5B07902F6F56A5A082518305833E2EEE /* Pods-Rocket.Chat.beta.xcconfig */, - 2FAA94EE72422044E580BBF94D22525F /* Pods-Rocket.Chat.debug.xcconfig */, - 3F875C825AC6483AE79ABE33B7F4FAA5 /* Pods-Rocket.Chat.release.xcconfig */, - D0E4AD423C2152EC1663E2DE0773B3C8 /* Pods-Rocket.Chat.test.xcconfig */, + 53F5526FBBF15637B271AE7F3ED23713 /* async_open_task.cpp */, + FAAC216ED83F1A6A58A8FB338BDA4062 /* binding_callback_thread_observer.cpp */, + F18AFBFAE1DA7D32EF978687514FE9FE /* collection_change_builder.cpp */, + 25271A64B9812F6A1FD9BC50BE3E7CA3 /* collection_notifications.cpp */, + 9630D8A234FBA86BE181C2C9B9E7193D /* collection_notifier.cpp */, + E223545FA3205F45223B32AA11AEE442 /* external_commit_helper.cpp */, + 981A674B9313798B80322CD47CD7DF58 /* index_set.cpp */, + 5F807B8A7070CC2322765778DB6CCB1E /* keychain_helper.cpp */, + 81F7DE71E9148B7DADB726764B12A930 /* list.cpp */, + D18BF80B296E1C1DBBA07B174AC6E3A5 /* list_notifier.cpp */, + C01701E2AD86581CD2DCBF8E14C245FE /* network_reachability_observer.cpp */, + 2D1A1B54C105F47C929BABDE66DDE2A7 /* NSError+RLMSync.m */, + DF181E8B0D573A17A6DC64615C2DC294 /* object.cpp */, + 4ABDF6D0ED6DD38143206CAB1ADCD36A /* object_notifier.cpp */, + D83A3EE42DA8C2F0E4659BBF8D28B3B1 /* object_schema.cpp */, + 0031A8FB4EDB8DC254B6C535556B3879 /* object_store.cpp */, + 5483C97D916FE2B80E363A633FD362C1 /* partial_sync.cpp */, + 61C5A3E797137A91F5B65F68A0F4C64E /* placeholder.cpp */, + E9D57DB227BB502AC366CDDB9DC9345F /* primitive_list_notifier.cpp */, + BC9029ED92348504D1E864BB9A8A05CE /* realm_coordinator.cpp */, + 377245FFE5CFBA06681AF1C212999DF5 /* results.cpp */, + 748C8BEBB0983FE14C304460F2F525F9 /* results_notifier.cpp */, + 13342D01F98A96B0D54B5C1A0D9BB139 /* RLMAccessor.h */, + DADFE02C70266E260BB488332DD1A5C3 /* RLMAccessor.mm */, + CEEFD90266F9B42F9D92E366E80B67F3 /* RLMAnalytics.mm */, + D9CB5D34054221D49988F30DC471A47C /* RLMArray.mm */, + C42192C833E6377A5C2AEA5586902AF4 /* RLMArray_Private.h */, + DC1D208DB6277F86F6B3802EB4944538 /* RLMClassInfo.mm */, + 483EAAC04E8C54BD941813722288948E /* RLMCollection.mm */, + 6981CC7C504B40E86D2EC43A7EB18683 /* RLMCollection_Private.h */, + 05FC5ED8298D8FC80A16CAB58376DFC8 /* RLMConstants.m */, + BBC219BB1D65D77A320574CBA5320F33 /* RLMJSONModels.m */, + 736C373A6A91E4A983270AECDED523A0 /* RLMListBase.h */, + 5F0E935100663F397DC59571E01310FD /* RLMListBase.mm */, + DED8A12535136B9EC308B988C1FBB062 /* RLMManagedArray.mm */, + 4531BF3796D5F2082CF112E41E5BCE0E /* RLMMigration.mm */, + E42DB03F12B1BF034CB5026021A4FF5D /* RLMNetworkClient.mm */, + DF4212B8544357D58C13D8289B814917 /* RLMObject.mm */, + C5DCC459D967C96D6EBF151261B77521 /* RLMObject_Private.h */, + 99CC6145068429E1C620B265CC545591 /* RLMObjectBase.mm */, + 7CEE5C71735650B508E41F081602255C /* RLMObjectBase_Private.h */, + 5FD9F74534C91B7E1D2BBFAE7EE371F3 /* RLMObjectSchema.mm */, + C29CE9D8430261AB6FE5D667F02717A1 /* RLMObjectSchema_Private.h */, + C1BDA29585B7602FAA49AA1D7CF3943E /* RLMObjectStore.h */, + 64912F855ADE901A8E260E80CA9AB943 /* RLMObjectStore.mm */, + 55B0D0ED129D0BAA2EC3D148D811690C /* RLMObservation.mm */, + C1FD15BEB588659CE9D06FB3EBD10C71 /* RLMOptionalBase.h */, + D16A1283BFCF487D488148D9EEE0C268 /* RLMOptionalBase.mm */, + 3D26993A2527D89967D63F6B77AFFC0C /* RLMPredicateUtil.mm */, + 549D0CF989CC962B006E308E311B147E /* RLMProperty.mm */, + 5C754595AEFD579EDC883D63AD2A265D /* RLMProperty_Private.h */, + EDE6C7D48246A3AB7A51E0D1B204C3C6 /* RLMQueryUtil.mm */, + 44758F8C16EACCB5DAB9215B2BE36D58 /* RLMRealm.mm */, + A4858CC422D5596C68F661F6DBB8C243 /* RLMRealm+Sync.mm */, + 2CAF3B7181A1160FCCC878725721158D /* RLMRealm_Private.h */, + C8D523949ABA0FF9F3F2E37738450D3B /* RLMRealmConfiguration.mm */, + A08E85EF0AB940DCD9C31AFB73D8552A /* RLMRealmConfiguration+Sync.mm */, + 5B60448F29F9201EE1732B9AFDC5AAE1 /* RLMRealmConfiguration_Private.h */, + A14720A4D905C015D0002840C26A8F84 /* RLMRealmUtil.mm */, + 4DAE9F5B47E940A5BED4EB4282AB23AB /* RLMResults.mm */, + A9B2B90A4949A9F8936F9F8D31B6C796 /* RLMResults_Private.h */, + 732EA36BE157F2550EB21BB721F9A7EB /* RLMSchema.mm */, + 77BFD6FF593B820265C1E63AAC4E82EF /* RLMSchema_Private.h */, + 1937A6F1A3F461335255632D4DEB5580 /* RLMSwiftSupport.m */, + A1E83143CA3B37DD064654E89E2A1808 /* RLMSyncConfiguration.mm */, + E71D1273E363FB9447B8A6209CFAC030 /* RLMSyncConfiguration_Private.h */, + CDB27647D7FDDAEA329F835B2E1BC9A9 /* RLMSyncCredentials.m */, + 9F6A38F6BC6327DEF6689FC8A4A19298 /* RLMSyncManager.mm */, + 5E95F1576F7B3F17BDF7646E98194D21 /* RLMSyncPermission.mm */, + 300FE660EF4DD975514D2F2375D84DBB /* RLMSyncPermissionResults.mm */, + 720BA95CF5D5C7B0F53B54B0E88AB8C7 /* RLMSyncSession.mm */, + 7B72D6D3D956932769C1A2FC4725DBC6 /* RLMSyncSessionRefreshHandle.mm */, + B68ED9528DECB546FF2178DF1797AAFD /* RLMSyncSubscription.mm */, + A224A92C601DBAAEBB8BF1D7D0F891AD /* RLMSyncUser.mm */, + 0072B7196E7CC188E0B39B2CF2A4716F /* RLMSyncUtil.mm */, + 8FD723202526D2D9F7AEF76F4F56F7D2 /* RLMSyncUtil_Private.h */, + 20CE461F1D16E3A9B3B73B44A068ED9D /* RLMThreadSafeReference.mm */, + CDA1B8EE827AACDB8F63C9B072524A7C /* RLMUpdateChecker.mm */, + 851F301798BC5F6F1534B8F9443D5564 /* RLMUtil.mm */, + 37DD3CFBD024BACF75A5FF333377E8DF /* schema.cpp */, + CE9E10928E34DE768B93A3F2A95D7295 /* shared_realm.cpp */, + 053E1C30790364F6A2AB7944B2DAF7A7 /* sync_config.cpp */, + 1E6E499D745F7F5E02905FB0319D52A6 /* sync_file.cpp */, + D9AC367DEA12DB83634189F1B81BAF0D /* sync_manager.cpp */, + C8CA9696A228F83E5AF4FBBB19BAF914 /* sync_metadata.cpp */, + DFB6990E2B45A265C9462DC1FB4E3EC4 /* sync_permission.cpp */, + D580222B8DB221896F60F8DE0AC833FB /* sync_session.cpp */, + D4F3D7D325C36ED8FAFEBAF75ED960A1 /* sync_user.cpp */, + F8B04B22E82D996087C605062C29C500 /* system_configuration.cpp */, + 2E18302951078475E8839BC5C9FB652C /* thread_safe_reference.cpp */, + 7B147E7FD6FA31C3E3F404A9F91659FF /* transact_log_handler.cpp */, + 7703BAE82F847CB92E5E240CDAE05BFF /* uuid.cpp */, + 231802D6149E184AF4D59C1B71AAC6C8 /* weak_realm_notifier.cpp */, + D875B7DAD6341765E1EA609398EE6C1C /* work_queue.cpp */, + EF1D61E80A9611C0EFFAA827F66C1426 /* Frameworks */, + DE93E0FB139AD0CECCA8E312AA0AF9A5 /* Headers */, + 86778FB23C89A8ACBB1A742FD04EB48D /* Support Files */, ); - name = "Pods-Rocket.Chat"; - path = "Target Support Files/Pods-Rocket.Chat"; + path = Realm; sourceTree = ""; }; - E73AA31631F340126A3265FFE3E55D0E /* Support Files */ = { + F72307B495F2B0516CCCCAE0FE46F1B3 /* Frameworks */ = { isa = PBXGroup; children = ( - 4CF32D7FFBD99A1B5B9BB6DC05DE94EA /* semver.modulemap */, - 8C9DE3F04FD9FB5957B4455214449789 /* semver.xcconfig */, - 20700EA0BBAAE00008B9A0711A0F38A8 /* semver-dummy.m */, - 849FC48B10564B2AC105751EFF73CE3E /* semver-Info.plist */, - FE09DAE831C0F4DD2A3FEE0DA7B4CF4B /* semver-prefix.pch */, - 52D38C541222CC39BDCA7815CBEA5EC4 /* semver-umbrella.h */, + 316ED1636562B8CAE9DAECAF93370282 /* DifferenceKit.framework */, + D02E282EFBA9E30E4C20C7CA809809A8 /* FLAnimatedImage.framework */, + 950E704FA1FE6FA1C91CA0A3BB4D3449 /* Nuke.framework */, + 2BDF5BC931E05E842AE1CF6E6ED36928 /* Realm.framework */, + E627E5C9B83C1C5D5EB3D90A88A62140 /* iOS */, ); - name = "Support Files"; - path = "../Target Support Files/semver"; + name = Frameworks; sourceTree = ""; }; - E9DC5C5E4045155212222882B67D0948 /* Pods-Rocket.Chat.ShareExtension */ = { + F7924F48C9EEAC042E8CADAB1A3A4905 /* FLAnimatedImage */ = { isa = PBXGroup; children = ( - 87C16892706E5D418FB46595BE4B63F7 /* Pods-Rocket.Chat.ShareExtension.modulemap */, - 34EF1DDB1FE7BC0B1621480CCD2A8BE1 /* Pods-Rocket.Chat.ShareExtension-acknowledgements.markdown */, - E4B99FF077D34AF1B589425FFCBB924E /* Pods-Rocket.Chat.ShareExtension-acknowledgements.plist */, - B8B18C22880C9BE78CDE9E4625A54F56 /* Pods-Rocket.Chat.ShareExtension-dummy.m */, - D47FA9B9846304CAC6CEC9E2F448F6E0 /* Pods-Rocket.Chat.ShareExtension-Info.plist */, - 338BA795D36A42FED889E64769A429E2 /* Pods-Rocket.Chat.ShareExtension-umbrella.h */, - 688D9AE1FBD17844A3DBDB25AECB2EDA /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */, - 19032D8AB94A4E708F3B6FE930AAE684 /* Pods-Rocket.Chat.ShareExtension.debug.xcconfig */, - 2640037A77FA57A45B0B72BEBBE015F3 /* Pods-Rocket.Chat.ShareExtension.release.xcconfig */, - 25C6692E35A4E233298A12EEDFBDAD7C /* Pods-Rocket.Chat.ShareExtension.test.xcconfig */, + 89BD0EECE7938AF9316B74B5BC9BBAD5 /* FLAnimatedImage.h */, + E00CB8D20A596AD59457C5D4C19DD93C /* FLAnimatedImage.m */, + 064E7D1CD9BF9F08DE8E872CC0734169 /* FLAnimatedImageView.h */, + D0747068ED55A3F00387E4EA0671A8E8 /* FLAnimatedImageView.m */, + FA4B8782FE6239FB9AC060E9F512FB2A /* Support Files */, ); - name = "Pods-Rocket.Chat.ShareExtension"; - path = "Target Support Files/Pods-Rocket.Chat.ShareExtension"; + path = FLAnimatedImage; sourceTree = ""; }; - F33C2B537B2D8ED6B31D17F2219F356B /* Support Files */ = { + FA0D700D27929423A063A9208FF89A3A /* semver */ = { isa = PBXGroup; children = ( - 0E97530C8E1DADA328151A7B5D74CF74 /* SimpleImageViewer.modulemap */, - 4E232F6CD56E49EDD175075EA815CB39 /* SimpleImageViewer.xcconfig */, - AB4583124EB9ED0806D51E02CCB6C78B /* SimpleImageViewer-dummy.m */, - 28103B5D3598B8622BF3A72812531557 /* SimpleImageViewer-Info.plist */, - 1F38FA20FA98FD1C5193F1D1B1067D0D /* SimpleImageViewer-prefix.pch */, - F2FD6E18A828C531B5AAD4E62B93A994 /* SimpleImageViewer-umbrella.h */, + 16EDA0697AB7EF753F3ECD1CE4232256 /* Semver.swift */, + 907ACB39CA91AB0EE1C920C10DADF5D2 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SimpleImageViewer"; + path = semver; sourceTree = ""; }; - F5AE161D0FCC4D932909F287AB54D948 /* FirebaseInstanceID */ = { + FA4B8782FE6239FB9AC060E9F512FB2A /* Support Files */ = { isa = PBXGroup; children = ( - DF73711B174CFD8FFA0155AB98998C4B /* Frameworks */, - 5D2627EC85CE2C8C42BF1D5C8574AB8B /* Support Files */, + 11119D73F47ED2ED59C093139C2AECCD /* FLAnimatedImage.modulemap */, + 889836AB075D206595A1AD51D66BAD5E /* FLAnimatedImage.xcconfig */, + C6C7EDCC51D7925AB615FDBEEA3C3D5B /* FLAnimatedImage-dummy.m */, + C0681B845139EF4034B0B3A62D1D54BD /* FLAnimatedImage-prefix.pch */, + 69ED44786F808CA2A67FF3C1D3E756D4 /* FLAnimatedImage-umbrella.h */, + 82A56D7E60C16F7D5201EC514277E267 /* Info.plist */, ); - path = FirebaseInstanceID; + name = "Support Files"; + path = "../Target Support Files/FLAnimatedImage"; sourceTree = ""; }; - F693633C3AD1677A74C38A7320A64398 /* Nuke */ = { + FB4487A03F5604684D70DBD05422196B /* Support Files */ = { isa = PBXGroup; children = ( - 4D5AC00790C9BF63FF99B5B7D1456618 /* DataCache.swift */, - 82A92F6103594C28EC55B15B13E1A103 /* DataLoader.swift */, - C3F649B08D51C5A8841000F835AAF0C8 /* ImageCache.swift */, - 7E36D9ABDD90981A063503CCC1B8ED85 /* ImageDecoding.swift */, - 5217410D8040E960F63674F990CEA93E /* ImagePipeline.swift */, - 9E65B6A242085971678624E3A9370E56 /* ImagePreheater.swift */, - FE66F2F2C0CA9122E1CF96EBFAA5C09D /* ImageProcessing.swift */, - F6C933EDF50AF26763FB4801B6266848 /* ImageRequest.swift */, - 0074C772C18EB8F44F03E638475C9D28 /* ImageTaskMetrics.swift */, - B7E955FA2C1937887C91DA7C8BB380EC /* ImageView.swift */, - E9B6CD519E3A3F6FDAC4FCA6FAB2E6AB /* Internal.swift */, - 67B101B9E181F03CBBFF698EF112F45F /* Support Files */, + CB2A3214080B4C67E46114B0DCC6785E /* Info.plist */, + F8AA16F6354AF07EBA44B3292E8878A8 /* nanopb.modulemap */, + 1AA60168E6EF97B87C18DB58627D079D /* nanopb.xcconfig */, + 114DF6CC9D416A2CFA555C07F11CDC3D /* nanopb-dummy.m */, + AFA6307A12FFA2ECA84AF74576986F62 /* nanopb-prefix.pch */, + D4F91FA566EB5F8D66484629C89DE6D8 /* nanopb-umbrella.h */, ); - path = Nuke; + name = "Support Files"; + path = "../Target Support Files/nanopb"; sourceTree = ""; }; - FA04D3B01DD2B5C8966BE065C59E191A /* Frameworks */ = { + FD147622E946B5B50544DA48BC307D7F /* FirebaseCoreDiagnostics */ = { isa = PBXGroup; children = ( - B2B8750AF8513ADF98B1BFC1F2A85C86 /* GoogleAppMeasurement.framework */, - ); - name = Frameworks; + C91C105CCBC848E4D6D440AB606B640B /* FIRCoreDiagnostics.m */, + 53F75BCCE0FCAD663E6F68F226C60A76 /* FIRCoreDiagnosticsDateFileStorage.h */, + 0159B7EA36F02AD42E0E966ABD87C8B3 /* FIRCoreDiagnosticsDateFileStorage.m */, + CC7D122B769EDA34A9267CE10C62CD1C /* firebasecore.nanopb.c */, + B615513DFBED45FCE4E1166EE8875D74 /* firebasecore.nanopb.h */, + 8C8C01843F429600DD6A15FA52058469 /* Support Files */, + ); + path = FirebaseCoreDiagnostics; sourceTree = ""; }; - FBDB0428F4F3C19974A71D2E86F45E9A /* Support Files */ = { + FEA9D60568E45C257315708F511121C6 /* Support Files */ = { isa = PBXGroup; children = ( - D91FB20BD3B0774A3BCDB4EB719B9201 /* Nuke-FLAnimatedImage-Plugin.modulemap */, - 4B9C8F146839268E10269F4C07475A07 /* Nuke-FLAnimatedImage-Plugin.xcconfig */, - 42852B842E0C2B1B346E6A1CB7C47E87 /* Nuke-FLAnimatedImage-Plugin-dummy.m */, - 0C1A2EA71D72730FB9A04042D2490708 /* Nuke-FLAnimatedImage-Plugin-Info.plist */, - 46EF8682D4C18035901BEBED0D84F854 /* Nuke-FLAnimatedImage-Plugin-prefix.pch */, - 0F335C48847B32C7AAD2204ED00462E3 /* Nuke-FLAnimatedImage-Plugin-umbrella.h */, + 6060D9993EBCE2E7D112A989CCA17B9F /* Info.plist */, + 7EBB63996160FF52AFCB093E4C36F2ED /* Starscream.modulemap */, + A0C520D64507F4BB0E87FCB3BF06C670 /* Starscream.xcconfig */, + 23AEE44FB34F530015972AC5E5F90DA8 /* Starscream-dummy.m */, + 39A1420BAA24711D1133938BD1849B43 /* Starscream-prefix.pch */, + A082D282CA67DCF920E88D310EEB653A /* Starscream-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Nuke-FLAnimatedImage-Plugin"; + path = "../Target Support Files/Starscream"; + sourceTree = ""; + }; + FF6924B2D562C741CA305AFEF225D1C3 /* Resources */ = { + isa = PBXGroup; + children = ( + EAD0D240EE8B5AA2A8C7C52808B60D32 /* Assets.xcassets */, + BD220AD8305B1A3F1C9C002299662613 /* cancel_audio_record.m4a */, + F60E6979340A56B7D55F3B17E77C5E77 /* cs.lproj */, + 2D729E7967554BD50F00DC3C78B66A87 /* de.lproj */, + 1FF45139F16BF69478CA6E123A6B23BF /* el.lproj */, + DD33E21A79B1E4A8F8283FEC0977B89D /* en.lproj */, + 03A9DE2C81710DB8A30212C75DB4746B /* es.lproj */, + 190E457578743BA513B440170CC346DC /* fr.lproj */, + B30C7FC73273E7953CFBD7407B2E63F0 /* ja.lproj */, + 33ED13762953F023C9DDD574D798CD7C /* pl.lproj */, + 7FBFBB220D94BBB269EEF2095C9B26C5 /* pt-BR.lproj */, + 591595C792165BF691748D49E3D67E5E /* pt-PT.lproj */, + DE67726DB4CE17583D2A5CA441628E12 /* ru.lproj */, + D134DBBBCD1309A25589CF99A9F9E627 /* start_audio_record.m4a */, + ); + name = Resources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0462A8552B459E0EF29DC464E8F0B8A1 /* Headers */ = { + 1C0DEEAC9C171A5E773D6D2C94AEEF50 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 20D5CDFF4AED6AA5E9B245D2FA07D733 /* 1PasswordExtension-umbrella.h in Headers */, - 2D44E459C422624112438129D6DD4190 /* OnePasswordExtension.h in Headers */, + DD94B35913C774A548B9325719B0E46F /* Starscream-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 07ACA4B7D14FB73E53579EA2729E8A43 /* Headers */ = { + 29BEC94D98E3C1A797080B261DB886A5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 545F6091268985A04596D2CE684CE76B /* nanopb-umbrella.h in Headers */, - 46429D905DF5787ABA69DBCCFF09002E /* pb.h in Headers */, - E8DBE0C2EFF276B100184285A56396B6 /* pb_common.h in Headers */, - 2F95DBA756315CB5E8A792AF742E5B54 /* pb_decode.h in Headers */, - C5C2B9E4C2CC80DFF7AED1E41ECC86E1 /* pb_encode.h in Headers */, + 892B407017FCFD569137F49D8BD3417A /* ReachabilitySwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0D8826FB0F965214227358BE2748C43B /* Headers */ = { + 31FBAF8BDF780D81E5E51E0B5DD63314 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B3420A14A2812FB194407ABE56459E05 /* MBProgressHUD-umbrella.h in Headers */, - 5CD4B9209C341B51D30EE1DB13AB68BF /* MBProgressHUD.h in Headers */, + D47904AC095EAD456915E65B47C72BC4 /* DifferenceKit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1ABCB2E3F57F5496D12016D6D334ED04 /* Headers */ = { + 36F59AA1AC05777D0C4D37198213F48F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 416BF43159DE8659C9E58341F85EB07C /* GoogleUtilities-umbrella.h in Headers */, - 84CCF89EA0B4D878378F05A42C4355D2 /* GULAppDelegateSwizzler.h in Headers */, - FBF255107F242D504DE11BC35EECBFA5 /* GULAppDelegateSwizzler_Private.h in Headers */, - 13A847C42DFBC3BE340FAAF9D64FD9E0 /* GULAppEnvironmentUtil.h in Headers */, - B5972653001428D8F23B76B9CE644C17 /* GULLogger.h in Headers */, - 8096CDC421AD608D9B30FFF61F49EC66 /* GULLoggerCodes.h in Headers */, - 2ACACE472D2F1531FAB6996AB1D6DC4F /* GULLoggerLevel.h in Headers */, - 1A767FE196076BE4CD66A39EB04AEF12 /* GULMutableDictionary.h in Headers */, - D70371FB44BC08E2151BDEB1C2DEDB5A /* GULNetwork.h in Headers */, - 41FCD30EC1C04E501DEC08D5DEE619B5 /* GULNetworkConstants.h in Headers */, - 3CCC829D707A77A39016180FDAACE2A6 /* GULNetworkLoggerProtocol.h in Headers */, - 42763DAFB8AFBBA933580595557E3AFD /* GULNetworkMessageCode.h in Headers */, - 4FD909DD059FFB052922CA95043E44BB /* GULNetworkURLSession.h in Headers */, - E213A509DFE3AB2FE9D316CA18DC39B6 /* GULNSData+zlib.h in Headers */, - F71EA8268787284DCF82CE645C83A636 /* GULOriginalIMPConvenienceMacros.h in Headers */, - 24179324105CC64FC9865C3E82CDFB97 /* GULReachabilityChecker+Internal.h in Headers */, - B50EB15E008BE595E9B57A94E7BB1A78 /* GULReachabilityChecker.h in Headers */, - 145982FAE1B0B77AD813344D435D2936 /* GULReachabilityMessageCode.h in Headers */, - 5315E7D04ADA90B0E364EC113F9E1344 /* GULSwizzler.h in Headers */, - 3DBB0720FDA132A148CF5D39651E8B30 /* GULUserDefaults.h in Headers */, + 20DBA819B7DB1393D6E7F62101CB13CC /* nanopb-umbrella.h in Headers */, + F11F5480DACC803C2B90EDD8D6E0BFE2 /* pb.h in Headers */, + 9C55BAB8C6FDD99F96857D3568C31E84 /* pb_common.h in Headers */, + BFF6F7FFF06EA335CC19EAF61B70B9CA /* pb_decode.h in Headers */, + 8742B3C1BF72AA6988DF43FE6D2050EB /* pb_encode.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1F99CE2DC4BA67FBD85A28C108C2DE72 /* Headers */ = { + 520B9263957E2F8F922E7883AB10B61D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 16F7FB89842A5FBC05E82ECE7CF33F5B /* Pods-Rocket.ChatTests-umbrella.h in Headers */, + 6DE952E08C0BE57F9E36C5617739FCEE /* MBProgressHUD-umbrella.h in Headers */, + D25C2F99A513F73C45698A475B61BFF8 /* MBProgressHUD.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 24AF04CD356C35F5249BF1770AD3C9F3 /* Headers */ = { + 52E8DEBF6DC9AAE346A47F416CAB63A3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7CA118863A2C6C91D9A5264B6770DD09 /* Pods-Rocket.Chat.ShareExtension-umbrella.h in Headers */, + 6604FB25AFFC074631F1222874CE958C /* Pods-Rocket.Chat-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2B276CFC25EA48FF6CCF71F615F7DAF2 /* Headers */ = { + 553BFAD00422657CF88CDABDFD9C5192 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D002A16290003D21573665DEE4CBACE4 /* DifferenceKit-umbrella.h in Headers */, + D7DCDEDD6020B10AC8409EAA677CCE1D /* FIRCoreDiagnosticsDateFileStorage.h in Headers */, + E5CAC15E419978123930A5E88FE29C68 /* firebasecore.nanopb.h in Headers */, + 794122CB44A6376299C60DDFF3B9DD6C /* FirebaseCoreDiagnostics-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 352A209DF785F327E0E86771FB01472C /* Headers */ = { + 5E2CE4BDF339BA7BE7D0BB74FBC6B724 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C5D07F11C8C05788A2AF6D1C03F5CC6F /* FLEX-umbrella.h in Headers */, - 16284B32D917CD416F8E442548B4F75D /* FLEX.h in Headers */, - E41C3C68D4332B4B8324AD45AA903A02 /* FLEXArgumentInputColorView.h in Headers */, - 91F851739A0B2C01DCB8746CAF7E88E9 /* FLEXArgumentInputDateView.h in Headers */, - 475E4B461BA65F3805A982560432755E /* FLEXArgumentInputFontsPickerView.h in Headers */, - AFB0861892F28F386E3964A57440340D /* FLEXArgumentInputFontView.h in Headers */, - 15EC6AD063CB4B54717281F3B8B19CDE /* FLEXArgumentInputJSONObjectView.h in Headers */, - B16CC2492CA7D495FD0B283AB751FD2E /* FLEXArgumentInputNotSupportedView.h in Headers */, - C31639B35BE2B1366F5D32B09FE2B685 /* FLEXArgumentInputNumberView.h in Headers */, - A92ADD3740FA704494BAF9604A377302 /* FLEXArgumentInputStringView.h in Headers */, - D4EBAA9CBB8A66411C3D08D674EC66F7 /* FLEXArgumentInputStructView.h in Headers */, - AB0F8D79FC6BE947D4B47F4D0AED6B03 /* FLEXArgumentInputSwitchView.h in Headers */, - 2B2BDB59F381FC17622EA0689F271D00 /* FLEXArgumentInputTextView.h in Headers */, - F3AF9D715CBDDCB9C8890AE3A02D77B7 /* FLEXArgumentInputView.h in Headers */, - F041390EDAAB97E62598CD5BAD8DA951 /* FLEXArgumentInputViewFactory.h in Headers */, - 36A1F0BD8FF30E0F20398B75BE936877 /* FLEXArrayExplorerViewController.h in Headers */, - E370131B1746DD2771B2C1C012659EC2 /* FLEXClassesTableViewController.h in Headers */, - 91246CEB82E24612F8B85B2B07E9D8E8 /* FLEXClassExplorerViewController.h in Headers */, - 6D309BA2C4D7EABD1707ED826214455F /* FLEXCookiesTableViewController.h in Headers */, - 0371A9B80638AAF0BF510C3AED7B2F92 /* FLEXDatabaseManager.h in Headers */, - DD7C39AA749F46CC9AB3CB8E0D2EB771 /* FLEXDefaultEditorViewController.h in Headers */, - 30C371593F27B658E3646602377045E2 /* FLEXDefaultsExplorerViewController.h in Headers */, - 3F810021C4BF8377B1E61B996D22CFA7 /* FLEXDictionaryExplorerViewController.h in Headers */, - B912E0BF47673DC5E5C7267C43ECD745 /* FLEXExplorerToolbar.h in Headers */, - E12991EAF25EE58531030FFAE305B9C0 /* FLEXExplorerViewController.h in Headers */, - F5452AF32C51513A67544DC00AAF8579 /* FLEXFieldEditorView.h in Headers */, - 1CED116EFADA9A89E442A677AC2EFBDC /* FLEXFieldEditorViewController.h in Headers */, - 755196B026CB2986E05EEEEDE67AEDDC /* FLEXFileBrowserFileOperationController.h in Headers */, - 4B46C105272F2B487AC312C96081CE22 /* FLEXFileBrowserSearchOperation.h in Headers */, - 4E5D41B29EC06F026B9053182B092202 /* FLEXFileBrowserTableViewController.h in Headers */, - 0D0321890FFC784EFA7DE65F30B9F96F /* FLEXGlobalsTableViewController.h in Headers */, - D6BE85614C1AC719C3DD8898DB4CC9EC /* FLEXGlobalsTableViewControllerEntry.h in Headers */, - 3E3B2ED563C3275EC7FD8B0E23399EB6 /* FLEXHeapEnumerator.h in Headers */, - D9EF9C2BDD5B5902F16EB9A99163D9A0 /* FLEXHierarchyTableViewCell.h in Headers */, - 3B3D5D8FCF40C46E767CBA91D48C8FAE /* FLEXHierarchyTableViewController.h in Headers */, - 83619820600BFE3BB02C831F005CFD7E /* FLEXImageExplorerViewController.h in Headers */, - 0F113F37CDD68C482342C3B478612ED2 /* FLEXImagePreviewViewController.h in Headers */, - A3B39710335F5B9955967BD5A84603B2 /* FLEXInstancesTableViewController.h in Headers */, - CF75EBE7AD313A4E3CFAB2D6D3835CFF /* FLEXIvarEditorViewController.h in Headers */, - D9EE5087D2A5AEFF5AF926EFDDF47518 /* FLEXKeyboardHelpViewController.h in Headers */, - B5E733E01A376FEA48EC235A38AB9214 /* FLEXKeyboardShortcutManager.h in Headers */, - 5AC7409B1DA877D15C957C48699A1298 /* FLEXLayerExplorerViewController.h in Headers */, - C02F2CE57561E0AFEC77902CDB16B3CC /* FLEXLibrariesTableViewController.h in Headers */, - D0C47BFC6EAD6C24B9531DB57C474418 /* FLEXLiveObjectsTableViewController.h in Headers */, - 45FC6531037AB3693DD0C7DA606E12D5 /* FLEXManager+Private.h in Headers */, - 610D3CC884988B80814AC0B55EA8F628 /* FLEXManager.h in Headers */, - 59AC9C51B091C28B555A36544702A2FC /* FLEXMethodCallingViewController.h in Headers */, - 12F89640EE5F3AEC1FEAFE6ED2A8BC6A /* FLEXMultiColumnTableView.h in Headers */, - 2C76C3638F2F9DF8F99D0AEA16D6B2EE /* FLEXMultilineTableViewCell.h in Headers */, - 6F5E2F8D22E972B925A66B9861731838 /* FLEXNetworkCurlLogger.h in Headers */, - 07BF5BD3F0D23E013A38872DBED77FEF /* FLEXNetworkHistoryTableViewController.h in Headers */, - B5687A1A2A88D1900BAC1430A1F5F5C6 /* FLEXNetworkObserver.h in Headers */, - 1AE0832917C1018993F6594AFB61738E /* FLEXNetworkRecorder.h in Headers */, - 51398D166069DF99EE4922F20801808E /* FLEXNetworkSettingsTableViewController.h in Headers */, - 88899BA97231A772686D95A958A407DE /* FLEXNetworkTransaction.h in Headers */, - CD62B87094FBEFA7EBD6A3CFC84C2440 /* FLEXNetworkTransactionDetailTableViewController.h in Headers */, - BF0CD0F3B561CAFC70F2B7A1CE374544 /* FLEXNetworkTransactionTableViewCell.h in Headers */, - 3D0E0271782E81C69AB085285CE3DC6B /* FLEXObjectExplorerFactory.h in Headers */, - CB03EB6F3E4CD458D028303C3B9CA875 /* FLEXObjectExplorerViewController.h in Headers */, - 891AEEA4060A2B9C42EB566DDC9D3AD1 /* FLEXPropertyEditorViewController.h in Headers */, - 73B6A69E4B583075AC6FB2943D36B85A /* FLEXRealmDatabaseManager.h in Headers */, - EAE3E6883527951DE4C3C54E44E23B37 /* FLEXRealmDefines.h in Headers */, - EB631311536C3561451520DBC0B787B1 /* FLEXResources.h in Headers */, - 129642E35157CFCDF5B4794113F7F15D /* FLEXRuntimeUtility.h in Headers */, - 54F92E7F8E8B8B9592630A0D4F9B405B /* FLEXSetExplorerViewController.h in Headers */, - 7C503452FBF8A090368DEF61210F1C48 /* FLEXSQLiteDatabaseManager.h in Headers */, - 7EADEC66F65CF566A52D7955893EC9C0 /* FLEXSystemLogMessage.h in Headers */, - A626018E3C85121046C224601584AAC0 /* FLEXSystemLogTableViewCell.h in Headers */, - 6B751E6A1203D651E11B1206EFE49972 /* FLEXSystemLogTableViewController.h in Headers */, - 41F07A61972AE74A7E87141BA8E025CD /* FLEXTableColumnHeader.h in Headers */, - 3A331CAEFC64829B4CD4FFB2D7A6BAEE /* FLEXTableContentCell.h in Headers */, - 6E21DB0B8C8E83111230D868111FE2F1 /* FLEXTableContentViewController.h in Headers */, - CCDA47507B5BD2AB538C51C50D6859C8 /* FLEXTableLeftCell.h in Headers */, - 87F23D512B778CB1F239154C853A1B8D /* FLEXTableListViewController.h in Headers */, - EAC93DBB94199B372A052C954F76AAC7 /* FLEXToolbarItem.h in Headers */, - 56E81C13EB073E24226F22E01BEBE64E /* FLEXUtility.h in Headers */, - C210D0204740A6A4B60BA845AA039068 /* FLEXViewControllerExplorerViewController.h in Headers */, - 9A2FC3805A58ABD42AFE82CA255A070D /* FLEXViewExplorerViewController.h in Headers */, - 5E05FC9B780F1E959510BF0D84FDD671 /* FLEXWebViewController.h in Headers */, - AACB6BE7C7FD66D21A350F2ADD0F1E28 /* FLEXWindow.h in Headers */, + 53FE0A2BB2BD88E6DB5423CF2096932F /* OAuthSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 392F7084D8C5CE1D1A356BAE10CAC3E2 /* Headers */ = { + 5EEA03B770BBF144C9CFF105BEBB4280 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D7E1302E5CCED44B57B2B8F61ADBAA64 /* Pods-Rocket.Chat-umbrella.h in Headers */, + F90DD2B045EF52C5FE9A43245018B31A /* FLAnimatedImage-umbrella.h in Headers */, + D21499B1CB4993C6ABA36161E599F12F /* FLAnimatedImage.h in Headers */, + 7F8F3D1CCB7B727EED498A13CB33E4E9 /* FLAnimatedImageView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3D5A540E6B3EA2F7F14C033D4EACB56E /* Headers */ = { + 5FB69F1A31A56B65CDA5C8C202A6047A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B2105D60BEEE1ED86EA6921D87C3FDF9 /* SwipeCellKit-umbrella.h in Headers */, + 44346B0B674055B978DB9739979F98E4 /* cct.nanopb.h in Headers */, + 3DB4B85EB66AEAACF8D3284FE755D2DF /* GDTCCTNanopbHelpers.h in Headers */, + 0B1073E79A6932022711EB620B45CFC2 /* GDTCCTPrioritizer.h in Headers */, + C5A409380C06A58C102D44AE82766C8C /* GDTCCTUploader.h in Headers */, + E73939D88A37BC1385F7AD7F24A102C5 /* GDTFLLPrioritizer.h in Headers */, + 658D0B2EC9250FB027AE0F25C0CF0A26 /* GDTFLLUploader.h in Headers */, + 5FEE0C05D547BB0F82DAF829A849BD75 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 413986AD0254FB27506624320FC91917 /* Headers */ = { + 683BB95E55922296EEA255DFBC6E1DEE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 422AFDBC00D97D52F79D0D25491B0772 /* OAuthSwift-umbrella.h in Headers */, + 7B3D80D82C16D8C0C1CB4E66960D72C2 /* GDTCORAssert.h in Headers */, + 55CC62A87F1B574BFC9D3733F457F385 /* GDTCORClock.h in Headers */, + 1020A6707655D3EE3EC1DA2935DB373F /* GDTCORConsoleLogger.h in Headers */, + 82DF31B88B7DD7705A991D1E6DD43B6B /* GDTCORDataFuture.h in Headers */, + 62BEA28175902102C3B8AC4B84D505EE /* GDTCOREvent.h in Headers */, + A6133AE9A4BE8D72271CE2DEBC6A8991 /* GDTCOREvent_Private.h in Headers */, + 894EFF0F94153CBCD981C3407C136491 /* GDTCOREventDataObject.h in Headers */, + 511ECE956EB375F73EA31250CFDCAB5E /* GDTCOREventTransformer.h in Headers */, + 9796FD5EF3C687EB1C475CD76EEB23D4 /* GDTCORLifecycle.h in Headers */, + E4FF242A3FCDAEBE9E3D270E75DBF3A3 /* GDTCORPlatform.h in Headers */, + 6D527628886493ED656774742B710E18 /* GDTCORPrioritizer.h in Headers */, + 0FC077E0D55536D84DB1A83A8133AE4A /* GDTCORReachability.h in Headers */, + AF98672A0448AC00503EFEE3B55EF8A8 /* GDTCORReachability_Private.h in Headers */, + 84F729021409FF95A12BC4C7F908D502 /* GDTCORRegistrar.h in Headers */, + F70F749BCFF46B0146F6257A5C7A3105 /* GDTCORRegistrar_Private.h in Headers */, + FC89822023D8FCF89B4BFAB693EB4484 /* GDTCORStorage.h in Headers */, + B213723D96A21550F60BC406FAE5101E /* GDTCORStorage_Private.h in Headers */, + 2D7AC1470678938407439FBD76FE899A /* GDTCORStoredEvent.h in Headers */, + 0352CA2712D80CB18DAE5EF0A3636943 /* GDTCORTargets.h in Headers */, + 9FADC98A8734A7FFCB2680EBEC792D0C /* GDTCORTransformer.h in Headers */, + 16B76400250F22CD46108C349F182332 /* GDTCORTransformer_Private.h in Headers */, + 913E31D4B7FE1D0EE457A3F662588218 /* GDTCORTransport.h in Headers */, + 27989DDE5E4F35266DF0198A0A28DC64 /* GDTCORTransport_Private.h in Headers */, + 3FB340CACF89C696283275B4AD610229 /* GDTCORUploadCoordinator.h in Headers */, + 64FDB90FB4F1614AE3967998D88E4FE8 /* GDTCORUploader.h in Headers */, + 166A906CF2766C7C4BFEC4990419A33D /* GDTCORUploadPackage.h in Headers */, + 20F71E3F58F133AD3A0835A4182A7473 /* GDTCORUploadPackage_Private.h in Headers */, + F82D331F0D8F5B9CCC1FAA821A0726AF /* GoogleDataTransport-umbrella.h in Headers */, + 74BBF4FC67146A905B2F47DED101A004 /* GoogleDataTransport.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4B71E8860429117F9620A44576F264C9 /* Headers */ = { + 6D7CFD135EBDE03EBE972A6E10AE3204 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 36392B4F7E63DA095122B5D5285687FD /* FLAnimatedImage-umbrella.h in Headers */, - 37D63CC80F1716CB08F301AE0F59E91E /* FLAnimatedImage.h in Headers */, - 37A99E5C2F3B5D310B421CAF458B6E88 /* FLAnimatedImageView.h in Headers */, + 8E8E3FFE08DAB8514D6A2D7690299B01 /* MobilePlayer-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4C96CBD09D0740EA51207C479378E6A0 /* Headers */ = { + 74791855EB5C2600A06FFF6049327239 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2AB5BE740CAF2C4C0F84603FD37A5869 /* MobilePlayer-umbrella.h in Headers */, + 446A8CBA4F52D2F70A5B29ED85A528B1 /* GoogleUtilities-umbrella.h in Headers */, + 1983C2D88705EE8B4BB0E66FB8ADBC86 /* GULAppDelegateSwizzler.h in Headers */, + 8191205545E2F26B93D22092C66C05E3 /* GULAppDelegateSwizzler_Private.h in Headers */, + 0FEC00AAA1568C99FE212D3E30A9FB94 /* GULAppEnvironmentUtil.h in Headers */, + A4BF770220116CA53A7B72119D35740C /* GULApplication.h in Headers */, + 3970EF9DD3408CB3F9869F19095B90FC /* GULLogger.h in Headers */, + 6DB5EE0691B753FFD8B095175F196216 /* GULLoggerCodes.h in Headers */, + 0623B997BFFCB5D1A2188F7792F51052 /* GULLoggerLevel.h in Headers */, + 436D6749D2E6BF0DF1D3F62FEDC2E9AD /* GULMutableDictionary.h in Headers */, + E92EA3FFFF41FC13ACEA481E10FB0021 /* GULNetwork.h in Headers */, + CF14688BD58BE50D9C4146D769807DF0 /* GULNetworkConstants.h in Headers */, + 3F99263D6F8DE2F3AEA7354795457FC7 /* GULNetworkLoggerProtocol.h in Headers */, + 942BE5EC861093D7B18C29E7494521E2 /* GULNetworkMessageCode.h in Headers */, + D8C642887850B0DED13D535CA24A23C1 /* GULNetworkURLSession.h in Headers */, + 7946E48D49896EE74A11E78ACFA340CE /* GULNSData+zlib.h in Headers */, + 4D14EA3647CC5CF056D2429B1A88E447 /* GULOriginalIMPConvenienceMacros.h in Headers */, + 2C1B0DCDE94ED11D6EBB0AEAA12A6E01 /* GULReachabilityChecker+Internal.h in Headers */, + 92BF9628912457C09C9C68152832D36E /* GULReachabilityChecker.h in Headers */, + EE6AB85801CD7AC05430D1D1262BEDCD /* GULReachabilityMessageCode.h in Headers */, + BCA69C999CBAFA0D38F91420303BF05E /* GULSwizzler.h in Headers */, + F0A3D9CE3786D0B0007CB084F4E08FA4 /* GULUserDefaults.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5A43CAD568D340CED1AC884923A7BDB3 /* Headers */ = { + 7AC570866190524BA674F296D266E7AC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 57E7187454D2E2A1D3A5B347E2EBF274 /* ReachabilitySwift-umbrella.h in Headers */, + F7B107D481E1A61C79290DE80607F0E7 /* SimpleImageViewer-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 68B098F88C87D75E9AA63C4734DF14FB /* Headers */ = { + 7AD033CD58E81DCB34DB3CAE5144D01E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F565D23409F5F07DFBABE83EDC5B3F9E /* SimpleImageViewer-umbrella.h in Headers */, + 5DBF66A4EC5ACE20980D6E195B7F8156 /* FLEX-umbrella.h in Headers */, + BF84EF4EAB792757719427ADB89DB48B /* FLEX.h in Headers */, + C10778DE67D30B7BBCD36B188CCCC610 /* FLEXArgumentInputColorView.h in Headers */, + 46512D25D30CB3ACC8AD04EC48F3E076 /* FLEXArgumentInputDateView.h in Headers */, + 55FEDD075B48CFB0D142FC7ECF36C684 /* FLEXArgumentInputFontsPickerView.h in Headers */, + E054CB178873476EF44A42F775BBB915 /* FLEXArgumentInputFontView.h in Headers */, + 504973E9DC9B12A51E79A5AFB11250EB /* FLEXArgumentInputJSONObjectView.h in Headers */, + 0787B71FC33DCEDEA501A79EFD69D184 /* FLEXArgumentInputNotSupportedView.h in Headers */, + FF3E902A7C757EB6E0BA98FF96B2E5A1 /* FLEXArgumentInputNumberView.h in Headers */, + A983265EC5032F1FE964CA180C6FBCA7 /* FLEXArgumentInputStringView.h in Headers */, + 75B3BA76A776B6C177F42512F875C569 /* FLEXArgumentInputStructView.h in Headers */, + 23168284675E1F4B4CBDB48F725A4A90 /* FLEXArgumentInputSwitchView.h in Headers */, + 5F5D81037DEA3C2C3B3112F6C6226AD0 /* FLEXArgumentInputTextView.h in Headers */, + 2DACCA680BEDCB91D3C77992116B7B2B /* FLEXArgumentInputView.h in Headers */, + 9CB64B3E5FE260008967F48625AFCB3F /* FLEXArgumentInputViewFactory.h in Headers */, + E9A79711B81146FA616FC92C4CC00B08 /* FLEXArrayExplorerViewController.h in Headers */, + 5033AD20C38EC7DEAF04350A500DD8F9 /* FLEXClassesTableViewController.h in Headers */, + D0948995AF0AEB2248323AC11EADA964 /* FLEXClassExplorerViewController.h in Headers */, + AB344DC8B84A9DAC2B74643422E86860 /* FLEXCookiesTableViewController.h in Headers */, + 9DD81518DCF05A926C33B935A5782864 /* FLEXDatabaseManager.h in Headers */, + A9ABAB60FD75DEDA5A2AEBC12CD91A46 /* FLEXDefaultEditorViewController.h in Headers */, + FCDEAAA53A940365792DA9F6472FEF31 /* FLEXDefaultsExplorerViewController.h in Headers */, + E86CDB05EB4574A3B57A5C96AC5BAD4F /* FLEXDictionaryExplorerViewController.h in Headers */, + 85C269D9D960780CF91F1B5A6FCC044F /* FLEXExplorerToolbar.h in Headers */, + D8B716738F4424AF9B6F05A69385F3B6 /* FLEXExplorerViewController.h in Headers */, + 63B53EDD2F4E523754F27DF6664A5583 /* FLEXFieldEditorView.h in Headers */, + 629798E988A45274B754BE7140F5C083 /* FLEXFieldEditorViewController.h in Headers */, + FD2E483C73CA6266282387629C6DD331 /* FLEXFileBrowserFileOperationController.h in Headers */, + 7F132FE37D24354E30E27ADCAF9679F8 /* FLEXFileBrowserSearchOperation.h in Headers */, + 1C0316F38622C41533F43E00D6E4EB42 /* FLEXFileBrowserTableViewController.h in Headers */, + 1C0E77971B5EDFB7B648AA3A4B7A9AA0 /* FLEXGlobalsTableViewController.h in Headers */, + 0FA9B73C94DB00AC5E5C905D248D700E /* FLEXGlobalsTableViewControllerEntry.h in Headers */, + FE020306C1B4E78B2170E857FCC7F10D /* FLEXHeapEnumerator.h in Headers */, + 18CD16C656023A35B94ACFF9DA560CAE /* FLEXHierarchyTableViewCell.h in Headers */, + AB9DC499828B10F09E7695A423FB3571 /* FLEXHierarchyTableViewController.h in Headers */, + 56B91FCB926CBF05E985DB4B3B6F327D /* FLEXImageExplorerViewController.h in Headers */, + ECE29A340D347B83C82024DA9076914A /* FLEXImagePreviewViewController.h in Headers */, + FC0E121A3C52E3E86B62BA756C5771B9 /* FLEXInstancesTableViewController.h in Headers */, + 3031393FAC76A438CA6F664167DC532D /* FLEXIvarEditorViewController.h in Headers */, + D021A52BA5A2D5D295DB4ED8BA9C4C01 /* FLEXKeyboardHelpViewController.h in Headers */, + E1C0A520CD4C1200B714393236FBA7BE /* FLEXKeyboardShortcutManager.h in Headers */, + F64C0542D44B627D41C6F9D29583C736 /* FLEXLayerExplorerViewController.h in Headers */, + 83720ADCC8B9D44AFD927667A985CC0D /* FLEXLibrariesTableViewController.h in Headers */, + 6D17B4DC1898166D1B578F7006205A28 /* FLEXLiveObjectsTableViewController.h in Headers */, + ABBADD074AB7DAE19B3AE225E16A8392 /* FLEXManager+Private.h in Headers */, + 07090E9518A88E182EC18415F8B9CA32 /* FLEXManager.h in Headers */, + 75219360985FA39110DCF92D32A91EBA /* FLEXMethodCallingViewController.h in Headers */, + DC579C1A1E61FF8D78CD7FFD7B5B2C7D /* FLEXMultiColumnTableView.h in Headers */, + C593F7BDEE806AA1FE9B5FF7B4B6A73B /* FLEXMultilineTableViewCell.h in Headers */, + E40C35EF79D04B39F49231773943359F /* FLEXNetworkCurlLogger.h in Headers */, + 644FB8981C9F51AEE14CFEA736F85B53 /* FLEXNetworkHistoryTableViewController.h in Headers */, + 35BC9B74D4B9CFED1A06F43A44B94147 /* FLEXNetworkObserver.h in Headers */, + 36A7D00BFEEE5B9C6B3A7769A56DCD47 /* FLEXNetworkRecorder.h in Headers */, + 953A79EDEB22DEBC9EEE825DED8B8F7D /* FLEXNetworkSettingsTableViewController.h in Headers */, + EAD02A70D3839664B8BB64C95D390FE4 /* FLEXNetworkTransaction.h in Headers */, + F5DAD773964AD60A3DEADEDB22FB35E0 /* FLEXNetworkTransactionDetailTableViewController.h in Headers */, + 4FBBB1C4C005FC6DBE891D9DB819D5D6 /* FLEXNetworkTransactionTableViewCell.h in Headers */, + B49BD078C4D501714FD8A2B0BE7AC522 /* FLEXObjectExplorerFactory.h in Headers */, + C07F731E97B3E1A1902D111935BABF40 /* FLEXObjectExplorerViewController.h in Headers */, + 6BC5DAEEC6B407D128CA34796A8FB91B /* FLEXPropertyEditorViewController.h in Headers */, + 56B3F1539B008767052B13C7CCE640CD /* FLEXRealmDatabaseManager.h in Headers */, + 728EC7DF4D160139674090474DE06BEB /* FLEXRealmDefines.h in Headers */, + 130574E890C9D63CD39D304F7D4AA238 /* FLEXResources.h in Headers */, + EDB62032AD789057EC015B37392AAB1C /* FLEXRuntimeUtility.h in Headers */, + 4FF3ED246093035E6E3F445029494A90 /* FLEXSetExplorerViewController.h in Headers */, + 54EEC83760316C785EC964721601D1F1 /* FLEXSQLiteDatabaseManager.h in Headers */, + F8DFB3D991F4F11B9EF3D38F2DC71FE4 /* FLEXSystemLogMessage.h in Headers */, + 04A6285F0F90172D229B74FE21D012B6 /* FLEXSystemLogTableViewCell.h in Headers */, + 37173B7A834068402765939B150F8325 /* FLEXSystemLogTableViewController.h in Headers */, + C1133A88E83E1D0D3311F1FE061C00A3 /* FLEXTableColumnHeader.h in Headers */, + 2F8063DC5EC4A8856F395D4625AC413C /* FLEXTableContentCell.h in Headers */, + 1A1E3A67A919E6F0A69F91DB864161CC /* FLEXTableContentViewController.h in Headers */, + 32212F06A296E145629F371FCAAB2073 /* FLEXTableLeftCell.h in Headers */, + 913EF17272D2963B3657FEA7D74DDBB2 /* FLEXTableListViewController.h in Headers */, + E2323C4DB49A5E561356529E19956072 /* FLEXToolbarItem.h in Headers */, + 60B3E318F701C6C6D1451975F660EF95 /* FLEXUtility.h in Headers */, + 8C2A461AAFAF414491CC486E4B2E1F40 /* FLEXViewControllerExplorerViewController.h in Headers */, + 1D487F97D73F2875E7C606357982D918 /* FLEXViewExplorerViewController.h in Headers */, + 3B303C1E476EAA6110C6B133218D18C4 /* FLEXWebViewController.h in Headers */, + CAB1DDEC2B982CC2939A5A123B85EEE0 /* FLEXWindow.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 698897B83A9FC209A26FB1E4B05A43BA /* Headers */ = { + 82ACA04FE464E6C15AC2B8755B68AA4B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E10437DF3D2FD6F52CD3C020995F7D8F /* RealmSwift-umbrella.h in Headers */, + 7B57D471960D273FF22A3B68B7F56923 /* RCMarkdownParser-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6C9BC0E1EBB029CCF9FCF9BCA3DCCABA /* Headers */ = { + 8862B042C79CAF0063C344496BE8DD53 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C20D442B8EA8D6CFC673C2D83811AE54 /* Nuke-umbrella.h in Headers */, + 73D7A73020869082DE85D4CEE026636D /* NSError+RLMSync.h in Headers */, + C22D12576D277E9ECF9EB8945EDB66E0 /* Realm.h in Headers */, + 6A3A0864DAC91CF95C141954292C0251 /* RLMAccessor.h in Headers */, + 712B206A80834D70948F139C60F637AD /* RLMArray.h in Headers */, + EBEB5B70FA588EA2F0086AF80D6CDCC1 /* RLMArray_Private.h in Headers */, + 09C953BEFE53D4C59FFF7E0A847B6B0E /* RLMCollection.h in Headers */, + BEF254CF1053A95EB5FC03A1E114849C /* RLMCollection_Private.h in Headers */, + 947171B3FB69A87521B3D4F65330F6C5 /* RLMConstants.h in Headers */, + 053C049F0AF447D7EE0AE7DD0993E645 /* RLMListBase.h in Headers */, + ACB99BC852E0102A0E647DC02EDBC086 /* RLMMigration.h in Headers */, + 56E34B0FC72D6712C6D99AB148DF4B38 /* RLMObject.h in Headers */, + 137C2DB45D50E3311A903E855B92913F /* RLMObject_Private.h in Headers */, + E82DFC9C6F9FDC4264E7A0F55E12E582 /* RLMObjectBase.h in Headers */, + 09E41163B944067AED79D6D62CEF58FE /* RLMObjectBase_Dynamic.h in Headers */, + B82A630B622423F576C269C440D9FC98 /* RLMObjectBase_Private.h in Headers */, + 51202D7E2E75F502E2E8D618647EACA4 /* RLMObjectSchema.h in Headers */, + 3BA9B85E6EC7E6DA65DF41A067E2636E /* RLMObjectSchema_Private.h in Headers */, + 5E9C510283081999CE7BC49D61FF00CE /* RLMObjectStore.h in Headers */, + ED387D2242D7C56FED8C201AA4A28C71 /* RLMOptionalBase.h in Headers */, + FF0B8B73DB8677FE058757624343256B /* RLMPlatform.h in Headers */, + 319748D4761D17A7D9DAAC50BA360692 /* RLMProperty.h in Headers */, + 63BBD5C4A4EC68E1FA0BDADDDCAB57C8 /* RLMProperty_Private.h in Headers */, + 30E7A56C9F4A8E36AC1F7D013B9CD02B /* RLMRealm+Sync.h in Headers */, + 5BB99F154B9A83258D551CF49C6B2F5B /* RLMRealm.h in Headers */, + 47A4CA168A89359A625C207407A4481F /* RLMRealm_Dynamic.h in Headers */, + A053BC109421D359F92949FD2E1F469B /* RLMRealm_Private.h in Headers */, + F3A6BE9B27BCF036F809B97A4A569DF6 /* RLMRealmConfiguration+Sync.h in Headers */, + 1A19DBA7850D568914F5F932B50533C5 /* RLMRealmConfiguration.h in Headers */, + 7C08E3C139A6A1BE51206056F6BEC545 /* RLMRealmConfiguration_Private.h in Headers */, + 450361026619485E07CD3D85E4A4DB1F /* RLMResults.h in Headers */, + F36CF02E28A46DCB6B532213833D51E4 /* RLMResults_Private.h in Headers */, + E277D22CF104154C461B8AC57D39CDF5 /* RLMSchema.h in Headers */, + AE2E063F4D3F7D2CA05D5BF8CCA58851 /* RLMSchema_Private.h in Headers */, + CC9116967A5D307556EC1C471630B148 /* RLMSyncConfiguration.h in Headers */, + D5F0F7F693F2F3E7E33561AF446BF975 /* RLMSyncConfiguration_Private.h in Headers */, + 69AA4CEC7E218C60182E68BB140B864F /* RLMSyncCredentials.h in Headers */, + 0AFE759CABB24AD006290E2C73975777 /* RLMSyncManager.h in Headers */, + 54D3E1637FDE725EC4C4794DCC7DD956 /* RLMSyncPermission.h in Headers */, + C5511FA1498EE04F7DFB4600E9FFB3DB /* RLMSyncSession.h in Headers */, + 6DA99D6E7FBFD775F1C4DA1342639AC2 /* RLMSyncSubscription.h in Headers */, + 65EFC67DC2AEE26D265B24487849D37D /* RLMSyncUser.h in Headers */, + 2E5B77D08989858289C3E7EFA77FEC7B /* RLMSyncUtil.h in Headers */, + B3F03960F46516185BAF55BF5E031408 /* RLMSyncUtil_Private.h in Headers */, + 3187ECAC4533353EC9CC895C6FD74DB6 /* RLMThreadSafeReference.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7E9B39EE3070C25E98C00B86431F62B5 /* Headers */ = { + A7342912312625974F324C93DE3CC36D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4164C59C02996FC0AC223CC61A1865BD /* NSError+RLMSync.h in Headers */, - 359009D5314FF751E8B3AD17183308F4 /* Realm.h in Headers */, - A93A33BA37E0F8F06D9422048341AD21 /* RLMAccessor.h in Headers */, - 7883840488C582ABEABC2F16EC719F51 /* RLMArray.h in Headers */, - 27734224F5D54F13D869C96F7D50A445 /* RLMArray_Private.h in Headers */, - C009658EA7276A8DFC84CFFB5EB15903 /* RLMCollection.h in Headers */, - 91C7065DC6A750F47209DCAF9F6DD0B8 /* RLMCollection_Private.h in Headers */, - C4D49C7C9FB3B64C2AC9BBA6B2FB995E /* RLMConstants.h in Headers */, - 9DDBAC387EC51F3E1EA10D2B8AA58A9F /* RLMListBase.h in Headers */, - 88CCBFEBD20AAD003AA1049BDCF43885 /* RLMMigration.h in Headers */, - 670B9D2B2A7CA412650F48C0136A547E /* RLMObject.h in Headers */, - 926C5432DAEDE56930E832E27A1BF098 /* RLMObject_Private.h in Headers */, - BBB1CD194E297BAA37CFD123061B115F /* RLMObjectBase.h in Headers */, - 123589EF77CC94E3DB23A66E163FAD50 /* RLMObjectBase_Dynamic.h in Headers */, - E8F0DF2DDF9C1B868502049F5697B1B3 /* RLMObjectBase_Private.h in Headers */, - D20706185CCE06311BC52F5D88043886 /* RLMObjectSchema.h in Headers */, - 4469ADED632AA9ADA4E183EFF41292D4 /* RLMObjectSchema_Private.h in Headers */, - D65B0395C3625D826A81E11E09958334 /* RLMObjectStore.h in Headers */, - 752AD7276EF51E47078A6200C0EFC2EB /* RLMOptionalBase.h in Headers */, - 758D9C3214D1BC73A0C0AA4E5F1AFF98 /* RLMPlatform.h in Headers */, - B1F5F7B19B98AF680B58BF4BABB39B7D /* RLMProperty.h in Headers */, - 5F7B2DF4CD087BC1344214E7F976A65D /* RLMProperty_Private.h in Headers */, - 1E20D87C9C128B995480EB4502E6F42F /* RLMRealm+Sync.h in Headers */, - 4C55E4D5CF1725F2C570B1A5B8B56320 /* RLMRealm.h in Headers */, - 7A888D4A0107A596E73C20D2AC20C975 /* RLMRealm_Dynamic.h in Headers */, - E8C0DF78157B9131B3FCA9229D1DCA7A /* RLMRealm_Private.h in Headers */, - 71AE7B44AB91ACD571CCE54CEC1716DE /* RLMRealmConfiguration+Sync.h in Headers */, - 0A80230BDD75CDE25A1A5653F674A5ED /* RLMRealmConfiguration.h in Headers */, - 47E85ACFC08532FE031994705F356B14 /* RLMRealmConfiguration_Private.h in Headers */, - 48705090D61E9B3693B3A08921BE5FF0 /* RLMResults.h in Headers */, - A53245120FA494D6FA9244A6A4D70662 /* RLMResults_Private.h in Headers */, - 2DAC38F7005E000DB86EAADF023A4A6A /* RLMSchema.h in Headers */, - 506EA8E43EC98ABFF09D00F4475A9CB9 /* RLMSchema_Private.h in Headers */, - F6A1123305738E07E1DA4B3E24B642FB /* RLMSyncConfiguration.h in Headers */, - D83FEFEE1A4B349DEF6E3E09E7DBE43E /* RLMSyncConfiguration_Private.h in Headers */, - 3AA54B98F2867F5336FBAEEDF7CD222E /* RLMSyncCredentials.h in Headers */, - 91C29956F0BB49E1EB471659C2FC16C4 /* RLMSyncManager.h in Headers */, - A94A72B4F0F7AF31713E35F123EA7E06 /* RLMSyncPermission.h in Headers */, - 01CD536F190B50AC03B098A3B7309858 /* RLMSyncSession.h in Headers */, - 41F622FF15EA87F8FC16CD9105F0261C /* RLMSyncSubscription.h in Headers */, - 448C635CB5900428BEBF3B822A3D33FC /* RLMSyncUser.h in Headers */, - 24172E9F24A73A791C3479ABA0A626CB /* RLMSyncUtil.h in Headers */, - B93062A59CD779C8346F250C3603B865 /* RLMSyncUtil_Private.h in Headers */, - 93EDED29EB7334811E2B65D0D50115D4 /* RLMThreadSafeReference.h in Headers */, + 3A3AFE1A757BED640641A681764DA0C5 /* Nuke-FLAnimatedImage-Plugin-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8016C380D2AA31E9AE8BE67F217DE78F /* Headers */ = { + B1C23CFF42C07086E0C81A88ABD19E58 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3C315099E99BEF8213B9E8E6B7AEFFB1 /* Nuke-FLAnimatedImage-Plugin-umbrella.h in Headers */, + E0FAB8B96409B42A667B7BAD4A4DB24D /* Pods-Rocket.Chat.ShareExtension-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97023CBD28AFFC8C44731BDFD299FD43 /* Headers */ = { + B52E21113EAC58768F8D3BA591A5A7BE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 827DCF2EADEEA402146F38BFD4CF367E /* Starscream-umbrella.h in Headers */, + 9C411B4528C3A714E857FF5FEF8B96F3 /* FIRAnalyticsConfiguration.h in Headers */, + 2F08644CD99BCA8D90EE229E1C2FDF0B /* FIRApp.h in Headers */, + F7A32A4D9929D64AE7D0FE015CB608C1 /* FIRAppAssociationRegistration.h in Headers */, + 3782323343DAB942A981C1C2C2ABFD98 /* FIRAppInternal.h in Headers */, + 790B9149B9FE8839F4155068D84E1C5B /* FIRBundleUtil.h in Headers */, + A7D686EC28B1C30C7A333C67CC870E75 /* FIRComponent.h in Headers */, + 43EB00B2E93114FE76CF69294C1E85B0 /* FIRComponentContainer.h in Headers */, + 7BE96B4C06D6752B23F916A6A583DA4C /* FIRComponentContainerInternal.h in Headers */, + 93D3598D01E59A6D3C2F787110C6A3CA /* FIRComponentType.h in Headers */, + D389B6BF7955AEDF4AF3FA87C7000A4E /* FIRConfiguration.h in Headers */, + 7BACEF537A99FEA712D11C139CE244C9 /* FIRConfigurationInternal.h in Headers */, + 58D541D5AEFD9540991A45C48647EAE2 /* FIRCoreDiagnosticsConnector.h in Headers */, + C16A9A82D2E420F0A4EB5062CD2502E6 /* FIRDependency.h in Headers */, + 74F84A2472A8B21025D88C203EE4ADAA /* FIRDiagnosticsData.h in Headers */, + 44923E845676BA7681DD9623E673F2B5 /* FirebaseCore-umbrella.h in Headers */, + A8A19DB4F202CF5BF4096E0D8650AEBC /* FirebaseCore.h in Headers */, + C41B85AD6A2AEA95B91814E8DF255DC3 /* FIRErrorCode.h in Headers */, + 322C10225ACDDC4CE1D889E34744EB5E /* FIRErrors.h in Headers */, + 77256B549BC01BB7CEE215980922F1A0 /* FIRLibrary.h in Headers */, + C681F3B58BCD37D3104C6C7881418AB5 /* FIRLogger.h in Headers */, + 9D5F19483EC40DC38AD364397B9D8B30 /* FIRLoggerLevel.h in Headers */, + F0A6CAC64FAE03A2F83012176D304839 /* FIROptions.h in Headers */, + 0B4862DD703C96406C2B679343C3CA3D /* FIROptionsInternal.h in Headers */, + D87CC1F85E685E59E25A6B495C2DCE22 /* FIRVersion.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B0083EE861DF5A11C9EDFE966C3904B3 /* Headers */ = { + BD8D746ADAE9EB3AD3D73E26D642327B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5C312CFCA91E2A2D59AAF6625AAF6A55 /* RCMarkdownParser-umbrella.h in Headers */, + A9F9B1DE5D9FD47B2FF7B8A71344A932 /* FirebaseInstanceID-umbrella.h in Headers */, + 11FD5A55A3E64582097B2C4730C24F22 /* FirebaseInstanceID.h in Headers */, + 361C5782D844A204CF6B13E69D7B44D0 /* FIRIMessageCode.h in Headers */, + BB9FB37A4779342B269450F3B601E659 /* FIRInstanceID+Private.h in Headers */, + 0393D6E6195EED4856A3F13F2E7B84E7 /* FIRInstanceID.h in Headers */, + 58FC172C7DC9A91FE0A27C72FF923535 /* FIRInstanceID_Private.h in Headers */, + 37C0D010FF6CA49957D4ADDC6970BD1A /* FIRInstanceIDAPNSInfo.h in Headers */, + 3267EBBB72FBB182A043C3E43768C870 /* FIRInstanceIDAuthKeyChain.h in Headers */, + 27F5C01CCFB5B8D3145AB8D455FFF438 /* FIRInstanceIDAuthService.h in Headers */, + DAB10EF42C23805FA1A1FD964811A882 /* FIRInstanceIDBackupExcludedPlist.h in Headers */, + 57B6987086694DA5A5B51A23877D3698 /* FIRInstanceIDCheckinPreferences+Internal.h in Headers */, + AAC884F848CB486A35551368DE4D47A7 /* FIRInstanceIDCheckinPreferences.h in Headers */, + 0E1AF0B56FCC8C7A4C5DF32FF75291F1 /* FIRInstanceIDCheckinPreferences_Private.h in Headers */, + D3CBEE07E5CA5525281C85A892FD4A32 /* FIRInstanceIDCheckinService.h in Headers */, + 0BB65C625526D201A383349928F6EF5D /* FIRInstanceIDCheckinStore.h in Headers */, + 8A98B93263A8DFFCABB518ED66EDAABA /* FIRInstanceIDCombinedHandler.h in Headers */, + B8BEE6D0FA9384324210F64089FF38EE /* FIRInstanceIDConstants.h in Headers */, + 12CE1FEDF1B92609934D44A003445836 /* FIRInstanceIDDefines.h in Headers */, + 1D281634F7D8F893AE1A0B1130BAAA74 /* FIRInstanceIDKeychain.h in Headers */, + 43A5C5D5E84BA31F1EF7D495C7426333 /* FIRInstanceIDKeyPair.h in Headers */, + 528371BB864297DEE7472735E56B2331 /* FIRInstanceIDKeyPairStore.h in Headers */, + 628C2523418829B6DEDC8138FBEACA55 /* FIRInstanceIDKeyPairUtilities.h in Headers */, + 3380BD78EEAC66DFFC3E9E4AFD9CFDE6 /* FIRInstanceIDLogger.h in Headers */, + 33B5186B970690E13E7830E819EB1A48 /* FIRInstanceIDStore.h in Headers */, + 99E08B2E09E7ED4E66129D577C2A46FE /* FIRInstanceIDStringEncoding.h in Headers */, + F6894655874926C81CAF72A726C83E34 /* FIRInstanceIDTokenDeleteOperation.h in Headers */, + 8CC2CD36861E3D63065B312F0BB7943A /* FIRInstanceIDTokenFetchOperation.h in Headers */, + 894FE910105FD69B8D6A0162444D6827 /* FIRInstanceIDTokenInfo.h in Headers */, + 7A872147C2975098B603DFC55906E35C /* FIRInstanceIDTokenManager.h in Headers */, + 5BFFDD1CBD652C01E079A17086228611 /* FIRInstanceIDTokenOperation+Private.h in Headers */, + 04BE452B9FFFF883F8EAA5E6BA4317C5 /* FIRInstanceIDTokenOperation.h in Headers */, + B257A8AC75FA183691545081262E9F9E /* FIRInstanceIDTokenStore.h in Headers */, + CE3E5E443C97140CDA51BC91FF3CBAB3 /* FIRInstanceIDURLQueryItem.h in Headers */, + 25A07B209512910047E6658C49A18A67 /* FIRInstanceIDUtilities.h in Headers */, + 5A63AF5727A3FDA1B1442C599295D3C9 /* FIRInstanceIDVersionUtilities.h in Headers */, + 02DAEBBA15B942AA01EE49579E252695 /* NSError+FIRInstanceID.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B683CE1650A209900CCE1909222F874A /* Headers */ = { + C303082AA5B595FD90ECD875152A81EA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 598EEE341D88B233B636878AA5606A06 /* SwiftyJSON-umbrella.h in Headers */, + CE325242CBFE73E7C9AD3970F2F18571 /* SwiftyJSON-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B773FA45BE9E9449204162E235564AE2 /* Headers */ = { + D0A79451E43A3D61E6A8E028B026A24C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7EDDC2BA4FCCC6CFB2B4354F9F16D55D /* RocketChatViewController-umbrella.h in Headers */, + FFE336CB04E30C64EA811504AC692786 /* RealmSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D1D68A537B5888C822EFFA51D7A915EC /* Headers */ = { + DB96A9A8A37AA14B3E51E4DD23026E41 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6B6ACE5AFDC3B2818AE4838FF3A099C8 /* semver-umbrella.h in Headers */, + BBC4928BC49E59CB07CEDE04D09AF14A /* DifferenceKit-Core-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F94C97286099F2FDF7700FAED5B13896 /* Headers */ = { + E2D4E811094420B20C0FBC1C5BB1FDDD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4D4FA0AC61BBB9B1CBEAC33FAC86882C /* FIRAnalyticsConfiguration+Internal.h in Headers */, - B5AC98CC1085644465F733DAAA849856 /* FIRAnalyticsConfiguration.h in Headers */, - BE85285C92AB8A1827E07188FE4D217E /* FIRApp.h in Headers */, - C9C47AB435D3FAA18BF92BB3D204C560 /* FIRAppAssociationRegistration.h in Headers */, - 7552CF602EC571629DD99A7279679555 /* FIRAppInternal.h in Headers */, - C35F8FA74CB4D286BDBB8B53BB81246E /* FIRBundleUtil.h in Headers */, - CDD613052E7D42F067D604B6FA368E42 /* FIRComponent.h in Headers */, - FCCDCDA15A9CF39EFCAEA6E64FB308F6 /* FIRComponentContainer.h in Headers */, - ADFBB078F4C92583E61F12F09C297143 /* FIRComponentContainerInternal.h in Headers */, - 7845C3BCE647A0DA5BA10B52A29DFFF8 /* FIRComponentRegistrant.h in Headers */, - 489A077ED9845FD3E11E5D0A9F25DEB6 /* FIRComponentType.h in Headers */, - EF9D5680B8359C088BE67637D41938A9 /* FIRConfiguration.h in Headers */, - F10FEBD6CB2795D46702471B6D06BC1C /* FIRCoreConfigurable.h in Headers */, - B94B072D52B97B5DF6B4A826331358E6 /* FIRDependency.h in Headers */, - 80CB112CDED87FAFE95457037B22A6F5 /* FirebaseCore-umbrella.h in Headers */, - F05AE0983814749F63B571C1872B34CC /* FirebaseCore.h in Headers */, - 0B4264321E0030FCA02F837B6DE12EF7 /* FIRErrorCode.h in Headers */, - B6553CB632A55750444FC0E1B49C6AAC /* FIRErrors.h in Headers */, - B3E63BDE477F8B822A46D70FB51C1C2F /* FIRLogger.h in Headers */, - D3BF89154FA7D53A91376AA37F856A38 /* FIRLoggerLevel.h in Headers */, - 6671275F5692626BEE91781A799EAE36 /* FIROptions.h in Headers */, - BF30826D883BAAE122E11E7DDDE0651E /* FIROptionsInternal.h in Headers */, - 9CE3B1A3091D17A00FB99755A5DA978F /* FIRVersion.h in Headers */, + D9AE56055CEDEB3D81BB3365029027A8 /* semver-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 088C502077FC6305966DF84EEC3A4A07 /* FLEX */ = { - isa = PBXNativeTarget; - buildConfigurationList = C32F3352D6B0397F2A6A6B1E2EE6DEC0 /* Build configuration list for PBXNativeTarget "FLEX" */; - buildPhases = ( - 352A209DF785F327E0E86771FB01472C /* Headers */, - CE99DE0ACAFF5827CE98E3027B285775 /* Sources */, - 9568E199E88BB65BF0BDFB47D864B57F /* Frameworks */, - 0B51D5D5B5721691C90EF53A3CEAB7AA /* Resources */, + E7E99545CAE361F5766075C88A0AFCB3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C21F1FF71A6122E0B7FB999ED0899F62 /* SwipeCellKit-umbrella.h in Headers */, ); - buildRules = ( + runOnlyForDeploymentPostprocessing = 0; + }; + EC1737D025C98A12CCE86406337F3EFB /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 49622E342E8DAFD856DED6D956E1B37C /* 1PasswordExtension-umbrella.h in Headers */, + 7FB5B01D7562A4BB6780DC7688D49DD1 /* OnePasswordExtension.h in Headers */, ); - dependencies = ( + runOnlyForDeploymentPostprocessing = 0; + }; + EE5697A1D11598083B008CF05251DCD9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9BC0B1DEA0B30DB4694C52AB66A300F6 /* Pods-Rocket.ChatTests-umbrella.h in Headers */, ); - name = FLEX; - productName = FLEX; - productReference = 0FD41C816E41BA7B1E1EFF433F297298 /* FLEX.framework */; - productType = "com.apple.product-type.framework"; + runOnlyForDeploymentPostprocessing = 0; + }; + F0F541BD0A2EB63616D1FF3473397F2A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A6FC9EFA23E6FCB176E913906F72A408 /* RocketChatViewController-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FDF6297D5C8E6A11E70C61652E38D7C3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ABBB92852A1586173B6E53FF681DC9E3 /* Nuke-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; }; - 237BDF70A0D24421463790971334A771 /* Realm */ = { +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0601E30DD8EB3E5C4CA86433D77ED08C /* RocketChatViewController */ = { isa = PBXNativeTarget; - buildConfigurationList = CBAD6CAFA663881CF0EA84568EBBC24A /* Build configuration list for PBXNativeTarget "Realm" */; + buildConfigurationList = 715537C4EF8102E39FB6086EA43A7EB2 /* Build configuration list for PBXNativeTarget "RocketChatViewController" */; buildPhases = ( - 7E9B39EE3070C25E98C00B86431F62B5 /* Headers */, - C32B4A537763849F6AAD5E9B2D2FA557 /* Sources */, - FC5743D25AE1E8A5ADD4594AA0F1241D /* Frameworks */, - 934864493B0FD35F625412A12EDB63B8 /* Resources */, - 8A068DB994824A092FB2D1D7411BDD0A /* Copy . Private Headers */, - 610DD2B1048A56B5F23F8CFE1365A1BA /* Copy . Public Headers */, + C95967F40FB417D51513B0A2207B11B3 /* Sources */, + 2D61AB9AD72456ADA1D6004D4C22D8AC /* Frameworks */, + FD4C072CDC96CDCA345A9C021C76D84B /* Resources */, + F0F541BD0A2EB63616D1FF3473397F2A /* Headers */, ); buildRules = ( ); dependencies = ( + 863EB6C54BB477ABAF4276606381A0D7 /* PBXTargetDependency */, ); - name = Realm; - productName = Realm; - productReference = 8170A6895172754BC2C0FC4295139A7C /* Realm.framework */; + name = RocketChatViewController; + productName = RocketChatViewController; + productReference = 35A34967BD2FE519E355E26DC9CD04E1 /* RocketChatViewController.framework */; productType = "com.apple.product-type.framework"; }; - 293E484C14E8255A78D47D2E48DDFCEE /* Nuke-FLAnimatedImage-Plugin */ = { + 0C9B6293E2C60B3B502A97DB9F4A09AF /* SwiftyJSON */ = { isa = PBXNativeTarget; - buildConfigurationList = C6FD64E407A4321D580B721FC19399E4 /* Build configuration list for PBXNativeTarget "Nuke-FLAnimatedImage-Plugin" */; + buildConfigurationList = 8534B40BB0781C31F1980CAFE096E1CE /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; buildPhases = ( - 8016C380D2AA31E9AE8BE67F217DE78F /* Headers */, - 8518E1B08634A95E41906B81537DA67A /* Sources */, - 0F7C4FE71F482C3560B5A5C015605796 /* Frameworks */, - BF796A3D96E996893D1D8B536A8FE419 /* Resources */, + 26F9AAFE1D303854BAEE10CE036B6DA3 /* Sources */, + 5C4FDA4EC9995FA6682FAEC518654F3A /* Frameworks */, + C303082AA5B595FD90ECD875152A81EA /* Headers */, ); buildRules = ( ); dependencies = ( - 0007F6E3D40256C2CE0E79CC622EA17E /* PBXTargetDependency */, - F23E7E0F1E8F0E4381B882989CC906C7 /* PBXTargetDependency */, ); - name = "Nuke-FLAnimatedImage-Plugin"; - productName = "Nuke-FLAnimatedImage-Plugin"; - productReference = 6A6563001F6677C6838FA34CAE1ED7CE /* NukeFLAnimatedImagePlugin.framework */; + name = SwiftyJSON; + productName = SwiftyJSON; + productReference = 7608A9C444EFF50ED52ABDB083991790 /* SwiftyJSON.framework */; productType = "com.apple.product-type.framework"; }; - 55FA0B285608509C58926F57847AB4D2 /* RocketChatViewController */ = { + 0DF9FEC4D52DBD2F86898986EC1B46AE /* Nuke */ = { isa = PBXNativeTarget; - buildConfigurationList = FE97C8AE94FFF4C4EA91791A6715F39E /* Build configuration list for PBXNativeTarget "RocketChatViewController" */; + buildConfigurationList = 705E06941BC4ED95A27F87E234E74A7A /* Build configuration list for PBXNativeTarget "Nuke" */; buildPhases = ( - B773FA45BE9E9449204162E235564AE2 /* Headers */, - 05B8704079FC0E43AE8CE19D0FED65E4 /* Sources */, - D5C9F275FC21EA77572820DB7BD33E69 /* Frameworks */, - 46F5CCABD108AF4E89BB81E75497F411 /* Resources */, + E018CF8C2E3557165D060176899639C8 /* Sources */, + 857F54CD8C20774B70F90B782E8D9C20 /* Frameworks */, + FDF6297D5C8E6A11E70C61652E38D7C3 /* Headers */, ); buildRules = ( ); dependencies = ( - 4D203B7EA715687047E2C4DE6C2381AA /* PBXTargetDependency */, ); - name = RocketChatViewController; - productName = RocketChatViewController; - productReference = F02E4923AA8BA2A60B7102235BBBF041 /* RocketChatViewController.framework */; + name = Nuke; + productName = Nuke; + productReference = 17CD0BD73C60F4266510F73C01780F32 /* Nuke.framework */; productType = "com.apple.product-type.framework"; }; - 6551B0A997F3C3EC1BF5CCCE8C9D7640 /* FirebaseCore */ = { + 0FB10C95F9BBD21C45E9DD56E9DE66DC /* Realm */ = { isa = PBXNativeTarget; - buildConfigurationList = FE6A7EC140C75FD423DF824124DA7DE2 /* Build configuration list for PBXNativeTarget "FirebaseCore" */; + buildConfigurationList = 3FC7BD8565574E1ED9727A77FFD159A5 /* Build configuration list for PBXNativeTarget "Realm" */; buildPhases = ( - F94C97286099F2FDF7700FAED5B13896 /* Headers */, - B8C5F94059FFB14689EE5164B85F80AA /* Sources */, - 5BA6F6B79A71277267409AF5669FC85A /* Frameworks */, - 5DDB33024A14322E4B611CDE86696C7C /* Resources */, + FE539DCF935D89F65D7BD5C9813BB8DE /* Sources */, + 0064D6465B15BEE77CC61A625665FF1C /* Frameworks */, + 8862B042C79CAF0063C344496BE8DD53 /* Headers */, + 99AD7BB8436B432F5718728916C9A6A4 /* Copy . Private Headers */, + 6ADD8EF58AAB0FCCCDF3A3FD3854B462 /* Copy . Public Headers */, ); buildRules = ( ); dependencies = ( - BEE399DC17F9BF96F75C9BA7443F2CF4 /* PBXTargetDependency */, ); - name = FirebaseCore; - productName = FirebaseCore; - productReference = 9245C86C37ED898BB7ADF27826C44AB1 /* FirebaseCore.framework */; + name = Realm; + productName = Realm; + productReference = 9694333BF52AAEFFD514D14D9CE8D9EE /* Realm.framework */; productType = "com.apple.product-type.framework"; }; - 6EB25B8A3C04F51C8B687957379623B1 /* MobilePlayer-MobilePlayer */ = { + 1067FA952B76EED7AA2A52057C7B7DB4 /* GoogleDataTransportCCTSupport */ = { isa = PBXNativeTarget; - buildConfigurationList = C15A433072C5C99FD40CD59F25EC2F7A /* Build configuration list for PBXNativeTarget "MobilePlayer-MobilePlayer" */; + buildConfigurationList = 64CB2B048D941429610D5519E317C261 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */; buildPhases = ( - E2902D96AE15D2DCF35F6F3A0021B49F /* Sources */, - 1EEF144745A439E446D012D01E530462 /* Frameworks */, - 541A464EFDFA37BFEACA856D5F2431FD /* Resources */, + B85FCB1976B1D7737F44BF1F77E0CBEC /* Sources */, + 8B950A88A3692B5F6D08448185D6257A /* Frameworks */, + 5FB69F1A31A56B65CDA5C8C202A6047A /* Headers */, ); buildRules = ( ); dependencies = ( + 1D856DD5928EC04E8EF9621817C5658D /* PBXTargetDependency */, + 9DB4EA14BC0A06FA74AE65B9FCE99F30 /* PBXTargetDependency */, ); - name = "MobilePlayer-MobilePlayer"; - productName = "MobilePlayer-MobilePlayer"; - productReference = 06AE42FD103B3E8D76E34A202487932C /* MobilePlayer.bundle */; - productType = "com.apple.product-type.bundle"; + name = GoogleDataTransportCCTSupport; + productName = GoogleDataTransportCCTSupport; + productReference = ED332F3F26F8A59AF2F976C03C715A58 /* GoogleDataTransportCCTSupport.framework */; + productType = "com.apple.product-type.framework"; }; - 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */ = { + 2AB60AD2BB457972974FA9AAFA9A09DF /* Pods-Rocket.Chat */ = { isa = PBXNativeTarget; - buildConfigurationList = 49F29959A61B0E6C5A781DE864C87B28 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */; + buildConfigurationList = 7E4301AC612ADA2946E593D492190F69 /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat" */; buildPhases = ( - 1ABCB2E3F57F5496D12016D6D334ED04 /* Headers */, - F321B328F1A4758F0DC549DCADFC380C /* Sources */, - F66849DE9A6B21D59F76B3F268DCC5A9 /* Frameworks */, - CD33B80DA10EE5F9606AFC53ABB3C7E5 /* Resources */, + 7AED59679A2B1CD200C0DC1B1DE546A7 /* Sources */, + F3B36BE4FF2FB22AEFEF60935199D70E /* Frameworks */, + 52E8DEBF6DC9AAE346A47F416CAB63A3 /* Headers */, ); buildRules = ( ); dependencies = ( + 7D31B8A6D6DCAF7CD50555F70FF530D7 /* PBXTargetDependency */, + 5A9A54376F552C2AC9035F8B285B28F6 /* PBXTargetDependency */, + 87745821C14F772EEED0EAEFA3C0D00E /* PBXTargetDependency */, + F6D03276A4957C28680C67F02D8F0B68 /* PBXTargetDependency */, + 51EAC94925D4153B5D2ABF31972063A0 /* PBXTargetDependency */, + 941A403BA86624E9A700761031ABE7A2 /* PBXTargetDependency */, + 1AEF2A2C8B387E41AAE3F6365CB4B9D4 /* PBXTargetDependency */, + BE0847AE1AE4CB4B6B999A6D56959D13 /* PBXTargetDependency */, + 6AAA1A1CACFDE8D6FA02507E32C474D8 /* PBXTargetDependency */, + 141A66068D669654C053C0AD69DAFE82 /* PBXTargetDependency */, + 69FFAB8C5DFA39938E83FA9A0B6D8B75 /* PBXTargetDependency */, + D2255FF01FAA15A5E6C15637C2E673FD /* PBXTargetDependency */, + 3F96DBD810BBABD2B68E93C0F7DD0673 /* PBXTargetDependency */, + 64B5591A33CBB7B9CEE97BFAC46F88F2 /* PBXTargetDependency */, + 6DA11BC9389C8334406EDF4657AEB8F8 /* PBXTargetDependency */, + D1B870E5E57A5380E961B884186E79DF /* PBXTargetDependency */, + AFFC2404E11ECFB737FA124B9D762882 /* PBXTargetDependency */, + 3002E70741907E064EE7CB7977DFB943 /* PBXTargetDependency */, + 888424751E773A6613DAAD309DBEEA4A /* PBXTargetDependency */, + 8AF160165C90A3AF03A4833DE9F078B8 /* PBXTargetDependency */, + 2AE8F3E22DE536429ADCF3E71C78E6D0 /* PBXTargetDependency */, + 9155EAC2882C31CA1EDEF97896133DFC /* PBXTargetDependency */, + 70D9937E880F8439F7A938A056197C4B /* PBXTargetDependency */, + 409C073A0373608F3F249B70823E4D84 /* PBXTargetDependency */, + 03E6E700B28B16F9B495D10AFFC739C7 /* PBXTargetDependency */, + 760C807B95ABD84879E1D89FF2CB5BEF /* PBXTargetDependency */, + 857B9CA83EC749E77DAB1EAFCE4AFB3C /* PBXTargetDependency */, ); - name = GoogleUtilities; - productName = GoogleUtilities; - productReference = 96C4B139AE5D41F6AD9C1B27401E4D33 /* GoogleUtilities.framework */; + name = "Pods-Rocket.Chat"; + productName = "Pods-Rocket.Chat"; + productReference = 7D04A209DDA5CEA846E43E77126A28EC /* Pods_Rocket_Chat.framework */; productType = "com.apple.product-type.framework"; }; - 7A00110467ACE628B80ABBD9F1E83698 /* 1PasswordExtension-OnePasswordExtensionResources */ = { + 37515DB33E76B4A4B1E375D2075F615C /* DifferenceKit-Core */ = { isa = PBXNativeTarget; - buildConfigurationList = 97C3DC00BE1AF29667450F23D8A82035 /* Build configuration list for PBXNativeTarget "1PasswordExtension-OnePasswordExtensionResources" */; + buildConfigurationList = 1B539D08FAB12201BB5AC6FB5FBD91E2 /* Build configuration list for PBXNativeTarget "DifferenceKit-Core" */; buildPhases = ( - 576B7A0B54C0BFCFFE866B43B6DB1372 /* Sources */, - 5981AD4E3057663B5B3E5E163F1CDC8B /* Frameworks */, - FAF6605C0AAC4699B666F4C73FE3575E /* Resources */, + F36A8EEA289C2B44D812EBA847BFDEC7 /* Sources */, + 3510A55A0E917F2A06164DB6CB84DF8E /* Frameworks */, + DB96A9A8A37AA14B3E51E4DD23026E41 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "1PasswordExtension-OnePasswordExtensionResources"; - productName = "1PasswordExtension-OnePasswordExtensionResources"; - productReference = 86E28611DC9981BAB3D3104D0771EC30 /* OnePasswordExtensionResources.bundle */; - productType = "com.apple.product-type.bundle"; + name = "DifferenceKit-Core"; + productName = "DifferenceKit-Core"; + productReference = 3F873F09E5A016714EE5E7E93A94181B /* DifferenceKit.framework */; + productType = "com.apple.product-type.framework"; }; - 953D6B6C4F9743C91652F04F3FFF0B87 /* Pods-Rocket.ChatTests */ = { + 3C68CBEBC7AA24BEECA1BAE10D69B4F7 /* FirebaseCore */ = { isa = PBXNativeTarget; - buildConfigurationList = FE3B5546138661EA89723361CB383EDB /* Build configuration list for PBXNativeTarget "Pods-Rocket.ChatTests" */; + buildConfigurationList = CD9CC339D2DB851A1E09F0FBEA5DEF19 /* Build configuration list for PBXNativeTarget "FirebaseCore" */; buildPhases = ( - 1F99CE2DC4BA67FBD85A28C108C2DE72 /* Headers */, - 51A762ED0A60A7C90DEC02D24CC9E327 /* Sources */, - 79F9157BA4A4D06676E00A987E3A176A /* Frameworks */, - 083F8C71E6E6D73698116F0BB8546C5D /* Resources */, + B0EFAA309C6AE435054F6E064DAE316E /* Sources */, + E8F23A2934F983831941BF1EDCB03941 /* Frameworks */, + B52E21113EAC58768F8D3BA591A5A7BE /* Headers */, ); buildRules = ( ); dependencies = ( - 41B643D7989BD274DE523E1A709A2B9F /* PBXTargetDependency */, - B674AFD5A82C0534A3D4AE73E986D5E5 /* PBXTargetDependency */, - F930BC0647FF4EB7BD3732DD7DC577A3 /* PBXTargetDependency */, - B265C2BDC0B25AB07FDA1168DC024B52 /* PBXTargetDependency */, - E1003DFD256155A018B7C86AA82F9BEC /* PBXTargetDependency */, - 1836D1F803B964C19AC3F6ACC35468E0 /* PBXTargetDependency */, - 7B9CB15A995843E735CA29E9192F22B9 /* PBXTargetDependency */, - B935DBAFC633CCF0785C37908222B1C9 /* PBXTargetDependency */, - F40FD687EB51A9C628E6C3E1BE71710F /* PBXTargetDependency */, - 2B56C7F52225BAEC1F99BE0A67EB8E89 /* PBXTargetDependency */, - 06E7D7A69D56496CEC710AF9DE382249 /* PBXTargetDependency */, - EBA68183F4A6D96BB94EADB6203DDCB5 /* PBXTargetDependency */, - A8D008281697A90524F63A8BE017D239 /* PBXTargetDependency */, - 64B95277B4B762756E733CFB055CAEA0 /* PBXTargetDependency */, - C68C638FF6450E5E4828D22C17EDB966 /* PBXTargetDependency */, - 401BEFE8502B312E0DEBFCAC497517BC /* PBXTargetDependency */, - B4F7016FEB02AD5B1D305DD1E5FCF8EC /* PBXTargetDependency */, - BB35E64FC03C03907243656D91A59770 /* PBXTargetDependency */, - 3593C876F019495EA9C4FBFBF292E9FE /* PBXTargetDependency */, - 31C2DAFDF39127020B0B70FCB9A8640B /* PBXTargetDependency */, - E7D104F76ACD948518733CC46551B907 /* PBXTargetDependency */, - 5BC3513BA4F563CCEAA4509AA95A2DC0 /* PBXTargetDependency */, - 81833D006597D9A659C1A39E0A9A536F /* PBXTargetDependency */, - 67AC8CF1B7CBFDE193B57DC918C46140 /* PBXTargetDependency */, - 0496F68345848B5A476F2A9A9043A991 /* PBXTargetDependency */, - 7BDAB889838AF36D5971EE4CBCD7E79D /* PBXTargetDependency */, - 364BE18AB4EA8ACA6F5F9D9C0FDE4050 /* PBXTargetDependency */, - 9E2F849DCB4A4B0E88227A8B7F3006A8 /* PBXTargetDependency */, - 7EA0CEC6D7EE39EAFCF4AA9287BE73E7 /* PBXTargetDependency */, + F3B00FFC598E683282D87EAE079D24AA /* PBXTargetDependency */, + F62504D601F3F10F82D760FA38423A18 /* PBXTargetDependency */, + 427A7E7989FBB993CB603019205E5C2D /* PBXTargetDependency */, + 34AD780FB98F421609EA125BE2D06B7C /* PBXTargetDependency */, + CB5917DFEB1C2DF97B4DA2DF9A07258E /* PBXTargetDependency */, ); - name = "Pods-Rocket.ChatTests"; - productName = "Pods-Rocket.ChatTests"; - productReference = 79F74E975F25D66AF4EE31BDC2BB014D /* Pods_Rocket_ChatTests.framework */; + name = FirebaseCore; + productName = FirebaseCore; + productReference = D4086735641EDAE97236BA5507BFFD04 /* FirebaseCore.framework */; productType = "com.apple.product-type.framework"; }; - 995313EC42D812DEC94B33A8FE4F0344 /* OAuthSwift */ = { + 4548FD0F52098CA90D3A62745F0C1474 /* RealmSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = D8B51182B2BE673D4A1278B1F96BEE7C /* Build configuration list for PBXNativeTarget "OAuthSwift" */; + buildConfigurationList = 1B0388AC1C1E059695D69EA11ED72212 /* Build configuration list for PBXNativeTarget "RealmSwift" */; buildPhases = ( - 413986AD0254FB27506624320FC91917 /* Headers */, - 03BA7177E344B35F0307732B1BC06030 /* Sources */, - 91A430840F6A40C492266172A21A2E5F /* Frameworks */, - B9017D4000EE1984F3F4B7DD029496B1 /* Resources */, + 0BBAD4329BBE79F2132EFCC0B393FB0D /* Sources */, + 4BF6F140E118E562527518FAF71B482B /* Frameworks */, + D0A79451E43A3D61E6A8E028B026A24C /* Headers */, ); buildRules = ( ); dependencies = ( + 86F58552650238DF3C0BD422F0812DA8 /* PBXTargetDependency */, ); - name = OAuthSwift; - productName = OAuthSwift; - productReference = E894CF72E1DE32F26F27AAF4E9D74203 /* OAuthSwift.framework */; + name = RealmSwift; + productName = RealmSwift; + productReference = 7527C818345BFC0DA6BF4609B55BF949 /* RealmSwift.framework */; productType = "com.apple.product-type.framework"; }; - 9C1854A0145F43E74B79C3F491E94E2E /* MBProgressHUD */ = { + 4C3273A2EE32D443B1674EC3AFABCDF7 /* Pods-Rocket.ChatTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 2978AB4F2BF6E60BAD758D4C0CDDF9EA /* Build configuration list for PBXNativeTarget "MBProgressHUD" */; + buildConfigurationList = 1AFFE5DAABFFCAEDFB5D479E0C61A2F0 /* Build configuration list for PBXNativeTarget "Pods-Rocket.ChatTests" */; buildPhases = ( - 0D8826FB0F965214227358BE2748C43B /* Headers */, - C8A218568A3E9FE62AF65BE1C51A0BC0 /* Sources */, - 0A421EC8DEE0FDA89C91D44D769490A8 /* Frameworks */, - 50EBBD21311C4589260D548530F64441 /* Resources */, + 5DACF46DFCFF433FE6089108A92CD4DE /* Sources */, + A48C46A1A4A72F44F8507F8D35735F72 /* Frameworks */, + EE5697A1D11598083B008CF05251DCD9 /* Headers */, ); buildRules = ( ); dependencies = ( + 69FCFC91E3C6057F696F84CB6E18980E /* PBXTargetDependency */, + 0793ECA0354B0D28EE66726A2ACFBD7C /* PBXTargetDependency */, + 7CED5939A8442A05DBC190C218338CF2 /* PBXTargetDependency */, + 0DBD21B4712E14329533A222EA9B3E74 /* PBXTargetDependency */, + C9E858F4707A1F40D555B0C273AFFDF8 /* PBXTargetDependency */, + 8A3FE8F94A301BCF167AFF2B54F1D6F1 /* PBXTargetDependency */, + 1DFF8D48C301D70B2396438F507959D2 /* PBXTargetDependency */, + 7716C8D84733708FF57F092D2AF3FDF2 /* PBXTargetDependency */, + 0E8E80B742CFE390953BC7B3F41A0930 /* PBXTargetDependency */, + 8CC06234AA31EF2041846DA75DB51F1F /* PBXTargetDependency */, + 8DAD96D57944696EA459F6D75ABBE5E0 /* PBXTargetDependency */, + 728F8B4891C9476B7384D1F53844E02D /* PBXTargetDependency */, + D236E153006C7F9D44DAAE0BC9EA9009 /* PBXTargetDependency */, + 26CAFE8FF94BE59ACC6CA1D67B12C9E6 /* PBXTargetDependency */, + 8FEA9BC05709484AEBB922B77370861F /* PBXTargetDependency */, + F93355A96DEE062557D9E23E5B8E0DF7 /* PBXTargetDependency */, + E3AD33E3714246A4D2F8D949F693B93E /* PBXTargetDependency */, + 6C14CD3303D477B7A6CE700A5A6EB694 /* PBXTargetDependency */, + 022752A1AAE02C7765BF3DD2536B8F0D /* PBXTargetDependency */, + C91695DA8F92FA718D2621BF250DD0FA /* PBXTargetDependency */, + 9F87F84D666375813EFC9CA9996B2B54 /* PBXTargetDependency */, + 2F2387A64119608BBEDD74A6EB5FDB43 /* PBXTargetDependency */, + 9BFCEBEEA98E07DA0FBA3CBD5B7A7291 /* PBXTargetDependency */, + 332415263132486F47785C7A2B271893 /* PBXTargetDependency */, + 5F980407AA9FD970F79152E0E794B0AE /* PBXTargetDependency */, + D466CD57E0A96C9894680D724BFAF4FC /* PBXTargetDependency */, ); - name = MBProgressHUD; - productName = MBProgressHUD; - productReference = 8D58035EB17E6B53CAE166DBFEEF18AA /* MBProgressHUD.framework */; + name = "Pods-Rocket.ChatTests"; + productName = "Pods-Rocket.ChatTests"; + productReference = 1C09E3612D2D8CF46BE2E4F0DF3DEA59 /* Pods_Rocket_ChatTests.framework */; productType = "com.apple.product-type.framework"; }; - A1A0FE2A9E90F5B42D68DD55E0C304C7 /* Nuke */ = { + 67FE5E457C21DEAD34748941C5B15AD4 /* SimpleImageViewer */ = { isa = PBXNativeTarget; - buildConfigurationList = 8EDAE7E1598DBD84B64F6E6498E0F85C /* Build configuration list for PBXNativeTarget "Nuke" */; + buildConfigurationList = 8B26E6AAC899384D8A2354AAB5161043 /* Build configuration list for PBXNativeTarget "SimpleImageViewer" */; buildPhases = ( - 6C9BC0E1EBB029CCF9FCF9BCA3DCCABA /* Headers */, - A2CF0DE37F4BBE8E8FFC2F36F4F6F709 /* Sources */, - 45D5E87A5D14BAF389FF2AC9053451D9 /* Frameworks */, - E9E4F9C2F7538965A493A2CFD847A2C0 /* Resources */, + 4F60C0BD5C930697E98948D3191DD9F1 /* Sources */, + 8761CADA4178C8116CC4E44CDADE9025 /* Frameworks */, + 486F8AA6A4D553829CB662FA15CC2ACB /* Resources */, + 7AC570866190524BA674F296D266E7AC /* Headers */, ); buildRules = ( ); dependencies = ( + 9F5F4FB1A2A507FF9509B86758B729F0 /* PBXTargetDependency */, ); - name = Nuke; - productName = Nuke; - productReference = 88FD033FABB3575F75034CDA0A9DD622 /* Nuke.framework */; + name = SimpleImageViewer; + productName = SimpleImageViewer; + productReference = 80E7CC2FD823AC8FD597FFED0A80973E /* SimpleImageViewer.framework */; productType = "com.apple.product-type.framework"; }; - A5F394DBBF164FD98BF2BF258D2CDFCE /* RCMarkdownParser */ = { + 7564F88B01F601AAC832E1AD63849278 /* RCMarkdownParser */ = { isa = PBXNativeTarget; - buildConfigurationList = A4B9EA0B5956BE2E93377A614E26B3D7 /* Build configuration list for PBXNativeTarget "RCMarkdownParser" */; + buildConfigurationList = B04DB583F7E18BE779CB8A6586DDA5B3 /* Build configuration list for PBXNativeTarget "RCMarkdownParser" */; buildPhases = ( - B0083EE861DF5A11C9EDFE966C3904B3 /* Headers */, - 7BE049FF0C154DE7A97382330A3739D8 /* Sources */, - 14442E112E97BB6840FE5DF52B45CCD0 /* Frameworks */, - 6C2C6EA2FA398BC21C303171F28C2DA7 /* Resources */, + D237BC6832D1B9432478389DF8B4358D /* Sources */, + 8953F1CD95B5BF59E5E9C48153772B39 /* Frameworks */, + 82ACA04FE464E6C15AC2B8755B68AA4B /* Headers */, ); buildRules = ( ); @@ -4665,1688 +5193,1692 @@ ); name = RCMarkdownParser; productName = RCMarkdownParser; - productReference = B6DDD21F074DFD96EB8ABAB263DB4E6C /* RCMarkdownParser.framework */; + productReference = FCD052E01656B22F5D5849A972D69AD2 /* RCMarkdownParser.framework */; productType = "com.apple.product-type.framework"; }; - A8A5A77D99AF2642C050686191AAC5A6 /* SwiftyJSON */ = { + 7A188CE4BDA89D941184C4CC4C426B07 /* FirebaseInstanceID */ = { isa = PBXNativeTarget; - buildConfigurationList = C49F295716093132A8EF9546961E78DC /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; + buildConfigurationList = 07E35ECA243195415ED1C04788CAE2D5 /* Build configuration list for PBXNativeTarget "FirebaseInstanceID" */; buildPhases = ( - B683CE1650A209900CCE1909222F874A /* Headers */, - 23C9ADA91397B21678E1D274FF34B223 /* Sources */, - 5DEBA221972F7BB333232617B97DD5AD /* Frameworks */, - 1F83A017C53DE0B81138522D5D274170 /* Resources */, + 337D64CDB4D5B3ECB4CAE13E78FAC979 /* Sources */, + 818B1AF4FAAED24F998A0FD811659EF9 /* Frameworks */, + BD8D746ADAE9EB3AD3D73E26D642327B /* Headers */, ); buildRules = ( ); dependencies = ( + 83222C5AE4419F2E7C17E676911925CD /* PBXTargetDependency */, + 8FAAF0EDE14A76D54CC39E0D033BAFBC /* PBXTargetDependency */, + BA07E4678CC3DB09AFAE0907B6BB2A52 /* PBXTargetDependency */, + A07B587C6D80CFAE2D5778102D9F58EE /* PBXTargetDependency */, + D7382052AED63DB19505A579FE78840E /* PBXTargetDependency */, + 8950691962ABCB24B59896F7A4DBE5AC /* PBXTargetDependency */, ); - name = SwiftyJSON; - productName = SwiftyJSON; - productReference = 27EF820450FAEBE475C6DC9E68CBA178 /* SwiftyJSON.framework */; + name = FirebaseInstanceID; + productName = FirebaseInstanceID; + productReference = C0C678A19E7DA05B9FD127F0BE66CF7E /* FirebaseInstanceID.framework */; productType = "com.apple.product-type.framework"; }; - AA61720B36F74B4975EDA51370C03FB8 /* nanopb */ = { + 80E23AABF0943180B6599EA449C2CEF2 /* MobilePlayer */ = { isa = PBXNativeTarget; - buildConfigurationList = C55E7B2F4E71AF69D0207E11170066CE /* Build configuration list for PBXNativeTarget "nanopb" */; + buildConfigurationList = 7A2512EC44583CD3610366878EF64565 /* Build configuration list for PBXNativeTarget "MobilePlayer" */; buildPhases = ( - 07ACA4B7D14FB73E53579EA2729E8A43 /* Headers */, - 6A53C67BA00EC1E84F73DB71041FC8C1 /* Sources */, - 599A5BA62AAAC02F1EACE1B6813F0EC4 /* Frameworks */, - 2FCE915E646A35A58A481C79AEF4695E /* Resources */, + 462E7C81F1BA710FADE6CD391D70770F /* Sources */, + B6F6BC02A433BA97CF27C38473E0FD67 /* Frameworks */, + FCA2590A03E35F2873983434E2339690 /* Resources */, + 6D7CFD135EBDE03EBE972A6E10AE3204 /* Headers */, ); buildRules = ( ); dependencies = ( + 2ADEEC664296594B03A9B1287E0BB4AC /* PBXTargetDependency */, ); - name = nanopb; - productName = nanopb; - productReference = 29C08D42462D83C95524290184CE65D3 /* nanopb.framework */; + name = MobilePlayer; + productName = MobilePlayer; + productReference = 6929B5C2D09D7D72BBF19F56C05EC210 /* MobilePlayer.framework */; productType = "com.apple.product-type.framework"; }; - BDC9D0A453E0589198E53EF71AF3A6B1 /* SimpleImageViewer */ = { + 81E27232DC00A881ACF75C7B5F193333 /* MobilePlayer-MobilePlayer */ = { isa = PBXNativeTarget; - buildConfigurationList = B1EE5FD8D4F29BB28433CF42D02E33D2 /* Build configuration list for PBXNativeTarget "SimpleImageViewer" */; + buildConfigurationList = 0F27EE18CE5F07F745FA31A9A8D8FBF6 /* Build configuration list for PBXNativeTarget "MobilePlayer-MobilePlayer" */; buildPhases = ( - 68B098F88C87D75E9AA63C4734DF14FB /* Headers */, - 260626DAA7D2BAF24C73CA8BE219D00E /* Sources */, - 23FF610C99EBEBB2F369A7EFEB677CFE /* Frameworks */, - EEC899828838AF14D6D2EBCB363D8087 /* Resources */, + 3C8B6683C5EC50A0DCE69A2B07B51852 /* Sources */, + C552E23E6BAEE088F210AF86C33890F4 /* Frameworks */, + F25C3BBA72A4C04F84A70DFB21BDA954 /* Resources */, ); buildRules = ( ); dependencies = ( - B6610F7B1C9CEFC7AE5E50C5730BA3A6 /* PBXTargetDependency */, ); - name = SimpleImageViewer; - productName = SimpleImageViewer; - productReference = 3D33147ED2FC9DDADC5F09E224F445BE /* SimpleImageViewer.framework */; - productType = "com.apple.product-type.framework"; + name = "MobilePlayer-MobilePlayer"; + productName = "MobilePlayer-MobilePlayer"; + productReference = A494F9EA5E3D384CE70D6887630ABC05 /* MobilePlayer.bundle */; + productType = "com.apple.product-type.bundle"; }; - C15E14C9CA53451D53CC350CCA44CA3D /* 1PasswordExtension */ = { + 891841C3419A52929FB5D16A575798DB /* MBProgressHUD */ = { isa = PBXNativeTarget; - buildConfigurationList = 1EF924A2DF5DFAB22FAFB861C951FEE2 /* Build configuration list for PBXNativeTarget "1PasswordExtension" */; + buildConfigurationList = 01A6E459FACC415A85E6518DD7B0349B /* Build configuration list for PBXNativeTarget "MBProgressHUD" */; buildPhases = ( - 0462A8552B459E0EF29DC464E8F0B8A1 /* Headers */, - B11960B9F00664533ACD2676DCC7E66E /* Sources */, - 80DD1AD5E7D0A181C5811E6752DC3BCC /* Frameworks */, - 1608BD9792A908C4EBF2D06A116A3615 /* Resources */, + F7DD164565AEC0DF26187DA75E9DE8A9 /* Sources */, + DCE0167E9B76EA65A7E25019EFB1D085 /* Frameworks */, + 520B9263957E2F8F922E7883AB10B61D /* Headers */, ); buildRules = ( ); dependencies = ( - 617773B6577C047936D41EAED87D3397 /* PBXTargetDependency */, ); - name = 1PasswordExtension; - productName = 1PasswordExtension; - productReference = A59F6900FC05330C26A6D2A15784F3C1 /* OnePasswordExtension.framework */; + name = MBProgressHUD; + productName = MBProgressHUD; + productReference = FE523FE7BCEBA671EE255662C21F702C /* MBProgressHUD.framework */; productType = "com.apple.product-type.framework"; }; - C9732C970DC56F54EA5F3AA0F10697B3 /* DifferenceKit */ = { + A179C4D7DC05024EBB1258F1BE332836 /* semver */ = { isa = PBXNativeTarget; - buildConfigurationList = 950DBE210F8CCB934507D83FAD13F140 /* Build configuration list for PBXNativeTarget "DifferenceKit" */; + buildConfigurationList = 2EA64EE84FE23A9B712E18801C526F82 /* Build configuration list for PBXNativeTarget "semver" */; buildPhases = ( - 2B276CFC25EA48FF6CCF71F615F7DAF2 /* Headers */, - A246D87481BB66ACA7AE3AD5865EBB61 /* Sources */, - 1A8C539BB7A66D9A83B705D32D0B1ED3 /* Frameworks */, - 45A795C335CBB6B35D0E8D0F0D53430A /* Resources */, + 8A5EAAF50D2B874B749E4B025D22F259 /* Sources */, + AD053F239F7253B7D31E77B8B4C638AD /* Frameworks */, + E2D4E811094420B20C0FBC1C5BB1FDDD /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = DifferenceKit; - productName = DifferenceKit; - productReference = B4E211CF1C23F56B6EB7E4C81ABB7D2E /* DifferenceKit.framework */; + name = semver; + productName = semver; + productReference = 87348ED25040782AD5987C26638802FB /* semver.framework */; productType = "com.apple.product-type.framework"; }; - CB856D055EFB9585B4AA7A088FF35871 /* Pods-Rocket.Chat.ShareExtension */ = { + AD9F7CE16C23215D6E90116FC4017D5F /* FirebaseCoreDiagnostics */ = { isa = PBXNativeTarget; - buildConfigurationList = ADBC3B42093B3CE0DDA8179847DDEB4E /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat.ShareExtension" */; + buildConfigurationList = 8C38B1821A5E8F7A629329601F23CFEF /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */; buildPhases = ( - 24AF04CD356C35F5249BF1770AD3C9F3 /* Headers */, - CF41C4529AA3DCB0AE9713E212BC2445 /* Sources */, - 9366578AB0C51966BB367B74A7A5882C /* Frameworks */, - 91099EF39C7BFA6C36483367EA00905D /* Resources */, + 5E25D6F959A2E20A99FF55B14B85B34B /* Sources */, + 791C024C4D47AD4206795824ECCA8146 /* Frameworks */, + 553BFAD00422657CF88CDABDFD9C5192 /* Headers */, ); buildRules = ( ); dependencies = ( - 4DDB1EE02A3B50A2DBC07B985001C674 /* PBXTargetDependency */, - 2929ABD2EB00B4891B710238CCB2C81A /* PBXTargetDependency */, - 82762B1341574D95AFFD346BEBBDBE9F /* PBXTargetDependency */, - E55C83954DEB6A64179784ABAA9674D2 /* PBXTargetDependency */, - 93DDEFD992E631FBAB4839EC8ACDB92B /* PBXTargetDependency */, - 7384A08B743A248690F5E04E21175C63 /* PBXTargetDependency */, - EC90A5ECFF5C3034BE2A9EF5542EB9FC /* PBXTargetDependency */, - 5DF99EF95E5A9CC3730E810250E409F8 /* PBXTargetDependency */, - ); - name = "Pods-Rocket.Chat.ShareExtension"; - productName = "Pods-Rocket.Chat.ShareExtension"; - productReference = 329E49E8944C8DBF1EB2C35AA62EF71F /* Pods_Rocket_Chat_ShareExtension.framework */; + 5552958FB98F73A9269F01FFDA48283C /* PBXTargetDependency */, + A33B8079012FC35F6C5AF818C477735D /* PBXTargetDependency */, + 6DF616E8F702F5BA389680BEFC3AACC3 /* PBXTargetDependency */, + 2781F501282A11D3F712E737CA1F5071 /* PBXTargetDependency */, + ); + name = FirebaseCoreDiagnostics; + productName = FirebaseCoreDiagnostics; + productReference = C86E7BE5EB409303F7FD28D5A89C0F07 /* FirebaseCoreDiagnostics.framework */; productType = "com.apple.product-type.framework"; }; - D2A8A4D7433918EF402134DBD93D9269 /* semver */ = { + B6422D152FC79825719A02B3C10FC3D2 /* SwipeCellKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 8F6FDBF3A140B60FCA792B3076CCE1BA /* Build configuration list for PBXNativeTarget "semver" */; + buildConfigurationList = 877F2528C03997D9997D7BA1338D9A9D /* Build configuration list for PBXNativeTarget "SwipeCellKit" */; buildPhases = ( - D1D68A537B5888C822EFFA51D7A915EC /* Headers */, - 2470689086ACA2122F820F5627030871 /* Sources */, - DFF9DE72642CC9216BA57F72024F98B3 /* Frameworks */, - 27DFF381A81AD2DE9B13E40604552061 /* Resources */, + C49046578514EDDAA638373E412DE25F /* Sources */, + 1FFDBCB3BE6B77F5903DA10DEC45F344 /* Frameworks */, + E7E99545CAE361F5766075C88A0AFCB3 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = semver; - productName = semver; - productReference = D8BA413DF6667899004295B0A97FFE6F /* semver.framework */; + name = SwipeCellKit; + productName = SwipeCellKit; + productReference = FEA1AA445F59FFBEDD8C7A561844F039 /* SwipeCellKit.framework */; productType = "com.apple.product-type.framework"; }; - DE5935DD370A98D07EB105CDD08427F0 /* MobilePlayer */ = { + BEDC62E1AF6B87F407DE20E920BB428C /* 1PasswordExtension-OnePasswordExtensionResources */ = { isa = PBXNativeTarget; - buildConfigurationList = 88B85023056BD6D9931D433814D7E434 /* Build configuration list for PBXNativeTarget "MobilePlayer" */; + buildConfigurationList = EBDBD67410CE33037F60E530F52E6E54 /* Build configuration list for PBXNativeTarget "1PasswordExtension-OnePasswordExtensionResources" */; buildPhases = ( - 4C96CBD09D0740EA51207C479378E6A0 /* Headers */, - 392ED55BEE4E6D7417907C3214C59EF0 /* Sources */, - 6A2A9368ED56EED64C61DD269AC4493E /* Frameworks */, - F75809DE4CF8204FD33892BA90C1B8BD /* Resources */, + 96B69609E4D687EF1FC447E8EA95C829 /* Sources */, + 34E59CE37745DCCA2AAD821D0D6BF875 /* Frameworks */, + B4CD8C425BD46B0CC96053AB01C06ED6 /* Resources */, ); buildRules = ( ); dependencies = ( - 3A2259CC8FDE3AFB1530A51D0190D26F /* PBXTargetDependency */, ); - name = MobilePlayer; - productName = MobilePlayer; - productReference = F745D69135D8C26AC9C8CE5505509D48 /* MobilePlayer.framework */; - productType = "com.apple.product-type.framework"; + name = "1PasswordExtension-OnePasswordExtensionResources"; + productName = "1PasswordExtension-OnePasswordExtensionResources"; + productReference = 30FEFB929544CCB63FA738F715041190 /* OnePasswordExtensionResources.bundle */; + productType = "com.apple.product-type.bundle"; }; - E4A590260CAF606E014E5F9937A9066B /* SwipeCellKit */ = { + D5423DFD97A84BB4F2EE18A653B49765 /* FLEX */ = { isa = PBXNativeTarget; - buildConfigurationList = F4889164A77775F9984CF089CF22C391 /* Build configuration list for PBXNativeTarget "SwipeCellKit" */; + buildConfigurationList = AE341D9A0C0322AB1703893C725D2CEB /* Build configuration list for PBXNativeTarget "FLEX" */; buildPhases = ( - 3D5A540E6B3EA2F7F14C033D4EACB56E /* Headers */, - ACB1B19D6B6453ED05B9C63C12780992 /* Sources */, - 5654CBBE42205FE2BCD1DCABBBD7BC8C /* Frameworks */, - 5DA778C1620520915AC0A0B0F500A44E /* Resources */, + 298BC29FBD85B2540A12B7FBC977D910 /* Sources */, + 6685F7C44867765D09D5596667CFD4A5 /* Frameworks */, + 7AD033CD58E81DCB34DB3CAE5144D01E /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = SwipeCellKit; - productName = SwipeCellKit; - productReference = 1E1CB03B761513D88FAA0B597C7940C8 /* SwipeCellKit.framework */; + name = FLEX; + productName = FLEX; + productReference = 90C4BE9B2BC6BC2FAE00D9AB226F7B2F /* FLEX.framework */; productType = "com.apple.product-type.framework"; }; - F114C53C144DED6ADCA1BA4F2BC1EB05 /* Starscream */ = { + DAC25189504B9C8910EC20AF68E62D3A /* ReachabilitySwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 8155D48394F52450F2B7DEA53BCA5674 /* Build configuration list for PBXNativeTarget "Starscream" */; + buildConfigurationList = FD2A323BA20F87B1BFD6790B9280E3AF /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */; buildPhases = ( - 97023CBD28AFFC8C44731BDFD299FD43 /* Headers */, - 3A19CF3A5613BCEAD9375A6631829C78 /* Sources */, - C984B0005F16913A95FD2D5053B2CA54 /* Frameworks */, - 6E63E87E2B6B3EDEDE3768601C55321B /* Resources */, + C956648A01C6CBA133E4C82FB6083502 /* Sources */, + 1ED8617B8DDE14DD6B96AB39987953F3 /* Frameworks */, + 29BEC94D98E3C1A797080B261DB886A5 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = Starscream; - productName = Starscream; - productReference = A2C49B4C3C90BF494A04763D16971A9F /* Starscream.framework */; + name = ReachabilitySwift; + productName = ReachabilitySwift; + productReference = D5A973DEBD80F3D8AEFE813F1749A5E3 /* Reachability.framework */; productType = "com.apple.product-type.framework"; }; - F34AB23A45E66B5330A74220CE95958C /* FLAnimatedImage */ = { + DBB9E8FC42AD71B397F9719F46F8C8DA /* DifferenceKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 6AF90B4E1B413490136D6F8F290B8E2C /* Build configuration list for PBXNativeTarget "FLAnimatedImage" */; + buildConfigurationList = 9341EE42596A8BC3F44FF52C07CD1C21 /* Build configuration list for PBXNativeTarget "DifferenceKit" */; buildPhases = ( - 4B71E8860429117F9620A44576F264C9 /* Headers */, - 1A36E215947A0321EDCCD260AF0BA87B /* Sources */, - A491BC7BB3378D1B493A9D570D3677AC /* Frameworks */, - DCE5756F244F5390FAE3DF6A7F9883A1 /* Resources */, + C55858500E8170456BB65351096B0F28 /* Sources */, + ED07C5153D953AB77051B080199BEB5F /* Frameworks */, + 31FBAF8BDF780D81E5E51E0B5DD63314 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = FLAnimatedImage; - productName = FLAnimatedImage; - productReference = 5D89B8817FD2DB77EEBB3EFCB4FE38D7 /* FLAnimatedImage.framework */; + name = DifferenceKit; + productName = DifferenceKit; + productReference = 8E897B0A8D4E34D0B3103DE27B8F4017 /* DifferenceKit.framework */; productType = "com.apple.product-type.framework"; }; - F3F9ECFF28CD85D964A7912AFAE3ED86 /* ReachabilitySwift */ = { + DBE96A9B8FFA441C679FFF903BC1CFC0 /* Starscream */ = { isa = PBXNativeTarget; - buildConfigurationList = 9C4D8547CE9A03F70AFA5B7986181464 /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */; + buildConfigurationList = C3C2729BF70430A815240169B267CE80 /* Build configuration list for PBXNativeTarget "Starscream" */; buildPhases = ( - 5A43CAD568D340CED1AC884923A7BDB3 /* Headers */, - 0ED573766C8B0EB093999838F3C4FFCF /* Sources */, - E588A02C16A6AA28CC0987FC43964C6C /* Frameworks */, - 33BFF0F831156E3B112067E231B82428 /* Resources */, + 911189342D90E355386423A72DAA448C /* Sources */, + 2785D31B7D575CCB6BF33BD96CCD6B48 /* Frameworks */, + 1C0DEEAC9C171A5E773D6D2C94AEEF50 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = ReachabilitySwift; - productName = ReachabilitySwift; - productReference = FBDF3BD1FC22ABA158FEADC0C462F87B /* Reachability.framework */; + name = Starscream; + productName = Starscream; + productReference = 98AC64352E3F48A417A5B2B7E7CF08A9 /* Starscream.framework */; productType = "com.apple.product-type.framework"; }; - F9C5694BB3ADEFAE35BCB70B249B7624 /* Pods-Rocket.Chat */ = { + E00311318D3052CB3429E9B5303B854B /* FLAnimatedImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 435A59889AE074E3E7925780F7C87C37 /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat" */; + buildConfigurationList = 7ACD5DCD5C47719A8D962D84E78BE5B0 /* Build configuration list for PBXNativeTarget "FLAnimatedImage" */; buildPhases = ( - 392F7084D8C5CE1D1A356BAE10CAC3E2 /* Headers */, - 05815B29D59E83561D7DC94EB05A1254 /* Sources */, - 98B6B1A6D4CE7937D1D2E778DFCDBA93 /* Frameworks */, - 83DE48D3142B6A8E7177EEE55254F9DA /* Resources */, + 53851B0909FF8CC70E04C0EA732DF590 /* Sources */, + 4A67BC9E4C19CC4C89C43FEAAAAB9E98 /* Frameworks */, + 5EEA03B770BBF144C9CFF105BEBB4280 /* Headers */, ); buildRules = ( ); dependencies = ( - 47A001DDD5FC517A77F7897CD30777DB /* PBXTargetDependency */, - 8ED10D39439737227F01300C367B6113 /* PBXTargetDependency */, - 7B11E7D7A50A52ACFBFCDD6A8C33827F /* PBXTargetDependency */, - 9DF169AE6396BADE72A698BF7C426D59 /* PBXTargetDependency */, - B07EFA2BFB883FA6F516FDFF33B1F2BC /* PBXTargetDependency */, - 5B752D9C0B5C827564E50D1F5B3825BF /* PBXTargetDependency */, - A325AD2E8DD563B1AFB1D40BBDEABEC1 /* PBXTargetDependency */, - 598D04FAED6E4C22D0CD3F4277C55F4D /* PBXTargetDependency */, - FDBB377C74BB4D697019AA795A3901F4 /* PBXTargetDependency */, - B0E8C957B10B94DCC64A9DBD0B5D88AC /* PBXTargetDependency */, - 9FAF3B63FFB5DFDC26792AA179C159C7 /* PBXTargetDependency */, - 637EB4923AC07FD87FA282484A3F267C /* PBXTargetDependency */, - F70C546C48DEDE4A8108EFA1175AD0F5 /* PBXTargetDependency */, - F58E3F11BC16D7BEE5767416E73CE337 /* PBXTargetDependency */, - 2C188B49952E573E17602AA3262FE093 /* PBXTargetDependency */, - 142292637DBE1A28764D66AEB7770504 /* PBXTargetDependency */, - 657024FF72347BF4F988BBEC54836044 /* PBXTargetDependency */, - 04EE9ABD138E661E584F073CE63878E7 /* PBXTargetDependency */, - FB084A3387956F2DA30C689216F1A162 /* PBXTargetDependency */, - EEBB5F3AB356A71121DF2B1E9A7943F2 /* PBXTargetDependency */, - 806BD4EDFBFE58E0F04E4830F43767A1 /* PBXTargetDependency */, - 19D4633F092CFBA78912EDAD24C9453E /* PBXTargetDependency */, - 081CEA199EFED11B6BFE23F0C07632BA /* PBXTargetDependency */, - BA6BAE6B1BB70AEB3EFC559382DCEFFC /* PBXTargetDependency */, - 5DAF342486872D00EDBEEC822BD04951 /* PBXTargetDependency */, - A190CE822618014AA988AFA519180475 /* PBXTargetDependency */, - 4E455FD9E2D28BC190EB514F98344A8E /* PBXTargetDependency */, - 5C4C8E1050AC2653CFCABC1F42C2B6DE /* PBXTargetDependency */, - 5436DAE1E6C85D39829C8D36D53C64E3 /* PBXTargetDependency */, ); - name = "Pods-Rocket.Chat"; - productName = "Pods-Rocket.Chat"; - productReference = FC853BD6EDD4E69E20BE1FCB5258259C /* Pods_Rocket_Chat.framework */; + name = FLAnimatedImage; + productName = FLAnimatedImage; + productReference = 667C0A85342E19C0E3349157DF91CE50 /* FLAnimatedImage.framework */; productType = "com.apple.product-type.framework"; }; - FC398047D96D5EB82DC34A1AA22FECEE /* RealmSwift */ = { + E8E03261919E1552240E2A9AF312DCE1 /* GoogleUtilities */ = { isa = PBXNativeTarget; - buildConfigurationList = 7D058E23D3285592BB5B45DA7C8CC0F2 /* Build configuration list for PBXNativeTarget "RealmSwift" */; + buildConfigurationList = A8C3070E72F058BBB4D1DE7F50776ADD /* Build configuration list for PBXNativeTarget "GoogleUtilities" */; buildPhases = ( - 698897B83A9FC209A26FB1E4B05A43BA /* Headers */, - B412B06C8401661DC2DEEAB2B2ED1144 /* Sources */, - 9D3A69220AA01130F5BB8589A0BB2C16 /* Frameworks */, - 2109F31C34CE0D645D873B7B5361B837 /* Resources */, + 1525745379580E24330B4EDD35CEFAD0 /* Sources */, + EC1C995D24731C0B41909E3CDE5F56B1 /* Frameworks */, + 74791855EB5C2600A06FFF6049327239 /* Headers */, ); buildRules = ( ); dependencies = ( - 74EB534E6A759953BADC7FC241B162F4 /* PBXTargetDependency */, ); - name = RealmSwift; - productName = RealmSwift; - productReference = 6D0FEA2CFF9A73891D03E928CE758932 /* RealmSwift.framework */; + name = GoogleUtilities; + productName = GoogleUtilities; + productReference = 8786D03212235D85EB47965BCCC45EF6 /* GoogleUtilities.framework */; productType = "com.apple.product-type.framework"; }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1020; - LastUpgradeCheck = 1020; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, + EA9D15B80EC4F97B280430247E0F213B /* 1PasswordExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2AD4959B1E613F160146A21A3232C024 /* Build configuration list for PBXNativeTarget "1PasswordExtension" */; + buildPhases = ( + 103707D92FD0663733167B8ABA2A2094 /* Sources */, + 39E25E840279FCF488E6752EC3C947DD /* Frameworks */, + 795A97F73832DED21070A6B7D6ECED26 /* Resources */, + EC1737D025C98A12CCE86406337F3EFB /* Headers */, ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 90A61B6E664A1390CEAEC52C0179ABFB /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - C15E14C9CA53451D53CC350CCA44CA3D /* 1PasswordExtension */, - 7A00110467ACE628B80ABBD9F1E83698 /* 1PasswordExtension-OnePasswordExtensionResources */, - 7F79AF09BDA0EB7EE86AA958E0F97C7B /* Crashlytics */, - C9732C970DC56F54EA5F3AA0F10697B3 /* DifferenceKit */, - 7CE49DE8B659FE84C6885E456503139D /* Fabric */, - DE5EE8EEA217EAEF464BE0F1D44A3248 /* Firebase */, - 0562504F6D4CBC4932D70CDDC0D2AFD6 /* FirebaseAnalytics */, - 6551B0A997F3C3EC1BF5CCCE8C9D7640 /* FirebaseCore */, - BC2B4D06432AD962396EB82B589340B7 /* FirebaseInstanceID */, - F34AB23A45E66B5330A74220CE95958C /* FLAnimatedImage */, - 088C502077FC6305966DF84EEC3A4A07 /* FLEX */, - CAFA4CBCA3898A6F62989262E04582A8 /* GoogleAppMeasurement */, - 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */, - 9C1854A0145F43E74B79C3F491E94E2E /* MBProgressHUD */, - DE5935DD370A98D07EB105CDD08427F0 /* MobilePlayer */, - 6EB25B8A3C04F51C8B687957379623B1 /* MobilePlayer-MobilePlayer */, - AA61720B36F74B4975EDA51370C03FB8 /* nanopb */, - A1A0FE2A9E90F5B42D68DD55E0C304C7 /* Nuke */, - 293E484C14E8255A78D47D2E48DDFCEE /* Nuke-FLAnimatedImage-Plugin */, - 995313EC42D812DEC94B33A8FE4F0344 /* OAuthSwift */, - F9C5694BB3ADEFAE35BCB70B249B7624 /* Pods-Rocket.Chat */, - CB856D055EFB9585B4AA7A088FF35871 /* Pods-Rocket.Chat.ShareExtension */, - 953D6B6C4F9743C91652F04F3FFF0B87 /* Pods-Rocket.ChatTests */, - A5F394DBBF164FD98BF2BF258D2CDFCE /* RCMarkdownParser */, - F3F9ECFF28CD85D964A7912AFAE3ED86 /* ReachabilitySwift */, - 237BDF70A0D24421463790971334A771 /* Realm */, - FC398047D96D5EB82DC34A1AA22FECEE /* RealmSwift */, - 55FA0B285608509C58926F57847AB4D2 /* RocketChatViewController */, - D2A8A4D7433918EF402134DBD93D9269 /* semver */, - BDC9D0A453E0589198E53EF71AF3A6B1 /* SimpleImageViewer */, - F114C53C144DED6ADCA1BA4F2BC1EB05 /* Starscream */, - 55E1FDE52DD9C139D679CC408529CF94 /* SwiftLint */, - A8A5A77D99AF2642C050686191AAC5A6 /* SwiftyJSON */, - E4A590260CAF606E014E5F9937A9066B /* SwipeCellKit */, + buildRules = ( ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 083F8C71E6E6D73698116F0BB8546C5D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + dependencies = ( + AAC6B799029F8CEA9FFAF9A16C8E72F5 /* PBXTargetDependency */, ); - runOnlyForDeploymentPostprocessing = 0; + name = 1PasswordExtension; + productName = 1PasswordExtension; + productReference = 4DB8D249556332731EBBF3FDDA82CA87 /* OnePasswordExtension.framework */; + productType = "com.apple.product-type.framework"; }; - 0B51D5D5B5721691C90EF53A3CEAB7AA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */ = { + isa = PBXNativeTarget; + buildConfigurationList = 231290C35D86613BA3124D7CCDA858D3 /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */; + buildPhases = ( + 38D2357BB01DE268A22F331BC6CFEBB5 /* Sources */, + F90F23F01B63D7C64C3E985D81EC0369 /* Frameworks */, + 683BB95E55922296EEA255DFBC6E1DEE /* Headers */, ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1608BD9792A908C4EBF2D06A116A3615 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 91B5899ABD99C3BD70047349D634E0F5 /* OnePasswordExtensionResources.bundle in Resources */, + buildRules = ( ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F83A017C53DE0B81138522D5D274170 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + dependencies = ( ); - runOnlyForDeploymentPostprocessing = 0; + name = GoogleDataTransport; + productName = GoogleDataTransport; + productReference = 9E49935ADE10E35E5C2557F818400C1C /* GoogleDataTransport.framework */; + productType = "com.apple.product-type.framework"; }; - 2109F31C34CE0D645D873B7B5361B837 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + FAC0EDA22C68AE54A68C056BA09FBA71 /* Nuke-FLAnimatedImage-Plugin */ = { + isa = PBXNativeTarget; + buildConfigurationList = 55EB5D6C2C8F6D96B79AC28C262BDEE7 /* Build configuration list for PBXNativeTarget "Nuke-FLAnimatedImage-Plugin" */; + buildPhases = ( + 6587A350A7E8F1D540A43FAF6D3A911E /* Sources */, + 2E762217140D17455F6568C05E6712D2 /* Frameworks */, + A7342912312625974F324C93DE3CC36D /* Headers */, ); - runOnlyForDeploymentPostprocessing = 0; - }; - 27DFF381A81AD2DE9B13E40604552061 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + buildRules = ( ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2FCE915E646A35A58A481C79AEF4695E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + dependencies = ( + 1500766821E629FEA2D54757B500B1C1 /* PBXTargetDependency */, + E09D9E4BD00AB26F33E799E4E42A11DD /* PBXTargetDependency */, ); - runOnlyForDeploymentPostprocessing = 0; + name = "Nuke-FLAnimatedImage-Plugin"; + productName = "Nuke-FLAnimatedImage-Plugin"; + productReference = AD5F998F7DB138F15F5DBAAADD1F377F /* NukeFLAnimatedImagePlugin.framework */; + productType = "com.apple.product-type.framework"; }; - 33BFF0F831156E3B112067E231B82428 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + FBAC02E8630366D9AF85309F1C074CD3 /* OAuthSwift */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7D6B15560D09939A72279F4E1A8E92C7 /* Build configuration list for PBXNativeTarget "OAuthSwift" */; + buildPhases = ( + 22842CC9AE191D33BE6740263A58D2C0 /* Sources */, + 585B379150261DEB0F3677F14383A89F /* Frameworks */, + 5E2CE4BDF339BA7BE7D0BB74FBC6B724 /* Headers */, ); - runOnlyForDeploymentPostprocessing = 0; - }; - 45A795C335CBB6B35D0E8D0F0D53430A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + buildRules = ( ); - runOnlyForDeploymentPostprocessing = 0; - }; - 46F5CCABD108AF4E89BB81E75497F411 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A177345ABC88ED1488545A0FB2960F8E /* Assets.xcassets in Resources */, - E0F0D4768CF0023824F8811C920EFFDB /* cancel_audio_record.m4a in Resources */, - 895E052D1BA18D34026F8AE414695FE6 /* cs.lproj in Resources */, - 7F6332A3AF73955F57B43797367ACD68 /* de.lproj in Resources */, - EFC81816A7615211AD35D79369FFD389 /* el.lproj in Resources */, - E6933CF37B9BB87C6659DC928CEF727D /* en.lproj in Resources */, - 2550EAFEEB198A11D986D416D2DBF8BF /* es.lproj in Resources */, - AB3A6BE71FC87F1243C5E6E50551A423 /* fr.lproj in Resources */, - AEE07C982B4C91DE048AB695F654EC71 /* ja.lproj in Resources */, - 3B2AE6E2A09DD2B8D8772E541A5EADAF /* pl.lproj in Resources */, - B8DD324F6B9B467EABBF8D02872F46FB /* pt-BR.lproj in Resources */, - 26227C63C0528DBB796E21753B427EFA /* pt-PT.lproj in Resources */, - FE393BFCA0D2679FC26F5119FEAB5830 /* ru.lproj in Resources */, - 4D4EDBABB249CAA0192B8274A214A8B6 /* start_audio_record.m4a in Resources */, + dependencies = ( ); - runOnlyForDeploymentPostprocessing = 0; + name = OAuthSwift; + productName = OAuthSwift; + productReference = EEF1A71C55946D10D2BA2AF2D7BDA8B7 /* OAuthSwift.framework */; + productType = "com.apple.product-type.framework"; }; - 50EBBD21311C4589260D548530F64441 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + FD1660D8A273E785AB4F83381C13CB6E /* Pods-Rocket.Chat.ShareExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3501C562BBB2D10ECFAE1863ED3D6135 /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat.ShareExtension" */; + buildPhases = ( + 6392CE1493D7F9E44220C42699419A77 /* Sources */, + BFE6689F46D174F7DDACB416EC3BD0AB /* Frameworks */, + B1C23CFF42C07086E0C81A88ABD19E58 /* Headers */, ); - runOnlyForDeploymentPostprocessing = 0; - }; - 541A464EFDFA37BFEACA856D5F2431FD /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BED2C817FD4B09280137062FF77118D4 /* MLCloseButton.png in Resources */, - 06C085375062A5E663A12162F3F11F2C /* MLCloseButton@2x.png in Resources */, - 4B8B9104D6D79A258BB83BA544C4A68C /* MLCloseButton@3x.png in Resources */, - 39AEA2B8C3CF956B3E6C690988904792 /* MLIncreaseVolume.png in Resources */, - A5A1C935E35CC81EA82F05721EFC0E12 /* MLIncreaseVolume@2x.png in Resources */, - EC5820D48FFFD38A1D526ABB2A1C4F31 /* MLIncreaseVolume@3x.png in Resources */, - 961AB3D3EE1FABB45C3BFDE8408F365C /* MLPauseButton.png in Resources */, - 2BA74A8EB1CCD6027AE0120CEB7CF91E /* MLPauseButton@2x.png in Resources */, - 68B99FABDBF132DA3C5C46CD54F6912D /* MLPauseButton@3x.png in Resources */, - 6C70236F5050BD71F020E26A4407B32E /* MLPlayButton.png in Resources */, - 97C8ED600ECF970717C3EE280F81A0A7 /* MLPlayButton@2x.png in Resources */, - E8B46E0DA1A273B5A8B7A1B53E123368 /* MLPlayButton@3x.png in Resources */, - 353CE4E6D7AF1CAE0511885F181BF653 /* MLReduceVolume.png in Resources */, - ED7F5924DA44E1A7CFDBFEA5F21D5081 /* MLReduceVolume@2x.png in Resources */, - D2EA0C1CB6BC0939457BA4FF7C2749EB /* MLReduceVolume@3x.png in Resources */, - 056283B14333CBA2EB0B1D557600A68C /* MLShareButton.png in Resources */, - 8C76B6BDD3BC280ABE4512232925ABD0 /* MLShareButton@2x.png in Resources */, - DDD74FCA27A8910DA70D8A6831429F42 /* MLShareButton@3x.png in Resources */, - 22033B96D5E037D68B8BCDFCCAF1AA1C /* MLVolumeButton.png in Resources */, - E2020BB27E471BF19939A50A4965C95E /* MLVolumeButton@2x.png in Resources */, - 430060FAE23BBE9D88038B53CFCAFBC6 /* MLVolumeButton@3x.png in Resources */, + buildRules = ( ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5DA778C1620520915AC0A0B0F500A44E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + dependencies = ( + A4148E5C2DF6A99B52A072CFAEF70E32 /* PBXTargetDependency */, + 74F780ECF97B1FDEE5FF71CE61AD914E /* PBXTargetDependency */, + BB2C25CADE6CA93CB36D4E2BE20549E0 /* PBXTargetDependency */, + 3646FB67EE9E09ECD0F45B4634587944 /* PBXTargetDependency */, + E8A5A4E3B7A86174F9DA278CED71B11F /* PBXTargetDependency */, + F9AB0BA5540EF7CB11478C2A571E0EA4 /* PBXTargetDependency */, + 2C6A5D799721D0ECE60975AC043B5BFE /* PBXTargetDependency */, + A51078E9578E42A79F03F7A89535D106 /* PBXTargetDependency */, ); - runOnlyForDeploymentPostprocessing = 0; + name = "Pods-Rocket.Chat.ShareExtension"; + productName = "Pods-Rocket.Chat.ShareExtension"; + productReference = 91962B6FEB8F1FCD5D87ACD4D3AD088E /* Pods_Rocket_Chat_ShareExtension.framework */; + productType = "com.apple.product-type.framework"; }; - 5DDB33024A14322E4B611CDE86696C7C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */ = { + isa = PBXNativeTarget; + buildConfigurationList = EB9BD76C3B4D21DF6129E1BB2ED33178 /* Build configuration list for PBXNativeTarget "nanopb" */; + buildPhases = ( + 3DA9ACAAEF092DD065379EFF262DBCAC /* Sources */, + 2B2D5E30703380CBB12B1861B2D2C02E /* Frameworks */, + 36F59AA1AC05777D0C4D37198213F48F /* Headers */, ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6C2C6EA2FA398BC21C303171F28C2DA7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + buildRules = ( ); - runOnlyForDeploymentPostprocessing = 0; + dependencies = ( + ); + name = nanopb; + productName = nanopb; + productReference = D068F63E361BBA784B580498F930203A /* nanopb.framework */; + productType = "com.apple.product-type.framework"; }; - 6E63E87E2B6B3EDEDE3768601C55321B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = 0AE17530D966B4C1F18650093A2F5600 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EA9D15B80EC4F97B280430247E0F213B /* 1PasswordExtension */, + BEDC62E1AF6B87F407DE20E920BB428C /* 1PasswordExtension-OnePasswordExtensionResources */, + DBB9E8FC42AD71B397F9719F46F8C8DA /* DifferenceKit */, + 37515DB33E76B4A4B1E375D2075F615C /* DifferenceKit-Core */, + 3C68CBEBC7AA24BEECA1BAE10D69B4F7 /* FirebaseCore */, + AD9F7CE16C23215D6E90116FC4017D5F /* FirebaseCoreDiagnostics */, + 7A188CE4BDA89D941184C4CC4C426B07 /* FirebaseInstanceID */, + E00311318D3052CB3429E9B5303B854B /* FLAnimatedImage */, + D5423DFD97A84BB4F2EE18A653B49765 /* FLEX */, + F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */, + 1067FA952B76EED7AA2A52057C7B7DB4 /* GoogleDataTransportCCTSupport */, + E8E03261919E1552240E2A9AF312DCE1 /* GoogleUtilities */, + 891841C3419A52929FB5D16A575798DB /* MBProgressHUD */, + 80E23AABF0943180B6599EA449C2CEF2 /* MobilePlayer */, + 81E27232DC00A881ACF75C7B5F193333 /* MobilePlayer-MobilePlayer */, + FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */, + 0DF9FEC4D52DBD2F86898986EC1B46AE /* Nuke */, + FAC0EDA22C68AE54A68C056BA09FBA71 /* Nuke-FLAnimatedImage-Plugin */, + FBAC02E8630366D9AF85309F1C074CD3 /* OAuthSwift */, + 2AB60AD2BB457972974FA9AAFA9A09DF /* Pods-Rocket.Chat */, + FD1660D8A273E785AB4F83381C13CB6E /* Pods-Rocket.Chat.ShareExtension */, + 4C3273A2EE32D443B1674EC3AFABCDF7 /* Pods-Rocket.ChatTests */, + 7564F88B01F601AAC832E1AD63849278 /* RCMarkdownParser */, + DAC25189504B9C8910EC20AF68E62D3A /* ReachabilitySwift */, + 0FB10C95F9BBD21C45E9DD56E9DE66DC /* Realm */, + 4548FD0F52098CA90D3A62745F0C1474 /* RealmSwift */, + 0601E30DD8EB3E5C4CA86433D77ED08C /* RocketChatViewController */, + A179C4D7DC05024EBB1258F1BE332836 /* semver */, + 67FE5E457C21DEAD34748941C5B15AD4 /* SimpleImageViewer */, + DBE96A9B8FFA441C679FFF903BC1CFC0 /* Starscream */, + 0C9B6293E2C60B3B502A97DB9F4A09AF /* SwiftyJSON */, + B6422D152FC79825719A02B3C10FC3D2 /* SwipeCellKit */, ); - runOnlyForDeploymentPostprocessing = 0; }; - 83DE48D3142B6A8E7177EEE55254F9DA /* Resources */ = { +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 486F8AA6A4D553829CB662FA15CC2ACB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 91CB6B61C2734EE2AA031EC8584EC522 /* ImageViewer-Assets.xcassets in Resources */, + B709EDD9B1673E7F1AFA13CFF497D4E4 /* ImageViewerController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 91099EF39C7BFA6C36483367EA00905D /* Resources */ = { + 795A97F73832DED21070A6B7D6ECED26 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + FA4D31EE5AD9194D95F532A27EC24092 /* OnePasswordExtensionResources.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 934864493B0FD35F625412A12EDB63B8 /* Resources */ = { + B4CD8C425BD46B0CC96053AB01C06ED6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + F69ECA76BCCD2E44AFD7F28D9E4CB85A /* 1Password.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B9017D4000EE1984F3F4B7DD029496B1 /* Resources */ = { + F25C3BBA72A4C04F84A70DFB21BDA954 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7E72DC7C553970CE15147589D1F34D56 /* MLCloseButton.png in Resources */, + AAEDFD75E6F032DD92D1AA29F0B75A81 /* MLCloseButton@2x.png in Resources */, + 2F54AFA30F815B10F1DD276E03B471AA /* MLCloseButton@3x.png in Resources */, + 7526BA213001D0B2D3FDB1903D377ECB /* MLIncreaseVolume.png in Resources */, + 1A3F82A8EC5196FDCC99750A21FB12EA /* MLIncreaseVolume@2x.png in Resources */, + F9D630EECC7E498158340F2202B13773 /* MLIncreaseVolume@3x.png in Resources */, + 5192839CEF6CB1F163EB28F6328506EF /* MLPauseButton.png in Resources */, + DBBB9297152ECD1126C7A95D7719B8F7 /* MLPauseButton@2x.png in Resources */, + FFD1DA733CB2F9BCF6E8D0C52204FFD6 /* MLPauseButton@3x.png in Resources */, + CBEA888F2B38BAB57BC0573A85FAAD91 /* MLPlayButton.png in Resources */, + 48552F22F0BEDB9D106713ABF5FAB244 /* MLPlayButton@2x.png in Resources */, + 20740A66928B9280E36E3DE9FE6C8030 /* MLPlayButton@3x.png in Resources */, + 22D7AFACE6F5A595B6D96725DC533C37 /* MLReduceVolume.png in Resources */, + 3D545415BD09E42DA4E50A064EAD5BC1 /* MLReduceVolume@2x.png in Resources */, + EE61C5F803CF3BEF6D9858CB24A336D6 /* MLReduceVolume@3x.png in Resources */, + 59AC33FE4588EB06ADA2EE456FBB355A /* MLShareButton.png in Resources */, + 8D81C6EE4A5E112A06055D0CD9355F29 /* MLShareButton@2x.png in Resources */, + 5F2EC30502035F161F87D14C6EAD59AE /* MLShareButton@3x.png in Resources */, + 3F1BDD5A79986CCD63BFAC78E83C585A /* MLVolumeButton.png in Resources */, + E4CDFEF58D24D440F835494CB28A133F /* MLVolumeButton@2x.png in Resources */, + 96B720E0DD87A8313175F939BAE2E957 /* MLVolumeButton@3x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - BF796A3D96E996893D1D8B536A8FE419 /* Resources */ = { + FCA2590A03E35F2873983434E2339690 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 72B80D4F7BA03081158619A4A2230661 /* MobilePlayer.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CD33B80DA10EE5F9606AFC53ABB3C7E5 /* Resources */ = { + FD4C072CDC96CDCA345A9C021C76D84B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6010453DC9AAE9A766A704ED4FA853A2 /* Assets.xcassets in Resources */, + 41CE05093EC36E6FC96D662EC77C71D3 /* cancel_audio_record.m4a in Resources */, + EBADAB2BDA83DEB92DD823159A1E0CB3 /* cs.lproj in Resources */, + F68D5273106DD71DF223E4262FB89CE5 /* de.lproj in Resources */, + 10B5EA9DD4514D40990387CAA2555A34 /* el.lproj in Resources */, + A4D56DCBE8E145C494CF2C62996F93ED /* en.lproj in Resources */, + 7B37EFA779FAD6431CD420203775BA95 /* es.lproj in Resources */, + EF66EDC8072A6A95892817A4AA6FC3A4 /* fr.lproj in Resources */, + E0B3377C52683B18B9D31F5E0A141A88 /* ja.lproj in Resources */, + B85A84748B7E52EAD017AA3DDEA3F4E6 /* pl.lproj in Resources */, + 311112999B462FCA3BA5BE2793C654DB /* pt-BR.lproj in Resources */, + 3336B51AB550F45A8D28380E55166F6E /* pt-PT.lproj in Resources */, + 01E2233E75CB225141CDB18688D79209 /* ru.lproj in Resources */, + FFAE7CCDDCA8E4549CE2275D2E3FE4EC /* start_audio_record.m4a in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DCE5756F244F5390FAE3DF6A7F9883A1 /* Resources */ = { - isa = PBXResourcesBuildPhase; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0BBAD4329BBE79F2132EFCC0B393FB0D /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 260A39507AEEDA3D5FE8F3B18CB38FB0 /* Aliases.swift in Sources */, + A3A6BA37D1FD335F39C292607405CCBF /* Error.swift in Sources */, + 2E5340F1096F074167C24420CA7858D0 /* LinkingObjects.swift in Sources */, + 4EBDA84262AA762FEE557EA04F427D3D /* List.swift in Sources */, + C3489517DD4667D9495C0699EAD0591F /* Migration.swift in Sources */, + 94059B1702A34A81BD0F0B7C3320B011 /* Object.swift in Sources */, + A0F62CE5C2D80F359911BC50640D93A4 /* ObjectiveCSupport+Sync.swift in Sources */, + FA2AB6918A4ED887FF78C9A2676317AF /* ObjectiveCSupport.swift in Sources */, + 7C6341E8C8218B8D65EA770E7559334C /* ObjectSchema.swift in Sources */, + A2B705BDA74A90000F0CA86ECC0F15D4 /* Optional.swift in Sources */, + AD5206DCDD38099E45A695EB0AA7DA65 /* Property.swift in Sources */, + 3CD4B6783D97C32AC9022A62CD8E8C5C /* Realm.swift in Sources */, + 19B40483D5735512C8B30D4370570F5A /* RealmCollection.swift in Sources */, + 6265AFD4D98BB9F2167C1D48154413A5 /* RealmConfiguration.swift in Sources */, + 5DC53AD690E4457D6EE83E028E94B9F1 /* RealmSwift-dummy.m in Sources */, + 7900D7C77D6023F5D8679D685B49C30C /* Results.swift in Sources */, + A38B156651E0B8A58D7ABF46DDE0A037 /* Schema.swift in Sources */, + AB2EAF670EF3E7ED1392931E8E14303B /* SortDescriptor.swift in Sources */, + 855E2F2F52A894C24C2598B6438643CE /* SwiftVersion.swift in Sources */, + B933ED94C8891A85326AA3E54BE4D05D /* Sync.swift in Sources */, + FEEE42255DD713EACE2793F1DDB1ED66 /* ThreadSafeReference.swift in Sources */, + ACDE4F4592B7F56F39BD914F3B3BE0F7 /* Util.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E9E4F9C2F7538965A493A2CFD847A2C0 /* Resources */ = { - isa = PBXResourcesBuildPhase; + 103707D92FD0663733167B8ABA2A2094 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8E0F5F21BB5A4FA3DB931CDB92736025 /* 1PasswordExtension-dummy.m in Sources */, + D14097C66A7FCE2263D47B6D503AFF17 /* OnePasswordExtension.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EEC899828838AF14D6D2EBCB363D8087 /* Resources */ = { - isa = PBXResourcesBuildPhase; + 1525745379580E24330B4EDD35CEFAD0 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D942CF48DB8D7CC5F8AB865B281E0DDB /* ImageViewer-Assets.xcassets in Resources */, - 3D2ADECD3A37D8BD5211DD2CC32811ED /* ImageViewerController.xib in Resources */, + CE742E6212F4917D15C2E0BC3C17975E /* GoogleUtilities-dummy.m in Sources */, + 90CF806A909C9570ABD7ABAE2D102A2B /* GULAppDelegateSwizzler.m in Sources */, + FAC9219F8CE2558D135FA141BCBF6B1E /* GULAppEnvironmentUtil.m in Sources */, + 148CCBC88E91461BB6F719EE56083597 /* GULLogger.m in Sources */, + ACE7FB200BC493DC57DD850851E1F6C4 /* GULMutableDictionary.m in Sources */, + A7C35622D1711EDBB938AB726068EF19 /* GULNetwork.m in Sources */, + CE408A9815B269C8A459358366CE6AB3 /* GULNetworkConstants.m in Sources */, + 78A13EFBE667A84698148035C80136DF /* GULNetworkURLSession.m in Sources */, + 0EFC0A27114ABFEEB2DFD11763E39CD5 /* GULNSData+zlib.m in Sources */, + A19F7236A044241489D3556CBF3F41A0 /* GULReachabilityChecker.m in Sources */, + 85ED4CB570BF2792CC416B331F753AA6 /* GULSwizzler.m in Sources */, + F42DD0B8221D99260691D232689E417E /* GULUserDefaults.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F75809DE4CF8204FD33892BA90C1B8BD /* Resources */ = { - isa = PBXResourcesBuildPhase; + 22842CC9AE191D33BE6740263A58D2C0 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F998981B4736846E47AD3368B5CBC4DC /* MobilePlayer.bundle in Resources */, + 3F0EA6C2EB9FA452CEAC75CFF8FA0E2C /* Collection+OAuthSwift.swift in Sources */, + 1A6B9D263E843DE4A710AEDB383A3DC0 /* Data+OAuthSwift.swift in Sources */, + CB6898DF61F70B2E23669091B898178C /* Dictionary+OAuthSwift.swift in Sources */, + 0A40D5F825CC50A6E1C57791A1CC4A65 /* HMAC.swift in Sources */, + 799B74EF5D24D5343EAEBCCBE58CB353 /* Int+OAuthSwift.swift in Sources */, + 7CF0D0153C9E8842239541B243B63A29 /* NotificationCenter+OAuthSwift.swift in Sources */, + AACE0050EA5F63B58181B03D327FF700 /* NSError+OAuthSwift.swift in Sources */, + 83F8D4F14F73373612B3D4125222066B /* OAuth1Swift.swift in Sources */, + AD2DA9B97D695A307D4FE3F9F1CDCBCC /* OAuth2Swift.swift in Sources */, + DE52BFABD25204F68AD5C683789254B0 /* OAuthSwift-dummy.m in Sources */, + D097759688AEFB365751F5AD559533C6 /* OAuthSwift.swift in Sources */, + 79F7F14C6D191F6887AA6269D328004B /* OAuthSwiftClient.swift in Sources */, + EAAE6797385806E9E747448395C743D0 /* OAuthSwiftCredential.swift in Sources */, + C18F57B6AD022B52D8B525ECD31155AC /* OAuthSwiftError.swift in Sources */, + C3A729CEAE80CC11E2C48E1FD03F85C9 /* OAuthSwiftHTTPRequest.swift in Sources */, + B08E534A10221582A6C3DB125EF27921 /* OAuthSwiftMultipartData.swift in Sources */, + 7E2C3606C852528A9DD905BF86D11DF2 /* OAuthSwiftResponse.swift in Sources */, + D230B036647516CB897710697A5859AD /* OAuthSwiftURLHandlerType.swift in Sources */, + D141AA241E8A45FF3F851E97DB5C0632 /* OAuthWebViewController.swift in Sources */, + B58B0EE93F7C27BDC72A66D90DE3EDDD /* SHA1.swift in Sources */, + E4FC4A8FD41869015A38DF562F1CD4D7 /* String+OAuthSwift.swift in Sources */, + 7B0165D5D135F49FBF2A7CFA5835FB2D /* UIApplication+OAuthSwift.swift in Sources */, + 4CB05AC6ED61917C42B5AC859CC4A29A /* URL+OAuthSwift.swift in Sources */, + E4807586C37E136C782458E8C508A198 /* URLConvertible.swift in Sources */, + E9C126FED60C7F9D6E809EB8E6C35BE8 /* Utils.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FAF6605C0AAC4699B666F4C73FE3575E /* Resources */ = { - isa = PBXResourcesBuildPhase; + 26F9AAFE1D303854BAEE10CE036B6DA3 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B30A6B3DFF83627671A067275B1F5A53 /* 1Password.xcassets in Resources */, + 4EC960FAE9CF65B8A6FE0473AE5BFE0A /* SwiftyJSON-dummy.m in Sources */, + 2D307128ADD34357C071A5187248B238 /* SwiftyJSON.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 03BA7177E344B35F0307732B1BC06030 /* Sources */ = { + 298BC29FBD85B2540A12B7FBC977D910 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D3E75BF1CD71E652CC45FDCB4AE14614 /* Collection+OAuthSwift.swift in Sources */, - B534C860CAE003002A6C216213840D63 /* Data+OAuthSwift.swift in Sources */, - 7DDB67D88B512BA7C9A209FAE1FC4332 /* Dictionary+OAuthSwift.swift in Sources */, - A7DAF83A232F3AFF12042EE640E9B5E9 /* HMAC.swift in Sources */, - 5690FDB8180383C37127B1A492856FBE /* Int+OAuthSwift.swift in Sources */, - E3542C75F42CC5AC771DD13A09B44544 /* NotificationCenter+OAuthSwift.swift in Sources */, - 6EAF65BB94E283EC52878AA568B9DA67 /* NSError+OAuthSwift.swift in Sources */, - F609BBBD0D8578A9276BAD56F8A0915C /* OAuth1Swift.swift in Sources */, - 6261D97F8A9F732DAE448D88904AEF1F /* OAuth2Swift.swift in Sources */, - 165B82E9CC22D32700725CD657F9212F /* OAuthSwift-dummy.m in Sources */, - 9C512A1597AFEBE5C611F17DCEA38A88 /* OAuthSwift.swift in Sources */, - 7901A7430A7CDFBBB6EA89241143BCAF /* OAuthSwiftClient.swift in Sources */, - 226BE81F776D54A90046FC239AA00323 /* OAuthSwiftCredential.swift in Sources */, - 289054E950468E3D2EA60149943BE435 /* OAuthSwiftError.swift in Sources */, - B9756D59C04C2A1966CD495FD5311D32 /* OAuthSwiftHTTPRequest.swift in Sources */, - 8C1B94C813C70D1497379D90EF2A0FB3 /* OAuthSwiftMultipartData.swift in Sources */, - 971F265F0C4290EE4F05090FA1364A11 /* OAuthSwiftResponse.swift in Sources */, - DE8E53C0EAEBC74FC1884E602D54BF0D /* OAuthSwiftURLHandlerType.swift in Sources */, - F0C266BEC6CCCD1C28530F20E3F8B12A /* OAuthWebViewController.swift in Sources */, - FBF27806D29315ECFAC86C8252C040B6 /* Objc.swift in Sources */, - BEBAA6F4912D2BEB99A775C20D4AAC81 /* SHA1.swift in Sources */, - E9A68A0108EDF613EC3DBA3E5412BEA5 /* String+OAuthSwift.swift in Sources */, - A2553B4FB766F53A52B8B411EC8632AB /* UIApplication+OAuthSwift.swift in Sources */, - FA5BB0D6F2E19517D95B59329CA7CF51 /* URL+OAuthSwift.swift in Sources */, - 327A116E2F299A0F5618AFC90BEB6F17 /* Utils.swift in Sources */, + F25BDE2C76CDED5241979B736413D257 /* FLEX-dummy.m in Sources */, + 83D7192E5DCCB5225AFE5C9A856BDC5A /* FLEXArgumentInputColorView.m in Sources */, + 3B7FBA5E2BBEB337BF525631209017C9 /* FLEXArgumentInputDateView.m in Sources */, + 8E0C743A733BA718CEC97BCC499D2F92 /* FLEXArgumentInputFontsPickerView.m in Sources */, + 1D20D6B03F9F1942C7A6803670DBA7C9 /* FLEXArgumentInputFontView.m in Sources */, + 0F966A6DFFE314F61FD451BDB4CE8643 /* FLEXArgumentInputJSONObjectView.m in Sources */, + DFEDE0B1963700BF6380781DE74C0AAB /* FLEXArgumentInputNotSupportedView.m in Sources */, + CCF2ABA27718B634FB43FC038ACDAA82 /* FLEXArgumentInputNumberView.m in Sources */, + 24298BCB6234D01437F55138084FA556 /* FLEXArgumentInputStringView.m in Sources */, + E9A896DD5E97A6F09F8EBDFAC397A457 /* FLEXArgumentInputStructView.m in Sources */, + 4771F18E9A7C8D98B58942AA34E400C4 /* FLEXArgumentInputSwitchView.m in Sources */, + 7C92D836C52A63A757FC6DE136A59A6A /* FLEXArgumentInputTextView.m in Sources */, + E2EE13295579752D025DC80CA5F7732E /* FLEXArgumentInputView.m in Sources */, + 53C214714639099AA1156DC68853ED2D /* FLEXArgumentInputViewFactory.m in Sources */, + CA2D6CEB741D69CA8D81B2AB338A3EFA /* FLEXArrayExplorerViewController.m in Sources */, + 242B057E169AC96CBAD214EC02297F67 /* FLEXClassesTableViewController.m in Sources */, + E29659D9B9E971688AB82797CAE48BB8 /* FLEXClassExplorerViewController.m in Sources */, + BEADAD28769B276640E7BC93FC4566BF /* FLEXCookiesTableViewController.m in Sources */, + AA23CE0A61423F97084104ADB9E15E24 /* FLEXDefaultEditorViewController.m in Sources */, + 0A7B140A9D24A24C0EC7CE20278A2E55 /* FLEXDefaultsExplorerViewController.m in Sources */, + 3C1D4E29DEC14C3CC424257F428CE6DE /* FLEXDictionaryExplorerViewController.m in Sources */, + 4C1DBA40323024AA1453AA54BE363DC1 /* FLEXExplorerToolbar.m in Sources */, + 7CB81B44146F7B6E06AED6BFEADBDF8C /* FLEXExplorerViewController.m in Sources */, + FDECC4C178610587A37E9A77920F071F /* FLEXFieldEditorView.m in Sources */, + 894B6D84ABE83BFB8171EB14E64E0FFB /* FLEXFieldEditorViewController.m in Sources */, + AFAE3D8B62E472E9723590B3FEEC2B92 /* FLEXFileBrowserFileOperationController.m in Sources */, + D5A8408FFA6CFAC287A8F3FDECD85EAF /* FLEXFileBrowserSearchOperation.m in Sources */, + E2C327327C04A0BAA0C88923D8C8F57A /* FLEXFileBrowserTableViewController.m in Sources */, + 85CB17B3BA3028C89B21BF612BAA08DE /* FLEXGlobalsTableViewController.m in Sources */, + D1299C33BD7B598E17D457E72059B477 /* FLEXGlobalsTableViewControllerEntry.m in Sources */, + BE10DFEE00670388FE399123080E1446 /* FLEXHeapEnumerator.m in Sources */, + 2E30421363E6F810B6C4541BEF1C5B68 /* FLEXHierarchyTableViewCell.m in Sources */, + 89F4C810CF844212794D8A3A2BE493FC /* FLEXHierarchyTableViewController.m in Sources */, + E873B22EE274DFA80A0D416691EE4821 /* FLEXImageExplorerViewController.m in Sources */, + 06C28DEE8DC8D308867C11FA35B7A15F /* FLEXImagePreviewViewController.m in Sources */, + 19649D84934AF68169A23E3D97384156 /* FLEXInstancesTableViewController.m in Sources */, + B299E04F71E1209865F87A7346313815 /* FLEXIvarEditorViewController.m in Sources */, + 5CAE1AF90A524E9FC8DDE99986685BAA /* FLEXKeyboardHelpViewController.m in Sources */, + 3EBC5C7E5E6DE1AF6D0C94DC69662B96 /* FLEXKeyboardShortcutManager.m in Sources */, + 28C215B627699B57E6D23A1244C35C09 /* FLEXLayerExplorerViewController.m in Sources */, + DBD5D63153A6FCEFCC9B55750DED5A69 /* FLEXLibrariesTableViewController.m in Sources */, + 1A3506FA82C381B36B418EABCD97A2DB /* FLEXLiveObjectsTableViewController.m in Sources */, + 8A738E28B4B7FB1C23B3625FC61FFE7C /* FLEXManager.m in Sources */, + 6D8927DED2096CAF3DA22DF78AB9650C /* FLEXMethodCallingViewController.m in Sources */, + 77611AFABC3802398A75FD2005534D36 /* FLEXMultiColumnTableView.m in Sources */, + 0F0D34A7B6AAC1116A5A3194DA6A58F9 /* FLEXMultilineTableViewCell.m in Sources */, + 3DF98AF008EFCDD4C6C017E63F55FFF6 /* FLEXNetworkCurlLogger.m in Sources */, + C909AAA0C33D3E6C61FF9233AB566ABC /* FLEXNetworkHistoryTableViewController.m in Sources */, + 7EB8A0B273EBDF007F810D732E1E8059 /* FLEXNetworkObserver.m in Sources */, + 74C9A3D5B5EE03321B465E27A92E8975 /* FLEXNetworkRecorder.m in Sources */, + 1593C5B6F13379E538557D75E4E4A0DF /* FLEXNetworkSettingsTableViewController.m in Sources */, + 32F2F47186C578EE700D8FE5BABEED6F /* FLEXNetworkTransaction.m in Sources */, + 68942D0CD245FF0633C04D6B8A910C9D /* FLEXNetworkTransactionDetailTableViewController.m in Sources */, + FB723679AC3F4B6C2C41D937E747EEE6 /* FLEXNetworkTransactionTableViewCell.m in Sources */, + BA9B6F7220FD73093FB2BA0D7D9706D6 /* FLEXObjectExplorerFactory.m in Sources */, + 1D144002EFE010866F1AE3A7447FD808 /* FLEXObjectExplorerViewController.m in Sources */, + BBDDE186D609EAB1C124452433BCD3C4 /* FLEXPropertyEditorViewController.m in Sources */, + AD1F7EB0805534B6FA9D80087F61F880 /* FLEXRealmDatabaseManager.m in Sources */, + CB59431268DFB96D25DE982DD37F85BB /* FLEXResources.m in Sources */, + C25F611FFAEFBF56DC00ED2E157EAF26 /* FLEXRuntimeUtility.m in Sources */, + 94D6442A9917239E083A251F575C32BC /* FLEXSetExplorerViewController.m in Sources */, + 39C13CE42C68F7CA61A1CE530E4A4A7D /* FLEXSQLiteDatabaseManager.m in Sources */, + 8FBCA93BA8A4006AF6DDC4CB41C848FE /* FLEXSystemLogMessage.m in Sources */, + B2C7CB4AB79C7260DCE25B7D110DF244 /* FLEXSystemLogTableViewCell.m in Sources */, + 0B9169EED4B3B056803F9C236C725FE3 /* FLEXSystemLogTableViewController.m in Sources */, + BA1A66AD570D806CB7A3B94D7FEEAADF /* FLEXTableColumnHeader.m in Sources */, + 982791F2573A2B3F8E6F1F142135A13C /* FLEXTableContentCell.m in Sources */, + 3349D78785AC5C02717AF6FA81EAC653 /* FLEXTableContentViewController.m in Sources */, + F87BEC6F2641051FEFD81EF0DA99E9A3 /* FLEXTableLeftCell.m in Sources */, + CCAD9853D8E32B2028C2ACA3FBBE24AD /* FLEXTableListViewController.m in Sources */, + 4F146E5D122A59B387B3949D5C494DD1 /* FLEXToolbarItem.m in Sources */, + 9BDFE8C62E11DD07C598692E1B891F51 /* FLEXUtility.m in Sources */, + 47AAE7A3E70ECFA5173BD823CA54F7F7 /* FLEXViewControllerExplorerViewController.m in Sources */, + 594CC16B543502E593D986AF4AE589B8 /* FLEXViewExplorerViewController.m in Sources */, + 91F77A6E96F67BAEA779D351EAFBE0A1 /* FLEXWebViewController.m in Sources */, + CF45F0233210110C1A05B0FEEC326416 /* FLEXWindow.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 05815B29D59E83561D7DC94EB05A1254 /* Sources */ = { + 337D64CDB4D5B3ECB4CAE13E78FAC979 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C380BE0A77A11A663574776EF6C6E49D /* Pods-Rocket.Chat-dummy.m in Sources */, + 472540D0268D70C1C3FCE815D1D3AE49 /* FirebaseInstanceID-dummy.m in Sources */, + 13C6D793800D6235E7F16074FE99881F /* FIRInstanceID+Private.m in Sources */, + CF901AB184D82822382A43858F11579C /* FIRInstanceID.m in Sources */, + AB40F243D914F98D6B5EA3E90ED253D2 /* FIRInstanceIDAPNSInfo.m in Sources */, + DBD33EDA0C0821032AE9C0215A55FAB2 /* FIRInstanceIDAuthKeyChain.m in Sources */, + 0CC29589D1D089F4C8D024B257CE58CF /* FIRInstanceIDAuthService.m in Sources */, + 5C2659BA4A11948475E1533DB9871D7F /* FIRInstanceIDBackupExcludedPlist.m in Sources */, + 0C988CE41AA83678137315A1BB090F0E /* FIRInstanceIDCheckinPreferences+Internal.m in Sources */, + E735288A237BC7EF7571170CF2C64889 /* FIRInstanceIDCheckinPreferences.m in Sources */, + D3F2256F4E5F3C26A83D8E46BA1C017E /* FIRInstanceIDCheckinService.m in Sources */, + D60F258258EFE68310E06EABFD20E681 /* FIRInstanceIDCheckinStore.m in Sources */, + BB0593B00497BC24D297402CFC1A59E4 /* FIRInstanceIDCombinedHandler.m in Sources */, + B18F314BBB5E28951F077F4A43E86F87 /* FIRInstanceIDConstants.m in Sources */, + E879A0A63310DC50AF88CC9C9A6B6D15 /* FIRInstanceIDKeychain.m in Sources */, + 0CB40B7EE34740C4864893A38D19E919 /* FIRInstanceIDKeyPair.m in Sources */, + 3B3E85849A2FC75DAC149946B2A7A15A /* FIRInstanceIDKeyPairStore.m in Sources */, + 8750B15783988095C3BAD7DDA521B311 /* FIRInstanceIDKeyPairUtilities.m in Sources */, + 01F587E2098F5F2D1F8F4717B39DE82F /* FIRInstanceIDLogger.m in Sources */, + 11B60B4F7A87182249DDC6FDB48CE43E /* FIRInstanceIDStore.m in Sources */, + 82A17775FB9AB54BCE5BFC00AA4E41EC /* FIRInstanceIDStringEncoding.m in Sources */, + 0664E43AAEE7F86FCA565B80FED57D9C /* FIRInstanceIDTokenDeleteOperation.m in Sources */, + E6C9DF52D1D228B02209CA263C36AEBD /* FIRInstanceIDTokenFetchOperation.m in Sources */, + 69B4F6B91EBC84BB98302A7F6FE9258F /* FIRInstanceIDTokenInfo.m in Sources */, + 3127F5E7CBD0ADD086C1490515C0B2A4 /* FIRInstanceIDTokenManager.m in Sources */, + 45045EB19C90EE6D523629011D729EB1 /* FIRInstanceIDTokenOperation.m in Sources */, + DB83683446BE29F53CCA0D596F839A26 /* FIRInstanceIDTokenStore.m in Sources */, + 4F77D270FEE889C4AD32A474B6292037 /* FIRInstanceIDURLQueryItem.m in Sources */, + 2A1134F48C016839713BBF8A5ED07966 /* FIRInstanceIDUtilities.m in Sources */, + 219D32353B2BDFDB048843F5897260CC /* FIRInstanceIDVersionUtilities.m in Sources */, + D4D0797CE1DCB3592028FCEDFFD23DF3 /* NSError+FIRInstanceID.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 05B8704079FC0E43AE8CE19D0FED65E4 /* Sources */ = { + 38D2357BB01DE268A22F331BC6CFEBB5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 248A067D360B73168E08C865813B5511 /* AudioRecorder.swift in Sources */, - 07959CC46C97061753647B6C678AD1E5 /* ComposerAddon.swift in Sources */, - 13F73AB2B0D89A2442921781989A888E /* ComposerAddonStackView.swift in Sources */, - 38F524C01713A83277E4302E54A2E964 /* ComposerAssets.swift in Sources */, - 3C7685038D76AF717F5B0E4EB9DA1DB5 /* ComposerButton.swift in Sources */, - E7C435223DDA798F478EEB956536D026 /* ComposerLocalizable.swift in Sources */, - 9F337B407802C286FDAD64AFB40BD0E9 /* ComposerTextView.swift in Sources */, - 94B87F1F84E296AEC558DF513BD3FF81 /* ComposerView.swift in Sources */, - 39A350B8318A31CC116F9AD18ACCD1F4 /* ComposerViewDelegate.swift in Sources */, - 7D0544512D04C2E0DD3507F9109ED7F3 /* ComposerViewExpandedDelegate.swift in Sources */, - 849B7636C2282633E41AC2F179633354 /* EditingView.swift in Sources */, - AFFCF6E38DA31E93A3D3D43DC1DC8492 /* HintsView.swift in Sources */, - 79979F0E994E2DEC532F1FC8A99B9B69 /* OverlayView.swift in Sources */, - 328384B965F876390B39560351A57141 /* PreviewAudioView.swift in Sources */, - C5F52A847402C1E01A24525EF78BF744 /* RecordAudioView.swift in Sources */, - 1F6F265188A7C543EE1B32C59A4745A4 /* ReplyView.swift in Sources */, - B65089CA7D5EF1FFFF0EEE6259CEB95B /* RocketChatViewController-dummy.m in Sources */, - 3CBFF42FB6CB0561EB20C67345ECE4D4 /* RocketChatViewController.swift in Sources */, - 567419C86535073179C752D8E2FA51AF /* Tap.swift in Sources */, - E6281056CA6CBFF8FFEB7CAE5B38B54F /* TextHintCell.swift in Sources */, - 2996E878CF37717F51E1908326C3DF9C /* UIKitExtension.swift in Sources */, - ADA03CC209D58DAA15CEC9223F935DAB /* UserHintCell.swift in Sources */, + 518910765C2DE5BA959EF69B489C6041 /* GDTCORAssert.m in Sources */, + 1B22FDED44B159FAA4AA8A3CE5DB9A71 /* GDTCORClock.m in Sources */, + 22EE34A5CBC8F5DBDEA54E7CEE44704F /* GDTCORConsoleLogger.m in Sources */, + 509A485E95F3ABEFCC417087D169BD2A /* GDTCORDataFuture.m in Sources */, + B3CA1B1CF4C9BDCF65395E08FA414444 /* GDTCOREvent.m in Sources */, + EAE71B6807EB38626B53A2F7793ED6F7 /* GDTCORLifecycle.m in Sources */, + 00184DEF06EF90DBFF7C72F550C5DE5E /* GDTCORPlatform.m in Sources */, + D239CF60E9F9BA1131251CEDE49A0ACB /* GDTCORReachability.m in Sources */, + 37E7CD211F1E3C8A60ED359054E562FC /* GDTCORRegistrar.m in Sources */, + BB0528A5A3CD516726D5DAD994377AD6 /* GDTCORStorage.m in Sources */, + 474CD4F3BAD4D9AF168CC251CDE3B282 /* GDTCORStoredEvent.m in Sources */, + 3C232DAAA358660765095556799C18C5 /* GDTCORTransformer.m in Sources */, + 131809B3DAAEB90BD4DE144DFC91C64B /* GDTCORTransport.m in Sources */, + FDAB7C596EBF90BD232F8CF4D62E6E61 /* GDTCORUploadCoordinator.m in Sources */, + 6690D3299C78534F53014629DBA970C3 /* GDTCORUploadPackage.m in Sources */, + 282EABC35D50EE9310D8DC301ABDDAD9 /* GoogleDataTransport-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0ED573766C8B0EB093999838F3C4FFCF /* Sources */ = { + 3C8B6683C5EC50A0DCE69A2B07B51852 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9C540CB9E8903ED4A62FDBDA204165E2 /* Reachability.swift in Sources */, - 2CE17059A564A8187F9E1E2FB68DD95D /* ReachabilitySwift-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1A36E215947A0321EDCCD260AF0BA87B /* Sources */ = { + 3DA9ACAAEF092DD065379EFF262DBCAC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3ECA7C8D00453BA8AAE0AEBFEFAC2430 /* FLAnimatedImage-dummy.m in Sources */, - 2F5574035CCD75B71BB3E88FD23A8B4D /* FLAnimatedImage.m in Sources */, - 1C5B977D0E6A4968D381372FAF343BFE /* FLAnimatedImageView.m in Sources */, + C42E59F4C38494EEBBCF204C3D25ACB4 /* nanopb-dummy.m in Sources */, + 935E1111DE438D6F7447C03695B49A7B /* pb_common.c in Sources */, + 6260367ECB338AD36E5117C54726D039 /* pb_decode.c in Sources */, + 3FEAD561DDC030EE1A1F973AD9AA3E6A /* pb_encode.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 23C9ADA91397B21678E1D274FF34B223 /* Sources */ = { + 462E7C81F1BA710FADE6CD391D70770F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1A26D1C57D5F41A29CCA1E3EF59F440B /* SwiftyJSON-dummy.m in Sources */, - 59431CBE6A7691F2B908023353593E8B /* SwiftyJSON.swift in Sources */, + 82D93DB936015290B8C7F4C4581BF35F /* Bar.swift in Sources */, + 9BFB46B940FF9FA1C25F145D706CDF26 /* BarConfig.swift in Sources */, + A71F71235C8C49E86E48B8BD2999E781 /* Button.swift in Sources */, + BC0A6A8E7238E2B986C927D35AE6E117 /* ButtonConfig.swift in Sources */, + 93ADDF997A28085EE2E1B7EFA21FCBCE /* ClosureSupport.swift in Sources */, + 9D9CB2490267C3979E835A0552CCE4CF /* Element.swift in Sources */, + B926BFEC8D737BDC9D2C43D41A17642C /* ElementConfig.swift in Sources */, + 026F5AABA7100C4876F1EEB8CD3259F2 /* Label.swift in Sources */, + 9811E4A47F425CCA922ECF6769767E1E /* LabelConfig.swift in Sources */, + B883E1D0E83D93A6CBF0127F6F965405 /* MobilePlayer-dummy.m in Sources */, + 4631A136C380CDF5A1676B0AE4D801D2 /* MobilePlayerConfig.swift in Sources */, + 0D8681FCF15AFFFA1A7959DFCDE0BBE4 /* MobilePlayerControlsView.swift in Sources */, + 6F9ADEADE72FFAF7FD9055F0C8108B3C /* MobilePlayerNotification.swift in Sources */, + 1EDEF7086FDAD53CA40597A1DB865793 /* MobilePlayerOverlayViewController.swift in Sources */, + BEA9FDF217FA44DC901033AC22C75D36 /* MobilePlayerViewController.swift in Sources */, + F3D3869F001EE1D091A0F92269BAE613 /* Slider.swift in Sources */, + 64F3CF391AA5E0A67482CE283F5DAFD0 /* SliderConfig.swift in Sources */, + DD8A6292D8881283228BEB648E19270F /* StateHelper.swift in Sources */, + 628ED7BE3E21F3EC381ADA2E41181F11 /* ToggleButton.swift in Sources */, + C8D12ED70CF0A84CC28C4C4CEE8BE3C7 /* ToggleButtonConfig.swift in Sources */, + 855D115B6F80C39A0E873E1899B78E9F /* UIColor+Hex.swift in Sources */, + 2B08D00AF191FBD5FC6EDE3256851044 /* UIImage+CocoaPods.swift in Sources */, + BB39E1FE8CFE28553CC2D089C2A15B28 /* VolumeView.swift in Sources */, + 1333471C0B8B49E4C79B4B6900F1CCBC /* WatermarkConfig.swift in Sources */, + CD936EF0F6FA45F62234D6048D82F8BA /* WatermarkViewController.swift in Sources */, + B767ED712EC8EEA04D0BC903700850A8 /* YoutubeParser.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2470689086ACA2122F820F5627030871 /* Sources */ = { + 4F60C0BD5C930697E98948D3191DD9F1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8BCF138B777A7C93A782F1C932D9A6F0 /* semver-dummy.m in Sources */, - 9081FAA8A6F6D7EA4F651AD410FFDAE1 /* Semver.swift in Sources */, + 973F685292556848D123809E7CB24CAA /* AnimatableImageView.swift in Sources */, + E3CF9B7C659C4A306271AD55E31BBCE6 /* ImageViewerConfiguration.swift in Sources */, + E73496724CCD7ED168B688422247AD6B /* ImageViewerController.swift in Sources */, + AFE74A83A71B928B1CFABB2716E9A82C /* ImageViewerDismissalInteractor.swift in Sources */, + C9FB53C2F90336D4E30D6092086AF69E /* ImageViewerDismissalTransition.swift in Sources */, + C8181A90D1B5496C243D202A6E6A1F7A /* ImageViewerPresentationTransition.swift in Sources */, + 706BED53446685EE4AFE9FC696011032 /* ImageViewerTransitioningHandler.swift in Sources */, + B7FE149A1B5BC871FBE59FB1B5D0579E /* SimpleImageViewer-dummy.m in Sources */, + 0C91D0D817CE7F008CB3D7DE848CE90F /* Utilities.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 260626DAA7D2BAF24C73CA8BE219D00E /* Sources */ = { + 53851B0909FF8CC70E04C0EA732DF590 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B99B25299780B6DB24C6EAAD0633BE3F /* AnimatableImageView.swift in Sources */, - FD4B67ACB285ED5E37CB5BA605139CFC /* ImageViewerConfiguration.swift in Sources */, - 34DFCD1575882F4E17A760ECBD253C50 /* ImageViewerController.swift in Sources */, - CA33B895059260AF36A5C06FA4A52B5B /* ImageViewerDismissalInteractor.swift in Sources */, - 6CE9B8B5C099E1679D25D6BCCF6FB2BF /* ImageViewerDismissalTransition.swift in Sources */, - BBB60A30C1236658D38F2D8B8D1A8101 /* ImageViewerPresentationTransition.swift in Sources */, - 2CD75D818E317E4C39C0C9ECDFDF9CC1 /* ImageViewerTransitioningHandler.swift in Sources */, - 2C327A494B6C6E4B0D1682D4AC99CB2F /* SimpleImageViewer-dummy.m in Sources */, - CC39795960C2D58C30E7DABBC5A7F78C /* Utilities.swift in Sources */, + C4C03535BB63B139CA26ACD5E5768EDB /* FLAnimatedImage-dummy.m in Sources */, + 932194F95A64D40B5C196AF171140B8C /* FLAnimatedImage.m in Sources */, + 72DDD127D17582498DD4B46CF5475726 /* FLAnimatedImageView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 392ED55BEE4E6D7417907C3214C59EF0 /* Sources */ = { + 5DACF46DFCFF433FE6089108A92CD4DE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AA5BB363CABC8ECC85A73C04BED3F72C /* Bar.swift in Sources */, - 74DC847E8926AB4B990136CA4BB7CD55 /* BarConfig.swift in Sources */, - 131A824928744A8F759EAAC9ED1E8E12 /* Button.swift in Sources */, - 92D9A966DB0411B2E1564D276C84A47D /* ButtonConfig.swift in Sources */, - 95340A3F617582973169B40C09B3DE6C /* ClosureSupport.swift in Sources */, - D808C6A37C157106940E3F1B03E4A9BD /* Element.swift in Sources */, - FC6B864A0A1851700147880AAAA8ED54 /* ElementConfig.swift in Sources */, - 84FF9FE22A43566B9CE6BD4922D58125 /* Label.swift in Sources */, - 6271D1DCEBB86E5FFB5D15B8EC9ED188 /* LabelConfig.swift in Sources */, - 1C314875A4B37D60C951318B780B9FFF /* MobilePlayer-dummy.m in Sources */, - 1DA2DCE9746E5377CFE2F4FF9293EA4E /* MobilePlayerConfig.swift in Sources */, - 835353D62E4BDBDCE6F16F8BD0A21079 /* MobilePlayerControlsView.swift in Sources */, - 608E468ECDB0A2A504F478445FAB0D19 /* MobilePlayerNotification.swift in Sources */, - 7DAFC0D022E3BC65CB0237F3364DD4A9 /* MobilePlayerOverlayViewController.swift in Sources */, - EF480A5CF36C84E0681A90E09ABC8E7E /* MobilePlayerViewController.swift in Sources */, - 9696FF3D969C7802678DAB4CE6144FA4 /* Slider.swift in Sources */, - 1852EE796DC5E323E8DA6193AE82B892 /* SliderConfig.swift in Sources */, - 7CE0283111855B963AD714F209DF58D5 /* StateHelper.swift in Sources */, - 7BB01C8EC08E68C03D9E7D8708AB45BF /* ToggleButton.swift in Sources */, - BFC881B72AB9E0403FF84D2D1D9D766B /* ToggleButtonConfig.swift in Sources */, - 81D10CD3DF27DFEEAE704CB70B4CA37C /* UIColor+Hex.swift in Sources */, - EBE2F40A3A0A4AA989D9C7A6D57F7D75 /* UIImage+CocoaPods.swift in Sources */, - DBD2DB2B3E4C9EF8E503058751107DB0 /* VolumeView.swift in Sources */, - E7C38866DBBBE6F894C8AB0B093AE803 /* WatermarkConfig.swift in Sources */, - 74F0482B43281400FAB938FD672C5E5F /* WatermarkViewController.swift in Sources */, - 83DDF0D1534D39E6DBDCF5E3B19DE05B /* YoutubeParser.swift in Sources */, + A6E08399A3C4DFE5EFF2EED8BAAA1257 /* Pods-Rocket.ChatTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3A19CF3A5613BCEAD9375A6631829C78 /* Sources */ = { + 5E25D6F959A2E20A99FF55B14B85B34B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 74B8B7C3E41B9FA42F8C7FD79495C2EE /* Compression.swift in Sources */, - C6A8658D80937740028BD6CAFF4F0A66 /* SSLClientCertificate.swift in Sources */, - 0C77E6855DE81321F084DAB44272A0D1 /* SSLSecurity.swift in Sources */, - CEF3C37CBDDFFA28EDBA569A9F786A5B /* Starscream-dummy.m in Sources */, - 80E4D5BD066FDD0BF7814A87F4A425DD /* WebSocket.swift in Sources */, + A63F9C038CD6535B47768C23CED5AA10 /* FIRCoreDiagnostics.m in Sources */, + 0DC0B49E65FF18A8FE459F14AAC5BF68 /* FIRCoreDiagnosticsDateFileStorage.m in Sources */, + 2FE7D28D5FB55E9C0C427854338289BA /* firebasecore.nanopb.c in Sources */, + 96070804E03BF30C6FA07022DEBBDD23 /* FirebaseCoreDiagnostics-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 51A762ED0A60A7C90DEC02D24CC9E327 /* Sources */ = { + 6392CE1493D7F9E44220C42699419A77 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B1218315F1F06D9CFF492ECD99F134E6 /* Pods-Rocket.ChatTests-dummy.m in Sources */, + 817650BD30BA56AD50457BA4D38D8C14 /* Pods-Rocket.Chat.ShareExtension-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 576B7A0B54C0BFCFFE866B43B6DB1372 /* Sources */ = { + 6587A350A7E8F1D540A43FAF6D3A911E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 69B26FDDE602F0718700810BD0DFE47A /* AnimatedImage.swift in Sources */, + 0B92E718925E3A6792C783634E9ADA90 /* Nuke-FLAnimatedImage-Plugin-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6A53C67BA00EC1E84F73DB71041FC8C1 /* Sources */ = { + 7AED59679A2B1CD200C0DC1B1DE546A7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 88011FA89EE5AC537849C08A3E707756 /* nanopb-dummy.m in Sources */, - 76D76588B505B57D2538DD3DAE801F27 /* pb_common.c in Sources */, - 208C867D5C10DF6A9EED61AD8FAFBBA5 /* pb_decode.c in Sources */, - 9B8B2C76B95C12702675B7BF45998036 /* pb_encode.c in Sources */, + 42A37418E4595A5506DE3587A0CC9D14 /* Pods-Rocket.Chat-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7BE049FF0C154DE7A97382330A3739D8 /* Sources */ = { + 8A5EAAF50D2B874B749E4B025D22F259 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C2215BBDD6180E69500E5639FB3559F1 /* NSAttributedString+Markdown.swift in Sources */, - 55B99143A86345FF60844FBE0215954A /* RCBaseParser.swift in Sources */, - 4A236A2C4C81AA6E475F9F19E6976103 /* RCMarkdownParser-dummy.m in Sources */, - 871EA553269129D998E7088CF0FE649C /* RCMarkdownParser.swift in Sources */, + 080F70849F2A45F71BE49C7A80BDA5E7 /* semver-dummy.m in Sources */, + B406576A0EF740930CB75EFC95F9A932 /* Semver.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8518E1B08634A95E41906B81537DA67A /* Sources */ = { + 911189342D90E355386423A72DAA448C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A9763F2B0079481E3825801458BF954C /* AnimatedImage.swift in Sources */, - 6D00E0681A44F584FB8D34DBE9DF77D5 /* Nuke-FLAnimatedImage-Plugin-dummy.m in Sources */, + 55127731A157A730FF3010E3820E7429 /* Compression.swift in Sources */, + E77F082C388CD0F858E1B7245BC73A10 /* SSLClientCertificate.swift in Sources */, + 0DB32C423C116AB35E5FA1D8107913F6 /* SSLSecurity.swift in Sources */, + DDC0E4E55ADA1C1523469CE5AC96F016 /* Starscream-dummy.m in Sources */, + 34781352DFAF3A78D9BDA0511AF52F0C /* WebSocket.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A246D87481BB66ACA7AE3AD5865EBB61 /* Sources */ = { + 96B69609E4D687EF1FC447E8EA95C829 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C6A4D8E394028754793017A163874171 /* Algorithm.swift in Sources */, - E7963691536D0507E5DFC68B2D0B72F9 /* AnyDifferentiable.swift in Sources */, - 87419E575E71D2113FDF8E9F183C374C /* ArraySection.swift in Sources */, - 35F308B0E7894F695470621A6431F5D9 /* Changeset.swift in Sources */, - 19DD6C9078C87B953B28F28D5B26D17C /* ContentEquatable.swift in Sources */, - 68EBFD2D9DD354991AF68F55B2860960 /* DifferenceKit-dummy.m in Sources */, - 8273F8901BEB241BBF24F6C41E86A124 /* Differentiable.swift in Sources */, - 46007E2178DB5E7945C3559F38DD92A5 /* DifferentiableSection.swift in Sources */, - 91E73ADA7F0896079FB2C6C2145A8AEA /* ElementPath.swift in Sources */, - 66017B924AC59FEEC438F202A37D4D6E /* StagedChangeset.swift in Sources */, - 2F6CB04711EE8AB653E82A6A81D0A6A8 /* UIKitExtension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A2CF0DE37F4BBE8E8FFC2F36F4F6F709 /* Sources */ = { + B0EFAA309C6AE435054F6E064DAE316E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FC8838FEFFD890A1347EAC958C263A39 /* DataCache.swift in Sources */, - 67A97FF007F0DB034E9153DCC408C0A8 /* DataLoader.swift in Sources */, - 5FDA40753A64D56E734E3A10F98BF16F /* ImageCache.swift in Sources */, - 3D426F510FB3AD2E11C049F32BD72674 /* ImageDecoding.swift in Sources */, - 552ECDC3881263B7B31F05F8DED17B87 /* ImagePipeline.swift in Sources */, - A82DF7004D25FBC1F0CC884A5FFA2448 /* ImagePreheater.swift in Sources */, - E2EBC05CCE1809F4D2DD7919DD1D3FA3 /* ImageProcessing.swift in Sources */, - B13C1F9B80AC7FC91B582F153504BB0C /* ImageRequest.swift in Sources */, - 37B5F51CB3FBCC86DD87D89E488F65E7 /* ImageTaskMetrics.swift in Sources */, - 2BDA3925B88A286ADD939151942CE66B /* ImageView.swift in Sources */, - 28D13F190EB5775B84610175B00949EA /* Internal.swift in Sources */, - 69F858108A29BF9E1E10E874F98E1ECB /* Nuke-dummy.m in Sources */, + EE9D46F53E07BF44BD7A0526D090DADD /* FIRAnalyticsConfiguration.m in Sources */, + B80256CBA23EB1E6E01DC5DDDBFA501F /* FIRApp.m in Sources */, + D3E15FF7AF92BA2ECCAAA40606F17CFA /* FIRAppAssociationRegistration.m in Sources */, + 929021606764407D567D0218A8F899D4 /* FIRBundleUtil.m in Sources */, + 02E0811D62948E509E4634A12E1C1DC3 /* FIRComponent.m in Sources */, + 6DCA43ED33719E699EF59F5BA710ABDE /* FIRComponentContainer.m in Sources */, + 8B095B4D75B7143F1EAC7B4730590586 /* FIRComponentType.m in Sources */, + 8DC3D930E40CF61C9FD907797217AC17 /* FIRConfiguration.m in Sources */, + 9EFC393FC4B8E2C9B6068EE74FB13B5B /* FIRCoreDiagnosticsConnector.m in Sources */, + F823CED6E296BE7C7A18024A4A409B66 /* FIRDependency.m in Sources */, + D10FE561CCB6EF4D7BA7E804A84799D1 /* FIRDiagnosticsData.m in Sources */, + F3EF19121DEB2E7346F24AE6EEA8A971 /* FirebaseCore-dummy.m in Sources */, + DA3B79895252E21002C09A6DE012A89C /* FIRErrors.m in Sources */, + 405953293E7114B092F97AE6CFDD922B /* FIRLogger.m in Sources */, + 021E91FE24B18FF0F739001C3A3FA734 /* FIROptions.m in Sources */, + D70790316B73077273A0FD063BF2DB6F /* FIRVersion.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - ACB1B19D6B6453ED05B9C63C12780992 /* Sources */ = { + B85FCB1976B1D7737F44BF1F77E0CBEC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 72E3A3239721899F99A89CD1F08C3BB5 /* Extensions.swift in Sources */, - 4D775FCF4DB4761AB0FE6C6CD083902A /* Swipeable.swift in Sources */, - 84E619A87B2A6A4E5BEC2B1C58EBF95F /* SwipeAccessibilityCustomAction.swift in Sources */, - F3C32260307F800680F75A26DAD362B9 /* SwipeAction.swift in Sources */, - 97594429015AE49F590E5FFF585D0E09 /* SwipeActionButton.swift in Sources */, - 7F4BB0AF8CE846D5C4601032A739E587 /* SwipeActionsView.swift in Sources */, - 513893788E3F1747FB3D349E19CE91BF /* SwipeActionTransitioning.swift in Sources */, - 411ACC96B02E05DD963AE6F04A9ED6C5 /* SwipeAnimator.swift in Sources */, - 7195D731D2A884C6F0C32040874D8716 /* SwipeCellKit-dummy.m in Sources */, - 8505D625E8B1F455D7A171C1B03F4FB3 /* SwipeCollectionViewCell+Accessibility.swift in Sources */, - A840AD06C57F587BDB8B86C2F873032E /* SwipeCollectionViewCell+Display.swift in Sources */, - A64595F6087D4E8CF1D263D098E7BB13 /* SwipeCollectionViewCell.swift in Sources */, - 8FD229CE3644D5A113FF6174ECDBC96F /* SwipeCollectionViewCellDelegate.swift in Sources */, - EF7A31F45CD20CF7A47CC1C184CF5366 /* SwipeController.swift in Sources */, - F9542356BC3F32B95B8D0E123CE8C73F /* SwipeExpanding.swift in Sources */, - 9B58F68B28FAB958617A461F1BD49816 /* SwipeExpansionStyle.swift in Sources */, - 6BA74A65918933ABA4CF2C097461F429 /* SwipeFeedback.swift in Sources */, - A0CD36483C0598453EB909ADA2ED241A /* SwipeOptions.swift in Sources */, - C04CA7ADED6D4028304C2CBFE803C7D5 /* SwipeTableViewCell+Accessibility.swift in Sources */, - 40181C3FD6EF70DB88AD7E67715325D7 /* SwipeTableViewCell+Display.swift in Sources */, - B2C3DE98C725712268E37D28812DEC64 /* SwipeTableViewCell.swift in Sources */, - FF9B0A54C07C9A9BBAB2D598FF8D8546 /* SwipeTableViewCellDelegate.swift in Sources */, - 11E876EA8AD17826C9D7780782F09CA6 /* SwipeTransitionLayout.swift in Sources */, + A981D6E65B23C7CF2592579EA86056BD /* cct.nanopb.c in Sources */, + 93C409412D7F2D1F2E0AAC6A83712D92 /* GDTCCTNanopbHelpers.m in Sources */, + FDB7358B03A7A8565E9208D3B881BEC8 /* GDTCCTPrioritizer.m in Sources */, + D250859CE34250988F2946FEEB7C5A6A /* GDTCCTUploader.m in Sources */, + F82206D4E245C71CDA9A76160D88D0CE /* GDTFLLPrioritizer.m in Sources */, + A75A2F56183D7A0D05CE388778CA4E9F /* GDTFLLUploader.m in Sources */, + 44CCDF4D3F56C4F252C5771365540CBC /* GoogleDataTransportCCTSupport-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B11960B9F00664533ACD2676DCC7E66E /* Sources */ = { + C49046578514EDDAA638373E412DE25F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5616EF77E5DF88B99ADC032E180A3B3B /* 1PasswordExtension-dummy.m in Sources */, - 2B79FE1B5DEAECBD9C42B50D9205D353 /* OnePasswordExtension.m in Sources */, + B3183972005B1C73CE7972545983DCFA /* Extensions.swift in Sources */, + 80C010CA21F71136A58F66C9FA180A30 /* Swipeable.swift in Sources */, + 2651D841D836267803C8975AFFCC53C8 /* SwipeAccessibilityCustomAction.swift in Sources */, + C7CECCB0102E1026DDDF1866A23D853A /* SwipeAction.swift in Sources */, + 01C79D63CCFDBA85212C1637C669AB87 /* SwipeActionButton.swift in Sources */, + 405A499030BB4FCFCB57ACC4030B69D7 /* SwipeActionsView.swift in Sources */, + D1F4524F7B5F6D525173AF7B6F45B052 /* SwipeActionTransitioning.swift in Sources */, + 36E0752DBE00B3398BBFFA6C1CAC105B /* SwipeAnimator.swift in Sources */, + 769E02867A91AAA9B85C899F5851B328 /* SwipeCellKit-dummy.m in Sources */, + 223D1E75FF1DEDC9F02EFF7DF23681AC /* SwipeCollectionViewCell+Accessibility.swift in Sources */, + 3BABF23AEF1E17E954724E569E9ACC9D /* SwipeCollectionViewCell+Display.swift in Sources */, + 0DFCE9020DE5CFF774689C2BC301FC77 /* SwipeCollectionViewCell.swift in Sources */, + 35D0E71D74AC2ED10B1A504D2F357263 /* SwipeCollectionViewCellDelegate.swift in Sources */, + 41B4E25292BF2533F6249485DB1E6220 /* SwipeController.swift in Sources */, + 12B0FC192BEFAD23B3946F5590931087 /* SwipeExpanding.swift in Sources */, + 0F2A35A63A613EC1F0C85E99D248ED63 /* SwipeExpansionStyle.swift in Sources */, + EEA9DC3847BC6DB5F29E7CEDADF17103 /* SwipeFeedback.swift in Sources */, + 0392BBF3A52139BE971F81F6A3B959FE /* SwipeOptions.swift in Sources */, + 75E12D0D04DED7DE57B127E2FA7D243D /* SwipeTableViewCell+Accessibility.swift in Sources */, + A302AFD2B1AF22E80AA0D9FF17FE7CE8 /* SwipeTableViewCell+Display.swift in Sources */, + 80EBB774DC570657F4209746F0057A5C /* SwipeTableViewCell.swift in Sources */, + E4905D399D1A0A134ED08B776033A642 /* SwipeTableViewCellDelegate.swift in Sources */, + 20A252DFBEBE7AF8D0FFD73137B5BCD6 /* SwipeTransitionLayout.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B412B06C8401661DC2DEEAB2B2ED1144 /* Sources */ = { + C55858500E8170456BB65351096B0F28 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3CAB082213DF7D4C25A6AA49BBE87932 /* Aliases.swift in Sources */, - 52FF433188825527675710E4B6773842 /* Error.swift in Sources */, - C42193392DF7800AE87903C5C5821D44 /* LinkingObjects.swift in Sources */, - 64725D53F149AF63F84E312E15091657 /* List.swift in Sources */, - E053CF4B5020C29594E7F90AC518F29A /* Migration.swift in Sources */, - 439059686404F4103C2F441790CCE64E /* Object.swift in Sources */, - 4E7319340DC8BF3F0CBE2B89C38788F4 /* ObjectiveCSupport.swift in Sources */, - B675F892C4E2C67712FB974D49E1B9AF /* ObjectSchema.swift in Sources */, - 7826F119BAB0D9F8EA9DB7F0FD49F1C4 /* Optional.swift in Sources */, - 8BB30F7FD758FAA928CFD80844828209 /* Property.swift in Sources */, - 81A544955BC66402AD98F8D60119AC0B /* Realm.swift in Sources */, - 8676579EC1C14FF3401C62CD081F9A29 /* RealmCollection.swift in Sources */, - E10D659BE703378BD476AF7A6FC17C01 /* RealmConfiguration.swift in Sources */, - 8DCAB7C722F01C78D89CFB8EA60575D1 /* RealmSwift-dummy.m in Sources */, - 8A4E9EBCDBA3010A59C61C560E2C9FC7 /* Results.swift in Sources */, - 01CE99DFE5AFF3E420B2D178FD21FB5B /* Schema.swift in Sources */, - 52547BC7D05D69242ABF357131AA824A /* SortDescriptor.swift in Sources */, - ECE9EDA925CB0A94E7A44D74450BD71B /* SwiftVersion.swift in Sources */, - 7F17EF7363D8722D8241D428F81FF8B5 /* Sync.swift in Sources */, - 8C748D784EE5FB94C202D9CFD8C58F7A /* ThreadSafeReference.swift in Sources */, - 65CF1297A1D63EEDF6BDC01D25614633 /* Util.swift in Sources */, + 4625F66424EEB36002BCB4257EE88A53 /* Algorithm.swift in Sources */, + A5F3E9F4469ABF1475269C74538687C1 /* AnyDifferentiable.swift in Sources */, + 6B049B2C2A6F0E56D3E5E98534EA3E1F /* ArraySection.swift in Sources */, + A8428E7DC2BAD77F8C0FFBE6FF69AC31 /* Changeset.swift in Sources */, + AB771764A22E1BE7BF4464F356D2D166 /* ContentEquatable.swift in Sources */, + FD93A8563CB16886E9E181F16966918E /* DifferenceKit-dummy.m in Sources */, + 296172009E36D06B28ABFDF0D470A159 /* Differentiable.swift in Sources */, + B56E58E3D16201F23BC069047D18C07A /* DifferentiableSection.swift in Sources */, + CBF233824A9A55749FA739BB6236FF23 /* ElementPath.swift in Sources */, + A98A4D9D453EBB5382EFF594721DEAE7 /* StagedChangeset.swift in Sources */, + D5E44F672980F1F93A6DFFC824395D9A /* UIKitExtension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B8C5F94059FFB14689EE5164B85F80AA /* Sources */ = { + C956648A01C6CBA133E4C82FB6083502 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 306457F17F7D81B28C5AD55ADD172BDE /* FIRAnalyticsConfiguration.m in Sources */, - A6DC4DAE2837A9D868A46D24850BAEBA /* FIRApp.m in Sources */, - 5B12DB4C0BE8953EF72AF1420E20B583 /* FIRAppAssociationRegistration.m in Sources */, - 28C288012BDC906F2821CC02C4F92AF5 /* FIRBundleUtil.m in Sources */, - EF1B8BB9CF95E80EF3CAE29793E2228F /* FIRComponent.m in Sources */, - 9F7A7D3EE184BC5E3181FD94177CFE58 /* FIRComponentContainer.m in Sources */, - E49B1BF96410F8EC30ADF895BBB72BAC /* FIRComponentType.m in Sources */, - 7CC0E440B7891C7BF9B240F46DBC35BC /* FIRConfiguration.m in Sources */, - A55F014312257DB5DC68A00C7E9C6192 /* FIRDependency.m in Sources */, - 4ADF6ACAD45A83E8D349F3C68DBA5FFF /* FirebaseCore-dummy.m in Sources */, - 3E44BDD44A7F33872E1B2C7D34D295AD /* FIRErrors.m in Sources */, - 0D9F3DCA7FE04B83A5E4D54E4611B21C /* FIRLogger.m in Sources */, - 9B48FE656C49601D323748362C4FCF17 /* FIROptions.m in Sources */, - 1095091A6B5A46FB0CF704059466E0AF /* FIRVersion.m in Sources */, + E22F639EA4EB58E247FC999190386E17 /* Reachability.swift in Sources */, + FF52B03DED5F5BBB2C20941430814AB7 /* ReachabilitySwift-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C32B4A537763849F6AAD5E9B2D2FA557 /* Sources */ = { + C95967F40FB417D51513B0A2207B11B3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1761CCB7B321270EA254FDB601B4A7DA /* binding_callback_thread_observer.cpp in Sources */, - CC941E35254CED5F91B5FEB3D6B2B4EF /* collection_change_builder.cpp in Sources */, - 13C1DA4AD13D9663FB79BA177AD72D4D /* collection_notifications.cpp in Sources */, - 968AD7978374A2E4F917A57DC3659AF3 /* collection_notifier.cpp in Sources */, - 8B0EE2E366297E43805A548026C7169B /* external_commit_helper.cpp in Sources */, - D3DE7370B2A6D5DDD0FC7C7721BF16F6 /* index_set.cpp in Sources */, - 1A89CF9F7048D36EBD4F772ACC0BA24A /* keychain_helper.cpp in Sources */, - 5400EB5DBE096827EED3CCF9531D8FE6 /* list.cpp in Sources */, - 396542989F10CDFBB1AC29766509DAD6 /* list_notifier.cpp in Sources */, - 2FC5B4A02F4E450BEFD7DF93D3F8B58B /* network_reachability_observer.cpp in Sources */, - 64AB9305B4E44980AD23E813A97294C5 /* NSError+RLMSync.m in Sources */, - FAC6ACE29FC3B2DB97B5C261ABAA55A2 /* object.cpp in Sources */, - 613FC3081D4EE5729DB589166FABF76E /* object_notifier.cpp in Sources */, - E6127EE52B580F7CEE1D333FAD6EC875 /* object_schema.cpp in Sources */, - 7635B5C3F1519DA3D857CAF3ACD71A92 /* object_store.cpp in Sources */, - F7D1A76821C101C853123C73386F8722 /* partial_sync.cpp in Sources */, - 960831540BB1F704C980F5F5BB738CF1 /* placeholder.cpp in Sources */, - CA7E5B2F6FA5A5326C1FB0E2A6F6D4CA /* primitive_list_notifier.cpp in Sources */, - 48021275C69791386B06BDD7FA1F62B4 /* Realm-dummy.m in Sources */, - 38A912E0C00A4CA72407856AFF70A3EC /* realm_coordinator.cpp in Sources */, - E07F87B657AB63942E8EA86E7BABF367 /* results.cpp in Sources */, - A2110A2C1A5F5855E3151A623B9549B7 /* results_notifier.cpp in Sources */, - 964294C40DC5BDCB61379A1439DA90F7 /* RLMAccessor.mm in Sources */, - 3E5619A5E3785B200803D51952180E8D /* RLMAnalytics.mm in Sources */, - EEE5830D2CA8CCCE7EDDF124CA20724E /* RLMArray.mm in Sources */, - DA961F6EDCC6F524CBD98F2AC796DC1A /* RLMClassInfo.mm in Sources */, - C4F53054329795D4FE025F3ECF65126A /* RLMCollection.mm in Sources */, - 671C44D28BA8610468787577C9CBDC38 /* RLMConstants.m in Sources */, - AF3FF59DB860B1DCCB91E52BFD878BF1 /* RLMJSONModels.m in Sources */, - 7FD2FF1E3F041E4C7CEFB085792385C9 /* RLMListBase.mm in Sources */, - 294519278A99490E97F5E6224E3D41A6 /* RLMManagedArray.mm in Sources */, - EA748A3FA6911D9F0934D4B961201634 /* RLMMigration.mm in Sources */, - D73A7657CBA5471E2BB5AC3282BD3487 /* RLMNetworkClient.mm in Sources */, - 6809E684E4D43993BB4890E1F6151083 /* RLMObject.mm in Sources */, - 169AD59073AA83EE935DAE7319812BF0 /* RLMObjectBase.mm in Sources */, - BB51DFA71D7643C796864ACD09EBA53D /* RLMObjectSchema.mm in Sources */, - E42BC93ACC35CDCB0461A0F8D39BEBF6 /* RLMObjectStore.mm in Sources */, - 86BF9ECF36C5F3D26BDFD97C4EFA01D0 /* RLMObservation.mm in Sources */, - 06AB0837669D699ACE3781792302E374 /* RLMOptionalBase.mm in Sources */, - 11D4AAE5676A052814E11DCC3EF98065 /* RLMPredicateUtil.mm in Sources */, - 183C877A610789FA0E778761F3730A31 /* RLMProperty.mm in Sources */, - 128315895BD96D83C85AECB71F625D91 /* RLMQueryUtil.mm in Sources */, - 2254BBC46FF2646C77AE82403E20F432 /* RLMRealm+Sync.mm in Sources */, - F9DD31F67CB0D17D18097FA837620F59 /* RLMRealm.mm in Sources */, - CC34682A0A405C5EE505D50FA32D140E /* RLMRealmConfiguration+Sync.mm in Sources */, - 8D51A84471A9F493CCAA5F5C69B2F718 /* RLMRealmConfiguration.mm in Sources */, - 50D8A7BF08D7A04AB177DADD7580175D /* RLMRealmUtil.mm in Sources */, - 982052BDC43B8864DF0EA201CA3F5F00 /* RLMResults.mm in Sources */, - 8A9C8727244EB8F2BE608E0814A3AC14 /* RLMSchema.mm in Sources */, - 0BF2A029BAA047E3B13D520C2883573D /* RLMSwiftSupport.m in Sources */, - 92C01EA2BFF96B977E4FB37C66E99EB5 /* RLMSyncConfiguration.mm in Sources */, - B1C47A5F9D18AB15AA084FF069A2ED61 /* RLMSyncCredentials.m in Sources */, - AAAD3AFCB3DA146AE70A341780E65D95 /* RLMSyncManager.mm in Sources */, - 03D7371C86A96F8B8C87EB1C203EC62A /* RLMSyncPermission.mm in Sources */, - 992E2C9C05AC6623BF99E0F325514A04 /* RLMSyncPermissionResults.mm in Sources */, - D693CD3B3281237B467754A53E19197E /* RLMSyncSession.mm in Sources */, - 1128C8AB499CF477A8ACF1540A44DAA3 /* RLMSyncSessionRefreshHandle.mm in Sources */, - 15CCA1F048F9DCC342BEC57BF0655BDD /* RLMSyncSubscription.mm in Sources */, - 283F60D04102893FA3A170A7C67A2678 /* RLMSyncUser.mm in Sources */, - CAA9C2D8A88E5C7DA950B00FE6B33523 /* RLMSyncUtil.mm in Sources */, - B2A1AF5D0CCAD53EB819B424A1B6694B /* RLMThreadSafeReference.mm in Sources */, - 348AB15A63B93F0F132F6A4901587D58 /* RLMUpdateChecker.mm in Sources */, - D691B844E7F52EC3B687804153C8F60D /* RLMUtil.mm in Sources */, - 6FDFD10357B89B611D16C463CDC4B2F9 /* schema.cpp in Sources */, - 0A62CC2CB5DCC03246E6C33852DF8A8D /* shared_realm.cpp in Sources */, - 40065399D62528E0B0584B6F7A97207C /* sync_config.cpp in Sources */, - B5C26C6DFC69CE497C613F5E9E3C5E98 /* sync_file.cpp in Sources */, - 7902AA4B2048ED232C881D8A0F6B9C79 /* sync_manager.cpp in Sources */, - C2AE39C35820CDD82239608DA5C2C701 /* sync_metadata.cpp in Sources */, - C479CA38E9D10A533B5E35C08D56A448 /* sync_permission.cpp in Sources */, - 17165F15D99F6910F96A28287F3F9EC4 /* sync_session.cpp in Sources */, - 9AD95A89F9666214052F6CC91972A4DA /* sync_user.cpp in Sources */, - A421BF28E12DA3932A56688873EE2C4F /* system_configuration.cpp in Sources */, - CEA5D4D446C04E511839DB05901C80E4 /* thread_safe_reference.cpp in Sources */, - 5E65A03D0207348647945E542A712EBB /* transact_log_handler.cpp in Sources */, - 4346E9244C7E0D9186BC24D4CB2E443D /* uuid.cpp in Sources */, - CB9E17CEE9492B428062695509ADC946 /* weak_realm_notifier.cpp in Sources */, - 652405D20D7B81D2ACD5BD22A9D4CC60 /* work_queue.cpp in Sources */, + F4DF0FB7F016C17997C4DCE3D8820894 /* AudioRecorder.swift in Sources */, + AF4F93018841A21E91FABF20A3F665E3 /* ComposerAddon.swift in Sources */, + 51E2DDB110A8CCB74712A14F8CFD2D96 /* ComposerAddonStackView.swift in Sources */, + B939507B488A019130EAA767BA5D722C /* ComposerAssets.swift in Sources */, + DB3F37C90F4BBD70B7B1F6BB7F42784E /* ComposerButton.swift in Sources */, + 9BD5FF8610B468F33560F0A82B588807 /* ComposerLocalizable.swift in Sources */, + F8828233C63CBF0C3E25EFB99421890E /* ComposerTextView.swift in Sources */, + 924BBB2D4BD0F0B299C70975890C3964 /* ComposerView.swift in Sources */, + 3F9EBD200B112A3D4EEE17A3A00DAEB1 /* ComposerViewDelegate.swift in Sources */, + 95C19C72A7493B93A11CF2AC379FCD13 /* ComposerViewExpandedDelegate.swift in Sources */, + BA6A448AA202525BE49514CE100EC67D /* EditingView.swift in Sources */, + E47B110D18CF94436A6C4978A22C5A9B /* HintsView.swift in Sources */, + 16BB3F50628E5B3198F8E63815101CF3 /* OverlayView.swift in Sources */, + 7362C8587D4763AEDB23E3F446B58074 /* PreviewAudioView.swift in Sources */, + BC78DFFF16DC79AEC9F4E74A9BAE83A1 /* RecordAudioView.swift in Sources */, + 64C6A8794D5F178DFBC9E278733756DA /* ReplyView.swift in Sources */, + 19707015C398AFBE8C667C619A1DA089 /* RocketChatViewController-dummy.m in Sources */, + 0E36CC57EBCA74FA285B83933EA497AA /* RocketChatViewController.swift in Sources */, + 38E87B62BFC1C951D01184D6A2A78494 /* Tap.swift in Sources */, + 46F8C224CE86ADCFD5B6B35FE6ED4F3C /* TextHintCell.swift in Sources */, + 5953E96263B853EE3F8128ADE6447BDC /* UIKitExtension.swift in Sources */, + 0956F81CAE7C745B6C835CFA10EABAA4 /* UserHintCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C8A218568A3E9FE62AF65BE1C51A0BC0 /* Sources */ = { + D237BC6832D1B9432478389DF8B4358D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 23BCE3D5DC007C02FA5A09A7DA770944 /* MBProgressHUD-dummy.m in Sources */, - E7F21FF035B931247A62EF294B86312F /* MBProgressHUD.m in Sources */, + 198B3D56B5A70DB2665C7FB2C0B54C97 /* NSAttributedString+Markdown.swift in Sources */, + A168802E85649C397DBBEBA7EB8990C5 /* RCBaseParser.swift in Sources */, + 9C5FB41281A985A540B6EA74C6BAF8E8 /* RCMarkdownParser-dummy.m in Sources */, + A0FC37F42CA3654E2098E1986DB95832 /* RCMarkdownParser.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CE99DE0ACAFF5827CE98E3027B285775 /* Sources */ = { + E018CF8C2E3557165D060176899639C8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0B68B3A6913F95A09AAE1425FB185A3A /* FLEX-dummy.m in Sources */, - 949B323E9DEB7A2AD033410D8596CBD3 /* FLEXArgumentInputColorView.m in Sources */, - ABF7A93CD20B5F4A84E5CBDA1B3B4413 /* FLEXArgumentInputDateView.m in Sources */, - 257686D6271BB37ED04FE3F0206187A3 /* FLEXArgumentInputFontsPickerView.m in Sources */, - A337CE5657F3EC19F417EAEA778036D4 /* FLEXArgumentInputFontView.m in Sources */, - 959A2D0B2DA03B12B7F5C4C06107739B /* FLEXArgumentInputJSONObjectView.m in Sources */, - 2D1BDC45EFCB750CAC1A294E9D36A974 /* FLEXArgumentInputNotSupportedView.m in Sources */, - 1C7425FE51F8FCEDCA67176341316F93 /* FLEXArgumentInputNumberView.m in Sources */, - 4AD368DBD4ED27F0AA6E9116BBCD52AF /* FLEXArgumentInputStringView.m in Sources */, - C2A8F6DA340D1129A60A81B2784F401D /* FLEXArgumentInputStructView.m in Sources */, - 80064EB7BCE5491F9A6B25DCD37C825A /* FLEXArgumentInputSwitchView.m in Sources */, - 499BC0F8F8299AF06D3AB3B83E1F0E71 /* FLEXArgumentInputTextView.m in Sources */, - 725A6C09F32CD40FE9FE96B5E1833528 /* FLEXArgumentInputView.m in Sources */, - 8867CA7C67B28F87245E8591FC851719 /* FLEXArgumentInputViewFactory.m in Sources */, - 423A781C3D4A8CBA13850443448B3B94 /* FLEXArrayExplorerViewController.m in Sources */, - 64B57A4C8972B28D00112302B7E3B05D /* FLEXClassesTableViewController.m in Sources */, - 59DC9528F9BAFD70DC8591F7AA528BE2 /* FLEXClassExplorerViewController.m in Sources */, - CDFF7D09D53A8CB43682D3E16C139DF4 /* FLEXCookiesTableViewController.m in Sources */, - 9FC88C8BF32021F3E331A417E20D4184 /* FLEXDefaultEditorViewController.m in Sources */, - 6CD61432D519599D861D92D0497EA872 /* FLEXDefaultsExplorerViewController.m in Sources */, - 96213FCE8B2B59D37085F9796D3C1A1D /* FLEXDictionaryExplorerViewController.m in Sources */, - 92437488F9FDA864989F2DACFF5292A1 /* FLEXExplorerToolbar.m in Sources */, - 93416FAA3E234B619E240CD16068729D /* FLEXExplorerViewController.m in Sources */, - D0B0E35D40EB37872E430FC35710CDC4 /* FLEXFieldEditorView.m in Sources */, - F3E7ABD9F6ADF674B647528012E2C3F2 /* FLEXFieldEditorViewController.m in Sources */, - DD004138AA703ADBFA5D4DAA77133BB1 /* FLEXFileBrowserFileOperationController.m in Sources */, - C1CF2970B59AB417D5CA5FD6A75B4CED /* FLEXFileBrowserSearchOperation.m in Sources */, - 40269EF8CD7A59911399D6ABF7F9BE47 /* FLEXFileBrowserTableViewController.m in Sources */, - 9AFBE39E34BC64702AE7FD2243590222 /* FLEXGlobalsTableViewController.m in Sources */, - 29F3C00FA5C08E3C9D8E7463E28CA58D /* FLEXGlobalsTableViewControllerEntry.m in Sources */, - 87CD3C48F036BF47747AB116E80EC74E /* FLEXHeapEnumerator.m in Sources */, - 9073F8C66F19251C41079A71C53AF88F /* FLEXHierarchyTableViewCell.m in Sources */, - 7046AF9A03FF83976F29161CF0726302 /* FLEXHierarchyTableViewController.m in Sources */, - E503D247C9658C821D9689737B8825D4 /* FLEXImageExplorerViewController.m in Sources */, - 1042A2FF761D4B902343C72C0F24EB20 /* FLEXImagePreviewViewController.m in Sources */, - A5B95ADB555DFF404755528B3B4306B6 /* FLEXInstancesTableViewController.m in Sources */, - 56D8810EDBE6EDA903095F76D03F73DD /* FLEXIvarEditorViewController.m in Sources */, - 03DD8FBB7AD8D160661ECF2BED92E054 /* FLEXKeyboardHelpViewController.m in Sources */, - EF54D0700796117A5A5AB7B4FD1E4168 /* FLEXKeyboardShortcutManager.m in Sources */, - 9F9BE49C03DE4D2B6DB47E0E2AABA5AA /* FLEXLayerExplorerViewController.m in Sources */, - E554D0C12299CCDCC74F3E2B556074F0 /* FLEXLibrariesTableViewController.m in Sources */, - AA36FB3ED2AD7BCCDC2FBA54A7272E13 /* FLEXLiveObjectsTableViewController.m in Sources */, - CF8FEFFBBB2394D158067373F63E0C57 /* FLEXManager.m in Sources */, - DB7F87EF2B6AB1F06B4F796C1A336173 /* FLEXMethodCallingViewController.m in Sources */, - 1D3342104CB854F6450A2BD376481691 /* FLEXMultiColumnTableView.m in Sources */, - 833A8D8C40753C99DB0D7BE7F710A5CB /* FLEXMultilineTableViewCell.m in Sources */, - 1BC2565DCD61A144076F50BD788BBD07 /* FLEXNetworkCurlLogger.m in Sources */, - AFDAA31F0E9EB77EDDA9E53ACC86A71E /* FLEXNetworkHistoryTableViewController.m in Sources */, - CEB3633B632C9DB24AA7A04616D02873 /* FLEXNetworkObserver.m in Sources */, - 55FC9D995D7EC441F5E5469D1001326D /* FLEXNetworkRecorder.m in Sources */, - 4D4D939C1E7652606FEC26A97647F521 /* FLEXNetworkSettingsTableViewController.m in Sources */, - 57FC838866E68872AFB44BBE4E3E55B4 /* FLEXNetworkTransaction.m in Sources */, - 9177563606236AB10E39DA5B5B109727 /* FLEXNetworkTransactionDetailTableViewController.m in Sources */, - 52E51A50C28CEA4B3397ADABE2ABD45F /* FLEXNetworkTransactionTableViewCell.m in Sources */, - 2F49B250C9A37090061DA1D401526B14 /* FLEXObjectExplorerFactory.m in Sources */, - 17AB139B8720C374503E0E6C9D5F8BDD /* FLEXObjectExplorerViewController.m in Sources */, - EB8DFEBEE6EFD49BC33A51FF5A85EF40 /* FLEXPropertyEditorViewController.m in Sources */, - 804F74884F1082AD0DA07BBA46756266 /* FLEXRealmDatabaseManager.m in Sources */, - 9DAEB8DDF210481C67E857CB1A66C584 /* FLEXResources.m in Sources */, - 0CA84954CE54FBE1B5D5301C7206584A /* FLEXRuntimeUtility.m in Sources */, - 3CDAF44B5A2A0A22A5E986A6C9D61B26 /* FLEXSetExplorerViewController.m in Sources */, - 4CA03194A03AB83F39B242DD363091B9 /* FLEXSQLiteDatabaseManager.m in Sources */, - 7CE1392F42541A0429096086B35EB4DA /* FLEXSystemLogMessage.m in Sources */, - F395F6DE5616926E6AE212B92E6A99CC /* FLEXSystemLogTableViewCell.m in Sources */, - CB4FE319860D21A3EB356C6B2DDDE0FE /* FLEXSystemLogTableViewController.m in Sources */, - 5FB4FF35740B545C80A73DE534A1D0BD /* FLEXTableColumnHeader.m in Sources */, - 52A5F54DE8EC59CBBC901967164819A9 /* FLEXTableContentCell.m in Sources */, - 0DEFD6754824E6444928110778F35DED /* FLEXTableContentViewController.m in Sources */, - F1608C6B9317CED77682F7224B0744EC /* FLEXTableLeftCell.m in Sources */, - 0957D4E1572A167D96F1E9E08964F4B8 /* FLEXTableListViewController.m in Sources */, - 1030FA5E5E6BFA76432E7180438D27C4 /* FLEXToolbarItem.m in Sources */, - 60A8DFCD93A85364AF09B48B0744E7A7 /* FLEXUtility.m in Sources */, - 8148B65BD0B7684F6996917D3EBE47BA /* FLEXViewControllerExplorerViewController.m in Sources */, - 08DC4F467AA009D41AC6613571524765 /* FLEXViewExplorerViewController.m in Sources */, - 5AB77372F4657DFECB70C69E44F24547 /* FLEXWebViewController.m in Sources */, - 060B0D473293771A3525512B2322A425 /* FLEXWindow.m in Sources */, + 2288F7A752C945D0C90A01D12E76F64B /* DataCache.swift in Sources */, + 3E807BA23B91579883A86E01042416A3 /* DataLoader.swift in Sources */, + 1E85829609573E5C39CD1EA26FE0F5B0 /* ImageCache.swift in Sources */, + 0B59B1248AA193C3E7EC46D69AEF4C82 /* ImageDecoding.swift in Sources */, + 74EDF4E6DB81AAE85AA0AB3474E5DB82 /* ImagePipeline.swift in Sources */, + 9DB26AB970D7D1D84A5C75CE9ED3F6A2 /* ImagePreheater.swift in Sources */, + 1583AE47B4BC7B340410E033B938086D /* ImageProcessing.swift in Sources */, + 8225EDC7ED9D0B42ECCBAEC52E22175E /* ImageRequest.swift in Sources */, + C2E2C7C4B2B3CAB6D71341E206E72207 /* ImageTaskMetrics.swift in Sources */, + 6E3EDD857035695933172EBE78C580BD /* ImageView.swift in Sources */, + 4065614086D650AF1DB937277E656519 /* Internal.swift in Sources */, + 91A6A08881E5557920301A8C8D270AA0 /* Nuke-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CF41C4529AA3DCB0AE9713E212BC2445 /* Sources */ = { + F36A8EEA289C2B44D812EBA847BFDEC7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2267DAABF3250C3414A1291E12786D65 /* Pods-Rocket.Chat.ShareExtension-dummy.m in Sources */, + 41C86D34841EEABC1368F0B3C3706B8B /* Algorithm.swift in Sources */, + E94FF0E5A6336E17766E71BAC32B5E9E /* AnyDifferentiable.swift in Sources */, + 60D06B15201B31901547CF7CAB52B097 /* ArraySection.swift in Sources */, + E988CFBCE6ED033CC75687D24A7EE3C7 /* Changeset.swift in Sources */, + B0406BECFCF48A9134C0258E366D17FF /* ContentEquatable.swift in Sources */, + FBBF48888D2B4788FA26F6E708515844 /* DifferenceKit-Core-dummy.m in Sources */, + 6F2298EB486AD9BF0AE0005A604E97AA /* Differentiable.swift in Sources */, + 87A5DFE275771D173A361E9091413743 /* DifferentiableSection.swift in Sources */, + DF217AA544E5D7A2A0C840AEF3A00681 /* ElementPath.swift in Sources */, + F5200CEEDFAAFA701CBB25E69654AD72 /* StagedChangeset.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E2902D96AE15D2DCF35F6F3A0021B49F /* Sources */ = { + F7DD164565AEC0DF26187DA75E9DE8A9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0C0F0A58E60595F2FEF26BA4439B46F4 /* MBProgressHUD-dummy.m in Sources */, + 6EB62975BB01B4BF986F0185AF8CDE9F /* MBProgressHUD.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F321B328F1A4758F0DC549DCADFC380C /* Sources */ = { + FE539DCF935D89F65D7BD5C9813BB8DE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 668D6B34745D5098ACD848D882DF57F1 /* GoogleUtilities-dummy.m in Sources */, - BCB1D2A3AE93F55D8AED2E2F87359EC4 /* GULAppDelegateSwizzler.m in Sources */, - EAFCB55C685BB3ADAEA5FFE6AD9A2BC8 /* GULAppEnvironmentUtil.m in Sources */, - 2A15C26BA2995F4684F08869CD4ED45B /* GULLogger.m in Sources */, - 29F9BD23D0D86A8E1C485C1B51939C6B /* GULMutableDictionary.m in Sources */, - 08CA1647532892B22963FC2ACE0DBE11 /* GULNetwork.m in Sources */, - 591A19566B24ECAA7B7890B6255BABB1 /* GULNetworkConstants.m in Sources */, - 01378D434691A0423F637636F8A61FF6 /* GULNetworkURLSession.m in Sources */, - B9A73771B15ECE69E6FC1C72FBB5291F /* GULNSData+zlib.m in Sources */, - 42440C1BDD3E967B4684AC95968DBD3D /* GULReachabilityChecker.m in Sources */, - A61564E10118296875761D2AECBB958C /* GULSwizzler.m in Sources */, - 5F14752C7BF6E728AC121CBF8B141D5D /* GULUserDefaults.m in Sources */, + 127E3DF6E6217CE5EE4D3307233139DD /* async_open_task.cpp in Sources */, + 61DBC8F44D67390DB8C75DF44027FEC1 /* binding_callback_thread_observer.cpp in Sources */, + 2B17C52D8AF73A89E513F4DC327AE4B8 /* collection_change_builder.cpp in Sources */, + 058D16491CC7CEF4DA907FC3A59CB4D9 /* collection_notifications.cpp in Sources */, + 809DA5D1A20AE0411138B9CE6678BA2D /* collection_notifier.cpp in Sources */, + EE10D6A25C8C7717A01854E9F9E0F672 /* external_commit_helper.cpp in Sources */, + E19E9F35E296BA5F4876F3B0286E84D7 /* index_set.cpp in Sources */, + BE72A22A9E7D78081D4CA85E8FD40ABA /* keychain_helper.cpp in Sources */, + 2A8090F08BE1225B6C419CB6DFE1BF17 /* list.cpp in Sources */, + D4B5A216E62E246C39AED1990A5D50C7 /* list_notifier.cpp in Sources */, + 1A68379F78690D04AAECB84E89AC56E3 /* network_reachability_observer.cpp in Sources */, + 75F60518DA4A0CD837495A5E080FD007 /* NSError+RLMSync.m in Sources */, + 17480573BFAAAB399777F599808D4994 /* object.cpp in Sources */, + FD4F82B12D3E530C76781C4867C5582B /* object_notifier.cpp in Sources */, + E0A6AFE0CA4FF6FC2E9C889B87262DBB /* object_schema.cpp in Sources */, + 456EB9BA0A33DA35D075DE1CD8DD1801 /* object_store.cpp in Sources */, + D1237A773BDBCDCA69F216390E8372B3 /* partial_sync.cpp in Sources */, + C09E9E73B1FFB28D9A72C854015016CB /* placeholder.cpp in Sources */, + 7159130068D01DC037A4F66847A4FBE6 /* primitive_list_notifier.cpp in Sources */, + 031C16D05ECDE278793D77CA3E5897A9 /* Realm-dummy.m in Sources */, + AD70F43A048EA549718F7C49CD8A09C0 /* realm_coordinator.cpp in Sources */, + 9A2F157C6DC62EC3E652793C74272A3C /* results.cpp in Sources */, + CEB983A6959550709952C7F3EF8E8D14 /* results_notifier.cpp in Sources */, + 615682757305CA0B5B96C60B98EF3AEC /* RLMAccessor.mm in Sources */, + F76B2638CFE732E2D8D7DFFEA8E7A398 /* RLMAnalytics.mm in Sources */, + 095B713BE18FE3B1A0CD5665ED3435B7 /* RLMArray.mm in Sources */, + D427C70D232860842784C5A99C1AE93D /* RLMClassInfo.mm in Sources */, + 482D78815ABE04E3339F98DE6DA183D7 /* RLMCollection.mm in Sources */, + ABB9412803779A21A3131BF54A11C3A9 /* RLMConstants.m in Sources */, + 8F1292330914791AAD23FFE908125180 /* RLMJSONModels.m in Sources */, + 1E6853A69301CDE3CCACBA791FA2D5F1 /* RLMListBase.mm in Sources */, + 69F01F5CEC032C1B383AC5EF3A36DBD0 /* RLMManagedArray.mm in Sources */, + 65E7A61D86778F472B9920A4316031E7 /* RLMMigration.mm in Sources */, + E0991DAF14B5038C61029E2D905B99F1 /* RLMNetworkClient.mm in Sources */, + 1FBF5E0C6ED0D5F4ABF98D77FB354520 /* RLMObject.mm in Sources */, + F7C1AB82491C286997B542B24A5B5904 /* RLMObjectBase.mm in Sources */, + 247E6C5B94F83DCA45DD01F8C3B3F0A7 /* RLMObjectSchema.mm in Sources */, + A0BD29D6250B19B5FFC6FDEA2D58547D /* RLMObjectStore.mm in Sources */, + 3145BB915863E3357008D0C11D2DDCEA /* RLMObservation.mm in Sources */, + 2ECBA2F5F0F4BF556281856C9EDF9E8E /* RLMOptionalBase.mm in Sources */, + 26D3235319C85151AB12392271CEE10B /* RLMPredicateUtil.mm in Sources */, + 53C165A7A846A65940DF01A9C75637BA /* RLMProperty.mm in Sources */, + 25FF629A181332BA2055B56E141F56CA /* RLMQueryUtil.mm in Sources */, + 8DABB7A243348B43953F468267C8FC96 /* RLMRealm+Sync.mm in Sources */, + 44A51F7EC0A5ABEB085120049EE364E9 /* RLMRealm.mm in Sources */, + 14F642C56E061BEF6A544DE13D9B1DAC /* RLMRealmConfiguration+Sync.mm in Sources */, + 4A611CC47211A53DA1144EC2F585E526 /* RLMRealmConfiguration.mm in Sources */, + 3C26668283FD8E30E69443EDF9B59CA4 /* RLMRealmUtil.mm in Sources */, + DC050C7CBD0A78FBC0043599B0C037E4 /* RLMResults.mm in Sources */, + D80042BC12714FF8C5A947AB05073748 /* RLMSchema.mm in Sources */, + 076AB8288C1F76FB8CFBCBFE3254570B /* RLMSwiftSupport.m in Sources */, + ADB9B19147774D2050630BA14BD46BD9 /* RLMSyncConfiguration.mm in Sources */, + A5C68D97C0AD7C7A2FC3A5F2093DEB00 /* RLMSyncCredentials.m in Sources */, + D6BF36C7F6C012DF42A04089D3FD1828 /* RLMSyncManager.mm in Sources */, + 5FFA1F65652FFE38943E6F7201041148 /* RLMSyncPermission.mm in Sources */, + 8DE287017265B81C9E7B72D9720C3A8F /* RLMSyncPermissionResults.mm in Sources */, + 8EDF0D48A6B3C899B93EBC260B702534 /* RLMSyncSession.mm in Sources */, + 27BEFCF12C8CDCCC378006C7E00987E1 /* RLMSyncSessionRefreshHandle.mm in Sources */, + 9143AA99CC670883F08E638CE4DFEF1C /* RLMSyncSubscription.mm in Sources */, + 8B85DCC763BB380CA635EDF0D7EEC366 /* RLMSyncUser.mm in Sources */, + E53A223800ED5EEB0A28D94D90E77EEC /* RLMSyncUtil.mm in Sources */, + E684DCE2AD246EDFCCA50569D1605C77 /* RLMThreadSafeReference.mm in Sources */, + 03119FDA764DDCB0C3DD485605EF09C2 /* RLMUpdateChecker.mm in Sources */, + 41ABEAA6D081C64C5F318403406E7EC9 /* RLMUtil.mm in Sources */, + D62449A83FB2F94108B909FE73ABE28F /* schema.cpp in Sources */, + 76DB1FB9430AE01B879C173A7C21D3A2 /* shared_realm.cpp in Sources */, + 22DF7CFFD6037109EC6BB638C4B09308 /* sync_config.cpp in Sources */, + 2BC054C031C80BB3A839E9C9C766ADE2 /* sync_file.cpp in Sources */, + F49D5480E8FD3F2144B95E6A84838B4E /* sync_manager.cpp in Sources */, + 66F8E679C5D22A85B43B0E7C5FEE5841 /* sync_metadata.cpp in Sources */, + 6A770229B257B64083DC294E22A56D16 /* sync_permission.cpp in Sources */, + D36919D80066094B3B5A03F3A7FB6B2C /* sync_session.cpp in Sources */, + D1A32C78030B8DF75C3381AF0D418EC4 /* sync_user.cpp in Sources */, + 29294DD4E2AA9BB0C2DD7BEA3C17CA3D /* system_configuration.cpp in Sources */, + A887E94F48C833183F43E06EA0885579 /* thread_safe_reference.cpp in Sources */, + BE88296A5D02E0B1A944D3CC1070C452 /* transact_log_handler.cpp in Sources */, + B59D11ECEFB527FF9B1F6242D1794180 /* uuid.cpp in Sources */, + F8CA73D37A0E4E67E94E4D9B0255159E /* weak_realm_notifier.cpp in Sources */, + CEB671CD127EF8EF3E420FCEAA2AC3B5 /* work_queue.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0007F6E3D40256C2CE0E79CC622EA17E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FLAnimatedImage; - target = F34AB23A45E66B5330A74220CE95958C /* FLAnimatedImage */; - targetProxy = EA418C174E1F4E90B80923C302770831 /* PBXContainerItemProxy */; - }; - 0496F68345848B5A476F2A9A9043A991 /* PBXTargetDependency */ = { + 022752A1AAE02C7765BF3DD2536B8F0D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftLint; - target = 55E1FDE52DD9C139D679CC408529CF94 /* SwiftLint */; - targetProxy = AB7E7610691AA279E43B0BDA56CC6898 /* PBXContainerItemProxy */; + name = RealmSwift; + target = 4548FD0F52098CA90D3A62745F0C1474 /* RealmSwift */; + targetProxy = 60B8877E387B1047C34A5D3B55180906 /* PBXContainerItemProxy */; }; - 04EE9ABD138E661E584F073CE63878E7 /* PBXTargetDependency */ = { + 03E6E700B28B16F9B495D10AFFC739C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RCMarkdownParser; - target = A5F394DBBF164FD98BF2BF258D2CDFCE /* RCMarkdownParser */; - targetProxy = E5E9070F79A69DA38D0B2C770F8B32DD /* PBXContainerItemProxy */; + name = SwipeCellKit; + target = B6422D152FC79825719A02B3C10FC3D2 /* SwipeCellKit */; + targetProxy = 30EEC25EB7236259EFEE703762986F2C /* PBXContainerItemProxy */; }; - 06E7D7A69D56496CEC710AF9DE382249 /* PBXTargetDependency */ = { + 0793ECA0354B0D28EE66726A2ACFBD7C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleAppMeasurement; - target = CAFA4CBCA3898A6F62989262E04582A8 /* GoogleAppMeasurement */; - targetProxy = 49BCC80683F150181B3F5F08A9F326B4 /* PBXContainerItemProxy */; + name = DifferenceKit; + target = DBB9E8FC42AD71B397F9719F46F8C8DA /* DifferenceKit */; + targetProxy = 03E7B50272B938CB52AD5FCF5BFE82B4 /* PBXContainerItemProxy */; }; - 081CEA199EFED11B6BFE23F0C07632BA /* PBXTargetDependency */ = { + 0DBD21B4712E14329533A222EA9B3E74 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SimpleImageViewer; - target = BDC9D0A453E0589198E53EF71AF3A6B1 /* SimpleImageViewer */; - targetProxy = 3E4E9E72DC590E21852AD38990D55B0B /* PBXContainerItemProxy */; + name = FLEX; + target = D5423DFD97A84BB4F2EE18A653B49765 /* FLEX */; + targetProxy = 2CD74DFFE80489929D1FEF51286CB191 /* PBXContainerItemProxy */; }; - 142292637DBE1A28764D66AEB7770504 /* PBXTargetDependency */ = { + 0E8E80B742CFE390953BC7B3F41A0930 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Nuke-FLAnimatedImage-Plugin"; - target = 293E484C14E8255A78D47D2E48DDFCEE /* Nuke-FLAnimatedImage-Plugin */; - targetProxy = FCF61E191BB84B1A9809AF1EBBAFDD30 /* PBXContainerItemProxy */; + name = GoogleDataTransportCCTSupport; + target = 1067FA952B76EED7AA2A52057C7B7DB4 /* GoogleDataTransportCCTSupport */; + targetProxy = 7D004E11C62125A132EDAEBC364BB1F1 /* PBXContainerItemProxy */; }; - 1836D1F803B964C19AC3F6ACC35468E0 /* PBXTargetDependency */ = { + 141A66068D669654C053C0AD69DAFE82 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Fabric; - target = 7CE49DE8B659FE84C6885E456503139D /* Fabric */; - targetProxy = D505602CC38A13D29F62DF277CD01047 /* PBXContainerItemProxy */; + name = GoogleDataTransportCCTSupport; + target = 1067FA952B76EED7AA2A52057C7B7DB4 /* GoogleDataTransportCCTSupport */; + targetProxy = B0CED0A42B9F1B888B3CCDCF90897D07 /* PBXContainerItemProxy */; }; - 19D4633F092CFBA78912EDAD24C9453E /* PBXTargetDependency */ = { + 1500766821E629FEA2D54757B500B1C1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RocketChatViewController; - target = 55FA0B285608509C58926F57847AB4D2 /* RocketChatViewController */; - targetProxy = F4F5DFF3A9FC44291EC8E4175339338A /* PBXContainerItemProxy */; + name = FLAnimatedImage; + target = E00311318D3052CB3429E9B5303B854B /* FLAnimatedImage */; + targetProxy = 7E02971CBD9D292E2A2275ED7791D77F /* PBXContainerItemProxy */; }; - 23689583680A68FD3E74F2453C4BBE0B /* PBXTargetDependency */ = { + 1AEF2A2C8B387E41AAE3F6365CB4B9D4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleUtilities; - target = 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */; - targetProxy = 4050AE1E75F09EE623A00327E9C39790 /* PBXContainerItemProxy */; + name = FirebaseCoreDiagnostics; + target = AD9F7CE16C23215D6E90116FC4017D5F /* FirebaseCoreDiagnostics */; + targetProxy = 087ABC4A2B6FE7A8043C58E968BDFBE3 /* PBXContainerItemProxy */; }; - 256B8EFC3A0BBF32188C6FE0735A7956 /* PBXTargetDependency */ = { + 1D856DD5928EC04E8EF9621817C5658D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = nanopb; - target = AA61720B36F74B4975EDA51370C03FB8 /* nanopb */; - targetProxy = D97D4DDFA9AFA8AD23725EF66EE38AF8 /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */; + targetProxy = 8B6CBBA05BDFCC011D3E241F485376B7 /* PBXContainerItemProxy */; }; - 2929ABD2EB00B4891B710238CCB2C81A /* PBXTargetDependency */ = { + 1DFF8D48C301D70B2396438F507959D2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FLAnimatedImage; - target = F34AB23A45E66B5330A74220CE95958C /* FLAnimatedImage */; - targetProxy = D17ED097301C309C9506218BDB5E0E87 /* PBXContainerItemProxy */; + name = FirebaseInstanceID; + target = 7A188CE4BDA89D941184C4CC4C426B07 /* FirebaseInstanceID */; + targetProxy = 44D46688D1438725A60D66F7ED4F4EE5 /* PBXContainerItemProxy */; }; - 2B56C7F52225BAEC1F99BE0A67EB8E89 /* PBXTargetDependency */ = { + 26CAFE8FF94BE59ACC6CA1D67B12C9E6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseInstanceID; - target = BC2B4D06432AD962396EB82B589340B7 /* FirebaseInstanceID */; - targetProxy = 07B587F6417F9330638C9D97BD3C50B2 /* PBXContainerItemProxy */; + name = "Nuke-FLAnimatedImage-Plugin"; + target = FAC0EDA22C68AE54A68C056BA09FBA71 /* Nuke-FLAnimatedImage-Plugin */; + targetProxy = D72EE3D6D0B266902E06C203CA38D996 /* PBXContainerItemProxy */; }; - 2B825177F3388CCFAEFB8B5D616CBB3D /* PBXTargetDependency */ = { + 2781F501282A11D3F712E737CA1F5071 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCore; - target = 6551B0A997F3C3EC1BF5CCCE8C9D7640 /* FirebaseCore */; - targetProxy = E02306C8F98CB3F70A2ADDC8E0CBCC2E /* PBXContainerItemProxy */; + name = nanopb; + target = FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */; + targetProxy = B30E2530C2692C700B2050AE86DEA0F9 /* PBXContainerItemProxy */; }; - 2C188B49952E573E17602AA3262FE093 /* PBXTargetDependency */ = { + 2ADEEC664296594B03A9B1287E0BB4AC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Nuke; - target = A1A0FE2A9E90F5B42D68DD55E0C304C7 /* Nuke */; - targetProxy = E46CC5DD9A978D1323966597E0C840E0 /* PBXContainerItemProxy */; + name = "MobilePlayer-MobilePlayer"; + target = 81E27232DC00A881ACF75C7B5F193333 /* MobilePlayer-MobilePlayer */; + targetProxy = 2053C36B2BD7E0175087DC43208F28B8 /* PBXContainerItemProxy */; }; - 2F5B65D5473736F77B64F1D51C7A2016 /* PBXTargetDependency */ = { + 2AE8F3E22DE536429ADCF3E71C78E6D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleUtilities; - target = 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */; - targetProxy = 0E9C313088CC512C71AA270A57B0EBEC /* PBXContainerItemProxy */; + name = RocketChatViewController; + target = 0601E30DD8EB3E5C4CA86433D77ED08C /* RocketChatViewController */; + targetProxy = 38242B8DD54911A858AC1DF3EF0F5587 /* PBXContainerItemProxy */; }; - 30F3803A4447510D6070F15606D8099F /* PBXTargetDependency */ = { + 2C6A5D799721D0ECE60975AC043B5BFE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleUtilities; - target = 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */; - targetProxy = 42CEB2BDA98FE13544E44465CD490DB4 /* PBXContainerItemProxy */; + name = RealmSwift; + target = 4548FD0F52098CA90D3A62745F0C1474 /* RealmSwift */; + targetProxy = B3B015DE68BE7FDB29A6B89FD114BCF8 /* PBXContainerItemProxy */; }; - 31C2DAFDF39127020B0B70FCB9A8640B /* PBXTargetDependency */ = { + 2F2387A64119608BBEDD74A6EB5FDB43 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Realm; - target = 237BDF70A0D24421463790971334A771 /* Realm */; - targetProxy = F839C3D52F0A2E328F749EB48AD2C228 /* PBXContainerItemProxy */; + name = Starscream; + target = DBE96A9B8FFA441C679FFF903BC1CFC0 /* Starscream */; + targetProxy = E84A7422D251F8301D30157B31B48E2F /* PBXContainerItemProxy */; }; - 3593C876F019495EA9C4FBFBF292E9FE /* PBXTargetDependency */ = { + 3002E70741907E064EE7CB7977DFB943 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ReachabilitySwift; - target = F3F9ECFF28CD85D964A7912AFAE3ED86 /* ReachabilitySwift */; - targetProxy = BD61C0EBDCEC4A0718B774BE20DA5BDA /* PBXContainerItemProxy */; + target = DAC25189504B9C8910EC20AF68E62D3A /* ReachabilitySwift */; + targetProxy = 7D7D35B034517495169CA0A2FA79D675 /* PBXContainerItemProxy */; }; - 364BE18AB4EA8ACA6F5F9D9C0FDE4050 /* PBXTargetDependency */ = { + 332415263132486F47785C7A2B271893 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SwipeCellKit; - target = E4A590260CAF606E014E5F9937A9066B /* SwipeCellKit */; - targetProxy = DC689D1E93E0251DC51856EC0457694B /* PBXContainerItemProxy */; + target = B6422D152FC79825719A02B3C10FC3D2 /* SwipeCellKit */; + targetProxy = FA39A3972795B06C520D9B3457073C38 /* PBXContainerItemProxy */; }; - 3A2259CC8FDE3AFB1530A51D0190D26F /* PBXTargetDependency */ = { + 34AD780FB98F421609EA125BE2D06B7C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MobilePlayer-MobilePlayer"; - target = 6EB25B8A3C04F51C8B687957379623B1 /* MobilePlayer-MobilePlayer */; - targetProxy = 15527AD99D933A97F9E2FD8DFA5B21CE /* PBXContainerItemProxy */; + name = GoogleUtilities; + target = E8E03261919E1552240E2A9AF312DCE1 /* GoogleUtilities */; + targetProxy = B271FF7EA39131F02354BC19E1AD0454 /* PBXContainerItemProxy */; }; - 401BEFE8502B312E0DEBFCAC497517BC /* PBXTargetDependency */ = { + 3646FB67EE9E09ECD0F45B4634587944 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Nuke-FLAnimatedImage-Plugin"; - target = 293E484C14E8255A78D47D2E48DDFCEE /* Nuke-FLAnimatedImage-Plugin */; - targetProxy = 1C08DB4DAE69747533E6DD0ABCDD7042 /* PBXContainerItemProxy */; + name = Nuke; + target = 0DF9FEC4D52DBD2F86898986EC1B46AE /* Nuke */; + targetProxy = 51F2A67A4F2223554FB93281B79BBB7C /* PBXContainerItemProxy */; }; - 41B643D7989BD274DE523E1A709A2B9F /* PBXTargetDependency */ = { + 3F96DBD810BBABD2B68E93C0F7DD0673 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = 1PasswordExtension; - target = C15E14C9CA53451D53CC350CCA44CA3D /* 1PasswordExtension */; - targetProxy = 838AF81E2C47E4AECDBC7275C5BCAB7F /* PBXContainerItemProxy */; + name = MobilePlayer; + target = 80E23AABF0943180B6599EA449C2CEF2 /* MobilePlayer */; + targetProxy = D7BC438FEB4578D6FC6DF0C5156E137D /* PBXContainerItemProxy */; }; - 47A001DDD5FC517A77F7897CD30777DB /* PBXTargetDependency */ = { + 409C073A0373608F3F249B70823E4D84 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = 1PasswordExtension; - target = C15E14C9CA53451D53CC350CCA44CA3D /* 1PasswordExtension */; - targetProxy = 3E2063F38BD487F16D5F048E06665C3A /* PBXContainerItemProxy */; + name = SwiftyJSON; + target = 0C9B6293E2C60B3B502A97DB9F4A09AF /* SwiftyJSON */; + targetProxy = 36B914BBBD6DB568F08EF62CDFECF329 /* PBXContainerItemProxy */; }; - 4D203B7EA715687047E2C4DE6C2381AA /* PBXTargetDependency */ = { + 427A7E7989FBB993CB603019205E5C2D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DifferenceKit; - target = C9732C970DC56F54EA5F3AA0F10697B3 /* DifferenceKit */; - targetProxy = 5C89E2F070D74263A637E86F142966FC /* PBXContainerItemProxy */; + name = GoogleDataTransportCCTSupport; + target = 1067FA952B76EED7AA2A52057C7B7DB4 /* GoogleDataTransportCCTSupport */; + targetProxy = CE07650AFD3694CA943FB93CBC81FA16 /* PBXContainerItemProxy */; }; - 4DDB1EE02A3B50A2DBC07B985001C674 /* PBXTargetDependency */ = { + 51EAC94925D4153B5D2ABF31972063A0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DifferenceKit; - target = C9732C970DC56F54EA5F3AA0F10697B3 /* DifferenceKit */; - targetProxy = 94BC4EC3457006245F7D495C0D631B90 /* PBXContainerItemProxy */; + name = FLEX; + target = D5423DFD97A84BB4F2EE18A653B49765 /* FLEX */; + targetProxy = 6BF630DC68CA3DF22CE637F530F55BEC /* PBXContainerItemProxy */; }; - 4E455FD9E2D28BC190EB514F98344A8E /* PBXTargetDependency */ = { + 5552958FB98F73A9269F01FFDA48283C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwipeCellKit; - target = E4A590260CAF606E014E5F9937A9066B /* SwipeCellKit */; - targetProxy = D7D7D40DFC125A3EA84A38CF4B9E0E7F /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */; + targetProxy = 8948E45AEADD80BF8E2323529594D3ED /* PBXContainerItemProxy */; }; - 5436DAE1E6C85D39829C8D36D53C64E3 /* PBXTargetDependency */ = { + 5A9A54376F552C2AC9035F8B285B28F6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = semver; - target = D2A8A4D7433918EF402134DBD93D9269 /* semver */; - targetProxy = 4649348E1569CD985A78166E7BA8BF5A /* PBXContainerItemProxy */; + name = DifferenceKit; + target = DBB9E8FC42AD71B397F9719F46F8C8DA /* DifferenceKit */; + targetProxy = 73C9DE461F2D1F43D4B476B027E71196 /* PBXContainerItemProxy */; }; - 598D04FAED6E4C22D0CD3F4277C55F4D /* PBXTargetDependency */ = { + 5F980407AA9FD970F79152E0E794B0AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseAnalytics; - target = 0562504F6D4CBC4932D70CDDC0D2AFD6 /* FirebaseAnalytics */; - targetProxy = CEB5A384D7375380EF597B1AB18385B1 /* PBXContainerItemProxy */; + name = nanopb; + target = FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */; + targetProxy = E2EA8E3E0B0C0D8B07E4FB4DE911C26E /* PBXContainerItemProxy */; }; - 5B752D9C0B5C827564E50D1F5B3825BF /* PBXTargetDependency */ = { + 64B5591A33CBB7B9CEE97BFAC46F88F2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Fabric; - target = 7CE49DE8B659FE84C6885E456503139D /* Fabric */; - targetProxy = 20AF8CA16D1FCC0F8DDA10328E46A3C7 /* PBXContainerItemProxy */; + name = Nuke; + target = 0DF9FEC4D52DBD2F86898986EC1B46AE /* Nuke */; + targetProxy = 88852B8768907DE641A8D1717DB740B5 /* PBXContainerItemProxy */; }; - 5BC3513BA4F563CCEAA4509AA95A2DC0 /* PBXTargetDependency */ = { + 69FCFC91E3C6057F696F84CB6E18980E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RocketChatViewController; - target = 55FA0B285608509C58926F57847AB4D2 /* RocketChatViewController */; - targetProxy = 594F563E8ADE42B327F0DB7271C6F67F /* PBXContainerItemProxy */; + name = 1PasswordExtension; + target = EA9D15B80EC4F97B280430247E0F213B /* 1PasswordExtension */; + targetProxy = CA1E0976FE97B72C2BC716BA1CF87E7D /* PBXContainerItemProxy */; }; - 5C4C8E1050AC2653CFCABC1F42C2B6DE /* PBXTargetDependency */ = { + 69FFAB8C5DFA39938E83FA9A0B6D8B75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = nanopb; - target = AA61720B36F74B4975EDA51370C03FB8 /* nanopb */; - targetProxy = 507B499A11B76CD8852940E8F5D6A366 /* PBXContainerItemProxy */; + name = GoogleUtilities; + target = E8E03261919E1552240E2A9AF312DCE1 /* GoogleUtilities */; + targetProxy = 82A05F2BD56FA350CBDE64CCB8E8CFAA /* PBXContainerItemProxy */; }; - 5DAF342486872D00EDBEEC822BD04951 /* PBXTargetDependency */ = { + 6AAA1A1CACFDE8D6FA02507E32C474D8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftLint; - target = 55E1FDE52DD9C139D679CC408529CF94 /* SwiftLint */; - targetProxy = E83679484254D0ECF741DF5764348FC1 /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */; + targetProxy = 5F79EA503511D3C71B5FD9DF6B5DE156 /* PBXContainerItemProxy */; }; - 5DF99EF95E5A9CC3730E810250E409F8 /* PBXTargetDependency */ = { + 6C14CD3303D477B7A6CE700A5A6EB694 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftyJSON; - target = A8A5A77D99AF2642C050686191AAC5A6 /* SwiftyJSON */; - targetProxy = 57014401CF64B8AEB61D2513E12C226B /* PBXContainerItemProxy */; + name = Realm; + target = 0FB10C95F9BBD21C45E9DD56E9DE66DC /* Realm */; + targetProxy = B0DFCC581B5F960B493E731D07022925 /* PBXContainerItemProxy */; }; - 617773B6577C047936D41EAED87D3397 /* PBXTargetDependency */ = { + 6DA11BC9389C8334406EDF4657AEB8F8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "1PasswordExtension-OnePasswordExtensionResources"; - target = 7A00110467ACE628B80ABBD9F1E83698 /* 1PasswordExtension-OnePasswordExtensionResources */; - targetProxy = AE1474EF48314D191B3DB3DBCE765ED7 /* PBXContainerItemProxy */; + name = "Nuke-FLAnimatedImage-Plugin"; + target = FAC0EDA22C68AE54A68C056BA09FBA71 /* Nuke-FLAnimatedImage-Plugin */; + targetProxy = 961757FB7C95477CB08A7CC93C6C3B89 /* PBXContainerItemProxy */; }; - 637EB4923AC07FD87FA282484A3F267C /* PBXTargetDependency */ = { + 6DF616E8F702F5BA389680BEFC3AACC3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleUtilities; - target = 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */; - targetProxy = C39F893CFA19F9A58EFAF99A3DB3AD29 /* PBXContainerItemProxy */; + target = E8E03261919E1552240E2A9AF312DCE1 /* GoogleUtilities */; + targetProxy = B14EF70E896C5E601DA5118C998F1957 /* PBXContainerItemProxy */; + }; + 70D9937E880F8439F7A938A056197C4B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Starscream; + target = DBE96A9B8FFA441C679FFF903BC1CFC0 /* Starscream */; + targetProxy = C1DF3C80FEAF237D3A41B7F9A91BD143 /* PBXContainerItemProxy */; }; - 64B95277B4B762756E733CFB055CAEA0 /* PBXTargetDependency */ = { + 728F8B4891C9476B7384D1F53844E02D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = MobilePlayer; - target = DE5935DD370A98D07EB105CDD08427F0 /* MobilePlayer */; - targetProxy = 2C9DA0D27E91C72D9CF18C37CB98A8D1 /* PBXContainerItemProxy */; + target = 80E23AABF0943180B6599EA449C2CEF2 /* MobilePlayer */; + targetProxy = 13BE29929AD2B21A71738912B7410617 /* PBXContainerItemProxy */; }; - 657024FF72347BF4F988BBEC54836044 /* PBXTargetDependency */ = { + 74F780ECF97B1FDEE5FF71CE61AD914E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = OAuthSwift; - target = 995313EC42D812DEC94B33A8FE4F0344 /* OAuthSwift */; - targetProxy = FB3F736BEA0A7638025C76C0CFD81097 /* PBXContainerItemProxy */; + name = FLAnimatedImage; + target = E00311318D3052CB3429E9B5303B854B /* FLAnimatedImage */; + targetProxy = 58EB88CEC84B668FFB02CB1E8D9D4241 /* PBXContainerItemProxy */; }; - 67AC8CF1B7CBFDE193B57DC918C46140 /* PBXTargetDependency */ = { + 760C807B95ABD84879E1D89FF2CB5BEF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Starscream; - target = F114C53C144DED6ADCA1BA4F2BC1EB05 /* Starscream */; - targetProxy = 4184B450BEF4C28EF0527487E3157BEE /* PBXContainerItemProxy */; + name = nanopb; + target = FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */; + targetProxy = 10A6F4B9D0E898E03D043717876BFA17 /* PBXContainerItemProxy */; }; - 6D359D7DCCBFC2601598E4BAEA80859B /* PBXTargetDependency */ = { + 7716C8D84733708FF57F092D2AF3FDF2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Fabric; - target = 7CE49DE8B659FE84C6885E456503139D /* Fabric */; - targetProxy = 65A9E030A9007C5CA709E88D8C065C83 /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */; + targetProxy = FEAB863E34221F588B51BD0A0A609A42 /* PBXContainerItemProxy */; }; - 6FBBAE88D1D0F267D94DC5925D1F1D6B /* PBXTargetDependency */ = { + 7CED5939A8442A05DBC190C218338CF2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = nanopb; - target = AA61720B36F74B4975EDA51370C03FB8 /* nanopb */; - targetProxy = D6B9E98FF4615F39E6280498BA0AE77B /* PBXContainerItemProxy */; + name = FLAnimatedImage; + target = E00311318D3052CB3429E9B5303B854B /* FLAnimatedImage */; + targetProxy = 5F8BBBF3DB15295DB2578C1E9AF16279 /* PBXContainerItemProxy */; }; - 7384A08B743A248690F5E04E21175C63 /* PBXTargetDependency */ = { + 7D31B8A6D6DCAF7CD50555F70FF530D7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Realm; - target = 237BDF70A0D24421463790971334A771 /* Realm */; - targetProxy = EC3AF76984EAE732C1944F05702F8B58 /* PBXContainerItemProxy */; + name = 1PasswordExtension; + target = EA9D15B80EC4F97B280430247E0F213B /* 1PasswordExtension */; + targetProxy = E9BC7BAC2255C94E2946C1292E029DE7 /* PBXContainerItemProxy */; }; - 74EB534E6A759953BADC7FC241B162F4 /* PBXTargetDependency */ = { + 83222C5AE4419F2E7C17E676911925CD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Realm; - target = 237BDF70A0D24421463790971334A771 /* Realm */; - targetProxy = DBBCDBD31BF4665B1F5BD9DB9B027F37 /* PBXContainerItemProxy */; + name = FirebaseCore; + target = 3C68CBEBC7AA24BEECA1BAE10D69B4F7 /* FirebaseCore */; + targetProxy = F5E54D8139758F2B1C70DD1972BBAD41 /* PBXContainerItemProxy */; }; - 7661289168D6F4565D9A7C5773266D23 /* PBXTargetDependency */ = { + 857B9CA83EC749E77DAB1EAFCE4AFB3C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseInstanceID; - target = BC2B4D06432AD962396EB82B589340B7 /* FirebaseInstanceID */; - targetProxy = 88088FA244656BAE9D38BB1ACCE149F9 /* PBXContainerItemProxy */; + name = semver; + target = A179C4D7DC05024EBB1258F1BE332836 /* semver */; + targetProxy = 185D05CDE6E5B82BE10CC7BA2D311D3E /* PBXContainerItemProxy */; }; - 7B11E7D7A50A52ACFBFCDD6A8C33827F /* PBXTargetDependency */ = { + 863EB6C54BB477ABAF4276606381A0D7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DifferenceKit; - target = C9732C970DC56F54EA5F3AA0F10697B3 /* DifferenceKit */; - targetProxy = 5D03F858F90E51E4D9769171403C9B61 /* PBXContainerItemProxy */; + target = DBB9E8FC42AD71B397F9719F46F8C8DA /* DifferenceKit */; + targetProxy = 29849BA96627907D86ABF68ADB041FCC /* PBXContainerItemProxy */; }; - 7B9CB15A995843E735CA29E9192F22B9 /* PBXTargetDependency */ = { + 86F58552650238DF3C0BD422F0812DA8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Firebase; - target = DE5EE8EEA217EAEF464BE0F1D44A3248 /* Firebase */; - targetProxy = 2B3F1F3C03BA6F4EEEF570F6FA77A21E /* PBXContainerItemProxy */; + name = Realm; + target = 0FB10C95F9BBD21C45E9DD56E9DE66DC /* Realm */; + targetProxy = 752892E79A12CEEFB650F1EAF0D81069 /* PBXContainerItemProxy */; }; - 7BDAB889838AF36D5971EE4CBCD7E79D /* PBXTargetDependency */ = { + 87745821C14F772EEED0EAEFA3C0D00E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftyJSON; - target = A8A5A77D99AF2642C050686191AAC5A6 /* SwiftyJSON */; - targetProxy = F5CAA17728D1024783FDA8EB7459EF7F /* PBXContainerItemProxy */; + name = "DifferenceKit-Core"; + target = 37515DB33E76B4A4B1E375D2075F615C /* DifferenceKit-Core */; + targetProxy = CB933BD2C14EAF0F5FAAF71977A276DF /* PBXContainerItemProxy */; }; - 7EA0CEC6D7EE39EAFCF4AA9287BE73E7 /* PBXTargetDependency */ = { + 888424751E773A6613DAAD309DBEEA4A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = semver; - target = D2A8A4D7433918EF402134DBD93D9269 /* semver */; - targetProxy = 0BEBEF506358A31A236A44DB5D516673 /* PBXContainerItemProxy */; + name = Realm; + target = 0FB10C95F9BBD21C45E9DD56E9DE66DC /* Realm */; + targetProxy = FE7D559AF00B1F4039F0A5E585C47DC2 /* PBXContainerItemProxy */; }; - 806BD4EDFBFE58E0F04E4830F43767A1 /* PBXTargetDependency */ = { + 8950691962ABCB24B59896F7A4DBE5AC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RealmSwift; - target = FC398047D96D5EB82DC34A1AA22FECEE /* RealmSwift */; - targetProxy = 769065DF76EABFE60C71C92A7FA7F1A7 /* PBXContainerItemProxy */; + name = nanopb; + target = FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */; + targetProxy = 57FD164AD68261538E41E02B35F72933 /* PBXContainerItemProxy */; }; - 81833D006597D9A659C1A39E0A9A536F /* PBXTargetDependency */ = { + 8A3FE8F94A301BCF167AFF2B54F1D6F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SimpleImageViewer; - target = BDC9D0A453E0589198E53EF71AF3A6B1 /* SimpleImageViewer */; - targetProxy = 6D145967FE98B0A1B6267FD0D61554A5 /* PBXContainerItemProxy */; + name = FirebaseCoreDiagnostics; + target = AD9F7CE16C23215D6E90116FC4017D5F /* FirebaseCoreDiagnostics */; + targetProxy = 59A888483A0DC5A7F413B8398CB0ADB8 /* PBXContainerItemProxy */; }; - 82762B1341574D95AFFD346BEBBDBE9F /* PBXTargetDependency */ = { + 8AF160165C90A3AF03A4833DE9F078B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = MBProgressHUD; - target = 9C1854A0145F43E74B79C3F491E94E2E /* MBProgressHUD */; - targetProxy = 7246068DFC8175B9B9F43F33109F7E09 /* PBXContainerItemProxy */; + name = RealmSwift; + target = 4548FD0F52098CA90D3A62745F0C1474 /* RealmSwift */; + targetProxy = AE2D2F0FF5E3C43748409C80C3F96B28 /* PBXContainerItemProxy */; }; - 86B6B71ED8DE5C55D9C78D692391E76B /* PBXTargetDependency */ = { + 8CC06234AA31EF2041846DA75DB51F1F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCore; - target = 6551B0A997F3C3EC1BF5CCCE8C9D7640 /* FirebaseCore */; - targetProxy = 2CA9D99716704480D69182F74FD0AEAF /* PBXContainerItemProxy */; + name = GoogleUtilities; + target = E8E03261919E1552240E2A9AF312DCE1 /* GoogleUtilities */; + targetProxy = F5B49D0A167C8A4EA7BC64566119FBD9 /* PBXContainerItemProxy */; }; - 8D1FEC98FF8D5FDFF3D63678E2BF8AB6 /* PBXTargetDependency */ = { + 8DAD96D57944696EA459F6D75ABBE5E0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCore; - target = 6551B0A997F3C3EC1BF5CCCE8C9D7640 /* FirebaseCore */; - targetProxy = 251B8D1DC4CC2E5CD2B566BCE6138C3C /* PBXContainerItemProxy */; + name = MBProgressHUD; + target = 891841C3419A52929FB5D16A575798DB /* MBProgressHUD */; + targetProxy = 517D7FE0EE115031DA9F3AB0B64F77FC /* PBXContainerItemProxy */; }; - 8ED10D39439737227F01300C367B6113 /* PBXTargetDependency */ = { + 8FAAF0EDE14A76D54CC39E0D033BAFBC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Crashlytics; - target = 7F79AF09BDA0EB7EE86AA958E0F97C7B /* Crashlytics */; - targetProxy = 9E0FD8268F4500D652C3B6A2DC09D824 /* PBXContainerItemProxy */; + name = FirebaseCoreDiagnostics; + target = AD9F7CE16C23215D6E90116FC4017D5F /* FirebaseCoreDiagnostics */; + targetProxy = B27A5D3E5CA7CBE216A09821DB822066 /* PBXContainerItemProxy */; }; - 93DDEFD992E631FBAB4839EC8ACDB92B /* PBXTargetDependency */ = { + 8FEA9BC05709484AEBB922B77370861F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Nuke-FLAnimatedImage-Plugin"; - target = 293E484C14E8255A78D47D2E48DDFCEE /* Nuke-FLAnimatedImage-Plugin */; - targetProxy = BBA2A43A240F71C3741AE1ADDC9E9D85 /* PBXContainerItemProxy */; + name = OAuthSwift; + target = FBAC02E8630366D9AF85309F1C074CD3 /* OAuthSwift */; + targetProxy = 29BCA30A491641E666696E498AEB63B0 /* PBXContainerItemProxy */; }; - 9DF169AE6396BADE72A698BF7C426D59 /* PBXTargetDependency */ = { + 9155EAC2882C31CA1EDEF97896133DFC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FLAnimatedImage; - target = F34AB23A45E66B5330A74220CE95958C /* FLAnimatedImage */; - targetProxy = 6AE8140D315B09CD7FE005EFEDB4DD77 /* PBXContainerItemProxy */; + name = SimpleImageViewer; + target = 67FE5E457C21DEAD34748941C5B15AD4 /* SimpleImageViewer */; + targetProxy = 1350478CA2226879D88CFFE3591FB0C8 /* PBXContainerItemProxy */; }; - 9E2F849DCB4A4B0E88227A8B7F3006A8 /* PBXTargetDependency */ = { + 941A403BA86624E9A700761031ABE7A2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = nanopb; - target = AA61720B36F74B4975EDA51370C03FB8 /* nanopb */; - targetProxy = 288D693B0886EACBAE8D85E82D739514 /* PBXContainerItemProxy */; + name = FirebaseCore; + target = 3C68CBEBC7AA24BEECA1BAE10D69B4F7 /* FirebaseCore */; + targetProxy = D92DB76F1F18F618C520E478F3060D89 /* PBXContainerItemProxy */; }; - 9E947511A2E5CEBFE93049F430B60869 /* PBXTargetDependency */ = { + 9BFCEBEEA98E07DA0FBA3CBD5B7A7291 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleAppMeasurement; - target = CAFA4CBCA3898A6F62989262E04582A8 /* GoogleAppMeasurement */; - targetProxy = 01FFAF138F098B5300730EBD0451F563 /* PBXContainerItemProxy */; + name = SwiftyJSON; + target = 0C9B6293E2C60B3B502A97DB9F4A09AF /* SwiftyJSON */; + targetProxy = E3837D11B2202D35D8DD1DD4E41AE530 /* PBXContainerItemProxy */; }; - 9FAF3B63FFB5DFDC26792AA179C159C7 /* PBXTargetDependency */ = { + 9DB4EA14BC0A06FA74AE65B9FCE99F30 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleAppMeasurement; - target = CAFA4CBCA3898A6F62989262E04582A8 /* GoogleAppMeasurement */; - targetProxy = 279F254BFB18E776226DA5F2C3CF3274 /* PBXContainerItemProxy */; + name = nanopb; + target = FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */; + targetProxy = 50AB6F36910B87118617AEE3335AA1F8 /* PBXContainerItemProxy */; }; - A190CE822618014AA988AFA519180475 /* PBXTargetDependency */ = { + 9F5F4FB1A2A507FF9509B86758B729F0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftyJSON; - target = A8A5A77D99AF2642C050686191AAC5A6 /* SwiftyJSON */; - targetProxy = BFCCD4B33C367483049221F062D91B10 /* PBXContainerItemProxy */; + name = FLAnimatedImage; + target = E00311318D3052CB3429E9B5303B854B /* FLAnimatedImage */; + targetProxy = F84CF8869715C8D73BFD4C6C8EDF146E /* PBXContainerItemProxy */; }; - A325AD2E8DD563B1AFB1D40BBDEABEC1 /* PBXTargetDependency */ = { + 9F87F84D666375813EFC9CA9996B2B54 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Firebase; - target = DE5EE8EEA217EAEF464BE0F1D44A3248 /* Firebase */; - targetProxy = 53E5039C3064A0770D5A16A9633B3263 /* PBXContainerItemProxy */; + name = SimpleImageViewer; + target = 67FE5E457C21DEAD34748941C5B15AD4 /* SimpleImageViewer */; + targetProxy = 01B2A073E9AA89ED2E2898930C400137 /* PBXContainerItemProxy */; }; - A8D008281697A90524F63A8BE017D239 /* PBXTargetDependency */ = { + A07B587C6D80CFAE2D5778102D9F58EE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = MBProgressHUD; - target = 9C1854A0145F43E74B79C3F491E94E2E /* MBProgressHUD */; - targetProxy = 4C5141EFF2B3059B29C88AC021072D2E /* PBXContainerItemProxy */; + name = GoogleDataTransportCCTSupport; + target = 1067FA952B76EED7AA2A52057C7B7DB4 /* GoogleDataTransportCCTSupport */; + targetProxy = 77E956D0CB4538BE1DCE3AA32CC36491 /* PBXContainerItemProxy */; }; - B07EFA2BFB883FA6F516FDFF33B1F2BC /* PBXTargetDependency */ = { + A33B8079012FC35F6C5AF818C477735D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FLEX; - target = 088C502077FC6305966DF84EEC3A4A07 /* FLEX */; - targetProxy = F1DC038FC6EB4FB0CF8CCF59F4EA169F /* PBXContainerItemProxy */; + name = GoogleDataTransportCCTSupport; + target = 1067FA952B76EED7AA2A52057C7B7DB4 /* GoogleDataTransportCCTSupport */; + targetProxy = CF8643E025E10B2B054E2E056F9F2C94 /* PBXContainerItemProxy */; }; - B0E8C957B10B94DCC64A9DBD0B5D88AC /* PBXTargetDependency */ = { + A4148E5C2DF6A99B52A072CFAEF70E32 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseInstanceID; - target = BC2B4D06432AD962396EB82B589340B7 /* FirebaseInstanceID */; - targetProxy = 881E563DD8B8E0AC39D97EE60516468A /* PBXContainerItemProxy */; + name = "DifferenceKit-Core"; + target = 37515DB33E76B4A4B1E375D2075F615C /* DifferenceKit-Core */; + targetProxy = 3AE48EA4BEBE161AD3AEBC33FC22E86C /* PBXContainerItemProxy */; }; - B265C2BDC0B25AB07FDA1168DC024B52 /* PBXTargetDependency */ = { + A51078E9578E42A79F03F7A89535D106 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FLAnimatedImage; - target = F34AB23A45E66B5330A74220CE95958C /* FLAnimatedImage */; - targetProxy = AD9267D3FFDBE34012738B841FA33980 /* PBXContainerItemProxy */; + name = SwiftyJSON; + target = 0C9B6293E2C60B3B502A97DB9F4A09AF /* SwiftyJSON */; + targetProxy = F57B40E9ACF1CACD8DD4E2ED7809E3B0 /* PBXContainerItemProxy */; }; - B4F7016FEB02AD5B1D305DD1E5FCF8EC /* PBXTargetDependency */ = { + AAC6B799029F8CEA9FFAF9A16C8E72F5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = OAuthSwift; - target = 995313EC42D812DEC94B33A8FE4F0344 /* OAuthSwift */; - targetProxy = DA57081D20F86C2B605FCC283004E9ED /* PBXContainerItemProxy */; + name = "1PasswordExtension-OnePasswordExtensionResources"; + target = BEDC62E1AF6B87F407DE20E920BB428C /* 1PasswordExtension-OnePasswordExtensionResources */; + targetProxy = F3D6FB85E43A9BA6C66BDC2A9ED3D478 /* PBXContainerItemProxy */; }; - B6610F7B1C9CEFC7AE5E50C5730BA3A6 /* PBXTargetDependency */ = { + AFFC2404E11ECFB737FA124B9D762882 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FLAnimatedImage; - target = F34AB23A45E66B5330A74220CE95958C /* FLAnimatedImage */; - targetProxy = 6A0BFB091894EF996751C5C1A1E54D79 /* PBXContainerItemProxy */; + name = RCMarkdownParser; + target = 7564F88B01F601AAC832E1AD63849278 /* RCMarkdownParser */; + targetProxy = 88B70783D6EAEB7506593D49CFAE7A57 /* PBXContainerItemProxy */; }; - B674AFD5A82C0534A3D4AE73E986D5E5 /* PBXTargetDependency */ = { + BA07E4678CC3DB09AFAE0907B6BB2A52 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Crashlytics; - target = 7F79AF09BDA0EB7EE86AA958E0F97C7B /* Crashlytics */; - targetProxy = 7D456E586D5F925D3306EC3FF9CF9A07 /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */; + targetProxy = 87EB81AE3F2D6C5E9A7DD92DBCADB12D /* PBXContainerItemProxy */; }; - B935DBAFC633CCF0785C37908222B1C9 /* PBXTargetDependency */ = { + BB2C25CADE6CA93CB36D4E2BE20549E0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseAnalytics; - target = 0562504F6D4CBC4932D70CDDC0D2AFD6 /* FirebaseAnalytics */; - targetProxy = F04CFE2EE95390FE1F584E86D2834B7B /* PBXContainerItemProxy */; + name = MBProgressHUD; + target = 891841C3419A52929FB5D16A575798DB /* MBProgressHUD */; + targetProxy = E9A4C2A1F7491914BD46C2C2B67592CC /* PBXContainerItemProxy */; }; - BA6BAE6B1BB70AEB3EFC559382DCEFFC /* PBXTargetDependency */ = { + BE0847AE1AE4CB4B6B999A6D56959D13 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Starscream; - target = F114C53C144DED6ADCA1BA4F2BC1EB05 /* Starscream */; - targetProxy = BD790818B6E057E4E9F38A066E7279DE /* PBXContainerItemProxy */; + name = FirebaseInstanceID; + target = 7A188CE4BDA89D941184C4CC4C426B07 /* FirebaseInstanceID */; + targetProxy = 6C44CEF863A93F57895147888650F34E /* PBXContainerItemProxy */; }; - BB35E64FC03C03907243656D91A59770 /* PBXTargetDependency */ = { + C91695DA8F92FA718D2621BF250DD0FA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RCMarkdownParser; - target = A5F394DBBF164FD98BF2BF258D2CDFCE /* RCMarkdownParser */; - targetProxy = 45E1EEDF2DB718BC65744D4224A15F14 /* PBXContainerItemProxy */; + name = RocketChatViewController; + target = 0601E30DD8EB3E5C4CA86433D77ED08C /* RocketChatViewController */; + targetProxy = ED4BFD41F6CCE7CDE07AF3D57B8C6F4F /* PBXContainerItemProxy */; }; - BEE399DC17F9BF96F75C9BA7443F2CF4 /* PBXTargetDependency */ = { + C9E858F4707A1F40D555B0C273AFFDF8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleUtilities; - target = 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */; - targetProxy = 014862E9FF8341AE1ADC700BE759EF36 /* PBXContainerItemProxy */; + name = FirebaseCore; + target = 3C68CBEBC7AA24BEECA1BAE10D69B4F7 /* FirebaseCore */; + targetProxy = B0831D2FC7269F82D8D7D02D048D3D3F /* PBXContainerItemProxy */; }; - C68C638FF6450E5E4828D22C17EDB966 /* PBXTargetDependency */ = { + CB5917DFEB1C2DF97B4DA2DF9A07258E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Nuke; - target = A1A0FE2A9E90F5B42D68DD55E0C304C7 /* Nuke */; - targetProxy = FB0473BF7F0C0547A6A6534EE7EF62A7 /* PBXContainerItemProxy */; + name = nanopb; + target = FDDB9C61D1339D570C1BF4DDE393D6DD /* nanopb */; + targetProxy = 348E51D3DBE5FD2A5830B53FE9340D87 /* PBXContainerItemProxy */; }; - CFF098B8C151305C191AA153495C81B7 /* PBXTargetDependency */ = { + D1B870E5E57A5380E961B884186E79DF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseAnalytics; - target = 0562504F6D4CBC4932D70CDDC0D2AFD6 /* FirebaseAnalytics */; - targetProxy = 870116F72869A2C24E8A61977D4E4D38 /* PBXContainerItemProxy */; + name = OAuthSwift; + target = FBAC02E8630366D9AF85309F1C074CD3 /* OAuthSwift */; + targetProxy = F6DB12AEEB271A0D16FC0847026B2F5B /* PBXContainerItemProxy */; }; - E1003DFD256155A018B7C86AA82F9BEC /* PBXTargetDependency */ = { + D2255FF01FAA15A5E6C15637C2E673FD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FLEX; - target = 088C502077FC6305966DF84EEC3A4A07 /* FLEX */; - targetProxy = 1DB1851A39BF24F28804F4181C6445C9 /* PBXContainerItemProxy */; + name = MBProgressHUD; + target = 891841C3419A52929FB5D16A575798DB /* MBProgressHUD */; + targetProxy = B2F288A36F5B44ED093C623EBA127BC4 /* PBXContainerItemProxy */; }; - E55C83954DEB6A64179784ABAA9674D2 /* PBXTargetDependency */ = { + D236E153006C7F9D44DAAE0BC9EA9009 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Nuke; - target = A1A0FE2A9E90F5B42D68DD55E0C304C7 /* Nuke */; - targetProxy = 5B808703E4118B89EF0FC23335A057FE /* PBXContainerItemProxy */; + target = 0DF9FEC4D52DBD2F86898986EC1B46AE /* Nuke */; + targetProxy = 9DC56B2F13FDDB99D2F148E143EBF6D1 /* PBXContainerItemProxy */; }; - E7D104F76ACD948518733CC46551B907 /* PBXTargetDependency */ = { + D466CD57E0A96C9894680D724BFAF4FC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RealmSwift; - target = FC398047D96D5EB82DC34A1AA22FECEE /* RealmSwift */; - targetProxy = 4043075BB6445BD4A4FFB11BBB3BFFA0 /* PBXContainerItemProxy */; + name = semver; + target = A179C4D7DC05024EBB1258F1BE332836 /* semver */; + targetProxy = 567088D87E8A3A86B705FEB2C2710BA2 /* PBXContainerItemProxy */; }; - EBA68183F4A6D96BB94EADB6203DDCB5 /* PBXTargetDependency */ = { + D7382052AED63DB19505A579FE78840E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleUtilities; - target = 6F4511B9022EA5EC32335380F005F6AD /* GoogleUtilities */; - targetProxy = 95E8263C2FC7822EB1C698F435370638 /* PBXContainerItemProxy */; - }; - EC90A5ECFF5C3034BE2A9EF5542EB9FC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RealmSwift; - target = FC398047D96D5EB82DC34A1AA22FECEE /* RealmSwift */; - targetProxy = 7E4B9C23150D6EBDC6D852EBAAAFD6F3 /* PBXContainerItemProxy */; + target = E8E03261919E1552240E2A9AF312DCE1 /* GoogleUtilities */; + targetProxy = 63227B76CBE764E983BDB5ADC9AAE519 /* PBXContainerItemProxy */; }; - EEBB5F3AB356A71121DF2B1E9A7943F2 /* PBXTargetDependency */ = { + E09D9E4BD00AB26F33E799E4E42A11DD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Realm; - target = 237BDF70A0D24421463790971334A771 /* Realm */; - targetProxy = C10738CDD52D04C9AD2B2005F89110EE /* PBXContainerItemProxy */; + name = Nuke; + target = 0DF9FEC4D52DBD2F86898986EC1B46AE /* Nuke */; + targetProxy = 74722EE8343A925C507CD9463B1499E3 /* PBXContainerItemProxy */; }; - F23E7E0F1E8F0E4381B882989CC906C7 /* PBXTargetDependency */ = { + E3AD33E3714246A4D2F8D949F693B93E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Nuke; - target = A1A0FE2A9E90F5B42D68DD55E0C304C7 /* Nuke */; - targetProxy = 6B68BDA3C81FD1938AD4E9739483521A /* PBXContainerItemProxy */; + name = ReachabilitySwift; + target = DAC25189504B9C8910EC20AF68E62D3A /* ReachabilitySwift */; + targetProxy = AA452171618777AB219B3B6349493033 /* PBXContainerItemProxy */; }; - F40FD687EB51A9C628E6C3E1BE71710F /* PBXTargetDependency */ = { + E8A5A4E3B7A86174F9DA278CED71B11F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCore; - target = 6551B0A997F3C3EC1BF5CCCE8C9D7640 /* FirebaseCore */; - targetProxy = C67DA1FCA7D28AD33D59915539297397 /* PBXContainerItemProxy */; + name = "Nuke-FLAnimatedImage-Plugin"; + target = FAC0EDA22C68AE54A68C056BA09FBA71 /* Nuke-FLAnimatedImage-Plugin */; + targetProxy = 1A1793AEDCAADBE9DCAD48D3AEAEC513 /* PBXContainerItemProxy */; }; - F58E3F11BC16D7BEE5767416E73CE337 /* PBXTargetDependency */ = { + F3B00FFC598E683282D87EAE079D24AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = MobilePlayer; - target = DE5935DD370A98D07EB105CDD08427F0 /* MobilePlayer */; - targetProxy = 00F6FC09268AC53BE1F7C6D68FCC5ADE /* PBXContainerItemProxy */; + name = FirebaseCoreDiagnostics; + target = AD9F7CE16C23215D6E90116FC4017D5F /* FirebaseCoreDiagnostics */; + targetProxy = 1F57EA2A46A74A9803A5C2D2BC179FA1 /* PBXContainerItemProxy */; }; - F70C546C48DEDE4A8108EFA1175AD0F5 /* PBXTargetDependency */ = { + F62504D601F3F10F82D760FA38423A18 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = MBProgressHUD; - target = 9C1854A0145F43E74B79C3F491E94E2E /* MBProgressHUD */; - targetProxy = 2B196BD980019C8B0D70402E8CA6C5F4 /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = F111C819DEF16A03C3E5E43FC1E83146 /* GoogleDataTransport */; + targetProxy = 00681E3B0418ACD984360540760A07C3 /* PBXContainerItemProxy */; }; - F930BC0647FF4EB7BD3732DD7DC577A3 /* PBXTargetDependency */ = { + F6D03276A4957C28680C67F02D8F0B68 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DifferenceKit; - target = C9732C970DC56F54EA5F3AA0F10697B3 /* DifferenceKit */; - targetProxy = 0D47425E328B48D42F9A6C681479F258 /* PBXContainerItemProxy */; + name = FLAnimatedImage; + target = E00311318D3052CB3429E9B5303B854B /* FLAnimatedImage */; + targetProxy = 600821B0E2A4998DA3BFB325807F9A15 /* PBXContainerItemProxy */; }; - FB084A3387956F2DA30C689216F1A162 /* PBXTargetDependency */ = { + F93355A96DEE062557D9E23E5B8E0DF7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ReachabilitySwift; - target = F3F9ECFF28CD85D964A7912AFAE3ED86 /* ReachabilitySwift */; - targetProxy = E1ED07827CC50DA221097D2598B6E25E /* PBXContainerItemProxy */; + name = RCMarkdownParser; + target = 7564F88B01F601AAC832E1AD63849278 /* RCMarkdownParser */; + targetProxy = 790CEDF7E363E26DC89EBD6467632932 /* PBXContainerItemProxy */; }; - FDBB377C74BB4D697019AA795A3901F4 /* PBXTargetDependency */ = { + F9AB0BA5540EF7CB11478C2A571E0EA4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCore; - target = 6551B0A997F3C3EC1BF5CCCE8C9D7640 /* FirebaseCore */; - targetProxy = E4F6E6D1ADC7E661A9965D45E3EEB928 /* PBXContainerItemProxy */; + name = Realm; + target = 0FB10C95F9BBD21C45E9DD56E9DE66DC /* Realm */; + targetProxy = 1C718F25691B2096121748AE34ADB8C9 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 038AEFB56C4A5A6DCAE077FE0F6652F9 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1DEDB36512AFEDCF4F7681D3948EE214 /* Crashlytics.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 03C98F0B5529A74A3AAF159B42080A37 /* Test */ = { + 00099457FA1867ACF55185624A208BD4 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B2C6DFEA576926CBC7F88EAC76CB12B /* RealmSwift.xcconfig */; + baseConfigurationReference = 37EA5C62A914BE9A0F0F998EEFE3E955 /* FLEX.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6357,14 +6889,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLEX/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/RealmSwift/RealmSwift.modulemap"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; + MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; + PRODUCT_MODULE_NAME = FLEX; + PRODUCT_NAME = FLEX; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6377,85 +6909,69 @@ }; name = Test; }; - 05CCE5A1ACA67533C913913BCEB28530 /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B845D4D251CCDDF953CA7EFB274FA084 /* Fabric.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Beta; - }; - 065A398C9F69192F655C96C4931E5AEB /* Debug */ = { + 04BFC66EE9A37395434DC048F81A397D /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 93B888C8657DA23C1C1B3F68594B4E21 /* Pods-Rocket.ChatTests.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - 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"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + 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; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + 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_TEST=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 = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.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; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 080F71CFC05A7529A13557456F63EBFA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D96912A8D45377B0A76C2D2640926BFA /* FirebaseAnalytics.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; }; - name = Debug; + name = Test; }; - 0A3D00551821A163AED0C9FA4E61E25F /* Release */ = { + 0623320D4550A76AEF8F46872D121E0B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9319971B69A41A780F031EBF2D11295F /* RocketChatViewController.xcconfig */; + baseConfigurationReference = 6295E8C80C600AF653A12F8814869FC7 /* Realm.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6466,14 +6982,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Realm/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; - PRODUCT_MODULE_NAME = RocketChatViewController; - PRODUCT_NAME = RocketChatViewController; + MODULEMAP_FILE = "Target Support Files/Realm/Realm.modulemap"; + PRODUCT_MODULE_NAME = Realm; + PRODUCT_NAME = Realm; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6486,12 +7002,10 @@ }; name = Release; }; - 0B52863F7BB47F945CB13A5DFA033270 /* Beta */ = { + 07024191E47DB7BFA0F07FE662CCB904 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4B9C8F146839268E10269F4C07475A07 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6502,31 +7016,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; - PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; - PRODUCT_NAME = NukeFLAnimatedImagePlugin; + MODULEMAP_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension.modulemap"; + PRODUCT_MODULE_NAME = OnePasswordExtension; + PRODUCT_NAME = OnePasswordExtension; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Debug; }; - 0DEE15339455563EF2295B31C44A1190 /* Debug */ = { + 0810C02FB39EB7E9A03897ACAD0AE371 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; + baseConfigurationReference = 1C5951331CE0F79ABC4BE35C8BDFAB3A /* SwiftyJSON.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6537,32 +7050,91 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/MobilePlayer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/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/MobilePlayer/MobilePlayer.modulemap"; - PRODUCT_MODULE_NAME = MobilePlayer; - PRODUCT_NAME = MobilePlayer; + MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 15544BE043AF151F9A053F72B3A5A7F2 /* Test */ = { + 08638A96A528B1EC32DE62F8A728389D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86938266EC29B43C2DF06591C98204CF /* MBProgressHUD.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; + 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; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 09FD2278762B2DDBE026169B9462814B /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 28B5278BC2CCF657DFF385FD2DD4CB5D /* Pods-Rocket.Chat.ShareExtension.test.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6572,17 +7144,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = MBProgressHUD; - PRODUCT_NAME = MBProgressHUD; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.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; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -6592,11 +7166,10 @@ }; name = Test; }; - 15A441C7B7E338F2FC4B5CC1C14CA365 /* Release */ = { + 0A292872B0F101BD6EB1032D3C81EB0C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; + baseConfigurationReference = 40535F80A39B0649ACD3833406DC42E8 /* GoogleUtilities.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6607,19 +7180,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/MobilePlayer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/GoogleUtilities/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/MobilePlayer/MobilePlayer.modulemap"; - PRODUCT_MODULE_NAME = MobilePlayer; - PRODUCT_NAME = MobilePlayer; + MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; + PRODUCT_MODULE_NAME = GoogleUtilities; + PRODUCT_NAME = GoogleUtilities; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -6627,11 +7200,10 @@ }; name = Release; }; - 15F46A2FC9E1A4F62A0703B060AFC92E /* Release */ = { + 0BB4C287AE42D0F8D84BF5A16AD99621 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116828EF4369238ED13BEDAFBEB11F01 /* FirebaseCore.xcconfig */; + baseConfigurationReference = 183C952CB41915982BAB89E9F35F8867 /* SwipeCellKit.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6642,33 +7214,31 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwipeCellKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; + MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; + PRODUCT_MODULE_NAME = SwipeCellKit; + PRODUCT_NAME = SwipeCellKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Beta; }; - 1785196B66BB128E2DCA7FF9C94D1B7A /* Release */ = { + 0BEC29C9CB9ADE5FB2D6EDC1EEBD35DF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F3676979D1F99F0914606E87754995F6 /* Pods-Rocket.ChatTests.release.xcconfig */; + baseConfigurationReference = 889836AB075D206595A1AD51D66BAD5E /* FLAnimatedImage.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6679,34 +7249,31 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage.modulemap"; + PRODUCT_MODULE_NAME = FLAnimatedImage; + PRODUCT_NAME = FLAnimatedImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 17E4129FEE38998FA62DA424EB95B950 /* Debug */ = { + 0C9324BA34D82153CE64FB977BBF580B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2FAA94EE72422044E580BBF94D22525F /* Pods-Rocket.Chat.debug.xcconfig */; + baseConfigurationReference = 78F431B816E8AC30DF33810B47BB39E0 /* Pods-Rocket.Chat.ShareExtension.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6718,12 +7285,12 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -6731,20 +7298,19 @@ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 18F1EAA63673EBEBF279C2B9B9964A07 /* Release */ = { + 1084CCBC3D9FAF03B09FE80C9B28D4F3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B2C6DFEA576926CBC7F88EAC76CB12B /* RealmSwift.xcconfig */; + baseConfigurationReference = A0C520D64507F4BB0E87FCB3BF06C670 /* Starscream.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6755,14 +7321,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Starscream/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/RealmSwift/RealmSwift.modulemap"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; + MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6775,29 +7341,45 @@ }; name = Release; }; - 196AF296AFD9C468802BCAFD33D8CFAA /* Release */ = { + 163DC081E0364A3C298820EF132C1B12 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B845D4D251CCDDF953CA7EFB274FA084 /* Fabric.xcconfig */; + baseConfigurationReference = 1C5951331CE0F79ABC4BE35C8BDFAB3A /* SwiftyJSON.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Test; }; - 1C6597F11E96F6C2ED1C85DC9C7B8763 /* Beta */ = { + 1782C8453F5D9E6B9D9CEF24873CF9AC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C9DE3F04FD9FB5957B4455214449789 /* semver.xcconfig */; + baseConfigurationReference = 8DF6FB175BB8D880ABBEB1471CCDD82E /* FirebaseCoreDiagnostics.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6808,31 +7390,63 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/semver/semver-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/semver/semver.modulemap"; - PRODUCT_MODULE_NAME = semver; - PRODUCT_NAME = semver; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; + PRODUCT_NAME = FirebaseCoreDiagnostics; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Debug; }; - 1FE58A8FFF973E7D4EF5E67D08D94E75 /* Release */ = { + 17ADD576EA63D55E1EE5DFE009C402E7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C9DE3F04FD9FB5957B4455214449789 /* semver.xcconfig */; + baseConfigurationReference = C93F9C8B6AD51F8CD74761E2D620B4C2 /* Nuke.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; + PRODUCT_MODULE_NAME = Nuke; + PRODUCT_NAME = Nuke; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 1B46A3D96494E0D7A73BE82CB8836BBC /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8DF6FB175BB8D880ABBEB1471CCDD82E /* FirebaseCoreDiagnostics.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6843,14 +7457,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/semver/semver-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/semver/semver.modulemap"; - PRODUCT_MODULE_NAME = semver; - PRODUCT_NAME = semver; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; + PRODUCT_NAME = FirebaseCoreDiagnostics; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6861,13 +7474,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Test; }; - 20B739E6F465870E2519838232EF1047 /* Release */ = { + 1CEE2614E4C17DC7DD690FBF37581FB4 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D13B187AEAFC73D6F41875CCD92B2CB /* ReachabilitySwift.xcconfig */; + baseConfigurationReference = A18A9B6CDC28EB90FAFAF10F31AA02D3 /* FirebaseInstanceID.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6878,14 +7490,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-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/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseInstanceID/FirebaseInstanceID.modulemap"; + PRODUCT_MODULE_NAME = FirebaseInstanceID; + PRODUCT_NAME = FirebaseInstanceID; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6896,14 +7507,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Beta; }; - 22E186B652CDFE90E990A968325D6E61 /* Debug */ = { + 1DA47CC705CF3D8EB1CAA072D7A0DDA8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16EF9F2B9693CAE4436AFC40BD388362 /* Realm.xcconfig */; + baseConfigurationReference = 6295E8C80C600AF653A12F8814869FC7 /* Realm.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6915,7 +7525,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Realm-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Realm/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -6933,70 +7543,10 @@ }; name = Debug; }; - 257497152829C177993B5EC99C1D227A /* Release */ = { + 1DA68668340564D35396F7BE9553977C /* Beta */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8508C05B93A6E1C4E2B4DE212ED5F14F /* SimpleImageViewer.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_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 = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 262FB92A270E9AA0AC0E2031CD4EAF43 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 906A2E3A85529204C6DD8CD0880CD33E /* FLEX.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7007,14 +7557,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLEX/FLEX-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; - PRODUCT_MODULE_NAME = FLEX; - PRODUCT_NAME = FLEX; + MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; + PRODUCT_MODULE_NAME = SimpleImageViewer; + PRODUCT_NAME = SimpleImageViewer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7025,48 +7575,46 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Beta; }; - 27916FE25E1612F5D49B08D6102EAEBD /* Test */ = { + 20A84C57F5A8B19F1805E6BBE3EB3E4E /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B61B8781AA8BD87BEA9DD6EC6393FCB0 /* SwiftLint.xcconfig */; + baseConfigurationReference = 40535F80A39B0649ACD3833406DC42E8 /* GoogleUtilities.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + 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"; ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/GoogleUtilities/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; + PRODUCT_MODULE_NAME = GoogleUtilities; + PRODUCT_NAME = GoogleUtilities; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Test; }; - 29FCE872EA804D71AE5B9AEA315310DB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9AC71010277BB1E505EB29DBB340CB83 /* Firebase.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 3157C6C3150BF05D3860C3BECFC1549C /* Beta */ = { + 20B01EB1DC65B0EEB519FF9401A0E989 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C436036B465D0F314D33846E089B929 /* Starscream.xcconfig */; + baseConfigurationReference = A0C520D64507F4BB0E87FCB3BF06C670 /* Starscream.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7078,7 +7626,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Starscream/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -7095,15 +7643,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Test; }; - 32C164E7C8C0852B5BB473DFABA5E422 /* Beta */ = { + 219DE3DC97AD4C4EB8726BCD819F345C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FD06C77FAFBB24EEE34842708B6F03A2 /* Nuke.xcconfig */; + baseConfigurationReference = ABF15E713D08B0831547104F3E0F572E /* GoogleDataTransportCCTSupport.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7114,14 +7659,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke/Nuke-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; - PRODUCT_MODULE_NAME = Nuke; - PRODUCT_NAME = Nuke; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; + PRODUCT_NAME = GoogleDataTransportCCTSupport; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7132,13 +7676,31 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; + }; + 23365D7ADCDD304B2AF6697128039E4C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = MobilePlayer; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; }; - 32FAEE4C6FFD4193EB324882ED5A06AC /* Release */ = { + 234C47E12905636D949BFA6BA2BA5DDE /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C436036B465D0F314D33846E089B929 /* Starscream.xcconfig */; + baseConfigurationReference = A18A9B6CDC28EB90FAFAF10F31AA02D3 /* FirebaseInstanceID.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7149,14 +7711,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-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/Starscream/Starscream.modulemap"; - PRODUCT_MODULE_NAME = Starscream; - PRODUCT_NAME = Starscream; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseInstanceID/FirebaseInstanceID.modulemap"; + PRODUCT_MODULE_NAME = FirebaseInstanceID; + PRODUCT_NAME = FirebaseInstanceID; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7167,13 +7728,14 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Test; }; - 38904FEC8344955ABDF608867398F4E6 /* Debug */ = { + 26087C81D267864BBD36EB7799EDA4C9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116828EF4369238ED13BEDAFBEB11F01 /* FirebaseCore.xcconfig */; + baseConfigurationReference = 439A39FB13D63F87983F021124302E30 /* Pods-Rocket.Chat.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7184,17 +7746,20 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.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; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -7203,30 +7768,10 @@ }; name = Debug; }; - 38DDA64DD75F3009DBC0886D40972B95 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-MobilePlayer-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = MobilePlayer; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 3EF0A3E792FAC5354025956B138B6E1E /* Test */ = { + 2895C464228BEB2D0FCDAC92019D726E /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C4900C3016A636B06E492E3DB3951B4 /* SwipeCellKit.xcconfig */; + baseConfigurationReference = B257AA674397EBBCDD5BB05C7DC23152 /* GoogleDataTransport.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7237,14 +7782,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; - PRODUCT_MODULE_NAME = SwipeCellKit; - PRODUCT_NAME = SwipeCellKit; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransport; + PRODUCT_NAME = GoogleDataTransport; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7255,15 +7799,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - 3F9659E36EC7739AC43F165DBF056A57 /* Release */ = { + 29BAEF2D94A937EF1C96FA66F87A4C88 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2640037A77FA57A45B0B72BEBBE015F3 /* Pods-Rocket.Chat.ShareExtension.release.xcconfig */; + baseConfigurationReference = DD0099DC85F9F046F71DFA77FE3122F3 /* Pods-Rocket.ChatTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7275,12 +7817,12 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -7288,21 +7830,20 @@ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 42C23307529A0B81C2439445AE323FD0 /* Test */ = { + 2C6F8CE694D0AE2BDC074D42B7AAB9FB /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 37F4B658CD5B174F767B125F4A704940 /* FLAnimatedImage.xcconfig */; + baseConfigurationReference = 5BD2B8BD11FF89E41585E1D8C00D48CB /* RealmSwift.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7313,14 +7854,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RealmSwift/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/FLAnimatedImage/FLAnimatedImage.modulemap"; - PRODUCT_MODULE_NAME = FLAnimatedImage; - PRODUCT_NAME = FLAnimatedImage; + MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7331,15 +7872,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - 45714B54E21465E390241C4105D9D2C8 /* Test */ = { + 2EB8DC7BE8904AE9286ED45AB52136F2 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FD06C77FAFBB24EEE34842708B6F03A2 /* Nuke.xcconfig */; + baseConfigurationReference = 889836AB075D206595A1AD51D66BAD5E /* FLAnimatedImage.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7350,14 +7889,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke/Nuke-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; - PRODUCT_MODULE_NAME = Nuke; - PRODUCT_NAME = Nuke; + MODULEMAP_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage.modulemap"; + PRODUCT_MODULE_NAME = FLAnimatedImage; + PRODUCT_NAME = FLAnimatedImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7368,13 +7907,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - 4BA7779F0BE4795DD7562C49E9892756 /* Debug */ = { + 36E0C0CE6D07312AFCD85334FD75DBA4 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C9DE3F04FD9FB5957B4455214449789 /* semver.xcconfig */; + baseConfigurationReference = 4475ECFA5B6F32225A32177F548BAC69 /* ReachabilitySwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7385,30 +7923,31 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/semver/semver-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/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/semver/semver.modulemap"; - PRODUCT_MODULE_NAME = semver; - PRODUCT_NAME = semver; + MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Beta; }; - 4BB96445B3773F3681B1FC193C7C5A79 /* Beta */ = { + 3DB75351343621E579B6DF96243923E9 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C4900C3016A636B06E492E3DB3951B4 /* SwipeCellKit.xcconfig */; + baseConfigurationReference = E1C04B3058760D3353DA3FD558382BDF /* RocketChatViewController.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7419,50 +7958,31 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RocketChatViewController/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; - PRODUCT_MODULE_NAME = SwipeCellKit; - PRODUCT_NAME = SwipeCellKit; + MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; + PRODUCT_MODULE_NAME = RocketChatViewController; + PRODUCT_NAME = RocketChatViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; - }; - 4DE5CA2C179902254A998A2627D67873 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 251CF09B5F640711C8BF60E504E7610D /* GoogleAppMeasurement.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; + name = Test; }; - 4FE9046193D0BC07A0994F7581918976 /* Debug */ = { + 3E91A35EA85EEDA72EAA45FBE400C859 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B83D9F83C0DE51AD32D04844B2A1A908 /* SwiftyJSON.xcconfig */; + baseConfigurationReference = 7F08F04244028A076C0A024B7958BC78 /* MBProgressHUD.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7473,30 +7993,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/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/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 50C3C6915F8E37B2D742E026E5269A3F /* Test */ = { + 3FF1F2E38E14E3EEF65DF652C25E9A6A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D13B187AEAFC73D6F41875CCD92B2CB /* ReachabilitySwift.xcconfig */; + baseConfigurationReference = 183C952CB41915982BAB89E9F35F8867 /* SwipeCellKit.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7507,49 +8027,49 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwipeCellKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; + MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; + PRODUCT_MODULE_NAME = SwipeCellKit; + PRODUCT_NAME = SwipeCellKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Release; }; - 531B8A02BE11E410A1C846316E99AFCF /* Test */ = { + 4094F94149B0645CE189048BE77348E5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1DEDB36512AFEDCF4F7681D3948EE214 /* Crashlytics.xcconfig */; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = OnePasswordExtensionResources; SDKROOT = iphoneos; + SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; }; - name = Test; + name = Release; }; - 53E178EFFB88F52661AF1F6DBF1413AF /* Debug */ = { + 40D9E9B04B527868251933C1A717F6D1 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; + baseConfigurationReference = EA52325FA497EEE07D1703278CC007AE /* RCMarkdownParser.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7560,31 +8080,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/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/1PasswordExtension/1PasswordExtension.modulemap"; - PRODUCT_MODULE_NAME = OnePasswordExtension; - PRODUCT_NAME = OnePasswordExtension; + MODULEMAP_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser.modulemap"; + PRODUCT_MODULE_NAME = RCMarkdownParser; + PRODUCT_NAME = RCMarkdownParser; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Test; }; - 546AD3EC4DCCD21D430F117EB0554E9E /* Release */ = { + 4406DD77BC52AE2DA390A4CBA85D7621 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86938266EC29B43C2DF06591C98204CF /* MBProgressHUD.xcconfig */; + baseConfigurationReference = 1AA60168E6EF97B87C18DB58627D079D /* nanopb.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7595,14 +8114,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/nanopb/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/MBProgressHUD/MBProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = MBProgressHUD; - PRODUCT_NAME = MBProgressHUD; + MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; + PRODUCT_MODULE_NAME = nanopb; + PRODUCT_NAME = nanopb; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7615,12 +8134,11 @@ }; name = Release; }; - 5781262E98886DC00D69E0EDD83D7C86 /* Debug */ = { + 473A0A4DCBD08EA94C09EFA563763B7D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86938266EC29B43C2DF06591C98204CF /* MBProgressHUD.xcconfig */; + baseConfigurationReference = E1C04B3058760D3353DA3FD558382BDF /* RocketChatViewController.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7631,68 +8149,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RocketChatViewController/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = MBProgressHUD; - PRODUCT_NAME = MBProgressHUD; + MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; + PRODUCT_MODULE_NAME = RocketChatViewController; + PRODUCT_NAME = RocketChatViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - 57CB30D1323C681EDD124936B7C72EF4 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-MobilePlayer-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = MobilePlayer; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; name = Release; }; - 595AD69E74DF297F1736DC05D7C75916 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = OnePasswordExtensionResources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 5AAD849BF1FD89271FAB9133C0832363 /* Release */ = { + 47B0EDC54363ECEBEF6E6D5D80637040 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; + baseConfigurationReference = 4475ECFA5B6F32225A32177F548BAC69 /* ReachabilitySwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7703,14 +8183,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/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/1PasswordExtension/1PasswordExtension.modulemap"; - PRODUCT_MODULE_NAME = OnePasswordExtension; - PRODUCT_NAME = OnePasswordExtension; + MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7723,12 +8203,10 @@ }; name = Release; }; - 5C02620D21B8F8B94365F4416EDD0709 /* Test */ = { + 483977CDB4AB45F4B876C44787ECF623 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4B9C8F146839268E10269F4C07475A07 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; + baseConfigurationReference = 37EA5C62A914BE9A0F0F998EEFE3E955 /* FLEX.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7739,14 +8217,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLEX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; - PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; - PRODUCT_NAME = NukeFLAnimatedImagePlugin; + MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; + PRODUCT_MODULE_NAME = FLEX; + PRODUCT_NAME = FLEX; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7757,32 +8235,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; - }; - 5C3B4F1EB3B5ED3C83891CEA791B14F9 /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D96912A8D45377B0A76C2D2640926BFA /* FirebaseAnalytics.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Beta; + name = Release; }; - 5C6BD9C3A5AA309FF051361C2265B24A /* Beta */ = { + 4CD71B09E6D1DDA36E0B40624CBC453F /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9319971B69A41A780F031EBF2D11295F /* RocketChatViewController.xcconfig */; + baseConfigurationReference = 874C8E9055E6642AF2AB03EB7E5AEA01 /* semver.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7793,14 +8251,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/semver/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; - PRODUCT_MODULE_NAME = RocketChatViewController; - PRODUCT_NAME = RocketChatViewController; + MODULEMAP_FILE = "Target Support Files/semver/semver.modulemap"; + PRODUCT_MODULE_NAME = semver; + PRODUCT_NAME = semver; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7813,12 +8271,10 @@ }; name = Beta; }; - 5E36AEA9F0951D8B78A8A55ADAC09AA6 /* Test */ = { + 4DEBCF88AD9900D160D7756C1998EFAA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B83D9F83C0DE51AD32D04844B2A1A908 /* SwiftyJSON.xcconfig */; + baseConfigurationReference = B257AA674397EBBCDD5BB05C7DC23152 /* GoogleDataTransport.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7829,52 +8285,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-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/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransport; + PRODUCT_NAME = GoogleDataTransport; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; - }; - 68ECD641DCD22AA93571AC717E39C296 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = OnePasswordExtensionResources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Test; + name = Debug; }; - 6B628058BB3DC130C6528C26DAD6DD17 /* Test */ = { + 4DF44B310B4C53BBCC5D0A491046A5AF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E232F6CD56E49EDD175075EA815CB39 /* SimpleImageViewer.xcconfig */; + baseConfigurationReference = 1C5951331CE0F79ABC4BE35C8BDFAB3A /* SwiftyJSON.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7885,14 +8318,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; - PRODUCT_MODULE_NAME = SimpleImageViewer; - PRODUCT_NAME = SimpleImageViewer; + MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7903,13 +8336,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Release; }; - 6D9B32012B10AC9AA89D47523319F11D /* Test */ = { + 4E294221F3A02D430794322775E7D7E4 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 78CDF23EF74A55E1B5A79E3C79431859 /* RCMarkdownParser.xcconfig */; + baseConfigurationReference = 183C952CB41915982BAB89E9F35F8867 /* SwipeCellKit.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7920,14 +8352,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwipeCellKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser.modulemap"; - PRODUCT_MODULE_NAME = RCMarkdownParser; - PRODUCT_NAME = RCMarkdownParser; + MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; + PRODUCT_MODULE_NAME = SwipeCellKit; + PRODUCT_NAME = SwipeCellKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7940,11 +8372,12 @@ }; name = Test; }; - 70FBF7282A3BBEED1854429398857D04 /* Beta */ = { + 53CD7BD74D2E634687329BB36A86AEBB /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60C4A8411D5839E265D15AB52CC0A8AD /* GoogleUtilities.xcconfig */; + baseConfigurationReference = EA02640B6A8A6222F4EBC2A74340C48A /* Pods-Rocket.ChatTests.beta.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7955,17 +8388,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.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; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -7975,12 +8410,11 @@ }; name = Beta; }; - 74D5BF3334F553FA92200836BA5F59C5 /* Debug */ = { + 53FF5A96D68C56E87A62AB7F55CE9D70 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B2C6DFEA576926CBC7F88EAC76CB12B /* RealmSwift.xcconfig */; + baseConfigurationReference = 6295E8C80C600AF653A12F8814869FC7 /* Realm.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7991,47 +8425,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Realm/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/RealmSwift/RealmSwift.modulemap"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; + MODULEMAP_FILE = "Target Support Files/Realm/Realm.modulemap"; + PRODUCT_MODULE_NAME = Realm; + PRODUCT_NAME = Realm; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - 760D684168A3DD0F087E2C1F94D2C9FB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 251CF09B5F640711C8BF60E504E7610D /* GoogleAppMeasurement.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; + name = Test; }; - 77827FB8B595ACB3A61D9DBAD30693FE /* Release */ = { + 570C71E1A955EAF8FEFF8592C0C1E813 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C4900C3016A636B06E492E3DB3951B4 /* SwipeCellKit.xcconfig */; + baseConfigurationReference = 8508C05B93A6E1C4E2B4DE212ED5F14F /* SimpleImageViewer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8042,14 +8459,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; - PRODUCT_MODULE_NAME = SwipeCellKit; - PRODUCT_NAME = SwipeCellKit; + MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; + PRODUCT_MODULE_NAME = SimpleImageViewer; + PRODUCT_NAME = SimpleImageViewer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8062,30 +8479,12 @@ }; name = Release; }; - 7A1BCBC1C6217CB4CCAA2BF1EB44CC5B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1DEDB36512AFEDCF4F7681D3948EE214 /* Crashlytics.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7AA27A095C198C804609DE87AB5BFE7D /* Debug */ = { + 5997BEEC6F303D424C0C16D2D293323B /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FD06C77FAFBB24EEE34842708B6F03A2 /* Nuke.xcconfig */; + baseConfigurationReference = CA794C93B8A658C4B011EF27A531DFA1 /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -8097,31 +8496,34 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke/Nuke-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; - PRODUCT_MODULE_NAME = Nuke; - PRODUCT_NAME = Nuke; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.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; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Beta; }; - 7BB632E4809B6643E1A737CEBF8F3AB2 /* Beta */ = { + 5AE2358BAB6E33CD3C945CE9BA302A6E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B2C6DFEA576926CBC7F88EAC76CB12B /* RealmSwift.xcconfig */; + baseConfigurationReference = 48B5842107C21920D5CC5CC5EBBF95F4 /* Pods-Rocket.Chat.release.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8132,17 +8534,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.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; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -8150,32 +8554,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; - }; - 7C128C7E6632E3E800D608268C915A48 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = OnePasswordExtensionResources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; name = Release; }; - 7D4EB8F1BBC7FD21FB4CB4000DBCD329 /* Beta */ = { + 5BE549C9A9722C22CB27181C070B37B2 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D13B187AEAFC73D6F41875CCD92B2CB /* ReachabilitySwift.xcconfig */; + baseConfigurationReference = CD3C44330949B61F23B9F0E6DFFEA33A /* FirebaseCore.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8186,14 +8570,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-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/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCore; + PRODUCT_NAME = FirebaseCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8206,11 +8589,10 @@ }; name = Beta; }; - 7E694E7156D4AE0B62CE64C634B320F1 /* Test */ = { + 5CF6FE3C8580592AF863CF940ABE112E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8221,49 +8603,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/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/1PasswordExtension/1PasswordExtension.modulemap"; - PRODUCT_MODULE_NAME = OnePasswordExtension; - PRODUCT_NAME = OnePasswordExtension; + MODULEMAP_FILE = "Target Support Files/MobilePlayer/MobilePlayer.modulemap"; + PRODUCT_MODULE_NAME = MobilePlayer; + PRODUCT_NAME = MobilePlayer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; - }; - 7FDC55B36705E990222B111B5A3F68DE /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9AC71010277BB1E505EB29DBB340CB83 /* Firebase.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Test; + name = Release; }; - 81724F37E96720AF9FADF3536F30DFE0 /* Debug */ = { + 5EE4EB20A731A280F3836E6DD7054B61 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 78CDF23EF74A55E1B5A79E3C79431859 /* RCMarkdownParser.xcconfig */; + baseConfigurationReference = 4ECF7BEBE953DFC761AC18F7D5BF15E9 /* OAuthSwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8274,47 +8637,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OAuthSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser.modulemap"; - PRODUCT_MODULE_NAME = RCMarkdownParser; - PRODUCT_NAME = RCMarkdownParser; + MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; + PRODUCT_MODULE_NAME = OAuthSwift; + PRODUCT_NAME = OAuthSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 823653019E7E50ACF372DE59872EBA59 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B845D4D251CCDDF953CA7EFB274FA084 /* Fabric.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 835193F617C9009471EC4EAD01FDE2A0 /* Beta */ = { + 5EF74B26E253A0C46A48D7B0C53B282E /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E232F6CD56E49EDD175075EA815CB39 /* SimpleImageViewer.xcconfig */; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8325,19 +8670,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; - PRODUCT_MODULE_NAME = SimpleImageViewer; - PRODUCT_NAME = SimpleImageViewer; + MODULEMAP_FILE = "Target Support Files/MobilePlayer/MobilePlayer.modulemap"; + PRODUCT_MODULE_NAME = MobilePlayer; + PRODUCT_NAME = MobilePlayer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -8345,13 +8690,10 @@ }; name = Beta; }; - 839DA7A342D5998E328A517808FF9B37 /* Release */ = { + 61DA1953EC27D9B11DABF68A3030A196 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F875C825AC6483AE79ABE33B7F4FAA5 /* Pods-Rocket.Chat.release.xcconfig */; + baseConfigurationReference = 183C952CB41915982BAB89E9F35F8867 /* SwipeCellKit.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8362,53 +8704,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwipeCellKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; + PRODUCT_MODULE_NAME = SwipeCellKit; + PRODUCT_NAME = SwipeCellKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - 8B50C7C8A823D5E703C3640CD22C5335 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B61B8781AA8BD87BEA9DD6EC6393FCB0 /* SwiftLint.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; + name = Debug; }; - 8C3E026097BE095EA135611C476F722A /* Beta */ = { + 6251EA34859C0B72235C3E596E8BA8FE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B07902F6F56A5A082518305833E2EEE /* Pods-Rocket.Chat.beta.xcconfig */; + baseConfigurationReference = 8DF6FB175BB8D880ABBEB1471CCDD82E /* FirebaseCoreDiagnostics.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8419,19 +8737,16 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; + PRODUCT_NAME = FirebaseCoreDiagnostics; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -8439,14 +8754,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; }; - 8DD3B3CD092126520677CF35DEE6889C /* Release */ = { + 6604D708FCF7E19786C1B576DBCAD857 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B83D9F83C0DE51AD32D04844B2A1A908 /* SwiftyJSON.xcconfig */; + baseConfigurationReference = 3EA55D22D5912A2C86AB7627E711A2B9 /* DifferenceKit-Core.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8457,14 +8771,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit-Core/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; + MODULEMAP_FILE = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core.modulemap"; + PRODUCT_MODULE_NAME = DifferenceKit; + PRODUCT_NAME = DifferenceKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8475,14 +8789,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Beta; }; - 8DF2E9946CE11857B53ABC33A29C34F6 /* Test */ = { + 66A8363025D5E5FF34C1CD7610DCF515 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9319971B69A41A780F031EBF2D11295F /* RocketChatViewController.xcconfig */; + baseConfigurationReference = 8508C05B93A6E1C4E2B4DE212ED5F14F /* SimpleImageViewer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8493,32 +8805,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; - PRODUCT_MODULE_NAME = RocketChatViewController; - PRODUCT_NAME = RocketChatViewController; + MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; + PRODUCT_MODULE_NAME = SimpleImageViewer; + PRODUCT_NAME = SimpleImageViewer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Debug; }; - 8DF5198C3FCB1BBA72121E768D5A1DCD /* Beta */ = { + 67A0B40E0920D6EEB0FF331385C29AFD /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16EF9F2B9693CAE4436AFC40BD388362 /* Realm.xcconfig */; + baseConfigurationReference = 1AA60168E6EF97B87C18DB58627D079D /* nanopb.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8529,14 +8838,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Realm-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/nanopb/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/Realm/Realm.modulemap"; - PRODUCT_MODULE_NAME = Realm; - PRODUCT_NAME = Realm; + MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; + PRODUCT_MODULE_NAME = nanopb; + PRODUCT_NAME = nanopb; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8547,66 +8856,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; - }; - 8FE0E7D25BDD361222FA4B81D9889DA7 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E34074D5400DFC7C86ECC22684958AA7 /* FirebaseInstanceID.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 8FF7B9FAC480B24A028889531E567FDE /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 906A2E3A85529204C6DD8CD0880CD33E /* FLEX.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - 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"; - ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLEX/FLEX-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/FLEX/FLEX.modulemap"; - PRODUCT_MODULE_NAME = FLEX; - PRODUCT_NAME = FLEX; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; + name = Test; }; - 90E18834417F0729173648804F918681 /* Beta */ = { + 69D1F955515D41E79E650D3716FEB977 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B83D9F83C0DE51AD32D04844B2A1A908 /* SwiftyJSON.xcconfig */; + baseConfigurationReference = 5BD2B8BD11FF89E41585E1D8C00D48CB /* RealmSwift.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8617,14 +8873,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RealmSwift/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/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; + MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8635,13 +8891,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Test; }; - 91EDEA963E67D0BA2122D3CEA20ED4CE /* Debug */ = { + 6A33D13ED4C7C73E1B657A343175C960 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D71B18A1A09C86F3590800BD6D6CE5AD /* nanopb.xcconfig */; + baseConfigurationReference = A18A9B6CDC28EB90FAFAF10F31AA02D3 /* FirebaseInstanceID.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8652,14 +8907,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-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/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseInstanceID/FirebaseInstanceID.modulemap"; + PRODUCT_MODULE_NAME = FirebaseInstanceID; + PRODUCT_NAME = FirebaseInstanceID; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8671,50 +8925,69 @@ }; name = Debug; }; - 92BDB8C42C93AC28609BF5D8B979B20A /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-MobilePlayer-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = MobilePlayer; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Test; - }; - 93F37AB931CA074AC6ED1168593BD645 /* Test */ = { + 6A9CD731236B2FF8EBAA93C04174542D /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B845D4D251CCDDF953CA7EFB274FA084 /* Fabric.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Test; + 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; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + 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_BETA=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 = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Beta; }; - 986999995A794ACEA0ADC21E08A258DE /* Test */ = { + 6C4AAC759795F35CECE0A024F68F3038 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116828EF4369238ED13BEDAFBEB11F01 /* FirebaseCore.xcconfig */; + baseConfigurationReference = 889836AB075D206595A1AD51D66BAD5E /* FLAnimatedImage.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8725,14 +8998,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; + MODULEMAP_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage.modulemap"; + PRODUCT_MODULE_NAME = FLAnimatedImage; + PRODUCT_NAME = FLAnimatedImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8743,13 +9016,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Release; }; - 98DEDFE05FB8BCFC2BED736C5AFED39B /* Beta */ = { + 6D2FC6D1F3626BB9AE1D31193FFDD0EB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D71B18A1A09C86F3590800BD6D6CE5AD /* nanopb.xcconfig */; + baseConfigurationReference = 4ECF7BEBE953DFC761AC18F7D5BF15E9 /* OAuthSwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8760,14 +9032,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OAuthSwift/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; + MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; + PRODUCT_MODULE_NAME = OAuthSwift; + PRODUCT_NAME = OAuthSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8778,13 +9050,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; }; - 991A5E80A17B21258BEBD4FA2CDA0756 /* Test */ = { + 71429ECB4D02B3E6187E29224AD189BC /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D71B18A1A09C86F3590800BD6D6CE5AD /* nanopb.xcconfig */; + baseConfigurationReference = E1C04B3058760D3353DA3FD558382BDF /* RocketChatViewController.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8795,32 +9067,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RocketChatViewController/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; + MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; + PRODUCT_MODULE_NAME = RocketChatViewController; + PRODUCT_NAME = RocketChatViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - 9BBA5744FD9E2C98651F7B3C9402144C /* Beta */ = { + 71DA0230D40D82E95545D67E1B2B46E0 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D3A8A2BC5D9F151C1090BB7E36D38F /* DifferenceKit.xcconfig */; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8831,14 +9101,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DifferenceKit/DifferenceKit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; - PRODUCT_MODULE_NAME = DifferenceKit; - PRODUCT_NAME = DifferenceKit; + MODULEMAP_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension.modulemap"; + PRODUCT_MODULE_NAME = OnePasswordExtension; + PRODUCT_NAME = OnePasswordExtension; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8849,16 +9119,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Test; }; - 9BCA41B4BC2EB2386765A9DC3E96A3AA /* Debug */ = { + 794BACDCB3CB3323CB2AC27E08DDCF13 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 19032D8AB94A4E708F3B6FE930AAE684 /* Pods-Rocket.Chat.ShareExtension.debug.xcconfig */; + baseConfigurationReference = ABF15E713D08B0831547104F3E0F572E /* GoogleDataTransportCCTSupport.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8869,32 +9135,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; + PRODUCT_NAME = GoogleDataTransportCCTSupport; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Test; }; - A02B59880571CDDBD51E5EA6FF479D11 /* Test */ = { + 7BA5CDECFB1334E572CE4DEF50AC4286 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60C4A8411D5839E265D15AB52CC0A8AD /* GoogleUtilities.xcconfig */; + baseConfigurationReference = A18A9B6CDC28EB90FAFAF10F31AA02D3 /* FirebaseInstanceID.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8905,14 +9168,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-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/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseInstanceID/FirebaseInstanceID.modulemap"; + PRODUCT_MODULE_NAME = FirebaseInstanceID; + PRODUCT_NAME = FirebaseInstanceID; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8923,13 +9185,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Release; }; - A701D9466D774CF449BBC37D7CDB2FA3 /* Beta */ = { + 7BEA1ED2F32546B8D67FCE79CCFF2A33 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91CC5127C3460D3FFE572F5FEF65FDA8 /* OAuthSwift.xcconfig */; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -8940,90 +9201,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OAuthSwift/OAuthSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; - PRODUCT_MODULE_NAME = OAuthSwift; - PRODUCT_NAME = OAuthSwift; + MODULEMAP_FILE = "Target Support Files/MobilePlayer/MobilePlayer.modulemap"; + PRODUCT_MODULE_NAME = MobilePlayer; + PRODUCT_NAME = MobilePlayer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; - }; - AA21C8A1AB03342487124E9DBBC077E4 /* Test */ = { - 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_TEST=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 = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Test; + name = Debug; }; - AC82669BFA82C2F361FFE2AF9D618166 /* Beta */ = { + 7C84A1DDA8B7AFE658EE41B08B8BED9D /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; + baseConfigurationReference = 7F08F04244028A076C0A024B7958BC78 /* MBProgressHUD.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9034,32 +9235,31 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/MobilePlayer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/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/MobilePlayer/MobilePlayer.modulemap"; - PRODUCT_MODULE_NAME = MobilePlayer; - PRODUCT_NAME = MobilePlayer; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Test; }; - AC9ACBED6C934FAEF4800EAB20218C03 /* Release */ = { + 7CD4D0206A2F55AE472485304DFCFC34 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D3A8A2BC5D9F151C1090BB7E36D38F /* DifferenceKit.xcconfig */; + baseConfigurationReference = 3EA55D22D5912A2C86AB7627E711A2B9 /* DifferenceKit-Core.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9070,12 +9270,12 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DifferenceKit/DifferenceKit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit-Core/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; + MODULEMAP_FILE = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core.modulemap"; PRODUCT_MODULE_NAME = DifferenceKit; PRODUCT_NAME = DifferenceKit; SDKROOT = iphoneos; @@ -9088,34 +9288,14 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Test; }; - AD0BF03532DD8A13C7393871022229D2 /* Beta */ = { + 8170CB599956433DECCFDD0DD9C85BB6 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; + baseConfigurationReference = 98E2E9CE6A337D455D776E07205C8C02 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = OnePasswordExtensionResources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Beta; - }; - AD27A16A9188DB487048858742BC5698 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 91CC5127C3460D3FFE572F5FEF65FDA8 /* OAuthSwift.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9126,49 +9306,52 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OAuthSwift/OAuthSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; - PRODUCT_MODULE_NAME = OAuthSwift; - PRODUCT_NAME = OAuthSwift; + MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; + PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; + PRODUCT_NAME = NukeFLAnimatedImagePlugin; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Test; }; - AD99E9104109E79988528FBAFB45E633 /* Test */ = { + 856647E65835A11F46B5ACD85956E074 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 251CF09B5F640711C8BF60E504E7610D /* GoogleAppMeasurement.xcconfig */; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = OnePasswordExtensionResources; SDKROOT = iphoneos; + SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; }; name = Test; }; - B11528DEABA50F42E2ADEA450CC1126E /* Release */ = { + 87B9679A77B93F4462C0579E9E735B2C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 37F4B658CD5B174F767B125F4A704940 /* FLAnimatedImage.xcconfig */; + baseConfigurationReference = 5BD2B8BD11FF89E41585E1D8C00D48CB /* RealmSwift.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9179,14 +9362,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RealmSwift/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/FLAnimatedImage/FLAnimatedImage.modulemap"; - PRODUCT_MODULE_NAME = FLAnimatedImage; - PRODUCT_NAME = FLAnimatedImage; + MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9199,11 +9382,10 @@ }; name = Release; }; - B19D8BBFB280D6F9D0B5276CFDE1E90A /* Release */ = { + 8AB31074FEFA95F0CC34890044B45CEE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E232F6CD56E49EDD175075EA815CB39 /* SimpleImageViewer.xcconfig */; + baseConfigurationReference = EA52325FA497EEE07D1703278CC007AE /* RCMarkdownParser.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9214,19 +9396,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; - PRODUCT_MODULE_NAME = SimpleImageViewer; - PRODUCT_NAME = SimpleImageViewer; + MODULEMAP_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser.modulemap"; + PRODUCT_MODULE_NAME = RCMarkdownParser; + PRODUCT_NAME = RCMarkdownParser; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -9234,12 +9416,11 @@ }; name = Release; }; - B4F25E1ABD78033C3C29B423C3993EDA /* Debug */ = { + 8BA6E89375190ED40CD8513F410AF981 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D3A8A2BC5D9F151C1090BB7E36D38F /* DifferenceKit.xcconfig */; + baseConfigurationReference = 7F08F04244028A076C0A024B7958BC78 /* MBProgressHUD.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9250,31 +9431,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DifferenceKit/DifferenceKit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; - PRODUCT_MODULE_NAME = DifferenceKit; - PRODUCT_NAME = DifferenceKit; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Beta; }; - B61362DC66AF372190AFB74E843A316F /* Release */ = { + 8CBBECC1469441D0EE6605E43FE6E477 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16EF9F2B9693CAE4436AFC40BD388362 /* Realm.xcconfig */; + baseConfigurationReference = A0C520D64507F4BB0E87FCB3BF06C670 /* Starscream.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9285,50 +9465,51 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Realm-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Starscream/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/Realm/Realm.modulemap"; - PRODUCT_MODULE_NAME = Realm; - PRODUCT_NAME = Realm; + MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - B961CD47521EA3A028B61EFD47FC9A79 /* Beta */ = { + 90360B79D6E0D757AF51B944E9CC4ED4 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9AC71010277BB1E505EB29DBB340CB83 /* Firebase.xcconfig */; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = MobilePlayer; SDKROOT = iphoneos; + SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; }; - name = Beta; + name = Test; }; - BB67B8E51D856DC6AB83389AC7F777CE /* Release */ = { + 9105A444BD77F9E784DA07DA5E3CAB41 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4B9C8F146839268E10269F4C07475A07 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; + baseConfigurationReference = 889836AB075D206595A1AD51D66BAD5E /* FLAnimatedImage.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9339,14 +9520,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; - PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; - PRODUCT_NAME = NukeFLAnimatedImagePlugin; + MODULEMAP_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage.modulemap"; + PRODUCT_MODULE_NAME = FLAnimatedImage; + PRODUCT_NAME = FLAnimatedImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9357,13 +9538,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Test; }; - BCD0C15CA554EB2814B5501FE6B995EC /* Debug */ = { + 92DEA387201FBFBA65880BAD3A21CCCA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C436036B465D0F314D33846E089B929 /* Starscream.xcconfig */; + baseConfigurationReference = F4ECBB89143891E5F07DE7C8E87CF10C /* DifferenceKit.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9374,30 +9554,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; - PRODUCT_MODULE_NAME = Starscream; - PRODUCT_NAME = Starscream; + MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; + PRODUCT_MODULE_NAME = DifferenceKit; + PRODUCT_NAME = DifferenceKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - BCD21FF4692EC9A23F135125689A1B46 /* Release */ = { + 931260873D4AA9880C0379DC277C38CF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60C4A8411D5839E265D15AB52CC0A8AD /* GoogleUtilities.xcconfig */; + baseConfigurationReference = 4475ECFA5B6F32225A32177F548BAC69 /* ReachabilitySwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9408,49 +9588,31 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/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/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; + MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - BD4F02A8209F257430F9A5A280F0B9F2 /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B61B8781AA8BD87BEA9DD6EC6393FCB0 /* SwiftLint.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Beta; + name = Debug; }; - BE4983C559FCC97796CE553CE56E29D9 /* Debug */ = { + 93CCD1395FC039E3A7AC140F940858B6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E232F6CD56E49EDD175075EA815CB39 /* SimpleImageViewer.xcconfig */; + baseConfigurationReference = 98E2E9CE6A337D455D776E07205C8C02 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9461,14 +9623,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; - PRODUCT_MODULE_NAME = SimpleImageViewer; - PRODUCT_NAME = SimpleImageViewer; + MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; + PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; + PRODUCT_NAME = NukeFLAnimatedImagePlugin; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9480,11 +9642,10 @@ }; name = Debug; }; - C144B8B8FC2A12DF7BE25533570BBD26 /* Release */ = { + 95649A437F9BCDE0CB7BAAF6FA2FB734 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 78CDF23EF74A55E1B5A79E3C79431859 /* RCMarkdownParser.xcconfig */; + baseConfigurationReference = 1AA60168E6EF97B87C18DB58627D079D /* nanopb.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9495,31 +9656,51 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/nanopb/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/RCMarkdownParser/RCMarkdownParser.modulemap"; - PRODUCT_MODULE_NAME = RCMarkdownParser; - PRODUCT_NAME = RCMarkdownParser; + MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; + PRODUCT_MODULE_NAME = nanopb; + PRODUCT_NAME = nanopb; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Beta; + }; + 9585124D87B306AFA3981A1521E21670 /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = MobilePlayer; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Beta; }; - C2468E76BE2A4FF1F43B4DE4F7F7B2E1 /* Beta */ = { + 9A2B678FE5373D443B2D8CC5898C0780 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7C055FD015A47A34000C8BA76FEBB9E8 /* 1PasswordExtension.xcconfig */; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9530,31 +9711,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/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/1PasswordExtension/1PasswordExtension.modulemap"; - PRODUCT_MODULE_NAME = OnePasswordExtension; - PRODUCT_NAME = OnePasswordExtension; + MODULEMAP_FILE = "Target Support Files/MobilePlayer/MobilePlayer.modulemap"; + PRODUCT_MODULE_NAME = MobilePlayer; + PRODUCT_NAME = MobilePlayer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Test; }; - C53A53D61EA5A9E21574238A9E8C529A /* Beta */ = { + 9A4D071F0C7AE2CBAB45B087346B4854 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 906A2E3A85529204C6DD8CD0880CD33E /* FLEX.xcconfig */; + baseConfigurationReference = F4ECBB89143891E5F07DE7C8E87CF10C /* DifferenceKit.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9565,14 +9745,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLEX/FLEX-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; - PRODUCT_MODULE_NAME = FLEX; - PRODUCT_NAME = FLEX; + MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; + PRODUCT_MODULE_NAME = DifferenceKit; + PRODUCT_NAME = DifferenceKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9583,32 +9763,95 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Test; + }; + 9DAE5233986C01ADB6E67169C53A3FD2 /* 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; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; }; - C6FEA2FA3553CEB730311DB2C9A0EB3E /* Debug */ = { + 9E62538963C0FC36CF10986254D9C473 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B61B8781AA8BD87BEA9DD6EC6393FCB0 /* SwiftLint.xcconfig */; + baseConfigurationReference = CD0EA71A821B760AF23AE94056088E62 /* MobilePlayer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = MobilePlayer; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - C72CD9D6F9D08B92B98228EA2FE07ED0 /* Beta */ = { + 9EA77C2871A77F0706A303F0FA45BC4A /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 688D9AE1FBD17844A3DBDB25AECB2EDA /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */; + baseConfigurationReference = 93078337775DA9EF95DA5AA05275CB83 /* Pods-Rocket.Chat.test.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -9620,12 +9863,12 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -9640,13 +9883,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Test; }; - C7D75BBEE90FA24C76E6E9AC3C43BF39 /* Debug */ = { + A0B059D50825399955F361CDADE21E01 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D13B187AEAFC73D6F41875CCD92B2CB /* ReachabilitySwift.xcconfig */; + baseConfigurationReference = 8508C05B93A6E1C4E2B4DE212ED5F14F /* SimpleImageViewer.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9657,30 +9899,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SimpleImageViewer/SimpleImageViewer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SimpleImageViewer/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; + MODULEMAP_FILE = "Target Support Files/SimpleImageViewer/SimpleImageViewer.modulemap"; + PRODUCT_MODULE_NAME = SimpleImageViewer; + PRODUCT_NAME = SimpleImageViewer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Test; }; - CA7CFF07DF6F895061F51A6A813FF50A /* Beta */ = { + A25001C2EA5888162A4C76B241E27F3A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 116828EF4369238ED13BEDAFBEB11F01 /* FirebaseCore.xcconfig */; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9691,14 +9933,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; + MODULEMAP_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension.modulemap"; + PRODUCT_MODULE_NAME = OnePasswordExtension; + PRODUCT_NAME = OnePasswordExtension; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9709,13 +9951,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; }; - CC076D17C50E5590B8BA0B4919073AB7 /* Test */ = { + A685BCE7D8D7AA52EAC9DDD9D9EC522A /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C9DE3F04FD9FB5957B4455214449789 /* semver.xcconfig */; + baseConfigurationReference = A0C520D64507F4BB0E87FCB3BF06C670 /* Starscream.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9726,14 +9967,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/semver/semver-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Starscream/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/semver/semver.modulemap"; - PRODUCT_MODULE_NAME = semver; - PRODUCT_NAME = semver; + MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9744,13 +9985,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - CE172519D2B3B7B4C5CCDA91F1B14DCA /* Test */ = { + A6C9272C6AA779BEE2DFE2F11E144856 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; + baseConfigurationReference = 3EA55D22D5912A2C86AB7627E711A2B9 /* DifferenceKit-Core.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9761,34 +10002,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MobilePlayer/MobilePlayer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/MobilePlayer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit-Core/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MobilePlayer/MobilePlayer.modulemap"; - PRODUCT_MODULE_NAME = MobilePlayer; - PRODUCT_NAME = MobilePlayer; + MODULEMAP_FILE = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core.modulemap"; + PRODUCT_MODULE_NAME = DifferenceKit; + PRODUCT_NAME = DifferenceKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Debug; }; - CF5982322C455145A2A3FDF5AFDBBC00 /* Test */ = { + A86746B168562C0AA75397B16EA8E446 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25C6692E35A4E233298A12EEDFBDAD7C /* Pods-Rocket.Chat.ShareExtension.test.xcconfig */; + baseConfigurationReference = 37EA5C62A914BE9A0F0F998EEFE3E955 /* FLEX.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9799,19 +10035,17 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLEX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; + PRODUCT_MODULE_NAME = FLEX; + PRODUCT_NAME = FLEX; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -9819,34 +10053,45 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - D1DF9A94B79E040DC27EC6C02E74B710 /* Beta */ = { + A934EFA9BA49F5D1630B46FFD74408C6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4F17CDA971593A2BE649630B461A5ACE /* MobilePlayer.xcconfig */; + baseConfigurationReference = 40535F80A39B0649ACD3833406DC42E8 /* GoogleUtilities.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MobilePlayer"; + 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"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-MobilePlayer-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/GoogleUtilities/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = MobilePlayer; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; + PRODUCT_MODULE_NAME = GoogleUtilities; + PRODUCT_NAME = GoogleUtilities; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = bundle; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Debug; }; - D2BF11FF99CEF5FDF085C394C15BC43D /* Release */ = { + B0C25E181D5C736611E4B58D65330917 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D71B18A1A09C86F3590800BD6D6CE5AD /* nanopb.xcconfig */; + baseConfigurationReference = EA52325FA497EEE07D1703278CC007AE /* RCMarkdownParser.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9857,69 +10102,100 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/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/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; + MODULEMAP_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser.modulemap"; + PRODUCT_MODULE_NAME = RCMarkdownParser; + PRODUCT_NAME = RCMarkdownParser; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Beta; }; - D8F855C766B5F80DBBE84AC722C458C5 /* Beta */ = { + B3B8EF730170C508AC0A46AF86C8E86C /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E34074D5400DFC7C86ECC22684958AA7 /* FirebaseInstanceID.xcconfig */; + baseConfigurationReference = 4ECF7BEBE953DFC761AC18F7D5BF15E9 /* OAuthSwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + 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"; ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OAuthSwift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; + PRODUCT_MODULE_NAME = OAuthSwift; + PRODUCT_NAME = OAuthSwift; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Beta; }; - D9051AE8F46413108CB7A8C51E9FA2CE /* Beta */ = { + B57C61D7A9A61BFB0E29404FBB702F2B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 251CF09B5F640711C8BF60E504E7610D /* GoogleAppMeasurement.xcconfig */; + baseConfigurationReference = 98E2E9CE6A337D455D776E07205C8C02 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; + PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; + PRODUCT_NAME = NukeFLAnimatedImagePlugin; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; }; - D9708AC61CA8693299AF1E8075B142A5 /* Test */ = { + B6D7092507D3B9500CF3788DF70CEBB8 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D0E4AD423C2152EC1663E2DE0773B3C8 /* Pods-Rocket.Chat.test.xcconfig */; + baseConfigurationReference = F4ECBB89143891E5F07DE7C8E87CF10C /* DifferenceKit.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9930,19 +10206,17 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; + PRODUCT_MODULE_NAME = DifferenceKit; + PRODUCT_NAME = DifferenceKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -9950,14 +10224,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - DAC541A364BDFA8D3CC65F3397FEAD59 /* Debug */ = { + BE7A682CC41CDFFDB7D3E1B61110984D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 37F4B658CD5B174F767B125F4A704940 /* FLAnimatedImage.xcconfig */; + baseConfigurationReference = 1AA60168E6EF97B87C18DB58627D079D /* nanopb.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9968,14 +10240,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/nanopb/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/FLAnimatedImage/FLAnimatedImage.modulemap"; - PRODUCT_MODULE_NAME = FLAnimatedImage; - PRODUCT_NAME = FLAnimatedImage; + MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; + PRODUCT_MODULE_NAME = nanopb; + PRODUCT_NAME = nanopb; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9987,11 +10259,10 @@ }; name = Debug; }; - DADA1B87548B605F93019B62D09EC8DB /* Release */ = { + BEB0C5A01B5F488FB5F33BE7A75930A4 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91CC5127C3460D3FFE572F5FEF65FDA8 /* OAuthSwift.xcconfig */; + baseConfigurationReference = 874C8E9055E6642AF2AB03EB7E5AEA01 /* semver.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10002,14 +10273,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OAuthSwift/OAuthSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/semver/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; - PRODUCT_MODULE_NAME = OAuthSwift; - PRODUCT_NAME = OAuthSwift; + MODULEMAP_FILE = "Target Support Files/semver/semver.modulemap"; + PRODUCT_MODULE_NAME = semver; + PRODUCT_NAME = semver; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10020,13 +10291,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Test; }; - DBDB890C316B414C521468CC2FF5ED38 /* Test */ = { + C1E3AFA614BFFFFAEF5F251422453BAD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 906A2E3A85529204C6DD8CD0880CD33E /* FLEX.xcconfig */; + baseConfigurationReference = CD3C44330949B61F23B9F0E6DFFEA33A /* FirebaseCore.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10037,14 +10307,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLEX/FLEX-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/FLEX/FLEX.modulemap"; - PRODUCT_MODULE_NAME = FLEX; - PRODUCT_NAME = FLEX; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCore; + PRODUCT_NAME = FirebaseCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10055,13 +10324,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Release; }; - DD20329FC7DEC3CD30992727A16106AD /* Test */ = { + C1FF44FAADDBE5FCB3FC8185DA12D9A0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 91CC5127C3460D3FFE572F5FEF65FDA8 /* OAuthSwift.xcconfig */; + baseConfigurationReference = F4ECBB89143891E5F07DE7C8E87CF10C /* DifferenceKit.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10072,14 +10340,49 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OAuthSwift/OAuthSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; - PRODUCT_MODULE_NAME = OAuthSwift; - PRODUCT_NAME = OAuthSwift; + MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; + PRODUCT_MODULE_NAME = DifferenceKit; + PRODUCT_NAME = DifferenceKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + C216BE8F1D11AD7807D64AB26BAD1130 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C93F9C8B6AD51F8CD74761E2D620B4C2 /* Nuke.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; + PRODUCT_MODULE_NAME = Nuke; + PRODUCT_NAME = Nuke; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10090,14 +10393,14 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Release; }; - DD84923CABC842C14E5CBD985D4FD9C1 /* Test */ = { + C352947F054D11DB3B8ECCFAEEFA78AC /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41D3A8A2BC5D9F151C1090BB7E36D38F /* DifferenceKit.xcconfig */; + baseConfigurationReference = 98E2E9CE6A337D455D776E07205C8C02 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10108,14 +10411,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit/DifferenceKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DifferenceKit/DifferenceKit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DifferenceKit/DifferenceKit.modulemap"; - PRODUCT_MODULE_NAME = DifferenceKit; - PRODUCT_NAME = DifferenceKit; + MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; + PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; + PRODUCT_NAME = NukeFLAnimatedImagePlugin; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10126,96 +10429,100 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - DD8F832993327D1DD8046C3CBCBD97CD /* Debug */ = { + C49B4F26A2AE0A504C0FD085E3F3B8B2 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_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 = 11.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; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = OnePasswordExtensionResources; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; }; name = Debug; }; - DDB51FF0C54674C060AEABCCCF5A9841 /* Test */ = { + C5D118CD493C3A1FEAAB858F701A8C3F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D96912A8D45377B0A76C2D2640926BFA /* FirebaseAnalytics.xcconfig */; + baseConfigurationReference = CD3C44330949B61F23B9F0E6DFFEA33A /* FirebaseCore.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + 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"; ENABLE_BITCODE = NO; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCore; + PRODUCT_NAME = FirebaseCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + C98EA22AACA683911F9127A1AD53AB68 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C93F9C8B6AD51F8CD74761E2D620B4C2 /* Nuke.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; + PRODUCT_MODULE_NAME = Nuke; + PRODUCT_NAME = Nuke; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Test; }; - E58C85868E14C15A567D60C17BB51E35 /* Beta */ = { + CB6D6C9B01921EABC07C9AF8FF0B6946 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 025C83735A93ED07147EDE3A24C00D0F /* Pods-Rocket.ChatTests.beta.xcconfig */; + baseConfigurationReference = DED66438943725547A782DB5D47662F9 /* Pods-Rocket.ChatTests.test.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -10227,7 +10534,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -10247,72 +10554,342 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Test; + }; + CC0E50AFAF7E56006347C6ABB6C14FCE /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8DF6FB175BB8D880ABBEB1471CCDD82E /* FirebaseCoreDiagnostics.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"; + ENABLE_BITCODE = NO; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; + PRODUCT_NAME = FirebaseCoreDiagnostics; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; name = Beta; }; - E6C057A73F74CDEB3D5CF59F40FA8681 /* Beta */ = { + D151F7A9712E12FB5FBF4F4D5E514709 /* Beta */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C93F9C8B6AD51F8CD74761E2D620B4C2 /* Nuke.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_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_BETA=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 = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nuke/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; + PRODUCT_MODULE_NAME = Nuke; + PRODUCT_NAME = Nuke; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Beta; + }; + D15D55E945A191258DA450D11884861B /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD3C44330949B61F23B9F0E6DFFEA33A /* FirebaseCore.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"; + ENABLE_BITCODE = NO; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCore; + PRODUCT_NAME = FirebaseCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + D793B3F54B4FD6A2ED9A1EDBB76DD697 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 874C8E9055E6642AF2AB03EB7E5AEA01 /* semver.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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/semver/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/semver/semver.modulemap"; + PRODUCT_MODULE_NAME = semver; + PRODUCT_NAME = semver; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + DA64004FA3F26DB68FF1DC65C75C7D1E /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1C5951331CE0F79ABC4BE35C8BDFAB3A /* SwiftyJSON.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/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/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Beta; + }; + DE94CF2F18EDDADE614004EF5376255E /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40535F80A39B0649ACD3833406DC42E8 /* GoogleUtilities.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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/GoogleUtilities/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/GoogleUtilities/GoogleUtilities.modulemap"; + PRODUCT_MODULE_NAME = GoogleUtilities; + PRODUCT_NAME = GoogleUtilities; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Beta; + }; + E22DB6A4B239922650A9F0F1B32465FB /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4475ECFA5B6F32225A32177F548BAC69 /* ReachabilitySwift.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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/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/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + E26AFD87A43FE52EA5DDA0269ABE8C12 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B257AA674397EBBCDD5BB05C7DC23152 /* GoogleDataTransport.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"; + ENABLE_BITCODE = NO; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransport; + PRODUCT_NAME = GoogleDataTransport; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Test; + }; + E3B5EA67C333532A81668D3129905523 /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/1PasswordExtension"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = OnePasswordExtensionResources; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Beta; + }; + E573A50D8D1F1A0597FD3A6D2032D632 /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6295E8C80C600AF653A12F8814869FC7 /* Realm.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; + ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Realm/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/Realm/Realm.modulemap"; + PRODUCT_MODULE_NAME = Realm; + PRODUCT_NAME = Realm; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Beta; }; - E78907745596D205193A7A7A51BEE9CC /* Test */ = { + E8DE2445F1975D627F7B6EF84C7DB3EF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C436036B465D0F314D33846E089B929 /* Starscream.xcconfig */; + baseConfigurationReference = 7E748D746DD1F48DB60F9B1577B2A9C2 /* Pods-Rocket.ChatTests.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10323,17 +10900,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; - PRODUCT_MODULE_NAME = Starscream; - PRODUCT_NAME = Starscream; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.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; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; @@ -10341,14 +10920,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Release; }; - E87CCF9AECBC86D631D4EE7785524E85 /* Beta */ = { + E8DE6D02824681C0AA73C14D31D4B732 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86938266EC29B43C2DF06591C98204CF /* MBProgressHUD.xcconfig */; + baseConfigurationReference = 37EA5C62A914BE9A0F0F998EEFE3E955 /* FLEX.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10359,50 +10936,64 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLEX/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/MBProgressHUD/MBProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = MBProgressHUD; - PRODUCT_NAME = MBProgressHUD; + MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; + PRODUCT_MODULE_NAME = FLEX; + PRODUCT_NAME = FLEX; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Debug; }; - E90A464E4F8B5582D92A4344064EF02F /* Debug */ = { + E9A9808CE70A4F6EC0E5704D3A634236 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E34074D5400DFC7C86ECC22684958AA7 /* FirebaseInstanceID.xcconfig */; + baseConfigurationReference = 5BD2B8BD11FF89E41585E1D8C00D48CB /* RealmSwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; ENABLE_BITCODE = NO; + GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RealmSwift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; - EC31CCCA744F4447ABE789680372D064 /* Release */ = { + E9BF89FEF5A3765CDB08EE7310A8E481 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FD06C77FAFBB24EEE34842708B6F03A2 /* Nuke.xcconfig */; + baseConfigurationReference = 7F08F04244028A076C0A024B7958BC78 /* MBProgressHUD.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10413,31 +11004,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke/Nuke-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke/Nuke-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap"; - PRODUCT_MODULE_NAME = Nuke; - PRODUCT_NAME = Nuke; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - EC3AFA401BEF5435B8D1E0A071836FFA /* Debug */ = { + ED8940BBFB5B5DDA3FE6DBE593507630 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60C4A8411D5839E265D15AB52CC0A8AD /* GoogleUtilities.xcconfig */; + baseConfigurationReference = 874C8E9055E6642AF2AB03EB7E5AEA01 /* semver.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10448,14 +11037,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/semver/semver-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/semver/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/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; + MODULEMAP_FILE = "Target Support Files/semver/semver.modulemap"; + PRODUCT_MODULE_NAME = semver; + PRODUCT_NAME = semver; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10467,29 +11056,44 @@ }; name = Debug; }; - EC3EE7FF22FD5B8DB326591EC7A4A164 /* Release */ = { + EE11769E6DAC722B95C41CF7531F7D84 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9AC71010277BB1E505EB29DBB340CB83 /* Firebase.xcconfig */; + baseConfigurationReference = 4ECF7BEBE953DFC761AC18F7D5BF15E9 /* OAuthSwift.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + 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"; ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + GCC_PREFIX_HEADER = "Target Support Files/OAuthSwift/OAuthSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OAuthSwift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/OAuthSwift/OAuthSwift.modulemap"; + PRODUCT_MODULE_NAME = OAuthSwift; + PRODUCT_NAME = OAuthSwift; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Test; }; - EDB000980B418325A63413F0E868EA1D /* Debug */ = { + EE27F749B067ED4C98070842E33CDD06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C4900C3016A636B06E492E3DB3951B4 /* SwipeCellKit.xcconfig */; + baseConfigurationReference = ABF15E713D08B0831547104F3E0F572E /* GoogleDataTransportCCTSupport.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10500,14 +11104,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/SwipeCellKit/SwipeCellKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwipeCellKit/SwipeCellKit.modulemap"; - PRODUCT_MODULE_NAME = SwipeCellKit; - PRODUCT_NAME = SwipeCellKit; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; + PRODUCT_NAME = GoogleDataTransportCCTSupport; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10519,12 +11122,10 @@ }; name = Debug; }; - F159AEFC2B6EB7840FD828893CE9D7E4 /* Debug */ = { + F176FD73C608893603FAFD5D9118196D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4B9C8F146839268E10269F4C07475A07 /* Nuke-FLAnimatedImage-Plugin.xcconfig */; + baseConfigurationReference = EA52325FA497EEE07D1703278CC007AE /* RCMarkdownParser.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10535,30 +11136,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.modulemap"; - PRODUCT_MODULE_NAME = NukeFLAnimatedImagePlugin; - PRODUCT_NAME = NukeFLAnimatedImagePlugin; + MODULEMAP_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser.modulemap"; + PRODUCT_MODULE_NAME = RCMarkdownParser; + PRODUCT_NAME = RCMarkdownParser; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.1; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - F2AE9A535794A4D952514E27216BA478 /* Beta */ = { + F57CCCCBB98ED484FDCCBD18F3E5A4B0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 78CDF23EF74A55E1B5A79E3C79431859 /* RCMarkdownParser.xcconfig */; + baseConfigurationReference = 3EA55D22D5912A2C86AB7627E711A2B9 /* DifferenceKit-Core.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10569,32 +11170,31 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RCMarkdownParser/RCMarkdownParser-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DifferenceKit-Core/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RCMarkdownParser/RCMarkdownParser.modulemap"; - PRODUCT_MODULE_NAME = RCMarkdownParser; - PRODUCT_NAME = RCMarkdownParser; + MODULEMAP_FILE = "Target Support Files/DifferenceKit-Core/DifferenceKit-Core.modulemap"; + PRODUCT_MODULE_NAME = DifferenceKit; + PRODUCT_NAME = DifferenceKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; }; - F2FCFA066468BE9980083D6D59E2D89F /* Beta */ = { + F9C1651EB6A97D78F90C5D9D548CCC1E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 37F4B658CD5B174F767B125F4A704940 /* FLAnimatedImage.xcconfig */; + baseConfigurationReference = E1C04B3058760D3353DA3FD558382BDF /* RocketChatViewController.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10605,50 +11205,63 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RocketChatViewController/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage.modulemap"; - PRODUCT_MODULE_NAME = FLAnimatedImage; - PRODUCT_NAME = FLAnimatedImage; + MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; + PRODUCT_MODULE_NAME = RocketChatViewController; + PRODUCT_NAME = RocketChatViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Debug; }; - F65FD659C3085095DF69AA09DB63E42D /* Release */ = { + F9E3A4D77FC14496D87FA584672DCB1A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D96912A8D45377B0A76C2D2640926BFA /* FirebaseAnalytics.xcconfig */; + baseConfigurationReference = B257AA674397EBBCDD5BB05C7DC23152 /* GoogleDataTransport.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + 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"; ENABLE_BITCODE = NO; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransport; + PRODUCT_NAME = GoogleDataTransport; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; - F84F89D43C1240B9DE50D4A741F0A9DA /* Test */ = { + FA9D523A116C989D277F495790777396 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 192AF64ECDE705D4124240D353FAE769 /* Pods-Rocket.ChatTests.test.xcconfig */; + baseConfigurationReference = 7D8C56882FB12EDB72D35BD47CC0EB40 /* Pods-Rocket.Chat.beta.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -10660,12 +11273,12 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -10680,50 +11293,51 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; - }; - F8D2FF49CD5592F26D131A18F55E139A /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1DEDB36512AFEDCF4F7681D3948EE214 /* Crashlytics.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; name = Beta; }; - F95AFA90FF4CF5C3BE4402B0D20F5FDA /* Test */ = { + FB386090D6CD81A680EF98C796D97944 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E34074D5400DFC7C86ECC22684958AA7 /* FirebaseInstanceID.xcconfig */; + baseConfigurationReference = 43AD415141E23C2C0A1DC8B66FDDB833 /* Pods-Rocket.Chat.ShareExtension.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + APPLICATION_EXTENSION_API_ONLY = YES; + 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"; ENABLE_BITCODE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + INFOPLIST_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Debug; }; - FE847D9F670D3E586EC3A273840CA66B /* Test */ = { + FC1CB5C0B63E00B18E54637575B38C28 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16EF9F2B9693CAE4436AFC40BD388362 /* Realm.xcconfig */; + baseConfigurationReference = ABF15E713D08B0831547104F3E0F572E /* GoogleDataTransportCCTSupport.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10734,14 +11348,13 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Realm-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/Realm/Realm.modulemap"; - PRODUCT_MODULE_NAME = Realm; - PRODUCT_NAME = Realm; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; + PRODUCT_NAME = GoogleDataTransportCCTSupport; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10752,14 +11365,12 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Test; + name = Beta; }; - FEB4D867FA82041B073DA4DB206936DD /* Debug */ = { + FCC794D63153CFA6D35A3845756D9B56 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9319971B69A41A780F031EBF2D11295F /* RocketChatViewController.xcconfig */; + baseConfigurationReference = 2C28CE14755DB0597D8ADA0892A50C65 /* 1PasswordExtension.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10770,414 +11381,393 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_BITCODE = NO; - GCC_PREFIX_HEADER = "Target Support Files/RocketChatViewController/RocketChatViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/1PasswordExtension/1PasswordExtension-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/1PasswordExtension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RocketChatViewController/RocketChatViewController.modulemap"; - PRODUCT_MODULE_NAME = RocketChatViewController; - PRODUCT_NAME = RocketChatViewController; + MODULEMAP_FILE = "Target Support Files/1PasswordExtension/1PasswordExtension.modulemap"; + PRODUCT_MODULE_NAME = OnePasswordExtension; + PRODUCT_NAME = OnePasswordExtension; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Beta; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0C68631D0476D23CDF0D7BE9008B6AC6 /* Build configuration list for PBXAggregateTarget "FirebaseInstanceID" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D8F855C766B5F80DBBE84AC722C458C5 /* Beta */, - E90A464E4F8B5582D92A4344064EF02F /* Debug */, - 8FE0E7D25BDD361222FA4B81D9889DA7 /* Release */, - F95AFA90FF4CF5C3BE4402B0D20F5FDA /* Test */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1EF924A2DF5DFAB22FAFB861C951FEE2 /* Build configuration list for PBXNativeTarget "1PasswordExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C2468E76BE2A4FF1F43B4DE4F7F7B2E1 /* Beta */, - 53E178EFFB88F52661AF1F6DBF1413AF /* Debug */, - 5AAD849BF1FD89271FAB9133C0832363 /* Release */, - 7E694E7156D4AE0B62CE64C634B320F1 /* Test */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2978AB4F2BF6E60BAD758D4C0CDDF9EA /* Build configuration list for PBXNativeTarget "MBProgressHUD" */ = { + 01A6E459FACC415A85E6518DD7B0349B /* Build configuration list for PBXNativeTarget "MBProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( - E87CCF9AECBC86D631D4EE7785524E85 /* Beta */, - 5781262E98886DC00D69E0EDD83D7C86 /* Debug */, - 546AD3EC4DCCD21D430F117EB0554E9E /* Release */, - 15544BE043AF151F9A053F72B3A5A7F2 /* Test */, + 8BA6E89375190ED40CD8513F410AF981 /* Beta */, + E9BF89FEF5A3765CDB08EE7310A8E481 /* Debug */, + 3E91A35EA85EEDA72EAA45FBE400C859 /* Release */, + 7C84A1DDA8B7AFE658EE41B08B8BED9D /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3191DEF558AD113AD3758B64D5C1FFE7 /* Build configuration list for PBXAggregateTarget "Firebase" */ = { + 07E35ECA243195415ED1C04788CAE2D5 /* Build configuration list for PBXNativeTarget "FirebaseInstanceID" */ = { isa = XCConfigurationList; buildConfigurations = ( - B961CD47521EA3A028B61EFD47FC9A79 /* Beta */, - 29FCE872EA804D71AE5B9AEA315310DB /* Debug */, - EC3EE7FF22FD5B8DB326591EC7A4A164 /* Release */, - 7FDC55B36705E990222B111B5A3F68DE /* Test */, + 1CEE2614E4C17DC7DD690FBF37581FB4 /* Beta */, + 6A33D13ED4C7C73E1B657A343175C960 /* Debug */, + 7BA5CDECFB1334E572CE4DEF50AC4286 /* Release */, + 234C47E12905636D949BFA6BA2BA5DDE /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 435A59889AE074E3E7925780F7C87C37 /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat" */ = { + 0F27EE18CE5F07F745FA31A9A8D8FBF6 /* Build configuration list for PBXNativeTarget "MobilePlayer-MobilePlayer" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8C3E026097BE095EA135611C476F722A /* Beta */, - 17E4129FEE38998FA62DA424EB95B950 /* Debug */, - 839DA7A342D5998E328A517808FF9B37 /* Release */, - D9708AC61CA8693299AF1E8075B142A5 /* Test */, + 9585124D87B306AFA3981A1521E21670 /* Beta */, + 23365D7ADCDD304B2AF6697128039E4C /* Debug */, + 9E62538963C0FC36CF10986254D9C473 /* Release */, + 90360B79D6E0D757AF51B944E9CC4ED4 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + 1AFFE5DAABFFCAEDFB5D479E0C61A2F0 /* Build configuration list for PBXNativeTarget "Pods-Rocket.ChatTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - E6C057A73F74CDEB3D5CF59F40FA8681 /* Beta */, - DD8F832993327D1DD8046C3CBCBD97CD /* Debug */, - 257497152829C177993B5EC99C1D227A /* Release */, - AA21C8A1AB03342487124E9DBBC077E4 /* Test */, + 53CD7BD74D2E634687329BB36A86AEBB /* Beta */, + 29BAEF2D94A937EF1C96FA66F87A4C88 /* Debug */, + E8DE2445F1975D627F7B6EF84C7DB3EF /* Release */, + CB6D6C9B01921EABC07C9AF8FF0B6946 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 49F29959A61B0E6C5A781DE864C87B28 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */ = { + 1B0388AC1C1E059695D69EA11ED72212 /* Build configuration list for PBXNativeTarget "RealmSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 70FBF7282A3BBEED1854429398857D04 /* Beta */, - EC3AFA401BEF5435B8D1E0A071836FFA /* Debug */, - BCD21FF4692EC9A23F135125689A1B46 /* Release */, - A02B59880571CDDBD51E5EA6FF479D11 /* Test */, + 2C6F8CE694D0AE2BDC074D42B7AAB9FB /* Beta */, + E9A9808CE70A4F6EC0E5704D3A634236 /* Debug */, + 87B9679A77B93F4462C0579E9E735B2C /* Release */, + 69D1F955515D41E79E650D3716FEB977 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6240707FA5D9495C9D41CA667576DA9E /* Build configuration list for PBXAggregateTarget "GoogleAppMeasurement" */ = { + 1B539D08FAB12201BB5AC6FB5FBD91E2 /* Build configuration list for PBXNativeTarget "DifferenceKit-Core" */ = { isa = XCConfigurationList; buildConfigurations = ( - D9051AE8F46413108CB7A8C51E9FA2CE /* Beta */, - 760D684168A3DD0F087E2C1F94D2C9FB /* Debug */, - 4DE5CA2C179902254A998A2627D67873 /* Release */, - AD99E9104109E79988528FBAFB45E633 /* Test */, + 6604D708FCF7E19786C1B576DBCAD857 /* Beta */, + A6C9272C6AA779BEE2DFE2F11E144856 /* Debug */, + F57CCCCBB98ED484FDCCBD18F3E5A4B0 /* Release */, + 7CD4D0206A2F55AE472485304DFCFC34 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6AF90B4E1B413490136D6F8F290B8E2C /* Build configuration list for PBXNativeTarget "FLAnimatedImage" */ = { + 231290C35D86613BA3124D7CCDA858D3 /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */ = { isa = XCConfigurationList; buildConfigurations = ( - F2FCFA066468BE9980083D6D59E2D89F /* Beta */, - DAC541A364BDFA8D3CC65F3397FEAD59 /* Debug */, - B11528DEABA50F42E2ADEA450CC1126E /* Release */, - 42C23307529A0B81C2439445AE323FD0 /* Test */, + 2895C464228BEB2D0FCDAC92019D726E /* Beta */, + 4DEBCF88AD9900D160D7756C1998EFAA /* Debug */, + F9E3A4D77FC14496D87FA584672DCB1A /* Release */, + E26AFD87A43FE52EA5DDA0269ABE8C12 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7D058E23D3285592BB5B45DA7C8CC0F2 /* Build configuration list for PBXNativeTarget "RealmSwift" */ = { + 2AD4959B1E613F160146A21A3232C024 /* Build configuration list for PBXNativeTarget "1PasswordExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7BB632E4809B6643E1A737CEBF8F3AB2 /* Beta */, - 74D5BF3334F553FA92200836BA5F59C5 /* Debug */, - 18F1EAA63673EBEBF279C2B9B9964A07 /* Release */, - 03C98F0B5529A74A3AAF159B42080A37 /* Test */, + FCC794D63153CFA6D35A3845756D9B56 /* Beta */, + 07024191E47DB7BFA0F07FE662CCB904 /* Debug */, + A25001C2EA5888162A4C76B241E27F3A /* Release */, + 71DA0230D40D82E95545D67E1B2B46E0 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8155D48394F52450F2B7DEA53BCA5674 /* Build configuration list for PBXNativeTarget "Starscream" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3157C6C3150BF05D3860C3BECFC1549C /* Beta */, - BCD0C15CA554EB2814B5501FE6B995EC /* Debug */, - 32FAEE4C6FFD4193EB324882ED5A06AC /* Release */, - E78907745596D205193A7A7A51BEE9CC /* Test */, + 6A9CD731236B2FF8EBAA93C04174542D /* Beta */, + 9DAE5233986C01ADB6E67169C53A3FD2 /* Debug */, + 08638A96A528B1EC32DE62F8A728389D /* Release */, + 04BFC66EE9A37395434DC048F81A397D /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 88B85023056BD6D9931D433814D7E434 /* Build configuration list for PBXNativeTarget "MobilePlayer" */ = { + 2EA64EE84FE23A9B712E18801C526F82 /* Build configuration list for PBXNativeTarget "semver" */ = { isa = XCConfigurationList; buildConfigurations = ( - AC82669BFA82C2F361FFE2AF9D618166 /* Beta */, - 0DEE15339455563EF2295B31C44A1190 /* Debug */, - 15A441C7B7E338F2FC4B5CC1C14CA365 /* Release */, - CE172519D2B3B7B4C5CCDA91F1B14DCA /* Test */, + 4CD71B09E6D1DDA36E0B40624CBC453F /* Beta */, + ED8940BBFB5B5DDA3FE6DBE593507630 /* Debug */, + D793B3F54B4FD6A2ED9A1EDBB76DD697 /* Release */, + BEB0C5A01B5F488FB5F33BE7A75930A4 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8EDAE7E1598DBD84B64F6E6498E0F85C /* Build configuration list for PBXNativeTarget "Nuke" */ = { + 3501C562BBB2D10ECFAE1863ED3D6135 /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat.ShareExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( - 32C164E7C8C0852B5BB473DFABA5E422 /* Beta */, - 7AA27A095C198C804609DE87AB5BFE7D /* Debug */, - EC31CCCA744F4447ABE789680372D064 /* Release */, - 45714B54E21465E390241C4105D9D2C8 /* Test */, + 5997BEEC6F303D424C0C16D2D293323B /* Beta */, + FB386090D6CD81A680EF98C796D97944 /* Debug */, + 0C9324BA34D82153CE64FB977BBF580B /* Release */, + 09FD2278762B2DDBE026169B9462814B /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8F6FDBF3A140B60FCA792B3076CCE1BA /* Build configuration list for PBXNativeTarget "semver" */ = { + 3FC7BD8565574E1ED9727A77FFD159A5 /* Build configuration list for PBXNativeTarget "Realm" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1C6597F11E96F6C2ED1C85DC9C7B8763 /* Beta */, - 4BA7779F0BE4795DD7562C49E9892756 /* Debug */, - 1FE58A8FFF973E7D4EF5E67D08D94E75 /* Release */, - CC076D17C50E5590B8BA0B4919073AB7 /* Test */, + E573A50D8D1F1A0597FD3A6D2032D632 /* Beta */, + 1DA47CC705CF3D8EB1CAA072D7A0DDA8 /* Debug */, + 0623320D4550A76AEF8F46872D121E0B /* Release */, + 53FF5A96D68C56E87A62AB7F55CE9D70 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 950DBE210F8CCB934507D83FAD13F140 /* Build configuration list for PBXNativeTarget "DifferenceKit" */ = { + 55EB5D6C2C8F6D96B79AC28C262BDEE7 /* Build configuration list for PBXNativeTarget "Nuke-FLAnimatedImage-Plugin" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9BBA5744FD9E2C98651F7B3C9402144C /* Beta */, - B4F25E1ABD78033C3C29B423C3993EDA /* Debug */, - AC9ACBED6C934FAEF4800EAB20218C03 /* Release */, - DD84923CABC842C14E5CBD985D4FD9C1 /* Test */, + C352947F054D11DB3B8ECCFAEEFA78AC /* Beta */, + 93CCD1395FC039E3A7AC140F940858B6 /* Debug */, + B57C61D7A9A61BFB0E29404FBB702F2B /* Release */, + 8170CB599956433DECCFDD0DD9C85BB6 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 97C3DC00BE1AF29667450F23D8A82035 /* Build configuration list for PBXNativeTarget "1PasswordExtension-OnePasswordExtensionResources" */ = { + 64CB2B048D941429610D5519E317C261 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */ = { isa = XCConfigurationList; buildConfigurations = ( - AD0BF03532DD8A13C7393871022229D2 /* Beta */, - 595AD69E74DF297F1736DC05D7C75916 /* Debug */, - 7C128C7E6632E3E800D608268C915A48 /* Release */, - 68ECD641DCD22AA93571AC717E39C296 /* Test */, + FC1CB5C0B63E00B18E54637575B38C28 /* Beta */, + EE27F749B067ED4C98070842E33CDD06 /* Debug */, + 219DE3DC97AD4C4EB8726BCD819F345C /* Release */, + 794BACDCB3CB3323CB2AC27E08DDCF13 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9C4D8547CE9A03F70AFA5B7986181464 /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */ = { + 705E06941BC4ED95A27F87E234E74A7A /* Build configuration list for PBXNativeTarget "Nuke" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7D4EB8F1BBC7FD21FB4CB4000DBCD329 /* Beta */, - C7D75BBEE90FA24C76E6E9AC3C43BF39 /* Debug */, - 20B739E6F465870E2519838232EF1047 /* Release */, - 50C3C6915F8E37B2D742E026E5269A3F /* Test */, + D151F7A9712E12FB5FBF4F4D5E514709 /* Beta */, + 17ADD576EA63D55E1EE5DFE009C402E7 /* Debug */, + C216BE8F1D11AD7807D64AB26BAD1130 /* Release */, + C98EA22AACA683911F9127A1AD53AB68 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A4B9EA0B5956BE2E93377A614E26B3D7 /* Build configuration list for PBXNativeTarget "RCMarkdownParser" */ = { + 715537C4EF8102E39FB6086EA43A7EB2 /* Build configuration list for PBXNativeTarget "RocketChatViewController" */ = { isa = XCConfigurationList; buildConfigurations = ( - F2AE9A535794A4D952514E27216BA478 /* Beta */, - 81724F37E96720AF9FADF3536F30DFE0 /* Debug */, - C144B8B8FC2A12DF7BE25533570BBD26 /* Release */, - 6D9B32012B10AC9AA89D47523319F11D /* Test */, + 71429ECB4D02B3E6187E29224AD189BC /* Beta */, + F9C1651EB6A97D78F90C5D9D548CCC1E /* Debug */, + 473A0A4DCBD08EA94C09EFA563763B7D /* Release */, + 3DB75351343621E579B6DF96243923E9 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - ADBC3B42093B3CE0DDA8179847DDEB4E /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat.ShareExtension" */ = { + 7A2512EC44583CD3610366878EF64565 /* Build configuration list for PBXNativeTarget "MobilePlayer" */ = { isa = XCConfigurationList; buildConfigurations = ( - C72CD9D6F9D08B92B98228EA2FE07ED0 /* Beta */, - 9BCA41B4BC2EB2386765A9DC3E96A3AA /* Debug */, - 3F9659E36EC7739AC43F165DBF056A57 /* Release */, - CF5982322C455145A2A3FDF5AFDBBC00 /* Test */, + 5EF74B26E253A0C46A48D7B0C53B282E /* Beta */, + 7BEA1ED2F32546B8D67FCE79CCFF2A33 /* Debug */, + 5CF6FE3C8580592AF863CF940ABE112E /* Release */, + 9A2B678FE5373D443B2D8CC5898C0780 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B1EE5FD8D4F29BB28433CF42D02E33D2 /* Build configuration list for PBXNativeTarget "SimpleImageViewer" */ = { + 7ACD5DCD5C47719A8D962D84E78BE5B0 /* Build configuration list for PBXNativeTarget "FLAnimatedImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 835193F617C9009471EC4EAD01FDE2A0 /* Beta */, - BE4983C559FCC97796CE553CE56E29D9 /* Debug */, - B19D8BBFB280D6F9D0B5276CFDE1E90A /* Release */, - 6B628058BB3DC130C6528C26DAD6DD17 /* Test */, + 2EB8DC7BE8904AE9286ED45AB52136F2 /* Beta */, + 0BEC29C9CB9ADE5FB2D6EDC1EEBD35DF /* Debug */, + 6C4AAC759795F35CECE0A024F68F3038 /* Release */, + 9105A444BD77F9E784DA07DA5E3CAB41 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B5EAF43E082335B602387F9DE7B49726 /* Build configuration list for PBXAggregateTarget "FirebaseAnalytics" */ = { + 7D6B15560D09939A72279F4E1A8E92C7 /* Build configuration list for PBXNativeTarget "OAuthSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5C3B4F1EB3B5ED3C83891CEA791B14F9 /* Beta */, - 080F71CFC05A7529A13557456F63EBFA /* Debug */, - F65FD659C3085095DF69AA09DB63E42D /* Release */, - DDB51FF0C54674C060AEABCCCF5A9841 /* Test */, + B3B8EF730170C508AC0A46AF86C8E86C /* Beta */, + 5EE4EB20A731A280F3836E6DD7054B61 /* Debug */, + 6D2FC6D1F3626BB9AE1D31193FFDD0EB /* Release */, + EE11769E6DAC722B95C41CF7531F7D84 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B72C7C34D80C6A2A86DFE1EE43D6D4FA /* Build configuration list for PBXAggregateTarget "Fabric" */ = { + 7E4301AC612ADA2946E593D492190F69 /* Build configuration list for PBXNativeTarget "Pods-Rocket.Chat" */ = { isa = XCConfigurationList; buildConfigurations = ( - 05CCE5A1ACA67533C913913BCEB28530 /* Beta */, - 823653019E7E50ACF372DE59872EBA59 /* Debug */, - 196AF296AFD9C468802BCAFD33D8CFAA /* Release */, - 93F37AB931CA074AC6ED1168593BD645 /* Test */, + FA9D523A116C989D277F495790777396 /* Beta */, + 26087C81D267864BBD36EB7799EDA4C9 /* Debug */, + 5AE2358BAB6E33CD3C945CE9BA302A6E /* Release */, + 9EA77C2871A77F0706A303F0FA45BC4A /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C15A433072C5C99FD40CD59F25EC2F7A /* Build configuration list for PBXNativeTarget "MobilePlayer-MobilePlayer" */ = { + 8534B40BB0781C31F1980CAFE096E1CE /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { isa = XCConfigurationList; buildConfigurations = ( - D1DF9A94B79E040DC27EC6C02E74B710 /* Beta */, - 38DDA64DD75F3009DBC0886D40972B95 /* Debug */, - 57CB30D1323C681EDD124936B7C72EF4 /* Release */, - 92BDB8C42C93AC28609BF5D8B979B20A /* Test */, + DA64004FA3F26DB68FF1DC65C75C7D1E /* Beta */, + 0810C02FB39EB7E9A03897ACAD0AE371 /* Debug */, + 4DF44B310B4C53BBCC5D0A491046A5AF /* Release */, + 163DC081E0364A3C298820EF132C1B12 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C32F3352D6B0397F2A6A6B1E2EE6DEC0 /* Build configuration list for PBXNativeTarget "FLEX" */ = { + 877F2528C03997D9997D7BA1338D9A9D /* Build configuration list for PBXNativeTarget "SwipeCellKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - C53A53D61EA5A9E21574238A9E8C529A /* Beta */, - 8FF7B9FAC480B24A028889531E567FDE /* Debug */, - 262FB92A270E9AA0AC0E2031CD4EAF43 /* Release */, - DBDB890C316B414C521468CC2FF5ED38 /* Test */, + 0BB4C287AE42D0F8D84BF5A16AD99621 /* Beta */, + 61DA1953EC27D9B11DABF68A3030A196 /* Debug */, + 3FF1F2E38E14E3EEF65DF652C25E9A6A /* Release */, + 4E294221F3A02D430794322775E7D7E4 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C49F295716093132A8EF9546961E78DC /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { + 8B26E6AAC899384D8A2354AAB5161043 /* Build configuration list for PBXNativeTarget "SimpleImageViewer" */ = { isa = XCConfigurationList; buildConfigurations = ( - 90E18834417F0729173648804F918681 /* Beta */, - 4FE9046193D0BC07A0994F7581918976 /* Debug */, - 8DD3B3CD092126520677CF35DEE6889C /* Release */, - 5E36AEA9F0951D8B78A8A55ADAC09AA6 /* Test */, + 1DA68668340564D35396F7BE9553977C /* Beta */, + 66A8363025D5E5FF34C1CD7610DCF515 /* Debug */, + 570C71E1A955EAF8FEFF8592C0C1E813 /* Release */, + A0B059D50825399955F361CDADE21E01 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C55E7B2F4E71AF69D0207E11170066CE /* Build configuration list for PBXNativeTarget "nanopb" */ = { + 8C38B1821A5E8F7A629329601F23CFEF /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */ = { isa = XCConfigurationList; buildConfigurations = ( - 98DEDFE05FB8BCFC2BED736C5AFED39B /* Beta */, - 91EDEA963E67D0BA2122D3CEA20ED4CE /* Debug */, - D2BF11FF99CEF5FDF085C394C15BC43D /* Release */, - 991A5E80A17B21258BEBD4FA2CDA0756 /* Test */, + CC0E50AFAF7E56006347C6ABB6C14FCE /* Beta */, + 1782C8453F5D9E6B9D9CEF24873CF9AC /* Debug */, + 6251EA34859C0B72235C3E596E8BA8FE /* Release */, + 1B46A3D96494E0D7A73BE82CB8836BBC /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C6FD64E407A4321D580B721FC19399E4 /* Build configuration list for PBXNativeTarget "Nuke-FLAnimatedImage-Plugin" */ = { + 9341EE42596A8BC3F44FF52C07CD1C21 /* Build configuration list for PBXNativeTarget "DifferenceKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0B52863F7BB47F945CB13A5DFA033270 /* Beta */, - F159AEFC2B6EB7840FD828893CE9D7E4 /* Debug */, - BB67B8E51D856DC6AB83389AC7F777CE /* Release */, - 5C02620D21B8F8B94365F4416EDD0709 /* Test */, + B6D7092507D3B9500CF3788DF70CEBB8 /* Beta */, + C1FF44FAADDBE5FCB3FC8185DA12D9A0 /* Debug */, + 92DEA387201FBFBA65880BAD3A21CCCA /* Release */, + 9A4D071F0C7AE2CBAB45B087346B4854 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CBAD6CAFA663881CF0EA84568EBBC24A /* Build configuration list for PBXNativeTarget "Realm" */ = { + A8C3070E72F058BBB4D1DE7F50776ADD /* Build configuration list for PBXNativeTarget "GoogleUtilities" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8DF5198C3FCB1BBA72121E768D5A1DCD /* Beta */, - 22E186B652CDFE90E990A968325D6E61 /* Debug */, - B61362DC66AF372190AFB74E843A316F /* Release */, - FE847D9F670D3E586EC3A273840CA66B /* Test */, + DE94CF2F18EDDADE614004EF5376255E /* Beta */, + A934EFA9BA49F5D1630B46FFD74408C6 /* Debug */, + 0A292872B0F101BD6EB1032D3C81EB0C /* Release */, + 20A84C57F5A8B19F1805E6BBE3EB3E4E /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D8B51182B2BE673D4A1278B1F96BEE7C /* Build configuration list for PBXNativeTarget "OAuthSwift" */ = { + AE341D9A0C0322AB1703893C725D2CEB /* Build configuration list for PBXNativeTarget "FLEX" */ = { isa = XCConfigurationList; buildConfigurations = ( - A701D9466D774CF449BBC37D7CDB2FA3 /* Beta */, - AD27A16A9188DB487048858742BC5698 /* Debug */, - DADA1B87548B605F93019B62D09EC8DB /* Release */, - DD20329FC7DEC3CD30992727A16106AD /* Test */, + A86746B168562C0AA75397B16EA8E446 /* Beta */, + E8DE6D02824681C0AA73C14D31D4B732 /* Debug */, + 483977CDB4AB45F4B876C44787ECF623 /* Release */, + 00099457FA1867ACF55185624A208BD4 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E0F0E3036A4D65EB62D144C81A937BA9 /* Build configuration list for PBXAggregateTarget "Crashlytics" */ = { + B04DB583F7E18BE779CB8A6586DDA5B3 /* Build configuration list for PBXNativeTarget "RCMarkdownParser" */ = { isa = XCConfigurationList; buildConfigurations = ( - F8D2FF49CD5592F26D131A18F55E139A /* Beta */, - 038AEFB56C4A5A6DCAE077FE0F6652F9 /* Debug */, - 7A1BCBC1C6217CB4CCAA2BF1EB44CC5B /* Release */, - 531B8A02BE11E410A1C846316E99AFCF /* Test */, + B0C25E181D5C736611E4B58D65330917 /* Beta */, + F176FD73C608893603FAFD5D9118196D /* Debug */, + 8AB31074FEFA95F0CC34890044B45CEE /* Release */, + 40D9E9B04B527868251933C1A717F6D1 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E7739B80E3C263DFCA211CF66332F452 /* Build configuration list for PBXAggregateTarget "SwiftLint" */ = { + C3C2729BF70430A815240169B267CE80 /* Build configuration list for PBXNativeTarget "Starscream" */ = { isa = XCConfigurationList; buildConfigurations = ( - BD4F02A8209F257430F9A5A280F0B9F2 /* Beta */, - C6FEA2FA3553CEB730311DB2C9A0EB3E /* Debug */, - 8B50C7C8A823D5E703C3640CD22C5335 /* Release */, - 27916FE25E1612F5D49B08D6102EAEBD /* Test */, + A685BCE7D8D7AA52EAC9DDD9D9EC522A /* Beta */, + 8CBBECC1469441D0EE6605E43FE6E477 /* Debug */, + 1084CCBC3D9FAF03B09FE80C9B28D4F3 /* Release */, + 20B01EB1DC65B0EEB519FF9401A0E989 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F4889164A77775F9984CF089CF22C391 /* Build configuration list for PBXNativeTarget "SwipeCellKit" */ = { + CD9CC339D2DB851A1E09F0FBEA5DEF19 /* Build configuration list for PBXNativeTarget "FirebaseCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4BB96445B3773F3681B1FC193C7C5A79 /* Beta */, - EDB000980B418325A63413F0E868EA1D /* Debug */, - 77827FB8B595ACB3A61D9DBAD30693FE /* Release */, - 3EF0A3E792FAC5354025956B138B6E1E /* Test */, + 5BE549C9A9722C22CB27181C070B37B2 /* Beta */, + C5D118CD493C3A1FEAAB858F701A8C3F /* Debug */, + C1E3AFA614BFFFFAEF5F251422453BAD /* Release */, + D15D55E945A191258DA450D11884861B /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FE3B5546138661EA89723361CB383EDB /* Build configuration list for PBXNativeTarget "Pods-Rocket.ChatTests" */ = { + EB9BD76C3B4D21DF6129E1BB2ED33178 /* Build configuration list for PBXNativeTarget "nanopb" */ = { isa = XCConfigurationList; buildConfigurations = ( - E58C85868E14C15A567D60C17BB51E35 /* Beta */, - 065A398C9F69192F655C96C4931E5AEB /* Debug */, - 1785196B66BB128E2DCA7FF9C94D1B7A /* Release */, - F84F89D43C1240B9DE50D4A741F0A9DA /* Test */, + 95649A437F9BCDE0CB7BAAF6FA2FB734 /* Beta */, + BE7A682CC41CDFFDB7D3E1B61110984D /* Debug */, + 4406DD77BC52AE2DA390A4CBA85D7621 /* Release */, + 67A0B40E0920D6EEB0FF331385C29AFD /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FE6A7EC140C75FD423DF824124DA7DE2 /* Build configuration list for PBXNativeTarget "FirebaseCore" */ = { + EBDBD67410CE33037F60E530F52E6E54 /* Build configuration list for PBXNativeTarget "1PasswordExtension-OnePasswordExtensionResources" */ = { isa = XCConfigurationList; buildConfigurations = ( - CA7CFF07DF6F895061F51A6A813FF50A /* Beta */, - 38904FEC8344955ABDF608867398F4E6 /* Debug */, - 15F46A2FC9E1A4F62A0703B060AFC92E /* Release */, - 986999995A794ACEA0ADC21E08A258DE /* Test */, + E3B5EA67C333532A81668D3129905523 /* Beta */, + C49B4F26A2AE0A504C0FD085E3F3B8B2 /* Debug */, + 4094F94149B0645CE189048BE77348E5 /* Release */, + 856647E65835A11F46B5ACD85956E074 /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FE97C8AE94FFF4C4EA91791A6715F39E /* Build configuration list for PBXNativeTarget "RocketChatViewController" */ = { + FD2A323BA20F87B1BFD6790B9280E3AF /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5C6BD9C3A5AA309FF051361C2265B24A /* Beta */, - FEB4D867FA82041B073DA4DB206936DD /* Debug */, - 0A3D00551821A163AED0C9FA4E61E25F /* Release */, - 8DF2E9946CE11857B53ABC33A29C34F6 /* Test */, + 36E0C0CE6D07312AFCD85334FD75DBA4 /* Beta */, + 931260873D4AA9880C0379DC277C38CF /* Debug */, + 47B0EDC54363ECEBEF6E6D5D80637040 /* Release */, + E22DB6A4B239922650A9F0F1B32465FB /* Test */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; } diff --git a/Pods/RCMarkdownParser/Pod/Classes/NSAttributedString+Markdown.swift b/Pods/RCMarkdownParser/Pod/Classes/NSAttributedString+Markdown.swift index c7e9e634bc..a8e02aa981 100644 --- a/Pods/RCMarkdownParser/Pod/Classes/NSAttributedString+Markdown.swift +++ b/Pods/RCMarkdownParser/Pod/Classes/NSAttributedString+Markdown.swift @@ -144,3 +144,4 @@ public extension NSAttributedString { } } + diff --git a/Pods/RCMarkdownParser/Pod/Classes/RCBaseParser.swift b/Pods/RCMarkdownParser/Pod/Classes/RCBaseParser.swift index f7e3e253ca..bb2fdf9446 100644 --- a/Pods/RCMarkdownParser/Pod/Classes/RCBaseParser.swift +++ b/Pods/RCMarkdownParser/Pod/Classes/RCBaseParser.swift @@ -51,3 +51,4 @@ open class RCBaseParser { } } + diff --git a/Pods/RCMarkdownParser/Pod/Classes/RCMarkdownParser.swift b/Pods/RCMarkdownParser/Pod/Classes/RCMarkdownParser.swift index 16b074e542..2fc45f4ab8 100644 --- a/Pods/RCMarkdownParser/Pod/Classes/RCMarkdownParser.swift +++ b/Pods/RCMarkdownParser/Pod/Classes/RCMarkdownParser.swift @@ -391,3 +391,4 @@ open class RCMarkdownParser: RCBaseParser { return "\(char)" } } + diff --git a/Pods/ReachabilitySwift/README.md b/Pods/ReachabilitySwift/README.md index 43e00d6ee1..578743cc39 100644 --- a/Pods/ReachabilitySwift/README.md +++ b/Pods/ReachabilitySwift/README.md @@ -2,7 +2,7 @@ Reachability.swift is a replacement for Apple's Reachability sample, re-written in Swift with closures. -It is compatible with **iOS** (8.0 - 11.0), **OSX** (10.9 - 10.13) and **tvOS** (9.0 - 11.0) +It is compatible with **iOS** (8.0 - 12.0), **OSX** (10.9 - 10.14) and **tvOS** (9.0 - 12.0) Inspired by https://github.com/tonymillion/Reachability @@ -20,46 +20,6 @@ And don't forget to **★** the repo. This increases its visibility and encourag Thanks Ash -# IMPORTANT - -## Version 4.0 breaking changes - -### CocoaPods: - -If you're adding **Reachability.swift** using CocoaPods, note that the framework name has changed from `ReachabilitySwift` to `Reachability` (for consistency with Carthage) - -### Previously: - -```swift -enum NetworkStatus { - case notReachable, reachableViaWiFi, reachableViaWWAN -} -var currentReachabilityStatus: NetworkStatus -``` - -### Now: - -```swift -enum Connection { - case none, wifi, cellular -} -var connection: Connection -``` - -### Other changes: - -- `reachableOnWWAN` has been renamed to `allowsCellularConnection` - -- `reachability.currentReachabilityString` has been deprecated. Use `"\(reachability.connection)"` instead. - -- `isReachable` has been deprecated. Use `connection != .none` instead. - -- `isReachableViaWWAN` has been deprecated. Use `connection == .cellular` instead. - -- The notification for reachability changes has been renamed from `ReachabilityChangedNotification` to `Notification.Name.reachabilityChanged` - -- All closure callbacks and notification are fired on the main queue (including when `startNotifier()` is called) - ## Got a problem? @@ -177,7 +137,7 @@ and print("Reachable via WiFi") case .cellular: print("Reachable via Cellular") - case .none: + case .unavailable: print("Network not reachable") } } diff --git a/Pods/ReachabilitySwift/Sources/Reachability.swift b/Pods/ReachabilitySwift/Sources/Reachability.swift index 8711a716ab..6c8ffa2e42 100644 --- a/Pods/ReachabilitySwift/Sources/Reachability.swift +++ b/Pods/ReachabilitySwift/Sources/Reachability.swift @@ -29,18 +29,18 @@ import SystemConfiguration import Foundation public enum ReachabilityError: Error { - case FailedToCreateWithAddress(sockaddr_in) - case FailedToCreateWithHostname(String) - case UnableToSetCallback - case UnableToSetDispatchQueue - case UnableToGetInitialFlags + case failedToCreateWithAddress(sockaddr, Int32) + case failedToCreateWithHostname(String, Int32) + case unableToSetCallback(Int32) + case unableToSetDispatchQueue(Int32) + case unableToGetFlags(Int32) } @available(*, unavailable, renamed: "Notification.Name.reachabilityChanged") public let ReachabilityChangedNotification = NSNotification.Name("ReachabilityChangedNotification") public extension Notification.Name { - public static let reachabilityChanged = Notification.Name("reachabilityChanged") + static let reachabilityChanged = Notification.Name("reachabilityChanged") } public class Reachability { @@ -61,12 +61,15 @@ public class Reachability { } public enum Connection: CustomStringConvertible { - case none, wifi, cellular + @available(*, deprecated, renamed: "unavailable") + case none + case unavailable, wifi, cellular public var description: String { switch self { case .cellular: return "Cellular" case .wifi: return "WiFi" - case .none: return "No Connection" + case .unavailable: return "No Connection" + case .none: return "unavailable" } } } @@ -74,7 +77,7 @@ public class Reachability { public var whenReachable: NetworkReachable? public var whenUnreachable: NetworkUnreachable? - @available(*, deprecated: 4.0, renamed: "allowsCellularConnection") + @available(*, deprecated, renamed: "allowsCellularConnection") public let reachableOnWWAN: Bool = true /// Set to `false` to force Reachability.connection to .none when on cellular connection (default value `true`) @@ -83,7 +86,7 @@ public class Reachability { // The notification center on which "reachability changed" events are being posted public var notificationCenter: NotificationCenter = NotificationCenter.default - @available(*, deprecated: 4.0, renamed: "connection.description") + @available(*, deprecated, renamed: "connection.description") public var currentReachabilityString: String { return "\(connection)" } @@ -99,8 +102,9 @@ public class Reachability { } switch flags?.connection { - case .none?, nil: return .none - case .cellular?: return allowsCellularConnection ? .cellular : .none + case .unavailable?, nil: return .unavailable + case .none?: return .unavailable + case .cellular?: return allowsCellularConnection ? .cellular : .unavailable case .wifi?: return .wifi } } @@ -113,35 +117,49 @@ public class Reachability { #endif }() - fileprivate var notifierRunning = false + fileprivate(set) var notifierRunning = false fileprivate let reachabilityRef: SCNetworkReachability fileprivate let reachabilitySerialQueue: DispatchQueue + fileprivate let notificationQueue: DispatchQueue? fileprivate(set) var flags: SCNetworkReachabilityFlags? { didSet { guard flags != oldValue else { return } - reachabilityChanged() + notifyReachabilityChanged() } } - required public init(reachabilityRef: SCNetworkReachability, queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + required public init(reachabilityRef: SCNetworkReachability, + queueQoS: DispatchQoS = .default, + targetQueue: DispatchQueue? = nil, + notificationQueue: DispatchQueue? = .main) { self.allowsCellularConnection = true self.reachabilityRef = reachabilityRef self.reachabilitySerialQueue = DispatchQueue(label: "uk.co.ashleymills.reachability", qos: queueQoS, target: targetQueue) + self.notificationQueue = notificationQueue } - public convenience init?(hostname: String, queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { - guard let ref = SCNetworkReachabilityCreateWithName(nil, hostname) else { return nil } - self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue) + public convenience init(hostname: String, + queueQoS: DispatchQoS = .default, + targetQueue: DispatchQueue? = nil, + notificationQueue: DispatchQueue? = .main) throws { + guard let ref = SCNetworkReachabilityCreateWithName(nil, hostname) else { + throw ReachabilityError.failedToCreateWithHostname(hostname, SCError()) + } + self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue, notificationQueue: notificationQueue) } - public convenience init?(queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + public convenience init(queueQoS: DispatchQoS = .default, + targetQueue: DispatchQueue? = nil, + notificationQueue: DispatchQueue? = .main) throws { var zeroAddress = sockaddr() zeroAddress.sa_len = UInt8(MemoryLayout.size) zeroAddress.sa_family = sa_family_t(AF_INET) - guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else { return nil } + guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else { + throw ReachabilityError.failedToCreateWithAddress(zeroAddress, SCError()) + } - self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue) + self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue, notificationQueue: notificationQueue) } deinit { @@ -158,20 +176,46 @@ public extension Reachability { let callback: SCNetworkReachabilityCallBack = { (reachability, flags, info) in guard let info = info else { return } - let reachability = Unmanaged.fromOpaque(info).takeUnretainedValue() - reachability.flags = flags + // `weakifiedReachability` is guaranteed to exist by virtue of our + // retain/release callbacks which we provided to the `SCNetworkReachabilityContext`. + let weakifiedReachability = Unmanaged.fromOpaque(info).takeUnretainedValue() + + // The weak `reachability` _may_ no longer exist if the `Reachability` + // object has since been deallocated but a callback was already in flight. + weakifiedReachability.reachability?.flags = flags } - var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil) - context.info = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()) + let weakifiedReachability = ReachabilityWeakifier(reachability: self) + let opaqueWeakifiedReachability = Unmanaged.passUnretained(weakifiedReachability).toOpaque() + + var context = SCNetworkReachabilityContext( + version: 0, + info: UnsafeMutableRawPointer(opaqueWeakifiedReachability), + retain: { (info: UnsafeRawPointer) -> UnsafeRawPointer in + let unmanagedWeakifiedReachability = Unmanaged.fromOpaque(info) + _ = unmanagedWeakifiedReachability.retain() + return UnsafeRawPointer(unmanagedWeakifiedReachability.toOpaque()) + }, + release: { (info: UnsafeRawPointer) -> Void in + let unmanagedWeakifiedReachability = Unmanaged.fromOpaque(info) + unmanagedWeakifiedReachability.release() + }, + copyDescription: { (info: UnsafeRawPointer) -> Unmanaged in + let unmanagedWeakifiedReachability = Unmanaged.fromOpaque(info) + let weakifiedReachability = unmanagedWeakifiedReachability.takeUnretainedValue() + let description = weakifiedReachability.reachability?.description ?? "nil" + return Unmanaged.passRetained(description as CFString) + } + ) + if !SCNetworkReachabilitySetCallback(reachabilityRef, callback, &context) { stopNotifier() - throw ReachabilityError.UnableToSetCallback + throw ReachabilityError.unableToSetCallback(SCError()) } if !SCNetworkReachabilitySetDispatchQueue(reachabilityRef, reachabilitySerialQueue) { stopNotifier() - throw ReachabilityError.UnableToSetDispatchQueue + throw ReachabilityError.unableToSetDispatchQueue(SCError()) } // Perform an initial check @@ -188,35 +232,24 @@ public extension Reachability { } // MARK: - *** Connection test methods *** - @available(*, deprecated: 4.0, message: "Please use `connection != .none`") + @available(*, deprecated, message: "Please use `connection != .none`") var isReachable: Bool { - return connection != .none + return connection != .unavailable } - @available(*, deprecated: 4.0, message: "Please use `connection == .cellular`") + @available(*, deprecated, message: "Please use `connection == .cellular`") var isReachableViaWWAN: Bool { // Check we're not on the simulator, we're REACHABLE and check we're on WWAN return connection == .cellular } - @available(*, deprecated: 4.0, message: "Please use `connection == .wifi`") + @available(*, deprecated, message: "Please use `connection == .wifi`") var isReachableViaWiFi: Bool { return connection == .wifi } var description: String { - guard let flags = flags else { return "unavailable flags" } - let W = isRunningOnDevice ? (flags.isOnWWANFlagSet ? "W" : "-") : "X" - let R = flags.isReachableFlagSet ? "R" : "-" - let c = flags.isConnectionRequiredFlagSet ? "c" : "-" - let t = flags.isTransientConnectionFlagSet ? "t" : "-" - let i = flags.isInterventionRequiredFlagSet ? "i" : "-" - let C = flags.isConnectionOnTrafficFlagSet ? "C" : "-" - let D = flags.isConnectionOnDemandFlagSet ? "D" : "-" - let l = flags.isLocalAddressFlagSet ? "l" : "-" - let d = flags.isDirectFlagSet ? "d" : "-" - - return "\(W)\(R) \(c)\(t)\(i)\(C)\(D)\(l)\(d)" + return flags?.description ?? "unavailable flags" } } @@ -227,21 +260,23 @@ fileprivate extension Reachability { var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags) { self.stopNotifier() - throw ReachabilityError.UnableToGetInitialFlags + throw ReachabilityError.unableToGetFlags(SCError()) } self.flags = flags } } - func reachabilityChanged() { - let block = connection != .none ? whenReachable : whenUnreachable - DispatchQueue.main.async { [weak self] in - guard let strongSelf = self else { return } - block?(strongSelf) - strongSelf.notificationCenter.post(name: .reachabilityChanged, object: strongSelf) + func notifyReachabilityChanged() { + let notify = { [weak self] in + guard let self = self else { return } + self.connection != .unavailable ? self.whenReachable?(self) : self.whenUnreachable?(self) + self.notificationCenter.post(name: .reachabilityChanged, object: self) } + + // notify on the configured `notificationQueue`, or the caller's (i.e. `reachabilitySerialQueue`) + notificationQueue?.async(execute: notify) ?? notify() } } @@ -250,13 +285,13 @@ extension SCNetworkReachabilityFlags { typealias Connection = Reachability.Connection var connection: Connection { - guard isReachableFlagSet else { return .none } + guard isReachableFlagSet else { return .unavailable } // If we're reachable, but not on an iOS device (i.e. simulator), we must be on WiFi #if targetEnvironment(simulator) return .wifi #else - var connection = Connection.none + var connection = Connection.unavailable if !isConnectionRequiredFlagSet { connection = .wifi @@ -313,4 +348,59 @@ extension SCNetworkReachabilityFlags { var isConnectionRequiredAndTransientFlagSet: Bool { return intersection([.connectionRequired, .transientConnection]) == [.connectionRequired, .transientConnection] } + + var description: String { + let W = isOnWWANFlagSet ? "W" : "-" + let R = isReachableFlagSet ? "R" : "-" + let c = isConnectionRequiredFlagSet ? "c" : "-" + let t = isTransientConnectionFlagSet ? "t" : "-" + let i = isInterventionRequiredFlagSet ? "i" : "-" + let C = isConnectionOnTrafficFlagSet ? "C" : "-" + let D = isConnectionOnDemandFlagSet ? "D" : "-" + let l = isLocalAddressFlagSet ? "l" : "-" + let d = isDirectFlagSet ? "d" : "-" + + return "\(W)\(R) \(c)\(t)\(i)\(C)\(D)\(l)\(d)" + } +} + +/** + `ReachabilityWeakifier` weakly wraps the `Reachability` class + in order to break retain cycles when interacting with CoreFoundation. + + CoreFoundation callbacks expect a pair of retain/release whenever an + opaque `info` parameter is provided. These callbacks exist to guard + against memory management race conditions when invoking the callbacks. + + #### Race Condition + + If we passed `SCNetworkReachabilitySetCallback` a direct reference to our + `Reachability` class without also providing corresponding retain/release + callbacks, then a race condition can lead to crashes when: + - `Reachability` is deallocated on thread X + - A `SCNetworkReachability` callback(s) is already in flight on thread Y + + #### Retain Cycle + + If we pass `Reachability` to CoreFoundtion while also providing retain/ + release callbacks, we would create a retain cycle once CoreFoundation + retains our `Reachability` class. This fixes the crashes and his how + CoreFoundation expects the API to be used, but doesn't play nicely with + Swift/ARC. This cycle would only be broken after manually calling + `stopNotifier()` — `deinit` would never be called. + + #### ReachabilityWeakifier + + By providing both retain/release callbacks and wrapping `Reachability` in + a weak wrapper, we: + - interact correctly with CoreFoundation, thereby avoiding a crash. + See "Memory Management Programming Guide for Core Foundation". + - don't alter the public API of `Reachability.swift` in any way + - still allow for automatic stopping of the notifier on `deinit`. + */ +private class ReachabilityWeakifier { + weak var reachability: Reachability? + init(reachability: Reachability) { + self.reachability = reachability + } } diff --git a/Pods/Realm/README.md b/Pods/Realm/README.md index ae255b289e..c9e93e6501 100644 --- a/Pods/Realm/README.md +++ b/Pods/Realm/README.md @@ -19,12 +19,12 @@ Please see the detailed instructions in our docs to add [Realm Objective-C](http ### Realm Objective-C The documentation can be found at [realm.io/docs/objc/latest](https://realm.io/docs/objc/latest). -The API reference is located at [realm.io/docs/objc/latest/api](https://realm.io/docs/objc/latest/api). +The API reference is located at [realm.io/docs/objc/latest/api/](https://realm.io/docs/objc/latest/api/). ### Realm Swift The documentation can be found at [realm.io/docs/swift/latest](https://realm.io/docs/swift/latest). -The API reference is located at [realm.io/docs/swift/latest/api](https://realm.io/docs/swift/latest/api). +The API reference is located at [realm.io/docs/swift/latest/api/](https://realm.io/docs/swift/latest/api/). ## Getting Help diff --git a/Pods/Realm/Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp b/Pods/Realm/Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp index 60f7a660a4..fd56c9e0e2 100644 --- a/Pods/Realm/Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp @@ -17,9 +17,11 @@ //////////////////////////////////////////////////////////////////////////// #include "impl/external_commit_helper.hpp" - #include "impl/realm_coordinator.hpp" +#include +#include + #include #include #include @@ -53,6 +55,7 @@ void notify_fd(int fd, int read_fd) read(read_fd, buff, sizeof buff); } } + } // anonymous namespace void ExternalCommitHelper::FdHolder::close() @@ -95,27 +98,38 @@ ExternalCommitHelper::ExternalCommitHelper(RealmCoordinator& parent) } #if !TARGET_OS_TV - auto path = parent.get_path() + ".note"; - // Create and open the named pipe - int ret = mkfifo(path.c_str(), 0600); - if (ret == -1) { - int err = errno; - if (err == ENOTSUP) { - // Filesystem doesn't support named pipes, so try putting it in tmp instead - // Hash collisions are okay here because they just result in doing - // extra work, as opposed to correctness problems - std::ostringstream ss; - ss << getenv("TMPDIR"); - ss << "realm_" << std::hash()(path) << ".note"; - path = ss.str(); - ret = mkfifo(path.c_str(), 0600); - err = errno; - } - // the fifo already existing isn't an error - if (ret == -1 && err != EEXIST) { - throw std::system_error(err, std::system_category()); - } + + // Object Store needs to create a named pipe in order to coordinate notifications. + // This can be a problem on some file systems (e.g. FAT32) or due to security policies in SELinux. Most commonly + // it is a problem when saving Realms on external storage: https://stackoverflow.com/questions/2740321/how-to-create-named-pipe-mkfifo-in-android + // + // For this reason we attempt to create this file in a temporary location known to be safe to write these files. + // + // In order of priority we attempt to write the file in the following locations: + // 1) Next to the Realm file itself + // 2) A location defined by `Realm::Config::fifo_files_fallback_path` + // 3) A location defined by `SharedGroupOptions::set_sys_tmp_dir()` + // + // Core has a similar policy for its named pipes. + // + // Also see https://github.com/realm/realm-java/issues/3140 + // Note that hash collisions are okay here because they just result in doing extra work instead of resulting + // in correctness problems. + + std::string path; + std::string temp_dir = util::normalize_dir(parent.get_config().fifo_files_fallback_path); + std::string sys_temp_dir = util::normalize_dir(SharedGroupOptions::get_sys_tmp_dir()); + + path = parent.get_path() + ".note"; + bool fifo_created = realm::util::try_create_fifo(path); + if (!fifo_created && !temp_dir.empty()) { + path = util::format("%1realm_%2.note", temp_dir, std::hash()(parent.get_path())); + fifo_created = realm::util::try_create_fifo(path); + } + if (!fifo_created && !sys_temp_dir.empty()) { + path = util::format("%1realm_%2.note", sys_temp_dir, std::hash()(parent.get_path())); + realm::util::create_fifo(path); } m_notify_fd = open(path.c_str(), O_RDWR); @@ -125,7 +139,7 @@ ExternalCommitHelper::ExternalCommitHelper(RealmCoordinator& parent) // Make writing to the pipe return -1 when the pipe's buffer is full // rather than blocking until there's space available - ret = fcntl(m_notify_fd, F_SETFL, O_NONBLOCK); + int ret = fcntl(m_notify_fd, F_SETFL, O_NONBLOCK); if (ret == -1) { throw std::system_error(errno, std::system_category()); } @@ -154,7 +168,7 @@ ExternalCommitHelper::ExternalCommitHelper(RealmCoordinator& parent) m_shutdown_read_fd = shutdown_pipe[0]; m_shutdown_write_fd = shutdown_pipe[1]; - m_thread = std::async(std::launch::async, [=] { + m_thread = std::thread([=] { try { listen(); } @@ -177,12 +191,12 @@ ExternalCommitHelper::ExternalCommitHelper(RealmCoordinator& parent) ExternalCommitHelper::~ExternalCommitHelper() { notify_fd(m_shutdown_write_fd, m_shutdown_read_fd); - m_thread.wait(); // Wait for the thread to exit + m_thread.join(); // Wait for the thread to exit } void ExternalCommitHelper::listen() { - pthread_setname_np("RLMRealm notification listener"); + pthread_setname_np("Realm notification listener"); // Set up the kqueue // EVFILT_READ indicates that we care about data being available to read @@ -200,11 +214,11 @@ void ExternalCommitHelper::listen() // Wait for data to become on either fd // Return code is number of bytes available or -1 on error ret = kevent(m_kq, nullptr, 0, &event, 1, nullptr); - assert(ret >= 0); - if (ret == 0) { + if (ret == 0 || (ret < 0 && errno == EINTR)) { // Spurious wakeup; just wait again continue; } + assert(ret > 0); // Check which file descriptor had activity: if it's the shutdown // pipe, then someone called -stop; otherwise it's the named pipe diff --git a/Pods/Realm/Realm/ObjectStore/src/impl/primitive_list_notifier.cpp b/Pods/Realm/Realm/ObjectStore/src/impl/primitive_list_notifier.cpp index 9be9acb11c..111807f8e9 100644 --- a/Pods/Realm/Realm/ObjectStore/src/impl/primitive_list_notifier.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/impl/primitive_list_notifier.cpp @@ -40,16 +40,17 @@ void PrimitiveListNotifier::release_data() noexcept void PrimitiveListNotifier::do_attach_to(SharedGroup& sg) { - REALM_ASSERT(m_table_handover); REALM_ASSERT(!m_table); - m_table = sg.import_table_from_handover(std::move(m_table_handover)); + if (m_table_handover) + m_table = sg.import_table_from_handover(std::move(m_table_handover)); } void PrimitiveListNotifier::do_detach_from(SharedGroup& sg) { REALM_ASSERT(!m_table_handover); if (m_table) { - m_table_handover = sg.export_table_for_handover(m_table); + if (m_table->is_attached()) + m_table_handover = sg.export_table_for_handover(m_table); m_table = {}; } } diff --git a/Pods/Realm/Realm/ObjectStore/src/impl/realm_coordinator.cpp b/Pods/Realm/Realm/ObjectStore/src/impl/realm_coordinator.cpp index 343193a479..e823fb8900 100644 --- a/Pods/Realm/Realm/ObjectStore/src/impl/realm_coordinator.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/impl/realm_coordinator.cpp @@ -25,10 +25,14 @@ #include "binding_context.hpp" #include "object_schema.hpp" #include "object_store.hpp" +#include "property.hpp" #include "schema.hpp" +#include "thread_safe_reference.hpp" #if REALM_ENABLE_SYNC #include "sync/impl/work_queue.hpp" +#include "sync/async_open_task.hpp" +#include "sync/partial_sync.hpp" #include "sync/sync_config.hpp" #include "sync/sync_manager.hpp" #include "sync/sync_session.hpp" @@ -76,7 +80,7 @@ std::shared_ptr RealmCoordinator::get_existing_coordinator(Str return it == s_coordinators_per_path.end() ? nullptr : it->second.lock(); } -void RealmCoordinator::create_sync_session() +void RealmCoordinator::create_sync_session(bool force_client_resync, bool validate_sync_history) { #if REALM_ENABLE_SYNC if (m_sync_session) @@ -93,8 +97,8 @@ void RealmCoordinator::create_sync_session() } auto sync_config = *m_config.sync_config; - sync_config.validate_sync_history = false; - m_sync_session = SyncManager::shared().get_session(m_config.path, sync_config); + sync_config.validate_sync_history = validate_sync_history; + m_sync_session = SyncManager::shared().get_session(m_config.path, sync_config, force_client_resync); std::weak_ptr weak_self = shared_from_this(); SyncSession::Internal::set_sync_transact_callback(*m_sync_session, @@ -106,6 +110,9 @@ void RealmCoordinator::create_sync_session() self->m_notifier->notify_others(); } }); +#else + static_cast(force_client_resync); + static_cast(validate_sync_history); #endif } @@ -178,11 +185,40 @@ void RealmCoordinator::set_config(const Realm::Config& config) } } #endif + // Mixing cached and uncached Realms is allowed + m_config.cache = config.cache; // Realm::update_schema() handles complaining about schema mismatches } } +std::shared_ptr RealmCoordinator::get_cached_realm(Realm::Config const& config, AnyExecutionContextID execution_context) +{ + if (!config.cache) + return nullptr; + for (auto& cached_realm : m_weak_realm_notifiers) { + if (!cached_realm.is_cached_for_execution_context(execution_context)) + continue; + // can be null if we jumped in between ref count hitting zero and + // unregister_realm() getting the lock + if (auto realm = cached_realm.realm()) { + // If the file is uninitialized and was opened without a schema, + // do the normal schema init + if (realm->schema_version() == ObjectStore::NotVersioned) + break; + + // Otherwise if we have a realm schema it needs to be an exact + // match (even having the same properties but in different + // orders isn't good enough) + if (config.schema && realm->schema() != *config.schema) + throw MismatchedConfigException("Realm at path '%1' already opened on current thread with different schema.", config.path); + + return realm; + } + } + return nullptr; +} + std::shared_ptr RealmCoordinator::get_realm(Realm::Config config) { // realm must be declared before lock so that the mutex is released before @@ -190,68 +226,125 @@ std::shared_ptr RealmCoordinator::get_realm(Realm::Config config) // to acquire the same lock std::shared_ptr realm; std::unique_lock lock(m_realm_mutex); - set_config(config); + if ((realm = get_cached_realm(config, config.execution_context))) + return realm; + do_get_realm(std::move(config), realm, lock); + return realm; +} + +std::shared_ptr RealmCoordinator::get_realm() +{ + std::shared_ptr realm; + std::unique_lock lock(m_realm_mutex); + if ((realm = get_cached_realm(m_config, m_config.execution_context))) + return realm; + do_get_realm(m_config, realm, lock); + return realm; +} + +ThreadSafeReference RealmCoordinator::get_unbound_realm() +{ + ThreadSafeReference ref; + std::unique_lock lock(m_realm_mutex); + do_get_realm(m_config, ref.m_realm, lock, false); + return ref; +} +void RealmCoordinator::do_get_realm(Realm::Config config, std::shared_ptr& realm, + std::unique_lock& realm_lock, bool bind_to_context) +{ auto schema = std::move(config.schema); auto migration_function = std::move(config.migration_function); auto initialization_function = std::move(config.initialization_function); + auto audit_factory = std::move(config.audit_factory); config.schema = {}; - if (config.cache) { - AnyExecutionContextID execution_context(config.execution_context); - for (auto& cached_realm : m_weak_realm_notifiers) { - if (!cached_realm.is_cached_for_execution_context(execution_context)) - continue; - // can be null if we jumped in between ref count hitting zero and - // unregister_realm() getting the lock - if ((realm = cached_realm.realm())) { - // If the file is uninitialized and was opened without a schema, - // do the normal schema init - if (realm->schema_version() == ObjectStore::NotVersioned) - break; - - // Otherwise if we have a realm schema it needs to be an exact - // match (even having the same properties but in different - // orders isn't good enough) - if (schema && realm->schema() != *schema) - throw MismatchedConfigException("Realm at path '%1' already opened on current thread with different schema.", config.path); - - return realm; - } + bool should_initialize_notifier = !config.immutable() && config.automatic_change_notifications; + realm = Realm::make_shared_realm(std::move(config), shared_from_this()); + if (!m_notifier && should_initialize_notifier) { + try { + m_notifier = std::make_unique(*this); } - } - - if (!realm) { - bool should_initialize_notifier = !config.immutable() && config.automatic_change_notifications; - realm = Realm::make_shared_realm(std::move(config), shared_from_this()); - if (!m_notifier && should_initialize_notifier) { - try { - m_notifier = std::make_unique(*this); - } - catch (std::system_error const& ex) { - throw RealmFileException(RealmFileException::Kind::AccessError, get_path(), ex.code().message(), ""); - } + catch (std::system_error const& ex) { + throw RealmFileException(RealmFileException::Kind::AccessError, get_path(), ex.code().message(), ""); } - m_weak_realm_notifiers.emplace_back(realm, realm->config().cache); } + m_weak_realm_notifiers.emplace_back(realm, realm->config().cache, bind_to_context); if (realm->config().sync_config) - create_sync_session(); + create_sync_session(false, false); + + if (!m_audit_context && audit_factory) + m_audit_context = audit_factory(); + realm_lock.unlock(); if (schema) { - lock.unlock(); +#if REALM_ENABLE_SYNC && REALM_PLATFORM_JAVA + // Workaround for https://github.com/realm/realm-java/issues/6619 + // Between Realm Java 5.10.0 and 5.13.0 created_at/updated_at was optional + // when created from Java, even though the Object Store code specified them as + // required. Due to how the Realm was initialized, this wasn't a problem before + // 5.13.0, but after that the Object Store initializer code was changed causing + // problems when Java clients upgraded. In order to prevent older clients from + // breaking with a schema mismatch when upgrading we thus fix the schema in transit. + // This means that schema reported back from Realm will be different than the one + // specified in the Java model class, but this seemed like the approach with the + // least amount of disadvantages. + if (realm->is_partial()) { + auto& new_schema = schema.value(); + auto current_schema = realm->schema(); + auto current_resultsets_schema_obj = current_schema.find("__ResultSets"); + if (current_resultsets_schema_obj != current_schema.end()) { + Property* p = current_resultsets_schema_obj->property_for_public_name("created_at"); + if (is_nullable(p->type)) { + auto it = new_schema.find("__ResultSets"); + if (it != new_schema.end()) { + auto created_at_property = it->property_for_public_name("created_at"); + auto updated_at_property = it->property_for_public_name("updated_at"); + if (created_at_property && updated_at_property) { + created_at_property->type = created_at_property->type | PropertyType::Nullable; + updated_at_property->type = updated_at_property->type | PropertyType::Nullable; + } + } + } + } + } +#endif realm->update_schema(std::move(*schema), config.schema_version, std::move(migration_function), std::move(initialization_function)); } +#if REALM_ENABLE_SYNC + else if (realm->is_partial()) + _impl::ensure_partial_sync_schema_initialized(*realm); +#endif +} - return realm; +void RealmCoordinator::bind_to_context(Realm& realm, AnyExecutionContextID execution_context) +{ + std::unique_lock lock(m_realm_mutex); + for (auto& cached_realm : m_weak_realm_notifiers) { + if (!cached_realm.is_for_realm(&realm)) + continue; + cached_realm.bind_to_execution_context(execution_context); + return; + } + REALM_TERMINATE("Invalid Realm passed to bind_to_context()"); } -std::shared_ptr RealmCoordinator::get_realm() +#if REALM_ENABLE_SYNC +std::shared_ptr RealmCoordinator::get_synchronized_realm(Realm::Config config) { - return get_realm(m_config); + if (!config.sync_config) + throw std::logic_error("This method is only available for fully synchronized Realms."); + + std::unique_lock lock(m_realm_mutex); + set_config(config); + bool exists = File::exists(m_config.path); + create_sync_session(!config.sync_config->is_partial && !exists, exists); + return std::make_shared(shared_from_this(), m_sync_session); } +#endif bool RealmCoordinator::get_cached_schema(Schema& schema, uint64_t& schema_version, uint64_t& transaction) const noexcept @@ -301,7 +394,7 @@ void RealmCoordinator::advance_schema_cache(uint64_t previous, uint64_t next) RealmCoordinator::RealmCoordinator() #if REALM_ENABLE_SYNC -: m_partial_sync_work_queue(std::make_unique()) +: m_partial_sync_work_queue(std::make_unique<_impl::partial_sync::WorkQueue>()) #endif { } @@ -321,10 +414,19 @@ RealmCoordinator::~RealmCoordinator() void RealmCoordinator::unregister_realm(Realm* realm) { - std::lock_guard lock(m_realm_mutex); - auto new_end = remove_if(begin(m_weak_realm_notifiers), end(m_weak_realm_notifiers), - [=](auto& notifier) { return notifier.expired() || notifier.is_for_realm(realm); }); - m_weak_realm_notifiers.erase(new_end, end(m_weak_realm_notifiers)); + // Normally results notifiers are cleaned up by the background worker thread + // but if that's disabled we need to ensure that any notifiers from this + // Realm get cleaned up + if (!m_config.automatic_change_notifications) { + std::unique_lock lock(m_notifier_mutex); + clean_up_dead_notifiers(); + } + { + std::lock_guard lock(m_realm_mutex); + auto new_end = remove_if(begin(m_weak_realm_notifiers), end(m_weak_realm_notifiers), + [=](auto& notifier) { return notifier.expired() || notifier.is_for_realm(realm); }); + m_weak_realm_notifiers.erase(new_end, end(m_weak_realm_notifiers)); + } } void RealmCoordinator::clear_cache() @@ -864,11 +966,10 @@ void RealmCoordinator::process_available_async(Realm& realm) if (notifiers.empty()) return; - if (realm.m_binding_context) - realm.m_binding_context->will_send_notifications(); - if (auto error = m_async_error) { lock.unlock(); + if (realm.m_binding_context) + realm.m_binding_context->will_send_notifications(); for (auto& notifier : notifiers) notifier->deliver_error(m_async_error); if (realm.m_binding_context) @@ -878,19 +979,25 @@ void RealmCoordinator::process_available_async(Realm& realm) bool in_read = realm.is_in_read_transaction(); auto& sg = Realm::Internal::get_shared_group(realm); - if (!sg) // i.e. the Realm was closed in a callback above - return; auto version = sg->get_version_of_current_transaction(); auto package = [&](auto& notifier) { return !(notifier->has_run() && (!in_read || notifier->version() == version) && notifier->package_for_delivery()); }; notifiers.erase(std::remove_if(begin(notifiers), end(notifiers), package), end(notifiers)); + if (notifiers.empty()) + return; lock.unlock(); // no before advance because the Realm is already at the given version, // because we're either sending initial notifications or the write was // done on this Realm instance + if (realm.m_binding_context) { + realm.m_binding_context->will_send_notifications(); + if (!sg) // i.e. the Realm was closed in the callback above + return; + } + // Skip delivering if the Realm isn't in a read transaction if (in_read) { for (auto& notifier : notifiers) @@ -907,12 +1014,12 @@ void RealmCoordinator::process_available_async(Realm& realm) void RealmCoordinator::set_transaction_callback(std::function fn) { - create_sync_session(); + create_sync_session(false, false); m_transaction_callback = std::move(fn); } #if REALM_ENABLE_SYNC -partial_sync::WorkQueue& RealmCoordinator::partial_sync_work_queue() +_impl::partial_sync::WorkQueue& RealmCoordinator::partial_sync_work_queue() { return *m_partial_sync_work_queue; } diff --git a/Pods/Realm/Realm/ObjectStore/src/impl/weak_realm_notifier.cpp b/Pods/Realm/Realm/ObjectStore/src/impl/weak_realm_notifier.cpp index 1620eeab4f..d52c2e6258 100644 --- a/Pods/Realm/Realm/ObjectStore/src/impl/weak_realm_notifier.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/impl/weak_realm_notifier.cpp @@ -24,13 +24,12 @@ using namespace realm; using namespace realm::_impl; - -WeakRealmNotifier::WeakRealmNotifier(const std::shared_ptr& realm, bool cache) +WeakRealmNotifier::WeakRealmNotifier(const std::shared_ptr& realm, bool cache, bool bind_to_context) : m_realm(realm) , m_execution_context(realm->config().execution_context) , m_realm_key(realm.get()) , m_cache(cache) -, m_signal(std::make_shared>(Callback{realm})) +, m_signal(bind_to_context ? std::make_shared>(Callback{realm}) : nullptr) { } @@ -45,5 +44,13 @@ void WeakRealmNotifier::Callback::operator()() const void WeakRealmNotifier::notify() { - m_signal->notify(); + if (m_signal) + m_signal->notify(); +} + +void WeakRealmNotifier::bind_to_execution_context(AnyExecutionContextID context) +{ + REALM_ASSERT(!m_signal); + m_signal = std::make_shared>(Callback{m_realm}); + m_execution_context = context; } diff --git a/Pods/Realm/Realm/ObjectStore/src/object_schema.cpp b/Pods/Realm/Realm/ObjectStore/src/object_schema.cpp index e5082fb0d7..4e6f4d8dec 100644 --- a/Pods/Realm/Realm/ObjectStore/src/object_schema.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/object_schema.cpp @@ -93,7 +93,8 @@ ObjectSchema::ObjectSchema(Group const& group, StringData name, size_t index) : set_primary_key_property(); } -Property *ObjectSchema::property_for_name(StringData name) { +Property *ObjectSchema::property_for_name(StringData name) +{ for (auto& prop : persisted_properties) { if (StringData(prop.name) == name) { return ∝ @@ -107,11 +108,36 @@ Property *ObjectSchema::property_for_name(StringData name) { return nullptr; } -const Property *ObjectSchema::property_for_name(StringData name) const { +Property *ObjectSchema::property_for_public_name(StringData public_name) +{ + // If no `public_name` is defined, the internal `name` is also considered the public name. + for (auto& prop : persisted_properties) { + if (prop.public_name == public_name || (prop.public_name.empty() && prop.name == public_name)) + return ∝ + } + + // Computed properties are not persisted, so creating a public name for such properties + // are a bit pointless since the internal name is already the "public name", but since + // this distinction isn't visible in the Property struct we allow it anyway. + for (auto& prop : computed_properties) { + if ((prop.public_name.empty() ? StringData(prop.name) : StringData(prop.public_name)) == public_name) + return ∝ + } + return nullptr; +} + +const Property *ObjectSchema::property_for_public_name(StringData public_name) const +{ + return const_cast(this)->property_for_public_name(public_name); +} + +const Property *ObjectSchema::property_for_name(StringData name) const +{ return const_cast(this)->property_for_name(name); } -bool ObjectSchema::property_is_computed(Property const& property) const { +bool ObjectSchema::property_is_computed(Property const& property) const +{ auto end = computed_properties.end(); return std::find(computed_properties.begin(), end, property) != end; } @@ -214,6 +240,62 @@ static void validate_property(Schema const& schema, void ObjectSchema::validate(Schema const& schema, std::vector& exceptions) const { + std::vector public_property_names; + std::vector internal_property_names; + internal_property_names.reserve(persisted_properties.size() + computed_properties.size()); + auto gather_names = [&](auto const &properties) { + for (auto const &prop : properties) { + internal_property_names.push_back(prop.name); + if (!prop.public_name.empty()) + public_property_names.push_back(prop.public_name); + } + }; + gather_names(persisted_properties); + gather_names(computed_properties); + std::sort(public_property_names.begin(), public_property_names.end()); + std::sort(internal_property_names.begin(), internal_property_names.end()); + + // Check that property names and aliases are unique + auto for_each_duplicate = [](auto &&container, auto &&fn) { + auto end = container.end(); + for (auto it = std::adjacent_find(container.begin(), end); it != end; it = std::adjacent_find(it + 2, end)) + fn(*it); + }; + for_each_duplicate(public_property_names, [&](auto public_property_name) { + exceptions.emplace_back("Alias '%1' appears more than once in the schema for type '%2'.", + public_property_name, name); + }); + for_each_duplicate(internal_property_names, [&](auto internal_name) { + exceptions.emplace_back("Property '%1' appears more than once in the schema for type '%2'.", + internal_name, name); + }); + + // Check that no aliases conflict with property names + struct ErrorWriter { + ObjectSchema const &os; + std::vector &exceptions; + + struct Proxy { + ObjectSchema const &os; + std::vector &exceptions; + + Proxy &operator=(StringData name) { + exceptions.emplace_back( + "Property '%1.%2' has an alias '%3' that conflicts with a property of the same name.", + os.name, os.property_for_public_name(name)->name, name); + return *this; + } + }; + + Proxy operator*() { return Proxy{os, exceptions}; } + ErrorWriter &operator=(const ErrorWriter &) { return *this; } + ErrorWriter &operator++() { return *this; } + ErrorWriter &operator++(int) { return *this; } + } writer{*this, exceptions}; + std::set_intersection(public_property_names.begin(), public_property_names.end(), + internal_property_names.begin(), internal_property_names.end(), writer); + + // Validate all properties const Property *primary = nullptr; for (auto const& prop : persisted_properties) { validate_property(schema, name, prop, &primary, exceptions); diff --git a/Pods/Realm/Realm/ObjectStore/src/results.cpp b/Pods/Realm/Realm/ObjectStore/src/results.cpp index 9b0e107a7a..15c21f2312 100644 --- a/Pods/Realm/Realm/ObjectStore/src/results.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/results.cpp @@ -20,6 +20,7 @@ #include "impl/realm_coordinator.hpp" #include "impl/results_notifier.hpp" +#include "audit.hpp" #include "object_schema.hpp" #include "object_store.hpp" #include "schema.hpp" @@ -267,6 +268,8 @@ void Results::evaluate_query_if_needed(bool wants_notifications) prepare_async(ForCallback{false}); m_has_used_table_view = true; m_table_view.sync_if_needed(); + if (auto audit = m_realm->audit_context()) + audit->record_query(m_realm->read_transaction_version(), m_table_view); break; } } @@ -624,14 +627,21 @@ Results Results::apply_ordering(DescriptorOrdering&& ordering) DescriptorOrdering new_order = m_descriptor_ordering; for (size_t i = 0; i < ordering.size(); ++i) { auto desc = ordering[i]; - if (auto sort = dynamic_cast(desc)) - new_order.append_sort(std::move(*sort)); - else if (auto distinct = dynamic_cast(desc)) - new_order.append_distinct(std::move(*distinct)); - else if (auto limit = dynamic_cast(desc)) - new_order.append_limit(std::move(*limit)); - else - REALM_COMPILER_HINT_UNREACHABLE(); + DescriptorType desc_type = ordering.get_type(i); + switch (desc_type) { + case DescriptorType::Sort: + new_order.append_sort(std::move(*dynamic_cast(desc))); + break; + case DescriptorType::Distinct: + new_order.append_distinct(std::move(*dynamic_cast(desc))); + break; + case DescriptorType::Limit: + new_order.append_limit(std::move(*dynamic_cast(desc))); + break; + case DescriptorType::Include: + new_order.append_include(std::move(*dynamic_cast(desc))); + break; + } } return Results(m_realm, get_query(), std::move(new_order)); } diff --git a/Pods/Realm/Realm/ObjectStore/src/schema.cpp b/Pods/Realm/Realm/ObjectStore/src/schema.cpp index 7916fee577..4b572e7524 100644 --- a/Pods/Realm/Realm/ObjectStore/src/schema.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/schema.cpp @@ -80,6 +80,7 @@ void Schema::validate() const { std::vector exceptions; + // As the types are added sorted by name, we can detect duplicates by just looking at the following element. auto find_next_duplicate = [&](const_iterator start) { return std::adjacent_find(start, cend(), [](ObjectSchema const& lft, ObjectSchema const& rgt) { return lft.name == rgt.name; diff --git a/Pods/Realm/Realm/ObjectStore/src/shared_realm.cpp b/Pods/Realm/Realm/ObjectStore/src/shared_realm.cpp index 80f2e24fec..a3f266558a 100644 --- a/Pods/Realm/Realm/ObjectStore/src/shared_realm.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/shared_realm.cpp @@ -22,6 +22,7 @@ #include "impl/realm_coordinator.hpp" #include "impl/transact_log_handler.hpp" +#include "audit.hpp" #include "binding_context.hpp" #include "list.hpp" #include "object.hpp" @@ -33,6 +34,8 @@ #include #include +#include + #if REALM_ENABLE_SYNC #include "sync/impl/sync_file.hpp" @@ -144,7 +147,7 @@ REALM_NOINLINE static void translate_file_exception(StringData path, bool immuta static bool is_nonupgradable_history(IncompatibleHistories const& ex) { // FIXME: Replace this with a proper specific exception type once Core adds support for it. - return ex.what() == std::string("Incompatible histories. Nonupgradable history schema"); + return std::string(ex.what()).find(std::string("Incompatible histories. Nonupgradable history schema")) != npos; } #endif @@ -180,6 +183,9 @@ void Realm::open_with_config(const Config& config, SharedGroupOptions options; options.durability = config.in_memory ? SharedGroupOptions::Durability::MemOnly : SharedGroupOptions::Durability::Full; + if (!config.fifo_files_fallback_path.empty()) { + options.temp_dir = util::normalize_dir(config.fifo_files_fallback_path); + } options.encryption_key = config.encryption_key.data(); options.allow_file_format_upgrade = !config.disable_format_upgrade && config.schema_mode != SchemaMode::ResetFile; @@ -205,7 +211,7 @@ void Realm::open_with_config(const Config& config, translate_file_exception(config.path, config.immutable()); // Throws // Move the Realm file into the recovery directory. - std::string recovery_directory = SyncManager::shared().recovery_directory_path(); + std::string recovery_directory = SyncManager::shared().recovery_directory_path(config.sync_config ? config.sync_config->recovery_directory : none); std::string new_realm_path = util::reserve_unique_file_name(recovery_directory, "synced-realm-XXXXXXX"); util::File::move(config.path, new_realm_path); @@ -267,6 +273,26 @@ SharedRealm Realm::get_shared_realm(Config config) return coordinator->get_realm(std::move(config)); } +SharedRealm Realm::get_shared_realm(ThreadSafeReference ref, util::Optional execution_context) +{ + REALM_ASSERT(ref.m_realm); + auto& config = ref.m_realm->config(); + auto coordinator = RealmCoordinator::get_coordinator(config.path); + if (auto realm = coordinator->get_cached_realm(config, execution_context)) + return realm; + coordinator->bind_to_context(*ref.m_realm, execution_context); + ref.m_realm->m_execution_context = execution_context; + return std::move(ref.m_realm); +} + +#if REALM_ENABLE_SYNC +std::shared_ptr Realm::get_synchronized_realm(Config config) +{ + auto coordinator = RealmCoordinator::get_coordinator(config.path); + return coordinator->get_synchronized_realm(std::move(config)); +} +#endif + void Realm::set_schema(Schema const& reference, Schema schema) { m_dynamic_schema = false; @@ -585,14 +611,14 @@ void Realm::notify_schema_changed() } } -static void check_read_write(Realm *realm) +static void check_read_write(const Realm* realm) { if (realm->config().immutable()) { throw InvalidTransactionException("Can't perform transactions on read-only Realms."); } } -static void check_write(Realm* realm) +static void check_write(const Realm* realm) { if (realm->config().immutable() || realm->config().read_only_alternative()) { throw InvalidTransactionException("Can't perform transactions on read-only Realms."); @@ -623,6 +649,14 @@ void Realm::verify_open() const } } +VersionID Realm::read_transaction_version() const +{ + verify_thread(); + verify_open(); + check_read_write(this); + return m_shared_group->get_version_of_current_transaction(); +} + bool Realm::is_in_transaction() const noexcept { if (!m_shared_group) { @@ -678,7 +712,15 @@ void Realm::commit_transaction() throw InvalidTransactionException("Can't commit a non-existing write transaction"); } - m_coordinator->commit_write(*this); + if (auto audit = audit_context()) { + auto prev_version = m_shared_group->pin_version(); + m_coordinator->commit_write(*this); + audit->record_write(prev_version, m_shared_group->get_version_of_current_transaction()); + m_shared_group->unpin_version(prev_version); + } + else { + m_coordinator->commit_write(*this); + } cache_new_schema(); invalidate_permission_cache(); } @@ -779,6 +821,9 @@ void Realm::notify() if (m_binding_context) { m_binding_context->before_notify(); + if (is_closed() || is_in_transaction()) { + return; + } } auto cleanup = util::make_scope_exit([this]() noexcept { m_is_sending_notifications = false; }); @@ -864,7 +909,7 @@ bool Realm::refresh() bool Realm::can_deliver_notifications() const noexcept { - if (m_config.immutable()) { + if (m_config.immutable() || !m_config.automatic_change_notifications) { return false; } @@ -987,6 +1032,11 @@ template Object Realm::resolve_thread_safe_reference(ThreadSafeReference template List Realm::resolve_thread_safe_reference(ThreadSafeReference reference); template Results Realm::resolve_thread_safe_reference(ThreadSafeReference reference); +AuditInterface* Realm::audit_context() const noexcept +{ + return m_coordinator ? m_coordinator->audit_context() : nullptr; +} + #if REALM_ENABLE_SYNC static_assert(static_cast(ComputedPrivileges::Read) == static_cast(sync::Privilege::Read), ""); static_assert(static_cast(ComputedPrivileges::Update) == static_cast(sync::Privilege::Update), ""); @@ -1107,8 +1157,3 @@ Group& RealmFriend::read_group_to(Realm& realm, VersionID version) realm.begin_read(version); return *realm.m_group; } - -std::size_t Realm::compute_size() { - Group& group = read_group(); - return group.compute_aggregated_byte_size(); -} diff --git a/Pods/Realm/Realm/ObjectStore/src/sync/async_open_task.cpp b/Pods/Realm/Realm/ObjectStore/src/sync/async_open_task.cpp new file mode 100644 index 0000000000..3189cd5b48 --- /dev/null +++ b/Pods/Realm/Realm/ObjectStore/src/sync/async_open_task.cpp @@ -0,0 +1,89 @@ +//////////////////////////////////////////////////////////////////////////// +// +// Copyright 2019 Realm Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////// + +#include "sync/async_open_task.hpp" + +#include "impl/realm_coordinator.hpp" +#include "sync/sync_manager.hpp" +#include "sync/sync_session.hpp" +#include "thread_safe_reference.hpp" + +namespace realm { + +AsyncOpenTask::AsyncOpenTask(std::shared_ptr<_impl::RealmCoordinator> coordinator, std::shared_ptr session) +: m_coordinator(coordinator) +, m_session(session) +{ +} + +void AsyncOpenTask::start(std::function, std::exception_ptr)> callback) +{ + auto session = m_session.load(); + if (!session) + return; + + std::shared_ptr self(shared_from_this()); + session->wait_for_download_completion([callback, self, this](std::error_code ec) { + auto session = m_session.exchange(nullptr); + if (!session) + return; // Swallow all events if the task as been canceled. + + // Release our references to the coordinator after calling the callback + auto coordinator = std::move(m_coordinator); + m_coordinator = nullptr; + + if (ec) + return callback({}, std::make_exception_ptr(std::system_error(ec))); + + ThreadSafeReference realm; + try { + realm = coordinator->get_unbound_realm(); + } + catch (...) { + return callback({}, std::current_exception()); + } + callback(std::move(realm), nullptr); + }); +} + +void AsyncOpenTask::cancel() +{ + if (auto session = m_session.exchange(nullptr)) { + // Does a better way exists for canceling the download? + session->log_out(); + m_coordinator = nullptr; + } +} + +uint64_t AsyncOpenTask::register_download_progress_notifier(std::function callback) +{ + if (auto session = m_session.load()) { + return session->register_progress_notifier(callback, realm::SyncSession::NotifierType::download, false); + } + else { + return 0; + } +} + +void AsyncOpenTask::unregister_download_progress_notifier(uint64_t token) +{ + if (auto session = m_session.load()) + session->unregister_progress_notifier(token); +} + +} diff --git a/Pods/Realm/Realm/ObjectStore/src/sync/impl/sync_metadata.cpp b/Pods/Realm/Realm/ObjectStore/src/sync/impl/sync_metadata.cpp index 5ac913421a..99dbee4f81 100644 --- a/Pods/Realm/Realm/ObjectStore/src/sync/impl/sync_metadata.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/sync/impl/sync_metadata.cpp @@ -87,6 +87,7 @@ SyncMetadataManager::SyncMetadataManager(std::string path, constexpr uint64_t SCHEMA_VERSION = 2; Realm::Config config; + config.automatic_change_notifications = false; config.path = path; config.schema = make_schema(); config.schema_version = SCHEMA_VERSION; @@ -188,8 +189,7 @@ SyncUserMetadataResults SyncMetadataManager::all_users_marked_for_removal() cons SyncUserMetadataResults SyncMetadataManager::get_users(bool marked) const { - SharedRealm realm = Realm::get_shared_realm(m_metadata_config); - + auto realm = get_realm(); TableRef table = ObjectStore::table_for_object_type(realm->read_group(), c_sync_userMetadata); Query query = table->where().equal(m_user_schema.idx_marked_for_removal, marked); @@ -199,34 +199,17 @@ SyncUserMetadataResults SyncMetadataManager::get_users(bool marked) const SyncFileActionMetadataResults SyncMetadataManager::all_pending_actions() const { - SharedRealm realm = Realm::get_shared_realm(m_metadata_config); + auto realm = get_realm(); TableRef table = ObjectStore::table_for_object_type(realm->read_group(), c_sync_fileActionMetadata); Results results(realm, table->where()); return SyncFileActionMetadataResults(std::move(results), std::move(realm), m_file_action_schema); } -bool SyncMetadataManager::delete_metadata_action(const std::string& original_name) const -{ - auto shared_realm = Realm::get_shared_realm(m_metadata_config); - - // Retrieve the row for this object. - TableRef table = ObjectStore::table_for_object_type(shared_realm->read_group(), c_sync_fileActionMetadata); - shared_realm->begin_transaction(); - size_t row_idx = table->find_first_string(m_file_action_schema.idx_original_name, original_name); - if (row_idx == not_found) { - shared_realm->cancel_transaction(); - return false; - } - table->move_last_over(row_idx); - shared_realm->commit_transaction(); - return true; -} - util::Optional SyncMetadataManager::get_or_make_user_metadata(const std::string& identity, const std::string& url, bool make_if_absent) const { - auto realm = Realm::get_shared_realm(m_metadata_config); + auto realm = get_realm(); auto& schema = m_user_schema; // Retrieve or create the row for this object. @@ -286,38 +269,41 @@ util::Optional SyncMetadataManager::get_or_make_user_metadata( return SyncUserMetadata(schema, std::move(realm), std::move(*row)); } -SyncFileActionMetadata SyncMetadataManager::make_file_action_metadata(const std::string &original_name, - const std::string &url, - const std::string &local_uuid, - SyncFileActionMetadata::Action action, - util::Optional new_name) const +void SyncMetadataManager::make_file_action_metadata(StringData original_name, + StringData url, + StringData local_uuid, + SyncFileActionMetadata::Action action, + StringData new_name) const { - size_t raw_action = static_cast(action); - - // Open the Realm. - auto realm = Realm::get_shared_realm(m_metadata_config); - auto& schema = m_file_action_schema; + // This function can't use get_shared_realm() because it's called on a + // background thread and that's currently not supported by the libuv + // implementation of EventLoopSignal + std::unique_ptr history; + std::unique_ptr shared_group; + std::unique_ptr read_only_group; + Realm::open_with_config(m_metadata_config, history, shared_group, read_only_group, nullptr); // Retrieve or create the row for this object. - TableRef table = ObjectStore::table_for_object_type(realm->read_group(), c_sync_fileActionMetadata); - realm->begin_transaction(); + WriteTransaction wt(*shared_group); + TableRef table = ObjectStore::table_for_object_type(wt.get_group(), c_sync_fileActionMetadata); + + auto& schema = m_file_action_schema; size_t row_idx = table->find_first_string(schema.idx_original_name, original_name); if (row_idx == not_found) { row_idx = table->add_empty_row(); table->set_string(schema.idx_original_name, row_idx, original_name); } table->set_string(schema.idx_new_name, row_idx, new_name); - table->set_int(schema.idx_action, row_idx, raw_action); + table->set_int(schema.idx_action, row_idx, static_cast(action)); table->set_string(schema.idx_url, row_idx, url); table->set_string(schema.idx_user_identity, row_idx, local_uuid); - realm->commit_transaction(); - return SyncFileActionMetadata(schema, std::move(realm), table->get(row_idx)); + wt.commit(); } -util::Optional SyncMetadataManager::get_file_action_metadata(const std::string& original_name) const +util::Optional SyncMetadataManager::get_file_action_metadata(StringData original_name) const { - auto realm = Realm::get_shared_realm(m_metadata_config); - auto schema = m_file_action_schema; + auto realm = get_realm(); + auto& schema = m_file_action_schema; TableRef table = ObjectStore::table_for_object_type(realm->read_group(), c_sync_fileActionMetadata); size_t row_idx = table->find_first_string(schema.idx_original_name, original_name); if (row_idx == not_found) @@ -326,6 +312,13 @@ util::Optional SyncMetadataManager::get_file_action_meta return SyncFileActionMetadata(std::move(schema), std::move(realm), table->get(row_idx)); } +std::shared_ptr SyncMetadataManager::get_realm() const +{ + auto realm = Realm::get_shared_realm(m_metadata_config); + realm->refresh(); + return realm; +} + // MARK: - Sync user metadata SyncUserMetadata::SyncUserMetadata(Schema schema, SharedRealm realm, RowExpr row) diff --git a/Pods/Realm/Realm/ObjectStore/src/sync/partial_sync.cpp b/Pods/Realm/Realm/ObjectStore/src/sync/partial_sync.cpp index 5a2bec6328..1b104c6154 100644 --- a/Pods/Realm/Realm/ObjectStore/src/sync/partial_sync.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/sync/partial_sync.cpp @@ -33,41 +33,141 @@ #include #include +#include +#include + +using namespace std::chrono; + namespace { -constexpr const char* result_sets_type_name = "__ResultSets"; + + // Delete all subscriptions that are no longer relevant. + // This method must be called within a write transaction. + void cleanup_subscriptions(realm::Group& group, realm::Timestamp now) + { + // Remove all subscriptions no longer considered "active" + // "inactive" is currently defined as any subscription with an `expires_at` < now()` + // + // Note, that we do not check if someone is actively using the subscription right now (this + // is also hard to get right). This does leave some loop holes where a subscription might be + // removed while still in use. E.g. consider a Kiosk app showing a screen 24/7 with a background + // job that accidentially triggers the cleanup codepath. This case is considered rare, but should + // still be documented. + auto table = realm::ObjectStore::table_for_object_type(group, realm::partial_sync::result_sets_type_name); + + size_t expires_at_col_ndx = table->get_column_index(realm::partial_sync::property_expires_at); + realm::TableView results = table->where().less(expires_at_col_ndx, now).find_all(); + results.clear(realm::RemoveMode::unordered); + } + + // Calculates the expiry date, claming at the high end if a timestamp overflows + realm::Timestamp calculate_expiry_date(realm::Timestamp starting_time, int64_t user_ttl_ms) + { + auto tp = starting_time.get_time_point(); + using time_point = decltype(tp); + milliseconds ttl(user_ttl_ms); + if (time_point::max() - ttl < tp) + return time_point::max(); + return tp + ttl; + } + + using namespace ::realm; + using namespace ::realm::partial_sync; + struct ParitalSyncProperty { + const char *name; + DataType type; + bool nullable; + bool indexed; + }; + + static constexpr const ParitalSyncProperty s_partial_sync_schema[] = { + {property_query, type_String, false, false}, + {property_matches_property_name, type_String, false, false}, + {property_status, type_Int, false, false}, + {property_error_message, type_String, false, false}, + {property_query_parse_counter, type_Int, false, false}, + + // Add columns not required by Sync, but used by the bindings to offer better tracking of subscriptions. + // These columns are not automatically added by the server, so we need to add them manually if needed. + + // Name used to uniquely identify a subscription. If a name isn't provided for a subscription one will be + // autogenerated. + {property_name, type_String, false, true}, + + // Timestamp for when then the subscription is created. This should only be set the first time the subscription + // is created. + {property_created_at, type_Timestamp, false, false}, + + // Timestamp for when the subscription is either updated or someone resubscribes to it. + {property_updated_at, type_Timestamp, false, false}, + + // Relative time-to-live in milliseconds. This indicates the period from when a subscription was last updated + // to when it isn't considered valid anymore and can be safely deleted. Realm will attempt to perform this + // cleanup automatically either when the app is started or someone discards the subscription token for it. + {property_time_to_live, type_Int, true, false}, // null = infinite TTL + + // Timestamp representing the fixed point in time when this subscription isn't valid anymore and can + // be safely deleted. This value should be considered read-only from the perspective of any Bindings + // and should never be modified by itself, but only updated whenever the `updatedAt` or `timefield is. + {property_expires_at, type_Timestamp, true, false}, // null = Subscription never expires + }; } namespace realm { namespace _impl { +using namespace ::realm::partial_sync; void initialize_schema(Group& group) { std::string result_sets_table_name = ObjectStore::table_name_for_object_type(result_sets_type_name); TableRef table = group.get_table(result_sets_table_name); if (!table) { + // Create the schema required by Sync table = sync::create_table(group, result_sets_table_name); - table->add_column(type_String, "query"); - table->add_column(type_String, "matches_property"); - table->add_column(type_Int, "status"); - table->add_column(type_String, "error_message"); - table->add_column(type_Int, "query_parse_counter"); - } - else { - // The table already existed, so it should have all of the columns that are in the shared schema. - REALM_ASSERT(table->get_column_index("query") != npos); - REALM_ASSERT(table->get_column_index("matches_property") != npos); - REALM_ASSERT(table->get_column_index("status") != npos); - REALM_ASSERT(table->get_column_index("error_message") != npos); - REALM_ASSERT(table->get_column_index("query_parse_counter") != npos); } - // We may need to add the "name" column even if the __ResultSets table already existed - // as it's not added by the server when it creates the table. - if (table->get_column_index("name") == npos) { - size_t idx = table->add_column(type_String, "name"); - table->add_search_index(idx); + // Create all required properties which don't already exist + for (auto& property : s_partial_sync_schema) { + if (table->get_column_index(property.name) != npos) + continue; + size_t idx = table->add_column(property.type, property.name, property.nullable); + if (property.indexed) + table->add_search_index(idx); } + + // Remove any subscriptions no longer relevant + cleanup_subscriptions(group, system_clock::now()); +} + +void ensure_partial_sync_schema_initialized(Realm& realm) +{ + auto was_in_read = realm.is_in_read_transaction(); + auto cleanup = util::make_scope_exit([&]() noexcept { + if (realm.is_in_transaction()) + realm.cancel_transaction(); + if (!was_in_read) + realm.invalidate(); + }); + + auto has_all_required_columns = [](auto& table) -> bool { + return std::all_of(std::begin(s_partial_sync_schema), std::end(s_partial_sync_schema), + [&](auto& property) { return table.get_column_index(property.name) != npos; }); + }; + + auto& group = realm.read_group(); + // Check if the result sets table already has the expected number of columns + auto table = ObjectStore::table_for_object_type(group, result_sets_type_name); + if (table && has_all_required_columns(*table)) + return; + + realm.begin_transaction(); + // Recheck after starting the transaction as it refreshes + if (!table) + table = ObjectStore::table_for_object_type(group, result_sets_type_name); + if (table && has_all_required_columns(*table)) + return; + initialize_schema(group); + realm.commit_transaction(); } // A stripped-down version of WriteTransaction that can promote an existing read transaction @@ -96,7 +196,7 @@ class WriteTransactionNotifyingSync { auto version = m_shared_group->commit(); m_shared_group = nullptr; - auto session = SyncManager::shared().get_session(m_config.path, *m_config.sync_config); + auto session = SyncManager::shared().get_session(m_config.path, *m_config.sync_config, false); SyncSession::Internal::nonsync_transact_notify(*session, version); return version; } @@ -134,24 +234,25 @@ class PartialSyncHelper { } }; -struct RowHandover { - RowHandover(Realm& realm, Row row) - : source_shared_group(*PartialSyncHelper::get_shared_group(realm)) - , row(source_shared_group.export_for_handover(std::move(row))) - , version(source_shared_group.pin_version()) - { - } - - ~RowHandover() - { - // If the row isn't already null we've not been imported and the version pin will leak. - REALM_ASSERT(!row); - } +template +static auto export_for_handover(Realm& realm, Args&&... args) +{ + auto& sg = *PartialSyncHelper::get_shared_group(realm); + sg.pin_version(); + auto handover = sg.export_for_handover(std::forward(args)...); + // We need to store the handover object in a shared_ptr because it's captured + // in a std::function<>, which requires copyable objects + return std::make_shared(std::move(handover)); +} - SharedGroup& source_shared_group; - std::unique_ptr> row; - VersionID version; -}; +template +static auto import_from_handover(SharedGroup& sg, std::unique_ptr>& handover) +{ + sg.begin_read(handover->version); + auto obj = sg.import_from_handover(std::move(handover)); + sg.unpin_version(sg.get_version_of_current_transaction()); + return *obj; +} } // namespace _impl @@ -165,6 +266,10 @@ ExistingSubscriptionException::ExistingSubscriptionException(const std::string& : std::runtime_error(msg) {} +QueryTypeMismatchException::QueryTypeMismatchException(const std::string& msg) +: std::logic_error(msg) +{} + namespace { template @@ -181,51 +286,49 @@ void with_open_shared_group(Realm::Config const& config, F&& function) struct ResultSetsColumns { ResultSetsColumns(Table& table, std::string const& matches_property_name) { - name = table.get_column_index("name"); + name = table.get_column_index(property_name); REALM_ASSERT(name != npos); - query = table.get_column_index("query"); + query = table.get_column_index(property_query); REALM_ASSERT(query != npos); - this->matches_property_name = table.get_column_index("matches_property"); + error_message = table.get_column_index(property_error_message); + REALM_ASSERT(error_message != npos); + + status = table.get_column_index(property_status); + REALM_ASSERT(status != npos); + + this->matches_property_name = table.get_column_index(property_matches_property_name); REALM_ASSERT(this->matches_property_name != npos); + created_at = table.get_column_index(property_created_at); + REALM_ASSERT(created_at != npos); + + updated_at = table.get_column_index(property_updated_at); + REALM_ASSERT(updated_at != npos); + + expires_at = table.get_column_index(property_expires_at); + REALM_ASSERT(expires_at != npos); + + time_to_live = table.get_column_index(property_time_to_live); + REALM_ASSERT(time_to_live != npos); + // This may be `npos` if the column does not yet exist. matches_property = table.get_column_index(matches_property_name); } size_t name; size_t query; + size_t error_message; + size_t status; size_t matches_property_name; size_t matches_property; + size_t created_at; + size_t updated_at; + size_t expires_at; + size_t time_to_live; }; -// Validate the subscription about to be created against existing subscription. -// If an existing subscription already exists that matches the one we are about to create, the -// index of that Subscription is returned. If no current matching subscription exists `npos` is -// returned. -size_t validate_existing_subscription(Table& table, ResultSetsColumns const& columns, std::string const& name, - std::string const& query, std::string const& matches_property) -{ - auto existing_row_ndx = table.find_first_string(columns.name, name); - if (existing_row_ndx == npos) - return npos; - - StringData existing_query = table.get_string(columns.query, existing_row_ndx); - if (existing_query != query) - throw ExistingSubscriptionException(util::format("An existing subscription exists with the same name, " - "but a different query ('%1' vs '%2').", - existing_query, query)); - - StringData existing_matches_property = table.get_string(columns.matches_property_name, existing_row_ndx); - if (existing_matches_property != matches_property) - throw ExistingSubscriptionException(util::format("An existing subscription exists with the same name, " - "but a different result type ('%1' vs '%2').", - existing_matches_property, matches_property)); - - return existing_row_ndx; -} - // Performs the logic of actually writing the subscription (if needed) to the Realm and making sure // that the `matches_property` field is setup correctly. This method will throw if the query cannot // be serialized or the name is already used by another subscription. @@ -233,8 +336,14 @@ size_t validate_existing_subscription(Table& table, ResultSetsColumns const& col // The row of the resulting subscription is returned. If an old subscription exists that matches // the one about to be created, a new subscription is not created, but the old one is returned // instead. -RowExpr write_subscription(std::string const& object_type, std::string const& name, std::string const& query, Group& group) +// +// If `update = true` and if a subscription with `name` already exists, its query and time_to_live +// will be updated instead of an exception being thrown if the query parsed in was different than +// the persisted query. +Row write_subscription(std::string const& object_type, std::string const& name, std::string const& query, + util::Optional time_to_live_ms, bool update, Group& group) { + Timestamp now = system_clock::now(); auto matches_property = std::string(object_type) + "_matches"; auto table = ObjectStore::table_for_object_type(group, result_sets_type_name); @@ -244,32 +353,86 @@ RowExpr write_subscription(std::string const& object_type, std::string const& na if (columns.matches_property == npos) { auto target_table = ObjectStore::table_for_object_type(group, object_type); columns.matches_property = table->add_column_link(type_LinkList, matches_property, *target_table); - } else { + } + else { // FIXME: Validate that the column type and link target are correct. } - size_t row_ndx = validate_existing_subscription(*table, columns, name, query, matches_property); - if (row_ndx == npos) { + // Find existing subscription (if any) + auto row_ndx = table->find_first_string(columns.name, name); + if (row_ndx != npos) { + + // Check that we don't attempt to replace an existing query with a query on a new type. + // There is nothing that prevents Sync from handling this, but allowing it will complicate + // Binding API's, so for now it is disallowed. + auto existing_matching_property = table->get_string(columns.matches_property_name, row_ndx); + if (existing_matching_property != matches_property) { + throw QueryTypeMismatchException(util::format("Replacing an existing query with a query on " + "a different type is not allowed: %1 vs. %2 for %3", + existing_matching_property, matches_property, name)); + } + + // If an subscription exist, we only update the query and TTL if allowed to. + // TODO: Consider how Binding API's are going to use this. It might make sense to disallow + // updating TTL using this API and instead require updates to TTL to go through a managed Subscription. + if (update) { + // If the query changed we must reset state to force the server to re-evaluate the subscription. + if (table->get_string(columns.query, row_ndx) != query) { + table->set_string(columns.error_message, row_ndx, ""); + table->set_int(columns.status, row_ndx, 0); + } + table->set_string(columns.query, row_ndx, query); + table->set(columns.time_to_live, row_ndx, time_to_live_ms); + } + else { + StringData existing_query = table->get_string(columns.query, row_ndx); + if (existing_query != query) + throw ExistingSubscriptionException(util::format("An existing subscription exists with the name '%1' " + "but with a different query: '%1' vs '%2'", + name, existing_query, query)); + } + + } + else { + // No existing subscription was found. Create a new one row_ndx = sync::create_object(group, *table); table->set_string(columns.name, row_ndx, name); table->set_string(columns.query, row_ndx, query); table->set_string(columns.matches_property_name, row_ndx, matches_property); + table->set_timestamp(columns.created_at, row_ndx, now); + table->set(columns.time_to_live, row_ndx, time_to_live_ms); + } + + // Always set updated_at/expires_at when a subscription is touched, no matter if it is new, updated or someone just + // resubscribes. + table->set_timestamp(columns.updated_at, row_ndx, now); + if (table->is_null(columns.time_to_live, row_ndx) || table->get_int(columns.time_to_live, row_ndx) == std::numeric_limits::max()) { + table->set_null(columns.expires_at, row_ndx); } - return table->get(row_ndx); + else { + table->set_timestamp(columns.expires_at, row_ndx, calculate_expiry_date(now, table->get_int(columns.time_to_live, row_ndx))); + } + + // Fetch subscription first and return it. Cleanup needs to be performed after as it might delete subscription + // causing the row_ndx to change. + Row subscription = table->get(row_ndx); + cleanup_subscriptions(group, now); + return subscription; } void enqueue_registration(Realm& realm, std::string object_type, std::string query, std::string name, + util::Optional time_to_live, bool update, std::function callback) { auto config = realm.config(); auto& work_queue = _impl::PartialSyncHelper::get_coordinator(realm).partial_sync_work_queue(); work_queue.enqueue([object_type=std::move(object_type), query=std::move(query), name=std::move(name), - callback=std::move(callback), config=std::move(config)] { + callback=std::move(callback), config=std::move(config), time_to_live=time_to_live, update=update] { try { with_open_shared_group(config, [&](SharedGroup& sg) { _impl::WriteTransactionNotifyingSync write(config, sg); - write_subscription(object_type, name, query, write.get_group()); + write_subscription(object_type, name, query, time_to_live, update, write.get_group()); write.commit(); }); } catch (...) { @@ -288,18 +451,12 @@ void enqueue_unregistration(Object result_set, std::function callback) auto& work_queue = _impl::PartialSyncHelper::get_coordinator(*realm).partial_sync_work_queue(); // Export a reference to the __ResultSets row so we can hand it to the worker thread. - // We store it in a shared_ptr as it would otherwise prevent the lambda from being copyable, - // which `std::function` requires. - auto handover = std::make_shared<_impl::RowHandover>(*realm, result_set.row()); + auto handover = _impl::export_for_handover(*realm, Row(result_set.row())); work_queue.enqueue([handover=std::move(handover), callback=std::move(callback), config=std::move(config)] () { with_open_shared_group(config, [&](SharedGroup& sg) { - // Import handed-over object. - sg.begin_read(handover->version); - Row row = *sg.import_from_handover(std::move(handover->row)); - sg.unpin_version(handover->version); - + Row row = _impl::import_from_handover(sg, *handover); _impl::WriteTransactionNotifyingSync write(config, sg); if (row.is_attached()) { row.move_last_over(); @@ -313,6 +470,46 @@ void enqueue_unregistration(Object result_set, std::function callback) }); } +template +void enqueue_unregistration(Results const& result_set, std::shared_ptr notifier, + std::function callback) +{ + auto realm = result_set.get_realm(); + auto config = realm->config(); + auto& work_queue = _impl::PartialSyncHelper::get_coordinator(*realm).partial_sync_work_queue(); + + // Export a reference to the query which will match the __ResultSets row + // once it's created so we can hand it to the worker thread + Query q = result_set.get_query(); + auto handover = _impl::export_for_handover(*realm, q, MutableSourcePayload::Move); + + work_queue.enqueue([handover=std::move(handover), callback=std::move(callback), + config=std::move(config), notifier=std::move(notifier)] () { + with_open_shared_group(config, [&](SharedGroup& sg) { + Query query = _impl::import_from_handover(sg, *handover); + + // If creating the subscription failed there might be another + // pre-existing subscription which matches our query, so we need to + // not remove that + if (notifier->failed()) + return; + + _impl::WriteTransactionNotifyingSync write(config, sg); + size_t row = query.find(); + if (row != npos) { + query.get_table()->move_last_over(row); + write.commit(); + } + else { + // If unsubscribe() is called twice before the subscription is + // even created the row might already be gone + write.rollback(); + } + }); + callback(); + }); +} + std::string default_name_for_query(const std::string& query, const std::string& object_type) { return util::format("[%1] %2", object_type, query); @@ -362,6 +559,7 @@ struct Subscription::Notifier : public _impl::CollectionNotifier { m_pending_error = error; m_pending_state = Complete; m_has_results_to_deliver = true; + m_failed = error != nullptr; } // Trigger processing of change notifications. @@ -393,6 +591,12 @@ struct Subscription::Notifier : public _impl::CollectionNotifier { return m_state; } + bool failed() const + { + std::unique_lock lock(m_mutex); + return m_failed; + } + private: void do_attach_to(SharedGroup&) override { } void do_detach_from(SharedGroup&) override { } @@ -403,7 +607,12 @@ struct Subscription::Notifier : public _impl::CollectionNotifier { } bool do_add_required_change_info(_impl::TransactionChangeInfo&) override { return false; } - bool prepare_to_deliver() override { return m_has_results_to_deliver; } + bool prepare_to_deliver() override + { + std::lock_guard lock(m_mutex); + return m_has_results_to_deliver; + + } _impl::RealmCoordinator *m_coordinator; @@ -412,12 +621,13 @@ struct Subscription::Notifier : public _impl::CollectionNotifier { std::exception_ptr m_pending_error = nullptr; std::exception_ptr m_error = nullptr; bool m_has_results_to_deliver = false; + bool m_failed = false; State m_state = Creating; State m_pending_state = Creating; }; -Subscription subscribe(Results const& results, util::Optional user_provided_name) +Subscription subscribe(Results const& results, SubscriptionOptions options) { auto realm = results.get_realm(); @@ -426,14 +636,20 @@ Subscription subscribe(Results const& results, util::Optional user_ throw InvalidRealmStateException("A Subscription can only be created in a Query-based Realm."); auto query = results.get_query().get_description(); // Throws if the query cannot be serialized. - query += " " + results.get_descriptor_ordering().get_description(results.get_query().get_table()); + if (!results.get_descriptor_ordering().is_empty()) { + query += " " + results.get_descriptor_ordering().get_description(results.get_query().get_table()); + } - std::string name = user_provided_name ? std::move(*user_provided_name) - : default_name_for_query(query, results.get_object_type()); + if (options.inclusions.is_valid()) { + query += " " + options.inclusions.get_description(results.get_query().get_table()); + } + + std::string name = options.user_provided_name ? std::move(*options.user_provided_name) + : default_name_for_query(query, results.get_object_type()); Subscription subscription(name, results.get_object_type(), realm); std::weak_ptr weak_notifier = subscription.m_notifier; - enqueue_registration(*realm, results.get_object_type(), std::move(query), std::move(name), + enqueue_registration(*realm, results.get_object_type(), std::move(query), std::move(name), std::move(options.time_to_live_ms), options.update, [weak_notifier=std::move(weak_notifier)](std::exception_ptr error) { if (auto notifier = weak_notifier.lock()) notifier->finished_subscribing(error); @@ -441,7 +657,8 @@ Subscription subscribe(Results const& results, util::Optional user_ return subscription; } -RowExpr subscribe_blocking(Results const& results, util::Optional user_provided_name) +Row subscribe_blocking(Results const& results, util::Optional user_provided_name, + util::Optional time_to_live_ms, bool update) { auto realm = results.get_realm(); @@ -454,11 +671,12 @@ RowExpr subscribe_blocking(Results const& results, util::Optional u } auto query = results.get_query().get_description(); // Throws if the query cannot be serialized. - query += " " + results.get_descriptor_ordering().get_description(results.get_query().get_table()); + if (!results.get_descriptor_ordering().is_empty()) { + query += " " + results.get_descriptor_ordering().get_description(results.get_query().get_table()); + } std::string name = user_provided_name ? std::move(*user_provided_name) : default_name_for_query(query, results.get_object_type()); - - return write_subscription(results.get_object_type(), name, query, realm->read_group()); + return write_subscription(results.get_object_type(), name, query, time_to_live_ms, update, realm->read_group()); } void unsubscribe(Subscription& subscription) @@ -476,15 +694,10 @@ void unsubscribe(Subscription& subscription) switch (subscription.state()) { case SubscriptionState::Creating: { // The result set object is in the process of being created. Try unsubscribing again once it exists. - auto token = std::make_shared(); - *token = subscription.add_notification_callback([token, &subscription] () { - if (subscription.state() == SubscriptionState::Creating) - return; - - unsubscribe(subscription); - - // Invalidate the notification token so we do not receive further callbacks. - *token = SubscriptionNotificationToken(); + std::weak_ptr weak_notifier = subscription.m_notifier; + enqueue_unregistration(subscription.m_result_sets, subscription.m_notifier, [weak_notifier=std::move(weak_notifier)]() { + if (auto notifier = weak_notifier.lock()) + notifier->finished_unsubscribing(); }); return; } @@ -507,6 +720,18 @@ void unsubscribe(Subscription& subscription) } } +void unsubscribe(Object&& subscription) +{ + REALM_ASSERT(subscription.get_object_schema().name == result_sets_type_name); + auto realm = subscription.realm(); + enqueue_unregistration(std::move(subscription), [=] { + // The partial sync worker thread bypasses the normal machinery which + // would trigger notifications since it does its own notification things + // in the other cases, so manually trigger it here. + _impl::PartialSyncHelper::get_coordinator(*realm).wake_up_notifier_worker(); + }); +} + Subscription::Subscription(std::string name, std::string object_type, std::shared_ptr realm) : m_object_schema(realm->read_group(), result_sets_type_name) { @@ -516,10 +741,11 @@ Subscription::Subscription(std::string name, std::string object_type, std::share auto matches_property = std::string(object_type) + "_matches"; + m_wrapper_created_at = system_clock::now(); TableRef table = ObjectStore::table_for_object_type(realm->read_group(), result_sets_type_name); Query query = table->where(); - query.equal(m_object_schema.property_for_name("name")->table_column, name); - query.equal(m_object_schema.property_for_name("matches_property")->table_column, matches_property); + query.equal(m_object_schema.property_for_name(property_name)->table_column, name); + query.equal(m_object_schema.property_for_name(property_matches_property_name)->table_column, matches_property); m_result_sets = Results(std::move(realm), std::move(query)); } @@ -529,12 +755,14 @@ Subscription& Subscription::operator=(Subscription&&) = default; SubscriptionNotificationToken Subscription::add_notification_callback(std::function callback) { - auto result_sets_token = m_result_sets.add_notification_callback([callback] (CollectionChangeSet, std::exception_ptr) { - callback(); + auto callback_wrapper = std::make_shared(SubscriptionCallbackWrapper{callback, none}); + auto result_sets_token = m_result_sets.add_notification_callback([this, callback_wrapper] (CollectionChangeSet, std::exception_ptr) { + run_callback(*callback_wrapper); }); - NotificationToken registration_token(m_notifier, m_notifier->add_callback([callback] (CollectionChangeSet, std::exception_ptr) { - callback(); + NotificationToken registration_token(m_notifier, m_notifier->add_callback([this, callback_wrapper] (CollectionChangeSet, std::exception_ptr) { + run_callback(*callback_wrapper); })); + return SubscriptionNotificationToken{std::move(registration_token), std::move(result_sets_token)}; } @@ -548,8 +776,68 @@ util::Optional Subscription::result_set_object() const return util::none; } +void Subscription::run_callback(SubscriptionCallbackWrapper& callback_wrapper) { + // Store reference to underlying subscription object the first time we encounter it. + // Used to track if anyone is later deleting it. + if (!m_result_sets_object && m_result_sets.size() > 0) { + auto row = m_result_sets.first().value(); + m_result_sets_object = util::Optional(row); + } + + // Verify this is a state change we actually want to report to the user + auto new_state = state(); + if (callback_wrapper.last_state && callback_wrapper.last_state.value() == new_state) + return; + + callback_wrapper.last_state = util::Optional(new_state); + + // Finally trigger callback + callback_wrapper.callback(); +} + SubscriptionState Subscription::state() const { + // State transitions are complex due to multiple source being able to create and modify the subscriptions. + // This means that there are unavoidable race conditions with regard to the states and we just make + // a best effort to provide a sensible experience for the end user. + // + // In particular this means the following: + // + // - There is no guarantee that a user will see all the states from `Creating -> Pending -> Complete` + // They might only see `Pending -> Complete` or `Complete` + // + // What we do guarantee is: + // + // - States will never be reported twice in a row for the same callback. This could e.g. happen if some property + // like `updated_at` was updated while the status was still `Pending`, but these properties are not important + // until the subscription is actually created. So we intentionally swallow all duplicated state notifications. + // + // - When calling `subscribe()` with `update = true` we will never report `Complete` until the updated subscription + // reaches that state. + + // Errors take precedence over all other notifications + if (m_notifier->error()) + return SubscriptionState::Error; + + // In some cases the subscription already exists. In that case we just report the state of the __ResultSets object. + if (auto object = result_set_object()) { + CppContext context; + auto state = static_cast(any_cast(object->get_property_value(context, property_status))); + auto updated_at = any_cast(object->get_property_value(context, property_updated_at)); + + if (updated_at < m_wrapper_created_at) { + // If the `updated_at` property on an existing subscription wasn't updated after the wrapper was created, + // it meant the query callback triggered before the async write completed. In that case we don't want + // to return the state associated with the subscription before it was updated. So we override the state + // in the actual subscription and return the expected state after the update. + return partial_sync::SubscriptionState::Pending; + } else { + return state; + } + } + + // If no existing subscription exist, we can use the state of the Notifier as an indication of the underlying + // progress. switch (m_notifier->state()) { case Notifier::Creating: return SubscriptionState::Creating; @@ -559,13 +847,10 @@ SubscriptionState Subscription::state() const break; } - if (m_notifier->error()) - return SubscriptionState::Error; - - if (auto object = result_set_object()) { - CppContext context; - auto value = any_cast(object->get_property_value(context, "status")); - return (SubscriptionState)value; + // If we previously had a reference to the subscription and that is now gone, we interpret that as + // someone deleted the subscription (without using the explict unsubscribe API). + if (m_result_sets_object && !m_result_sets_object->is_attached()) { + return SubscriptionState::Invalidated; } // We may not have an object even if the subscription has completed if the completion callback fired diff --git a/Pods/Realm/Realm/ObjectStore/src/sync/sync_manager.cpp b/Pods/Realm/Realm/ObjectStore/src/sync/sync_manager.cpp index ffaa4152c2..ad459ea81e 100644 --- a/Pods/Realm/Realm/ObjectStore/src/sync/sync_manager.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/sync/sync_manager.cpp @@ -218,13 +218,10 @@ void SyncManager::reset_for_testing() { std::lock_guard lock(m_session_mutex); - - // Callers of `SyncManager::reset_for_testing` should ensure there are no active sessions + // Callers of `SyncManager::reset_for_testing` should ensure there are no existing sessions // prior to calling `reset_for_testing`. - auto no_active_sessions = std::none_of(m_sessions.begin(), m_sessions.end(), [](auto& element){ - return element.second->existing_external_reference(); - }); - REALM_ASSERT_RELEASE(no_active_sessions); + bool no_sessions = !do_has_existing_sessions(); + REALM_ASSERT_RELEASE(no_sessions); // Destroy any inactive sessions. // FIXME: We shouldn't have any inactive sessions at this point! Sessions are expected to @@ -258,6 +255,17 @@ void SyncManager::set_logger_factory(SyncLoggerFactory& factory) noexcept m_logger_factory = &factory; } +std::unique_ptr SyncManager::make_logger() const +{ + if (m_logger_factory) { + return m_logger_factory->make_logger(m_log_level); // Throws + } + + auto stderr_logger = std::make_unique(); // Throws + stderr_logger->set_level_threshold(m_log_level); + return std::unique_ptr(stderr_logger.release()); +} + void SyncManager::set_user_agent(std::string user_agent) { std::lock_guard lock(m_mutex); @@ -415,11 +423,11 @@ std::string SyncManager::path_for_realm(const SyncUser& user, const std::string& return m_file_manager->path(user.local_identity(), raw_realm_url); } -std::string SyncManager::recovery_directory_path() const +std::string SyncManager::recovery_directory_path(util::Optional const& custom_dir_name) const { std::lock_guard lock(m_file_system_mutex); REALM_ASSERT(m_file_manager); - return m_file_manager->recovery_directory_path(); + return m_file_manager->recovery_directory_path(custom_dir_name); } std::shared_ptr SyncManager::get_existing_active_session(const std::string& path) const @@ -448,7 +456,7 @@ std::shared_ptr SyncManager::get_existing_session(const std::string return nullptr; } -std::shared_ptr SyncManager::get_session(const std::string& path, const SyncConfig& sync_config) +std::shared_ptr SyncManager::get_session(const std::string& path, const SyncConfig& sync_config, bool force_client_resync) { auto& client = get_sync_client(); // Throws @@ -458,7 +466,7 @@ std::shared_ptr SyncManager::get_session(const std::string& path, c return session->external_reference(); } - auto shared_session = SyncSession::create(client, path, sync_config); + auto shared_session = SyncSession::create(client, path, sync_config, force_client_resync); m_sessions[path] = shared_session; // Create the external reference immediately to ensure that the session will become @@ -470,6 +478,19 @@ std::shared_ptr SyncManager::get_session(const std::string& path, c return external_reference; } + +bool SyncManager::has_existing_sessions() +{ + std::lock_guard lock(m_session_mutex); + return do_has_existing_sessions(); +} + +bool SyncManager::do_has_existing_sessions(){ + return std::any_of(m_sessions.begin(), m_sessions.end(), [](auto& element){ + return element.second->existing_external_reference(); + }); +} + void SyncManager::unregister_session(const std::string& path) { std::lock_guard lock(m_session_mutex); @@ -488,8 +509,12 @@ void SyncManager::unregister_session(const std::string& path) void SyncManager::enable_session_multiplexing() { std::lock_guard lock(m_mutex); + if (m_multiplex_sessions) + return; // Already enabled, we can ignore + if (m_sync_client) throw std::logic_error("Cannot enable session multiplexing after creating the sync client"); + m_multiplex_sessions = true; } @@ -504,18 +529,7 @@ SyncClient& SyncManager::get_sync_client() const std::unique_ptr SyncManager::create_sync_client() const { REALM_ASSERT(!m_mutex.try_lock()); - - std::unique_ptr logger; - if (m_logger_factory) { - logger = m_logger_factory->make_logger(m_log_level); // Throws - } - else { - auto stderr_logger = std::make_unique(); // Throws - stderr_logger->set_level_threshold(m_log_level); - logger = std::move(stderr_logger); - } - - return std::make_unique(std::move(logger), m_client_reconnect_mode, m_multiplex_sessions, + return std::make_unique(make_logger(), m_client_reconnect_mode, m_multiplex_sessions, util::format("%1 %2", m_user_agent_binding_info, m_user_agent_application_info)); } diff --git a/Pods/Realm/Realm/ObjectStore/src/sync/sync_session.cpp b/Pods/Realm/Realm/ObjectStore/src/sync/sync_session.cpp index 288362b916..ba8807bc31 100644 --- a/Pods/Realm/Realm/ObjectStore/src/sync/sync_session.cpp +++ b/Pods/Realm/Realm/ObjectStore/src/sync/sync_session.cpp @@ -109,12 +109,7 @@ struct SyncSession::State { // Register a handler to wait for sync session uploads, downloads, or synchronization. // PRECONDITION: the session state lock must be held at the time this method is called, until after it returns. - // Returns true iff the handler was registered, either immediately or placed in a queue for later registration. - virtual bool wait_for_completion(SyncSession&, - std::function, - SessionWaiterPointer) const { - return false; - } + virtual void wait_for_completion(SyncSession&, _impl::SyncProgressNotifier::NotifierType) const { } virtual void override_server(std::unique_lock&, SyncSession&, std::string, int) const { } @@ -152,12 +147,6 @@ struct sync_session_states::WaitingForAccessToken : public SyncSession::State { if (session.m_server_override) session.m_session->override_server(session.m_server_override->address, session.m_server_override->port); - // Register all the pending wait-for-completion blocks. - for (auto& package : session.m_completion_wait_packages) { - (*session.m_session.*package.waiter)(std::move(package.callback)); - } - session.m_completion_wait_packages.clear(); - // Handle any deferred commit notification. if (session.m_deferred_commit_notification) { session.m_session->nonsync_transact_notify(*session.m_deferred_commit_notification); @@ -212,14 +201,6 @@ struct sync_session_states::WaitingForAccessToken : public SyncSession::State { } } - bool wait_for_completion(SyncSession& session, - std::function callback, - SessionWaiterPointer waiter) const override - { - session.m_completion_wait_packages.push_back({ waiter, std::move(callback) }); - return true; - } - void override_server(std::unique_lock&, SyncSession& session, std::string address, int port) const override { @@ -228,6 +209,17 @@ struct sync_session_states::WaitingForAccessToken : public SyncSession::State { }; struct sync_session_states::Active : public SyncSession::State { + void enter_state(std::unique_lock&, SyncSession& session) const override + { + // Register all the pending wait-for-completion blocks. This can + // potentially add a redundant callback if we're coming from the Dying + // state, but that's okay (we won't call the user callbacks twice). + if (!session.m_upload_completion_callbacks.empty()) + session.add_completion_callback(_impl::SyncProgressNotifier::NotifierType::upload); + if (!session.m_download_completion_callbacks.empty()) + session.add_completion_callback(_impl::SyncProgressNotifier::NotifierType::download); + } + void refresh_access_token(std::unique_lock&, SyncSession& session, std::string access_token, const util::Optional&) const override @@ -276,13 +268,10 @@ struct sync_session_states::Active : public SyncSession::State { } } - bool wait_for_completion(SyncSession& session, - std::function callback, - SessionWaiterPointer waiter) const override + void wait_for_completion(SyncSession& session, _impl::SyncProgressNotifier::NotifierType direction) const override { REALM_ASSERT(session.m_session); - (*session.m_session.*waiter)(std::move(callback)); - return true; + session.add_completion_callback(direction); } void handle_reconnect(std::unique_lock&, SyncSession& session) const override @@ -344,13 +333,10 @@ struct sync_session_states::Dying : public SyncSession::State { session.advance_state(lock, inactive); } - bool wait_for_completion(SyncSession& session, - std::function callback, - SessionWaiterPointer waiter) const override + void wait_for_completion(SyncSession& session, _impl::SyncProgressNotifier::NotifierType direction) const override { REALM_ASSERT(session.m_session); - (*session.m_session.*waiter)(std::move(callback)); - return true; + session.add_completion_callback(direction); } void override_server(std::unique_lock&, SyncSession& session, @@ -364,25 +350,30 @@ struct sync_session_states::Dying : public SyncSession::State { struct sync_session_states::Inactive : public SyncSession::State { void enter_state(std::unique_lock& lock, SyncSession& session) const override { - auto completion_wait_packages = std::move(session.m_completion_wait_packages); - session.m_completion_wait_packages.clear(); + // Manually set the disconnected state. Sync would also do this, but + // since the underlying SyncSession object already have been destroyed, + // we are not able to get the callback. + auto old_state = session.m_connection_state; + auto new_state = session.m_connection_state = SyncSession::ConnectionState::Disconnected; + + auto download_waits = std::move(session.m_download_completion_callbacks); + auto upload_waits = std::move(session.m_upload_completion_callbacks); + session.m_download_completion_callbacks.clear(); + session.m_upload_completion_callbacks.clear(); + session.m_session = nullptr; session.unregister(lock); // releases lock // Send notifications after releasing the lock to prevent deadlocks in the callback. - - // Manually set the disconnected state. Sync would also do this, but since the underlying SyncSession object - // already have been destroyed, we are not able to get the callback. - SyncSession::ConnectionState old_state = session.connection_state(); - session.m_connection_state = realm::sync::Session::ConnectionState::disconnected; - SyncSession::ConnectionState new_state = session.connection_state(); if (old_state != new_state) { session.m_connection_change_notifier.invoke_callbacks(old_state, session.connection_state()); } // Inform any queued-up completion handlers that they were cancelled. - for (auto& package : completion_wait_packages) - package.callback(util::error::operation_aborted); + for (auto& callback : download_waits) + callback(util::error::operation_aborted); + for (auto& callback : upload_waits) + callback(util::error::operation_aborted); } bool revive_if_needed(std::unique_lock& lock, SyncSession& session) const override @@ -391,19 +382,16 @@ struct sync_session_states::Inactive : public SyncSession::State { return true; } - bool wait_for_completion(SyncSession& session, - std::function callback, - SessionWaiterPointer waiter) const override - { - session.m_completion_wait_packages.push_back({ waiter, std::move(callback) }); - return true; - } - void override_server(std::unique_lock&, SyncSession& session, std::string address, int port) const override { session.m_server_override = SyncSession::ServerOverride{address, port}; } + + void close(std::unique_lock& lock, SyncSession& session) const override + { + session.unregister(lock); // releases lock + } }; @@ -412,9 +400,10 @@ const SyncSession::State& SyncSession::State::active = Active(); const SyncSession::State& SyncSession::State::dying = Dying(); const SyncSession::State& SyncSession::State::inactive = Inactive(); -SyncSession::SyncSession(SyncClient& client, std::string realm_path, SyncConfig config) +SyncSession::SyncSession(SyncClient& client, std::string realm_path, SyncConfig config, bool force_client_resync) : m_state(&State::inactive) , m_config(std::move(config)) +, m_force_client_resync(force_client_resync) , m_realm_path(std::move(realm_path)) , m_client(client) { @@ -436,15 +425,16 @@ SyncSession::SyncSession(SyncClient& client, std::string realm_path, SyncConfig realm_config.encryption_key.begin()); } - // FIXME: Opening a Realm only to discard it is relatively expensive. It may be preferable to have - // realm-sync open the Realm when the `sync::Session` is created since it can continue to use it. - Realm::get_shared_realm(realm_config); // Throws + std::unique_ptr history; + std::unique_ptr shared_group; + std::unique_ptr read_only_group; + Realm::open_with_config(realm_config, history, shared_group, read_only_group, nullptr); } } std::string SyncSession::get_recovery_file_path() { - return util::reserve_unique_file_name(SyncManager::shared().recovery_directory_path(), + return util::reserve_unique_file_name(SyncManager::shared().recovery_directory_path(m_config.recovery_directory), util::create_timestamped_template("recovered_realm")); } @@ -460,12 +450,11 @@ void SyncSession::update_error_and_mark_file_for_deletion(SyncError& error, Shou } using Action = SyncFileActionMetadata::Action; auto action = should_backup == ShouldBackup::yes ? Action::BackUpThenDeleteRealm : Action::DeleteRealm; - SyncManager::shared().perform_metadata_update([this, - action, + SyncManager::shared().perform_metadata_update([this, action, original_path=std::move(original_path), recovery_path=std::move(recovery_path)](const auto& manager) { - manager.make_file_action_metadata(original_path, m_config.realm_url(), m_config.user->identity(), - action, std::move(recovery_path)); + auto realm_url = m_config.realm_url(); + manager.make_file_action_metadata(original_path, realm_url, m_config.user->identity(), action, recovery_path); }); } @@ -484,6 +473,42 @@ void SyncSession::handle_error(SyncError error) } } + if (error.is_client_reset_requested()) { + switch (m_config.client_resync_mode) { + case ClientResyncMode::Manual: + break; + case ClientResyncMode::DiscardLocal: + case ClientResyncMode::Recover: { + // Performing a client resync requires tearing down our current + // sync session and creating a new one with a forced client + // reset. This will result in session completion handlers firing + // when the old session is torn down, which we don't want as this + // is supposed to be transparent to the user. + // + // To avoid this, we need to do two things: move the completion + // handlers aside temporarily so that moving to the inactive + // state doesn't clear them, and track which sync::Session each + // completion notification came from so that we can ignore + // notifications from the old session. + { + std::unique_lock lock(m_state_mutex); + m_force_client_resync = true; + + ++m_client_resync_counter; + auto download_handlers = std::move(m_download_completion_callbacks); + auto upload_handlers = std::move(m_upload_completion_callbacks); + + advance_state(lock, State::inactive); + + m_download_completion_callbacks = std::move(download_handlers); + m_upload_completion_callbacks = std::move(upload_handlers); + } + revive_if_needed(); + return; + } + } + } + if (error_code.category() == realm::sync::protocol_error_category()) { using ProtocolError = realm::sync::ProtocolError; switch (static_cast(error_code.value())) { @@ -510,6 +535,7 @@ void SyncSession::handle_error(SyncError error) case ProtocolError::bad_decompression: case ProtocolError::partial_sync_disabled: case ProtocolError::unsupported_session_feature: + case ProtocolError::transact_before_upload: break; // Session errors case ProtocolError::session_closed: @@ -542,11 +568,15 @@ void SyncSession::handle_error(SyncError error) update_error_and_mark_file_for_deletion(error, ShouldBackup::no); break; } + case ProtocolError::bad_client_file: + case ProtocolError::bad_client_file_ident: case ProtocolError::bad_origin_file_ident: case ProtocolError::bad_server_file_ident: - case ProtocolError::bad_client_file_ident: case ProtocolError::bad_server_version: + case ProtocolError::client_file_blacklisted: case ProtocolError::diverging_histories: + case ProtocolError::server_file_deleted: + case ProtocolError::user_blacklisted: next_state = NextStateAfterError::inactive; update_error_and_mark_file_for_deletion(error, ShouldBackup::yes); break; @@ -558,27 +588,36 @@ void SyncSession::handle_error(SyncError error) case ClientError::pong_timeout: // Not real errors, don't need to be reported to the binding. return; - case ClientError::bad_timestamp: - case ClientError::connect_timeout: - case ClientError::unknown_message: - case ClientError::bad_syntax: - case ClientError::limits_exceeded: - case ClientError::bad_session_ident: - case ClientError::bad_message_order: - case ClientError::bad_progress: + case ClientError::bad_changeset: case ClientError::bad_changeset_header_syntax: case ClientError::bad_changeset_size: + case ClientError::bad_client_file_ident: + case ClientError::bad_client_file_ident_salt: + case ClientError::bad_client_version: + case ClientError::bad_compression: + case ClientError::bad_error_code: + case ClientError::bad_file_ident: + case ClientError::bad_message_order: case ClientError::bad_origin_file_ident: - case ClientError::bad_server_version: - case ClientError::bad_changeset: + case ClientError::bad_progress: + case ClientError::bad_protocol_from_server: case ClientError::bad_request_ident: - case ClientError::bad_error_code: - case ClientError::bad_compression: - case ClientError::bad_client_version: + case ClientError::bad_server_version: + case ClientError::bad_session_ident: + case ClientError::bad_state_message: + case ClientError::bad_syntax: + case ClientError::bad_timestamp: + case ClientError::client_too_new_for_server: + case ClientError::client_too_old_for_server: + case ClientError::connect_timeout: + case ClientError::limits_exceeded: + case ClientError::protocol_mismatch: case ClientError::ssl_server_cert_rejected: - case ClientError::bad_file_ident: - case ClientError::bad_client_file_ident: - case ClientError::bad_client_file_ident_salt: + case ClientError::unknown_message: + case ClientError::missing_protocol_feature: + case ClientError::bad_serial_transact_status: + case ClientError::bad_object_id_substitutions: + case ClientError::http_tunnel_failed: // Don't do anything special for these errors. // Future functionality may require special-case handling for existing // errors, or newly introduced error codes. @@ -609,13 +648,15 @@ void SyncSession::handle_error(SyncError error) void SyncSession::cancel_pending_waits(std::unique_lock& lock) { - auto packages = std::move(m_completion_wait_packages); + auto download = std::move(m_download_completion_callbacks); + auto upload = std::move(m_upload_completion_callbacks); lock.unlock(); // Inform any queued-up completion handlers that they were cancelled. - for (auto& package : packages) { - package.callback(util::error::operation_aborted); - } + for (auto& callback : download) + callback(util::error::operation_aborted); + for (auto& callback : upload) + callback(util::error::operation_aborted); } void SyncSession::handle_progress_update(uint64_t downloaded, uint64_t downloadable, @@ -636,6 +677,7 @@ void SyncSession::create_sync_session() session_config.verify_servers_ssl_certificate = m_config.client_validate_ssl; session_config.ssl_trust_certificate_path = m_config.ssl_trust_certificate_path; session_config.ssl_verify_callback = m_config.ssl_verify_callback; + session_config.proxy_config = m_config.proxy_config; session_config.multiplex_ident = m_multiplex_identity; if (m_config.authorization_header_name) { @@ -647,6 +689,17 @@ void SyncSession::create_sync_session() session_config.url_prefix = *m_config.url_prefix; } + if (m_force_client_resync) { + std::string metadata_dir = m_realm_path + ".resync"; + util::try_make_dir(metadata_dir); + + sync::Session::Config::ClientReset config; + config.metadata_dir = metadata_dir; + if (m_config.client_resync_mode != ClientResyncMode::Recover) + config.recover_local_changes = false; + session_config.client_reset_config = config; + } + m_session = m_client.make_session(m_realm_path, std::move(session_config)); // The next time we get a token, call `bind()` instead of `refresh()`. @@ -676,14 +729,23 @@ void SyncSession::create_sync_session() // Sets up the connection state listener. This callback is used for both reporting errors as well as changes to the // connection state. - m_session->set_connection_state_change_listener([weak_self](realm::sync::Session::ConnectionState state, const realm::sync::Session::ErrorInfo* error) { + m_session->set_connection_state_change_listener([weak_self](sync::Session::ConnectionState state, + const sync::Session::ErrorInfo* error) { // If the OS SyncSession object is destroyed, we ignore any events from the underlying Session as there is // nothing useful we can do with them. if (auto self = weak_self.lock()) { - ConnectionState last_state = self->connection_state(); - self->m_connection_state = state; - ConnectionState new_state = self->connection_state(); - self->m_connection_change_notifier.invoke_callbacks(last_state, new_state); + std::unique_lock lock(self->m_state_mutex); + auto old_state = self->m_connection_state; + using cs = sync::Session::ConnectionState; + switch (state) { + case cs::disconnected: self->m_connection_state = ConnectionState::Disconnected; break; + case cs::connecting: self->m_connection_state = ConnectionState::Connecting; break; + case cs::connected: self->m_connection_state = ConnectionState::Connected; break; + default: REALM_UNREACHABLE(); + } + auto new_state = self->m_connection_state; + lock.unlock(); + self->m_connection_change_notifier.invoke_callbacks(old_state, new_state); if (error) { self->handle_error(SyncError{error->error_code, std::move(error->detailed_message), error->is_fatal}); } @@ -751,16 +813,47 @@ void SyncSession::unregister(std::unique_lock& lock) SyncManager::shared().unregister_session(m_realm_path); } -bool SyncSession::wait_for_upload_completion(std::function callback) +void SyncSession::add_completion_callback(_impl::SyncProgressNotifier::NotifierType direction) +{ + bool is_download = direction == _impl::SyncProgressNotifier::NotifierType::download; + + int resync_counter = m_client_resync_counter; + std::weak_ptr weak_self = shared_from_this(); + auto waiter = is_download ? &sync::Session::async_wait_for_download_completion + : &sync::Session::async_wait_for_upload_completion; + (m_session.get()->*waiter)([resync_counter, weak_self, is_download](std::error_code ec) { + auto self = weak_self.lock(); + if (!self) + return; + std::unique_lock lock(self->m_state_mutex); + if (resync_counter != self->m_client_resync_counter) { + // This callback was registered on a previous sync session and not + // the current one, so we want to simply discard completion + // notifications from it + return; + } + auto callbacks = std::move(is_download ? self->m_download_completion_callbacks + : self->m_upload_completion_callbacks); + lock.unlock(); + for (auto& callback : callbacks) + callback(ec); + }); +} + +void SyncSession::wait_for_upload_completion(std::function callback) { std::unique_lock lock(m_state_mutex); - return m_state->wait_for_completion(*this, std::move(callback), &sync::Session::async_wait_for_upload_completion); + if (m_upload_completion_callbacks.empty()) + m_state->wait_for_completion(*this, _impl::SyncProgressNotifier::NotifierType::upload); + m_upload_completion_callbacks.push_back(std::move(callback)); } -bool SyncSession::wait_for_download_completion(std::function callback) +void SyncSession::wait_for_download_completion(std::function callback) { std::unique_lock lock(m_state_mutex); - return m_state->wait_for_completion(*this, std::move(callback), &sync::Session::async_wait_for_download_completion); + if (m_download_completion_callbacks.empty()) + m_state->wait_for_completion(*this, _impl::SyncProgressNotifier::NotifierType::download); + m_download_completion_callbacks.push_back(std::move(callback)); } uint64_t SyncSession::register_progress_notifier(std::function notifier, @@ -805,6 +898,10 @@ void SyncSession::set_multiplex_identifier(std::string multiplex_identity) m_multiplex_identity = std::move(multiplex_identity); } +void SyncSession::set_url_prefix(std::string url_prefix) +{ + m_config.url_prefix = std::move(url_prefix); +} SyncSession::PublicState SyncSession::get_public_state() const { @@ -822,7 +919,6 @@ SyncSession::PublicState SyncSession::get_public_state() const REALM_UNREACHABLE(); } - SyncSession::PublicState SyncSession::state() const { std::unique_lock lock(m_state_mutex); @@ -831,13 +927,33 @@ SyncSession::PublicState SyncSession::state() const SyncSession::ConnectionState SyncSession::connection_state() const { - switch (m_connection_state) { - case realm::sync::Session::ConnectionState::disconnected: return ConnectionState::Disconnected; - case realm::sync::Session::ConnectionState::connecting: return ConnectionState::Connecting; - case realm::sync::Session::ConnectionState::connected: return ConnectionState::Connected; - default: - REALM_UNREACHABLE(); + std::unique_lock lock(m_state_mutex); + return m_connection_state; +} + +void SyncSession::update_configuration(SyncConfig new_config) +{ + while (true) { + std::unique_lock lock(m_state_mutex); + if (m_state != &State::inactive) { + // Changing the state releases the lock, which means that by the + // time we reacquire the lock the state may have changed again + // (either due to one of the callbacks being invoked or another + // thread coincidentally doing something). We just attempt to keep + // switching it to inactive until it stays there. + advance_state(lock, State::inactive); + continue; + } + + REALM_ASSERT(m_state == &State::inactive); + REALM_ASSERT(!m_session); + REALM_ASSERT(m_config.user == new_config.user); + REALM_ASSERT(m_config.reference_realm_url == new_config.reference_realm_url); + REALM_ASSERT(m_config.is_partial == new_config.is_partial); + m_config = std::move(new_config); + break; } + revive_if_needed(); } // Represents a reference to the SyncSession from outside of the sync subsystem. diff --git a/Pods/Realm/Realm/RLMAccessor.mm b/Pods/Realm/Realm/RLMAccessor.mm index 818f85756f..3546605de7 100644 --- a/Pods/Realm/Realm/RLMAccessor.mm +++ b/Pods/Realm/Realm/RLMAccessor.mm @@ -114,7 +114,7 @@ void setValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, return; } - RLMAddObjectToRealm(val, obj->_realm, false); + RLMAddObjectToRealm(val, obj->_realm, RLMUpdatePolicyError); // make sure it is the correct type if (val->_row.get_table() != obj->_row.get_table()->get_link_target(colIndex)) { @@ -724,12 +724,16 @@ static auto to_optional(__unsafe_unretained id const value, Fn&& fn) { } template<> -realm::RowExpr RLMAccessorContext::unbox(__unsafe_unretained id const v, bool create, bool update, bool, size_t) { +realm::RowExpr RLMAccessorContext::unbox(__unsafe_unretained id const v, bool create, bool update, bool diff, size_t) { + RLMUpdatePolicy policy = !update ? RLMUpdatePolicyError + : !diff ? RLMUpdatePolicyUpdateAll + : RLMUpdatePolicyUpdateChanged; + RLMObjectBase *link = RLMDynamicCast(v); if (!link) { if (!create) return realm::RowExpr(); - return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, v, update)->_row; + return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, v, policy)->_row; } if (link.isInvalidated) { @@ -743,7 +747,7 @@ static auto to_optional(__unsafe_unretained id const value, Fn&& fn) { if (![link->_objectSchema.className isEqualToString:_info.rlmObjectSchema.className]) { if (create && !_promote_existing) - return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, link, update)->_row; + return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, link, policy)->_row; return link->_row; } @@ -751,13 +755,13 @@ static auto to_optional(__unsafe_unretained id const value, Fn&& fn) { if (!create) return realm::RowExpr(); if (!_promote_existing) - return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, link, update)->_row; - RLMAddObjectToRealm(link, _realm, update); + return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, link, policy)->_row; + RLMAddObjectToRealm(link, _realm, policy); } else if (link->_realm != _realm) { if (_promote_existing) @throw RLMException(@"Object is already managed by another Realm. Use create instead to copy it into this Realm."); - return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, v, update)->_row; + return RLMCreateObjectInRealmWithValue(_realm, _info.rlmObjectSchema.className, v, policy)->_row; } return link->_row; } diff --git a/Pods/Realm/Realm/RLMAnalytics.mm b/Pods/Realm/Realm/RLMAnalytics.mm index b6d750ac48..b1cd5ac43a 100644 --- a/Pods/Realm/Realm/RLMAnalytics.mm +++ b/Pods/Realm/Realm/RLMAnalytics.mm @@ -72,7 +72,9 @@ #import "RLMVersion.h" #endif +#if REALM_ENABLE_SYNC #import +#endif // Declared for RealmSwiftObjectUtil @interface NSObject (SwiftVersion) @@ -199,7 +201,9 @@ static auto RLMSysCtl(int *mib, u_int mibSize, size_t *bufferSize) { @"Binding": @"cocoa", @"Language": isSwift ? @"swift" : @"objc", @"Realm Version": REALM_COCOA_VERSION, +#if REALM_ENABLE_SYNC @"Sync Version": @(REALM_SYNC_VER_STRING), +#endif #if TARGET_OS_WATCH @"Target OS Type": @"watchos", #elif TARGET_OS_TV diff --git a/Pods/Realm/Realm/RLMNetworkClient.mm b/Pods/Realm/Realm/RLMNetworkClient.mm index db1f67afbf..e817a409b2 100644 --- a/Pods/Realm/Realm/RLMNetworkClient.mm +++ b/Pods/Realm/Realm/RLMNetworkClient.mm @@ -310,7 +310,7 @@ - (void)URLSession:(__unused NSURLSession *)session return; } - if (![self validateResponse:task.response data:_data error:&error]) { + if (NSError *error = [self validateResponse:task.response data:_data]) { _completionBlock(error, nil); return; } @@ -330,11 +330,10 @@ - (void)URLSession:(__unused NSURLSession *)session _completionBlock(nil, (NSDictionary *)json); } -- (BOOL)validateResponse:(NSURLResponse *)response data:(NSData *)data error:(NSError * __autoreleasing *)error { +- (NSError *)validateResponse:(NSURLResponse *)response data:(NSData *)data { if (![response isKindOfClass:[NSHTTPURLResponse class]]) { // FIXME: Provide error message - *error = make_auth_error_bad_response(); - return NO; + return make_auth_error_bad_response(); } NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; @@ -353,28 +352,22 @@ - (BOOL)validateResponse:(NSURLResponse *)response data:(NSData *)data error:(NS case RLMSyncAuthErrorExpiredPermissionOffer: case RLMSyncAuthErrorAmbiguousPermissionOffer: case RLMSyncAuthErrorFileCannotBeShared: - *error = make_auth_error(responseModel); - break; + return make_auth_error(responseModel); default: // Right now we assume that any codes not described // above are generic HTTP error codes. - *error = make_auth_error_http_status(responseModel.status); - break; + return make_auth_error_http_status(responseModel.status); } - } else { - *error = make_auth_error_http_status(httpResponse.statusCode); } - - return NO; + return make_auth_error_http_status(httpResponse.statusCode); } if (!data) { // FIXME: provide error message - *error = make_auth_error_bad_response(); - return NO; + return make_auth_error_bad_response(); } - return YES; + return nil; } - (RLMSyncErrorResponseModel *)responseModelFromData:(NSData *)data { @@ -425,6 +418,8 @@ + (void)sendRequestToEndpoint:(RLMSyncServerEndpoint *)endpoint // Add the request to a task and start it [[session dataTaskWithRequest:request] resume]; + // Tell the session to destroy itself once it's done with the request + [session finishTasksAndInvalidate]; } @end diff --git a/Pods/Realm/Realm/RLMObject.mm b/Pods/Realm/Realm/RLMObject.mm index 1ace411f46..1ae01eb326 100644 --- a/Pods/Realm/Realm/RLMObject.mm +++ b/Pods/Realm/Realm/RLMObject.mm @@ -72,25 +72,29 @@ - (instancetype)initWithValue:(id)value { #pragma mark - Class-based Object Creation + (instancetype)createInDefaultRealmWithValue:(id)value { - return (RLMObject *)RLMCreateObjectInRealmWithValue([RLMRealm defaultRealm], [self className], value, false); + return (RLMObject *)RLMCreateObjectInRealmWithValue([RLMRealm defaultRealm], [self className], value, RLMUpdatePolicyError); } + (instancetype)createInRealm:(RLMRealm *)realm withValue:(id)value { - return (RLMObject *)RLMCreateObjectInRealmWithValue(realm, [self className], value, false); + return (RLMObject *)RLMCreateObjectInRealmWithValue(realm, [self className], value, RLMUpdatePolicyError); } + (instancetype)createOrUpdateInDefaultRealmWithValue:(id)value { return [self createOrUpdateInRealm:[RLMRealm defaultRealm] withValue:value]; } ++ (instancetype)createOrUpdateModifiedInDefaultRealmWithValue:(id)value { + return [self createOrUpdateModifiedInRealm:[RLMRealm defaultRealm] withValue:value]; +} + + (instancetype)createOrUpdateInRealm:(RLMRealm *)realm withValue:(id)value { - // verify primary key - RLMObjectSchema *schema = [self sharedSchema]; - if (!schema.primaryKeyProperty) { - NSString *reason = [NSString stringWithFormat:@"'%@' does not have a primary key and can not be updated", schema.className]; - @throw [NSException exceptionWithName:@"RLMExecption" reason:reason userInfo:nil]; - } - return (RLMObject *)RLMCreateObjectInRealmWithValue(realm, [self className], value, true); + RLMVerifyHasPrimaryKey(self); + return (RLMObject *)RLMCreateObjectInRealmWithValue(realm, [self className], value, RLMUpdatePolicyUpdateAll); +} + ++ (instancetype)createOrUpdateModifiedInRealm:(RLMRealm *)realm withValue:(id)value { + RLMVerifyHasPrimaryKey(self); + return (RLMObject *)RLMCreateObjectInRealmWithValue(realm, [self className], value, RLMUpdatePolicyUpdateChanged); } #pragma mark - Subscripting diff --git a/Pods/Realm/Realm/RLMObjectSchema.mm b/Pods/Realm/Realm/RLMObjectSchema.mm index 91d86f50cb..52327595e2 100644 --- a/Pods/Realm/Realm/RLMObjectSchema.mm +++ b/Pods/Realm/Realm/RLMObjectSchema.mm @@ -328,7 +328,12 @@ + (void)addSwiftProperties:(NSMutableArray *)propArray // or it might be a String?, Data?, Date? or object field with // a nil default value else if (md.kind == RLMSwiftPropertyKindNilLiteralOptional) { - propArray[existing].optional = true; + RLMProperty *prop = propArray[existing]; + // RLMLinkingObjects properties on RLMObjects are allowed + // to be optional as they'll be `nil` for unmanaged objects + if (prop.type != RLMPropertyTypeLinkingObjects) { + prop.optional = true; + } } // or it may be some non-optional property which may have been // previously marked as optional due to that being the default diff --git a/Pods/Realm/Realm/RLMObjectStore.mm b/Pods/Realm/Realm/RLMObjectStore.mm index 232a29be81..c5ff5c321c 100644 --- a/Pods/Realm/Realm/RLMObjectStore.mm +++ b/Pods/Realm/Realm/RLMObjectStore.mm @@ -36,6 +36,8 @@ #import "results.hpp" #import "shared_realm.hpp" +#import + #import using namespace realm; @@ -112,9 +114,17 @@ void RLMInitializeSwiftAccessorGenerics(__unsafe_unretained RLMObjectBase *const } } +void RLMVerifyHasPrimaryKey(Class cls) { + RLMObjectSchema *schema = [cls sharedSchema]; + if (!schema.primaryKeyProperty) { + NSString *reason = [NSString stringWithFormat:@"'%@' does not have a primary key and can not be updated", schema.className]; + @throw [NSException exceptionWithName:@"RLMException" reason:reason userInfo:nil]; + } +} + void RLMAddObjectToRealm(__unsafe_unretained RLMObjectBase *const object, __unsafe_unretained RLMRealm *const realm, - bool createOrUpdate) { + RLMUpdatePolicy updatePolicy) { RLMVerifyInWriteTransaction(realm); // verify that object is unmanaged @@ -140,7 +150,9 @@ void RLMAddObjectToRealm(__unsafe_unretained RLMObjectBase *const object, object->_objectSchema = info.rlmObjectSchema; try { realm::Object::create(c, realm->_realm, *info.objectSchema, (id)object, - createOrUpdate, /* diff */ false, -1, &object->_row); + updatePolicy != RLMUpdatePolicyError, + updatePolicy == RLMUpdatePolicyUpdateChanged, + -1, &object->_row); } catch (std::exception const& e) { @throw RLMException(e); @@ -150,10 +162,10 @@ void RLMAddObjectToRealm(__unsafe_unretained RLMObjectBase *const object, } RLMObjectBase *RLMCreateObjectInRealmWithValue(RLMRealm *realm, NSString *className, - id value, bool createOrUpdate = false) { + id value, RLMUpdatePolicy updatePolicy) { RLMVerifyInWriteTransaction(realm); - if (createOrUpdate && RLMIsObjectSubclass([value class])) { + if (updatePolicy != RLMUpdatePolicyError && RLMIsObjectSubclass([value class])) { RLMObjectBase *obj = value; if (obj->_realm == realm && [obj->_objectSchema.className isEqualToString:className]) { // This is a no-op if value is an RLMObject of the same type already backed by the target realm. @@ -176,7 +188,8 @@ void RLMAddObjectToRealm(__unsafe_unretained RLMObjectBase *const object, RLMObjectBase *object = RLMCreateManagedAccessor(info.rlmObjectSchema.accessorClass, realm, &info); try { object->_row = realm::Object::create(c, realm->_realm, *info.objectSchema, - (id)value, createOrUpdate).row(); + (id)value, updatePolicy != RLMUpdatePolicyError, + updatePolicy == RLMUpdatePolicyUpdateChanged).row(); } catch (std::exception const& e) { @throw RLMException(e); diff --git a/Pods/Realm/Realm/RLMProperty.mm b/Pods/Realm/Realm/RLMProperty.mm index 490fadced4..c7dec6c627 100644 --- a/Pods/Realm/Realm/RLMProperty.mm +++ b/Pods/Realm/Realm/RLMProperty.mm @@ -92,6 +92,10 @@ + (instancetype)propertyForObjectStoreProperty:(const realm::Property &)prop { if (is_array(prop.type)) { ret->_array = true; } + if (!prop.public_name.empty()) { + ret->_columnName = ret->_name; + ret->_name = @(prop.public_name.c_str()); + } return ret; } @@ -314,12 +318,6 @@ - (void)parseObjcProperty:(objc_property_t)property case 'R': *readOnly = true; break; - case 'N': - // nonatomic - break; - case 'D': - // dynamic - break; case 'G': _getterName = @(attrs[i].value); break; @@ -329,6 +327,25 @@ - (void)parseObjcProperty:(objc_property_t)property case 'V': // backing ivar name *computed = false; break; + + case '&': + // retain/assign + break; + case 'C': + // copy + break; + case 'D': + // dynamic + break; + case 'N': + // nonatomic + break; + case 'P': + // GC'able + break; + case 'W': + // weak + break; default: break; } @@ -360,12 +377,26 @@ - (instancetype)initSwiftPropertyWithName:(NSString *)name bool readOnly = false; bool isComputed = false; [self parseObjcProperty:property readOnly:&readOnly computed:&isComputed rawType:&rawType]; + + // Swift sometimes doesn't explicitly set the ivar name in the metadata, so check if + // there's an ivar with the same name as the property. + if (!readOnly && isComputed && class_getInstanceVariable([obj class], name.UTF8String)) { + isComputed = false; + } + + // Check if there's a storage ivar for a lazy property in this name. We don't honor + // @lazy in managed objects, but allow it for unmanaged objects which are + // subclasses of RLMObject (but not RealmSwift.Object). It's unclear if there's a + // good reason for this difference. if (!readOnly && isComputed) { - // Check for lazy property. + // Xcode 10 and earlier NSString *backingPropertyName = [NSString stringWithFormat:@"%@.storage", name]; - if (class_getInstanceVariable([obj class], backingPropertyName.UTF8String)) { - isComputed = false; - } + isComputed = !class_getInstanceVariable([obj class], backingPropertyName.UTF8String); + } + if (!readOnly && isComputed) { + // Xcode 11 + NSString *backingPropertyName = [NSString stringWithFormat:@"$__lazy_storage_$_%@", name]; + isComputed = !class_getInstanceVariable([obj class], backingPropertyName.UTF8String); } if (readOnly || isComputed) { diff --git a/Pods/Realm/Realm/RLMRealm+Sync.mm b/Pods/Realm/Realm/RLMRealm+Sync.mm index 159c9536eb..02f10d7d40 100644 --- a/Pods/Realm/Realm/RLMRealm+Sync.mm +++ b/Pods/Realm/Realm/RLMRealm+Sync.mm @@ -47,7 +47,7 @@ - (void)subscribeToObjects:(Class)type where:(NSString *)query callback:(RLMPart Holder(partial_sync::Subscription&& s) : subscription(std::move(s)) { } }; - auto state = std::make_shared(partial_sync::subscribe(Results(_realm, std::move(q)), util::none)); + auto state = std::make_shared(partial_sync::subscribe(Results(_realm, std::move(q)), {})); state->token = state->subscription.add_notification_callback([=]() mutable { if (!callback) { return; diff --git a/Pods/Realm/Realm/RLMRealm.mm b/Pods/Realm/Realm/RLMRealm.mm index d077c78b95..50bde2f0de 100644 --- a/Pods/Realm/Realm/RLMRealm.mm +++ b/Pods/Realm/Realm/RLMRealm.mm @@ -32,8 +32,6 @@ #import "RLMRealmConfiguration_Private.hpp" #import "RLMRealmUtil.hpp" #import "RLMSchema_Private.hpp" -#import "RLMSyncManager_Private.h" -#import "RLMSyncUtil_Private.hpp" #import "RLMThreadSafeReference_Private.hpp" #import "RLMUpdateChecker.hpp" #import "RLMUtil.hpp" @@ -42,12 +40,20 @@ #include "object_store.hpp" #include "schema.hpp" #include "shared_realm.hpp" +#include "thread_safe_reference.hpp" #include #include #include +#if REALM_ENABLE_SYNC +#import "RLMSyncManager_Private.h" +#import "RLMSyncSession_Private.hpp" +#import "RLMSyncUtil_Private.hpp" + +#import "sync/async_open_task.hpp" #import "sync/sync_session.hpp" +#endif using namespace realm; using util::File; @@ -102,6 +108,13 @@ - (void)dealloc { } @end +#if !REALM_ENABLE_SYNC +@interface RLMAsyncOpenTask : NSObject +@end +@implementation RLMAsyncOpenTask +@end +#endif + static bool shouldForciblyDisableEncryption() { static bool disableEncryption = getenv("REALM_DISABLE_ENCRYPTION"); return disableEncryption; @@ -183,69 +196,123 @@ + (instancetype)realmWithURL:(NSURL *)fileURL { return [RLMRealm realmWithConfiguration:configuration error:nil]; } -+ (void)asyncOpenWithConfiguration:(RLMRealmConfiguration *)configuration - callbackQueue:(dispatch_queue_t)callbackQueue - callback:(RLMAsyncOpenRealmCallback)callback { - RLMRealm *strongReferenceToSyncedRealm = nil; - if (configuration.config.sync_config) { - NSError *error = nil; - strongReferenceToSyncedRealm = [RLMRealm uncachedSchemalessRealmWithConfiguration:configuration error:&error]; - if (error) { - dispatch_async(callbackQueue, ^{ - callback(nil, error); - }); - return; - } - } - static dispatch_queue_t queue = dispatch_queue_create("io.realm.asyncOpenDispatchQueue", DISPATCH_QUEUE_CONCURRENT); - dispatch_async(queue, ^{ +// The server doesn't send us the subscriptions for permission types until the +// first subscription is created. This is fine for synchronous opens (if we're +// creating a new Realm we create the permission objects ourselves), but it +// causes issues for asyncOpen because it means that when our download completes +// we don't actually have the full Realm state yet. +static void waitForPartialSyncSubscriptions(Realm::Config const& config) { +#if REALM_ENABLE_SYNC + auto realm = Realm::get_shared_realm(config); + auto table = ObjectStore::table_for_object_type(realm->read_group(), "__ResultSets"); + + realm->begin_transaction(); + size_t row = realm::sync::create_object(realm->read_group(), *table); + + // Set expires_at to time 0 so that this object will be cleaned up the first + // time the user creates a subscription + size_t expires_at_col = table->get_column_index("expires_at"); + if (expires_at_col == npos) { + expires_at_col = table->add_column(type_Timestamp, "expires_at", true); + } + table->set_timestamp(expires_at_col, row, Timestamp(0, 0)); + realm->commit_transaction(); + + NotificationToken token; + Results results(realm, *table); + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode, [&]() mutable { + token = results.add_notification_callback([&](CollectionChangeSet const&, std::exception_ptr) mutable { + if (table->size() > 1) { + token = {}; + CFRunLoopStop(runLoop); + } + }); + }); + CFRunLoopRun(); +#else + static_cast(config); +#endif +} + +static dispatch_queue_t s_async_open_queue = dispatch_queue_create("io.realm.asyncOpenDispatchQueue", + DISPATCH_QUEUE_CONCURRENT); +void RLMSetAsyncOpenQueue(dispatch_queue_t queue) { + s_async_open_queue = queue; +} + ++ (RLMAsyncOpenTask *)asyncOpenWithConfiguration:(RLMRealmConfiguration *)configuration + callbackQueue:(dispatch_queue_t)callbackQueue + callback:(RLMAsyncOpenRealmCallback)callback { + auto openCompletion = [=](ThreadSafeReference ref, std::exception_ptr err) { @autoreleasepool { - if (strongReferenceToSyncedRealm) { - // Sync behavior: get the raw session, then wait for it to download. - if (auto session = sync_session_for_realm(strongReferenceToSyncedRealm)) { - // Wait for the session to download, then open it. - session->wait_for_download_completion([=](std::error_code error_code) { - dispatch_async(callbackQueue, ^{ - (void)strongReferenceToSyncedRealm; - NSError *error = nil; - if (error_code == std::error_code{}) { - // Success - @autoreleasepool { - // Try opening the Realm on the destination queue. - RLMRealm *localRealm = [RLMRealm realmWithConfiguration:configuration error:&error]; - callback(localRealm, error); - } - } else { - // Failure - callback(nil, make_sync_error(RLMSyncSystemErrorKindSession, - @(error_code.message().c_str()), - error_code.value(), - nil)); - } - }); - }); - } else { + if (err) { + try { + std::rethrow_exception(err); + } + catch (...) { + NSError *error; + RLMRealmTranslateException(&error); dispatch_async(callbackQueue, ^{ - callback(nil, make_sync_error(RLMSyncSystemErrorKindSession, - @"Cannot asynchronously open synced Realm, because the associated session previously experienced a fatal error", - NSNotFound, - nil)); + callback(nil, error); }); - return; } - } else { - // Default behavior: just dispatch onto the destination queue and open the Realm. + return; + } + + auto complete = ^{ dispatch_async(callbackQueue, ^{ @autoreleasepool { - NSError *error = nil; + NSError *error; RLMRealm *localRealm = [RLMRealm realmWithConfiguration:configuration error:&error]; callback(localRealm, error); } }); - return; + }; + + auto realm = Realm::get_shared_realm(std::move(ref)); + bool needsSubscriptions = realm->is_partial() && ObjectStore::table_for_object_type(realm->read_group(), "__ResultSets")->size() == 0; + if (needsSubscriptions) { + // We need to dispatch back to the work queue to wait for the + // subscriptions as we're currently running on the sync worker + // thread and blocking it to wait for subscriptions means no syncing + dispatch_async(s_async_open_queue, ^{ + @autoreleasepool { + waitForPartialSyncSubscriptions(realm->config()); + complete(); + } + }); + } + else { + complete(); + } + } + }; + + RLMAsyncOpenTask *ret = [RLMAsyncOpenTask new]; + dispatch_async(s_async_open_queue, ^{ + @autoreleasepool { + Realm::Config& config = configuration.config; + if (config.sync_config) { +#if REALM_ENABLE_SYNC + auto task = realm::Realm::get_synchronized_realm(config); + ret.task = task; + task->start(openCompletion); +#else + @throw RLMException(@"Realm was not built with sync enabled"); +#endif + } + else { + try { + openCompletion(realm::_impl::RealmCoordinator::get_coordinator(config)->get_unbound_realm(), nullptr); + } + catch (...) { + openCompletion({}, std::current_exception()); + } } } }); + return ret; } // ARC tries to eliminate calls to autorelease when the value is then immediately @@ -389,7 +456,7 @@ + (instancetype)realmWithConfiguration:(RLMRealmConfiguration *)configuration er configuration = [configuration copy]; Realm::Config& config = configuration.config; - RLMRealm *realm = [[RLMRealm alloc] initPrivate]; + RLMRealm *realm = [[self alloc] initPrivate]; realm->_dynamic = dynamic; // protects the realm cache and accessors cache @@ -580,15 +647,8 @@ - (void)commitWriteTransaction { [self commitWriteTransaction:nil]; } -- (BOOL)commitWriteTransaction:(NSError **)outError { - try { - _realm->commit_transaction(); - return YES; - } - catch (...) { - RLMRealmTranslateException(outError); - return NO; - } +- (BOOL)commitWriteTransaction:(NSError **)error { + return [self commitWriteTransactionWithoutNotifying:@[] error:error]; } - (BOOL)commitWriteTransactionWithoutNotifying:(NSArray *)tokens error:(NSError **)error { @@ -614,10 +674,18 @@ - (void)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block { } - (BOOL)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block error:(NSError **)outError { + return [self transactionWithoutNotifying:@[] block:block error:outError]; +} + +- (void)transactionWithoutNotifying:(NSArray *)tokens block:(__attribute__((noescape)) void(^)(void))block { + [self transactionWithoutNotifying:tokens block:block error:nil]; +} + +- (BOOL)transactionWithoutNotifying:(NSArray *)tokens block:(__attribute__((noescape)) void(^)(void))block error:(NSError **)error { [self beginWriteTransaction]; block(); if (_realm->is_in_transaction()) { - return [self commitWriteTransaction:outError]; + return [self commitWriteTransactionWithoutNotifying:tokens error:error]; } return YES; } @@ -712,7 +780,7 @@ - (BOOL)refresh { } - (void)addObject:(__unsafe_unretained RLMObject *const)object { - RLMAddObjectToRealm(object, self, false); + RLMAddObjectToRealm(object, self, RLMUpdatePolicyError); } - (void)addObjects:(id)objects { @@ -731,7 +799,7 @@ - (void)addOrUpdateObject:(RLMObject *)object { @throw RLMException(@"'%@' does not have a primary key and can not be updated", object.objectSchema.className); } - RLMAddObjectToRealm(object, self, true); + RLMAddObjectToRealm(object, self, RLMUpdatePolicyUpdateAll); } - (void)addOrUpdateObjects:(id)objects { @@ -837,7 +905,7 @@ + (BOOL)performMigrationForConfiguration:(RLMRealmConfiguration *)configuration } - (RLMObject *)createObject:(NSString *)className withValue:(id)value { - return (RLMObject *)RLMCreateObjectInRealmWithValue(self, className, value, false); + return (RLMObject *)RLMCreateObjectInRealmWithValue(self, className, value, RLMUpdatePolicyError); } - (BOOL)writeCopyToURL:(NSURL *)fileURL encryptionKey:(NSData *)key error:(NSError **)error { @@ -860,6 +928,7 @@ - (BOOL)writeCopyToURL:(NSURL *)fileURL encryptionKey:(NSData *)key error:(NSErr return NO; } +#if REALM_ENABLE_SYNC using Privilege = realm::ComputedPrivileges; static bool hasPrivilege(realm::ComputedPrivileges actual, realm::ComputedPrivileges expected) { return (static_cast(actual) & static_cast(expected)) == static_cast(expected); @@ -903,6 +972,7 @@ - (RLMClassPrivileges)privilegesForClassNamed:(NSString *)className { .create = hasPrivilege(p, Privilege::Create), }; } +#endif - (void)registerEnumerator:(RLMFastEnumerator *)enumerator { if (!_collectionEnumerators) { diff --git a/Pods/Realm/Realm/RLMRealmConfiguration.mm b/Pods/Realm/Realm/RLMRealmConfiguration.mm index 3635f819b7..114b8d6b39 100644 --- a/Pods/Realm/Realm/RLMRealmConfiguration.mm +++ b/Pods/Realm/Realm/RLMRealmConfiguration.mm @@ -25,7 +25,12 @@ #import "schema.hpp" #import "shared_realm.hpp" + +#if REALM_ENABLE_SYNC #import "sync/sync_config.hpp" +#else +@class RLMSyncConfiguration; +#endif static NSString *const c_RLMRealmConfigurationProperties[] = { @"fileURL", @@ -190,16 +195,20 @@ - (void)setEncryptionKey:(NSData * __nullable)encryptionKey { if (NSData *key = RLMRealmValidatedEncryptionKey(encryptionKey)) { auto bytes = static_cast(key.bytes); _config.encryption_key.assign(bytes, bytes + key.length); +#if REALM_ENABLE_SYNC if (_config.sync_config) { auto& sync_encryption_key = self.config.sync_config->realm_encryption_key; sync_encryption_key = std::array(); std::copy_n(_config.encryption_key.begin(), 64, sync_encryption_key->begin()); } +#endif } else { _config.encryption_key.clear(); +#if REALM_ENABLE_SYNC if (_config.sync_config) _config.sync_config->realm_encryption_key = realm::util::none; +#endif } } @@ -300,4 +309,10 @@ - (void)setCustomSchemaWithoutCopying:(RLMSchema *)schema { _customSchema = schema; } +#if !REALM_ENABLE_SYNC +- (RLMSyncConfiguration *)syncConfiguration { + return nil; +} +#endif + @end diff --git a/Pods/Realm/Realm/RLMResults.mm b/Pods/Realm/Realm/RLMResults.mm index 956393c603..d1593a9e0d 100644 --- a/Pods/Realm/Realm/RLMResults.mm +++ b/Pods/Realm/Realm/RLMResults.mm @@ -111,19 +111,29 @@ void RLMThrowResultsError(NSString *aggregateMethod) { } } +- (instancetype)initWithObjectInfo:(RLMClassInfo&)info + results:(realm::Results&&)results { + if (self = [super init]) { + _results = std::move(results); + _realm = info.realm; + _info = &info; + } + return self; +} + + (instancetype)resultsWithObjectInfo:(RLMClassInfo&)info - results:(realm::Results)results { - RLMResults *ar = [[self alloc] initPrivate]; - ar->_results = std::move(results); - ar->_realm = info.realm; - ar->_info = &info; - return ar; + results:(realm::Results&&)results { + return [[self alloc] initWithObjectInfo:info results:std::move(results)]; } + (instancetype)emptyDetachedResults { return [[self alloc] initPrivate]; } +- (instancetype)subresultsWithResults:(realm::Results)results { + return [self.class resultsWithObjectInfo:*_info results:std::move(results)]; +} + static inline void RLMResultsValidateInWriteTransaction(__unsafe_unretained RLMResults *const ar) { ar->_realm->_realm->verify_thread(); ar->_realm->_realm->verify_in_write(); @@ -349,7 +359,7 @@ - (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate { @throw RLMException(@"Querying is currently only implemented for arrays of Realm Objects"); } auto query = RLMPredicateToQuery(predicate, _info->rlmObjectSchema, _realm.schema, _realm.group); - return [RLMResults resultsWithObjectInfo:*_info results:_results.filter(std::move(query))]; + return [self subresultsWithResults:_results.filter(std::move(query))]; }); } @@ -365,8 +375,7 @@ - (RLMResults *)sortedResultsUsingDescriptors:(NSArray *)pr if (_results.get_mode() == Results::Mode::Empty) { return self; } - return [RLMResults resultsWithObjectInfo:*_info - results:_results.sort(RLMSortDescriptorsToKeypathArray(properties))]; + return [self subresultsWithResults:_results.sort(RLMSortDescriptorsToKeypathArray(properties))]; }); } @@ -387,7 +396,7 @@ - (RLMResults *)distinctResultsUsingKeyPaths:(NSArray *)keyPaths { keyPathsVector.push_back(keyPath.UTF8String); } - return [RLMResults resultsWithObjectInfo:*_info results:_results.distinct(keyPathsVector)]; + return [self subresultsWithResults:_results.distinct(keyPathsVector)]; }); } @@ -474,6 +483,9 @@ - (RLMFastEnumerator *)fastEnumerator { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wmismatched-parameter-types" - (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMResults *, RLMCollectionChange *, NSError *))block { + if (!_realm) { + @throw RLMException(@"Linking objects notifications are only supported on managed objects."); + } [_realm verifyNotificationsAreSupported:true]; return RLMAddNotificationBlock(self, _results, block, true); } diff --git a/Pods/Realm/Realm/RLMSyncConfiguration.mm b/Pods/Realm/Realm/RLMSyncConfiguration.mm index fa48291083..aaa75b30f1 100644 --- a/Pods/Realm/Realm/RLMSyncConfiguration.mm +++ b/Pods/Realm/Realm/RLMSyncConfiguration.mm @@ -253,6 +253,7 @@ - (instancetype)initWithUser:(RLMSyncUser *)user _config->bind_session_handler = std::move(bindHandler); _config->error_handler = std::move(errorHandler); _config->is_partial = isPartial; + _config->client_resync_mode = realm::ClientResyncMode::Manual; if (NSString *authorizationHeaderName = [RLMSyncManager sharedManager].authorizationHeaderName) { _config->authorization_header_name.emplace(authorizationHeaderName.UTF8String); diff --git a/Pods/Realm/Realm/RLMSyncCredentials.m b/Pods/Realm/Realm/RLMSyncCredentials.m index a1521a2bad..480c539e43 100644 --- a/Pods/Realm/Realm/RLMSyncCredentials.m +++ b/Pods/Realm/Realm/RLMSyncCredentials.m @@ -32,6 +32,7 @@ RLMIdentityProvider const RLMIdentityProviderJWT = @"jwt"; RLMIdentityProvider const RLMIdentityProviderAnonymous = @"anonymous"; RLMIdentityProvider const RLMIdentityProviderNickname = @"nickname"; +RLMIdentityProvider const RLMIdentityProviderCustomRefreshToken = @"customrefreshtoken"; @interface RLMSyncCredentials () @@ -95,6 +96,17 @@ + (instancetype)credentialsWithAccessToken:(RLMServerToken)accessToken identity: userInfo:@{kRLMSyncIdentityKey: identity}]; } ++ (instancetype)credentialsWithCustomRefreshToken:(NSString *)token identity:(NSString *)identity isAdmin:(BOOL)isAdmin { + NSDictionary *userInfo = @{ + kRLMSyncIdentityKey: identity, + kRLMSyncIsAdminKey: @(isAdmin) + }; + return [[self alloc] initWithCustomToken:token + provider:RLMIdentityProviderCustomRefreshToken + userInfo:userInfo]; + +} + - (BOOL)isEqual:(id)object { if (![object isKindOfClass:[RLMSyncCredentials class]]) { return NO; diff --git a/Pods/Realm/Realm/RLMSyncManager.mm b/Pods/Realm/Realm/RLMSyncManager.mm index 8fbb205afd..f5d2c854ab 100644 --- a/Pods/Realm/Realm/RLMSyncManager.mm +++ b/Pods/Realm/Realm/RLMSyncManager.mm @@ -138,6 +138,21 @@ - (void)setUserAgent:(NSString *)userAgent { _userAgent = userAgent; } +- (void)setCustomRequestHeaders:(NSDictionary *)customRequestHeaders { + _customRequestHeaders = customRequestHeaders.copy; + + for (auto&& user : SyncManager::shared().all_logged_in_users()) { + for (auto&& session : user->all_sessions()) { + auto config = session->config(); + config.custom_http_headers.clear();; + for (NSString *key in customRequestHeaders) { + config.custom_http_headers.emplace(key.UTF8String, customRequestHeaders[key].UTF8String); + } + session->update_configuration(std::move(config)); + } + } +} + #pragma mark - Passthrough properties - (RLMSyncLogLevel)logLevel { diff --git a/Pods/Realm/Realm/RLMSyncSession.mm b/Pods/Realm/Realm/RLMSyncSession.mm index cb38484ee8..cddaade2f7 100644 --- a/Pods/Realm/Realm/RLMSyncSession.mm +++ b/Pods/Realm/Realm/RLMSyncSession.mm @@ -22,6 +22,8 @@ #import "RLMSyncConfiguration_Private.hpp" #import "RLMSyncUser_Private.hpp" #import "RLMSyncUtil_Private.hpp" + +#import "sync/async_open_task.hpp" #import "sync/sync_session.hpp" using namespace realm; @@ -109,7 +111,9 @@ - (instancetype)initWithSyncSession:(std::shared_ptr const&)session // No need to save the token as RLMSyncSession always outlives the // underlying SyncSession session->register_connection_change_callback([=](auto, auto newState) { - self.connectionState = convertConnectionState(newState); + dispatch_async(dispatch_get_main_queue(), ^{ + self.connectionState = convertConnectionState(newState); + }); }); return self; } @@ -243,3 +247,60 @@ - (instancetype)initWithOriginalPath:(std::string)originalPath { } @end + +@implementation RLMAsyncOpenTask { + bool _cancel; + NSMutableArray *_blocks; +} + +- (void)addProgressNotificationOnQueue:(dispatch_queue_t)queue block:(RLMProgressNotificationBlock)block { + auto wrappedBlock = ^(NSUInteger transferred_bytes, NSUInteger transferrable_bytes) { + dispatch_async(queue, ^{ + @autoreleasepool { + block(transferred_bytes, transferrable_bytes); + } + }); + }; + + @synchronized (self) { + if (_task) { + _task->register_download_progress_notifier(wrappedBlock); + } + else if (!_cancel) { + if (!_blocks) { + _blocks = [NSMutableArray new]; + } + [_blocks addObject:wrappedBlock]; + } + } +} + +- (void)addProgressNotificationBlock:(RLMProgressNotificationBlock)block { + [self addProgressNotificationOnQueue:dispatch_get_main_queue() block:block]; +} + +- (void)cancel { + @synchronized (self) { + if (_task) { + _task->cancel(); + } + else { + _cancel = true; + _blocks = nil; + } + } +} + +- (void)setTask:(std::shared_ptr)task { + @synchronized (self) { + _task = task; + if (_cancel) { + _task->cancel(); + } + for (RLMProgressNotificationBlock block in _blocks) { + _task->register_download_progress_notifier(block); + } + _blocks = nil; + } +} +@end diff --git a/Pods/Realm/Realm/RLMSyncSubscription.mm b/Pods/Realm/Realm/RLMSyncSubscription.mm index e5d457541a..1729249a19 100644 --- a/Pods/Realm/Realm/RLMSyncSubscription.mm +++ b/Pods/Realm/Realm/RLMSyncSubscription.mm @@ -18,40 +18,119 @@ #import "RLMSyncSubscription.h" +#import "RLMObjectSchema_Private.hpp" +#import "RLMObject_Private.hpp" +#import "RLMProperty_Private.hpp" #import "RLMRealm_Private.hpp" #import "RLMResults_Private.hpp" #import "RLMUtil.hpp" +#import "object_store.hpp" #import "sync/partial_sync.hpp" using namespace realm; -@interface RLMSyncSubscription () -- (instancetype)initWithName:(NSString *)name results:(Results const&)results realm:(RLMRealm *)realm; +@implementation RLMSyncSubscriptionOptions +@end +@interface RLMSyncSubscription () @property (nonatomic, readwrite) RLMSyncSubscriptionState state; @property (nonatomic, readwrite, nullable) NSError *error; +@property (nonatomic, readwrite) NSString *query; +@property (nonatomic, readwrite, nullable) NSDate *createdAt; +@property (nonatomic, readwrite, nullable) NSDate *updatedAt; +@property (nonatomic, readwrite, nullable) NSDate *expiresAt; +@property (nonatomic, readwrite) NSTimeInterval timeToLive; @end @implementation RLMSyncSubscription { partial_sync::SubscriptionNotificationToken _token; util::Optional _subscription; + Object _obj; RLMRealm *_realm; } -- (instancetype)initWithName:(NSString *)name results:(Results const&)results realm:(RLMRealm *)realm { +static std::vector parseKeypath(StringData keypath, Group const& group, + Schema const& schema, const ObjectSchema *objectSchema) { + auto check = [&](bool condition, const char* fmt, auto... args) { + if (!condition) { + throw std::invalid_argument(util::format("Invalid LinkingObjects inclusion from key path '%1': %2.", + keypath, util::format(fmt, args...))); + } + }; + + const char* begin = keypath.data(); + const char* end = keypath.data() + keypath.size(); + check(begin != end, "missing property name"); + + std::vector ret; + while (begin != end) { + auto sep = std::find(begin, end, '.'); + check(sep != begin && sep + 1 != end, "missing property name"); + StringData key(begin, sep - begin); + begin = sep + (sep != end); + + auto prop = objectSchema->property_for_name(key); + check(prop, "property '%1.%2' does not exist", objectSchema->name, key); + check(prop->type == PropertyType::Object || prop->type == PropertyType::LinkingObjects, + "property '%1.%2' is of unsupported type '%3'", + objectSchema->name, key, string_for_property_type(prop->type)); + + objectSchema = &*schema.find(prop->object_type); + + if (prop->type == PropertyType::Object) { + check(begin != end, "key path must end in a LinkingObjects property and '%1.%2' is of type '%3'", + objectSchema->name, key, string_for_property_type(prop->type)); + ret.emplace_back(prop->table_column); + } + else { + ret.emplace_back(objectSchema->property_for_name(prop->link_origin_property_name)->table_column, + ObjectStore::table_for_object_type(group, objectSchema->name)); + } + } + return ret; +} + +- (instancetype)initWithOptions:(RLMSyncSubscriptionOptions *)options results:(Results const&)results realm:(RLMRealm *)realm { if (!(self = [super init])) return nil; - _name = [name copy]; + _name = [options.name copy]; + _timeToLive = NAN; _realm = realm; - _subscription = partial_sync::subscribe(results, name ? util::make_optional(name.UTF8String) : util::none); + _createdAt = _updatedAt = NSDate.date; + try { + partial_sync::SubscriptionOptions opt; + if (options.name) { + opt.user_provided_name = std::string(RLMStringDataWithNSString(options.name)); + } + if (options.timeToLive > 0) { + opt.time_to_live_ms = options.timeToLive * 1000; + } + opt.update = options.overwriteExisting; + if (options.includeLinkingObjectProperties) { + std::vector> keypaths; + for (NSString *keyPath in options.includeLinkingObjectProperties) { + keypaths.push_back(parseKeypath(keyPath.UTF8String, realm.group, + realm->_realm->schema(), + &results.get_object_schema())); + } + opt.inclusions = IncludeDescriptor{*ObjectStore::table_for_object_type(realm.group, results.get_object_type()), keypaths}; + } + _subscription = partial_sync::subscribe(options.limit ? results.limit(options.limit) : results, std::move(opt)); + } + catch (std::exception const& e) { + @throw RLMException(e); + } self.state = (RLMSyncSubscriptionState)_subscription->state(); - __weak RLMSyncSubscription *weakSelf = self; + __weak auto weakSelf = self; _token = _subscription->add_notification_callback([weakSelf] { - RLMSyncSubscription *self = weakSelf; - if (!self) - return; + RLMSyncSubscription *self; + @autoreleasepool { + self = weakSelf; + if (!self) + return; + } // Retrieve the current error and status. Update our properties only if the values have changed, // since clients use KVO to observe these properties. @@ -71,8 +150,35 @@ - (instancetype)initWithName:(NSString *)name results:(Results const&)results re } auto status = (RLMSyncSubscriptionState)self->_subscription->state(); - if (status != self.state) - self.state = (RLMSyncSubscriptionState)status; + if (status != self.state) { + if (status == RLMSyncSubscriptionStateCreating) { + // If a subscription is deleted without going through this + // object's unsubscribe() method the subscription will transition + // back to Creating rather than Invalidated since it doesn't + // have a good way to track that it previously existed + if (self.state != RLMSyncSubscriptionStateInvalidated) + self.state = RLMSyncSubscriptionStateInvalidated; + } + else { + self.state = status; + } + } + + if (status != RLMSyncSubscriptionStateComplete) { + return; + } + + auto obj = self->_subscription->result_set_object(); + if (obj && obj->is_valid()) { + _obj = std::move(*obj); + _token = {}; + _token.result_sets_token = _obj.add_notification_callback([weakSelf](CollectionChangeSet const&, std::exception_ptr) { + @autoreleasepool { + [weakSelf updateFromRow]; + } + }); + [self updateFromRow]; + } }); return self; @@ -81,20 +187,249 @@ - (instancetype)initWithName:(NSString *)name results:(Results const&)results re - (void)unsubscribe { partial_sync::unsubscribe(*_subscription); } + +- (void)updateFromRow { + // We only want to call the setter if the value actually changed because of KVO +#define REALM_SET_IF_CHANGED(prop, value) do { \ + auto newValue = value; \ + if (prop != newValue) { \ + prop = newValue; \ + } \ +} while (0) + + if (!_obj.is_valid()) { + REALM_SET_IF_CHANGED(self.state, RLMSyncSubscriptionStateInvalidated); + return; + } + + auto row = _obj.row(); + REALM_SET_IF_CHANGED(self.query, RLMStringDataToNSString(row.get_string(row.get_column_index("query")))); + REALM_SET_IF_CHANGED(self.createdAt, RLMTimestampToNSDate(row.get_timestamp(row.get_column_index("created_at")))); + REALM_SET_IF_CHANGED(self.updatedAt, RLMTimestampToNSDate(row.get_timestamp(row.get_column_index("updated_at")))); + REALM_SET_IF_CHANGED(self.expiresAt, RLMTimestampToNSDate(row.get_timestamp(row.get_column_index("expires_at")))); +#undef REALM_SET_IF_CHANGED + + auto ttl = row.get>(row.get_column_index("time_to_live")); + if (ttl && _timeToLive != *ttl / 1000.0) { + self.timeToLive = *ttl / 1000.0; + } + else if (!ttl && !isnan(_timeToLive)) { + self.timeToLive = NAN; + } +} @end -@implementation RLMResults (SyncSubscription) +@interface RLMSyncSubscriptionObject : RLMObjectBase +@end +@implementation RLMSyncSubscriptionObject { + util::Optional _token; + Object _obj; +} + +- (NSString *)name { + return _row.is_attached() ? RLMStringDataToNSString(_row.get_string(_row.get_column_index("name"))) : nil; +} + +- (NSString *)query { + return _row.is_attached() ? RLMStringDataToNSString(_row.get_string(_row.get_column_index("query"))) : nil; +} + +- (RLMSyncSubscriptionState)state { + if (!_row.is_attached()) { + return RLMSyncSubscriptionStateInvalidated; + } + return (RLMSyncSubscriptionState)_row.get_int(_row.get_column_index("status")); +} + +- (NSError *)error { + if (!_row.is_attached()) { + return nil; + } + StringData err = _row.get_string(_row.get_column_index("error_message")); + if (!err.size()) { + return nil; + } + return [NSError errorWithDomain:RLMErrorDomain + code:RLMErrorFail + userInfo:@{NSLocalizedDescriptionKey: RLMStringDataToNSString(err)}]; +} + +- (NSDate *)createdAt { + return _row.is_attached() ? RLMTimestampToNSDate(_row.get_timestamp(_row.get_column_index("created_at"))) : nil; +} + +- (NSDate *)updatedAt { + return _row.is_attached() ? RLMTimestampToNSDate(_row.get_timestamp(_row.get_column_index("updated_at"))) : nil; +} + +- (NSDate *)expiresAt { + return _row.is_attached() ? RLMTimestampToNSDate(_row.get_timestamp(_row.get_column_index("expires_at"))) : nil; +} + +- (NSTimeInterval)timeToLive { + if (!_row.is_attached()) { + return NAN; + } + auto columnIndex = _row.get_column_index("time_to_live"); + if (_row.is_null(columnIndex)) { + return NAN; + } + return _row.get_int(columnIndex) / 1000.0; +} + +- (NSString *)descriptionWithMaxDepth:(NSUInteger)depth { + if (depth == 0) { + return @""; + } + + auto objectType = _row.get_string(_row.get_column_index("matches_property")); + objectType = objectType.substr(0, objectType.size() - strlen("_matches")); + return [NSString stringWithFormat:@"RLMSyncSubscription {\n\tname = %@\n\tobjectType = %@\n\tquery = %@\n\tstatus = %@\n\terror = %@\n\tcreatedAt = %@\n\tupdatedAt = %@\n\texpiresAt = %@\n\ttimeToLive = %@\n}", + self.name, RLMStringDataToNSString(objectType), + RLMStringDataToNSString(_row.get_string(_row.get_column_index("query"))), + @(self.state), self.error, self.createdAt, self.updatedAt, self.expiresAt, @(self.timeToLive)]; +} + +- (void)unsubscribe { + if (_row) { + partial_sync::unsubscribe(Object(_realm->_realm, *_info->objectSchema, _row)); + } +} + +- (void)addObserver:(id)observer + forKeyPath:(NSString *)keyPath + options:(NSKeyValueObservingOptions)options + context:(void *)context { + // Make the `state` property observable by using an object notifier to + // trigger changes. The normal KVO mechanisms don't work for this class due + // to it not being a normal part of the schema. + if (!_token) { + struct { + __weak RLMSyncSubscriptionObject *weakSelf; + + void before(realm::CollectionChangeSet const&) { + @autoreleasepool { + [weakSelf willChangeValueForKey:@"state"]; + } + } + + void after(realm::CollectionChangeSet const&) { + @autoreleasepool { + [weakSelf didChangeValueForKey:@"state"]; + } + } + + void error(std::exception_ptr) {} + } callback{self}; + _obj = Object(_realm->_realm, *_info->objectSchema, _row); + _token = _obj.add_notification_callback(callback); + } + [super addObserver:observer forKeyPath:keyPath options:options context:context]; +} +@end + +static ObjectSchema& addPublicNames(ObjectSchema& os) { + using namespace partial_sync; + os.property_for_name(property_created_at)->public_name = "createdAt"; + os.property_for_name(property_updated_at)->public_name = "updatedAt"; + os.property_for_name(property_expires_at)->public_name = "expiresAt"; + os.property_for_name(property_time_to_live)->public_name = "timeToLive"; + os.property_for_name(property_error_message)->public_name = "error"; + return os; +} +// RLMClassInfo stores pointers into the schema rather than owning the objects +// it points to, so for a ClassInfo that's not part of the schema we need a +// wrapper object that owns them +RLMResultsSetInfo::RLMResultsSetInfo(__unsafe_unretained RLMRealm *const realm) +: osObjectSchema(realm->_realm->read_group(), partial_sync::result_sets_type_name) +, rlmObjectSchema([RLMObjectSchema objectSchemaForObjectStoreSchema:addPublicNames(osObjectSchema)]) +, info(realm, rlmObjectSchema, &osObjectSchema) +{ + rlmObjectSchema.accessorClass = [RLMSyncSubscriptionObject class]; +} + +RLMClassInfo& RLMResultsSetInfo::get(__unsafe_unretained RLMRealm *const realm) { + if (!realm->_resultsSetInfo) { + realm->_resultsSetInfo = std::make_unique(realm); + } + return realm->_resultsSetInfo->info; +} + +@interface RLMSubscriptionResults : RLMResults +@end + +@implementation RLMSubscriptionResults ++ (instancetype)resultsWithRealm:(RLMRealm *)realm { + auto table = ObjectStore::table_for_object_type(realm->_realm->read_group(), partial_sync::result_sets_type_name); + if (!table) { + @throw RLMException(@"-[RLMRealm subscriptions] can only be called on a Realm using query-based sync"); + } + // The server automatically adds a few subscriptions for the permissions + // types which we want to hide. They're just an implementation detail and + // deleting them won't work out well for the user. + auto query = table->where().ends_with(table->get_column_index("matches_property"), "_matches"); + return [self resultsWithObjectInfo:RLMResultsSetInfo::get(realm) + results:Results(realm->_realm, std::move(query))]; +} + +// These operations require a valid schema for the type. It's unclear how they +// would be useful so it's probably not worth fixing this. +- (RLMResults *)sortedResultsUsingDescriptors:(__unused NSArray *)properties { + @throw RLMException(@"Sorting subscription results is currently not implemented"); +} + +- (RLMResults *)distinctResultsUsingKeyPaths:(__unused NSArray *)keyPaths { + @throw RLMException(@"Distincting subscription results is currently not implemented"); +} +@end + +@implementation RLMResults (SyncSubscription) - (RLMSyncSubscription *)subscribe { - return [[RLMSyncSubscription alloc] initWithName:nil results:_results realm:self.realm]; + return [[RLMSyncSubscription alloc] initWithOptions:nil results:_results realm:self.realm]; } - (RLMSyncSubscription *)subscribeWithName:(NSString *)subscriptionName { - return [[RLMSyncSubscription alloc] initWithName:subscriptionName results:_results realm:self.realm]; + auto options = [[RLMSyncSubscriptionOptions alloc] init]; + options.name = subscriptionName; + return [[RLMSyncSubscription alloc] initWithOptions:options results:_results realm:self.realm]; } - (RLMSyncSubscription *)subscribeWithName:(NSString *)subscriptionName limit:(NSUInteger)limit { - return [[RLMSyncSubscription alloc] initWithName:subscriptionName results:_results.limit(limit) realm:self.realm]; + auto options = [[RLMSyncSubscriptionOptions alloc] init]; + options.name = subscriptionName; + options.limit = limit; + return [[RLMSyncSubscription alloc] initWithOptions:options results:_results realm:self.realm]; } +- (RLMSyncSubscription *)subscribeWithOptions:(RLMSyncSubscriptionOptions *)options { + return [[RLMSyncSubscription alloc] initWithOptions:options results:_results realm:self.realm]; +} @end + +@implementation RLMRealm (SyncSubscription) +- (RLMResults *)subscriptions { + [self verifyThread]; + return [RLMSubscriptionResults resultsWithRealm:self]; +} + +- (nullable RLMSyncSubscription *)subscriptionWithName:(NSString *)name { + [self verifyThread]; + auto& info = RLMResultsSetInfo::get(self); + if (!info.table()) { + @throw RLMException(@"-[RLMRealm subcriptionWithName:] can only be called on a Realm using query-based sync"); + } + auto row = info.table()->find_first(info.table()->get_column_index("name"), + RLMStringDataWithNSString(name)); + if (row == npos) { + return nil; + } + RLMObjectBase *acc = RLMCreateManagedAccessor(info.rlmObjectSchema.accessorClass, self, &info); + acc->_row = info.table()->get(row); + return (RLMSyncSubscription *)acc; +} +@end + +RLMSyncSubscription *RLMCastToSyncSubscription(id obj) { + return obj; +} diff --git a/Pods/Realm/Realm/RLMSyncUser.mm b/Pods/Realm/Realm/RLMSyncUser.mm index 63d14ac628..d82321aac1 100644 --- a/Pods/Realm/Realm/RLMSyncUser.mm +++ b/Pods/Realm/Realm/RLMSyncUser.mm @@ -562,6 +562,14 @@ + (void)_performLogInForUser:(RLMSyncUser *)user @throw RLMException(@"A user cannot be logged in without specifying an authentication server URL."); } + if (credentials.provider == RLMIdentityProviderCustomRefreshToken) { + [self _performLoginForCustomRefreshTokenCredentials:credentials + user:user + authServerURL:authServerURL + completionBlock:completion]; + return; + } + // Prepare login network request NSMutableDictionary *json = [@{ kRLMSyncProviderKey: credentials.provider, @@ -661,6 +669,32 @@ + (void)_performLoginForDirectAccessTokenCredentials:(RLMSyncCredentials *)crede completion(user, nil); } ++ (void)_performLoginForCustomRefreshTokenCredentials:(RLMSyncCredentials *)credentials + user:(RLMSyncUser *)user + authServerURL:(NSURL *)serverURL + completionBlock:(nonnull RLMUserCompletionBlock)completion { + NSString *scheme = serverURL.scheme; + if (![scheme isEqualToString:@"http"] && ![scheme isEqualToString:@"https"]) { + @throw RLMException(@"The Realm Object Server authentication URL provided for this user, \"%@\", " + @" is invalid. It must begin with http:// or https://.", serverURL); + } + + NSString *identity = credentials.userInfo[kRLMSyncIdentityKey]; + SyncUserIdentifier identifier{identity.UTF8String, serverURL.absoluteString.UTF8String}; + + std::shared_ptr sync_user = SyncManager::shared().get_user(std::move(identifier), credentials.token.UTF8String); + if (!sync_user) { + completion(nil, make_auth_error_client_issue()); + return; + } + + NSNumber *isAdmin = credentials.userInfo[kRLMSyncIsAdminKey]; + sync_user->set_is_admin(isAdmin.boolValue); + + user->_user = sync_user; + completion(user, nil); +} + @end #pragma mark - RLMSyncUserInfo diff --git a/Pods/Realm/build.sh b/Pods/Realm/build.sh index 3cbc7c34a6..6fa5542ffa 100755 --- a/Pods/Realm/build.sh +++ b/Pods/Realm/build.sh @@ -6,8 +6,8 @@ # (C) Copyright 2011-2015 by realm.io. ################################################################################## -# Warning: pipefail is not a POSIX compatible option, but on OS X it works just fine. -# OS X uses a POSIX complain version of bash as /bin/sh, but apparently it does +# Warning: pipefail is not a POSIX compatible option, but on macOS it works just fine. +# macOS uses a POSIX complain version of bash as /bin/sh, but apparently it does # not strip away this feature. Also, this will fail if somebody forces the script # to be run with zsh. set -o pipefail @@ -16,6 +16,8 @@ set -e source_root="$(dirname "$0")" # You can override the version of the core library +: ${REALM_BASE_URL:="https://static.realm.io/downloads"} # set it if you need to use a remote repo + : ${REALM_CORE_VERSION:=$(sed -n 's/^REALM_CORE_VERSION=\(.*\)$/\1/p' ${source_root}/dependencies.list)} # set to "current" to always use the current build : ${REALM_SYNC_VERSION:=$(sed -n 's/^REALM_SYNC_VERSION=\(.*\)$/\1/p' ${source_root}/dependencies.list)} @@ -43,7 +45,7 @@ command: clean: clean up/remove all generated files download-core: downloads core library (binary version) download-sync: downloads sync library (binary version, core+sync) - build: builds all iOS and OS X frameworks + build: builds all iOS and macOS frameworks ios-static: builds fat iOS static framework ios-dynamic: builds iOS dynamic frameworks ios-swift: builds RealmSwift frameworks for iOS @@ -51,11 +53,12 @@ command: watchos-swift: builds RealmSwift framework for watchOS tvos: builds tvOS framework tvos-swift: builds RealmSwift framework for tvOS - osx: builds OS X framework - osx-swift: builds RealmSwift framework for OS X - analyze-osx: analyzes OS X framework - test: tests all iOS and OS X frameworks - test-all: tests all iOS and OS X frameworks in both Debug and Release configurations + osx: builds macOS framework + osx-swift: builds RealmSwift framework for macOS + xcframework [plats]: builds xcframeworks for Realm and RealmSwift for given platforms + analyze-osx: analyzes macOS framework + test: tests all iOS and macOS frameworks + test-all: tests all iOS and macOS frameworks in both Debug and Release configurations test-ios-static: tests static iOS framework on 32-bit and 64-bit simulators test-ios-dynamic: tests dynamic iOS framework on 32-bit and 64-bit simulators test-ios-swift: tests RealmSwift iOS framework on 32-bit and 64-bit simulators @@ -65,15 +68,16 @@ command: test-tvos: tests tvOS framework test-tvos-swift: tests RealmSwift tvOS framework test-tvos-devices: tests ObjC & Swift tvOS frameworks on all attached tvOS devices - test-osx: tests OS X framework - test-osx-swift: tests RealmSwift OS X framework + test-osx: tests macOS framework + test-osx-swift: tests RealmSwift macOS framework + test-swiftpm: tests ObjC and Swift macOS frameworks via SwiftPM verify: verifies docs, osx, osx-swift, ios-static, ios-dynamic, ios-swift, ios-device in both Debug and Release configurations, swiftlint verify-osx-object-server: downloads the Realm Object Server and runs the Objective-C and Swift integration tests docs: builds docs in docs/output examples: builds all examples examples-ios: builds all static iOS examples examples-ios-swift: builds all Swift iOS examples - examples-osx: builds all OS X examples + examples-osx: builds all macOS examples get-version: get the current version set-version version: set the version cocoapods-setup: download realm-core and create a stub RLMPlatform.h file to enable building via CocoaPods @@ -124,7 +128,7 @@ xc() { } xctest() { - xc "$@" build + xc "$@" build-for-testing xc "$@" test } @@ -145,25 +149,18 @@ build_combined() { local os_name="" if [[ "$os" == "iphoneos" ]]; then os_name="ios" - destination="iPhone 6" + destination="iPhone 8" elif [[ "$os" == "watchos" ]]; then os_name="$os" - if (( $(xcode_version_major) >= 10 )); then - destination="Apple Watch Series 3 - 42mm" - else - destination="Apple Watch - 42mm" - fi + destination="Apple Watch Series 3 - 42mm" elif [[ "$os" == "appletvos" ]]; then os_name="tvos" - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" fi # Derive build paths local build_products_path="build/DerivedData/Realm/Build/Products" + local build_intermediates_path="build/DerivedData/Realm/Build/Intermediates.noindex" local product_name="$module_name.framework" local binary_path="$module_name" local os_path="$build_products_path/$config-$os$scope_suffix/$product_name" @@ -179,6 +176,20 @@ build_combined() { cp $simulator_path/Modules/$module_name.swiftmodule/* $os_path/Modules/$module_name.swiftmodule/ fi + # Xcode 10.2 merges the generated headers together with ifdef guards for + # each of the target platforms. This doesn't handle merging + # device/simulator builds, so we need to take care of that ourselves. + # Currently all platforms have identical headers, so we just pick one and + # use that rather than merging, but this may change in the future. + if [ -f $os_path/Headers/$module_name-Swift.h ]; then + unique_headers=$(find $build_intermediates_path -name $module_name-Swift.h -exec shasum {} \; | cut -d' ' -f 1 | uniq | grep -c '^') + if [ $unique_headers != "1" ]; then + echo "Platform-specific Swift generated headers are not identical. Merging them is required and is not yet implemented." + exit 1 + fi + find $build_intermediates_path -name $module_name-Swift.h -exec cp {} $os_path/Headers \; -quit + fi + # Copy *.bcsymbolmap to .framework for submitting app with bitcode copy_bcsymbolmap "$build_products_path/$config-$os$scope_suffix" "$os_path" @@ -196,6 +207,12 @@ build_combined() { fi } +copy_realm_framework() { + local platform="$1" + rm -rf build/$platform/swift-$REALM_XCODE_VERSION/Realm.framework + cp -R build/$platform/Realm.framework build/$platform/swift-$REALM_XCODE_VERSION +} + clean_retrieve() { mkdir -p "$2" rm -rf "$2/$3" @@ -210,20 +227,14 @@ move_to_clean_dir() { test_ios_static() { destination="$1" - xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' build" - if (( $(xcode_version_major) < 9 )); then - xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' test 'ARCHS=\$(ARCHS_STANDARD_32_BIT)'" - fi - - # Xcode's depending tracking is lacking and it doesn't realize that the Realm static framework's static library - # needs to be recreated when the active architectures change. Help Xcode out by removing the static library. - settings=$(xcode "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' -showBuildSettings") - path=$(echo "$settings" | awk '/CONFIGURATION_BUILD_DIR/ { cbd = $3; } /EXECUTABLE_PATH/ { ep = $3; } END { printf "%s/%s\n", cbd, ep; }') - rm "$path" - + xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' build-for-testing" xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' test" } +plist_get() { + /usr/libexec/PlistBuddy -c "Print :$2" $1 2> /dev/null +} + ###################################### # Device Test Helper ###################################### @@ -319,16 +330,16 @@ download_common() { if [ "$download_type" == "core" ]; then version=$REALM_CORE_VERSION - url="https://static.realm.io/downloads/core/realm-core-${version}.tar.xz" + url="${REALM_BASE_URL}/core/realm-core-${version}.tar.xz" elif [ "$download_type" == "sync" ]; then version=$REALM_SYNC_VERSION - url="https://static.realm.io/downloads/sync/realm-sync-cocoa-${version}.tar.xz" + url="${REALM_BASE_URL}/sync/realm-sync-cocoa-${version}.tar.xz" else echo "Unknown dowload_type: $download_type" exit 1 fi - echo "Downloading dependency: ${download_type} ${version}" + echo "Downloading dependency: ${download_type} ${version} from ${url}" if [ -z "$TMPDIR" ]; then TMPDIR='/tmp' @@ -378,18 +389,13 @@ download_sync() { COMMAND="$1" # Use Debug config if command ends with -debug, otherwise default to Release -# Set IS_RUNNING_PACKAGING when running packaging steps to avoid running iOS static tests with Xcode 8.3.3 case "$COMMAND" in *-debug) COMMAND="${COMMAND%-debug}" CONFIGURATION="Debug" ;; - package-*) - IS_RUNNING_PACKAGING=1 - ;; esac export CONFIGURATION=${CONFIGURATION:-Release} -export IS_RUNNING_PACKAGING=${IS_RUNNING_PACKAGING:-0} # Pre-choose Xcode and Swift versions for those operations that do not set them REALM_XCODE_VERSION=${xcode_version:-$REALM_XCODE_VERSION} @@ -512,8 +518,8 @@ case "$COMMAND" in "ios-swift") sh build.sh ios-dynamic - build_combined RealmSwift RealmSwift iphoneos iphonesimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/ios/Realm.framework build/ios/swift-$REALM_SWIFT_VERSION + build_combined RealmSwift RealmSwift iphoneos iphonesimulator '' "/swift-$REALM_XCODE_VERSION" + copy_realm_framework ios exit 0 ;; @@ -524,8 +530,8 @@ case "$COMMAND" in "watchos-swift") sh build.sh watchos - build_combined RealmSwift RealmSwift watchos watchsimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/watchos/Realm.framework build/watchos/swift-$REALM_SWIFT_VERSION + build_combined RealmSwift RealmSwift watchos watchsimulator '' "/swift-$REALM_XCODE_VERSION" + copy_realm_framework watchos exit 0 ;; @@ -536,8 +542,8 @@ case "$COMMAND" in "tvos-swift") sh build.sh tvos - build_combined RealmSwift RealmSwift appletvos appletvsimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/tvos/Realm.framework build/tvos/swift-$REALM_SWIFT_VERSION + build_combined RealmSwift RealmSwift appletvos appletvsimulator '' "/swift-$REALM_XCODE_VERSION" + copy_realm_framework tvos exit 0 ;; @@ -550,12 +556,183 @@ case "$COMMAND" in "osx-swift") sh build.sh osx xc "-scheme 'RealmSwift' -configuration $CONFIGURATION build" - destination="build/osx/swift-$REALM_SWIFT_VERSION" + destination="build/osx/swift-$REALM_XCODE_VERSION" clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/RealmSwift.framework" "$destination" "RealmSwift.framework" + rm -rf "$destination/Realm.framework" cp -R build/osx/Realm.framework "$destination" exit 0 ;; + "catalyst") + if (( $(xcode_version_major) < 11 )); then + echo 'Building for Catalyst requires Xcode 11' + exit 1 + fi + + xc "-scheme Realm -configuration $CONFIGURATION REALM_CATALYST_FLAGS='-target x86_64-apple-ios13.0-macabi' REALM_PLATFORM_SUFFIX='maccatalyst'" + clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/Realm.framework" "build/catalyst" "Realm.framework" + ;; + + "catalyst-swift") + if (( $(xcode_version_major) < 11 )); then + echo 'Building for Catalyst requires Xcode 11' + exit 1 + fi + + sh build.sh catalyst + # FIXME: change this to just "-destination variant='Mac Catalyst'" once the CI machines are running 10.15 + xc "-scheme 'RealmSwift' -configuration $CONFIGURATION build \ + REALM_CATALYST_FLAGS='-target x86_64-apple-ios13.0-macabi' \ + REALM_PLATFORM_SUFFIX='maccatalyst' \ + SWIFT_DEPLOYMENT_TARGET='13.0-macabi' \ + SWIFT_PLATFORM_TARGET_PREFIX='ios'" + destination="build/catalyst/swift-$REALM_XCODE_VERSION" + clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/RealmSwift.framework" "$destination" "RealmSwift.framework" + rm -rf "$destination/Realm.framework" + cp -R build/catalyst/Realm.framework "$destination" + ;; + + "xcframework") + if (( $(xcode_version_major) < 11 )); then + echo 'Building a xcframework requires Xcode 11' + exit 1 + fi + + export REALM_EXTRA_BUILD_ARGUMENTS="$REALM_EXTRA_BUILD_ARGUMENTS BUILD_LIBRARY_FOR_DISTRIBUTION=YES REALM_OBJC_MACH_O_TYPE=staticlib" + + # Build all of the requested frameworks + shift + PLATFORMS="${*:-osx ios watchos tvos catalyst}" + for platform in $PLATFORMS; do + sh build.sh $platform-swift + done + + # Assemble them into xcframeworks + rm -rf build/*.xcframework + find build/DerivedData/Realm/Build/Products -name 'Realm.framework' \ + | grep -v '\-static' \ + | sed 's/.*/-framework &/' \ + | xargs xcodebuild -create-xcframework -output build/Realm.xcframework + find build/DerivedData/Realm/Build/Products -name 'RealmSwift.framework' \ + | sed 's/.*/-framework &/' \ + | xargs xcodebuild -create-xcframework -output build/RealmSwift.xcframework + + # strip-frameworks.sh isn't needed with xcframeworks since we don't + # lipo together device/simulator libs + find build/Realm.xcframework -name 'strip-frameworks.sh' -delete + find build/RealmSwift.xcframework -name 'strip-frameworks.sh' -delete + + # swiftinterface files currently have incorrect name resolution which + # results in the RealmSwift.Realm class name clashing with the Realm + # module name. Work around this by renaming the Realm module to + # RealmObjc. This is safe to do with a pre-built library because the + # module name is unrelated to what symbols are exported by an obj-c + # library, and we're statically linking the obj-c library into the + # swift library so it doesn't need to be loaded at runtime. + cd build + cp -R Realm.xcframework RealmObjc.xcframework + find RealmObjc.xcframework -name 'Realm.framework' \ + -execdir mv {} RealmObjc.framework \; || true 2> /dev/null + find RealmObjc.xcframework -name '*.h' \ + -exec sed -i '' 's/Realm\//RealmObjc\//' {} \; + find RealmObjc.xcframework -name 'module.modulemap' \ + -exec sed -i '' 's/module Realm/module RealmObjc/' {} \; + sed -i '' 's/Realm.framework/RealmObjc.framework/' RealmObjc.xcframework/Info.plist + + find RealmSwift.xcframework -name '*.swiftinterface' \ + -exec sed -i '' 's/import Realm/import RealmObjc/' {} \; + find RealmSwift.xcframework -name '*.swiftinterface' \ + -exec sed -i '' 's/Realm.RLM/RealmObjc.RLM/g' {} \; + + # Realm is statically linked into RealmSwift so we no longer actually + # need the obj-c static library, and just need the framework shell. + # Remove everything but placeholder.o so that there's still a library + # to link against that just doesn't define any symbols. + find RealmObjc.xcframework -name 'Realm' | while read file; do + ( + cd $(dirname $file) + if readlink Realm > /dev/null; then + ln -sf Versions/Current/RealmObjc Realm + elif lipo -info Realm | grep -q 'Non-fat'; then + ar -t Realm | grep -v placeholder | tr '\n' '\0' | xargs -0 ar -d Realm >/dev/null 2>&1 + ranlib Realm >/dev/null 2>&1 + else + for arch in $(lipo -info Realm | cut -f3 -d':'); do + lipo Realm -thin $arch -output tmp.a + ar -t tmp.a | grep -v placeholder | tr '\n' '\0' | xargs -0 ar -d tmp.a >/dev/null 2>&1 + ranlib tmp.a >/dev/null 2>&1 + lipo Realm -replace $arch tmp.a -output Realm + rm tmp.a + done + fi + mv Realm RealmObjc + ) + done + + # We built Realm.framework as a static framework so that we could link + # it into RealmSwift.framework and not have to deal with the runtime + # implications of renaming the shared library, but we want the end + # result to be that Realm.xcframework is a dynamic framework. Our build + # system isn't really set up to build both static and dynamic versions + # of it, so instead just turn each of the static libraries in + # Realm.xcframework into a shared library. + cd Realm.xcframework + i=0 + while plist_get Info.plist "AvailableLibraries:$i" > /dev/null; do + arch_dir_name="$(plist_get Info.plist "AvailableLibraries:$i:LibraryIdentifier")" + platform="$(plist_get Info.plist "AvailableLibraries:$i:SupportedPlatform")" + variant="$(plist_get Info.plist "AvailableLibraries:$i:SupportedPlatformVariant" 2> /dev/null || echo 'os')" + deployment_target_name="$platform" + install_name='@rpath/Realm.framework/Realm' + bitcode_flag='-fembed-bitcode' + if [ "$variant" = 'simulator' ]; then + bitcode_flag='' + fi + case "$platform" in + "macos") sdk='macosx'; install_name='@rpath/Realm.framework/Versions/A/Realm'; bitcode_flag='';; + "ios") sdk="iphone$variant"; deployment_target_name='iphoneos';; + "watchos") sdk="watch$variant";; + "tvos") sdk="appletv$variant";; + esac + deployment_target=$(grep -i "$deployment_target_name.*_DEPLOYMENT_TARGET" ../../Configuration/Base.xcconfig \ + | sed 's/.*= \(.*\);/\1/') + architectures="" + j=0 + while plist_get Info.plist "AvailableLibraries:$i:SupportedArchitectures:$j" > /dev/null; do + architectures="${architectures} -arch $(plist_get Info.plist "AvailableLibraries:$i:SupportedArchitectures:$j")" + j=$(($j + 1)) + done + + ( + cd $arch_dir_name/Realm.framework + realm_lib=$(readlink Realm || echo 'Realm') + # feature_token.cpp.o depends on PKey, which isn't actually + # present in the macOS build of the sync library. This normally + # works fine because we never reference any symbols from + # feature_token.cpp.o so it doesn't get pulled in at all, but + # -all_load makes every object file in the input get linked + # into the shared library. + ar -d $realm_lib feature_token.cpp.o 2> /dev/null || true + clang++ -shared $architectures \ + -target ${platform}${deployment_target} \ + -isysroot $(xcrun --sdk ${sdk} --show-sdk-path) \ + -install_name "$install_name" \ + -compatibility_version 1 -current_version 1 \ + -fapplication-extension \ + $bitcode_flag \ + -Wl,-all_load \ + -Wl,-unexported_symbol,'__Z*' \ + -o realm.dylib \ + Realm -lz + mv realm.dylib $realm_lib + ) + + i=$(($i + 1)) + done + + exit 0 + ;; + ###################################### # Analysis ###################################### @@ -590,25 +767,19 @@ case "$COMMAND" in ;; "test-ios-static") - test_ios_static "name=iPhone 6" + test_ios_static "name=iPhone 8" exit 0 ;; "test-ios-dynamic") - xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' build" - if (( $(xcode_version_major) < 9 )); then - xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test 'ARCHS=\$(ARCHS_STANDARD_32_BIT)'" - fi - xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" + xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' build-for-testing" + xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' test" exit 0 ;; "test-ios-swift") - xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' build" - if (( $(xcode_version_major) < 9 )); then - xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test 'ARCHS=\$(ARCHS_STANDARD_32_BIT)'" - fi - xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" + xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' build-for-testing" + xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' test" exit 0 ;; @@ -631,21 +802,13 @@ case "$COMMAND" in ;; "test-tvos") - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" xctest "-scheme Realm -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=$destination'" exit $? ;; "test-tvos-swift") - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" xctest "-scheme RealmSwift -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=$destination'" exit $? ;; @@ -673,6 +836,11 @@ case "$COMMAND" in exit 0 ;; + "test-swiftpm") + xcrun swift test --configuration $(echo $CONFIGURATION | tr "[:upper:]" "[:lower:]") + exit 0 + ;; + ###################################### # Full verification ###################################### @@ -696,6 +864,7 @@ case "$COMMAND" in sh build.sh verify-tvos-debug sh build.sh verify-tvos-device sh build.sh verify-swiftlint + sh build.sh verify-swiftpm sh build.sh verify-osx-object-server ;; @@ -714,6 +883,10 @@ case "$COMMAND" in fi fi + sh build.sh verify-cocoapods-ios + sh build.sh verify-cocoapods-osx + sh build.sh verify-cocoapods-watchos + # https://github.com/CocoaPods/CocoaPods/issues/7708 export EXPANDED_CODE_SIGN_IDENTITY='' cd examples/installation @@ -726,6 +899,18 @@ case "$COMMAND" in sh build.sh test-watchos-swift-cocoapods ;; + verify-cocoapods-*) + PLATFORM=$(echo $COMMAND | cut -d - -f 3) + # https://github.com/CocoaPods/CocoaPods/issues/7708 + export EXPANDED_CODE_SIGN_IDENTITY='' + cd examples/installation + sh build.sh test-$PLATFORM-objc-cocoapods + sh build.sh test-$PLATFORM-swift-cocoapods + if [[ $PLATFORM = "ios" ]]; then + sh build.sh test-ios-objc-cocoapods-dynamic + fi + ;; + "verify-osx-encryption") REALM_ENCRYPT_ALL=YES sh build.sh test-osx exit 0 @@ -733,7 +918,6 @@ case "$COMMAND" in "verify-osx") sh build.sh test-osx - sh build.sh analyze-osx sh build.sh examples-osx ( @@ -792,8 +976,12 @@ case "$COMMAND" in "verify-tvos") sh build.sh test-tvos - sh build.sh test-tvos-swift sh build.sh examples-tvos + exit 0 + ;; + + "verify-tvos-swift") + sh build.sh test-tvos-swift sh build.sh examples-tvos-swift exit 0 ;; @@ -808,6 +996,11 @@ case "$COMMAND" in exit 0 ;; + "verify-swiftpm") + sh build.sh test-swiftpm + exit 0 + ;; + "verify-osx-object-server") sh build.sh test-osx-object-server exit 0 @@ -839,17 +1032,17 @@ case "$COMMAND" in sh build.sh prelaunch-simulator workspace="examples/ios/objc/RealmExamples.xcworkspace" pod install --project-directory="$workspace/.." --no-repo-update - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme RACTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Draw -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme RACTableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Draw -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" if [ ! -z "${JENKINS_HOME}" ]; then - xc "-workspace $workspace -scheme Extension -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Extension -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" fi exit 0 @@ -859,15 +1052,15 @@ case "$COMMAND" in sh build.sh prelaunch-simulator workspace="examples/ios/swift/RealmExamples.xcworkspace" if [[ ! -d "$workspace" ]]; then - workspace="${workspace/swift/swift-$REALM_SWIFT_VERSION}" + workspace="${workspace/swift/swift-$REALM_XCODE_VERSION}" fi - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" exit 0 ;; @@ -877,11 +1070,7 @@ case "$COMMAND" in "examples-tvos") workspace="examples/tvos/objc/RealmExamples.xcworkspace" - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" @@ -891,15 +1080,10 @@ case "$COMMAND" in "examples-tvos-swift") workspace="examples/tvos/swift/RealmExamples.xcworkspace" if [[ ! -d "$workspace" ]]; then - workspace="${workspace/swift/swift-$REALM_SWIFT_VERSION}" - fi - - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" + workspace="${workspace/swift/swift-$REALM_XCODE_VERSION}" fi + destination="Apple TV" xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" exit 0 @@ -909,8 +1093,7 @@ case "$COMMAND" in # Versioning ###################################### "get-version") - version_file="Realm/Realm-Info.plist" - echo "$(PlistBuddy -c "Print :CFBundleShortVersionString" "$version_file")" + echo "$(plist_get 'Realm/Realm-Info.plist' 'CFBundleShortVersionString')" exit 0 ;; @@ -930,6 +1113,8 @@ case "$COMMAND" in PlistBuddy -c "Set :CFBundleShortVersionString $realm_version" "$version_file" done sed -i '' "s/^VERSION=.*/VERSION=$realm_version/" dependencies.list + sed -i '' "s/^let coreVersionStr =.*/let coreVersionStr = \"$REALM_CORE_VERSION\"/" Package.swift + sed -i '' "s/^let cocoaVersionStr =.*/let cocoaVersionStr = \"$realm_version\"/" Package.swift exit 0 ;; @@ -1055,8 +1240,10 @@ EOM else export sha=$GITHUB_PR_SOURCE_BRANCH export CONFIGURATION=$configuration - export REALM_EXTRA_BUILD_ARGUMENTS='GCC_GENERATE_DEBUGGING_SYMBOLS=NO' - sh build.sh prelaunch-simulator + export REALM_EXTRA_BUILD_ARGUMENTS='GCC_GENERATE_DEBUGGING_SYMBOLS=NO -allowProvisioningUpdates' + if [[ ${target} != *"osx"* ]];then + sh build.sh prelaunch-simulator + fi source $(brew --prefix nvm)/nvm.sh export REALM_NODE_PATH="$(nvm which 8)" @@ -1107,12 +1294,11 @@ EOM zip --symlinks -r realm-examples.zip examples -x "examples/installation/*" ;; - "package-test-examples") + "package-test-examples-objc") if ! VERSION=$(echo realm-objc-*.zip | egrep -o '\d*\.\d*\.\d*-[a-z]*(\.\d*)?'); then VERSION=$(echo realm-objc-*.zip | egrep -o '\d*\.\d*\.\d*') fi OBJC="realm-objc-${VERSION}" - SWIFT="realm-swift-${VERSION}" unzip ${OBJC}.zip cp $0 ${OBJC} @@ -1123,7 +1309,13 @@ EOM sh build.sh examples-osx cd .. rm -rf ${OBJC} + ;; + "package-test-examples-swift") + if ! VERSION=$(echo realm-swift-*.zip | egrep -o '\d*\.\d*\.\d*-[a-z]*(\.\d*)?'); then + VERSION=$(echo realm-swift-*.zip | egrep -o '\d*\.\d*\.\d*') + fi + SWIFT="realm-swift-${VERSION}" unzip ${SWIFT}.zip cp $0 ${SWIFT} @@ -1143,124 +1335,21 @@ EOM zip --symlinks -r realm-framework-ios-static.zip Realm.framework ;; - "package-ios") - sh build.sh prelaunch-simulator - sh build.sh ios-dynamic - cd build/ios - zip --symlinks -r realm-framework-ios.zip Realm.framework - ;; - - "package-osx") - sh build.sh osx - - cd build/DerivedData/Realm/Build/Products/Release - zip --symlinks -r realm-framework-osx.zip Realm.framework - ;; - - "package-watchos") - sh build.sh prelaunch-simulator - sh build.sh watchos - - # If we're building the obj-c library with an Xcode version older than - # 10, we need to also build the arm64_32 slice with Xcode 10 and lipo - # it in - if (( $(xcode_version_major) < 10 )); then - ( - REALM_XCODE_VERSION=10.0 - REALM_SWIFT_VERSION= - set_xcode_and_swift_versions - sh build.sh prelaunch-simulator - xc "-scheme Realm -configuration $CONFIGURATION -sdk watchos ARCHS='arm64_32'" - cp build/DerivedData/Realm/Build/Products/Release-watchos/Realm.framework/*.bcsymbolmap build/watchos/Realm.framework - xcrun lipo \ - -create build/watchos/Realm.framework/Realm build/DerivedData/Realm/Build/Products/Release-watchos/Realm.framework/Realm \ - -output build/watchos-tmp - mv build/watchos-tmp build/watchos/Realm.framework/Realm - ) - fi + "package") + PLATFORM="$2" + REALM_SWIFT_VERSION= - cd build/watchos - zip --symlinks -r realm-framework-watchos.zip Realm.framework - ;; - - "package-tvos") - sh build.sh prelaunch-simulator - sh build.sh tvos - - cd build/tvos - zip --symlinks -r realm-framework-tvos.zip Realm.framework - ;; + set_xcode_and_swift_versions - package-*-swift) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - for version in 9.2 9.3 9.4 10.0 10.1; do - REALM_XCODE_VERSION=$version - REALM_SWIFT_VERSION= - set_xcode_and_swift_versions + if [[ "$PLATFORM" = "catalyst" ]] && (( $(xcode_version_major) < 11 )); then + mkdir -p build/catalyst/swift-$REALM_XCODE_VERSION + else sh build.sh prelaunch-simulator sh build.sh $PLATFORM-swift - done - - cd build/$PLATFORM - ln -s swift-4.0.3 swift-3.2.3 - ln -s swift-4.1 swift-3.3 - ln -s swift-4.1.2 swift-3.3.2 - ln -s swift-4.2 swift-3.4 - ln -s swift-4.2.1 swift-3.4.1 - zip --symlinks -r realm-swift-framework-$PLATFORM.zip swift-3.2.3 swift-3.3 swift-3.3.2 swift-3.4 swift-3.4.1 swift-4.0.3 swift-4.1 swift-4.1.2 swift-4.2 swift-4.2.1 - ;; - - package-*-swift-3.2.3) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.0.2 swift-3.2.3 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.2.3.zip swift-3.2.3 - ;; - - package-*-swift-3.3) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.1 swift-3.3 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.3.zip swift-3.3 - ;; - - package-*-swift-3.3.2) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.1.2 swift-3.3.2 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.3.2.zip swift-3.3.2 - ;; - - package-*-swift-3.4) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.2 swift-3.4 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.4.zip swift-3.4 - ;; - - package-*-swift-3.4.1) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.2.1 swift-3.4.1 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.4.1.zip swift-3.4.1 - ;; - - package-*-swift-*) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - REALM_SWIFT_VERSION=$(echo $COMMAND | cut -d - -f 4) - REALM_XCODE_VERSION= - - set_xcode_and_swift_versions - sh build.sh prelaunch-simulator - sh build.sh $PLATFORM-swift + fi cd build/$PLATFORM - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-$REALM_SWIFT_VERSION.zip swift-$REALM_SWIFT_VERSION + zip --symlinks -r realm-framework-$PLATFORM-$REALM_XCODE_VERSION.zip swift-$REALM_XCODE_VERSION ;; "package-release") @@ -1278,58 +1367,20 @@ EOM mkdir -p ${FOLDER}/ios/dynamic mkdir -p ${FOLDER}/Swift - ( - cd ${FOLDER}/osx - unzip ${WORKSPACE}/realm-framework-osx.zip - ) - - ( - cd ${FOLDER}/ios/static - unzip ${WORKSPACE}/realm-framework-ios-static.zip - ) + unzip ${WORKSPACE}/realm-framework-ios-static.zip -d ${FOLDER}/ios/static + for platform in osx ios watchos tvos catalyst; do + unzip ${WORKSPACE}/realm-framework-${platform}-${REALM_XCODE_VERSION}.zip -d ${FOLDER}/${platform} + mv ${FOLDER}/${platform}/swift-*/Realm.framework ${FOLDER}/${platform} + rm -r ${FOLDER}/${platform}/swift-* + done - ( - cd ${FOLDER}/ios/dynamic - unzip ${WORKSPACE}/realm-framework-ios.zip - ) - - ( - cd ${FOLDER}/watchos - unzip ${WORKSPACE}/realm-framework-watchos.zip - ) - - ( - cd ${FOLDER}/tvos - unzip ${WORKSPACE}/realm-framework-tvos.zip - ) + mv ${FOLDER}/ios/Realm.framework ${FOLDER}/ios/dynamic else - ( - cd ${FOLDER}/osx - for f in ${WORKSPACE}/realm-swift-framework-osx-swift-*.zip; do - unzip "$f" - done - ) - - ( - cd ${FOLDER}/ios - for f in ${WORKSPACE}/realm-swift-framework-ios-swift-*.zip; do - unzip "$f" - done - ) - - ( - cd ${FOLDER}/watchos - for f in ${WORKSPACE}/realm-swift-framework-watchos-swift-*.zip; do - unzip "$f" - done - ) - - ( - cd ${FOLDER}/tvos - for f in ${WORKSPACE}/realm-swift-framework-tvos-swift-*.zip; do - unzip "$f" - done - ) + for platform in osx ios watchos tvos catalyst; do + find ${WORKSPACE} -name "realm-framework-$platform-*.zip" \ + -maxdepth 1 \ + -exec unzip {} -d ${FOLDER}/${platform} \; + done fi ( @@ -1392,40 +1443,37 @@ EOF echo 'Packaging iOS' sh build.sh package-ios-static - cp build/ios-static/realm-framework-ios-static.zip .. - sh build.sh package-ios - cp build/ios/realm-framework-ios.zip .. - sh build.sh package-ios-swift - cp build/ios/realm-swift-framework-ios.zip .. - - echo 'Packaging OS X' - sh build.sh package-osx - cp build/DerivedData/Realm/Build/Products/Release/realm-framework-osx.zip .. - sh build.sh package-osx-swift - cp build/osx/realm-swift-framework-osx.zip .. + cp build/ios-static/realm-framework-ios-static.zip . + sh build.sh package ios + cp build/ios/realm-framework-ios-$REALM_XCODE_VERSION.zip . + + echo 'Packaging macOS' + sh build.sh package osx + cp build/osx/realm-framework-osx-$REALM_XCODE_VERSION.zip . echo 'Packaging watchOS' - sh build.sh package-watchos - cp build/watchos/realm-framework-watchos.zip .. - sh build.sh package-watchos-swift - cp build/watchos/realm-swift-framework-watchos.zip .. + sh build.sh package watchos + cp build/watchos/realm-framework-watchos-$REALM_XCODE_VERSION.zip . echo 'Packaging tvOS' - sh build.sh package-tvos - cp build/tvos/realm-framework-tvos.zip .. - sh build.sh package-tvos-swift - cp build/tvos/realm-swift-framework-tvos.zip .. + sh build.sh package tvos + cp build/tvos/realm-framework-tvos-$REALM_XCODE_VERSION.zip . + + echo 'Packaging Catalyst' + sh build.sh package catalyst + cp build/catalyst/realm-framework-catalyst-$REALM_XCODE_VERSION.zip . echo 'Packaging examples' sh build.sh package-examples - cp realm-examples.zip .. echo 'Building final release packages' + export WORKSPACE="${WORKSPACE}/realm-cocoa" sh build.sh package-release objc sh build.sh package-release swift echo 'Testing packaged examples' - sh build.sh package-test-examples + sh build.sh package-test-examples-objc + sh build.sh package-test-examples-swift ;; "github-release") @@ -1451,8 +1499,9 @@ x.y.z Release notes (yyyy-MM-dd) ### Compatibility * File format: Generates Realms with format v9 (Reads and upgrades all previous formats) -* Realm Object Server: 3.11.0 or later. +* Realm Object Server: 3.21.0 or later. * APIs are backwards compatible with all previous releases in the 3.x.y series. +* Carthage release for Swift is built with Xcode 11.0. EOS) changelog=$(cat CHANGELOG.md) echo "$empty_section" > CHANGELOG.md diff --git a/Pods/Realm/core/librealmcore-ios.a b/Pods/Realm/core/librealmcore-ios.a index 8c59eec113..1c57cda9ec 100644 Binary files a/Pods/Realm/core/librealmcore-ios.a and b/Pods/Realm/core/librealmcore-ios.a differ diff --git a/Pods/Realm/include/RLMCollection.h b/Pods/Realm/include/RLMCollection.h index 9d3fa7e854..8d8ca49569 100644 --- a/Pods/Realm/include/RLMCollection.h +++ b/Pods/Realm/include/RLMCollection.h @@ -18,12 +18,13 @@ #import +#import #import NS_ASSUME_NONNULL_BEGIN @class RLMRealm, RLMResults, RLMSortDescriptor, RLMNotificationToken, RLMCollectionChange; -typedef NS_ENUM(int32_t, RLMPropertyType); +typedef RLM_CLOSED_ENUM(int32_t, RLMPropertyType); /** A homogenous collection of Realm-managed objects. Examples of conforming types diff --git a/Pods/Realm/include/RLMConstants.h b/Pods/Realm/include/RLMConstants.h index f73fe83874..b96dacbfa4 100644 --- a/Pods/Realm/include/RLMConstants.h +++ b/Pods/Realm/include/RLMConstants.h @@ -29,6 +29,15 @@ NS_ASSUME_NONNULL_BEGIN #define RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(fully_qualified, _) NS_SWIFT_NAME(fully_qualified) #endif +// Swift 5 considers NS_ENUM to be "open", meaning there could be values present +// other than the defined cases (which allows adding more cases later without +// it being a breaking change), while older versions consider it "closed". +#ifdef NS_CLOSED_ENUM +#define RLM_CLOSED_ENUM NS_CLOSED_ENUM +#else +#define RLM_CLOSED_ENUM NS_ENUM +#endif + #if __has_attribute(ns_error_domain) && (!defined(__cplusplus) || !__cplusplus || __cplusplus >= 201103L) #define RLM_ERROR_ENUM(type, name, domain) \ _Pragma("clang diagnostic push") \ @@ -47,7 +56,7 @@ NS_ASSUME_NONNULL_BEGIN For more information, see [Realm Models](https://realm.io/docs/objc/latest/#models). */ -typedef NS_ENUM(int32_t, RLMPropertyType) { +typedef RLM_CLOSED_ENUM(int32_t, RLMPropertyType) { #pragma mark - Primitive types @@ -164,12 +173,15 @@ typedef RLM_ERROR_ENUM(NSInteger, RLMError, RLMErrorDomain) { typedef NSString * RLMNotification RLM_EXTENSIBLE_STRING_ENUM; /** - This notification is posted by a Realm when the data in that Realm has changed. + This notification is posted when a write transaction has been committed to a Realm on a different thread for + the same file. + + It is not posted if `autorefresh` is enabled, or if the Realm is refreshed before the notification has a chance + to run. - More specifically, this notification is posted after a Realm has been refreshed to - reflect a write transaction. This can happen when an autorefresh occurs, when - `-[RLMRealm refresh]` is called, after an implicit refresh from `-[RLMRealm beginWriteTransaction]`, - or after a local write transaction is completed. + Realms with autorefresh disabled should normally install a handler for this notification which calls + `-[RLMRealm refresh]` after doing some work. Refreshing the Realm is optional, but not refreshing the Realm may lead to + large Realm files. This is because an extra copy of the data must be kept for the stale Realm. */ extern RLMNotification const RLMRealmRefreshRequiredNotification RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(RLMRealmRefreshRequiredNotification, RefreshRequired); diff --git a/Pods/Realm/include/RLMObject.h b/Pods/Realm/include/RLMObject.h index 2b55a3e9e1..753fe03735 100644 --- a/Pods/Realm/include/RLMObject.h +++ b/Pods/Realm/include/RLMObject.h @@ -194,10 +194,13 @@ NS_ASSUME_NONNULL_BEGIN argument's type is the same as the receiver, and the objects have identical values for their managed properties, this method does nothing. - If the object is being updated, all properties defined in its schema will be set by copying from + If the object is being updated, each property defined in its schema will be set by copying from `value` using key-value coding. If the `value` argument does not respond to `valueForKey:` for a given property name (or getter name, if defined), that value will remain untouched. Nullable properties on the object can be set to nil by using `NSNull` as the updated value. + Each property is set even if the existing value is the same as the new value being set, and + notifications will report them all being changed. See `createOrUpdateModifiedInDefaultRealmWithValue:` + for a version of this function which only sets the values which have changed. If the `value` argument is an array, all properties must be present, valid and in the same order as the properties defined in the model. @@ -208,6 +211,50 @@ NS_ASSUME_NONNULL_BEGIN */ + (instancetype)createOrUpdateInDefaultRealmWithValue:(id)value; +/** + Creates or updates a Realm object within the default Realm. + + This method may only be called on Realm object types with a primary key defined. If there is already + an object with the same primary key value in the default Realm, its values are updated and the object + is returned. Otherwise, this method creates and populates a new instance of the object in the default Realm. + + If nested objects are included in the argument, `createOrUpdateModifiedInDefaultRealmWithValue:` will be + recursively called on them if they have primary keys, `createInDefaultRealmWithValue:` if they do not. + + The `value` argument is used to populate the object. It can be a Realm object, a key-value coding + compliant object, an array or dictionary returned from the methods in `NSJSONSerialization`, or an + array containing one element for each managed property. + + If the object is being created, an exception will be thrown if any required properties + are not present and those properties were not defined with default values. + + If the `value` argument is a Realm object already managed by the default Realm, the + argument's type is the same as the receiver, and the objects have identical values for + their managed properties, this method does nothing. + + If the object is being updated, each property defined in its schema will be set by copying from + `value` using key-value coding. If the `value` argument does not respond to `valueForKey:` for a + given property name (or getter name, if defined), that value will remain untouched. + Nullable properties on the object can be set to nil by using `NSNull` as the updated value. + Unlike `createOrUpdateInDefaultRealmWithValue:`, only properties which have changed in value are + set, and any change notifications produced by this call will report only which properies have + actually changed. + + Checking which properties have changed imposes a small amount of overhead, and so this method + may be slower when all or nearly all of the properties being set have changed. If most or all + of the properties being set have not changed, this method will be much faster than unconditionally + setting all of them, and will also reduce how much data has to be written to the Realm, saving + both i/o time and disk space. + + If the `value` argument is an array, all properties must be present, valid and in the same + order as the properties defined in the model. + + @param value The value used to populate the object. + + @see `defaultPropertyValues`, `primaryKey` + */ ++ (instancetype)createOrUpdateModifiedInDefaultRealmWithValue:(id)value; + /** Creates or updates an Realm object within a specified Realm. @@ -229,10 +276,13 @@ NS_ASSUME_NONNULL_BEGIN argument's type is the same as the receiver, and the objects have identical values for their managed properties, this method does nothing. - If the object is being updated, all properties defined in its schema will be set by copying from + If the object is being updated, each property defined in its schema will be set by copying from `value` using key-value coding. If the `value` argument does not respond to `valueForKey:` for a given property name (or getter name, if defined), that value will remain untouched. Nullable properties on the object can be set to nil by using `NSNull` as the updated value. + Each property is set even if the existing value is the same as the new value being set, and + notifications will report them all being changed. See `createOrUpdateModifiedInRealm:withValue:` + for a version of this function which only sets the values which have changed. If the `value` argument is an array, all properties must be present, valid and in the same order as the properties defined in the model. @@ -244,6 +294,51 @@ NS_ASSUME_NONNULL_BEGIN */ + (instancetype)createOrUpdateInRealm:(RLMRealm *)realm withValue:(id)value; +/** + Creates or updates an Realm object within a specified Realm. + + This method may only be called on Realm object types with a primary key defined. If there is already + an object with the same primary key value in the given Realm, its values are updated and the object + is returned. Otherwise this method creates and populates a new instance of this object in the given Realm. + + If nested objects are included in the argument, `createOrUpdateInRealm:withValue:` will be + recursively called on them if they have primary keys, `createInRealm:withValue:` if they do not. + + The `value` argument is used to populate the object. It can be a Realm object, a key-value coding + compliant object, an array or dictionary returned from the methods in `NSJSONSerialization`, or an + array containing one element for each managed property. + + If the object is being created, an exception will be thrown if any required properties + are not present and those properties were not defined with default values. + + If the `value` argument is a Realm object already managed by the given Realm, the + argument's type is the same as the receiver, and the objects have identical values for + their managed properties, this method does nothing. + + If the object is being updated, each property defined in its schema will be set by copying from + `value` using key-value coding. If the `value` argument does not respond to `valueForKey:` for a + given property name (or getter name, if defined), that value will remain untouched. + Nullable properties on the object can be set to nil by using `NSNull` as the updated value. + Unlike `createOrUpdateInRealm:withValue:`, only properties which have changed in value are + set, and any change notifications produced by this call will report only which properies have + actually changed. + + Checking which properties have changed imposes a small amount of overhead, and so this method + may be slower when all or nearly all of the properties being set have changed. If most or all + of the properties being set have not changed, this method will be much faster than unconditionally + setting all of them, and will also reduce how much data has to be written to the Realm, saving + both i/o time and disk space. + + If the `value` argument is an array, all properties must be present, valid and in the same + order as the properties defined in the model. + + @param realm The Realm which should own the object. + @param value The value used to populate the object. + + @see `defaultPropertyValues`, `primaryKey` + */ ++ (instancetype)createOrUpdateModifiedInRealm:(RLMRealm *)realm withValue:(id)value; + #pragma mark - Properties /** diff --git a/Pods/Realm/include/RLMObjectStore.h b/Pods/Realm/include/RLMObjectStore.h index b44e7e68c4..a21c0098ab 100644 --- a/Pods/Realm/include/RLMObjectStore.h +++ b/Pods/Realm/include/RLMObjectStore.h @@ -24,8 +24,16 @@ extern "C" { @class RLMRealm, RLMSchema, RLMObjectBase, RLMResults, RLMProperty; +typedef NS_ENUM(NSUInteger, RLMUpdatePolicy) { + RLMUpdatePolicyError = 0, + RLMUpdatePolicyUpdateChanged = 1, + RLMUpdatePolicyUpdateAll = 2, +}; + NS_ASSUME_NONNULL_BEGIN +void RLMVerifyHasPrimaryKey(Class cls); + // // Accessor Creation // @@ -39,7 +47,7 @@ void RLMRealmCreateAccessors(RLMSchema *schema); // // add an object to the given realm -void RLMAddObjectToRealm(RLMObjectBase *object, RLMRealm *realm, bool createOrUpdate); +void RLMAddObjectToRealm(RLMObjectBase *object, RLMRealm *realm, RLMUpdatePolicy); // delete an object from its realm void RLMDeleteObjectFromRealm(RLMObjectBase *object, RLMRealm *realm); @@ -56,10 +64,9 @@ id _Nullable RLMGetObject(RLMRealm *realm, NSString *objectClassName, id _Nullab // create object from array or dictionary RLMObjectBase *RLMCreateObjectInRealmWithValue(RLMRealm *realm, NSString *className, - id _Nullable value, bool createOrUpdate) + id _Nullable value, RLMUpdatePolicy updatePolicy) NS_RETURNS_RETAINED; - // // Accessor Creation // diff --git a/Pods/Realm/include/RLMRealm.h b/Pods/Realm/include/RLMRealm.h index aa554177d4..53212c0309 100644 --- a/Pods/Realm/include/RLMRealm.h +++ b/Pods/Realm/include/RLMRealm.h @@ -19,7 +19,7 @@ #import #import "RLMConstants.h" -@class RLMRealmConfiguration, RLMRealm, RLMObject, RLMSchema, RLMMigration, RLMNotificationToken, RLMThreadSafeReference; +@class RLMRealmConfiguration, RLMRealm, RLMObject, RLMSchema, RLMMigration, RLMNotificationToken, RLMThreadSafeReference, RLMAsyncOpenTask; struct RLMRealmPrivileges; struct RLMClassPrivileges; struct RLMObjectPrivileges; @@ -121,7 +121,7 @@ NS_ASSUME_NONNULL_BEGIN thread, accessing the returned Realm outside the callback block (even if accessed from `callbackQueue`) is unsafe. */ -+ (void)asyncOpenWithConfiguration:(RLMRealmConfiguration *)configuration ++ (RLMAsyncOpenTask *)asyncOpenWithConfiguration:(RLMRealmConfiguration *)configuration callbackQueue:(dispatch_queue_t)callbackQueue callback:(RLMAsyncOpenRealmCallback)callback; @@ -326,10 +326,24 @@ typedef void (^RLMNotificationBlock)(RLMNotification notification, RLMRealm *rea /** Performs actions contained within the given block inside a write transaction. - @see `[RLMRealm transactionWithBlock:error:]` + @see `[RLMRealm transactionWithoutNotifying:block:error:]` */ - (void)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block NS_SWIFT_UNAVAILABLE(""); +/** + Performs actions contained within the given block inside a write transaction. + + @see `[RLMRealm transactionWithoutNotifying:block:error:]` + */ +- (BOOL)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block error:(NSError **)error; + +/** + Performs actions contained within the given block inside a write transaction. + + @see `[RLMRealm transactionWithoutNotifying:block:error:]` + */ +- (void)transactionWithoutNotifying:(NSArray *)tokens block:(__attribute__((noescape)) void(^)(void))block; + /** Performs actions contained within the given block inside a write transaction. @@ -343,6 +357,19 @@ typedef void (^RLMNotificationBlock)(RLMNotification notification, RLMRealm *rea generates notifications if applicable. This has no effect if the Realm was already up to date. + You can skip notifiying specific notification blocks about the changes made + in this write transaction by passing in their associated notification tokens. + This is primarily useful when the write transaction is saving changes already + made in the UI and you do not want to have the notification block attempt to + re-apply the same changes. + + The tokens passed to this method must be for notifications for this specific + `RLMRealm` instance. Notifications for different threads cannot be skipped + using this method. + + @param tokens An array of notification tokens which were returned from adding + callbacks which you do not want to be notified for the changes + made in this write transaction. @param block The block containing actions to perform. @param error If an error occurs, upon return contains an `NSError` object that describes the problem. If you are not interested in @@ -350,7 +377,7 @@ typedef void (^RLMNotificationBlock)(RLMNotification notification, RLMRealm *rea @return Whether the transaction succeeded. */ -- (BOOL)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block error:(NSError **)error; +- (BOOL)transactionWithoutNotifying:(NSArray *)tokens block:(__attribute__((noescape)) void(^)(void))block error:(NSError **)error; /** Updates the Realm and outstanding objects managed by the Realm to point to the diff --git a/Pods/Realm/include/RLMRealm_Private.h b/Pods/Realm/include/RLMRealm_Private.h index 59b7c6501c..ae13f1eb6d 100644 --- a/Pods/Realm/include/RLMRealm_Private.h +++ b/Pods/Realm/include/RLMRealm_Private.h @@ -18,7 +18,7 @@ #import -@class RLMFastEnumerator; +@class RLMFastEnumerator, RLMSyncSubscription; NS_ASSUME_NONNULL_BEGIN @@ -27,6 +27,11 @@ FOUNDATION_EXTERN void RLMDisableSyncToDisk(void); FOUNDATION_EXTERN NSData * _Nullable RLMRealmValidatedEncryptionKey(NSData *key); +FOUNDATION_EXTERN RLMSyncSubscription *RLMCastToSyncSubscription(id obj); + +// Set the queue used for async open. For testing purposes only. +FOUNDATION_EXTERN void RLMSetAsyncOpenQueue(dispatch_queue_t queue); + // Translate an in-flight exception resulting from an operation on a SharedGroup to // an NSError or NSException (if error is nil) void RLMRealmTranslateException(NSError **error); diff --git a/Pods/Realm/include/RLMRealm_Private.hpp b/Pods/Realm/include/RLMRealm_Private.hpp index a1bb294a9a..9b596cda03 100644 --- a/Pods/Realm/include/RLMRealm_Private.hpp +++ b/Pods/Realm/include/RLMRealm_Private.hpp @@ -19,16 +19,26 @@ #import "RLMRealm_Private.h" #import "RLMClassInfo.hpp" +#import "object_schema.hpp" namespace realm { class Group; class Realm; } +struct RLMResultsSetInfo { + realm::ObjectSchema osObjectSchema; + RLMObjectSchema *rlmObjectSchema; + RLMClassInfo info; + + RLMResultsSetInfo(__unsafe_unretained RLMRealm *const realm); + static RLMClassInfo& get(__unsafe_unretained RLMRealm *const realm); +}; @interface RLMRealm () { @public std::shared_ptr _realm; RLMSchemaInfo _info; + std::unique_ptr _resultsSetInfo; } // FIXME - group should not be exposed diff --git a/Pods/Realm/include/RLMResults_Private.hpp b/Pods/Realm/include/RLMResults_Private.hpp index a4f5abfed0..57edc23921 100644 --- a/Pods/Realm/include/RLMResults_Private.hpp +++ b/Pods/Realm/include/RLMResults_Private.hpp @@ -38,7 +38,10 @@ NS_ASSUME_NONNULL_BEGIN */ - (instancetype)initWithResults:(realm::Results)results; -+ (instancetype)resultsWithObjectInfo:(RLMClassInfo&)info results:(realm::Results)results; +- (instancetype)initWithObjectInfo:(RLMClassInfo&)info results:(realm::Results&&)results; ++ (instancetype)resultsWithObjectInfo:(RLMClassInfo&)info results:(realm::Results&&)results; + +- (instancetype)subresultsWithResults:(realm::Results)results; @end NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMSyncConfiguration_Private.h b/Pods/Realm/include/RLMSyncConfiguration_Private.h index b3c4a7e4d7..07bf0a23cc 100644 --- a/Pods/Realm/include/RLMSyncConfiguration_Private.h +++ b/Pods/Realm/include/RLMSyncConfiguration_Private.h @@ -18,9 +18,11 @@ #import +#import + NS_ASSUME_NONNULL_BEGIN -typedef NS_ENUM(NSUInteger, RLMSyncStopPolicy) { +typedef RLM_CLOSED_ENUM(NSUInteger, RLMSyncStopPolicy) { RLMSyncStopPolicyImmediately, RLMSyncStopPolicyLiveIndefinitely, RLMSyncStopPolicyAfterChangesUploaded, diff --git a/Pods/Realm/include/RLMSyncCredentials.h b/Pods/Realm/include/RLMSyncCredentials.h index c90fb4c946..6c99ce5963 100644 --- a/Pods/Realm/include/RLMSyncCredentials.h +++ b/Pods/Realm/include/RLMSyncCredentials.h @@ -52,7 +52,7 @@ extern RLMIdentityProvider const RLMIdentityProviderJWT; extern RLMIdentityProvider const RLMIdentityProviderAnonymous; /// A Nickname account as an identity provider. -extern RLMIdentityProvider const RLMIdentityProviderNickname; +extern RLMIdentityProvider const RLMIdentityProviderNickname __deprecated_msg("Use RLMIdentityProviderUsernamePassword instead"); /** Opaque credentials representing a specific Realm Object Server user. @@ -103,7 +103,7 @@ extern RLMIdentityProvider const RLMIdentityProviderNickname; /** Construct and return credentials from a nickname */ -+ (instancetype)credentialsWithNickname:(NSString *)nickname isAdmin:(BOOL)isAdmin; ++ (instancetype)credentialsWithNickname:(NSString *)nickname isAdmin:(BOOL)isAdmin __deprecated_msg("Use +credentialsWithUsername instead"); /** Construct and return special credentials representing a token that can @@ -121,6 +121,24 @@ extern RLMIdentityProvider const RLMIdentityProviderNickname; */ + (instancetype)credentialsWithAccessToken:(RLMServerToken)accessToken identity:(NSString *)identity; +/** + Construct and return special credentials representing a token issued by an external entity + that will be used instead of a ROS refresh token. + + @discussion Unlike other types of credentials, CustomRefreshToken credentials do not + participate in the regular login flow, because they take place of the refresh tokens login produces. + Instead, the token will be used to authorize each server operation such as opening a Realm or + editing permissions. When the token expires the SyncUser object will still be valid, but server operations will + fail until the token is updated. + + @remark ROS must be configured to accept the external issuing identity as a refresh token validator. + + @warning The values of @c identity and @c isAdmin are used for client-side validation only. + The server will compute their values based on the token string and the token validator configuration, + but it's important for correct functioning that the values here match the server. + */ ++ (instancetype)credentialsWithCustomRefreshToken:(NSString *)token identity:(NSString *)identity isAdmin:(BOOL)isAdmin; + /** Construct and return credentials with a custom token string, identity provider string, and optional user info. In most cases, the convenience initializers should be used instead. diff --git a/Pods/Realm/include/RLMSyncManager.h b/Pods/Realm/include/RLMSyncManager.h index c6b401e5e8..b0228e50e9 100644 --- a/Pods/Realm/include/RLMSyncManager.h +++ b/Pods/Realm/include/RLMSyncManager.h @@ -23,7 +23,7 @@ @class RLMSyncSession; /// An enum representing different levels of sync-related logging that can be configured. -typedef NS_ENUM(NSUInteger, RLMSyncLogLevel) { +typedef RLM_CLOSED_ENUM(NSUInteger, RLMSyncLogLevel) { /// Nothing will ever be logged. RLMSyncLogLevelOff, /// Only fatal errors will be logged. @@ -110,6 +110,9 @@ typedef void(^RLMSyncErrorReportingBlock)(NSError *, RLMSyncSession * _Nullable) /** Extra HTTP headers to append to every request to a Realm Object Server. + + Modifying this property while sync sessions are active will result in all + sessions disconnecting and reconnecting using the new headers. */ @property (nullable, nonatomic, copy) NSDictionary *customRequestHeaders; diff --git a/Pods/Realm/include/RLMSyncPermission.h b/Pods/Realm/include/RLMSyncPermission.h index c0677a0d12..8a21c74af7 100644 --- a/Pods/Realm/include/RLMSyncPermission.h +++ b/Pods/Realm/include/RLMSyncPermission.h @@ -16,6 +16,7 @@ // //////////////////////////////////////////////////////////////////////////// +#import #import @protocol RLMPermission, RLMPermissionUser; @@ -362,7 +363,7 @@ FOUNDATION_EXTERN id RLMPermissionForRole(RLMArray *array, id role); access to a Realm can always read from that Realm, and users with administrative access can always read or write from the Realm. */ -typedef NS_ENUM(NSUInteger, RLMSyncAccessLevel) { +typedef RLM_CLOSED_ENUM(NSUInteger, RLMSyncAccessLevel) { /// No access whatsoever. RLMSyncAccessLevelNone = 0, /** diff --git a/Pods/Realm/include/RLMSyncSession.h b/Pods/Realm/include/RLMSyncSession.h index 0d809a44a5..3b26184f5f 100644 --- a/Pods/Realm/include/RLMSyncSession.h +++ b/Pods/Realm/include/RLMSyncSession.h @@ -57,7 +57,7 @@ typedef NS_ENUM(NSUInteger, RLMSyncConnectionState) { Progress notification blocks can be registered on sessions if your app wishes to be informed how many bytes have been uploaded or downloaded, for example to show progress indicator UIs. */ -typedef NS_ENUM(NSUInteger, RLMSyncProgressDirection) { +typedef RLM_CLOSED_ENUM(NSUInteger, RLMSyncProgressDirection) { /// For monitoring upload progress. RLMSyncProgressDirectionUpload, /// For monitoring download progress. @@ -233,4 +233,46 @@ NS_REFINED_FOR_SWIFT; @end +/** + A task object which can be used to observe or cancel an async open. + + When a synchronized Realm is opened asynchronously, the latest state of the + Realm is downloaded from the server before the completion callback is invoked. + This task object can be used to observe the state of the download or to cancel + it. This should be used instead of trying to observe the download via the sync + session as the sync session itself is created asynchronously, and may not exist + yet when -[RLMRealm asyncOpenWithConfiguration:completion:] returns. + */ +@interface RLMAsyncOpenTask : NSObject +/** + Register a progress notification block. + + Each registered progress notification block is called whenever the sync + subsystem has new progress data to report until the task is either cancelled + or the completion callback is called. Progress notifications are delivered on + the main queue. + */ +- (void)addProgressNotificationBlock:(RLMProgressNotificationBlock)block; + +/** + Register a progress notification block which is called on the given queue. + + Each registered progress notification block is called whenever the sync + subsystem has new progress data to report until the task is either cancelled + or the completion callback is called. Progress notifications are delivered on + the supplied queue. + */ +- (void)addProgressNotificationOnQueue:(dispatch_queue_t)queue + block:(RLMProgressNotificationBlock)block; + +/** + Cancel the asynchronous open. + + Any download in progress will be cancelled, and the completion block for this + async open will never be called. If multiple async opens on the same Realm are + happening concurrently, all other opens will fail with the error "operation cancelled". + */ +- (void)cancel; +@end + NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMSyncSession_Private.hpp b/Pods/Realm/include/RLMSyncSession_Private.hpp index 76a06ad182..b14d2f6608 100644 --- a/Pods/Realm/include/RLMSyncSession_Private.hpp +++ b/Pods/Realm/include/RLMSyncSession_Private.hpp @@ -22,6 +22,7 @@ #import namespace realm { +class AsyncOpenTask; class SyncSession; } @@ -48,4 +49,8 @@ NS_ASSUME_NONNULL_BEGIN @end +@interface RLMAsyncOpenTask () +@property (nonatomic) std::shared_ptr task; +@end + NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMSyncSubscription.h b/Pods/Realm/include/RLMSyncSubscription.h index a527ef7b5d..307daef4ec 100644 --- a/Pods/Realm/include/RLMSyncSubscription.h +++ b/Pods/Realm/include/RLMSyncSubscription.h @@ -16,6 +16,7 @@ // //////////////////////////////////////////////////////////////////////////// +#import #import NS_ASSUME_NONNULL_BEGIN @@ -23,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN /** `RLMSyncSubscriptionState` is an enumeration representing the possible state of a sync subscription. */ -typedef NS_ENUM(NSInteger, RLMSyncSubscriptionState) { +typedef RLM_CLOSED_ENUM(NSInteger, RLMSyncSubscriptionState) { /** An error occurred while creating the subscription or while the server was processing it. */ @@ -54,42 +55,112 @@ typedef NS_ENUM(NSInteger, RLMSyncSubscriptionState) { /** `RLMSyncSubscription` represents a subscription to a set of objects in a synced Realm. - When partial sync is enabled for a synced Realm, the only objects that the server synchronizes to the - client are those that match a sync subscription registered by that client. A subscription consists of - of a query (represented by an `RLMResults`) and an optional name. + When query-based sync is enabled for a synchronized Realm, the server only + synchronizes objects to the client when they match a sync subscription + registered by that client. A subscription consists of of a query (represented + by an `RLMResults`) and an optional name. - The state of the subscription can be observed using [Key-Value Observing](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) on the `state` property. + The state of the subscription can be observed using + [Key-Value Observing](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) + on the `state` property. - Subscriptions are created using `-[RLMResults subscribe]` or `-[RLMResults subscribeWithName:]`. + Subscriptions are created using `-[RLMResults subscribe]` or + `-[RLMResults subscribeWithName:]`. Existing subscriptions for a Realm can be + looked up with `-[RLMRealm subscriptions]` or `-[RLMRealm subscriptionWithName:]`. */ @interface RLMSyncSubscription : NSObject /** The unique name for this subscription. - This will be `nil` if a name was not provided when the subscription was created. + This will be `nil` if this object was created with `-[RLMResults subscribe]`. + Subscription objects read from a Realm with `-[RLMRealm subscriptions]` will + always have a non-`nil` name and subscriptions which were not explicitly named + will have an automatically generated one. */ @property (nonatomic, readonly, nullable) NSString *name; /** - The state of the subscription. See `RLMSyncSubscriptionState`. + The current state of the subscription. See `RLMSyncSubscriptionState`. */ @property (nonatomic, readonly) RLMSyncSubscriptionState state; /** - The error associated with this subscription, if any. + The error which occurred when registering this subscription, if any. Will be non-nil only when `state` is `RLMSyncSubscriptionStateError`. */ @property (nonatomic, readonly, nullable) NSError *error; +/** + The raw query which this subscription is running on the server. + + This string is a serialized representation of the RLMResults which the + subscription was created from. This representation does *not* use NSPredicate + syntax, and is not guaranteed to remain consistent between versions of Realm. + Any use of this other than manual inspection when debugging is likely to be + incorrect. + + This is `nil` while the subscription is in the Creating state. + */ +@property (nonatomic, readonly, nullable) NSString *query; + +/** + When this subscription was first created. + + This value will be `nil` for subscriptions created with older versions of Realm + which did not store the creation date. Newly created subscriptions should + always have a non-nil creation date. + */ +@property (nonatomic, readonly, nullable) NSDate *createdAt; + +/** + When this subscription was last updated. + + This value will be `nil` for subscriptions created with older versions of Realm + which did not store the update date. Newly created subscriptions should + always have a non-nil update date. + + The update date is the time when the subscription was last updated by a call + to `-[RLMResults subscribeWithOptions:]`, and not when the set of objects which + match the subscription last changed. + */ +@property (nonatomic, readonly, nullable) NSDate *updatedAt; + +/** + When this subscription will be automatically removed. + + If the `timeToLive` parameter is set when creating a sync subscription, the + subscription will be automatically removed the first time that any subscription + is created, modified, or deleted after that time has elapsed. + + This property will be `nil` if the `timeToLive` option was not enabled. + */ +@property (nonatomic, readonly, nullable) NSDate *expiresAt; + +/** + How long this subscription will persist after last being updated. + + If the `timeToLive` parameter is set when creating a sync subscription, the + subscription will be automatically removed the first time that any subscription + is created, modified, or deleted after that time has elapsed. + + This property will be NaN if the `timeToLive` option was not enabled. + */ +@property (nonatomic, readonly) NSTimeInterval timeToLive; + /** Remove this subscription. - Removing a subscription will delete all objects from the local Realm that were matched - only by that subscription and not any remaining subscriptions. The deletion is performed - by the server, and so has no immediate impact on the contents of the local Realm. If the - device is currently offline, the removal will not be processed until the device returns online. + Removing a subscription will delete all objects from the local Realm that were + matched only by that subscription and not any remaining subscriptions. The + deletion is performed by the server, and so has no immediate impact on the + contents of the local Realm. If the device is currently offline, the removal + will not be processed until the device returns online. + + Unsubscribing is an asynchronous operation and will not immediately remove the + subscription from the Realm's list of subscriptions. Observe the state property + to be notified of when the subscription has actually been removed. */ - (void)unsubscribe; @@ -107,6 +178,82 @@ typedef NS_ENUM(NSInteger, RLMSyncSubscriptionState) { @end +/** + Configuration options for query-based sync subscriptions. + */ +@interface RLMSyncSubscriptionOptions : NSObject +/** + The name of the subscription. + + Naming a subscription makes it possible to look up a subscription by name + (using `-[RLMRealm subscriptionWithName:]`) or update an existing + subscription rather than creating a new one. + */ +@property (nonatomic, copy, nullable) NSString *name; + +/** + Whether this should update an existing subscription with the same name. + + By default trying to create a subscription with a name that's already in use + will fail unless the new subscription is an exact match for the existing one. + If this is set to YES, instead the existing subscription will be updated using + the query and options from the new subscription. This only works if the new + subscription is for the same type of objects as the existing subscription. + Trying to overwrite a subscription with a subscription of a different type of + objects will fail. + + The `updatedAt` and (if `timeToLive` is used) `expiresAt` properties are + updated whenever a subscription is overwritten even if nothing else has changed. + */ +@property (nonatomic) BOOL overwriteExisting; + +/** + How long (in seconds) a subscription should persist after being created. + + By default subscriptions are persistent, and last until they are explicitly + removed by calling `unsubscribe()`. Subscriptions can instead be made temporary + by setting the time to live to how long the subscription should remain. After + that time has elapsed the subscription will be automatically removed. + + A time to live of 0 or less disables subscription expiration. + */ +@property (nonatomic) NSTimeInterval timeToLive; + +/** + The maximum number of top-level matches to include in this subscription. + + If more top-level objects than the limit match the query, only the first + `limit` objects will be included. This respects the sort and distinct order of + the query being subscribed to for the determination of what the "first" objects + are. + + The limit does not count or apply to objects which are added indirectly due to + being linked to by the objects in the subscription or due to being listed in + `includeLinkingObjectProperties`. If the limit is larger than the number of + objects which match the query, all objects will be included. A limit of zero is + treated as unlimited. + */ +@property (nonatomic) NSUInteger limit; + +/** + Which RLMLinkingObjects properties should be included in the subscription. + + Outgoing links (i.e. `RLMArray` and `RLMObject` properties) are automatically + included in sync subscriptions. That is, if you subscribe to a query which + matches one object, every object which is reachable via links from that object + are also included in the subscription. + + By default, RLMLinkingObjects properties do not work this way. Instead, they + only report objects which happen to be included in a subscription. By naming + a RLMLinkingObjects property in this array, it can instead be treated as if + it was a RLMArray and include all objects which link to this object. + + Any keypath which ends in a RLMLinkingObject property can be included in this + array, including ones involving intermediate links. + */ +@property (nonatomic, copy, nullable) NSArray *includeLinkingObjectProperties; +@end + /** Support for subscribing to the results of object queries in a synced Realm. */ @@ -123,9 +270,11 @@ typedef NS_ENUM(NSInteger, RLMSyncSubscriptionState) { notified of when the subscription has been processed by the server and all objects matching the query are available. - The subscription will not be explicitly named. + The subscription will not be explicitly named. A name will be automatically + generated for internal use. The exact format of this name may change without + warning and should not be depended on. - @return The subscription + @return An object representing the newly-created subscription. @see RLMSyncSubscription */ @@ -148,9 +297,14 @@ typedef NS_ENUM(NSInteger, RLMSyncSubscriptionState) { performing the same subscription twice followed by removing it once will result in no subscription existing. - @param subscriptionName The name of the subscription + The newly created subscription will not be reported by + `-[RLMRealm subscriptions]` or `-[RLMRealm subscriptionWithName:]` until + `state` has transitioned from `RLMSyncSubscriptionStateCreating` to any of the + other states. - @return The subscription + @param subscriptionName The name of the subscription. + + @return An object representing the newly-created subscription. @see RLMSyncSubscription */ @@ -173,14 +327,17 @@ typedef NS_ENUM(NSInteger, RLMSyncSubscriptionState) { performing the same subscription twice followed by removing it once will result in no subscription existing. + The newly created subscription will not be reported by + `-[RLMRealm subscriptions]` or `-[RLMRealm subscriptionWithName:]` until + `state` has transitioned from `RLMSyncSubscriptionStateCreating` to any of the + other states. + The number of top-level matches may optionally be limited. This limit respects the sort and distinct order of the query being subscribed to, if any. Please note that the limit does not count or apply to objects which are added indirectly due to being linked to by the objects in the subscription. If the limit is larger than the number of objects which - match the query, all objects will be included. Limiting a subscription - requires ROS 3.10.1 or newer, and will fail with an invalid predicate - error with older versions. + match the query, all objects will be included. @param subscriptionName The name of the subscription @param limit The maximum number of objects to include in the subscription. @@ -190,6 +347,70 @@ typedef NS_ENUM(NSInteger, RLMSyncSubscriptionState) { @see RLMSyncSubscription */ - (RLMSyncSubscription *)subscribeWithName:(nullable NSString *)subscriptionName limit:(NSUInteger)limit; + +/** + Subscribe to a subset of the query represented by this `RLMResults`. + + Subscribing to a query asks the server to synchronize all objects to the + client which match the query, along with all objects which are reachable + from those objects via links. This happens asynchronously, and the local + client Realm may not immediately have all objects which match the query. + Observe the `state` property of the returned subscription object to be + notified of when the subscription has been processed by the server and + all objects matching the query are available. + + Creating a new subscription with the same name and query as an existing + subscription will not create a new subscription, but instead will return + an object referring to the existing sync subscription. This means that + performing the same subscription twice followed by removing it once will + result in no subscription existing. + + The newly created subscription will not be reported by + `-[RLMRealm subscriptions]` or `-[RLMRealm subscriptionWithName:]` until + `state` has transitioned from `RLMSyncSubscriptionStateCreating` to any of the + other states. + + @param options The additional configuration options for the subscription. + @return The subscription. + + @see RLMSyncSubscription + */ +- (RLMSyncSubscription *)subscribeWithOptions:(RLMSyncSubscriptionOptions *)options; +@end + +/** + Support for managing existing subscriptions to object queries in a Realm. + */ +@interface RLMRealm (SyncSubscription) +/** + Get a list of the query-based sync subscriptions made for this Realm. + + This list includes all subscriptions which are currently in the states `Pending`, + `Created`, and `Error`. Newly created subscriptions which are still in the + `Creating` state are not included, and calling this immediately after calling + `-[RLMResults subscribe]` will typically not include that subscription. Similarly, + because unsubscription happens asynchronously, this may continue to include + subscriptions after `-[RLMSyncSubscription unsubscribe]` is called on them. + + This method can only be called on a Realm which is using query-based sync and + will throw an exception if called on a non-synchronized or full-sync Realm. + */ +- (RLMResults *)subscriptions; + +/** + Look up a specific query-based sync subscription by name. + + Subscriptions are created asynchronously, so calling this immediately after + calling `subscribeWithName:` on a `RLMResults` will typically return `nil`. + Only subscriptions which are currently in the states `Pending`, `Created`, + and `Error` can be retrieved with this method. + + This method can only be called on a Realm which is using query-based sync and + will throw an exception if called on a non-synchronized or full-sync Realm. + + @return The named subscription, or `nil` if no subscription exists with that name. + */ +- (nullable RLMSyncSubscription *)subscriptionWithName:(NSString *)name; @end NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMSyncUtil_Private.h b/Pods/Realm/include/RLMSyncUtil_Private.h index d4c044ffd4..6b2c9c47e9 100644 --- a/Pods/Realm/include/RLMSyncUtil_Private.h +++ b/Pods/Realm/include/RLMSyncUtil_Private.h @@ -45,6 +45,7 @@ NS_ASSUME_NONNULL_BEGIN extern RLMIdentityProvider const RLMIdentityProviderAccessToken; extern RLMIdentityProvider const RLMIdentityProviderRealm; +extern RLMIdentityProvider const RLMIdentityProviderCustomRefreshToken; extern NSString *const kRLMSyncAppIDKey; extern NSString *const kRLMSyncDataKey; diff --git a/Pods/Realm/include/audit.hpp b/Pods/Realm/include/audit.hpp new file mode 100644 index 0000000000..81ea76b432 --- /dev/null +++ b/Pods/Realm/include/audit.hpp @@ -0,0 +1,34 @@ +//////////////////////////////////////////////////////////////////////////// +// +// Copyright 2018 Realm Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////// + +namespace realm { +class Table; +class TableView; +template class BasicRowExpr; +using RowExpr = BasicRowExpr; +struct VersionID; + +class AuditInterface { +public: + virtual ~AuditInterface() {} + + virtual void record_query(realm::VersionID, realm::TableView const&) = 0; + virtual void record_read(realm::VersionID, realm::RowExpr) = 0; + virtual void record_write(realm::VersionID, realm::VersionID) = 0; +}; +} diff --git a/Pods/Realm/include/core/realm/alloc_slab.hpp b/Pods/Realm/include/core/realm/alloc_slab.hpp index ce2070569d..e07edeae3a 100644 --- a/Pods/Realm/include/core/realm/alloc_slab.hpp +++ b/Pods/Realm/include/core/realm/alloc_slab.hpp @@ -107,6 +107,7 @@ class SlabAlloc : public Allocator { bool skip_validate = false; bool session_initiator = false; bool clear_file = false; + bool disable_sync = false; const char* encryption_key = nullptr; }; @@ -164,6 +165,12 @@ class SlabAlloc : public Allocator { /// transaction. int get_committed_file_format_version() const noexcept; + bool is_file_on_streaming_form() const + { + const Header& header = *reinterpret_cast(m_data); + return is_file_on_streaming_form(header); + } + /// Attach this allocator to an empty buffer. /// /// It is an error to call this function on an attached @@ -288,6 +295,23 @@ class SlabAlloc : public Allocator { /// call to SlabAlloc::alloc() corresponds to a mutation event. bool is_free_space_clean() const noexcept; + /// Returns the amount of memory requested by calls to SlabAlloc::alloc(). + size_t get_commit_size() const + { + return m_commit_size; + } + + /// Returns the total amount of memory currently allocated in slab area + size_t get_allocated_size() const noexcept; + + /// Returns total amount of slab for all slab allocators + static size_t get_total_slab_size() noexcept; + + /// Hooks used to keep the encryption layer informed of the start and stop + /// of transactions. + void note_reader_start(const void* reader_id); + void note_reader_end(const void* reader_id) noexcept; + void verify() const override; #ifdef REALM_DEBUG void enable_debug(bool enable) @@ -350,12 +374,24 @@ class SlabAlloc : public Allocator { // extend the amount of space available for database node // storage. Inter-node references are represented as file offsets // (a.k.a. "refs"), and each slab creates an apparently seamless extension - // of this file offset addressable space. Slabes are stored as rows in the + // of this file offset addressable space. Slabs are stored as rows in the // Slabs table in order of ascending file offsets. struct Slab { ref_type ref_end; - char* addr; + std::unique_ptr addr; + size_t size; + + Slab(ref_type r, size_t s); + Slab(Slab&& slab) + : ref_end(slab.ref_end) + , addr(std::move(slab.addr)) + , size(slab.size) + { + slab.size = 0; + } + ~Slab(); }; + struct Chunk { // describes a freed in-file block ref_type ref; size_t size; @@ -370,52 +406,63 @@ class SlabAlloc : public Allocator { // Each slab (area obtained from the underlying system) has a terminating BetweenBlocks // at the beginning and at the end of the Slab. struct FreeBlock { - ref_type ref; // ref for this entry. Saves a reverse translate / representing links as refs - FreeBlock* prev; // circular doubly linked list - FreeBlock* next; - void clear_links() { prev = next = nullptr; } - void unlink(); + ref_type ref; // ref for this entry. Saves a reverse translate / representing links as refs + FreeBlock* prev; // circular doubly linked list + FreeBlock* next; + void clear_links() + { + prev = next = nullptr; + } + void unlink(); }; struct BetweenBlocks { // stores sizes and used/free status of blocks before and after. - int32_t block_before_size; // negated if block is in use, - int32_t block_after_size; // positive if block is free - and zero at end + int32_t block_before_size; // negated if block is in use, + int32_t block_after_size; // positive if block is free - and zero at end }; + Config m_cfg; using FreeListMap = std::map; // log(N) addressing for larger blocks FreeListMap m_block_map; // abstract notion of a freelist - used to hide whether a freelist // is residing in the small blocks or the large blocks structures. struct FreeList { - int size = 0; // size of every element in the list, 0 if not found - FreeListMap::iterator it; - bool found_something() { return size != 0; } - bool found_exact(int sz) { return size == sz; } + int size = 0; // size of every element in the list, 0 if not found + FreeListMap::iterator it; + bool found_something() + { + return size != 0; + } + bool found_exact(int sz) + { + return size == sz; + } }; // simple helper functions for accessing/navigating blocks and betweenblocks (TM) BetweenBlocks* bb_before(FreeBlock* entry) const { - return reinterpret_cast(entry) - 1; + return reinterpret_cast(entry) - 1; } BetweenBlocks* bb_after(FreeBlock* entry) const { - auto bb = bb_before(entry); - size_t sz = bb->block_after_size; - char* addr = reinterpret_cast(entry) + sz; - return reinterpret_cast(addr); + auto bb = bb_before(entry); + size_t sz = bb->block_after_size; + char* addr = reinterpret_cast(entry) + sz; + return reinterpret_cast(addr); } FreeBlock* block_before(BetweenBlocks* bb) const { - size_t sz = bb->block_before_size; - if (sz <= 0) return nullptr; // only blocks that are not in use - char* addr = reinterpret_cast(bb) - sz; - return reinterpret_cast(addr); + size_t sz = bb->block_before_size; + if (sz <= 0) + return nullptr; // only blocks that are not in use + char* addr = reinterpret_cast(bb) - sz; + return reinterpret_cast(addr); } FreeBlock* block_after(BetweenBlocks* bb) const { - if (bb->block_after_size <= 0) - return nullptr; - return reinterpret_cast(bb + 1); + if (bb->block_after_size <= 0) + return nullptr; + return reinterpret_cast(bb + 1); } int size_from_block(FreeBlock* entry) const { - return bb_before(entry)->block_after_size; + return bb_before(entry)->block_after_size; } void mark_allocated(FreeBlock* entry); // mark the entry freed in bordering BetweenBlocks. Also validate size. @@ -444,7 +491,7 @@ class SlabAlloc : public Allocator { // create a single free chunk with "BetweenBlocks" at both ends and a // single free chunk between them. This free chunk will be of size: // slab_size - 2 * sizeof(BetweenBlocks) - FreeBlock* slab_to_entry(Slab slab, ref_type ref_start); + FreeBlock* slab_to_entry(const Slab& slab, ref_type ref_start); // breaking/merging of blocks FreeBlock* get_prev_block_if_mergeable(FreeBlock* block); @@ -518,10 +565,11 @@ class SlabAlloc : public Allocator { /// less padding between members due to alignment requirements. FeeeSpaceState m_free_space_state = free_space_Clean; - typedef std::vector slabs; + typedef std::vector Slabs; using Chunks = std::map; - slabs m_slabs; + Slabs m_slabs; Chunks m_free_read_only; + size_t m_commit_size = 0; bool m_debug_out = false; struct hash_entry { @@ -548,6 +596,9 @@ class SlabAlloc : public Allocator { /// if the buffer contains a file in streaming form static ref_type get_top_ref(const char* data, size_t len); + // Gets the path of the attached file, or other relevant debugging info. + std::string get_file_path_for_assertions() const; + class ChunkRefEq; class ChunkRefEndEq; class SlabRefEndEq; @@ -665,28 +716,28 @@ inline size_t SlabAlloc::get_section_base(size_t index) const noexcept template void SlabAlloc::for_all_free_entries(Func f) const { - ref_type ref = m_baseline; - for (auto& e : m_slabs) { - BetweenBlocks* bb = reinterpret_cast(e.addr); - REALM_ASSERT(bb->block_before_size == 0); - while (1) { - int size = bb->block_after_size; - f(ref, sizeof(BetweenBlocks)); - ref += sizeof(BetweenBlocks); - if (size == 0) { - break; - } - if (size > 0) { // freeblock. - f(ref, size); - bb = reinterpret_cast(reinterpret_cast(bb) + sizeof(BetweenBlocks) + size); - ref += size; - } - else { - bb = reinterpret_cast(reinterpret_cast(bb) + sizeof(BetweenBlocks) - size); - ref -= size; - } - } - } + ref_type ref = m_baseline; + for (auto& e : m_slabs) { + BetweenBlocks* bb = reinterpret_cast(e.addr.get()); + REALM_ASSERT(bb->block_before_size == 0); + while (1) { + int size = bb->block_after_size; + f(ref, sizeof(BetweenBlocks)); + ref += sizeof(BetweenBlocks); + if (size == 0) { + break; + } + if (size > 0) { // freeblock. + f(ref, size); + bb = reinterpret_cast(reinterpret_cast(bb) + sizeof(BetweenBlocks) + size); + ref += size; + } + else { + bb = reinterpret_cast(reinterpret_cast(bb) + sizeof(BetweenBlocks) - size); + ref -= size; + } + } + } } } // namespace realm diff --git a/Pods/Realm/include/core/realm/array.hpp b/Pods/Realm/include/core/realm/array.hpp index e0c2684c8c..a9489439c2 100644 --- a/Pods/Realm/include/core/realm/array.hpp +++ b/Pods/Realm/include/core/realm/array.hpp @@ -2219,17 +2219,38 @@ bool Array::find_optimized(int64_t value, size_t start, size_t end, size_t basei end = nullable_array ? size() - 1 : size(); if (nullable_array) { - // We were called by find() of a nullable array. So skip first entry, take nulls in count, etc, etc. Fixme: - // Huge speed optimizations are possible here! This is a very simple generic method. - for (; start2 < end; start2++) { - int64_t v = get(start2 + 1); - if (c(v, value, v == get(0), find_null)) { - util::Optional v2(v == get(0) ? util::none : util::make_optional(v)); - if (!find_action(start2 + baseindex, v2, state, callback)) - return false; // tell caller to stop aggregating/search + if (std::is_same::value) { + // In case of Equal it is safe to use the optimized logic. We just have to fetch the null value + // if this is what we are looking for. And we have to adjust the indexes to compensate for the + // null value at position 0. + if (find_null) { + value = get(0); } + else { + // If the value to search for is equal to the null value, the value cannot be in the array + if (value == get(0)) { + return true; + } + } + start2++; + end++; + baseindex--; + } + else { + // We were called by find() of a nullable array. So skip first entry, take nulls in count, etc, etc. Fixme: + // Huge speed optimizations are possible here! This is a very simple generic method. + auto null_value = get(0); + for (; start2 < end; start2++) { + int64_t v = get(start2 + 1); + bool value_is_null = (v == null_value); + if (c(v, value, value_is_null, find_null)) { + util::Optional v2(value_is_null ? util::none : util::make_optional(v)); + if (!find_action(start2 + baseindex, v2, state, callback)) + return false; // tell caller to stop aggregating/search + } + } + return true; // tell caller to continue aggregating/search (on next array leafs) } - return true; // tell caller to continue aggregating/search (on next array leafs) } @@ -2687,7 +2708,7 @@ inline bool Array::compare_equality(int64_t value, size_t start, size_t end, siz if (a >= 64 / no0(width)) break; - if (!find_action(a + start + baseindex, get(start + t), state, callback)) + if (!find_action(a + start + baseindex, get(start + a), state, callback)) return false; v2 >>= (t + 1) * width; a += 1; @@ -2929,33 +2950,36 @@ bool Array::compare_leafs_4(const Array* foreign, size_t start, size_t end, size #if defined(REALM_COMPILER_SSE) if (sseavx<42>() && width == foreign_width && (width == 8 || width == 16 || width == 32)) { // We can only use SSE if both bitwidths are equal and above 8 bits and all values are signed - while (start < end && (((reinterpret_cast(m_data) & 0xf) * 8 + start * width) % (128) != 0)) { - int64_t v = get_universal(m_data, start); - int64_t fv = get_universal(foreign_m_data, start); - if (c(v, fv)) { - if (!find_action(start + baseindex, v, state, callback)) - return false; + // and the two arrays are aligned the same way + if ((reinterpret_cast(m_data) & 0xf) == (reinterpret_cast(foreign_m_data) & 0xf)) { + while (start < end && (((reinterpret_cast(m_data) & 0xf) * 8 + start * width) % (128) != 0)) { + int64_t v = get_universal(m_data, start); + int64_t fv = get_universal(foreign_m_data, start); + if (c(v, fv)) { + if (!find_action(start + baseindex, v, state, callback)) + return false; + } + start++; } - start++; - } - if (start == end) - return true; + if (start == end) + return true; - size_t sse_items = (end - start) * width / 128; - size_t sse_end = start + sse_items * 128 / no0(width); + size_t sse_items = (end - start) * width / 128; + size_t sse_end = start + sse_items * 128 / no0(width); - while (start < sse_end) { - __m128i* a = reinterpret_cast<__m128i*>(m_data + start * width / 8); - __m128i* b = reinterpret_cast<__m128i*>(foreign_m_data + start * width / 8); + while (start < sse_end) { + __m128i* a = reinterpret_cast<__m128i*>(m_data + start * width / 8); + __m128i* b = reinterpret_cast<__m128i*>(foreign_m_data + start * width / 8); - bool continue_search = - find_sse_intern(a, b, 1, state, baseindex + start, callback); + bool continue_search = + find_sse_intern(a, b, 1, state, baseindex + start, callback); - if (!continue_search) - return false; + if (!continue_search) + return false; - start += 128 / no0(width); + start += 128 / no0(width); + } } } #endif diff --git a/Pods/Realm/include/core/realm/array_string.hpp b/Pods/Realm/include/core/realm/array_string.hpp index bbf3203606..a533f32c5e 100644 --- a/Pods/Realm/include/core/realm/array_string.hpp +++ b/Pods/Realm/include/core/realm/array_string.hpp @@ -54,6 +54,7 @@ class ArrayString : public Array { bool is_null(size_t ndx) const; void set_null(size_t ndx); StringData get(size_t ndx) const noexcept; + StringData get_string(size_t ndx) const noexcept { return get(ndx); } void add(); void add(StringData value); void set(size_t ndx, StringData value); diff --git a/Pods/Realm/include/core/realm/array_string_long.hpp b/Pods/Realm/include/core/realm/array_string_long.hpp index 8f5878d92e..b03d8b4d46 100644 --- a/Pods/Realm/include/core/realm/array_string_long.hpp +++ b/Pods/Realm/include/core/realm/array_string_long.hpp @@ -57,6 +57,7 @@ class ArrayStringLong : public Array { size_t size() const noexcept; StringData get(size_t ndx) const noexcept; + StringData get_string(size_t ndx) const noexcept { return get(ndx); } void add(StringData value); diff --git a/Pods/Realm/include/core/realm/column_timestamp.hpp b/Pods/Realm/include/core/realm/column_timestamp.hpp index d5c4859d76..cffaa90de0 100644 --- a/Pods/Realm/include/core/realm/column_timestamp.hpp +++ b/Pods/Realm/include/core/realm/column_timestamp.hpp @@ -83,6 +83,9 @@ class TimestampColumn : public ColumnBaseSimple { void to_dot(std::ostream&, StringData title = StringData()) const override; void do_dump_node_structure(std::ostream&, int level) const override; void leaf_to_dot(MemRef, ArrayParent*, size_t ndx_in_parent, std::ostream&) const override; + void get_seconds_leaf(size_t ndx, size_t& ndx_in_leaf, + BpTree>::LeafInfo& inout_leaf) const noexcept; + void get_nanoseconds_leaf(size_t ndx, size_t& ndx_in_leaf, BpTree::LeafInfo& inout_leaf) const noexcept; void add(const Timestamp& ts = Timestamp{}); Timestamp get(size_t row_ndx) const noexcept; diff --git a/Pods/Realm/include/core/realm/data_type.hpp b/Pods/Realm/include/core/realm/data_type.hpp index 859d1cf9c8..37e8a1b47f 100644 --- a/Pods/Realm/include/core/realm/data_type.hpp +++ b/Pods/Realm/include/core/realm/data_type.hpp @@ -25,6 +25,7 @@ namespace realm { class StringData; class BinaryData; +class Timestamp; typedef int64_t Int; typedef bool Bool; @@ -32,6 +33,7 @@ typedef float Float; typedef double Double; typedef realm::StringData String; typedef realm::BinaryData Binary; +typedef realm::Timestamp Timestamp; // Note: Value assignments must be kept in sync with diff --git a/Pods/Realm/include/core/realm/exceptions.hpp b/Pods/Realm/include/core/realm/exceptions.hpp index 3ddf607515..7db8d18f2a 100644 --- a/Pods/Realm/include/core/realm/exceptions.hpp +++ b/Pods/Realm/include/core/realm/exceptions.hpp @@ -102,13 +102,26 @@ class OutOfDiskSpace : public std::runtime_error { /// runtime_error::what() returns the msg provided in the constructor. }; - -class SerialisationError : public ExceptionWithBacktrace { +// SerialisationError intentionally does not inherit ExceptionWithBacktrace +// because the query-based-sync permissions queries generated on the server +// use a LinksToNode which is not currently serialisable (this limitation can +// be lifted in core 6 given stable ids). Coupled with query metrics which +// serialize all queries, the capturing of the stack for these frequent +// permission queries shows up in performance profiles. +class SerialisationError : public std::runtime_error { public: SerialisationError(const std::string& msg); /// runtime_error::what() returns the msg provided in the constructor. }; +// thrown when a user constructed link path is not a valid input +class InvalidPathError : public std::runtime_error { +public: + InvalidPathError(const std::string& msg); + /// runtime_error::what() returns the msg provided in the constructor. +}; + + /// The \c LogicError exception class is intended to be thrown only when /// applications (or bindings) violate rules that are stated (or ought to have /// been stated) in the documentation of the public API, and only in cases @@ -299,7 +312,12 @@ inline OutOfDiskSpace::OutOfDiskSpace(const std::string& msg) } inline SerialisationError::SerialisationError(const std::string& msg) - : ExceptionWithBacktrace(msg) + : std::runtime_error(msg) +{ +} + +inline InvalidPathError::InvalidPathError(const std::string& msg) + : runtime_error(msg) { } diff --git a/Pods/Realm/include/core/realm/group.hpp b/Pods/Realm/include/core/realm/group.hpp index f98787af0c..3386c6a05f 100644 --- a/Pods/Realm/include/core/realm/group.hpp +++ b/Pods/Realm/include/core/realm/group.hpp @@ -380,7 +380,8 @@ class Group : private Table::Parent { /// types that are derived from util::File::AccessError, the /// derived exception type is thrown. In particular, /// util::File::Exists will be thrown if the file exists already. - void write(const std::string& file, const char* encryption_key = nullptr, uint64_t version = 0) const; + void write(const std::string& file, const char* encryption_key = nullptr, uint64_t version = 0, + bool write_history = true) const; /// Write this database to a memory buffer. /// @@ -695,8 +696,8 @@ class Group : private Table::Parent { void mark_all_table_accessors() noexcept; - void write(util::File& file, const char* encryption_key, uint_fast64_t version_number) const; - void write(std::ostream&, bool pad, uint_fast64_t version_numer) const; + void write(util::File& file, const char* encryption_key, uint_fast64_t version_number, bool write_history) const; + void write(std::ostream&, bool pad, uint_fast64_t version_numer, bool write_history) const; Replication* get_replication() const noexcept; void set_replication(Replication*) noexcept; @@ -796,6 +797,7 @@ class Group : private Table::Parent { void set_history_schema_version(int version); void set_history_parent(Array& history_root) noexcept; void prepare_history_parent(Array& history_root, int history_type, int history_schema_version); + static void validate_top_array(const Array& arr, const SlabAlloc& alloc); friend class Table; friend class GroupWriter; diff --git a/Pods/Realm/include/core/realm/group_shared.hpp b/Pods/Realm/include/core/realm/group_shared.hpp index f1674403a4..e6074090f7 100644 --- a/Pods/Realm/include/core/realm/group_shared.hpp +++ b/Pods/Realm/include/core/realm/group_shared.hpp @@ -369,8 +369,11 @@ class SharedGroup { // by compact(). This may not correspond to the space which is free // at the point where get_stats() is called, since that will include // memory required to hold older versions of data, which still - // needs to be available. - void get_stats(size_t& free_space, size_t& used_space); + // needs to be available. The locked space is the amount of memory + // that is free in current version, but being used in still live versions. + // Notice that we will always have two live versions - the current and the + // previous. + void get_stats(size_t& free_space, size_t& used_space, util::Optional locked_space = util::none) const; //@} enum TransactStage { @@ -391,6 +394,15 @@ class SharedGroup { /// a read transaction will not immediately release any versions. uint_fast64_t get_number_of_versions(); + /// Get the approximate size of the data that would be written to the file if + /// a commit were done at this point. The reported size will always be bigger + /// than what will eventually be needed as we reserve a bit more memory that + /// will be needed. + size_t get_commit_size() const; + + /// Get the size of the currently allocated slab area + size_t get_allocated_size() const; + /// Compact the database file. /// - The method will throw if called inside a transaction. /// - The method will throw if called in unattached state. @@ -533,9 +545,7 @@ class SharedGroup { // Release pinned version (not thread safe) void unpin_version(VersionID version); -#if REALM_METRICS std::shared_ptr get_metrics(); -#endif // REALM_METRICS // Try to grab a exclusive lock of the given realm path's lock file. If the lock // can be acquired, the callback will be executed with the lock and then return true. @@ -567,6 +577,7 @@ class SharedGroup { // Member variables size_t m_free_space = 0; + size_t m_locked_space = 0; size_t m_used_space = 0; Group m_group; ReadLockInfo m_read_lock; @@ -694,9 +705,13 @@ class SharedGroup { }; -inline void SharedGroup::get_stats(size_t& free_space, size_t& used_space) { +inline void SharedGroup::get_stats(size_t& free_space, size_t& used_space, util::Optional locked_space) const +{ free_space = m_free_space; used_space = m_used_space; + if (locked_space) { + *locked_space = m_locked_space; + } } @@ -963,11 +978,14 @@ inline void SharedGroup::advance_read(O* observer, VersionID version_id) if (version_id.version < m_read_lock.m_version) throw LogicError(LogicError::bad_version); - _impl::History* hist = get_history(); // Throws + Replication* repl = m_group.get_replication(); + _impl::History* hist = repl ? repl->get_history() : nullptr; // Throws + if (!hist) throw LogicError(LogicError::no_history); - do_advance_read(observer, version_id, *hist); // Throws + bool hist_updated = do_advance_read(observer, version_id, *hist); // Throws + repl->initiate_transact(Replication::TransactionType::trans_Read, version_id.version, hist_updated); } template @@ -988,7 +1006,8 @@ inline void SharedGroup::promote_to_write(O* observer) Replication* repl = m_group.get_replication(); REALM_ASSERT(repl); // Presence of `repl` follows from the presence of `hist` version_type current_version = m_read_lock.m_version; - repl->initiate_transact(current_version, history_updated); // Throws + repl->initiate_transact(Replication::TransactionType::trans_Write, current_version, + history_updated); // Throws // If the group has no top array (top_ref == 0), create a new node // structure for an empty group now, to be ready for modifications. See @@ -1056,7 +1075,7 @@ inline bool SharedGroup::do_advance_read(O* observer, VersionID version_id, _imp REALM_ASSERT(new_read_lock.m_version >= m_read_lock.m_version); if (new_read_lock.m_version == m_read_lock.m_version) { release_read_lock(new_read_lock); - // _impl::History::update_early_from_top_ref() was not called + // _impl::History::update_from_ref() was not called return false; } @@ -1064,13 +1083,13 @@ inline bool SharedGroup::do_advance_read(O* observer, VersionID version_id, _imp { version_type new_version = new_read_lock.m_version; size_t new_file_size = new_read_lock.m_file_size; - ref_type new_top_ref = new_read_lock.m_top_ref; // Synchronize readers view of the file SlabAlloc& alloc = m_group.m_alloc; alloc.update_reader_view(new_file_size); - hist.update_early_from_top_ref(new_version, new_file_size, new_top_ref); // Throws + ref_type hist_ref = _impl::GroupFriend::get_history_ref(alloc, new_read_lock.m_top_ref); + hist.update_from_ref_and_version(hist_ref, new_version); // Throws } if (observer) { diff --git a/Pods/Realm/include/core/realm/group_shared_options.hpp b/Pods/Realm/include/core/realm/group_shared_options.hpp index 75d5bdadb8..73f7d3e59f 100644 --- a/Pods/Realm/include/core/realm/group_shared_options.hpp +++ b/Pods/Realm/include/core/realm/group_shared_options.hpp @@ -31,20 +31,22 @@ struct SharedGroupOptions { enum class Durability : uint16_t { Full, MemOnly, - Async ///< Not yet supported on windows. + Async, ///< Not yet supported on windows. + Unsafe // If you use this, you loose ACID property }; explicit SharedGroupOptions(Durability level = Durability::Full, const char* key = nullptr, bool allow_upgrade = true, std::function file_upgrade_callback = std::function(), - std::string temp_directory = sys_tmp_dir, - bool track_metrics = false) + std::string temp_directory = sys_tmp_dir, bool track_metrics = false, + size_t metrics_history_size = 10000) : durability(level) , encryption_key(key) , allow_file_format_upgrade(allow_upgrade) , upgrade_callback(file_upgrade_callback) , temp_dir(temp_directory) , enable_metrics(track_metrics) + , metrics_buffer_size(metrics_history_size) { } @@ -56,6 +58,7 @@ struct SharedGroupOptions { , upgrade_callback(std::function()) , temp_dir(sys_tmp_dir) , enable_metrics(false) + , metrics_buffer_size(10000) { } @@ -95,6 +98,10 @@ struct SharedGroupOptions { /// A prerequisite is compiling with REALM_METRICS=ON. bool enable_metrics; + /// The maximum number of entries stored by the metrics (if enabled). If this number + /// is exceeded without being consumed, only the most recent entries will be stored. + size_t metrics_buffer_size; + /// sys_tmp_dir will be used if the temp_dir is empty when creating SharedGroupOptions. /// It must be writable and allowed to create pipe/fifo file on it. /// set_sys_tmp_dir is not a thread-safe call and it is only supposed to be called once diff --git a/Pods/Realm/include/core/realm/group_writer.hpp b/Pods/Realm/include/core/realm/group_writer.hpp index 75f3baf84e..5721a3e4b9 100644 --- a/Pods/Realm/include/core/realm/group_writer.hpp +++ b/Pods/Realm/include/core/realm/group_writer.hpp @@ -27,6 +27,7 @@ #include #include #include +#include namespace realm { @@ -51,7 +52,8 @@ class GroupWriter : public _impl::ArrayWriterBase { // (Group::m_is_shared), the constructor also adds version tracking // information to the group, if it is not already present (6th and 7th entry // in Group::m_top). - GroupWriter(Group&); + using Durability = SharedGroupOptions::Durability; + GroupWriter(Group&, Durability dura = Durability::Full); ~GroupWriter(); void set_versions(uint64_t current, uint64_t read_lock) noexcept; @@ -69,20 +71,22 @@ class GroupWriter : public _impl::ArrayWriterBase { size_t get_file_size() const noexcept; - /// Write the specified chunk into free space. - void write(const char* data, size_t size); - ref_type write_array(const char*, size_t, uint32_t) override; #ifdef REALM_DEBUG void dump(); #endif - size_t get_free_space_size() + size_t get_free_space_size() const { return m_free_space_size; } + size_t get_locked_space_size() const + { + return m_locked_space_size; + } + private: class MapWindow; Group& m_group; @@ -90,10 +94,12 @@ class GroupWriter : public _impl::ArrayWriterBase { ArrayInteger m_free_positions; // 4th slot in Group::m_top ArrayInteger m_free_lengths; // 5th slot in Group::m_top ArrayInteger m_free_versions; // 6th slot in Group::m_top - uint64_t m_current_version; + uint64_t m_current_version = 0; uint64_t m_readlock_version; size_t m_window_alignment; - size_t m_free_space_size; + size_t m_free_space_size = 0; + size_t m_locked_space_size = 0; + Durability m_durability; struct FreeSpaceEntry { FreeSpaceEntry(size_t r, size_t s, uint64_t v) @@ -106,16 +112,21 @@ class GroupWriter : public _impl::ArrayWriterBase { size_t size; uint64_t released_at_version; }; - std::vector m_free_in_file; + class FreeList : public std::vector { + public: + FreeList() = default; + // Merge adjacent chunks + void merge_adjacent_entries_in_freelist(); + // Copy free space entries to structure where entries are sorted by size + void move_free_in_file_to_size_map(std::multimap& size_map); + }; + // m_free_in_file; std::vector m_not_free_in_file; std::multimap m_size_map; using FreeListElement = std::multimap::iterator; - void sort_freelist(); - // Merge adjacent chunks - void merge_adjacent_entries_in_freelist(); void read_in_freelist(); - size_t recreate_freelist(size_t reserve_pos, size_t& free_space_size); + size_t recreate_freelist(size_t reserve_pos); // Currently cached memory mappings. We keep as many as 16 1MB windows // open for writing. The allocator will favor sequential allocation // from a modest number of windows, depending upon fragmentation, so @@ -133,9 +144,6 @@ class GroupWriter : public _impl::ArrayWriterBase { // Sync all cached memory mappings void sync_all_mappings(); - // Copy free space entries to structure where entries are sorted by size - void move_free_in_file_to_size_map(); - /// Allocate a chunk of free space of the specified size. The /// specified size must be 8-byte aligned. Extend the file if /// required. The returned chunk is removed from the amount of diff --git a/Pods/Realm/include/core/realm/handover_defs.hpp b/Pods/Realm/include/core/realm/handover_defs.hpp index ad57b5cd2d..cd8be27354 100644 --- a/Pods/Realm/include/core/realm/handover_defs.hpp +++ b/Pods/Realm/include/core/realm/handover_defs.hpp @@ -57,15 +57,24 @@ struct QueryHandoverPatch { QueryNodeHandoverPatches m_node_data; }; -enum class DescriptorType { - Sort, - Distinct, - Limit +enum class DescriptorType { Sort, Distinct, Limit, Include }; + +struct DescriptorLinkPath { + DescriptorLinkPath(size_t column_index, size_t table_index, bool column_is_backlink) + : col_ndx(column_index) + , table_ndx(table_index) + , is_backlink(column_is_backlink) + { + } + + size_t col_ndx; + size_t table_ndx; + bool is_backlink = false; }; struct DescriptorExport { DescriptorType type; - std::vector> columns; + std::vector> columns; std::vector ordering; size_t limit; }; diff --git a/Pods/Realm/include/core/realm/impl/cont_transact_hist.hpp b/Pods/Realm/include/core/realm/impl/cont_transact_hist.hpp index 4aa07ddbd1..deb0f8bdcc 100644 --- a/Pods/Realm/include/core/realm/impl/cont_transact_hist.hpp +++ b/Pods/Realm/include/core/realm/impl/cont_transact_hist.hpp @@ -37,34 +37,16 @@ class History { public: using version_type = VersionID::version_type; - /// May be called during a read transaction to gain early access to the - /// history as it appears in a new snapshot that succeeds the one bound in - /// the current read transaction. - /// - /// May also be called at other times as long as the caller owns a read lock - /// (SharedGroup::grab_read_lock()) on the Realm for the specified file size - /// and top ref, and the allocator is in a 'free space clean' state - /// (SlabAlloc::is_free_space_clean()). - /// - /// This function may cause a remapping of the Realm file - /// (SlabAlloc::remap()) if it needs to make the new snapshot fully visible - /// in memory. + virtual ~History() noexcept {} + + /// May be called during any transaction /// - /// Note that this method of gaining early access to the history in a new - /// snapshot only gives read access. It does not allow for modifications of - /// the history or any other part of the new snapshot. For modifications to - /// be allowed, `Group::m_top` (the parent of the history) would first have - /// to be updated to reflect the new snapshot, but at that time we are no - /// longer in an 'early access' situation. + /// It is a precondition for calls to this function that the reader view is + /// updated - that is, the mapping is updated to provide full visibility to + /// the file. /// - /// This is not a problem from the point of view of this history interface, - /// as it only contains methods for reading from the history, but some - /// implementations will want to also provide for ways to modify the - /// history, but in those cases, modifications must occur only after the - /// Group accessor has been fully updated to reflect the new snapshot. - virtual void update_early_from_top_ref(version_type new_version, size_t new_file_size, ref_type new_top_ref) = 0; - - virtual void update_from_parent(version_type current_version) = 0; + virtual void update_from_ref_and_version(ref_type ref, version_type version) = 0; + virtual void update_from_parent(version_type version) = 0; /// Get all changesets between the specified versions. References to those /// changesets will be made available in successive entries of `buffer`. The @@ -142,9 +124,21 @@ class History { virtual void verify() const = 0; - virtual ~History() noexcept + void set_updated(bool updated) { + m_updated = updated; } + + void ensure_updated(version_type version) const + { + if (!m_updated) { + const_cast(this)->update_from_parent(version); + m_updated = true; + } + } + +private: + mutable bool m_updated = false; }; } // namespace _impl diff --git a/Pods/Realm/include/core/realm/impl/transact_log.hpp b/Pods/Realm/include/core/realm/impl/transact_log.hpp index ee3c710bc2..edace6c98c 100644 --- a/Pods/Realm/include/core/realm/impl/transact_log.hpp +++ b/Pods/Realm/include/core/realm/impl/transact_log.hpp @@ -1725,7 +1725,7 @@ inline bool TransactLogParser::has_next() noexcept template void TransactLogParser::parse_one(InstructionHandler& handler) { - char instr_ch; + char instr_ch = 0; if (!read_char(instr_ch)) parser_error(); // Throws // std::cerr << "parsing " << util::promote(instr) << " @ " << std::hex << long(m_input_begin) << std::dec << diff --git a/Pods/Realm/include/core/realm/metrics/metric_timer.hpp b/Pods/Realm/include/core/realm/metrics/metric_timer.hpp index 505a23c1b3..27ff71607a 100644 --- a/Pods/Realm/include/core/realm/metrics/metric_timer.hpp +++ b/Pods/Realm/include/core/realm/metrics/metric_timer.hpp @@ -25,21 +25,20 @@ #include #include -#if REALM_METRICS - namespace realm { namespace metrics { +using nanosecond_storage_t = int64_t; class MetricTimerResult { public: MetricTimerResult(); ~MetricTimerResult(); - double get_elapsed_seconds() const; - void report_seconds(double time); + nanosecond_storage_t get_elapsed_nanoseconds() const; + void report_nanoseconds(nanosecond_storage_t time); protected: - double m_elapsed_seconds; + nanosecond_storage_t m_elapsed_nanoseconds; }; @@ -50,16 +49,16 @@ class MetricTimer { void reset(); - /// Returns elapsed time in seconds since last call to reset(). - double get_elapsed_time() const; + /// Returns elapsed time in nanoseconds since last call to reset(). + nanosecond_storage_t get_elapsed_nanoseconds() const; /// Same as get_elapsed_time(). - operator double() const; + operator nanosecond_storage_t() const; /// Format the elapsed time on the form 0h00m, 00m00s, 00.00s, or /// 000.0ms depending on magnitude. - static void format(double seconds, std::ostream&); + static void format(nanosecond_storage_t nanoseconds, std::ostream&); - static std::string format(double seconds); + static std::string format(nanosecond_storage_t nanoseconds); private: using clock_type = std::chrono::high_resolution_clock; @@ -69,7 +68,7 @@ class MetricTimer { std::shared_ptr m_dest; time_point get_timer_ticks() const; - double calc_elapsed_seconds(time_point begin, time_point end) const; + nanosecond_storage_t calc_elapsed_nanoseconds(time_point begin, time_point end) const; }; @@ -78,14 +77,14 @@ inline void MetricTimer::reset() m_start = get_timer_ticks(); } -inline double MetricTimer::get_elapsed_time() const +inline nanosecond_storage_t MetricTimer::get_elapsed_nanoseconds() const { - return calc_elapsed_seconds(m_start, get_timer_ticks()); + return calc_elapsed_nanoseconds(m_start, get_timer_ticks()); } -inline MetricTimer::operator double() const +inline MetricTimer::operator nanosecond_storage_t() const { - return get_elapsed_time(); + return get_elapsed_nanoseconds(); } inline std::ostream& operator<<(std::ostream& out, const MetricTimer& timer) @@ -98,6 +97,4 @@ inline std::ostream& operator<<(std::ostream& out, const MetricTimer& timer) } // namespace metrics } // namespace realm -#endif // REALM_METRICS - #endif // REALM_METRIC_TIMER_HPP diff --git a/Pods/Realm/include/core/realm/metrics/metrics.hpp b/Pods/Realm/include/core/realm/metrics/metrics.hpp index 73e8d59630..27a526d031 100644 --- a/Pods/Realm/include/core/realm/metrics/metrics.hpp +++ b/Pods/Realm/include/core/realm/metrics/metrics.hpp @@ -20,11 +20,11 @@ #define REALM_METRICS_HPP #include -#include #include #include #include +#include "realm/util/fixed_size_buffer.hpp" namespace realm { @@ -32,11 +32,9 @@ class Group; namespace metrics { -#if REALM_METRICS - class Metrics { public: - Metrics(); + Metrics(size_t max_history_size); ~Metrics() noexcept; size_t num_query_metrics() const; size_t num_transaction_metrics() const; @@ -46,13 +44,15 @@ class Metrics { void start_read_transaction(); void start_write_transaction(); - void end_read_transaction(size_t total_size, size_t free_space, size_t num_objects, size_t num_versions); - void end_write_transaction(size_t total_size, size_t free_space, size_t num_objects, size_t num_versions); + void end_read_transaction(size_t total_size, size_t free_space, size_t num_objects, size_t num_versions, + size_t num_decrypted_pages); + void end_write_transaction(size_t total_size, size_t free_space, size_t num_objects, size_t num_versions, + size_t num_decrypted_pages); static std::unique_ptr report_fsync_time(const Group& g); static std::unique_ptr report_write_time(const Group& g); - using QueryInfoList = std::vector; - using TransactionInfoList = std::vector; + using QueryInfoList = util::FixedSizeBuffer; + using TransactionInfoList = util::FixedSizeBuffer; // Get the list of metric objects tracked since the last take std::unique_ptr take_queries(); @@ -63,17 +63,11 @@ class Metrics { std::unique_ptr m_pending_read; std::unique_ptr m_pending_write; -}; - -#else - -class Metrics -{ + size_t m_max_num_queries; + size_t m_max_num_transactions; }; -#endif // REALM_METRICS - } // namespace metrics } // namespace realm diff --git a/Pods/Realm/include/core/realm/metrics/query_info.hpp b/Pods/Realm/include/core/realm/metrics/query_info.hpp index 020eaa5e6b..54b78d820d 100644 --- a/Pods/Realm/include/core/realm/metrics/query_info.hpp +++ b/Pods/Realm/include/core/realm/metrics/query_info.hpp @@ -27,8 +27,6 @@ #include #include -#if REALM_METRICS - namespace realm { class Query; // forward declare in namespace realm @@ -53,14 +51,16 @@ class QueryInfo { ~QueryInfo() noexcept; std::string get_description() const; + std::string get_table_name() const; QueryType get_type() const; - double get_query_time() const; + nanosecond_storage_t get_query_time_nanoseconds() const; static std::unique_ptr track(const Query* query, QueryType type); static QueryType type_from_action(Action action); private: std::string m_description; + std::string m_table_name; QueryType m_type; std::shared_ptr m_query_time; }; @@ -68,5 +68,4 @@ class QueryInfo { } // namespace metrics } // namespace realm -#endif // REALM_METRICS #endif // REALM_QUERY_INFO_HPP diff --git a/Pods/Realm/include/core/realm/metrics/transaction_info.hpp b/Pods/Realm/include/core/realm/metrics/transaction_info.hpp index c647e34827..efcc2a653f 100644 --- a/Pods/Realm/include/core/realm/metrics/transaction_info.hpp +++ b/Pods/Realm/include/core/realm/metrics/transaction_info.hpp @@ -25,8 +25,6 @@ #include #include -#if REALM_METRICS - namespace realm { namespace metrics { @@ -44,13 +42,14 @@ class TransactionInfo { TransactionType get_transaction_type() const; // the transaction time is a total amount which includes fsync_time + write_time + user_time - double get_transaction_time() const; - double get_fsync_time() const; - double get_write_time() const; + nanosecond_storage_t get_transaction_time_nanoseconds() const; + nanosecond_storage_t get_fsync_time_nanoseconds() const; + nanosecond_storage_t get_write_time_nanoseconds() const; size_t get_disk_size() const; size_t get_free_space() const; size_t get_total_objects() const; size_t get_num_available_versions() const; + size_t get_num_decrypted_pages() const; private: MetricTimerResult m_transaction_time; @@ -63,15 +62,15 @@ class TransactionInfo { size_t m_total_objects; TransactionType m_type; size_t m_num_versions; + size_t m_num_decrypted_pages; friend class Metrics; - void update_stats(size_t disk_size, size_t free_space, size_t total_objects, size_t available_versions); + void update_stats(size_t disk_size, size_t free_space, size_t total_objects, size_t available_versions, + size_t num_decrypted_pages); void finish_timer(); }; } // namespace metrics } // namespace realm -#endif // REALM_METRICS - #endif // REALM_TRANSACTION_INFO_HPP diff --git a/Pods/Realm/include/core/realm/parser/keypath_mapping.hpp b/Pods/Realm/include/core/realm/parser/keypath_mapping.hpp index ef71d8d69f..01ea65f3b7 100644 --- a/Pods/Realm/include/core/realm/parser/keypath_mapping.hpp +++ b/Pods/Realm/include/core/realm/parser/keypath_mapping.hpp @@ -61,6 +61,10 @@ class KeyPathMapping bool has_mapping(ConstTableRef table, std::string name); KeyPathElement process_next_path(ConstTableRef table, KeyPath& path, size_t& index); void set_allow_backlinks(bool allow); + bool backlinks_allowed() const + { + return m_allow_backlinks; + } void set_backlink_class_prefix(std::string prefix); static Table* table_getter(TableRef table, const std::vector& links); protected: diff --git a/Pods/Realm/include/core/realm/parser/parser.hpp b/Pods/Realm/include/core/realm/parser/parser.hpp index 7ce72e4c3c..f04edc24e0 100644 --- a/Pods/Realm/include/core/realm/parser/parser.hpp +++ b/Pods/Realm/include/core/realm/parser/parser.hpp @@ -22,6 +22,7 @@ #include #include #include +#include namespace realm { @@ -110,13 +111,14 @@ struct DescriptorOrderingState struct PropertyState { std::string key_path; + std::string table_name; bool ascending; }; struct SingleOrderingState { std::vector properties; size_t limit; - enum class DescriptorType { Sort, Distinct, Limit } type; + enum class DescriptorType { Sort, Distinct, Limit, Include } type; }; std::vector orderings; }; @@ -130,7 +132,11 @@ struct ParserResult DescriptorOrderingState ordering; }; -ParserResult parse(const std::string &query); +ParserResult parse(const char* query); // assumes c-style null termination +ParserResult parse(const std::string& query); +ParserResult parse(const realm::StringData& query); + +DescriptorOrderingState parse_include_path(const realm::StringData& path); // run the analysis tool to check for cycles in the grammar // returns the number of problems found and prints some info to std::cout diff --git a/Pods/Realm/include/core/realm/parser/query_builder.hpp b/Pods/Realm/include/core/realm/parser/query_builder.hpp index ef91bb118d..34a72b639c 100644 --- a/Pods/Realm/include/core/realm/parser/query_builder.hpp +++ b/Pods/Realm/include/core/realm/parser/query_builder.hpp @@ -47,10 +47,13 @@ namespace parser { namespace query_builder { class Arguments; -void apply_predicate(Query& query, const parser::Predicate& predicate, Arguments& arguments, parser::KeyPathMapping = parser::KeyPathMapping()); +void apply_predicate(Query& query, const parser::Predicate& predicate, Arguments& arguments, + parser::KeyPathMapping mapping = parser::KeyPathMapping()); -void apply_ordering(DescriptorOrdering& ordering, ConstTableRef target, const parser::DescriptorOrderingState& state, Arguments& arguments); -void apply_ordering(DescriptorOrdering& ordering, ConstTableRef target, const parser::DescriptorOrderingState& state); +void apply_ordering(DescriptorOrdering& ordering, ConstTableRef target, const parser::DescriptorOrderingState& state, + Arguments& arguments, parser::KeyPathMapping mapping = parser::KeyPathMapping()); +void apply_ordering(DescriptorOrdering& ordering, ConstTableRef target, const parser::DescriptorOrderingState& state, + parser::KeyPathMapping mapping = parser::KeyPathMapping()); struct AnyContext diff --git a/Pods/Realm/include/core/realm/query.hpp b/Pods/Realm/include/core/realm/query.hpp index 59a764f98c..6d9e5a348a 100644 --- a/Pods/Realm/include/core/realm/query.hpp +++ b/Pods/Realm/include/core/realm/query.hpp @@ -103,6 +103,8 @@ class Query final { // Find links that point to a specific target row Query& links_to(size_t column_ndx, const ConstRow& target_row); + // Find links that point to specific target rows + Query& links_to(size_t column_ndx, const std::vector& target_row); // Conditions: null Query& equal(size_t column_ndx, null); diff --git a/Pods/Realm/include/core/realm/query_conditions.hpp b/Pods/Realm/include/core/realm/query_conditions.hpp index f9d66fb531..bc13bbe8fd 100644 --- a/Pods/Realm/include/core/realm/query_conditions.hpp +++ b/Pods/Realm/include/core/realm/query_conditions.hpp @@ -282,11 +282,7 @@ struct NotEqual { } template - bool operator()(A, B, C, D) const - { - REALM_ASSERT(false); - return false; - } + bool operator()(A, B, C, D) const = delete; static std::string description() { diff --git a/Pods/Realm/include/core/realm/query_engine.hpp b/Pods/Realm/include/core/realm/query_engine.hpp index 3bf2949f52..07b7febdf7 100644 --- a/Pods/Realm/include/core/realm/query_engine.hpp +++ b/Pods/Realm/include/core/realm/query_engine.hpp @@ -113,9 +113,11 @@ AggregateState State of the aggregate - contains a state variable that stor #include #include #include +#include #include #include +#include #if REALM_X86_OR_X64_TRUE && defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 160040219 #include @@ -725,7 +727,6 @@ class IntegerNodeBase : public ColumnNodeBase { }; -// FIXME: Add specialization that uses index for TConditionFunction = Equal template class IntegerNode : public IntegerNodeBase { using BaseType = IntegerNodeBase; @@ -744,11 +745,11 @@ class IntegerNode : public IntegerNodeBase { { } - void aggregate_local_prepare(Action action, DataType col_id, bool nullable) override + void aggregate_local_prepare(Action action, DataType col_id, bool is_nullable) override { this->m_fastmode_disabled = (col_id == type_Float || col_id == type_Double); this->m_action = action; - this->m_find_callback_specialized = get_specialized_callback(action, col_id, nullable); + this->m_find_callback_specialized = get_specialized_callback(action, col_id, is_nullable); } size_t aggregate_local(QueryStateBase* st, size_t start, size_t end, size_t local_limit, @@ -794,13 +795,13 @@ class IntegerNode : public IntegerNodeBase { return not_found; } - virtual std::string describe(util::serializer::SerialisationState& state) const override + std::string describe(util::serializer::SerialisationState& state) const override { return state.describe_column(ParentNode::m_table, IntegerNodeBase::m_condition_column->get_column_index()) + " " + describe_condition() + " " + util::serializer::print_value(IntegerNodeBase::m_value); } - virtual std::string describe_condition() const override + std::string describe_condition() const override { return TConditionFunction::description(); } @@ -813,21 +814,21 @@ class IntegerNode : public IntegerNodeBase { protected: using TFind_callback_specialized = typename BaseType::TFind_callback_specialized; - static TFind_callback_specialized get_specialized_callback(Action action, DataType col_id, bool nullable) + static TFind_callback_specialized get_specialized_callback(Action action, DataType col_id, bool is_nullable) { switch (action) { case act_Count: - return get_specialized_callback_2_int(col_id, nullable); + return get_specialized_callback_2_int(col_id, is_nullable); case act_Sum: - return get_specialized_callback_2(col_id, nullable); + return get_specialized_callback_2(col_id, is_nullable); case act_Max: - return get_specialized_callback_2(col_id, nullable); + return get_specialized_callback_2(col_id, is_nullable); case act_Min: - return get_specialized_callback_2(col_id, nullable); + return get_specialized_callback_2(col_id, is_nullable); case act_FindAll: - return get_specialized_callback_2_int(col_id, nullable); + return get_specialized_callback_2_int(col_id, is_nullable); case act_CallbackIdx: - return get_specialized_callback_2_int(col_id, nullable); + return get_specialized_callback_2_int(col_id, is_nullable); default: break; } @@ -836,15 +837,15 @@ class IntegerNode : public IntegerNodeBase { } template - static TFind_callback_specialized get_specialized_callback_2(DataType col_id, bool nullable) + static TFind_callback_specialized get_specialized_callback_2(DataType col_id, bool is_nullable) { switch (col_id) { case type_Int: - return get_specialized_callback_3(nullable); + return get_specialized_callback_3(is_nullable); case type_Float: - return get_specialized_callback_3(nullable); + return get_specialized_callback_3(is_nullable); case type_Double: - return get_specialized_callback_3(nullable); + return get_specialized_callback_3(is_nullable); default: break; } @@ -853,19 +854,19 @@ class IntegerNode : public IntegerNodeBase { } template - static TFind_callback_specialized get_specialized_callback_2_int(DataType col_id, bool nullable) + static TFind_callback_specialized get_specialized_callback_2_int(DataType col_id, bool is_nullable) { if (col_id == type_Int) { - return get_specialized_callback_3(nullable); + return get_specialized_callback_3(is_nullable); } REALM_ASSERT(false); // Invalid aggregate source column return nullptr; } template - static TFind_callback_specialized get_specialized_callback_3(bool nullable) + static TFind_callback_specialized get_specialized_callback_3(bool is_nullable) { - if (nullable) { + if (is_nullable) { return &BaseType::template find_callback_specialization; } else { @@ -874,6 +875,192 @@ class IntegerNode : public IntegerNodeBase { } }; +template +class IntegerNode : public IntegerNodeBase { +public: + using BaseType = IntegerNodeBase; + using TConditionValue = typename BaseType::TConditionValue; + + IntegerNode(TConditionValue value, size_t column_ndx) + : BaseType(value, column_ndx) + { + } + ~IntegerNode() + { + if (m_result) { + m_result->destroy(); + } + } + + void init() override + { + BaseType::init(); + m_nb_needles = m_needles.size(); + + if (has_search_index()) { + if (m_result) { + m_result->clear(); + } + else { + ref_type ref = IntegerColumn::create(Allocator::get_default()); + m_result = std::make_unique(); + m_result->init_from_ref(Allocator::get_default(), ref); + } + + IntegerNodeBase::m_condition_column->find_all(*m_result, this->m_value, 0, realm::npos); + m_index_get = 0; + m_index_end = m_result->size(); + } + } + + void consume_condition(IntegerNode* other) + { + REALM_ASSERT(this->m_condition_column == other->m_condition_column); + REALM_ASSERT(other->m_needles.empty()); + if (m_needles.empty()) { + m_needles.insert(this->m_value); + } + m_needles.insert(other->m_value); + } + + bool has_search_index() const + { + return IntegerNodeBase::m_condition_column->has_search_index(); + } + + size_t find_first_local(size_t start, size_t end) override + { + REALM_ASSERT(this->m_table); + + if (has_search_index()) { + if (m_index_end == 0) + return not_found; + + if (start <= m_index_last_start) + m_index_get = 0; + else + m_index_last_start = start; + + REALM_ASSERT(m_result); + while (m_index_get < m_index_end) { + // m_results are stored in sorted ascending order, guaranteed by the string index + size_t ndx = size_t(m_result->get(m_index_get)); + if (ndx >= end) { + break; + } + m_index_get++; + if (ndx >= start) { + return ndx; + } + } + return not_found; + } + + + while (start < end) { + // Cache internal leaves + this->cache_leaf(start); + + size_t end2; + if (end > this->m_leaf_end) + end2 = this->m_leaf_end - this->m_leaf_start; + else + end2 = end - this->m_leaf_start; + + auto start2 = start - this->m_leaf_start; + size_t s = realm::npos; + if (m_nb_needles) { + s = find_first_haystack(start2, end2); + } + else if (end2 - start2 == 1) { + if (this->m_leaf_ptr->get(start2) == this->m_value) { + s = start2; + } + } + else { + s = this->m_leaf_ptr->template find_first(this->m_value, start2, end2); + } + + if (s == not_found) { + start = this->m_leaf_end; + continue; + } + else + return s + this->m_leaf_start; + } + + return not_found; + } + + std::string describe(util::serializer::SerialisationState& state) const override + { + REALM_ASSERT(this->m_condition_column != nullptr); + std::string col_descr = state.describe_column(this->m_table, this->m_condition_column->get_column_index()); + + if (m_needles.empty()) { + return col_descr + " " + Equal::description() + " " + + util::serializer::print_value(IntegerNodeBase::m_value); + } + + // FIXME: once the parser supports it, print something like "column IN {n1, n2, n3}" + std::string desc = "("; + bool is_first = true; + for (auto it : m_needles) { + if (!is_first) + desc += " or "; + desc += + col_descr + " " + Equal::description() + " " + util::serializer::print_value(it); // "it" may be null + is_first = false; + } + desc += ")"; + return desc; + } + std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override + { + return std::unique_ptr(new IntegerNode(*this, patches)); + } + +private: + std::unordered_set m_needles; + std::unique_ptr m_result; + size_t m_nb_needles = 0; + size_t m_index_get = 0; + size_t m_index_last_start = 0; + size_t m_index_end = 0; + + IntegerNode(const IntegerNode& from, QueryNodeHandoverPatches* patches) + : BaseType(from, patches) + , m_needles(from.m_needles) + { + } + size_t find_first_haystack(size_t start, size_t end) + { + const auto not_in_set = m_needles.end(); + // for a small number of conditions, it is faster to do a linear search than to compute the hash + // the decision threshold was determined experimentally to be 22 conditions + bool search = m_nb_needles < 22; + auto cmp_fn = [this, search, not_in_set](const auto& v) { + if (search) { + for (auto it = m_needles.begin(); it != not_in_set; ++it) { + if (*it == v) + return true; + } + return false; + } + else { + return (m_needles.find(v) != not_in_set); + } + }; + for (size_t i = start; i < end; ++i) { + auto val = this->m_leaf_ptr->get(i); + if (cmp_fn(val)) { + return i; + } + } + return realm::npos; + } +}; + // This node is currently used for floats and doubles only template @@ -933,13 +1120,13 @@ class FloatDoubleNode : public ParentNode { return find(false); } - virtual std::string describe(util::serializer::SerialisationState& state) const override + std::string describe(util::serializer::SerialisationState& state) const override { REALM_ASSERT(m_condition_column.m_column != nullptr); return state.describe_column(ParentNode::m_table, m_condition_column.m_column->get_column_index()) + " " + describe_condition() + " " + util::serializer::print_value(FloatDoubleNode::m_value); } - virtual std::string describe_condition() const override + std::string describe_condition() const override { return TConditionFunction::description(); } @@ -1096,20 +1283,25 @@ class BinaryNode : public ParentNode { }; -template -class TimestampNode : public ParentNode { +class TimestampNodeBase : public ParentNode { public: using TConditionValue = Timestamp; static const bool special_null_node = false; + using LeafTypeSeconds = typename IntNullColumn::LeafType; + using LeafInfoSeconds = typename IntNullColumn::LeafInfo; + using LeafTypeNanos = typename IntegerColumn::LeafType; + using LeafInfoNanos = typename IntegerColumn::LeafInfo; - TimestampNode(Timestamp v, size_t column) + + TimestampNodeBase(Timestamp v, size_t column) : m_value(v) + , m_needle_seconds(m_value.is_null() ? util::none : util::make_optional(m_value.get_seconds())) { m_condition_column_idx = column; } - TimestampNode(null, size_t column) - : TimestampNode(Timestamp{}, column) + TimestampNodeBase(null, size_t column) + : TimestampNodeBase(Timestamp{}, column) { } @@ -1128,40 +1320,158 @@ class TimestampNode : public ParentNode { ParentNode::init(); m_dD = 100.0; + + // Clear leaf cache + m_leaf_end_seconds = 0; + m_array_ptr_seconds.reset(); // Explicitly destroy the old one first, because we're reusing the memory. + m_array_ptr_seconds.reset(new (&m_leaf_cache_storage_seconds) LeafTypeSeconds(m_table->get_alloc())); + m_leaf_end_nanos = 0; + m_array_ptr_nanos.reset(); // Explicitly destroy the old one first, because we're reusing the memory. + m_array_ptr_nanos.reset(new (&m_leaf_cache_storage_nanos) LeafTypeNanos(m_table->get_alloc())); + m_condition_column_is_nullable = m_condition_column->is_nullable(); } - size_t find_first_local(size_t start, size_t end) override +protected: + void get_leaf_seconds(const TimestampColumn& col, size_t ndx) { - size_t ret = m_condition_column->find(m_value, start, end); - return ret; + size_t ndx_in_leaf; + LeafInfoSeconds leaf_info_seconds{&m_leaf_ptr_seconds, m_array_ptr_seconds.get()}; + col.get_seconds_leaf(ndx, ndx_in_leaf, leaf_info_seconds); + m_leaf_start_seconds = ndx - ndx_in_leaf; + m_leaf_end_seconds = m_leaf_start_seconds + m_leaf_ptr_seconds->size(); } - virtual std::string describe(util::serializer::SerialisationState& state) const override + void get_leaf_nanos(const TimestampColumn& col, size_t ndx) { - REALM_ASSERT(m_condition_column != nullptr); - return state.describe_column(ParentNode::m_table, m_condition_column->get_column_index()) - + " " + TConditionFunction::description() + " " + util::serializer::print_value(TimestampNode::m_value); + size_t ndx_in_leaf; + LeafInfoNanos leaf_info_nanos{&m_leaf_ptr_nanos, m_array_ptr_nanos.get()}; + col.get_nanoseconds_leaf(ndx, ndx_in_leaf, leaf_info_nanos); + m_leaf_start_nanos = ndx - ndx_in_leaf; + m_leaf_end_nanos = m_leaf_start_nanos + m_leaf_ptr_nanos->size(); } - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override + util::Optional get_seconds_and_cache(size_t ndx) { - return std::unique_ptr(new TimestampNode(*this, patches)); + // Cache internal leaves + if (ndx >= this->m_leaf_end_seconds || ndx < this->m_leaf_start_seconds) { + this->get_leaf_seconds(*this->m_condition_column, ndx); + } + const size_t ndx_in_leaf = ndx - m_leaf_start_seconds; + return this->m_leaf_ptr_seconds->get(ndx_in_leaf); } - TimestampNode(const TimestampNode& from, QueryNodeHandoverPatches* patches) + int32_t get_nanoseconds_and_cache(size_t ndx) + { + // Cache internal leaves + if (ndx >= this->m_leaf_end_nanos || ndx < this->m_leaf_start_nanos) { + this->get_leaf_nanos(*this->m_condition_column, ndx); + } + return int32_t(this->m_leaf_ptr_nanos->get(ndx - this->m_leaf_start_nanos)); + } + + TimestampNodeBase(const TimestampNodeBase& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches) , m_value(from.m_value) + , m_needle_seconds(from.m_needle_seconds) , m_condition_column(from.m_condition_column) + , m_condition_column_is_nullable(from.m_condition_column_is_nullable) { if (m_condition_column && patches) m_condition_column_idx = m_condition_column->get_column_index(); } -private: Timestamp m_value; + util::Optional m_needle_seconds; const TimestampColumn* m_condition_column; + bool m_condition_column_is_nullable = false; + + // Leaf cache seconds + using LeafCacheStorageSeconds = + typename std::aligned_storage::type; + LeafCacheStorageSeconds m_leaf_cache_storage_seconds; + std::unique_ptr m_array_ptr_seconds; + const LeafTypeSeconds* m_leaf_ptr_seconds = nullptr; + size_t m_leaf_start_seconds = npos; + size_t m_leaf_end_seconds = 0; + + // Leaf cache nanoseconds + using LeafCacheStorageNanos = typename std::aligned_storage::type; + LeafCacheStorageNanos m_leaf_cache_storage_nanos; + std::unique_ptr m_array_ptr_nanos; + const LeafTypeNanos* m_leaf_ptr_nanos = nullptr; + size_t m_leaf_start_nanos = npos; + size_t m_leaf_end_nanos = 0; +}; + +template +class TimestampNode : public TimestampNodeBase { +public: + using TimestampNodeBase::TimestampNodeBase; + + template + size_t find_first_local_seconds(size_t start, size_t end) + { + while (start < end) { + // Cache internal leaves + if (start >= this->m_leaf_end_seconds || start < this->m_leaf_start_seconds) { + this->get_leaf_seconds(*this->m_condition_column, start); + } + + size_t end2; + if (end > this->m_leaf_end_seconds) + end2 = this->m_leaf_end_seconds - this->m_leaf_start_seconds; + else + end2 = end - this->m_leaf_start_seconds; + + size_t s = this->m_leaf_ptr_seconds->template find_first( + m_needle_seconds, start - this->m_leaf_start_seconds, end2); + + if (s == not_found) { + start = this->m_leaf_end_seconds; + continue; + } + return s + this->m_leaf_start_seconds; + } + return not_found; + } + + // see query_engine.cpp for operator specialisations + size_t find_first_local(size_t start, size_t end) override + { + REALM_ASSERT(this->m_table); + + size_t ret = m_condition_column->find(m_value, start, end); + return ret; + } + + virtual std::string describe(util::serializer::SerialisationState& state) const override + { + REALM_ASSERT(m_condition_column != nullptr); + return state.describe_column(ParentNode::m_table, m_condition_column->get_column_index()) + " " + + TConditionFunction::description() + " " + util::serializer::print_value(TimestampNode::m_value); + } + + std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override + { + return std::unique_ptr(new TimestampNode(*this, patches)); + } }; +template <> +size_t TimestampNode::find_first_local(size_t start, size_t end); +template <> +size_t TimestampNode::find_first_local(size_t start, size_t end); +template <> +size_t TimestampNode::find_first_local(size_t start, size_t end); +template <> +size_t TimestampNode::find_first_local(size_t start, size_t end); +template <> +size_t TimestampNode::find_first_local(size_t start, size_t end); +template <> +size_t TimestampNode::find_first_local(size_t start, size_t end); +template <> +size_t TimestampNode::find_first_local(size_t start, size_t end); + class StringNodeBase : public ParentNode { public: using TConditionValue = StringData; @@ -1184,6 +1494,11 @@ class StringNodeBase : public ParentNode { do_verify_column(m_condition_column); } + bool has_search_index() const + { + return m_condition_column->has_search_index(); + } + void init() override { ParentNode::init(); @@ -1301,7 +1616,6 @@ class StringNode : public StringNodeBase { StringNodeBase::init(); } - size_t find_first_local(size_t start, size_t end) override { TConditionFunction cond; @@ -1309,7 +1623,7 @@ class StringNode : public StringNodeBase { for (size_t s = start; s < end; ++s) { StringData t = get_string(s); - if (cond(StringData(m_value), m_ucase.data(), m_lcase.data(), t)) + if (cond(StringData(m_value), m_ucase.c_str(), m_lcase.c_str(), t)) return s; } return not_found; @@ -1459,7 +1773,7 @@ class StringNode : public StringNodeBase { if (!bool(m_value)) { return s; } - if (cond(StringData(m_value), m_ucase.data(), m_lcase.data(), m_charmap, t)) + if (cond(StringData(m_value), m_ucase.c_str(), m_lcase.c_str(), m_charmap, t)) return s; } return not_found; @@ -1537,9 +1851,9 @@ class StringNodeEqualBase : public StringNodeBase { size_t m_last_start; }; - // Specialization for Equal condition on Strings - we specialize because we can utilize indexes (if they exist) for -// Equal. +// Equal. This specialisation also supports combining other StringNode conditions into itself in order to +// optimise the non-indexed linear search that can be happen when many conditions are OR'd together in an "IN" query. // Future optimization: make specialization for greater, notequal, etc template <> class StringNode : public StringNodeEqualBase { @@ -1548,13 +1862,37 @@ class StringNode : public StringNodeEqualBase { void _search_index_init() override; + void consume_condition(StringNode* other); + std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override { return std::unique_ptr(new StringNode(*this, patches)); } + std::string describe(util::serializer::SerialisationState& state) const override; + + StringNode(const StringNode& from, QueryNodeHandoverPatches* patches) + : StringNodeEqualBase(from, patches) + { + for (auto it = from.m_needles.begin(); it != from.m_needles.end(); ++it) { + if (it->data() == nullptr && it->size() == 0) { + m_needles.insert(StringData()); // nulls + } + else { + m_needle_storage.emplace_back(StringBuffer()); + m_needle_storage.back().append(it->data(), it->size()); + m_needles.insert(StringData(m_needle_storage.back().data(), m_needle_storage.back().size())); + } + } + } + private: + template + size_t find_first_in(ArrayType& array, size_t begin, size_t end); + size_t _find_first_local(size_t start, size_t end) override; + std::unordered_set m_needles; + std::vector m_needle_storage; }; @@ -1603,7 +1941,6 @@ class StringNode : public StringNodeEqualBase { size_t _find_first_local(size_t start, size_t end) override; }; - // OR node contains at least two node pointers: Two or more conditions to OR // together in m_conditions, and the next AND condition (if any) in m_child. // @@ -1641,11 +1978,9 @@ class OrNode : public ParentNode { condition->verify_column(); } } + std::string describe(util::serializer::SerialisationState& state) const override { - if (m_conditions.size() >= 2) { - - } std::string s; for (size_t i = 0; i < m_conditions.size(); ++i) { if (m_conditions[i]) { @@ -1661,13 +1996,19 @@ class OrNode : public ParentNode { return s; } - void init() override { ParentNode::init(); m_dD = 10.0; + std::sort(m_conditions.begin(), m_conditions.end(), + [](auto& a, auto& b) { return a->m_condition_column_idx < b->m_condition_column_idx; }); + + combine_conditions>(); + combine_conditions>(); + combine_conditions>(); + m_start.clear(); m_start.resize(m_conditions.size(), 0); @@ -1757,6 +2098,36 @@ class OrNode : public ParentNode { std::vector> m_conditions; private: + template + void combine_conditions() { + QueryNodeType* first_match = nullptr; + QueryNodeType* advance = nullptr; + auto it = m_conditions.begin(); + while (it != m_conditions.end()) { + // Only try to optimize on QueryNodeType conditions without search index + auto node = it->get(); + if ((first_match = dynamic_cast(node)) && first_match->m_child == nullptr && + !first_match->has_search_index()) { + auto col_ndx = first_match->m_condition_column_idx; + auto next = it + 1; + while (next != m_conditions.end() && (*next)->m_condition_column_idx == col_ndx) { + auto next_node = next->get(); + if ((advance = dynamic_cast(next_node)) && next_node->m_child == nullptr) { + first_match->consume_condition(advance); + next = m_conditions.erase(next); + } + else { + ++next; + } + } + it = next; + } + else { + ++it; + } + } + } + // start index of the last find for each cond std::vector m_start; // last looked at index of the lasft find for each cond @@ -2000,7 +2371,6 @@ class TwoColumnsNode : public ParentNode { // For Next-Generation expressions like col1 / col2 + 123 > col4 * 100. class ExpressionNode : public ParentNode { - public: ExpressionNode(std::unique_ptr); @@ -2022,7 +2392,7 @@ class ExpressionNode : public ParentNode { struct LinksToNodeHandoverPatch : public QueryNodeHandoverPatch { - std::unique_ptr m_target_row; + std::vector> m_target_rows; size_t m_origin_column; }; @@ -2030,7 +2400,15 @@ class LinksToNode : public ParentNode { public: LinksToNode(size_t origin_column_index, const ConstRow& target_row) : m_origin_column(origin_column_index) - , m_target_row(target_row) + , m_target_rows(1, target_row) + { + m_dD = 10.0; + m_dT = 50.0; + } + + LinksToNode(size_t origin_column_index, const std::vector& target_rows) + : m_origin_column(origin_column_index) + , m_target_rows(target_rows) { m_dD = 10.0; m_dT = 50.0; @@ -2063,21 +2441,29 @@ class LinksToNode : public ParentNode { size_t find_first_local(size_t start, size_t end) override { REALM_ASSERT(m_column); - if (!m_target_row.is_attached()) - return not_found; - if (m_column_type == type_Link) { LinkColumn& cl = static_cast(*m_column); - return cl.find_first(m_target_row.get_index() + 1, start, - end); // LinkColumn stores link to row N as the integer N + 1 + for (auto& row : m_target_rows) { + if (row.is_attached()) { + // LinkColumn stores link to row N as the integer N + 1 + auto pos = cl.find_first(row.get_index() + 1, start, end); + if (pos != realm::npos) { + return pos; + } + } + } } else if (m_column_type == type_LinkList) { LinkListColumn& cll = static_cast(*m_column); for (size_t i = start; i < end; i++) { LinkViewRef lv = cll.get(i); - if (lv->find(m_target_row.get_index()) != not_found) - return i; + for (auto& row : m_target_rows) { + if (row.is_attached()) { + if (lv->find(row.get_index()) != not_found) + return i; + } + } } } @@ -2099,14 +2485,18 @@ class LinksToNode : public ParentNode { REALM_ASSERT(patch); m_origin_column = patch->m_origin_column; - m_target_row.apply_and_consume_patch(patch->m_target_row, group); + auto sz = patch->m_target_rows.size(); + m_target_rows.resize(sz); + for (size_t i = 0; i < sz; i++) { + m_target_rows[i].apply_and_consume_patch(patch->m_target_rows[i], group); + } ParentNode::apply_handover_patch(patches, group); } private: size_t m_origin_column = npos; - ConstRow m_target_row; + std::vector m_target_rows; LinkColumnBase* m_column = nullptr; DataType m_column_type; @@ -2115,7 +2505,11 @@ class LinksToNode : public ParentNode { { auto patch = std::make_unique(); patch->m_origin_column = source.m_column->get_column_index(); - ConstRow::generate_patch(source.m_target_row, patch->m_target_row); + auto sz = source.m_target_rows.size(); + patch->m_target_rows.resize(sz); + for (size_t i = 0; i < sz; i++) { + ConstRow::generate_patch(source.m_target_rows[i], patch->m_target_rows[i]); + } patches->push_back(std::move(patch)); } }; diff --git a/Pods/Realm/include/core/realm/query_expression.hpp b/Pods/Realm/include/core/realm/query_expression.hpp index 330cc03657..d9772b3f61 100644 --- a/Pods/Realm/include/core/realm/query_expression.hpp +++ b/Pods/Realm/include/core/realm/query_expression.hpp @@ -348,7 +348,7 @@ struct RowIndex { }; struct ValueBase { - static const size_t default_size = 8; + static const size_t chunk_size = 8; virtual void export_bool(ValueBase& destination) const = 0; virtual void export_Timestamp(ValueBase& destination) const = 0; virtual void export_int(ValueBase& destination) const = 0; @@ -429,6 +429,11 @@ class Subexpr { return nullptr; } + virtual bool has_constant_evaluation() const + { + return false; + } + virtual void evaluate(size_t index, ValueBase& destination) = 0; }; @@ -1172,11 +1177,11 @@ class Value : public ValueBase, public Subexpr2 { public: Value() { - init(false, ValueBase::default_size, T()); + init(false, 1, T()); } Value(T v) { - init(false, ValueBase::default_size, v); + init(false, 1, v); } Value(bool from_link_list, size_t values) @@ -1210,7 +1215,7 @@ class Value : public ValueBase, public Subexpr2 { { } - virtual std::string description(util::serializer::SerialisationState&) const override + std::string description(util::serializer::SerialisationState&) const override { if (ValueBase::m_from_link_list) { return util::serializer::print_value(util::to_string(ValueBase::m_values) @@ -1222,6 +1227,11 @@ class Value : public ValueBase, public Subexpr2 { return ""; } + bool has_constant_evaluation() const override + { + return true; + } + void evaluate(size_t, ValueBase& destination) override { destination.import(*this); @@ -1379,6 +1389,21 @@ class Value : public ValueBase, public Subexpr2 { } // Given a TCond (==, !=, >, <, >=, <=) and two Value, return index of first match + template + REALM_FORCEINLINE static size_t compare_const(const Value* left, Value* right) + { + TCond c; + + size_t sz = right->ValueBase::m_values; + bool left_is_null = left->m_storage.is_null(0); + for (size_t m = 0; m < sz; m++) { + if (c(left->m_storage[0], right->m_storage[m], left_is_null, right->m_storage.is_null(m))) + return right->m_from_link_list ? 0 : m; + } + + return not_found; // no match + } + template REALM_FORCEINLINE static size_t compare(Value* left, Value* right) { @@ -1435,7 +1460,7 @@ class ConstantStringValue : public Value { : Value() , m_string(string.is_null() ? util::none : util::make_optional(std::string(string))) { - init(false, ValueBase::default_size, m_string); + init(false, 1, m_string); } std::unique_ptr clone(QueryNodeHandoverPatches*) const override @@ -1736,6 +1761,19 @@ struct MakeLinkVector : public LinkMapFunction { std::vector& m_links; }; +struct UnaryLinkResult : public LinkMapFunction { + UnaryLinkResult() + : m_result(realm::not_found) + { + } + bool consume(size_t row_index) override + { + m_result = row_index; + return false; // exit search, only one result ever expected + } + size_t m_result; +}; + struct CountLinks : public LinkMapFunction { bool consume(size_t) override { @@ -1874,7 +1912,15 @@ class LinkMap { return s; } - std::vector get_links(size_t index) + size_t get_unary_link_or_not_found(size_t index) const + { + REALM_ASSERT(m_only_unary_links); + UnaryLinkResult res; + map_links(index, res); + return res.m_result; + } + + std::vector get_links(size_t index) const { std::vector res; get_links(index, res); @@ -1895,7 +1941,7 @@ class LinkMap { return counter.result(); } - void map_links(size_t row, LinkMapFunction& lm) + void map_links(size_t row, LinkMapFunction& lm) const { map_links(0, row, lm); } @@ -1924,7 +1970,7 @@ class LinkMap { std::vector m_link_columns; private: - void map_links(size_t column, size_t row, LinkMapFunction& lm) + void map_links(size_t column, size_t row, LinkMapFunction& lm) const { bool last = (column + 1 == m_link_columns.size()); ColumnType type = m_link_types[column]; @@ -1973,7 +2019,7 @@ class LinkMap { } - void get_links(size_t row, std::vector& result) + void get_links(size_t row, std::vector& result) const { MakeLinkVector mlv = MakeLinkVector(result); map_links(row, mlv); @@ -2061,14 +2107,25 @@ class SimpleQuerySupport : public Subexpr2 { size_t col = column_ndx(); if (links_exist()) { - std::vector links = m_link_map.get_links(index); - Value v = make_value_for_link(m_link_map.only_unary_links(), links.size()); - - for (size_t t = 0; t < links.size(); t++) { - size_t link_to = links[t]; - v.m_storage.set(t, m_link_map.target_table()->template get(col, link_to)); + if (m_link_map.only_unary_links()) { + const Table* target_table = m_link_map.target_table(); + d.init(false, 1); + d.m_storage.set_null(0); + size_t link_translation_index = this->m_link_map.get_unary_link_or_not_found(index); + if (link_translation_index != realm::not_found) { + d.m_storage.set(0, target_table->get(col, link_translation_index)); + } + } + else { + std::vector links = m_link_map.get_links(index); + constexpr bool only_unary_links = false; + Value v = make_value_for_link(only_unary_links, links.size()); + for (size_t t = 0; t < links.size(); t++) { + size_t link_to = links[t]; + v.m_storage.set(t, m_link_map.target_table()->template get(col, link_to)); + } + destination.import(v); } - destination.import(v); } else { // Not a link column @@ -2084,6 +2141,16 @@ class SimpleQuerySupport : public Subexpr2 { return m_link_map.m_link_columns.size() > 0; } + bool only_unary_links() const + { + return m_link_map.only_unary_links(); + } + + LinkMap get_link_map() const + { + return m_link_map; + } + virtual std::string description(util::serializer::SerialisationState& state) const override { return state.describe_columns(m_link_map, m_column_ndx); @@ -2721,7 +2788,7 @@ class Columns : public Subexpr2 { void evaluate(size_t index, ValueBase& destination) override { - evaluate_internal(index, destination, ValueBase::default_size); + evaluate_internal(index, destination, ValueBase::chunk_size); } void evaluate_internal(size_t index, ValueBase& destination, size_t nb_elements); @@ -3168,14 +3235,14 @@ class Columns : public Subexpr2 { sgc->cache_next(index); size_t colsize = sgc->m_column->size(); - // Now load `ValueBase::default_size` rows from from the leaf into m_storage. If it's an integer + // Now load `ValueBase::chunk_size` rows from from the leaf into m_storage. If it's an integer // leaf, then it contains the method get_chunk() which copies these values in a super fast way (first // case of the `if` below. Otherwise, copy the values one by one in a for-loop (the `else` case). - if (std::is_same::value && index + ValueBase::default_size <= sgc->m_leaf_end) { - Value v; + if (std::is_same::value && index + ValueBase::chunk_size <= sgc->m_leaf_end) { + Value v(false, ValueBase::chunk_size); // If you want to modify 'default_size' then update Array::get_chunk() - REALM_ASSERT_3(ValueBase::default_size, ==, 8); + REALM_ASSERT_3(ValueBase::chunk_size, ==, 8); auto sgc_2 = static_cast*>(m_sg.get()); sgc_2->m_leaf_ptr->get_chunk(index - sgc->m_leaf_start, v.m_storage.m_first); @@ -3184,8 +3251,8 @@ class Columns : public Subexpr2 { } else { size_t rows = colsize - index; - if (rows > ValueBase::default_size) - rows = ValueBase::default_size; + if (rows > ValueBase::chunk_size) + rows = ValueBase::chunk_size; Value::type> v(false, rows); for (size_t t = 0; t < rows; t++) @@ -3217,11 +3284,21 @@ class Columns : public Subexpr2 { return m_link_map.m_link_columns.size() > 0; } + bool only_unary_links() const + { + return m_link_map.only_unary_links(); + } + bool is_nullable() const { return m_nullable; } + LinkMap get_link_map() const + { + return m_link_map; + } + size_t column_ndx() const noexcept { return m_sg ? get_column_base().get_column_index() : m_column_ndx; @@ -3788,7 +3865,6 @@ class Operator : public Subexpr2 { std::unique_ptr m_right; }; - template class Compare : public Expression { public: @@ -3796,6 +3872,10 @@ class Compare : public Expression { : m_left(std::move(left)) , m_right(std::move(right)) { + m_left_is_const = m_left->has_constant_evaluation(); + if (m_left_is_const) { + m_left->evaluate(-1/*unused*/, m_left_value); + } } // See comment in base class @@ -3812,8 +3892,7 @@ class Compare : public Expression { } // Recursively fetch tables of columns in expression tree. Used when user first builds a stand-alone expression - // and - // binds it to a Query at a later time + // and binds it to a Query at a later time const Table* get_base_table() const override { const Table* l = m_left->get_base_table(); @@ -3829,13 +3908,20 @@ class Compare : public Expression { size_t find_first(size_t start, size_t end) const override { size_t match; - Value right; + Value left; + Value right; for (; start < end;) { - m_left->evaluate(start, left); - m_right->evaluate(start, right); - match = Value::template compare(&left, &right); + if (m_left_is_const) { + m_right->evaluate(start, right); + match = Value::template compare_const(&m_left_value, &right); + } + else { + m_left->evaluate(start, left); + m_right->evaluate(start, right); + match = Value::template compare(&left, &right); + } if (match != not_found && match + start < end) return start + match; @@ -3882,11 +3968,18 @@ class Compare : public Expression { Compare(const Compare& other, QueryNodeHandoverPatches* patches) : m_left(other.m_left->clone(patches)) , m_right(other.m_right->clone(patches)) + , m_left_is_const(other.m_left_is_const) { + if (m_left_is_const) { + m_left->evaluate(-1/*unused*/, m_left_value); + } } std::unique_ptr m_left; std::unique_ptr m_right; + bool m_left_is_const; + Value m_left_value; }; + } #endif // REALM_QUERY_EXPRESSION_HPP diff --git a/Pods/Realm/include/core/realm/replication.hpp b/Pods/Realm/include/core/realm/replication.hpp index 4cb024fa23..92a57827e1 100644 --- a/Pods/Realm/include/core/realm/replication.hpp +++ b/Pods/Realm/include/core/realm/replication.hpp @@ -59,6 +59,34 @@ class Replication : public _impl::TransactLogConvenientEncoder, protected _impl: class Interrupted; // Exception class SimpleIndexTranslator; + enum class TransactionType { trans_Read, trans_Write }; + + /// CAUTION: These values are stored in Realm files, so value reassignment + /// is not allowed. + enum HistoryType { + /// No history available. No support for either continuous transactions + /// or inter-client synchronization. + hist_None = 0, + + /// Out-of-Realm history supporting continuous transactions. + /// + /// NOTE: This history type is no longer in use. The value needs to stay + /// reserved in case someone tries to open an old Realm file. + hist_OutOfRealm = 1, + + /// In-Realm history supporting continuous transactions + /// (make_in_realm_history()). + hist_InRealm = 2, + + /// In-Realm history supporting continuous transactions and client-side + /// synchronization protocol (realm::sync::ClientHistory). + hist_SyncClient = 3, + + /// In-Realm history supporting continuous transactions and server-side + /// synchronization protocol (realm::_impl::ServerHistory). + hist_SyncServer = 4 + }; + virtual std::string get_database_path() const = 0; /// Called during construction of the associated SharedGroup object. @@ -173,7 +201,7 @@ class Replication : public _impl::TransactLogConvenientEncoder, protected _impl: /// \throw Interrupted Thrown by initiate_transact() and prepare_commit() if /// a blocking operation was interrupted. - void initiate_transact(version_type current_version, bool history_updated); + void initiate_transact(TransactionType transaction_type, version_type current_version, bool history_updated); version_type prepare_commit(version_type current_version); void finalize_commit() noexcept; void abort_transact() noexcept; @@ -217,32 +245,6 @@ class Replication : public _impl::TransactLogConvenientEncoder, protected _impl: /// or ended prematurely. static void apply_changeset(InputStream& changeset, Group& group, util::Logger* logger = nullptr); - /// CAUTION: These values are stored in Realm files, so value reassignment - /// is not allowed. - enum HistoryType { - /// No history available. No support for either continuous transactions - /// or inter-client synchronization. - hist_None = 0, - - /// Out-of-Realm history supporting continuous transactions. - /// - /// NOTE: This history type is no longer in use. The value needs to stay - /// reserved in case someone tries to open an old Realm file. - hist_OutOfRealm = 1, - - /// In-Realm history supporting continuous transactions - /// (make_in_realm_history()). - hist_InRealm = 2, - - /// In-Realm history supporting continuous transactions and client-side - /// synchronization protocol (realm::sync::ClientHistory). - hist_SyncClient = 3, - - /// In-Realm history supporting continuous transactions and server-side - /// synchronization protocol (realm::_impl::ServerHistory). - hist_SyncServer = 4 - }; - /// Returns the type of history maintained by this Replication /// implementation, or \ref hist_None if no history is maintained by it. /// @@ -363,7 +365,7 @@ class Replication : public _impl::TransactLogConvenientEncoder, protected _impl: /// changeset during the next invocation of do_initiate_transact() if /// `current_version` indicates that the previous transaction failed. - virtual void do_initiate_transact(version_type current_version, bool history_updated) = 0; + virtual void do_initiate_transact(TransactionType, version_type current_version) = 0; virtual version_type do_prepare_commit(version_type orig_version) = 0; virtual void do_finalize_commit() noexcept = 0; virtual void do_abort_transact() noexcept = 0; @@ -405,12 +407,10 @@ class TrivialReplication : public Replication { static void apply_changeset(const char* data, size_t size, SharedGroup& target, util::Logger* logger = nullptr); - bool is_history_updated() const noexcept; - BinaryData get_uncommitted_changes() const noexcept; void initialize(SharedGroup&) override; - void do_initiate_transact(version_type, bool) override; + void do_initiate_transact(TransactionType, version_type) override; version_type do_prepare_commit(version_type orig_version) override; void do_finalize_commit() noexcept override; void do_abort_transact() noexcept override; @@ -422,7 +422,6 @@ class TrivialReplication : public Replication { private: const std::string m_database_file; util::Buffer m_transact_log_buffer; - bool m_history_updated; void internal_transact_log_reserve(size_t, char** new_begin, char** new_end); size_t transact_log_size(); @@ -436,9 +435,13 @@ inline Replication::Replication() { } -inline void Replication::initiate_transact(version_type current_version, bool history_updated) +inline void Replication::initiate_transact(TransactionType transaction_type, version_type current_version, + bool history_updated) { - do_initiate_transact(current_version, history_updated); + if (auto hist = get_history()) { + hist->set_updated(history_updated); + } + do_initiate_transact(transaction_type, current_version); reset_selection_caches(); } @@ -477,11 +480,6 @@ inline TrivialReplication::TrivialReplication(const std::string& database_file) { } -inline bool TrivialReplication::is_history_updated() const noexcept -{ - return m_history_updated; -} - inline BinaryData TrivialReplication::get_uncommitted_changes() const noexcept { const char* data = m_transact_log_buffer.data(); diff --git a/Pods/Realm/include/core/realm/row.hpp b/Pods/Realm/include/core/realm/row.hpp index c1439b73d0..66b7c58fa3 100644 --- a/Pods/Realm/include/core/realm/row.hpp +++ b/Pods/Realm/include/core/realm/row.hpp @@ -236,7 +236,7 @@ class Group; class RowBase { protected: TableRef m_table; // nullptr if detached. - size_t m_row_ndx; // Undefined if detached. + size_t m_row_ndx = -1; // Undefined if detached. void attach(Table*, size_t row_ndx) noexcept; void reattach(Table*, size_t row_ndx) noexcept; diff --git a/Pods/Realm/include/core/realm/sync/changeset.hpp b/Pods/Realm/include/core/realm/sync/changeset.hpp index 66d97be922..7a79240a5c 100644 --- a/Pods/Realm/include/core/realm/sync/changeset.hpp +++ b/Pods/Realm/include/core/realm/sync/changeset.hpp @@ -48,7 +48,7 @@ struct Changeset { using timestamp_type = uint_fast64_t; using file_ident_type = uint_fast64_t; using version_type = uint_fast64_t; // FIXME: Get from `History`. - using StringBuffer = util::BasicStringBuffer; + using StringBuffer = util::BasicStringBuffer; Changeset(); struct share_buffers_tag {}; @@ -59,6 +59,7 @@ struct Changeset { Changeset& operator=(const Changeset&) = delete; InternString intern_string(StringData); // Slow! + InternString find_string(StringData) const noexcept; // Slow! StringData string_data() const noexcept; StringBuffer& string_buffer() noexcept; @@ -160,10 +161,28 @@ struct Changeset { /// version produced by this changeset on the client on which this changeset /// originated, but may for instance be the version produced on the server /// after receiving and re-sending this changeset to another client. + /// + /// FIXME: The explanation above is confusing. The truth is that if this + /// changeset was received by a client from the server, then \a version is + /// the version that was produced on the server by this changeset. + /// + /// FIXME: This property, as well as \a last_integrated_remote_version, \a + /// origin_timestamp, and \a origin_file_ident should probably be removed + /// from this class, as they are not a logical part of a changeset, and also + /// are difficult to document without knowing more about what context the + /// changeset object occurs. Also, functions such as + /// InstructionApplier::apply() that a changeset as argument, but do not + /// care about those properties. version_type version = 0; /// On clients, the last integrated server version. On the server, this is /// the last integrated client version. + /// + /// FIXME: The explanation above is confusing. The truth is that if this + /// changeset was received by a client from the server, then \a + /// last_integrated_remote_version is the last client version that was + /// integrated by the server at the server version referencened by \a + /// version. version_type last_integrated_remote_version = 0; /// Timestamp at origin when the original untransformed changeset was @@ -218,6 +237,7 @@ struct Changeset { void insert(size_t position, Instruction instr); void erase(size_t position); size_t size() const noexcept; + bool is_empty() const noexcept; Instruction& at(size_t pos) noexcept; const Instruction& at(size_t pos) const noexcept; @@ -255,7 +275,6 @@ struct Changeset::IteratorImpl { using difference_type = std::ptrdiff_t; IteratorImpl() : m_pos(0) {} - IteratorImpl(const IteratorImpl& other) : m_inner(other.m_inner), m_pos(other.m_pos) {} template IteratorImpl(const IteratorImpl& other, std::enable_if_t* = nullptr) : m_inner(other.m_inner), m_pos(other.m_pos) {} @@ -590,7 +609,7 @@ inline Changeset::iterator Changeset::erase_stable(const_iterator cpos) if (pos.m_pos >= pos.m_inner->size()) { do { ++pos.m_inner; - } while (pos.m_inner != end && pos.m_inner->size() == 0); + } while (pos.m_inner != end && pos.m_inner->is_empty()); pos.m_pos = 0; } return pos; @@ -630,6 +649,14 @@ inline size_t Changeset::InstructionContainer::size() const noexcept return 1; } +inline bool Changeset::InstructionContainer::is_empty() const noexcept +{ + if (is_multi()) { + return get_multi().instructions.empty(); + } + return false; +} + inline Instruction& Changeset::InstructionContainer::at(size_t pos) noexcept { REALM_ASSERT(pos < size()); diff --git a/Pods/Realm/include/core/realm/sync/changeset_encoder.hpp b/Pods/Realm/include/core/realm/sync/changeset_encoder.hpp index 0bff58603a..5c3618a804 100644 --- a/Pods/Realm/include/core/realm/sync/changeset_encoder.hpp +++ b/Pods/Realm/include/core/realm/sync/changeset_encoder.hpp @@ -29,7 +29,7 @@ namespace realm { namespace sync { struct ChangesetEncoder: InstructionHandler { - using Buffer = util::AppendBuffer; + using Buffer = util::AppendBuffer; Buffer release() noexcept; void reset() noexcept; @@ -61,7 +61,6 @@ struct ChangesetEncoder: InstructionHandler { void append_bytes(const void*, size_t); template void append_int(T); - template char* encode_int(char* buffer, T value); void append_payload(const Instruction::Payload&); void append_value(DataType); void append_value(bool); @@ -76,7 +75,7 @@ struct ChangesetEncoder: InstructionHandler { void append_value(Timestamp); Buffer m_buffer; - util::metered::unordered_map m_intern_strings_rev; + util::metered::map m_intern_strings_rev; StringData m_string_range; }; @@ -109,10 +108,10 @@ inline StringData ChangesetEncoder::get_string(StringBufferRange range) const no } template -void encode_changeset(const Changeset& log, util::AppendBuffer& out_buffer) +void encode_changeset(const Changeset& changeset, util::AppendBuffer& out_buffer) { ChangesetEncoder encoder; - encoder.encode_single(log); // Throws + encoder.encode_single(changeset); // Throws auto& buffer = encoder.buffer(); out_buffer.append(buffer.data(), buffer.size()); // Throws } diff --git a/Pods/Realm/include/core/realm/sync/client.hpp b/Pods/Realm/include/core/realm/sync/client.hpp index 316118af15..fcdcafc85a 100644 --- a/Pods/Realm/include/core/realm/sync/client.hpp +++ b/Pods/Realm/include/core/realm/sync/client.hpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -37,18 +38,6 @@ namespace realm { namespace sync { -/// Supported protocols: -/// -/// Protocol URL scheme Default port -/// ----------------------------------------------------------------------------------- -/// realm "realm:" 7800 (80 if Client::Config::enable_default_port_hack) -/// realm_ssl "realms:" 7801 (443 if Client::Config::enable_default_port_hack) -/// -enum class Protocol { - realm, - realm_ssl -}; - class Client { public: @@ -77,15 +66,10 @@ class Client { using port_type = util::network::Endpoint::port_type; using RoundtripTimeHandler = void(milliseconds_type roundtrip_time); - // FIXME: The default values for `connect_timeout`, `ping_keepalive_period`, - // and `pong_keepalive_timeout` ought to be much lower (2 minutes, 1 minute, - // and 2 minutes) than they are. Their current values are due to the fact - // that the server is single threaded, and that some operations take more - // than 5 minutes to complete. - static constexpr milliseconds_type default_connect_timeout = 600000; // 10 minutes + static constexpr milliseconds_type default_connect_timeout = 120000; // 2 minutes static constexpr milliseconds_type default_connection_linger_time = 30000; // 30 seconds - static constexpr milliseconds_type default_ping_keepalive_period = 600000; // 10 minutes - static constexpr milliseconds_type default_pong_keepalive_timeout = 600000; // 10 minutes + static constexpr milliseconds_type default_ping_keepalive_period = 60000; // 1 minute + static constexpr milliseconds_type default_pong_keepalive_timeout = 120000; // 2 minutes static constexpr milliseconds_type default_fast_reconnect_limit = 60000; // 1 minute struct Config { @@ -158,6 +142,9 @@ class Client { /// file. Received DOWNLOAD messages will be accepted, but otherwise /// ignored. No UPLOAD messages will be generated. For testing purposes /// only. + /// + /// Many operations, such as serialized transactions, are not suppored + /// in this mode. bool dry_run = false; /// The default changeset cooker to be used by new sessions. Can be @@ -237,13 +224,13 @@ class Client { /// For testing purposes only. bool disable_upload_activation_delay = false; - /// If enable_upload_log_compaction is true, every changeset will be + /// If `disable_upload_compaction` is true, every changeset will be /// compacted before it is uploaded to the server. Compaction will /// reduce the size of a changeset if the same field is set multiple /// times or if newly created objects are deleted within the same /// transaction. Log compaction increeses CPU usage and memory /// consumption. - bool enable_upload_log_compaction = true; + bool disable_upload_compaction = false; /// Set the `TCP_NODELAY` option on all TCP/IP sockets. This disables /// the Nagle algorithm. Disabling it, can in some cases be used to @@ -257,6 +244,12 @@ class Client { /// called by the client's event loop thread, i.e., the thread that /// calls `Client::run()`. This feature is mainly for testing purposes. std::function roundtrip_time_handler; + + /// Disable sync to disk (fsync(), msync()) for all realm files managed + /// by this client. + /// + /// Testing/debugging feature. Should never be enabled in production. + bool disable_sync_to_disk = false; }; /// \throw util::EventLoop::Implementation::NotAvailable if no event loop @@ -322,8 +315,8 @@ class Client { bool wait_for_session_terminations_or_client_stopped(); /// Returns false if the specified URL is invalid. - bool decompose_server_url(const std::string& url, Protocol& protocol, std::string& address, - port_type& port, std::string& path) const; + bool decompose_server_url(const std::string& url, ProtocolEnvelope& protocol, + std::string& address, port_type& port, std::string& path) const; private: class Impl; @@ -400,6 +393,9 @@ class Session { std::uint_fast64_t progress_version, std::uint_fast64_t snapshot_version); using WaitOperCompletionHandler = std::function; + using SerialTransactChangeset = util::Buffer; + using SerialTransactInitiationHandler = std::function; + using SerialTransactCompletionHandler = std::function; using SSLVerifyCallback = bool(const std::string& server_address, port_type server_port, const char* pem_data, @@ -416,8 +412,8 @@ class Session { std::string server_address = "localhost"; /// server_port is the port at which the server listens. If server_port - /// is zero, the default port for the specified protocol is used. See \ref - /// Protocol for information on default ports. + /// is zero, the default port for the specified protocol is used. See + /// ProtocolEnvelope for information on default ports. port_type server_port = 0; /// server_path is the virtual path by which the server identifies the @@ -433,8 +429,9 @@ class Session { /// virtual paths from actual file system paths. std::string server_path = "/"; - /// The protocol used for communicating with the server. See \ref Protocol. - Protocol protocol = Protocol::realm; + /// The protocol used for communicating with the server. See + /// ProtocolEnvelope. + ProtocolEnvelope protocol_envelope = ProtocolEnvelope::realm; /// url_prefix is a prefix that is prepended to the server_path /// in the HTTP GET request that initiates a sync connection. The value @@ -468,9 +465,8 @@ class Session { /// for partitioning the sessions. std::string multiplex_ident; - /// verify_servers_ssl_certificate controls whether the server - /// certificate is verified for SSL connections. It should generally be - /// true in production. + /// Controls whether the server certificate is verified for SSL + /// connections. It should generally be true in production. bool verify_servers_ssl_certificate = true; /// ssl_trust_certificate_path is the path of a trust/anchor @@ -488,7 +484,7 @@ class Session { /// If ssl_trust_certificate_path is None (default), ssl_verify_callback /// (see below) is used if set, and the default device trust/anchor /// store is used otherwise. - Optional ssl_trust_certificate_path; + util::Optional ssl_trust_certificate_path; /// If Client::Config::ssl_verify_callback is set, that function is called /// to verify the certificate, unless verify_servers_ssl_certificate is @@ -566,14 +562,116 @@ class Session { std::shared_ptr changeset_cooker; /// The encryption key the SharedGroup will be opened with. - Optional> encryption_key; + util::Optional> encryption_key; + + /// ClientReset is used for both async open and client reset. If + /// client_reset is not util::none, the sync client will perform + /// async open for this session if the local Realm does not exist, and + /// client reset if the local Realm exists. If client_reset is + /// util::none, an ordinary sync session will take place. + /// + /// A session will perform async open by downloading a state Realm, and + /// some metadata, from the server, patching up the metadata part of + /// the Realm and finally move the downloaded Realm into the path of + /// the local Realm. After completion of async open, the application + /// can open and use the Realm. + /// + /// A session will perform client reset by downloading a state Realm, and + /// some metadata, from the server. After download, the state Realm will + /// be integrated into the local Realm in a write transaction. The + /// application is free to use the local realm during the entire client + /// reset. Like a DOWNLOAD message, the application will not be able + /// to perform a write transaction at the same time as the sync client + /// performs its own write transaction. Client reset is not more + /// disturbing for the application than any DOWNLOAD message. The + /// application can listen to change notifications from the client + /// reset exactly as in a DOWNLOAD message. + /// + /// The client reset will recover non-uploaded changes in the local + /// Realm if and only if 'recover_local_changes' is true. In case, + /// 'recover_local_changes' is false, the local Realm state will hence + /// be set to the server's state (server wins). + /// + /// Async open and client reset require a private directory for + /// metadata. This directory must be specified in the option + /// 'metadata_dir'. The metadata_dir must not be touched during async + /// open or client reset. The metadata_dir can safely be removed at + /// times where async open or client reset do not take place. The sync + /// client attempts to clean up metadata_dir. The metadata_dir can be + /// reused across app restarts to resume an interrupted download. It is + /// recommended to leave the metadata_dir unchanged except when it is + /// known that async open or client reset is done. + /// + /// The recommended usage of async open is to use it for the initial + /// bootstrap if Realm usage is not needed until after the server state + /// has been downloaded. + /// + /// The recommended usage of client reset is after a previous session + /// encountered an error that implies the need for a client reset. It + /// is not recommended to persist the need for a client reset. The + /// application should just attempt to synchronize in the usual fashion + /// and only after hitting an error, start a new session with a client + /// reset. In other words, if the application crashes during a client reset, + /// the application should attempt to perform ordinary synchronization + /// after restart and switch to client reset if needed. + /// + /// Error codes that imply the need for a client reset are the session + /// level error codes: + /// + /// bad_client_file_ident = 208, // Bad client file identifier (IDENT) + /// bad_server_version = 209, // Bad server version (IDENT, UPLOAD) + /// bad_client_version = 210, // Bad client version (IDENT, UPLOAD) + /// diverging_histories = 211, // Diverging histories (IDENT) + /// + /// However, other errors such as bad changeset (UPLOAD) could also be resolved + /// with a client reset. Client reset can even be used without any prior error + /// if so desired. + /// + /// After completion of async open and client reset, the sync client + /// will continue synchronizing with the server in the usual fashion. + /// + /// The progress of async open and client reset can be tracked with the + /// standard progress handler. + /// + /// Async open and client reset are done when the progress handler + /// arguments satisfy "progress_version > 0". However, if the + /// application wants to ensure that it has all data present on the + /// server, it should wait for download completion using either + /// void async_wait_for_download_completion(WaitOperCompletionHandler) + /// or + /// bool wait_for_download_complete_or_client_stopped(). + /// + /// The option 'require_recent_state_realm' is used for async open to + /// request a recent state Realm. A recent state Realm is never empty + /// (unless there is no data), and is recent in the sense that it was + /// produced by the current incarnation of the server. Recent does not + /// mean the absolutely newest possible state Realm, since that might + /// lead to too excessive work on the server. Setting + /// 'require_recent_state_realm' to true might lead to more work + /// performed by the server but it ensures that more data is downloaded + /// using async open instead of ordinary synchronization. It is + /// recommended to set 'require_recent_state_realm' to true. Client + /// reset always downloads a recent state Realm. + struct ClientReset { + std::string metadata_dir; + bool recover_local_changes = true; + bool require_recent_state_realm = true; + }; + util::Optional client_reset_config; + + struct ProxyConfig { + enum class Type { HTTP, HTTPS } type; + std::string address; + port_type port; + }; + util::Optional proxy_config; }; /// \brief Start a new session for the specified client-side Realm. /// - /// Note that the session is not fully activated until you call bind(). Also - /// note that if you call set_sync_transact_callback(), it must be done - /// before calling bind(). + /// Note that the session is not fully activated until you call bind(). + /// Also note that if you call set_sync_transact_callback(), it must be + /// done before calling bind(). /// /// \param realm_path The file-system path of a local client-side Realm /// file. @@ -651,8 +749,8 @@ class Session { /// uint_fast64_t progress_version); /// /// downloaded_bytes is the size in bytes of all downloaded changesets. - /// downloadable_bytes is the size in bytes of the part of the server - /// history that do not originate from this client. + /// downloadable_bytes is equal to downloaded_bytes plus an estimate of + /// the size of the remaining server history. /// /// uploaded_bytes is the size in bytes of all locally produced changesets /// that have been received and acknowledged by the server. @@ -673,11 +771,10 @@ class Session { /// bool download_complete = (downloaded_bytes == downloadable_bytes); /// /// However, download completion might never be reached because the server - /// can receive new changesets from other clients. - /// An alternative strategy is to cache downloadable_bytes from the callback, - /// and use the cached value as the threshold. - /// - /// bool download_complete = (downloaded_bytes == cached_downloadable_bytes); + /// can receive new changesets from other clients. downloadable_bytes can + /// decrease for two reasons: server side compaction and changesets of + /// local origin. Code using downloadable_bytes must not assume that it + /// is increasing. /// /// Upload progress can be calculated by caching an initial value of /// uploaded_bytes from the last, or next, callback. Then @@ -819,7 +916,7 @@ class Session { /// The two other forms of bind() are convenience functions. /// void bind(std::string server_address, std::string server_path, /// std::string signed_user_token, port_type server_port = 0, - /// Protocol protocol = Protocol::realm); + /// ProtocolEnvelope protocol = ProtocolEnvelope::realm); /// replaces the corresponding parameters from the Session::Config object /// before the session is bound. /// void bind(std::string server_url, std::string signed_user_token) parses @@ -827,22 +924,23 @@ class Session { /// before the session is bound. /// /// \param server_url For example "realm://sync.realm.io/test". See - /// server_address, server_path, and server_port in Session::Config for information - /// about the individual components of the URL. See \ref Protocol for the list of - /// available URL schemes and the associated default ports. + /// server_address, server_path, and server_port in Session::Config for + /// information about the individual components of the URL. See + /// ProtocolEnvelope for the list of available URL schemes and the + /// associated default ports. /// /// \throw BadServerUrl if the specified server URL is malformed. void bind(); void bind(std::string server_url, std::string signed_user_token); void bind(std::string server_address, std::string server_path, std::string signed_user_token, port_type server_port = 0, - Protocol protocol = Protocol::realm); + ProtocolEnvelope protocol = ProtocolEnvelope::realm); /// @} /// \brief Refresh the access token associated with this session. /// /// This causes the REFRESH protocol message to be sent to the server. See - /// \ref Protocol. It is an error to pass a token with a different user + /// ProtocolEnvelope. It is an error to pass a token with a different user /// identity than the token used to initiate the session. /// /// In an on-going session the application may expect the access token to @@ -868,7 +966,7 @@ class Session { /// Note: This function is thread-safe. /// /// \param signed_user_token A cryptographically signed token describing the - /// identity and access rights of the current user. See \ref Protocol. + /// identity and access rights of the current user. See ProtocolEnvelope. void refresh(std::string signed_user_token); /// \brief Inform the synchronization agent about changes of local origin. @@ -954,7 +1052,7 @@ class Session { /// @{ \brief Synchronous wait for upload or download completion. /// - /// These functions are synchronous equivalents to + /// These functions are synchronous equivalents of /// async_wait_for_upload_completion() and /// async_wait_for_download_completion() respectively. This means that they /// block the caller until the completion condition is satisfied, or the @@ -1005,6 +1103,96 @@ class Session { /// \brief Change address of server for this session. void override_server(std::string address, port_type); + /// \brief Initiate a serialized transaction. + /// + /// Asynchronously waits for completion of any serialized transactions, that + /// are already in progress via the same session object, then waits for + /// the download process to complete (async_wait_for_download_completion()), + /// then pauses the upload process. The upload process will be resumed when + /// async_try_complete_serial_transact() or abort_serial_transact() is + /// called. + /// + /// Changesets produced by local transactions, that are committed after the + /// completion of the initiation of a serialized transaction, are guaranteed + /// to not be uploaded until after (or during) the completion of that + /// serialized transaction (async_try_complete_serial_transact()). + /// + /// If the initiation of a serialized transaction is successfully completed, + /// that is, if the specified handler gets called with an std::error_code + /// argument that evaluates to false in a boolean context, then the + /// application is required to eventually call + /// async_try_complete_serial_transact() to complete the transaction, or + /// abort_serial_transact() to abort it. If + /// async_try_complete_serial_transact() fails (throws), the application is + /// required to follow up with a call to abort_serial_transact(). + /// + /// If the session object is destroyed before initiation process completes, + /// the specified handler will be called with error + /// `util::error::operation_aborted`. Currently, this is the only possible + /// error that can be reported through this handler. + /// + /// This feature is only available when the server supports version 28, or + /// later, of the synchronization protocol. See + /// get_current_protocol_version(). + /// + /// This feature is not currently supported with Partial Synchronization, + /// and in a server cluster, it is currently only supported on the root + /// node. + void async_initiate_serial_transact(SerialTransactInitiationHandler); + + /// \brief Complete a serialized transaction. + /// + /// Initiate the completion of the serialized transaction. This involves + /// sending the specified changeset to the server, and waiting for the + /// servers response. + /// + /// If the session object is destroyed before completion process completes, + /// the specified handler will be called with error + /// `util::error::operation_aborted`. + /// + /// Otherwise, if the server does not support serialized transactions, the + /// specified handler will be called with error + /// `util::MiscExtErrors::operation_not_supported`. This happens if the + /// negotiated protocol version is too old, if serialized transactions are + /// disallowed by the server, or if it is not allowed for the Realm file in + /// question (partial synchronization). + /// + /// Otherwise, the specified handler will be called with an error code + /// argument that evaluates to false in a boolean context, and the + /// `accepted` argument will be true if, and only if the transaction was + /// accepted by the server. + /// + /// \param upload_anchor The upload cursor associated with the snapshot on + /// which the specified changeset is based. Use + /// sync::ClientHistory::get_upload_anchor_of_current_transact() to obtain + /// it. Note that + /// sync::ClientHistory::get_upload_anchor_of_current_transact() needs to be + /// called during the transaction that is used to produce the changeset of + /// the serialized transaction. + /// + /// \param changeset A changeset obtained from an aborted transaction on the + /// Realm file associated with this session. Use + /// sync::ClientHistory::get_sync_changeset() to obtain it. The transaction, + /// which is used to produce teh changeset, needs to be rolled back rather + /// than committed, because the decision of whether to accept the changes + /// need to be delegated to the server. Note that + /// sync::ClientHistory::get_sync_Changeset_of_current_transact() needs to + /// be called at the end of the transaction, that is used to produce the + /// changeset, but before the rollback operation. + void async_try_complete_serial_transact(UploadCursor upload_anchor, + SerialTransactChangeset changeset, + SerialTransactCompletionHandler); + + /// \brief Abort a serialized transaction. + /// + /// Must be called if async_try_complete_serial_transact() fails, i.e., if + /// it throws, or if async_try_complete_serial_transact() is not called at + /// all. Must not be called if async_try_complete_serial_transact() + /// succeeds, i.e., if it does not throw. + /// + /// Will resume upload process. + void abort_serial_transact() noexcept; + private: class Impl; Impl* m_impl = nullptr; @@ -1045,12 +1233,23 @@ enum class Client::Error { bad_file_ident = 120, ///< Bad file identifier (ALLOC) connect_timeout = 121, ///< Sync connection was not fully established in time bad_timestamp = 122, ///< Bad timestamp (PONG) + bad_protocol_from_server = 123, ///< Bad or missing protocol version information from server + client_too_old_for_server = 124, ///< Protocol version negotiation failed: Client is too old for server + client_too_new_for_server = 125, ///< Protocol version negotiation failed: Client is too new for server + protocol_mismatch = 126, ///< Protocol version negotiation failed: No version supported by both client and server + bad_state_message = 127, ///< Bad values in state message (STATE) + missing_protocol_feature = 128, ///< Requested feature missing in negotiated protocol version + bad_serial_transact_status = 129, ///< Bad status of serialized transaction (TRANSACT) + bad_object_id_substitutions = 130, ///< Bad encoded object identifier substitutions (TRANSACT) + http_tunnel_failed = 131, ///< Failed to establish HTTP tunnel with configured proxy }; const std::error_category& client_error_category() noexcept; std::error_code make_error_code(Client::Error) noexcept; +std::ostream& operator<<(std::ostream& os, Session::Config::ProxyConfig::Type); + } // namespace sync } // namespace realm diff --git a/Pods/Realm/include/core/realm/sync/fingerprint.hpp b/Pods/Realm/include/core/realm/sync/fingerprint.hpp new file mode 100644 index 0000000000..13b54ab35e --- /dev/null +++ b/Pods/Realm/include/core/realm/sync/fingerprint.hpp @@ -0,0 +1,53 @@ +/************************************************************************* + * + * REALM CONFIDENTIAL + * __________________ + * + * [2011] - [2018] Realm Inc + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Realm Incorporated and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to Realm Incorporated + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Realm Incorporated. + * + **************************************************************************/ +#ifndef REALM_ENCRYPT_FINGERPRINT_HPP +#define REALM_ENCRYPT_FINGERPRINT_HPP + +#include +#include + +#include + +namespace realm { +namespace encrypt { + +// calculate_fingerprint() calculates, and returns, a fingerprint of an +// encryption key. The input key can be util::none in order to calculate a +// fingerprint even in the case of unencrypted Realms. +// +// An intruder cannot recover an unknown encryption_key from the fingerprint, +// and it is safe to save the fingerprint in a file together with the encrypted +// Realms. +// +// calculate_fingerprint() can be considered opaque, but currently the +// fingerprint is a colon separated hex representation of the SHA-256 hash of +// the encryption key. +std::string calculate_fingerprint(const util::Optional> encryption_key); + +// verify_fingerprint() returns true if `fingerprint` was obtained previously +// from calculate_fingerprint() with `encryption_key` as argument. Otherwise, +// verify_fingerprint() returns false with extremely high probability. +bool verify_fingerprint(const std::string& fingerprint, + const util::Optional> encryption_key); + +} // namespace encrypt +} // namespace realm + +#endif // REALM_ENCRYPT_FINGERPRINT_HPP diff --git a/Pods/Realm/include/core/realm/sync/history.hpp b/Pods/Realm/include/core/realm/sync/history.hpp index 6c83c0f59e..de73d66801 100644 --- a/Pods/Realm/include/core/realm/sync/history.hpp +++ b/Pods/Realm/include/core/realm/sync/history.hpp @@ -18,17 +18,32 @@ * **************************************************************************/ +#include #include +#include #include +#include #include #include #include #include +#include +#include #ifndef REALM_SYNC_HISTORY_HPP #define REALM_SYNC_HISTORY_HPP + +namespace realm { +namespace _impl { + +struct ObjectIDHistoryState; + +} // namespace _impl +} // namespace realm + + namespace realm { namespace sync { @@ -45,6 +60,34 @@ struct VersionInfo { }; +struct SerialTransactSubstitutions { + struct Class { + InternString name; + std::size_t substitutions_end; + }; + std::vector classes; + std::vector> substitutions; +}; + + +timestamp_type generate_changeset_timestamp() noexcept; + +// FIXME: in C++17, switch to using std::timespec in place of last two +// arguments. +void map_changeset_timestamp(timestamp_type, std::time_t& seconds_since_epoch, + long& nanoseconds) noexcept; + + +/// Thrown if changeset cooking is not either consistently on or consistently +/// off during synchronization (ClientHistory::set_sync_progress() and +/// ClientHistory::integrate_server_changesets()). +class InconsistentUseOfCookedHistory; + +/// Thrown if a bad server version is passed to +/// ClientHistory::get_cooked_status(). +class BadCookedServerVersion; + + class ClientHistoryBase : public InstructionReplication { public: @@ -54,22 +97,6 @@ class ClientHistoryBase : /// as the client file identifier and the synchronization progress as they /// are stored in that snapshot. /// - /// Note: The value of `progress.upload.last_integrated_server_version` may - /// currently be wrong when the caller is the synchronization client - /// (`_impl::ClientImplBase`), in the sense that the server version number - /// may not actually be the version upon which the client version was based. - /// On the client, it must therefore only be used in a limited capacity, - /// namely to report download progress to the server. The number reflects a - /// lower bound on the server version that any changeset produced by the - /// client in the future can be based upon. The caller passes the returned - /// value back to find_uploadable_changesets() or set_sync_progress(), so if - /// the history implementation does not care about the value of - /// `progress.upload.last_integrated_server_version`, it is allowed to not - /// persist it. However, the implementation of find_uploadable_changesets() - /// must still be prepared for its value to be determined by an incoming - /// DOWNLOAD message, rather than being whatever was returned by - /// get_status(). - /// /// The returned current client version is the version produced by the last /// changeset in the history. The type of version returned here, is the one /// that identifies an entry in the sync history. Whether this is the same @@ -77,12 +104,12 @@ class ClientHistoryBase : /// implementation. /// /// The returned client file identifier is the one that was last stored by - /// set_client_file_ident(). If no identifier has been stored yet, the - /// `ident` field of \a client_file_ident is set to zero. + /// set_client_file_ident(), or `SaltedFileIdent{0, 0}` if + /// set_client_file_ident() has never been called. /// /// The returned SyncProgress is the one that was last stored by - /// set_sync_progress(), or {} if set_sync_progress() has never been called - /// for the associated Realm file. + /// set_sync_progress(), or `SyncProgress{}` if set_sync_progress() has + /// never been called. virtual void get_status(version_type& current_client_version, SaltedFileIdent& client_file_ident, SyncProgress& progress) const = 0; @@ -100,11 +127,17 @@ class ClientHistoryBase : /// identical identifiers for two client files if they are associated with /// different server Realms. /// + /// \param fix_up_object_ids The object ids that depend on client file ident + /// will be fixed in both state and history if this parameter is true. If + /// it is known that there are no objects to fix, it can be set to false to + /// achieve higher performance. + /// /// The client is required to obtain the file identifier before engaging in /// synchronization proper, and it must store the identifier and use it to /// reestablish the connection between the client file and the server file /// when engaging in future synchronization sessions. - virtual void set_client_file_ident(SaltedFileIdent client_file_ident) = 0; + virtual void set_client_file_ident(SaltedFileIdent client_file_ident, + bool fix_up_object_ids) = 0; /// Stores the SyncProgress progress in the associated Realm file in a way /// that makes it available via get_status() during future synchronization @@ -112,40 +145,13 @@ class ClientHistoryBase : /// /// See struct SyncProgress for a description of \param progress. /// - /// Note: The implementation is not obligated to store the value of - /// `progress.upload.last_integrated_server_version`, however, if the - /// implementation chooses to not store it, then its value will be - /// unreliable when passed to the implementation through functions such as - /// find_uploadable_changesets(). It may, or may not be the value last - /// returned for it by get_status(). + /// \throw InconsistentUseOfCookedHistory If a changeset cooker has been + /// attached to this history object, and the Realm file does not have a + /// cooked history, and a cooked history can no longer be added because some + /// synchronization has already happened. Or if no changeset cooker has been + /// attached, and the Realm file does have a cooked history. virtual void set_sync_progress(const SyncProgress& progress, VersionInfo&) = 0; -/* - /// Get the first history entry whose changeset produced a version that - /// succeeds `begin_version` and, and does not succeed `end_version`, whose - /// changeset was not produced by integration of a changeset received from - /// the server, and whose changeset was not empty. - /// - /// \param begin_version, end_version The range of versions to consider. If - /// `begin_version` is equal to `end_version`, this is the empty range. If - /// `begin_version` is zero, it means that everything preceding - /// `end_version` is to be considered, which is again the empty range if - /// `end_version` is also zero. Zero is a special value in that no changeset - /// produces that version. It is an error if `end_version` precedes - /// `begin_version`, or if `end_version` is zero and `begin_version` is not. - /// - /// \param buffer Owner of memory referenced by entry.changeset upon return. - /// - /// \return The version produced by the changeset of the located history - /// entry, or zero if no history entry exists matching the specified - /// criteria. - virtual version_type find_history_entry_for_upload(version_type begin_version, - version_type end_version, - HistoryEntry& entry, - std::unique_ptr& buffer) const = 0; -*/ - - struct UploadChangeset { timestamp_type origin_timestamp; file_ident_type origin_file_ident; @@ -181,10 +187,16 @@ class ClientHistoryBase : /// reflect a value of UploadChangeset::progress produced by an earlier /// invocation of find_uploadable_changesets(). /// + /// Found changesets are added to \a uploadable_changesets. + /// + /// \param locked_server_version will be set to the value that should be + /// used as `` in a DOWNLOAD message. + /// /// For changesets of local origin, UploadChangeset::origin_file_ident will /// be zero. - virtual std::vector find_uploadable_changesets(UploadCursor& upload_progress, - version_type end_version) const = 0; + virtual void find_uploadable_changesets(UploadCursor& upload_progress, version_type end_version, + std::vector& uploadable_changesets, + version_type& locked_server_version) const = 0; using RemoteChangeset = Transformer::RemoteChangeset; @@ -231,11 +243,18 @@ class ClientHistoryBase : /// \param transact_reporter An optional callback which will be called with the /// version immediately processing the sync transaction and that of the sync /// transaction. + /// + /// \throw InconsistentUseOfCookedHistory If a changeset cooker has been + /// attached to this history object, and the Realm file does not have a + /// cooked history, and a cooked history can no longer be added because some + /// synchronization has already happened. Or if no changeset cooker has been + /// attached, and the Realm file does have a cooked history. virtual bool integrate_server_changesets(const SyncProgress& progress, const RemoteChangeset* changesets, std::size_t num_changesets, VersionInfo& new_version, IntegrationError& integration_error, util::Logger&, - SyncTransactReporter* transact_reporter = nullptr) = 0; + SyncTransactReporter* transact_reporter = nullptr, + const SerialTransactSubstitutions* = nullptr) = 0; protected: ClientHistoryBase(const std::string& realm_path); @@ -261,52 +280,138 @@ class ClientHistory : public ClientHistoryBase { std::int_fast64_t intrachangeset_progress = 0; }; - /// Returns the persisted progress that was last stored by - /// set_cooked_progress(). + /// Get information about the current state of the cooked history including + /// the point of progress of its consumption. + /// + /// \param server_version The server version associated with the last cooked + /// changeset that should be skipped. See `/doc/cooked_history.md` for an + /// explanation of the rationale behind this. Specifying zero means that no + /// changesets should be skipped. It is an error to specify a nonzero server + /// version that is not the server version associated with any of of the + /// cooked changesets, or to specify a nonzero server version that precedes + /// the one, that is associated with the last cooked changeset that was + /// marked as consumed. Doing so, will cause BadCookedServerVersion to be + /// thrown. + /// + /// \param num_changesets Set to the total number of produced cooked + /// changesets over the lifetime of the Realm file to which this history + /// accessor object is attached. This is the number of previously consumed + /// changesets plus the number of unconsumed changesets remaining in the + /// Realm file. + /// + /// \param progress The point of progress of the consumption of the cooked + /// history. Initially, and until explicitly modified by + /// set_cooked_progress(), both `CookedProgress::changeset_index` and + /// `CookedProgress::intrachangeset_progress` are zero. If a nonzero value + /// was passed for \a server_version, \a progress will be transparently + /// adjusted to account for the skipped changesets. See also \a + /// num_skipped_changesets. If one or more changesets are skipped, + /// `CookedProgress::intrachangeset_progress` will be set to zero. + /// + /// \param num_skipped_changesets The number of skipped changesets. See also + /// \a server_version. + /// + /// \throw BadCookedServerVersion See \a server_version. + virtual void get_cooked_status(version_type server_version, std::int_fast64_t& num_changesets, + CookedProgress& progress, + std::int_fast64_t& num_skipped_changesets) const = 0; + + /// Fetch the cooked changeset at the specified index. + /// + /// Cooked changesets are made available in the order they are produced by + /// the changeset cooker (ChangesetCooker). + /// + /// Behaviour is undefined if the specified index is less than the index + /// (CookedProgress::changeset_index) returned by get_cooked_progress(), or + /// if it is greater than, or equal to the total number of cooked changesets + /// (as returned by get_num_cooked_changesets()). + /// + /// The callee must append the bytes of the located cooked changeset to the + /// specified buffer, which does not have to be empty initially. /// - /// Initially, until explicitly modified, both - /// `CookedProgress::changeset_index` and - /// `CookedProgress::intrachangeset_progress` are zero. - virtual CookedProgress get_cooked_progress() const = 0; + /// \param server_version Will be set to the version produced on the server + /// by an earlier form of the retreived changeset. If the cooked changeset + /// was produced (as output of cooker) before migration of the client-side + /// history compartment to schema version 2, then \a server_version will be + /// set to zero instead, because the real value is unkown. Zero is not a + /// possible value in any other case. + virtual void get_cooked_changeset(std::int_fast64_t index, + util::AppendBuffer&, + version_type& server_version) const = 0; /// Persistently stores the point of progress of the consumer of cooked /// changesets. /// - /// As well as allowing for later retrieval, the specification of the point - /// of progress of the consumer of cooked changesets also has the effect of - /// trimming obsolete cooked changesets from the Realm file. Indeed, if this - /// function is never called, but cooked changesets are continually being - /// produced, then the Realm file will grow without bounds. - /// - /// Behavior is undefined if the specified index - /// (CookedProgress::changeset_index) is lower than the index returned by - /// get_cooked_progress(). + /// The changeset index (CookedProgress::changeset_index) is the index (as + /// passed to get_cooked_changeset()) of the first unconsumed cooked + /// changset. Changesets at lower indexes will no longer be available. /// /// The intrachangeset progress field /// (CookedProgress::intrachangeset_progress) will be faithfully persisted, /// but will otherwise be treated as an opaque object by the history /// internals. - virtual void set_cooked_progress(CookedProgress) = 0; + /// + /// As well as allowing for later retrieval, the specification of the point + /// of progress of the consumer of cooked changesets also has the effect of + /// trimming obsolete cooked changesets from the Realm file (i.e., removal + /// of all changesets at indexes lower than + /// CookedProgress::intrachangeset_progress). Indeed, if this function is + /// never called, but cooked changesets are continually being produced, then + /// the Realm file will grow without bounds. + /// + /// It is an error if the specified index (CookedProgress::changeset_index) + /// is lower than the index returned by get_cooked_progress(), and if it is + /// higher that the value returned by get_num_cooked_changesets(). + /// + /// \return The snapshot number produced by the transaction performed + /// internally in set_cooked_progress(). This is also the client-side sync + /// version, and it should be passed to + /// sync::Session::nonsync_transact_notify() if a synchronization session is + /// in progress for the same file while set_cooked_progress() is + /// called. Doing so, ensures that the server will be notified about the + /// released server versions as soon as possible. + /// + /// \throw InconsistentUseOfCookedHistory If this file does not have a + /// cooked history and one can no longer be added because changesets of + /// remote origin has already been integrated. + virtual version_type set_cooked_progress(CookedProgress) = 0; + + /// \brief Get the number of cooked changesets so far produced for this + /// Realm. + /// + /// This is the same thing as is returned via \a num_changesets by + /// get_cooked_status(). + std::int_fast64_t get_num_cooked_changesets() const noexcept; + + /// \brief Returns the persisted progress that was last stored by + /// set_cooked_progress(). + /// + /// This is the same thing as is returned via \a progress by + /// get_cooked_status() when invoked with a server version of zero. + CookedProgress get_cooked_progress() const noexcept; - /// Get the number of cooked changesets so far produced for this Realm. This - /// is the number of cooked changesets that are currently in the Realm file - /// plus the number of cooked changesets that have been trimmed off so far. - virtual std::int_fast64_t get_num_cooked_changesets() const = 0; + /// Same as get_cooked_changeset(std::int_fast64_t, + /// util::AppendBuffer&, version_type&) but does not retreived the + /// server version. + void get_cooked_changeset(std::int_fast64_t index, util::AppendBuffer&) const; - /// Fetch the cooked changeset at the specified index. + /// Return an upload cursor as it would be when the uploading process + /// reaches the snapshot to which the current transaction is bound. /// - /// Cooked changesets are made available in the order they are produced by - /// the changeset cooker (ChangesetCooker). + /// **CAUTION:** Must be called only while a transaction (read or write) is + /// in progress via the SharedGroup object associated with this history + /// object. + virtual UploadCursor get_upload_anchor_of_current_transact() const = 0; + + /// Return the synchronization changeset of the current transaction as it + /// would be if that transaction was committed at this time. /// - /// Behaviour is undefined if the specified index is less than the index - /// (CookedProgress::changeset_index) returned by get_cooked_progress(), or - /// if it is greater than, or equal to the toal number of cooked changesets - /// (as returned by get_num_cooked_changesets()). + /// The returned memory reference may be invalidated by subsequent + /// operations on the Realm state. /// - /// The callee must append the bytes of the located cooked changeset to the - /// specified buffer, which does not have to be empty initially. - virtual void get_cooked_changeset(std::int_fast64_t index, - util::AppendBuffer&) const = 0; + /// **CAUTION:** Must be called only while a write transaction is in + /// progress via the SharedGroup object associated with this history object. + virtual util::StringView get_sync_changeset_of_current_transact() const noexcept = 0; protected: ClientHistory(const std::string& realm_path); @@ -385,16 +490,111 @@ std::unique_ptr make_client_history(const std::string& realm_path // Implementation -inline ClientHistoryBase::ClientHistoryBase(const std::string& realm_path): +inline timestamp_type generate_changeset_timestamp() noexcept +{ + namespace chrono = std::chrono; + // Unfortunately, C++11 does not specify what the epoch is for + // `chrono::system_clock` (or for any other clock). It is believed, however, + // that there is a de-facto standard, that the Epoch for + // `chrono::system_clock` is the Unix epoch, i.e., 1970-01-01T00:00:00Z. See + // http://stackoverflow.com/a/29800557/1698548. Additionally, it is assumed + // that leap seconds are not included in the value returned by + // time_since_epoch(), i.e., that it conforms to POSIX time. This is known + // to be true on Linux. + // + // FIXME: Investigate under which conditions OS X agrees with POSIX about + // not including leap seconds in the value returned by time_since_epoch(). + // + // FIXME: Investigate whether Microsoft Windows agrees with POSIX about + // about not including leap seconds in the value returned by + // time_since_epoch(). + auto time_since_epoch = chrono::system_clock::now().time_since_epoch(); + std::uint_fast64_t millis_since_epoch = + chrono::duration_cast(time_since_epoch).count(); + // `offset_in_millis` is the number of milliseconds between + // 1970-01-01T00:00:00Z and 2015-01-01T00:00:00Z not counting leap seconds. + std::uint_fast64_t offset_in_millis = 1420070400000ULL; + return timestamp_type(millis_since_epoch - offset_in_millis); +} + +inline void map_changeset_timestamp(timestamp_type timestamp, std::time_t& seconds_since_epoch, + long& nanoseconds) noexcept +{ + std::uint_fast64_t offset_in_millis = 1420070400000ULL; + std::uint_fast64_t millis_since_epoch = std::uint_fast64_t(offset_in_millis + timestamp); + seconds_since_epoch = std::time_t(millis_since_epoch / 1000); + nanoseconds = long(millis_since_epoch % 1000 * 1000000L); +} + +class InconsistentUseOfCookedHistory : public std::exception { +public: + InconsistentUseOfCookedHistory(const char* message) noexcept : + m_message{message} + { + } + const char* what() const noexcept override final + { + return m_message; + } +private: + const char* m_message; +}; + +class BadCookedServerVersion : public std::exception { +public: + BadCookedServerVersion(const char* message) noexcept : + m_message{message} + { + } + const char* what() const noexcept override final + { + return m_message; + } +private: + const char* m_message; +}; + +inline ClientHistoryBase::ClientHistoryBase(const std::string& realm_path) : InstructionReplication{realm_path} // Throws { } -inline ClientHistory::ClientHistory(const std::string& realm_path): +inline ClientHistory::ClientHistory(const std::string& realm_path) : ClientHistoryBase{realm_path} // Throws { } +inline std::int_fast64_t ClientHistory::get_num_cooked_changesets() const noexcept +{ + version_type server_version = 0; // Skip nothing + std::int_fast64_t num_changesets = 0; + ClientHistory::CookedProgress progress; + std::int_fast64_t num_skipped_changesets = 0; + get_cooked_status(server_version, num_changesets, progress, num_skipped_changesets); + REALM_ASSERT(progress.changeset_index <= num_changesets); + REALM_ASSERT(num_skipped_changesets == 0); + return num_changesets; +} + +inline auto ClientHistory::get_cooked_progress() const noexcept -> CookedProgress +{ + version_type server_version = 0; // Skip nothing + std::int_fast64_t num_changesets = 0; + ClientHistory::CookedProgress progress; + std::int_fast64_t num_skipped_changesets = 0; + get_cooked_status(server_version, num_changesets, progress, num_skipped_changesets); + REALM_ASSERT(progress.changeset_index <= num_changesets); + REALM_ASSERT(num_skipped_changesets == 0); + return progress; +} + +inline void ClientHistory::get_cooked_changeset(std::int_fast64_t index, + util::AppendBuffer& buffer) const +{ + version_type server_version; // Dummy + get_cooked_changeset(index, buffer, server_version); // Throws +} + } // namespace sync } // namespace realm diff --git a/Pods/Realm/include/core/realm/sync/instruction_applier.hpp b/Pods/Realm/include/core/realm/sync/instruction_applier.hpp index 5b1b36fdff..92bb5737a6 100644 --- a/Pods/Realm/include/core/realm/sync/instruction_applier.hpp +++ b/Pods/Realm/include/core/realm/sync/instruction_applier.hpp @@ -24,22 +24,23 @@ #include #include + namespace realm { namespace sync { struct Changeset; struct InstructionApplier { - explicit InstructionApplier(Group& group, TableInfoCache& table_info_cache) noexcept; + explicit InstructionApplier(Group&, TableInfoCache&) noexcept; /// Throws BadChangesetError if application fails due to a problem with the /// changeset. /// /// FIXME: Consider using std::error_code instead of throwing /// BadChangesetError. - void apply(const Changeset& log, util::Logger* logger); + void apply(const Changeset&, util::Logger*); - void begin_apply(const Changeset& log, util::Logger* logger) noexcept; + void begin_apply(const Changeset&, util::Logger*) noexcept; void end_apply() noexcept; protected: @@ -50,16 +51,19 @@ struct InstructionApplier { #undef REALM_DECLARE_INSTRUCTION_HANDLER friend struct Instruction; // to allow visitor - template static void apply(A& applier, const Changeset& log, util::Logger* logger); + template static void apply(A& applier, const Changeset&, util::Logger*); + + // Allows for in-place modification of changeset while applying it + template static void apply(A& applier, Changeset&, util::Logger*); + + TableRef table_for_class_name(StringData) const; // Throws + REALM_NORETURN void bad_transaction_log(const char*) const; Group& m_group; TableInfoCache& m_table_info_cache; -private: - const Changeset* m_log = nullptr; - util::Logger* m_logger = nullptr; + LinkViewRef m_selected_link_list; TableRef m_selected_table; TableRef m_selected_array; - LinkViewRef m_selected_link_list; TableRef m_link_target_table; template @@ -70,9 +74,9 @@ struct InstructionApplier { } } - void bad_transaction_log(const char*) const; // Throws - - TableRef table_for_class_name(StringData) const; // Throws +private: + const Changeset* m_log = nullptr; + util::Logger* m_logger = nullptr; }; @@ -103,10 +107,25 @@ inline void InstructionApplier::end_apply() noexcept } template -inline void InstructionApplier::apply(A& applier, const Changeset& log, util::Logger* logger) +inline void InstructionApplier::apply(A& applier, const Changeset& changeset, util::Logger* logger) +{ + applier.begin_apply(changeset, logger); + for (auto instr : changeset) { + if (!instr) + continue; + instr->visit(applier); // Throws +#if REALM_DEBUG + applier.m_table_info_cache.verify(); +#endif + } + applier.end_apply(); +} + +template +inline void InstructionApplier::apply(A& applier, Changeset& changeset, util::Logger* logger) { - applier.begin_apply(log, logger); - for (auto instr: log) { + applier.begin_apply(changeset, logger); + for (auto instr : changeset) { if (!instr) continue; instr->visit(applier); // Throws diff --git a/Pods/Realm/include/core/realm/sync/instruction_replication.hpp b/Pods/Realm/include/core/realm/sync/instruction_replication.hpp index 243bf21505..b66e3320b5 100644 --- a/Pods/Realm/include/core/realm/sync/instruction_replication.hpp +++ b/Pods/Realm/include/core/realm/sync/instruction_replication.hpp @@ -30,6 +30,12 @@ namespace sync { class InstructionReplication: public TrivialReplication, public ObjectIDProvider { public: + enum class TableBehavior { + Class, + Array, + Ignore + }; + explicit InstructionReplication(const std::string& realm_path); void set_short_circuit(bool) noexcept; bool is_short_circuited() const noexcept; @@ -40,6 +46,7 @@ class InstructionReplication: public TrivialReplication, public ObjectIDProvider virtual void reset(); ChangesetEncoder& get_instruction_encoder() noexcept; + const ChangesetEncoder& get_instruction_encoder() const noexcept; //@{ /// Generate instructions for Object Store tables. These must be called @@ -117,9 +124,15 @@ class InstructionReplication: public TrivialReplication, public ObjectIDProvider void nullify_link(const Table*, size_t col_ndx, size_t ndx) override; void link_list_nullify(const LinkView&, size_t ndx) override; + template + void emit(T instruction); + + TableBehavior select_table(const Table*); + const Table* selected_table() const noexcept; + protected: // Replication interface: - void do_initiate_transact(version_type current_version, bool history_updated) override; + void do_initiate_transact(TransactionType, version_type current_version) override; private: bool m_short_circuit = false; @@ -127,11 +140,6 @@ class InstructionReplication: public TrivialReplication, public ObjectIDProvider SharedGroup* m_sg = nullptr; std::unique_ptr m_cache; - enum class TableBehavior { - Class, - Array, - Ignore - }; // FIXME: The base class already caches this. ConstTableRef m_selected_table; @@ -144,9 +152,9 @@ class InstructionReplication: public TrivialReplication, public ObjectIDProvider std::string m_table_being_erased; util::Optional m_object_being_created; - void unsupported_instruction(); // Throws TransformError - TableBehavior select_table(const Table*); + REALM_NORETURN void unsupported_instruction(); // Throws TransformError TableBehavior select_table(const Descriptor&); + TableBehavior select_table_inner(const Table* table); bool select_link_list(const LinkView&); // returns true if table behavior != ignored TableBehavior get_table_behavior(const Table*) const; @@ -159,8 +167,6 @@ class InstructionReplication: public TrivialReplication, public ObjectIDProvider _impl::Instruction variant); template auto as_payload(T value); - template - void emit(T instruction); }; inline void InstructionReplication::set_short_circuit(bool b) noexcept @@ -178,6 +184,31 @@ inline ChangesetEncoder& InstructionReplication::get_instruction_encoder() noexc return m_encoder; } +inline const ChangesetEncoder& InstructionReplication::get_instruction_encoder() const noexcept +{ + return m_encoder; +} + +template +inline void InstructionReplication::emit(T instruction) +{ + REALM_ASSERT(!m_short_circuit); + m_encoder(instruction); +} + +inline auto InstructionReplication::select_table(const Table* table) -> TableBehavior +{ + if (m_selected_table == table) { + return m_selected_table_behavior; + } + return select_table_inner(table); +} + +inline const Table* InstructionReplication::selected_table() const noexcept +{ + return m_selected_table.get(); +} + // Temporarily short-circuit replication class TempShortCircuitReplication { public: @@ -191,6 +222,11 @@ class TempShortCircuitReplication { { m_bridge.set_short_circuit(m_was_short_circuited); } + + bool was_short_circuited() const noexcept + { + return m_was_short_circuited; + } private: InstructionReplication& m_bridge; bool m_was_short_circuited; diff --git a/Pods/Realm/include/core/realm/sync/instructions.hpp b/Pods/Realm/include/core/realm/sync/instructions.hpp index 93e7aa2458..4c8051a01e 100644 --- a/Pods/Realm/include/core/realm/sync/instructions.hpp +++ b/Pods/Realm/include/core/realm/sync/instructions.hpp @@ -95,32 +95,28 @@ struct Instruction { template struct GetInstructionType; Instruction() {} - template - Instruction(T instr); + template Instruction(T instr); static const size_t max_instruction_size = 64; - std::aligned_storage_t m_storage; + std::aligned_storage_t m_storage; Type type; - template - auto visit(F&& lambda); - template - auto visit(F&& lambda) const; + template auto visit(F&& lambda); + template auto visit(F&& lambda) const; - template - T& get_as() + template T& get_as() { REALM_ASSERT(type == GetInstructionType::value); return *reinterpret_cast(&m_storage); } - template - const T& get_as() const + template const T& get_as() const { return const_cast(this)->template get_as(); } bool operator==(const Instruction& other) const noexcept; + bool operator!=(const Instruction& other) const noexcept { return !(*this == other); @@ -142,11 +138,14 @@ struct StringBufferRange { struct InternString { static const InternString npos; - explicit constexpr InternString(uint32_t v = uint32_t(-1)): value(v) {} + explicit constexpr InternString(uint32_t v = uint32_t(-1)) noexcept : value(v) {} uint32_t value; bool operator==(const InternString& other) const noexcept { return value == other.value; } + bool operator<(const InternString& other) const noexcept { return value < other.value; } + + explicit operator bool() const noexcept { return (value != npos.value); } }; struct Instruction::Payload { @@ -176,12 +175,15 @@ struct Instruction::Payload { explicit Payload(int64_t value) noexcept: type(type_Int) { data.integer = value; } explicit Payload(float value) noexcept: type(type_Float) { data.fnum = value; } explicit Payload(double value) noexcept: type(type_Double) { data.dnum = value; } - explicit Payload(Timestamp value) noexcept: type(type_Timestamp) { data.timestamp = value; } explicit Payload(Link value) noexcept: type(type_Link) { data.link = value; } explicit Payload(StringBufferRange value) noexcept: type(type_String) { data.str = value; } explicit Payload(realm::util::None, bool implicit_null = false) noexcept { type = (implicit_null ? -2 : -1); } + explicit Payload(Timestamp value) noexcept: type(value.is_null() ? -1 : type_Timestamp) + { + data.timestamp = value; + } Payload(const Payload&) noexcept = default; Payload& operator=(const Payload&) noexcept = default; @@ -346,29 +348,14 @@ struct InstructionHandler { /// Implementation: -#if !defined(__GNUC__) || defined(__clang__) || __GNUC__ > 4 // GCC 4.x does not support std::is_trivially_copyable -#define REALM_CHECK_TRIVIALLY_COPYABLE(X) static_assert(std::is_trivially_copyable::value, #X" Instructions must be trivially copyable."); - REALM_FOR_EACH_INSTRUCTION_TYPE(REALM_CHECK_TRIVIALLY_COPYABLE) -#undef REALM_CHECK_TRIVIALLY_COPYABLE -#endif // __GNUC__ - -#ifdef _WIN32 // FIXME: Fails in VS. -#define REALM_CHECK_INSTRUCTION_SIZE(X) -#else -#define REALM_CHECK_INSTRUCTION_SIZE(X) static_assert(sizeof(Instruction::X) <= Instruction::max_instruction_size, #X" Instruction too big."); - REALM_FOR_EACH_INSTRUCTION_TYPE(REALM_CHECK_INSTRUCTION_SIZE) -#undef REALM_CHECK_INSTRUCTION_SIZE -#endif - #define REALM_DEFINE_INSTRUCTION_GET_TYPE(X) \ template <> struct Instruction::GetType { using Type = Instruction::X; }; \ template <> struct Instruction::GetInstructionType { static const Instruction::Type value = Instruction::Type::X; }; REALM_FOR_EACH_INSTRUCTION_TYPE(REALM_DEFINE_INSTRUCTION_GET_TYPE) #undef REALM_DEFINE_INSTRUCTION_GET_TYPE - template -Instruction::Instruction(T instr): type(GetInstructionType::value) +Instruction::Instruction(T instr) : type(GetInstructionType::value) { new(&m_storage) T(std::move(instr)); } @@ -378,7 +365,21 @@ inline auto Instruction::visit(F&& lambda) { switch (type) { #define REALM_VISIT_INSTRUCTION(X) \ - case Type::X: return lambda(get_as()); + case Type::X: \ + return lambda(get_as()); + REALM_FOR_EACH_INSTRUCTION_TYPE(REALM_VISIT_INSTRUCTION) +#undef REALM_VISIT_INSTRUCTION + } + REALM_UNREACHABLE(); +} + +template +inline auto Instruction::visit(F&& lambda) const +{ + switch (type) { +#define REALM_VISIT_INSTRUCTION(X) \ + case Type::X: \ + return lambda(get_as()); REALM_FOR_EACH_INSTRUCTION_TYPE(REALM_VISIT_INSTRUCTION) #undef REALM_VISIT_INSTRUCTION } @@ -402,10 +403,14 @@ inline bool Instruction::operator==(const Instruction& other) const noexcept return std::memcmp(&m_storage, &other.m_storage, valid_size) == 0; } -template -auto Instruction::visit(F&& lambda) const +inline bool Instruction::Payload::is_null() const +{ + return type < 0; +} + +inline bool Instruction::Payload::is_implicit_null() const { - return const_cast(this)->visit(std::forward(lambda)); + return type == -2; } std::ostream& operator<<(std::ostream&, Instruction::Type); diff --git a/Pods/Realm/include/core/realm/sync/object.hpp b/Pods/Realm/include/core/realm/sync/object.hpp index 27746487b8..8529fa0445 100644 --- a/Pods/Realm/include/core/realm/sync/object.hpp +++ b/Pods/Realm/include/core/realm/sync/object.hpp @@ -41,8 +41,8 @@ namespace sync { class SyncHistory; -static const char object_id_column_name[] = "!OID"; -static const char array_value_column_name[] = "!ARRAY_VALUE"; // FIXME call Jorgen +extern const char object_id_column_name[]; // "!OID" +extern const char array_value_column_name[]; // "!ARRAY_VALUE" struct TableInfoCache; @@ -113,10 +113,10 @@ void erase_table(Group& g, TableInfoCache& table_info_cache, TableRef); /// Create an array column with the specified element type. /// /// The result will be a column of type type_Table with one subcolumn named -/// "!ARRAY_VALUE" of the specified element type. +/// "!ARRAY_VALUE" of the specified element type and nullability. /// /// Return the column index of the inserted array column. -size_t add_array_column(Table&, DataType element_type, StringData column_name); +size_t add_array_column(Table&, DataType element_type, StringData column_name, bool is_nullable = false); //@{ diff --git a/Pods/Realm/include/core/realm/sync/object_id.hpp b/Pods/Realm/include/core/realm/sync/object_id.hpp index 181542b1ae..e3e96e0b2d 100644 --- a/Pods/Realm/include/core/realm/sync/object_id.hpp +++ b/Pods/Realm/include/core/realm/sync/object_id.hpp @@ -46,12 +46,13 @@ class Group; namespace sync { -/// ObjectIDs are globally unique, and up to 128 bits wide. They are represented -/// as two 64-bit integers, each of which may frequently be small, for best -/// on-wire compressibility. +/// ObjectIDs are globally unique for a given class (table), and up to 128 bits +/// wide. They are represented as two 64-bit integers, each of which may +/// frequently be small, for best on-wire compressibility. struct ObjectID { constexpr ObjectID(uint64_t hi, uint64_t lo); static ObjectID from_string(StringData); + static bool from_string(StringData, ObjectID&) noexcept; // FIXME: Remove "empty" ObjectIDs, wrap in Optional instead. constexpr ObjectID(realm::util::None = realm::util::none); @@ -67,6 +68,8 @@ struct ObjectID { constexpr bool operator==(const ObjectID& other) const; constexpr bool operator!=(const ObjectID& other) const; + explicit constexpr operator bool() const noexcept; + private: uint64_t m_lo; uint64_t m_hi; @@ -139,6 +142,7 @@ class ObjectIDSet { void insert(StringData table, ObjectID object_id); void erase(StringData table, ObjectID object_id); bool contains(StringData table, ObjectID object_id) const noexcept; + bool empty() const noexcept; // A map from table name to a set of object ids. util::metered::map> m_objects; @@ -153,6 +157,7 @@ class FieldSet { void erase(StringData table, StringData column, ObjectID object_id); bool contains(StringData table, ObjectID object_id) const noexcept; bool contains(StringData table, StringData column, ObjectID object_id) const noexcept; + bool empty() const noexcept; // A map from table name to a map from column name to a set of // object ids. @@ -171,14 +176,16 @@ struct GlobalID { bool operator<(const GlobalID& other) const; }; -/// Implementation: -constexpr ObjectID::ObjectID(uint64_t hi, uint64_t lo): m_lo(lo), m_hi(hi) + +/// Implementation + +constexpr ObjectID::ObjectID(uint64_t hi, uint64_t lo) : m_lo(lo), m_hi(hi) { } -constexpr ObjectID::ObjectID(realm::util::None): m_lo(-1), m_hi(-1) +constexpr ObjectID::ObjectID(realm::util::None) : m_lo(-1), m_hi(-1) { } @@ -197,6 +204,11 @@ constexpr bool ObjectID::operator!=(const ObjectID& other) const return !(*this == other); } +constexpr ObjectID::operator bool() const noexcept +{ + return (*this != ObjectID{}); +} + inline bool GlobalID::operator==(const GlobalID& other) const { return object_id == other.object_id && table_name == other.table_name; @@ -216,6 +228,7 @@ inline bool GlobalID::operator<(const GlobalID& other) const std::ostream& operator<<(std::ostream&, const realm::sync::ObjectID&); +std::istream& operator>>(std::istream&, realm::sync::ObjectID&); inline ObjectIDProvider::LocalObjectID ObjectIDProvider::get_optimistic_local_id_hashed(ObjectID global_id) @@ -270,6 +283,16 @@ ObjectIDProvider::local_to_global_object_id_squeezed(LocalObjectID squeezed) return ObjectID{hi, lo}; } +inline bool ObjectIDSet::empty() const noexcept +{ + return m_objects.empty(); +} + +inline bool FieldSet::empty() const noexcept +{ + return m_fields.empty(); +} + } // namespace sync } // namespace realm diff --git a/Pods/Realm/include/core/realm/sync/permissions.hpp b/Pods/Realm/include/core/realm/sync/permissions.hpp index e6fd2d9cd1..073f2d63ee 100644 --- a/Pods/Realm/include/core/realm/sync/permissions.hpp +++ b/Pods/Realm/include/core/realm/sync/permissions.hpp @@ -84,10 +84,9 @@ void set_up_basic_permissions(Group& group, TableInfoCache& table_info_cache, bo // Convenience function that creates a new TableInfoCache. void set_up_basic_permissions(Group& group, bool permissive = true); -void set_up_basic_permissions_for_class(Group&, StringData class_name, bool permissive = true); - /// Set up some basic permissions for the class. The default is to set up some /// very permissive default, where "everyone" can do everything in the class. +void set_up_basic_permissions_for_class(Group&, StringData class_name, bool permissive = true); // void set_up_basic_default_permissions_for_class(Group&, TableRef klass, bool permissive = true); /// Return the index of the ACL in the class, if one exists. If no ACL column is @@ -102,6 +101,32 @@ bool permissions_schema_exist(const Group&); bool user_exist(const Group&, StringData user_id); //@} + +/// Perform a query as user \a user_id, returning only the results that the +/// user has access to read. If the user is an admin, there is no need to call +/// this function, since admins can always read everything. +/// +/// If the target table of the query does not have object-level permissions, +/// the query results will be returned without any additional filtering. +/// +/// If the target table of the query has object-level permissions, but the +/// permissions schema of this Realm is invalid, an exception of type +/// `InvalidPermissionsSchema` is thrown. +/// +/// LIMIT and DISTINCT will be applied *after* permission filters. +/// +/// The resulting TableView can be used like any other query result. +/// +/// Note: Class-level and Realm-level permissions are not taken into account in +/// the resulting TableView, since there is no way to represent this in the +/// query engine. +ConstTableView query_with_permissions(Query query, StringData user_id, + const DescriptorOrdering* ordering = nullptr); + +struct InvalidPermissionsSchema : util::runtime_error { + using util::runtime_error::runtime_error; +}; + //@{ /// Convenience function to modify permission data. /// @@ -372,6 +397,8 @@ struct PermissionCorrections { // Tables that were illegally removed by the client. TableSet recreate_tables; + + bool empty() const noexcept; }; // Function for printing out a permission correction object. Useful for debugging purposes. @@ -401,6 +428,17 @@ struct InstructionApplierWithPermissionCheck { std::unique_ptr m_impl; }; + +// Implementation: + +inline bool PermissionCorrections::empty() const noexcept +{ + return recreate_objects.empty() && erase_objects.empty() + && reset_fields.empty() && erase_columns.empty() + && recreate_columns.empty() && erase_tables.empty() + && recreate_tables.empty(); +} + } // namespace sync } // namespace realm diff --git a/Pods/Realm/include/core/realm/sync/protocol.hpp b/Pods/Realm/include/core/realm/sync/protocol.hpp index 004acd03d3..0e69115170 100644 --- a/Pods/Realm/include/core/realm/sync/protocol.hpp +++ b/Pods/Realm/include/core/realm/sync/protocol.hpp @@ -121,10 +121,71 @@ namespace sync { // // 25 Include "last server version" in the UPLOAD message for history trimming // on the server. - +// +// 26 Four new protocol error codes, 217, 218, 219, and 220. +// +// The downloadable_bytes field in the DOWNLOAD message denotes the byte +// size of the changesets following those in the DOWNLOAD +// message. Previously, downloadable_bytes denoted the total byte size of +// the entire history. +// +// Introduction of protocol version flexibility on client side (strictly +// speaking, this is a change that transcends the sync protocol). +// +// 27 STATE_REQUEST, STATE, CLIENT_VERSION_REQUEST and CLIENT_VERSION messages +// introduced. These messages are used for client reset and async open. +// +// 28 Introduction of TRANSACT message (serialized transactions). New session +// level error code 221 "Serialized transaction before upload completion". +// +// Also added new parameters ``, ``, ``, and `` to STATE_REQUEST message. +// +// 29 Addition of `` and `` +// to the UPLOAD message. Together, these constitute an upload cursor that +// marks the reached position in the client-side history of the uploading +// process. +// +// Removal of ``, and addition of ``. `` was replaced in part by `` as described above, and in part by the new ``. The purpose of `` is to allow +// the client to lock parts of the server-side history that precede +// ``. It is intended to be used in the future in +// conjunction with the cooked history. +// constexpr int get_current_protocol_version() noexcept { - return 25; + return 29; +} + + +/// Supported protocol envelopes: +/// +/// Alternative (*) +/// Name Envelope URL scheme Default port default port +/// ------------------------------------------------------------------------ +/// realm WebSocket realm: 7800 80 +/// realms WebSocket + SSL realms: 7801 443 +/// ws WebSocket ws: 80 +/// wss WebSocket + SSL wss: 443 +/// +/// *) When Client::Config::enable_default_port_hack is true +/// +enum class ProtocolEnvelope { realm, realms, ws, wss }; + +inline bool is_ssl(ProtocolEnvelope protocol) noexcept +{ + switch (protocol) { + case ProtocolEnvelope::realm: + case ProtocolEnvelope::ws: + break; + case ProtocolEnvelope::realms: + case ProtocolEnvelope::wss: + return true; + } + return false; } @@ -175,6 +236,19 @@ struct DownloadCursor { version_type last_integrated_client_version; }; +/// Checks that `dc.last_integrated_client_version` is zero if +/// `dc.server_version` is zero. +bool is_consistent(DownloadCursor dc) noexcept; + +/// Checks that `a.last_integrated_client_version` and +/// `b.last_integrated_client_version` are equal, if `a.server_version` and +/// `b.server_version` are equal. Otherwise checks that +/// `a.last_integrated_client_version` is less than, or equal to +/// `b.last_integrated_client_version`, if `a.server_version` is less than +/// `b.server_version`. Otherwise checks that `a.last_integrated_client_version` +/// is greater than, or equal to `b.last_integrated_client_version`. +bool are_mutually_consistent(DownloadCursor a, DownloadCursor b) noexcept; + /// \brief The server's reference to a position in the client-side history. /// @@ -194,17 +268,53 @@ struct UploadCursor { version_type last_integrated_server_version; }; +/// Checks that `uc.last_integrated_server_version` is zero if +/// `uc.client_version` is zero. +bool is_consistent(UploadCursor uc) noexcept; + +/// Checks that `a.last_integrated_server_version` and +/// `b.last_integrated_server_version` are equal, if `a.client_version` and +/// `b.client_version` are equal. Otherwise checks that +/// `a.last_integrated_server_version` is less than, or equal to +/// `b.last_integrated_server_version`, if `a.client_version` is less than +/// `b.client_version`. Otherwise checks that `a.last_integrated_server_version` +/// is greater than, or equal to `b.last_integrated_server_version`. +bool are_mutually_consistent(UploadCursor a, UploadCursor b) noexcept; + /// A client's record of the current point of progress of the synchronization /// process. The client must store this persistently in the local Realm file. struct SyncProgress { - SaltedVersion latest_server_version{0, 0}; - DownloadCursor download{0, 0}; - UploadCursor upload{0, 0}; + /// The last server version that the client has heard about. + SaltedVersion latest_server_version = {0, 0}; + + /// The last server version integrated by the client. + DownloadCursor download = {0, 0}; + + /// The last client version integrated by the server. + UploadCursor upload = {0, 0}; + std::int_fast64_t downloadable_bytes = 0; }; +/// An indication of the final status of an attempt at performing a serialized +/// transaction. +enum class SerialTransactStatus { + /// The transaction was accepted and successful. + accepted = 1, + + /// The transaction was rejected because the servers history contained + /// causally unrelated changes. I.e., the requesting client lost a race to + /// be served first. The client should try again. + rejected = 2, + + /// The server did not support serialized transactions at all, or did not + /// support it on the targeted Realm in particular. + not_supported = 3, +}; + + /// \brief Protocol errors discovered by the server, and reported to the client /// by way of ERROR messages. @@ -221,7 +331,7 @@ enum class ProtocolError { unknown_message = 102, // Unknown type of input message bad_syntax = 103, // Bad syntax in input message head limits_exceeded = 104, // Limits exceeded in input message - wrong_protocol_version = 105, // Wrong protocol version (CLIENT) + wrong_protocol_version = 105, // Wrong protocol version (CLIENT) (obsolete) bad_session_ident = 106, // Bad session identifier in input message reuse_of_session_ident = 107, // Overlapping reuse of session identifier (BIND) bound_in_other_session = 108, // Client file bound in other session (IDENT) @@ -238,18 +348,23 @@ enum class ProtocolError { bad_authentication = 203, // Bad user authentication (BIND, REFRESH) illegal_realm_path = 204, // Illegal Realm path (BIND) no_such_realm = 205, // No such Realm (BIND) - permission_denied = 206, // Permission denied (BIND, REFRESH) + permission_denied = 206, // Permission denied (STATE_REQUEST, BIND, REFRESH) bad_server_file_ident = 207, // Bad server file identifier (IDENT) (obsolete!) bad_client_file_ident = 208, // Bad client file identifier (IDENT) - bad_server_version = 209, // Bad server version (IDENT, UPLOAD) + bad_server_version = 209, // Bad server version (IDENT, UPLOAD, TRANSACT) bad_client_version = 210, // Bad client version (IDENT, UPLOAD) diverging_histories = 211, // Diverging histories (IDENT) bad_changeset = 212, // Bad changeset (UPLOAD) superseded = 213, // Superseded by new session for same client-side file (deprecated) disabled_session = 213, // Alias for `superseded` (deprecated) - partial_sync_disabled = 214, // Partial sync disabled (BIND) + partial_sync_disabled = 214, // Partial sync disabled (BIND, STATE_REQUEST) unsupported_session_feature = 215, // Unsupported session-level feature bad_origin_file_ident = 216, // Bad origin file identifier (UPLOAD) + bad_client_file = 217, // Synchronization no longer possible for client-side file + server_file_deleted = 218, // Server file was deleted while session was bound to it + client_file_blacklisted = 219, // Client file has been blacklisted (IDENT) + user_blacklisted = 220, // User has been blacklisted (BIND) + transact_before_upload = 221, // Serialized transaction before upload completion }; inline constexpr bool is_session_level_error(ProtocolError error) @@ -279,6 +394,40 @@ template<> struct is_error_code_enum { namespace realm { namespace sync { + + + + +// Implementation + +inline bool is_consistent(DownloadCursor dc) noexcept +{ + return (dc.server_version != 0 || dc.last_integrated_client_version == 0); +} + +inline bool are_mutually_consistent(DownloadCursor a, DownloadCursor b) noexcept +{ + if (a.server_version < b.server_version) + return (a.last_integrated_client_version <= b.last_integrated_client_version); + if (a.server_version > b.server_version) + return (a.last_integrated_client_version >= b.last_integrated_client_version); + return (a.last_integrated_client_version == b.last_integrated_client_version); +} + +inline bool is_consistent(UploadCursor uc) noexcept +{ + return (uc.client_version != 0 || uc.last_integrated_server_version == 0); +} + +inline bool are_mutually_consistent(UploadCursor a, UploadCursor b) noexcept +{ + if (a.client_version < b.client_version) + return (a.last_integrated_server_version <= b.last_integrated_server_version); + if (a.client_version > b.client_version) + return (a.last_integrated_server_version >= b.last_integrated_server_version); + return (a.last_integrated_server_version == b.last_integrated_server_version); +} + } // namespace sync } // namespace realm diff --git a/Pods/Realm/include/core/realm/sync/transform.hpp b/Pods/Realm/include/core/realm/sync/transform.hpp index 29e4f63a77..1f74fa6fe7 100644 --- a/Pods/Realm/include/core/realm/sync/transform.hpp +++ b/Pods/Realm/include/core/realm/sync/transform.hpp @@ -245,7 +245,7 @@ class Transformer::RemoteChangeset { /// If the changeset was compacted during download, the size of the original /// changeset. - size_t original_changeset_size = 0; + std::size_t original_changeset_size = 0; RemoteChangeset() {} RemoteChangeset(version_type rv, version_type lv, ChunkedBinaryData d, timestamp_type ot, diff --git a/Pods/Realm/include/core/realm/sync/version.hpp b/Pods/Realm/include/core/realm/sync/version.hpp index b39a09eb1d..0def1b0458 100644 --- a/Pods/Realm/include/core/realm/sync/version.hpp +++ b/Pods/Realm/include/core/realm/sync/version.hpp @@ -22,9 +22,9 @@ #include -#define REALM_SYNC_VER_MAJOR 3 -#define REALM_SYNC_VER_MINOR 13 -#define REALM_SYNC_VER_PATCH 3 +#define REALM_SYNC_VER_MAJOR 4 +#define REALM_SYNC_VER_MINOR 7 +#define REALM_SYNC_VER_PATCH 11 #define REALM_SYNC_PRODUCT_NAME "realm-sync" #define REALM_SYNC_VER_STRING REALM_QUOTE(REALM_SYNC_VER_MAJOR) "." \ diff --git a/Pods/Realm/include/core/realm/table_view.hpp b/Pods/Realm/include/core/realm/table_view.hpp index bfc437686f..3989da00b3 100644 --- a/Pods/Realm/include/core/realm/table_view.hpp +++ b/Pods/Realm/include/core/realm/table_view.hpp @@ -258,7 +258,7 @@ class TableViewBase : public RowIndexes { size_t find_by_source_ndx(size_t source_ndx) const noexcept; // Conversion - void to_json(std::ostream&) const; + void to_json(std::ostream&, size_t link_depth = 0, std::map* renames = nullptr) const; void to_string(std::ostream&, size_t limit = 500) const; void row_to_string(size_t row_ndx, std::ostream&) const; @@ -301,6 +301,8 @@ class TableViewBase : public RowIndexes { void distinct(size_t column); void distinct(DistinctDescriptor columns); void limit(LimitDescriptor limit); + void include(IncludeDescriptor include_paths); + IncludeDescriptor get_include_descriptors(); // Replace the order of sort and distinct operations, bypassing manually // calling sort and distinct. This is a convenience method for bindings. diff --git a/Pods/Realm/include/core/realm/timestamp.hpp b/Pods/Realm/include/core/realm/timestamp.hpp index 1e847e4698..21082458da 100644 --- a/Pods/Realm/include/core/realm/timestamp.hpp +++ b/Pods/Realm/include/core/realm/timestamp.hpp @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -76,6 +77,14 @@ class Timestamp { : m_is_null(true) { } + template + Timestamp(std::chrono::time_point tp) + : m_is_null(false) + { + int64_t native_nano = std::chrono::duration_cast(tp.time_since_epoch()).count(); + m_seconds = native_nano / nanoseconds_per_second; + m_nanoseconds = static_cast(native_nano % nanoseconds_per_second); + } Timestamp() : Timestamp(null{}) { @@ -98,6 +107,17 @@ class Timestamp { return m_nanoseconds; } + template + std::chrono::time_point get_time_point() + { + REALM_ASSERT(!m_is_null); + + int64_t native_nano = m_seconds * nanoseconds_per_second + m_nanoseconds; + auto duration = std::chrono::duration_cast(std::chrono::duration{native_nano}); + + return std::chrono::time_point(duration); + } + // Note that only == and != operators work if one of the Timestamps are null! Else use realm::Greater, // realm::Less, etc, instead. This is in order to collect all treatment of null behaviour in a single place for all // types (query_conditions.hpp) to ensure that all types sort and compare null vs. non-null in the same manner, diff --git a/Pods/Realm/include/core/realm/util/aes_cryptor.hpp b/Pods/Realm/include/core/realm/util/aes_cryptor.hpp index 86adb96c97..23720b180d 100644 --- a/Pods/Realm/include/core/realm/util/aes_cryptor.hpp +++ b/Pods/Realm/include/core/realm/util/aes_cryptor.hpp @@ -33,8 +33,8 @@ #include #pragma comment(lib, "bcrypt.lib") #else -#include #include +#include #endif namespace realm { @@ -62,8 +62,8 @@ class AESCryptor { mode_Encrypt = 0, mode_Decrypt = 1 #else - mode_Encrypt = AES_ENCRYPT, - mode_Decrypt = AES_DECRYPT + mode_Encrypt = 1, + mode_Decrypt = 0 #endif }; @@ -73,8 +73,8 @@ class AESCryptor { #elif defined(_WIN32) BCRYPT_KEY_HANDLE m_aes_key_handle; #else - AES_KEY m_ectx; - AES_KEY m_dctx; + uint8_t m_aesKey[32]; + EVP_CIPHER_CTX* m_ctx; #endif uint8_t m_hmacKey[32]; @@ -86,12 +86,24 @@ class AESCryptor { bool check_hmac(const void* data, size_t len, const uint8_t* hmac) const; void crypt(EncryptionMode mode, off_t pos, char* dst, const char* src, const char* stored_iv) noexcept; iv_table& get_iv_table(FileDesc fd, off_t data_pos) noexcept; + void handle_error(); +}; + +struct ReaderInfo { + const void* reader_ID; + uint64_t version; }; struct SharedFileInfo { FileDesc fd; AESCryptor cryptor; std::vector mappings; + uint64_t last_scanned_version = 0; + uint64_t current_version = 0; + size_t num_decrypted_pages = 0; + size_t num_reclaimed_pages = 0; + size_t progress_index = 0; + std::vector readers; SharedFileInfo(const uint8_t* key, FileDesc file_descriptor); }; diff --git a/Pods/Realm/include/core/realm/util/allocation_metrics.hpp b/Pods/Realm/include/core/realm/util/allocation_metrics.hpp index acf8a38b1d..10176e757c 100644 --- a/Pods/Realm/include/core/realm/util/allocation_metrics.hpp +++ b/Pods/Realm/include/core/realm/util/allocation_metrics.hpp @@ -21,38 +21,80 @@ #define REALM_UTIL_ALLOCATION_METRICS_HPP #include +#include #include namespace realm { namespace util { -class AllocationMetric : public AllocatorBase { -public: - /// Warning: Instances of AllocationMetric must be statically - /// allocated. When an instance has been initialized, it must not be - /// destroyed until the program terminates. This is to ensure that - /// iterating over existing components is thread-safe and lock-free. - explicit AllocationMetric(const char* name) noexcept; +/// Designate a name to be used in heap allocation metrics. +/// +/// An instance can be used with `AllocationMetricsContext::get_metric()` to +/// obtain an instance of `MeteredAllocator` that counts +/// allocations/deallocations towards this name, within that context. +/// +/// Instances of `AllocationMetricName` should be statically allocated. When an +/// instance has been initialized, it must not be destroyed until the program +/// terminates. This is to ensure that iterating over existing names is +/// thread-safe and lock-free. +/// +/// Similarly, when an instance of `AllocationMetricsContext` has been +/// allocated, no further instances of AllocationMetricName must be +/// instantiated. +struct AllocationMetricName { + explicit AllocationMetricName(const char* name) noexcept; - /// Return the name of this metric. + /// Get the string name. /// /// This method is thread-safe. const char* name() const noexcept; - /// Get the first component in the list of components. This method is - /// thread-safe. - static const AllocationMetric* get_top() noexcept; - static const AllocationMetric* find(const char* name) noexcept; - static const AllocationMetric* unknown() noexcept; + /// Get the index of this metric. The index corresponds to an allocator + /// inside the current instance of AllocatorMetricTenant. + /// + /// This method is thread-safe. + size_t index() const noexcept; - /// Get the next component in the list. This method is thread-safe. - const AllocationMetric* next() const noexcept; + /// Get the next name. The names are returned in no particular order. + /// + /// This method is thread-safe. + const AllocationMetricName* next() const noexcept; - /// Return the currently allocated number of bytes. + /// Get the first name in the internal list of names, for the purpose + /// of iterating over all names in the program. /// /// This method is thread-safe. - std::size_t get_allocated_bytes() const noexcept; + static const AllocationMetricName* get_top() noexcept; + static const AllocationMetricName* find(const char* name) noexcept; +private: + const char* m_name; + size_t m_index; // Index into `AllocationMetricsContext::m_metrics`. + + // This is used to iterate over all existing components. Instances of + // AllocationMetricName are expected to be statically allocated. + const AllocationMetricName* m_next = nullptr; +}; + + +/// A heap memory allocator that keeps track of how much was +/// allocated/deallocated throughout its lifetime. +/// +/// Memory is allocated with `DefaultAllocator`. +/// +/// All methods on instances of this class are thread-safe. +class MeteredAllocator final : public AllocatorBase { +public: + MeteredAllocator() noexcept; + + static MeteredAllocator& unknown() noexcept; + + /// Return the currently allocated number of bytes. + /// + /// This method is thread-safe, but may temporarily return slightly + /// inaccurate results if allocations/deallocations are happening while it + /// is being called. + std::size_t get_currently_allocated_bytes() const noexcept; /// Return the total number of bytes that have been allocated (including /// allocations that have since been freed). @@ -60,93 +102,208 @@ class AllocationMetric : public AllocatorBase { /// This method is thread-safe. std::size_t get_total_allocated_bytes() const noexcept; - /// Return the number of bytes that have been freed. + /// Return the total number of bytes that have been freed. /// - /// This method is thread-safe, but may return slightly inaccurate results - /// due if allocations are happening while this method is being called. + /// This method is thread-safe. std::size_t get_total_deallocated_bytes() const noexcept; // AllocatorBase interface: - static AllocationMetric& get_default() noexcept; // Returns the component currently in scope. + + /// Return a reference to an MeteredAllocator that belongs to the current + /// AllocationMetricsContext (if any) and the current AllocationMetricNameScope + /// (if any). + /// + /// The returned reference is valid for the duration of the lifetime of the + /// instance of AllocationMetricsContext that is "current" at the time of + /// calling this function, and namely it is valid beyond the lifetime of + /// the current AllocationMetricNameScope. + /// + /// If there is no current AllocationMetricsContext, the global "unknown" + /// tenant will be used. + /// + /// If no metric name is currently in scope (through the use of + /// AllocationMetricNameScope), allocations and deallocations will be counted + /// towards the default "unknown" metric. + /// + /// This method is thread-safe. + static MeteredAllocator& get_default() noexcept; + + /// Allocate memory, accounting for the allocation in metrics. + /// + /// This method is thread-safe. void* allocate(size_t size, size_t align) override final; + + /// Free memory, accounting for the deallocation in metrics. + /// + /// This method is thread-safe. void free(void* ptr, size_t size) noexcept override final; -private: - const char* m_name; - // This is used to iterate over all existing components. Instances of - // AllocationMetric are expected to be statically allocated. - const AllocationMetric* m_next = nullptr; - // These members are aligned at 64 bytes to prevent false sharing + /// Notify metrics that an allocation happened. + /// + /// This method is thread-safe. + void did_allocate_bytes(std::size_t) noexcept; + + /// Notify metrics that a deallocation happened. + /// + /// This method is thread-safe. + void did_free_bytes(std::size_t) noexcept; + +private: + std::atomic m_allocated_bytes; + // These members are spaced by 64 bytes to prevent false sharing // (inter-processor CPU locks when multiple processes are modifying them // concurrently). - alignas(64) std::atomic m_allocated_bytes; - alignas(64) std::atomic m_deallocated_bytes; - - void on_alloc(std::size_t) noexcept; - void on_free(std::size_t) noexcept; + char dummy[56]; + std::atomic m_deallocated_bytes; + char dummy2[56]; // Prevent false sharing with the next element. }; +/// `AllocationMetricsContext` represents a runtime scope for metrics, such as +/// for instance a server running in a multi-tenant scenario, where each tenant +/// would have one context associated with it. +/// +/// `AllocationMetricsContext` is not available on mobile, due to lack of +/// thread-local storage support on iOS. +struct AllocationMetricsContext { +public: + AllocationMetricsContext(); + ~AllocationMetricsContext(); + +#if !REALM_MOBILE + /// Get the thread-specific AllocationMetricsContext. If none has been set, a + /// reference to a globally-allocated "unknown" tenant will be returned. + static AllocationMetricsContext& get_current() noexcept; +#endif + + /// Get the statically-allocated "unknown" tenant. + static AllocationMetricsContext& get_unknown(); -class AllocationMetricScope { + MeteredAllocator& get_metric(const AllocationMetricName& name) noexcept; +private: + std::unique_ptr m_metrics; + + // In debug builds, this is incremented/decremented by + // `AllocationMetricsContextScope`, and checked in the destructor, to avoid + // dangling references. + std::atomic m_refcount; + friend class AllocationMetricsContextScope; +}; + +/// Open a scope where metered memory allocations are counted towards the given +/// name. +/// +/// Creating an instance of this class causes calls to +/// `MeteredAllocator::get_default()` from the current thread to return a +/// reference to an allocator that accounts for allocations/deallocations +/// under the named metric specified as the constructor argument. +/// +/// When such an instance is destroyed, the previous scope will come back +/// in effect (if one exists; if none exists, the "unknown" metric will be +/// used). +/// +/// It is usually an error to create instances of this class with non-scope +/// lifetime, for example on the heap. For that reason, `operator new` is +/// disabled as a precaution. +/// +/// If no `AllocationMetricsContext` is current (by instantiation of +/// `AllocationMetricsContextScope`), metrics recorded in the scope introduced +/// by this instance will count towards the "unknown" context, accessible by +/// calling `AllocationMetricsContext::get_unknown()`. +class AllocationMetricNameScope final { public: /// Establish a scope under which all allocations will be tracked as - /// belonging to \a component (for statistical purposes). - AllocationMetricScope(AllocationMetric& metric) noexcept; - ~AllocationMetricScope(); - AllocationMetricScope(AllocationMetricScope&&) = delete; - AllocationMetricScope& operator=(AllocationMetricScope&&) = delete; + /// belonging to \a name. + explicit AllocationMetricNameScope(const AllocationMetricName& name) noexcept; + ~AllocationMetricNameScope(); + AllocationMetricNameScope(AllocationMetricNameScope&&) = delete; + AllocationMetricNameScope& operator=(AllocationMetricNameScope&&) = delete; + + void* operator new(std::size_t) = delete; private: - AllocationMetric& m_component; - AllocationMetric* m_previous = nullptr; + const AllocationMetricName& m_name; + const AllocationMetricName* m_previous = nullptr; +}; + +/// Open a scope using the given context for allocation metrics. +/// +/// Creating an instance of this class causes calls to +/// `AllocationMetricsContext::get_current()` to return the provided +/// instance. This function is called when by `MeteredAllocator::get_default()` +/// to return an instance that belongs to the given context. +/// +/// When the instance is destroyed, the previous context will become active, or +/// the "unknown" context if there was none. +/// +/// It is usually an error to create instances of this class with non-scope +/// lifetime, for example on the heap. For that reason, `operator new` is +/// disabled as a precaution. +class AllocationMetricsContextScope final { +public: + explicit AllocationMetricsContextScope(AllocationMetricsContext& context) noexcept; + ~AllocationMetricsContextScope(); + AllocationMetricsContextScope(AllocationMetricsContextScope&&) = delete; + AllocationMetricsContextScope& operator=(AllocationMetricsContextScope&&) = delete; + + void* operator new(std::size_t) = delete; + +private: + AllocationMetricsContext& m_context; + AllocationMetricsContext& m_previous; }; /// Convenience STL-compatible allocator that counts allocations as part of the -/// current AllocationMetricScope. +/// current AllocationMetricNameScope. template -using MeteredAllocator = STLAllocator; +using MeteredSTLAllocator = STLAllocator; + // Implementation: -inline const char* AllocationMetric::name() const noexcept +inline const char* AllocationMetricName::name() const noexcept { return m_name; } -inline const AllocationMetric* AllocationMetric::next() const noexcept +inline size_t AllocationMetricName::index() const noexcept +{ + return m_index; +} + +inline const AllocationMetricName* AllocationMetricName::next() const noexcept { return m_next; } -inline std::size_t AllocationMetric::get_allocated_bytes() const noexcept +inline std::size_t MeteredAllocator::get_currently_allocated_bytes() const noexcept { return get_total_allocated_bytes() - get_total_deallocated_bytes(); } -inline std::size_t AllocationMetric::get_total_allocated_bytes() const noexcept +inline std::size_t MeteredAllocator::get_total_allocated_bytes() const noexcept { return m_allocated_bytes.load(std::memory_order_relaxed); } -inline std::size_t AllocationMetric::get_total_deallocated_bytes() const noexcept +inline std::size_t MeteredAllocator::get_total_deallocated_bytes() const noexcept { return m_deallocated_bytes.load(std::memory_order_relaxed); } -inline void* AllocationMetric::allocate(size_t size, size_t align) +inline void* MeteredAllocator::allocate(size_t size, size_t align) { void* ptr = DefaultAllocator::get_default().allocate(size, align); - on_alloc(size); + did_allocate_bytes(size); return ptr; } -inline void AllocationMetric::free(void* ptr, size_t size) noexcept +inline void MeteredAllocator::free(void* ptr, size_t size) noexcept { DefaultAllocator::get_default().free(ptr, size); - on_free(size); + did_free_bytes(size); } -inline void AllocationMetric::on_alloc(std::size_t size) noexcept +inline void MeteredAllocator::did_allocate_bytes(std::size_t size) noexcept { #if !REALM_MOBILE m_allocated_bytes.fetch_add(size, std::memory_order_relaxed); @@ -155,7 +312,7 @@ inline void AllocationMetric::on_alloc(std::size_t size) noexcept #endif } -inline void AllocationMetric::on_free(std::size_t size) noexcept +inline void MeteredAllocator::did_free_bytes(std::size_t size) noexcept { #if !REALM_MOBILE m_deallocated_bytes.fetch_add(size, std::memory_order_relaxed); diff --git a/Pods/Realm/include/core/realm/util/buffer_stream.hpp b/Pods/Realm/include/core/realm/util/buffer_stream.hpp index 65feb8bf42..be5064e392 100644 --- a/Pods/Realm/include/core/realm/util/buffer_stream.hpp +++ b/Pods/Realm/include/core/realm/util/buffer_stream.hpp @@ -21,6 +21,7 @@ #ifndef REALM_UTIL_BUFFER_STREAM_HPP #define REALM_UTIL_BUFFER_STREAM_HPP +#include #include namespace realm { @@ -36,16 +37,18 @@ class BasicResettableExpandableOutputStreambuf: public std::basic_stringbuf m_streambuf; @@ -101,10 +106,10 @@ BasicResettableExpandableOutputStreambuf::data() const noexcept } template -inline std::streamsize BasicResettableExpandableOutputStreambuf::size() const noexcept +inline std::size_t BasicResettableExpandableOutputStreambuf::size() const noexcept { - std::streamsize s = std::streamsize(this->pptr() - this->pbase()); - return s; + std::size_t size = std::size_t(this->pptr() - this->pbase()); + return size; } template @@ -135,7 +140,7 @@ BasicResettableExpandableBufferOutputStream::data() const noexcept } template -inline std::streamsize BasicResettableExpandableBufferOutputStream::size() const noexcept +inline std::size_t BasicResettableExpandableBufferOutputStream::size() const noexcept { return m_streambuf.size(); } diff --git a/Pods/Realm/include/core/realm/util/compression.hpp b/Pods/Realm/include/core/realm/util/compression.hpp deleted file mode 100644 index 475a641523..0000000000 --- a/Pods/Realm/include/core/realm/util/compression.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2016] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_UTIL_COMPRESSION_HPP -#define REALM_UTIL_COMPRESSION_HPP - -#include -#include -#include -#include -#include -#include - -#include - -namespace realm { -namespace util { -namespace compression { - -enum class error { - out_of_memory = 1, - compress_buffer_too_small = 2, - compress_error = 3, - corrupt_input = 4, - incorrect_decompressed_size = 5, - decompress_error = 6 -}; - -const std::error_category& error_category() noexcept; - -std::error_code make_error_code(error) noexcept; - -} // namespace compression -} // namespace util -} // namespace realm - -namespace std { - -template<> struct is_error_code_enum { - static const bool value = true; -}; - -} // namespace std - -namespace realm { -namespace util { -namespace compression { - -class Alloc { -public: - // Returns null on "out of memory" - virtual void* alloc(size_t size) = 0; - virtual void free(void* addr) noexcept = 0; - virtual ~Alloc() {} -}; - -class CompressMemoryArena: public Alloc { -public: - void* alloc(size_t size) override final - { - size_t offset = m_offset; - size_t padding = offset % alignof (std::max_align_t); - if (padding > m_size - offset) - return nullptr; - offset += padding; - void* addr = m_buffer.get() + offset; - if (size > m_size - offset) - return nullptr; - m_offset = offset + size; - return addr; - } - - void free(void*) noexcept override final - { - // No-op - } - - void reset() noexcept - { - m_offset = 0; - } - - size_t size() const noexcept - { - return m_size; - } - - void resize(size_t size) - { - m_buffer = std::make_unique(size); // Throws - m_size = size; - m_offset = 0; - } - -private: - size_t m_size = 0, m_offset = 0; - std::unique_ptr m_buffer; -}; - - -/// compress_bound() calculates an upper bound on the size of the compressed -/// data. The caller can use this function to allocate memory buffer calling -/// compress(). \a uncompressed_buf is the buffer with uncompressed data. The -/// size of the uncompressed data is \a uncompressed_size. \a compression_level -/// is described under compress(). \a bound is set to the upper bound at -/// return. The returned error code is of category compression::error_category. -std::error_code compress_bound(const char* uncompressed_buf, size_t uncompressed_size, - size_t& bound, int compression_level = 1); - -/// compress() compresses the data in the \a uncompressed_buf of size \a -/// uncompressed_size into \a compressed_buf. compress() resizes \a -/// compressed_buf. At return, \a compressed_buf has the size of the compressed -/// data. \a compression_level is [1-9] with 1 the fastest for the current zlib -/// implementation. The returned error code is of category -/// compression::error_category. -std::error_code compress(const char* uncompressed_buf, size_t uncompressed_size, - char* compressed_buf, size_t compressed_buf_size, - size_t& compressed_size, int compression_level = 1, - Alloc* custom_allocator = nullptr); - -/// decompress() decompresses the data in \param compressed_buf of size \a -/// compresed_size into \a decompressed_buf. \a decompressed_size is the -/// expected size of the decompressed data. \a decompressed_buf must have size -/// at least \a decompressed_size. decompress() throws on errors, including the -/// error where the size of the decompressed data is unequal to -/// decompressed_size. The returned error code is of category -/// compression::error_category. -std::error_code decompress(const char* compressed_buf, size_t compressed_size, - char* decompressed_buf, size_t decompressed_size); - - -size_t allocate_and_compress(CompressMemoryArena& compress_memory_arena, - BinaryData uncompressed_buf, - std::vector& compressed_buf); - - - -} // namespace compression -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_COMPRESSION_HPP diff --git a/Pods/Realm/include/core/realm/util/config.h b/Pods/Realm/include/core/realm/util/config.h index e0566a10d8..0ebbbe27be 100644 --- a/Pods/Realm/include/core/realm/util/config.h +++ b/Pods/Realm/include/core/realm/util/config.h @@ -6,7 +6,7 @@ // Realm-specific configuration #define REALM_MAX_BPNODE_SIZE 1000 -#define REALM_ENABLE_ASSERTIONS 0 +#define REALM_ENABLE_ASSERTIONS 1 #define REALM_ENABLE_ALLOC_SET_ZERO 0 #define REALM_ENABLE_ENCRYPTION 1 #define REALM_ENABLE_MEMDEBUG 0 diff --git a/Pods/Realm/include/core/realm/util/duplicating_logger.hpp b/Pods/Realm/include/core/realm/util/duplicating_logger.hpp new file mode 100644 index 0000000000..774df3cc86 --- /dev/null +++ b/Pods/Realm/include/core/realm/util/duplicating_logger.hpp @@ -0,0 +1,63 @@ +/************************************************************************* + * + * REALM CONFIDENTIAL + * __________________ + * + * [2011] - [2016] Realm Inc + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Realm Incorporated and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to Realm Incorporated + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Realm Incorporated. + * + **************************************************************************/ + +#ifndef REALM_UTIL_DUPLICATING_LOGGER_HPP +#define REALM_UTIL_DUPLICATING_LOGGER_HPP + +#include + + +namespace realm { +namespace util { + +/// The log level threshold of a logger of this type will be decided by the +/// associated base logger. Therefore, the log level threshold specified via the +/// auxiliary logger will be ignored. +/// +/// Loggers of this type are thread-safe if the base logger and the auxiliary +/// loggers are both thread-safe. +class DuplicatingLogger : public Logger { +public: + explicit DuplicatingLogger(Logger& base_logger, Logger& aux_logger) noexcept; + +protected: + void do_log(Logger::Level, std::string message) override; + +private: + Logger& m_base_logger; + Logger& m_aux_logger; +}; + + + + +// Implementation + +inline DuplicatingLogger::DuplicatingLogger(Logger& base_logger, Logger& aux_logger) noexcept : + Logger{base_logger.level_threshold}, + m_base_logger{base_logger}, m_aux_logger{aux_logger} +{ +} + + +} // namespace util +} // namespace realm + +#endif // REALM_UTIL_DUPLICATING_LOGGER_HPP diff --git a/Pods/Realm/include/core/realm/util/encrypted_file_mapping.hpp b/Pods/Realm/include/core/realm/util/encrypted_file_mapping.hpp index e110e97682..5622f2dd6d 100644 --- a/Pods/Realm/include/core/realm/util/encrypted_file_mapping.hpp +++ b/Pods/Realm/include/core/realm/util/encrypted_file_mapping.hpp @@ -54,7 +54,7 @@ class EncryptedFileMapping { // Make sure that memory in the specified range is synchronized with any // changes made globally visible through call to write_barrier - void read_barrier(const void* addr, size_t size, UniqueLock& lock, Header_to_size header_to_size); + void read_barrier(const void* addr, size_t size, Header_to_size header_to_size); // Ensures that any changes made to memory in the specified range // becomes visible to any later calls to read_barrier() @@ -64,9 +64,26 @@ class EncryptedFileMapping { // Flushes any remaining dirty pages from the old mapping void set(void* new_addr, size_t new_size, size_t new_file_offset); + size_t collect_decryption_count() + { + return m_num_decrypted; + } + // reclaim any untouched pages - this is thread safe with respect to + // concurrent access/touching of pages - but must be called with the mutex locked. + void reclaim_untouched(size_t& progress_ptr, size_t& accumulated_savings) noexcept; + bool contains_page(size_t page_in_file) const; size_t get_local_index_of_address(const void* addr, size_t offset = 0) const; + size_t get_end_index() + { + return m_first_page + m_page_state.size(); + } + size_t get_start_index() + { + return m_first_page; + } + private: SharedFileInfo& m_file; @@ -76,11 +93,36 @@ class EncryptedFileMapping { void* m_addr = nullptr; size_t m_first_page; - - // MUST be of type char because of coherence issues when writing inside mutex and reading outside - // it. FIXME: We're investigating if this is good enough, or if we need further mechanisms - std::vector m_up_to_date_pages; - std::vector m_dirty_pages; + size_t m_num_decrypted; // 1 for every page decrypted + + enum PageState { + Touched = 1, // a ref->ptr translation has taken place + UpToDate = 2, // the page is fully up to date + PartiallyUpToDate = 4, // the page is valid for old translations, but requires re-decryption for new + Dirty = 8 // the page has been modified with respect to what's on file. + }; + std::vector m_page_state; + // little helpers: + inline void clear(PageState& ps, int p) + { + ps = PageState(ps & ~p); + } + inline bool is_not(PageState& ps, int p) + { + return (ps & p) == 0; + } + inline bool is(PageState& ps, int p) + { + return (ps & p) != 0; + } + inline void set(PageState& ps, int p) + { + ps = PageState(ps | p); + } + // 1K pages form a chunk - this array allows us to skip entire chunks during scanning + std::vector m_chunk_dont_scan; + static constexpr int page_to_chunk_shift = 10; + static constexpr size_t page_to_chunk_factor = size_t(1) << page_to_chunk_shift; File::AccessMode m_access; @@ -94,7 +136,7 @@ class EncryptedFileMapping { bool copy_up_to_date_page(size_t local_page_ndx) noexcept; void refresh_page(size_t local_page_ndx); void write_page(size_t local_page_ndx) noexcept; - + void reclaim_page(size_t page_ndx); void validate_page(size_t local_page_ndx) noexcept; void validate() noexcept; }; @@ -104,7 +146,7 @@ inline size_t EncryptedFileMapping::get_local_index_of_address(const void* addr, REALM_ASSERT_EX(addr >= m_addr, addr, m_addr); size_t local_ndx = ((reinterpret_cast(addr) - reinterpret_cast(m_addr) + offset) >> m_page_shift); - REALM_ASSERT_EX(local_ndx < m_up_to_date_pages.size(), local_ndx, m_up_to_date_pages.size()); + REALM_ASSERT_EX(local_ndx < m_page_state.size(), local_ndx, m_page_state.size()); return local_ndx; } @@ -112,48 +154,10 @@ inline bool EncryptedFileMapping::contains_page(size_t page_in_file) const { // first check for (page_in_file >= m_first_page) so that the following // subtraction using unsigned types never wraps under 0 - return page_in_file >= m_first_page && page_in_file - m_first_page < m_up_to_date_pages.size(); + return page_in_file >= m_first_page && page_in_file - m_first_page < m_page_state.size(); } -inline void EncryptedFileMapping::read_barrier(const void* addr, size_t size, UniqueLock& lock, - Header_to_size header_to_size) -{ - size_t first_accessed_local_page = get_local_index_of_address(addr); - - // make sure the first page is available - // Checking before taking the lock is important to performance. - if (!m_up_to_date_pages[first_accessed_local_page]) { - if (!lock.holds_lock()) - lock.lock(); - // after taking the lock, we must repeat the check so that we never - // call refresh_page() on a page which is already up to date. - if (!m_up_to_date_pages[first_accessed_local_page]) - refresh_page(first_accessed_local_page); - } - - if (header_to_size) { - - // We know it's an array, and array headers are 8-byte aligned, so it is - // included in the first page which was handled above. - size = header_to_size(static_cast(addr)); - } - size_t last_idx = get_local_index_of_address(addr, size == 0 ? 0 : size - 1); - size_t up_to_date_pages_size = m_up_to_date_pages.size(); - - // We already checked first_accessed_local_page above, so we start the loop - // at first_accessed_local_page + 1 to check the following page. - for (size_t idx = first_accessed_local_page + 1; idx <= last_idx && idx < up_to_date_pages_size; ++idx) { - if (!m_up_to_date_pages[idx]) { - if (!lock.holds_lock()) - lock.lock(); - // after taking the lock, we must repeat the check so that we never - // call refresh_page() on a page which is already up to date. - if (!m_up_to_date_pages[idx]) - refresh_page(idx); - } - } -} } } diff --git a/Pods/Realm/include/core/realm/util/features.h b/Pods/Realm/include/core/realm/util/features.h index 59e3d14424..ed6d55a664 100644 --- a/Pods/Realm/include/core/realm/util/features.h +++ b/Pods/Realm/include/core/realm/util/features.h @@ -27,7 +27,9 @@ #define NOMINMAX #endif +#ifndef REALM_NO_CONFIG #include +#endif /* The maximum number of elements in a B+-tree node. Applies to inner nodes and * to leaves. The minimum allowable value is 2. @@ -71,6 +73,8 @@ #if REALM_HAS_CPP_ATTRIBUTE(clang::fallthrough) #define REALM_FALLTHROUGH [[clang::fallthrough]] +#elif REALM_HAS_CPP_ATTRIBUTE(gnu::fallthrough) +#define REALM_FALLTHROUGH [[gnu::fallthrough]] #elif REALM_HAS_CPP_ATTRIBUTE(fallthrough) #define REALM_FALLTHROUGH [[fallthrough]] #else @@ -311,4 +315,30 @@ #define REALM_ARCHITECTURE_X86_64 0 #endif +// Address Sanitizer +#if defined(__has_feature) // Clang +# if __has_feature(address_sanitizer) +# define REALM_SANITIZE_ADDRESS 1 +# else +# define REALM_SANITIZE_ADDRESS 0 +# endif +#elif defined(__SANITIZE_ADDRESS__) && __SANITIZE_ADDRESS__ // GCC +# define REALM_SANITIZE_ADDRESS 1 +#else +# define REALM_SANITIZE_ADDRESS 0 +#endif + +// Thread Sanitizer +#if defined(__has_feature) // Clang +# if __has_feature(thread_sanitizer) +# define REALM_SANITIZE_THREAD 1 +# else +# define REALM_SANITIZE_THREAD 0 +# endif +#elif defined(__SANITIZE_THREAD__) && __SANITIZE_THREAD__ // GCC +# define REALM_SANITIZE_THREAD 1 +#else +# define REALM_SANITIZE_THREAD 0 +#endif + #endif /* REALM_UTIL_FEATURES_H */ diff --git a/Pods/Realm/include/core/realm/util/fifo_helper.hpp b/Pods/Realm/include/core/realm/util/fifo_helper.hpp new file mode 100644 index 0000000000..6ca8d75b0e --- /dev/null +++ b/Pods/Realm/include/core/realm/util/fifo_helper.hpp @@ -0,0 +1,43 @@ +/************************************************************************* + * + * Copyright 2019 Realm Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + **************************************************************************/ + +#ifndef REALM_UTIL_FIFO_HELPER_HPP +#define REALM_UTIL_FIFO_HELPER_HPP + +#include + +namespace realm { +namespace util { + +// Attempts to create a FIFO file at the location determined by `path`. +// If creating the FIFO at this location fails, an exception is thrown. +// If a FIFO already exists at the given location, this method does nothing. +void create_fifo(std::string path); // throws + +// Same as above, but returns `false` if the FIFO could not be created instead of throwing. +bool try_create_fifo(const std::string& path); + +// Ensure that a path representing a directory ends with `/` +inline std::string normalize_dir(const std::string& path) { + return (!path.empty() && path.back() != '/') ? path + '/' : path; +} + +} // namespace util +} // namespace realm + +#endif // REALM_UTIL_FIFO_HELPER_HPP diff --git a/Pods/Realm/include/core/realm/util/file.hpp b/Pods/Realm/include/core/realm/util/file.hpp index d85d222415..8cf38385e4 100644 --- a/Pods/Realm/include/core/realm/util/file.hpp +++ b/Pods/Realm/include/core/realm/util/file.hpp @@ -26,6 +26,7 @@ #include #include #include +#include #ifndef _WIN32 #include // POSIX.1-2001 @@ -300,7 +301,7 @@ class File { /// /// \sa prealloc() /// \sa is_prealloc_supported() - void prealloc_if_supported(SizeType offset, size_t size); + bool prealloc_if_supported(SizeType offset, size_t size); /// See prealloc_if_supported(). static bool is_prealloc_supported(); @@ -544,13 +545,18 @@ class File { #else // NDK r10e has a bug in sys/stat.h dev_t ino_t are 4 bytes, // but stat.st_dev and st_ino are 8 bytes. So we just use uint64 instead. - uint_fast64_t device; + dev_t device; uint_fast64_t inode; #endif }; // Return the unique id for the current opened file descriptor. // Same UniqueID means they are the same file. UniqueID get_unique_id() const; + // Return the file descriptor for the file + FileDesc get_descriptor() const; + // Return the path of the open file, or an empty string if + // this file has never been opened. + std::string get_path() const; // Return false if the file doesn't exist. Otherwise uid will be set. static bool get_unique_id(const std::string& path, UniqueID& uid); @@ -580,6 +586,7 @@ class File { int m_fd; #endif std::unique_ptr m_encryption_key = nullptr; + std::string m_path; bool lock(bool exclusive, bool non_blocking); void open_internal(const std::string& path, AccessMode, CreateMode, int flags, bool* success); @@ -853,7 +860,7 @@ class File::UnmapGuard { /// Only output is supported at this point. class File::Streambuf : public std::streambuf { public: - explicit Streambuf(File*); + explicit Streambuf(File*, size_t = 4096); ~Streambuf() noexcept; // Disable copying @@ -861,8 +868,6 @@ class File::Streambuf : public std::streambuf { Streambuf& operator=(const Streambuf&) = delete; private: - static const size_t buffer_size = 4096; - File& m_file; std::unique_ptr const m_buffer; @@ -872,10 +877,9 @@ class File::Streambuf : public std::streambuf { void flush(); }; - /// Used for any I/O related exception. Note the derived exception /// types that are used for various specific types of errors. -class File::AccessError : public std::runtime_error { +class File::AccessError : public ExceptionWithBacktrace { public: AccessError(const std::string& msg, const std::string& path); @@ -883,8 +887,17 @@ class File::AccessError : public std::runtime_error { /// no associated file system path, or if the file system path is unknown. std::string get_path() const; + const char* message() const noexcept + { + m_buffer = std::runtime_error::what(); + if (m_path.size() > 0) + m_buffer += (std::string(" Path: ") + m_path); + return m_buffer.c_str(); + } + private: std::string m_path; + mutable std::string m_buffer; }; @@ -1184,7 +1197,7 @@ inline T* File::Map::release() noexcept } -inline File::Streambuf::Streambuf(File* f) +inline File::Streambuf::Streambuf(File* f, size_t buffer_size) : m_file(*f) , m_buffer(new char[buffer_size]) { @@ -1239,7 +1252,7 @@ inline void File::Streambuf::flush() } inline File::AccessError::AccessError(const std::string& msg, const std::string& path) - : std::runtime_error(msg) + : ExceptionWithBacktrace(msg) , m_path(path) { } diff --git a/Pods/Realm/include/core/realm/util/file_mapper.hpp b/Pods/Realm/include/core/realm/util/file_mapper.hpp index 488ae94122..d02f15d240 100644 --- a/Pods/Realm/include/core/realm/util/file_mapper.hpp +++ b/Pods/Realm/include/core/realm/util/file_mapper.hpp @@ -24,6 +24,8 @@ #include #include +#include + namespace realm { namespace util { @@ -40,8 +42,54 @@ void msync(FileDesc fd, void* addr, size_t size); using HeaderToSize = size_t (*)(const char* addr); class EncryptedFileMapping; +class PageReclaimGovernor { +public: + // Called by the page reclaimer with the current load (in bytes) and + // must return the target load (also in bytes). Returns no_match if no + // target can be set + static constexpr int64_t no_match = -1; + virtual std::function current_target_getter(size_t load) = 0; + virtual void report_target_result(int64_t) = 0; +}; + +// Set a page reclaim governor. The governor is an object with a method which will be called periodically +// and must return a 'target' amount of memory to hold decrypted pages. The page reclaim daemon +// will then try to release pages to meet the target. The governor is called with the current +// amount of data used, for the purpose of logging - or possibly for computing the target +// +// The governor is called approximately once per second. +// +// If no governor is installed, the page reclaim daemon will not start. +void set_page_reclaim_governor(PageReclaimGovernor* governor); + +// Use the default governor. The default governor is used automatically if nothing else is set, so +// this funciton is mostly useful for tests where changing back to the default could be desirable. +inline void set_page_reclaim_governor_to_default() +{ + set_page_reclaim_governor(nullptr); +} + +// Retrieves the number of in memory decrypted pages, across all open files. +size_t get_num_decrypted_pages(); + +// Retrieves the +// - amount of memory used for decrypted pages, across all open files. +// - current target for the reclaimer (desired number of decrypted pages) +// - current workload size for the reclaimer, across all open files. +struct decrypted_memory_stats_t { + size_t memory_size; + size_t reclaimer_target; + size_t reclaimer_workload; +}; + +decrypted_memory_stats_t get_decrypted_memory_stats(); + #if REALM_ENABLE_ENCRYPTION +void encryption_note_reader_start(SharedFileInfo& info, const void* reader_id); +void encryption_note_reader_end(SharedFileInfo& info, const void* reader_id) noexcept; + +SharedFileInfo* get_file_info_for_file(File& file); // This variant allows the caller to obtain direct access to the encrypted file mapping // for optimization purposes. @@ -72,8 +120,8 @@ extern util::Mutex& mapping_mutex; inline void do_encryption_read_barrier(const void* addr, size_t size, HeaderToSize header_to_size, EncryptedFileMapping* mapping) { - UniqueLock lock(mapping_mutex, defer_lock_tag()); - mapping->read_barrier(addr, size, lock, header_to_size); + UniqueLock lock(mapping_mutex); + mapping->read_barrier(addr, size, header_to_size); } inline void do_encryption_write_barrier(const void* addr, size_t size, EncryptedFileMapping* mapping) @@ -82,18 +130,29 @@ inline void do_encryption_write_barrier(const void* addr, size_t size, Encrypted mapping->write_barrier(addr, size); } - #else -void inline encryption_read_barrier(const void*, size_t, EncryptedFileMapping*, HeaderToSize header_to_size = nullptr) + +void inline set_page_reclaim_governor(PageReclaimGovernor*) { - static_cast(header_to_size); } + +size_t inline get_num_decrypted_pages() +{ + return 0; +} + +void inline encryption_read_barrier(const void*, size_t, EncryptedFileMapping*, HeaderToSize = nullptr) +{ +} + void inline encryption_write_barrier(const void*, size_t) { } + void inline encryption_write_barrier(const void*, size_t, EncryptedFileMapping*) { } + #endif // helpers for encrypted Maps diff --git a/Pods/Realm/include/core/realm/util/fixed_size_buffer.hpp b/Pods/Realm/include/core/realm/util/fixed_size_buffer.hpp new file mode 100644 index 0000000000..8a512ee46a --- /dev/null +++ b/Pods/Realm/include/core/realm/util/fixed_size_buffer.hpp @@ -0,0 +1,135 @@ +/************************************************************************* + * + * Copyright 2019 Realm Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + **************************************************************************/ + +#ifndef REALM_UTIL_FIXED_SIZE_BUFFER_HPP +#define REALM_UTIL_FIXED_SIZE_BUFFER_HPP + +#include +#include +#include + +namespace realm { +namespace util { + +/// This is a buffer with a fixed size. You can only insert elements. +/// When the number of elements inserted matches the size of the buffer, +/// additional insertions will overwrite the oldest elements. +template +class FixedSizeBuffer { +public: + class iterator; + + FixedSizeBuffer(size_t sz) + : m_size(sz) + { + if (sz == 0) + throw std::runtime_error("FixedSizeBuffer size cannot be 0"); + m_buffer.reserve(sz); + } + size_t size() + { + return m_buffer.size(); + } + void insert(const T& val) + { + if (m_buffer.size() < m_size) { + m_buffer.emplace_back(val); + } + else { + m_buffer[m_oldest] = val; + ++m_oldest; + if (m_oldest == m_size) + m_oldest = 0; + } + } + T& at(size_t n) + { + auto idx = (n + m_oldest) % m_size; + return m_buffer[idx]; + } + T& operator[](size_t n) + { + return at(n); + } + iterator begin() + { + return iterator(*this, 0); + } + iterator end() + { + return iterator(*this, m_buffer.size()); + } + +private: + std::vector m_buffer; + size_t m_size; + size_t m_oldest = 0; +}; + +template +class FixedSizeBuffer::iterator { +public: + typedef std::forward_iterator_tag iterator_category; + typedef T value_type; + typedef ptrdiff_t difference_type; + typedef T* pointer; + typedef T& reference; + + iterator(FixedSizeBuffer& b, size_t ndx) + : m_cb(b) + , m_ndx(ndx) + { + } + pointer operator->() + { + return &m_cb[m_ndx]; + } + reference operator*() + { + return m_cb[m_ndx]; + } + iterator& operator++() + { + ++m_ndx; + return *this; + } + iterator operator++(int) + { + iterator tmp(*this); + operator++(); + return tmp; + } + bool operator!=(const iterator& rhs) + { + return m_ndx != rhs.m_ndx; + } + bool operator==(const iterator& rhs) + { + return m_ndx == rhs.m_ndx; + } + +private: + FixedSizeBuffer& m_cb; + size_t m_ndx; +}; + +} // namespace util +} // namespace realm + + +#endif /* REALM_UTIL_FIXED_SIZE_BUFFER_HPP */ diff --git a/Pods/Realm/include/core/realm/util/http.hpp b/Pods/Realm/include/core/realm/util/http.hpp index 5b15fe663a..91da87630b 100644 --- a/Pods/Realm/include/core/realm/util/http.hpp +++ b/Pods/Realm/include/core/realm/util/http.hpp @@ -21,6 +21,8 @@ #ifndef REALM_UTIL_HTTP_HPP #define REALM_UTIL_HTTP_HPP +#include +#include #include #include #include @@ -29,6 +31,7 @@ #include #include #include +#include #include namespace realm { @@ -46,8 +49,7 @@ std::error_code make_error_code(HTTPParserError); } // namespace realm namespace std { - template<> - struct is_error_code_enum: std::true_type {}; +template<> struct is_error_code_enum : std::true_type {}; } namespace realm { @@ -139,8 +141,15 @@ struct HTTPAuthorization { HTTPAuthorization parse_authorization(const std::string&); -struct CaseInsensitiveCompare { - bool operator()(const std::string& a, const std::string& b) const +class HeterogeneousCaseInsensitiveCompare { +public: + using is_transparent = std::true_type; + template bool operator()(const A& a, const B& b) const noexcept + { + return comp(StringView(a), StringView(b)); + } +private: + bool comp(StringView a, StringView b) const noexcept { auto cmp = [](char lhs, char rhs) { return std::tolower(lhs, std::locale::classic()) < @@ -151,7 +160,7 @@ struct CaseInsensitiveCompare { }; /// Case-insensitive map suitable for storing HTTP headers. -using HTTPHeaders = std::map; +using HTTPHeaders = std::map; struct HTTPRequest { HTTPMethod method = HTTPMethod::Get; @@ -167,6 +176,7 @@ struct HTTPRequest { struct HTTPResponse { HTTPStatus status = HTTPStatus::Unknown; + std::string reason; HTTPHeaders headers; // A body is only read from the response stream if the server sent the @@ -186,6 +196,7 @@ std::ostream& operator<<(std::ostream&, HTTPMethod); /// Serialize HTTP status to output stream, include reason string ("200 OK" etc.) std::ostream& operator<<(std::ostream&, HTTPStatus); + struct HTTPParserBase { util::Logger& logger; @@ -244,6 +255,7 @@ struct HTTPParserBase { void set_write_buffer(const HTTPResponse&); }; + template struct HTTPParser: protected HTTPParserBase { explicit HTTPParser(Socket& socket, util::Logger& logger): @@ -335,6 +347,7 @@ struct HTTPParser: protected HTTPParserBase { Socket& m_socket; }; + template struct HTTPClient: protected HTTPParser { using Handler = void(HTTPResponse, std::error_code); @@ -387,7 +400,7 @@ struct HTTPClient: protected HTTPParser { StringData reason; if (this->parse_first_line_of_response(line, status, reason, this->logger)) { m_response.status = status; - static_cast(reason); // Ignore for now. + m_response.reason = reason; return std::error_code{}; } return HTTPParserError::MalformedResponse; @@ -413,6 +426,7 @@ struct HTTPClient: protected HTTPParser { } }; + template struct HTTPServer: protected HTTPParser { using RequestHandler = void(HTTPRequest, std::error_code); @@ -517,9 +531,11 @@ struct HTTPServer: protected HTTPParser { } }; + +std::string make_http_host(bool is_ssl, StringView address, std::uint_fast16_t port); + } // namespace util } // namespace realm #endif // REALM_UTIL_HTTP_HPP - diff --git a/Pods/Realm/include/core/realm/util/memory_stream.hpp b/Pods/Realm/include/core/realm/util/memory_stream.hpp index 51584e829a..81a48523c8 100644 --- a/Pods/Realm/include/core/realm/util/memory_stream.hpp +++ b/Pods/Realm/include/core/realm/util/memory_stream.hpp @@ -116,11 +116,11 @@ inline MemoryInputStreambuf::~MemoryInputStreambuf() noexcept { } -inline void MemoryInputStreambuf::set_buffer(const char* begin, const char* end) noexcept +inline void MemoryInputStreambuf::set_buffer(const char* b, const char* e) noexcept { - m_begin = begin; - m_end = end; - m_curr = begin; + m_begin = b; + m_end = e; + m_curr = b; } @@ -132,9 +132,9 @@ inline MemoryOutputStreambuf::~MemoryOutputStreambuf() noexcept { } -inline void MemoryOutputStreambuf::set_buffer(char* begin, char* end) noexcept +inline void MemoryOutputStreambuf::set_buffer(char* b, char* e) noexcept { - setp(begin, end); + setp(b, e); } inline size_t MemoryOutputStreambuf::size() const noexcept @@ -152,31 +152,31 @@ inline MemoryInputStream::~MemoryInputStream() noexcept { } -inline void MemoryInputStream::set_buffer(const char* begin, const char* end) noexcept +inline void MemoryInputStream::set_buffer(const char* b, const char* e) noexcept { - m_streambuf.set_buffer(begin, end); + m_streambuf.set_buffer(b, e); clear(); } template inline void MemoryInputStream::set_buffer(const char (&buffer)[N]) noexcept { - const char* begin = buffer; - const char* end = begin + N; - set_buffer(begin, end); + const char* b = buffer; + const char* e = b + N; + set_buffer(b, e); } inline void MemoryInputStream::set_string(const std::string& str) noexcept { - const char* begin = str.data(); - const char* end = begin + str.size(); - set_buffer(begin, end); + const char* b = str.data(); + const char* e = b + str.size(); + set_buffer(b, e); } inline void MemoryInputStream::set_c_string(const char* c_str) noexcept { - const char* begin = c_str; - const char* end = begin + traits_type::length(c_str); - set_buffer(begin, end); + const char* b = c_str; + const char* e = b + traits_type::length(c_str); + set_buffer(b, e); } @@ -189,9 +189,9 @@ inline MemoryOutputStream::~MemoryOutputStream() noexcept { } -inline void MemoryOutputStream::set_buffer(char* begin, char* end) noexcept +inline void MemoryOutputStream::set_buffer(char* b, char* e) noexcept { - m_streambuf.set_buffer(begin, end); + m_streambuf.set_buffer(b, e); clear(); } diff --git a/Pods/Realm/include/core/realm/util/metered/deque.hpp b/Pods/Realm/include/core/realm/util/metered/deque.hpp index 792656d71a..41c1b7146f 100644 --- a/Pods/Realm/include/core/realm/util/metered/deque.hpp +++ b/Pods/Realm/include/core/realm/util/metered/deque.hpp @@ -27,7 +27,7 @@ namespace realm { namespace util { namespace metered { /// Vector with metered allocation -template > +template > using deque = std::deque; } // namespace metered } // namespace util diff --git a/Pods/Realm/include/core/realm/util/metered/map.hpp b/Pods/Realm/include/core/realm/util/metered/map.hpp index 7e11f972c5..be03f9ebdd 100644 --- a/Pods/Realm/include/core/realm/util/metered/map.hpp +++ b/Pods/Realm/include/core/realm/util/metered/map.hpp @@ -31,7 +31,7 @@ namespace metered { template , - class Alloc = MeteredAllocator>> + class Alloc = MeteredSTLAllocator>> using map = std::map; } // namespace metered } // namespace util diff --git a/Pods/Realm/include/core/realm/util/metered/set.hpp b/Pods/Realm/include/core/realm/util/metered/set.hpp index 6962bca92c..95f1e73482 100644 --- a/Pods/Realm/include/core/realm/util/metered/set.hpp +++ b/Pods/Realm/include/core/realm/util/metered/set.hpp @@ -28,7 +28,7 @@ namespace util { namespace metered { /// Set with metered allocation. Additionally, the default Compare is changed to /// `std::less<>` instead of `std::less`, which allows heterogenous lookup. -template , class Alloc = MeteredAllocator> +template , class Alloc = MeteredSTLAllocator> using set = std::set; } // namespace metered } // namespace util diff --git a/Pods/Realm/include/core/realm/util/metered/string.hpp b/Pods/Realm/include/core/realm/util/metered/string.hpp index a879fbad19..b3a52db4dd 100644 --- a/Pods/Realm/include/core/realm/util/metered/string.hpp +++ b/Pods/Realm/include/core/realm/util/metered/string.hpp @@ -27,7 +27,7 @@ namespace realm { namespace util { namespace metered { /// String with metered allocation -using string = std::basic_string, MeteredAllocator>; +using string = std::basic_string, MeteredSTLAllocator>; } // namespace metered } // namespace util } // namespace realm diff --git a/Pods/Realm/include/core/realm/util/metered/unordered_map.hpp b/Pods/Realm/include/core/realm/util/metered/unordered_map.hpp index 222aa8a82c..8ead21ade5 100644 --- a/Pods/Realm/include/core/realm/util/metered/unordered_map.hpp +++ b/Pods/Realm/include/core/realm/util/metered/unordered_map.hpp @@ -31,7 +31,7 @@ template , class KeyEqual = std::equal_to, - class Alloc = MeteredAllocator>> + class Alloc = MeteredSTLAllocator>> using unordered_map = std::unordered_map; } // namespace metered } // namespace util diff --git a/Pods/Realm/include/core/realm/util/metered/unordered_set.hpp b/Pods/Realm/include/core/realm/util/metered/unordered_set.hpp index 28c33911ee..ad0dc5faec 100644 --- a/Pods/Realm/include/core/realm/util/metered/unordered_set.hpp +++ b/Pods/Realm/include/core/realm/util/metered/unordered_set.hpp @@ -30,7 +30,7 @@ namespace metered { template , class KeyEqual = std::equal_to, - class Alloc = MeteredAllocator> + class Alloc = MeteredSTLAllocator> using unordered_set = std::unordered_set; } // namespace metered } // namespace util diff --git a/Pods/Realm/include/core/realm/util/metered/vector.hpp b/Pods/Realm/include/core/realm/util/metered/vector.hpp index bcd0ed8677..cbbf177bc4 100644 --- a/Pods/Realm/include/core/realm/util/metered/vector.hpp +++ b/Pods/Realm/include/core/realm/util/metered/vector.hpp @@ -27,7 +27,7 @@ namespace realm { namespace util { namespace metered { /// Vector with metered allocation -template > +template > using vector = std::vector; } // namespace metered } // namespace util diff --git a/Pods/Realm/include/core/realm/util/misc_ext_errors.hpp b/Pods/Realm/include/core/realm/util/misc_ext_errors.hpp index e5f5d34980..6b709984cf 100644 --- a/Pods/Realm/include/core/realm/util/misc_ext_errors.hpp +++ b/Pods/Realm/include/core/realm/util/misc_ext_errors.hpp @@ -36,7 +36,10 @@ enum class MiscExtErrors { premature_end_of_input, /// Delimiter not found. - delim_not_found + delim_not_found, + + /// Operation not supported + operation_not_supported, }; class MiscExtErrorCategory : public std::error_category { diff --git a/Pods/Realm/include/core/realm/util/network.hpp b/Pods/Realm/include/core/realm/util/network.hpp index 696b093d64..6ff5b9108c 100644 --- a/Pods/Realm/include/core/realm/util/network.hpp +++ b/Pods/Realm/include/core/realm/util/network.hpp @@ -1362,8 +1362,9 @@ class DeadlineTimer { /// operation is guaranteed to never throw. /// /// The function is guaranteed to not be called after the Trigger object is -/// destroyed. It is safe, though, to destroy the Trigger object during the -/// execution of the function. +/// destroyed. +/// +/// It is safe to destroy the Trigger object during execution of the function. /// /// Note that even though the trigger() function is thread-safe, the Trigger /// object, as a whole, is not. In particular, construction and destruction must diff --git a/Pods/Realm/include/core/realm/util/optional.hpp b/Pods/Realm/include/core/realm/util/optional.hpp index 07cada1080..57a2958239 100644 --- a/Pods/Realm/include/core/realm/util/optional.hpp +++ b/Pods/Realm/include/core/realm/util/optional.hpp @@ -135,6 +135,7 @@ class Optional : private _impl::OptionalStorage { void clear(); }; + /// An Optional is functionally equivalent to a bool. /// Note: C++17 does not (yet) specify this specialization, but it is convenient /// as a "safer bool", especially in the presence of `fmap`. @@ -719,4 +720,23 @@ using util::none; } // namespace realm + +// for convienence, inject a default hash implementation into the std namespace +namespace std +{ + template + struct hash> + { + std::size_t operator()(realm::util::Optional const& o) const noexcept + { + if (bool(o) == false) { + return 0; // any choice will collide with some std::hash + } else { + return std::hash{}(*o); + } + } + }; +} + + #endif // REALM_UTIL_OPTIONAL_HPP diff --git a/Pods/Realm/include/core/realm/util/quote.hpp b/Pods/Realm/include/core/realm/util/quote.hpp new file mode 100644 index 0000000000..7959a44590 --- /dev/null +++ b/Pods/Realm/include/core/realm/util/quote.hpp @@ -0,0 +1,175 @@ +/************************************************************************* + * + * REALM CONFIDENTIAL + * __________________ + * + * [2011] - [2015] Realm Inc + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Realm Incorporated and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to Realm Incorporated + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Realm Incorporated. + * + **************************************************************************/ +#ifndef REALM_UTIL_QUOTE_HPP +#define REALM_UTIL_QUOTE_HPP + +#include + +namespace realm { +namespace util { + +template struct Quote { + bool smart; + util::BasicStringView view; +}; + + +/// Mark text for quotation during output to stream. +/// +/// If `out` is an output stream, and `str` is a string (e.g., an std::string), +/// then +/// +/// out << quoted(str) +/// +/// will write `str` in quoted form to `out`. +/// +/// Quotation involves bracketing the text in double quotes (`"`), and escaping +/// special characters according to the rules of C/C++ string literals. In this +/// case, the special characters are `"` and `\` as well as those that are not +/// printable (!std::isprint()). +/// +/// Quotation happens as the string is written to a stream, so there is no +/// intermediate representation of the quoted string. +template Quote quoted(util::BasicStringView) noexcept; + + +/// Same as quoted(), except that in this case, quotation is elided when the +/// specified string consists of a single printable word. Or, to be more +/// precise, quotation is elided if the string is nonempty, consists entirely of +/// printable charcters (std::isprint()), does not contain space (` `), and does +/// not conatian quotation (`"`) or backslash (`\`). +template Quote smart_quoted(util::BasicStringView) noexcept; + + +template +std::basic_ostream& operator<<(std::basic_ostream&, Quote); + + + + + +// Implementation + +template inline Quote quoted(util::BasicStringView view) noexcept +{ + bool smart = false; + return {smart, view}; +} + +template +inline Quote smart_quoted(util::BasicStringView view) noexcept +{ + bool smart = true; + return {smart, view}; +} + +template +inline std::basic_ostream& operator<<(std::basic_ostream& out, Quote quoted) +{ + std::locale loc = out.getloc(); + const std::ctype& ctype = std::use_facet>(loc); + util::BasicStringView view = quoted.view; + if (quoted.smart && !view.empty()) { + for (C ch : view) { + if (ch == '"' || ch == '\\' || !ctype.is(ctype.graph, ch)) + goto quote; + } + return out << view; // Throws + } + quote: + typename std::basic_ostream::sentry sentry{out}; + if (REALM_LIKELY(sentry)) { + C dquote = ctype.widen('"'); + C bslash = ctype.widen('\\'); + out.put(dquote); // Throws + bool follows_hex = false; + for (C ch : view) { + if (REALM_LIKELY(ctype.is(ctype.print, ch))) { + if (REALM_LIKELY(!follows_hex || !ctype.is(ctype.xdigit, ch))) { + if (REALM_LIKELY(ch != '"' || ch != '\\')) + goto put_char; + goto escape_char; + } + } + switch (ch) { + case '\a': + ch = ctype.widen('a'); + goto escape_char; + case '\b': + ch = ctype.widen('b'); + goto escape_char; + case '\f': + ch = ctype.widen('f'); + goto escape_char; + case '\n': + ch = ctype.widen('n'); + goto escape_char; + case '\r': + ch = ctype.widen('r'); + goto escape_char; + case '\t': + ch = ctype.widen('t'); + goto escape_char; + case '\v': + ch = ctype.widen('v'); + goto escape_char; + } + goto numeric; + escape_char: + out.put(bslash); // Throws + put_char: + out.put(ch); // Throws + next: + follows_hex = false; + continue; + numeric: + out.put(bslash); // Throws + using D = typename std::make_unsigned::type; + char digits[] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + D val = ch; + if (val < 512) { + out.put(ctype.widen(digits[val / 64 ])); // Throws + out.put(ctype.widen(digits[val % 64 / 8])); // Throws + out.put(ctype.widen(digits[val % 8])); // Throws + goto next; + } + out.put(ctype.widen('x')); // Throws + const int max_hex_digits = (std::numeric_limits::digits + 3) / 4; + C buffer[max_hex_digits]; + int i = max_hex_digits; + while (val != 0) { + buffer[--i] = ctype.widen(digits[val % 16]); + val /= 16; + } + out.write(buffer + i, max_hex_digits - i); // Throws + follows_hex = true; + } + out.put(dquote); // Throws + } + return out; +} + + +} // namespace util +} // namespace realm + +#endif // REALM_UTIL_QUOTE_HPP diff --git a/Pods/Realm/include/core/realm/util/serializer.hpp b/Pods/Realm/include/core/realm/util/serializer.hpp index ff8f41ba7b..5f7fc0379e 100644 --- a/Pods/Realm/include/core/realm/util/serializer.hpp +++ b/Pods/Realm/include/core/realm/util/serializer.hpp @@ -80,6 +80,7 @@ struct SerialisationState std::string describe_column(ConstTableRef table, size_t col_ndx); std::string describe_columns(const LinkMap& link_map, size_t target_col_ndx); std::string get_column_name(ConstTableRef table, size_t col_ndx); + std::string get_backlink_column_name(ConstTableRef from, size_t col_ndx); std::string get_variable_name(ConstTableRef table); std::vector subquery_prefix_list; }; diff --git a/Pods/Realm/include/core/realm/util/shared_ptr.hpp b/Pods/Realm/include/core/realm/util/shared_ptr.hpp index f89b24fdc1..1a347017bb 100644 --- a/Pods/Realm/include/core/realm/util/shared_ptr.hpp +++ b/Pods/Realm/include/core/realm/util/shared_ptr.hpp @@ -51,7 +51,8 @@ class SharedPtr { SharedPtr& operator=(const SharedPtr& o) { - if (m_ptr == o.m_ptr) + // if (m_ptr == o.m_ptr) + if (this == &o) return *this; decref(); m_ptr = o.m_ptr; diff --git a/Pods/Realm/include/core/realm/util/string_view.hpp b/Pods/Realm/include/core/realm/util/string_view.hpp new file mode 100644 index 0000000000..74fdcb6d53 --- /dev/null +++ b/Pods/Realm/include/core/realm/util/string_view.hpp @@ -0,0 +1,478 @@ +/************************************************************************* + * + * REALM CONFIDENTIAL + * __________________ + * + * [2011] - [2015] Realm Inc + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Realm Incorporated and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to Realm Incorporated + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Realm Incorporated. + * + **************************************************************************/ +#ifndef REALM_UTIL_STRING_VIEW_HPP +#define REALM_UTIL_STRING_VIEW_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include + + +namespace realm { +namespace util { + +template> class BasicStringView { +public: + using value_type = C; + using traits_type = T; + using pointer = C*; + using const_pointer = const C*; + using reference = C&; + using const_reference = const C&; + using iterator = const_pointer; + using const_iterator = const_pointer; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; + + static constexpr size_type npos = size_type(-1); + + BasicStringView() noexcept; + BasicStringView(const std::basic_string&) noexcept; + BasicStringView(const char* data, size_type size) noexcept; + BasicStringView(const char* c_str) noexcept; + + explicit operator std::basic_string() const; + + const_iterator begin() const noexcept; + const_iterator end() const noexcept; + const_iterator cbegin() const noexcept; + const_iterator cend() const noexcept; + + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator rend() const noexcept; + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + + const_reference operator[](size_type i) const noexcept; + const_reference at(size_type i) const; + const_reference front() const noexcept; + const_reference back() const noexcept; + + const_pointer data() const noexcept; + size_type size() const noexcept; + bool empty() const noexcept; + + BasicStringView substr(size_type i = 0, size_type n = npos) const; + int compare(BasicStringView other) const noexcept; + size_type find(BasicStringView, size_type i = 0) const noexcept; + size_type find(C ch, size_type i = 0) const noexcept; + size_type find_first_of(BasicStringView, size_type i = 0) const noexcept; + size_type find_first_of(C ch, size_type i = 0) const noexcept; + size_type find_first_not_of(BasicStringView, size_type i = 0) const noexcept; + size_type find_first_not_of(C ch, size_type i = 0) const noexcept; + +private: + const char* m_data = nullptr; + std::size_t m_size = 0; +}; + +template bool operator==(BasicStringView, BasicStringView) noexcept; +template bool operator!=(BasicStringView, BasicStringView) noexcept; +template bool operator< (BasicStringView, BasicStringView) noexcept; +template bool operator> (BasicStringView, BasicStringView) noexcept; +template bool operator<=(BasicStringView, BasicStringView) noexcept; +template bool operator>=(BasicStringView, BasicStringView) noexcept; + +template +bool operator==(std::decay_t>, BasicStringView) noexcept; +template +bool operator!=(std::decay_t>, BasicStringView) noexcept; +template +bool operator< (std::decay_t>, BasicStringView) noexcept; +template +bool operator> (std::decay_t>, BasicStringView) noexcept; +template +bool operator<=(std::decay_t>, BasicStringView) noexcept; +template +bool operator>=(std::decay_t>, BasicStringView) noexcept; + +template +bool operator==(BasicStringView, std::decay_t>) noexcept; +template +bool operator!=(BasicStringView, std::decay_t>) noexcept; +template +bool operator< (BasicStringView, std::decay_t>) noexcept; +template +bool operator> (BasicStringView, std::decay_t>) noexcept; +template +bool operator<=(BasicStringView, std::decay_t>) noexcept; +template +bool operator>=(BasicStringView, std::decay_t>) noexcept; + + +template +std::basic_ostream& operator<<(std::basic_ostream&, BasicStringView); + + +using StringView = BasicStringView; + + + + + +// Implementation + +template +inline BasicStringView::BasicStringView() noexcept +{ +} + +template +inline BasicStringView::BasicStringView(const std::basic_string& str) noexcept : + m_data{str.data()}, + m_size{str.size()} +{ +} + +template +inline BasicStringView::BasicStringView(const char* data, size_type size) noexcept : + m_data{data}, + m_size{size} +{ +} + +template +inline BasicStringView::BasicStringView(const char* c_str) noexcept : + m_data{c_str}, + m_size{T::length(c_str)} +{ +} + +template +inline BasicStringView::operator std::basic_string() const +{ + return {m_data, m_size}; // Throws +} + +template +inline auto BasicStringView::begin() const noexcept -> const_iterator +{ + return m_data; +} + +template +inline auto BasicStringView::end() const noexcept -> const_iterator +{ + return m_data + m_size; +} + +template +inline auto BasicStringView::cbegin() const noexcept -> const_iterator +{ + return begin(); +} + +template +inline auto BasicStringView::cend() const noexcept -> const_iterator +{ + return end(); +} + +template +inline auto BasicStringView::rbegin() const noexcept -> const_reverse_iterator +{ + return const_reverse_iterator{end()}; +} + +template +inline auto BasicStringView::rend() const noexcept -> const_reverse_iterator +{ + return const_reverse_iterator{begin()}; +} + +template +inline auto BasicStringView::crbegin() const noexcept -> const_reverse_iterator +{ + return rbegin(); +} + +template +inline auto BasicStringView::crend() const noexcept -> const_reverse_iterator +{ + return rend(); +} + +template +inline auto BasicStringView::operator[](size_type i) const noexcept -> const_reference +{ + return m_data[i]; +} + +template +inline auto BasicStringView::at(size_type i) const -> const_reference +{ + if (REALM_LIKELY(i < m_size)) + return m_data[i]; + throw std::out_of_range("index"); +} + +template +inline auto BasicStringView::front() const noexcept -> const_reference +{ + return m_data[0]; +} + +template +inline auto BasicStringView::back() const noexcept -> const_reference +{ + return m_data[m_size - 1]; +} + +template +inline auto BasicStringView::data() const noexcept -> const_pointer +{ + return m_data; +} + +template +inline auto BasicStringView::size() const noexcept -> size_type +{ + return m_size; +} + +template +inline bool BasicStringView::empty() const noexcept +{ + return (size() == 0); +} + +template +inline BasicStringView BasicStringView::substr(size_type i, size_type n) const +{ + if (REALM_LIKELY(i <= m_size)) { + size_type m = std::min(n, m_size - i); + return BasicStringView{m_data + i, m}; + } + throw std::out_of_range("index"); +} + +template +inline int BasicStringView::compare(BasicStringView other) const noexcept +{ + size_type n = std::min(m_size, other.m_size); + int ret = T::compare(m_data, other.m_data, n); + if (REALM_LIKELY(ret != 0)) + return ret; + if (m_size < other.m_size) + return -1; + if (m_size > other.m_size) + return 1; + return 0; +} + +template +inline auto BasicStringView::find(BasicStringView v, size_type i) const noexcept -> + size_type +{ + if (REALM_LIKELY(!v.empty())) { + if (REALM_LIKELY(i < m_size)) { + const C* p = std::search(begin() + i, end(), v.begin(), v.end()); + if (p != end()) + return size_type(p - begin()); + } + return npos; + } + return i; +} + +template +inline auto BasicStringView::find(C ch, size_type i) const noexcept -> size_type +{ + if (REALM_LIKELY(i < m_size)) { + const C* p = std::find(begin() + i, end(), ch); + if (p != end()) + return size_type(p - begin()); + } + return npos; +} + +template +inline auto BasicStringView::find_first_of(BasicStringView v, + size_type i) const noexcept -> size_type +{ + for (size_type j = i; j < m_size; ++j) { + if (REALM_LIKELY(v.find(m_data[j]) == npos)) + continue; + return j; + } + return npos; +} + +template +inline auto BasicStringView::find_first_of(C ch, size_type i) const noexcept -> size_type +{ + for (size_type j = i; j < m_size; ++j) { + if (REALM_UNLIKELY(m_data[j] == ch)) + return j; + } + return npos; +} + +template +inline auto BasicStringView::find_first_not_of(BasicStringView v, + size_type i) const noexcept -> size_type +{ + for (size_type j = i; j < m_size; ++j) { + if (REALM_UNLIKELY(v.find(m_data[j]) == npos)) + return j; + } + return npos; +} + +template +inline auto BasicStringView::find_first_not_of(C ch, size_type i) const noexcept -> size_type +{ + for (size_type j = i; j < m_size; ++j) { + if (REALM_UNLIKELY(m_data[j] != ch)) + return j; + } + return npos; +} + +template +inline bool operator==(BasicStringView lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) == 0); +} + +template +inline bool operator!=(BasicStringView lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) != 0); +} + +template +inline bool operator<(BasicStringView lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) < 0); +} + +template +inline bool operator>(BasicStringView lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) > 0); +} + +template +inline bool operator<=(BasicStringView lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) <= 0); +} + +template +inline bool operator>=(BasicStringView lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) >= 0); +} + +template +inline bool operator==(std::decay_t> lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) == 0); +} + +template +inline bool operator!=(std::decay_t> lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) != 0); +} + +template +inline bool operator<(std::decay_t> lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) < 0); +} + +template +inline bool operator>(std::decay_t> lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) > 0); +} + +template +inline bool operator<=(std::decay_t> lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) <= 0); +} + +template +inline bool operator>=(std::decay_t> lhs, BasicStringView rhs) noexcept +{ + return (lhs.compare(rhs) >= 0); +} + +template +inline bool operator==(BasicStringView lhs, std::decay_t> rhs) noexcept +{ + return (lhs.compare(rhs) == 0); +} + +template +inline bool operator!=(BasicStringView lhs, std::decay_t> rhs) noexcept +{ + return (lhs.compare(rhs) != 0); +} + +template +inline bool operator<(BasicStringView lhs, std::decay_t> rhs) noexcept +{ + return (lhs.compare(rhs) < 0); +} + +template +inline bool operator>(BasicStringView lhs, std::decay_t> rhs) noexcept +{ + return (lhs.compare(rhs) > 0); +} + +template +inline bool operator<=(BasicStringView lhs, std::decay_t> rhs) noexcept +{ + return (lhs.compare(rhs) <= 0); +} + +template +inline bool operator>=(BasicStringView lhs, std::decay_t> rhs) noexcept +{ + return (lhs.compare(rhs) >= 0); +} + +template +inline std::basic_ostream& operator<<(std::basic_ostream& out, + BasicStringView view) +{ + typename std::basic_ostream::sentry sentry{out}; + if (REALM_LIKELY(sentry)) + out.write(view.data(), view.size()); + return out; +} + +} // namespace util +} // namespace realm + +#endif // REALM_UTIL_STRING_VIEW_HPP diff --git a/Pods/Realm/include/core/realm/util/substitute.hpp b/Pods/Realm/include/core/realm/util/substitute.hpp new file mode 100644 index 0000000000..b551f3116e --- /dev/null +++ b/Pods/Realm/include/core/realm/util/substitute.hpp @@ -0,0 +1,373 @@ +/************************************************************************* + * + * REALM CONFIDENTIAL + * __________________ + * + * [2011] - [2015] Realm Inc + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Realm Incorporated and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to Realm Incorporated + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Realm Incorporated. + * + **************************************************************************/ +#ifndef REALM_UTIL_SUBSTITUTE_HPP +#define REALM_UTIL_SUBSTITUTE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +namespace realm { +namespace util { +namespace _private { + +class SubstituterBase { +protected: + template struct FindArg1; + template struct FindArg2; + static StderrLogger s_default_logger; +}; + +} // namespace _private + + +struct SubstituterConfig { + /// Allow parsing to be considered successful even when syntax errors are + /// detected. When enabled, logging will happen on `warn`, instead of + /// `error` level. + bool lenient = false; + + /// The logger to be used by default. If left unspecified, the default + /// logger is one that logs to STDERR. In any case, logging happens only + /// during parsing. + Logger* logger = nullptr; +}; + + +/// Perform variable substitutions in text. +/// +/// A variable reference generally has the form `@{}`, where `` is +/// the variable name. For example, if the variable name is `x`, then `@{x}` is +/// a reference to that variable. If the variable name consists of a single +/// letter, then a shorter form of reference, `@` is available, i.e., +/// since `x` is a single letter, `@x` is a reference to `x`. As a special rule, +/// `@@` is substituted by `@`. +/// +/// Example of use: +/// +/// struct CtxA { int y = 0; }; +/// struct CtxB { int x = 0; }; +/// using Subst = Substituter; +/// Subst subst; +/// subst["x"] = &CtxB::x; +/// subst["y"] = [](std::ostream& out, const CtxA& a, const CtxB&) { +/// out << a.y; +/// }; +/// Subst::Template templ; +/// if (subst.parse("<@x:@y>\n", templ)) { +/// CtxA a; +/// CtxB b; +/// for (int i = 0; i < 3; ++i) { +/// templ.expand(std::cout, a, b); +/// a.y += 1; +/// b.x += 2; +/// } +/// } +/// +/// This code should write +/// +/// <0:0> +/// <2:1> +/// <4:2> +/// +/// to STDOUT. +template class Substituter : private _private::SubstituterBase { +public: + using EvalFunc = void(std::ostream&, A&...); + class ProtoDef; + class Template; + + Substituter(SubstituterConfig = {}) noexcept; + + ProtoDef operator[](const char* name) noexcept; + + bool expand(StringView text, std::ostream&, A&&...) const; + + bool parse(StringView text, Template&) const; + bool parse(StringView text, Template&, Logger&) const; + +private: + using size_type = StringView::size_type; + struct Substitution; + + const bool m_lenient; + Logger& m_logger; + + using Variables = std::map>; + Variables m_variables; + + void define(const char* name, std::function); +}; + + + +template class Substituter::ProtoDef { +public: + template void operator=(T*); + template void operator=(T C::*); + void operator=(std::function); + +private: + Substituter& m_substituter; + const char* m_name; + + ProtoDef(Substituter& substituter, const char* name) noexcept; + + friend class Substituter; +}; + + + +template class Substituter::Template { +public: + /// Uses std::locale::classic(). + std::string expand(A&&...) const; + + void expand(std::ostream&, A...) const; + + bool refers_to(const char* name) const noexcept; + +private: + StringView m_text; + std::vector m_substitutions; + + friend class Substituter; +}; + + + + + +// Implementation + +namespace _private { + +template struct SubstituterBase::FindArg2 { + static const T& find(const A&, const B&... b) noexcept + { + return FindArg1::find(b...); + } +}; + +template +struct SubstituterBase::FindArg2 { + static const T& find(const A& a, const B&...) noexcept + { + return a; + } +}; + +template struct SubstituterBase::FindArg1 { + static const T& find(const A& a, const B&... b) noexcept + { + using P = typename std::remove_reference::type*; + return FindArg2::value, A, B...>::find(a, b...); + } +}; + +} // namespace _private + +template struct Substituter::Substitution { + size_type begin, end; + const typename Variables::value_type* var_def; +}; + +template inline Substituter::Substituter(SubstituterConfig config) noexcept : + m_lenient{config.lenient}, + m_logger{config.logger ? *config.logger : s_default_logger} +{ +} + +template inline auto Substituter::operator[](const char* name) noexcept -> ProtoDef +{ + return ProtoDef{*this, name}; +} + +template +inline bool Substituter::expand(StringView text, std::ostream& out, A&&... arg) const +{ + Template templ; + if (parse(text, templ)) { // Throws + templ.expand(out, std::forward(arg)...); // Throws + return true; + } + return false; +} + +template inline bool Substituter::parse(StringView text, Template& templ) const +{ + return parse(text, templ, m_logger); // Throws +} + +template +bool Substituter::parse(StringView text, Template& templ, Logger& logger) const +{ + bool error = false; + Logger::Level log_level = (m_lenient ? Logger::Level::warn : Logger::Level::error); + std::vector substitutions; + StringView var_name; + size_type curr = 0; + size_type end = text.size(); + for (;;) { + size_type i = text.find('@', curr); + if (i == StringView::npos) + break; + if (i + 1 == end) { + logger.log(log_level, "Unterminated `@` at end of text"); // Throws + error = true; + break; + } + char ch = text[i + 1]; + if (ch == '{') { + size_type j = text.find('}', i + 2); + if (j == StringView::npos) { + logger.log(log_level, "Unterminated `@{`"); // Throws + error = true; + curr = i + 2; + continue; + } + var_name = text.substr(i + 2, j - (i + 2)); + curr = j + 1; + } + else { + var_name = text.substr(i + 1, 1); // Throws + curr = i + 2; + } + const typename Variables::value_type* var_def = nullptr; + if (ch != '@') { + auto k = m_variables.find(var_name); + if (k == m_variables.end()) { + logger.log(log_level, "Undefined variable `%1` in substitution `%2`", var_name, + text.substr(i, curr - i)); // Throws + error = true; + continue; + } + var_def = &*k; + } + substitutions.push_back({i, curr, var_def}); // Throws + } + if (error && !m_lenient) + return false; + templ.m_text = text; + templ.m_substitutions = std::move(substitutions); + return true; +} + +template +inline void Substituter::define(const char* name, std::function func) +{ + auto p = m_variables.emplace(name, std::move(func)); // Throws + bool was_inserted = p.second; + if (!was_inserted) + throw std::runtime_error("Multiple definitions for same variable name"); +} + +template template inline void Substituter::ProtoDef::operator=(T* var) +{ + *this = [var](std::ostream& out, const A&...) { + out << *var; // Throws + }; +} + +template +template inline void Substituter::ProtoDef::operator=(T C::* var) +{ + *this = [var](std::ostream& out, const A&... arg) { + const C& obj = FindArg1::find(arg...); + out << obj.*var; // Throws + }; +} + +template +inline void Substituter::ProtoDef::operator=(std::function func) +{ + m_substituter.define(m_name, std::move(func)); // Throws +} + +template +inline Substituter::ProtoDef::ProtoDef(Substituter& substituter, const char* name) noexcept : + m_substituter{substituter}, + m_name{name} +{ +} + +template std::string Substituter::Template::expand(A&&... arg) const +{ + std::ostringstream out; + out.imbue(std::locale::classic()); + expand(out, std::forward(arg)...); // Throws + std::string str = std::move(out).str(); // Throws + return str; +} + +template void Substituter::Template::expand(std::ostream& out, A... arg) const +{ + std::ios_base::fmtflags flags = out.flags(); + try { + size_type curr = 0; + for (const Substitution& subst: m_substitutions) { + out << m_text.substr(curr, subst.begin - curr); // Throws + if (subst.var_def) { + const std::function& eval_func = subst.var_def->second; + eval_func(out, arg...); // Throws + out.flags(flags); + } + else { + out << "@"; // Throws + } + curr = subst.end; + } + out << m_text.substr(curr); // Throws + } + catch (...) { + out.flags(flags); + throw; + } +} + +template +inline bool Substituter::Template::refers_to(const char* name) const noexcept +{ + StringView name_2 = name; + for (const auto& subst: m_substitutions) { + if (subst.var_def) { + if (name_2 != subst.var_def->first) + continue; + return true; + } + } + return false; +} + +} // namespace util +} // namespace realm + +#endif // REALM_UTIL_SUBSTITUTE_HPP diff --git a/Pods/Realm/include/core/realm/util/time.hpp b/Pods/Realm/include/core/realm/util/time.hpp index 1503e24711..75d9861325 100644 --- a/Pods/Realm/include/core/realm/util/time.hpp +++ b/Pods/Realm/include/core/realm/util/time.hpp @@ -46,15 +46,19 @@ std::tm gmtime(std::time_t); template void put_time(std::basic_ostream&, const std::tm&, const C* format = "%FT%T%z"); -/// @{ These functions combine localtime() or gmtime() with put_time() and +// @{ +/// These functions combine localtime() or gmtime() with put_time() and /// std::ostringstream. For detals on the format string, see /// std::put_time(). These function are thread safe. std::string format_local_time(std::time_t, const char* format = "%FT%T%z"); std::string format_utc_time(std::time_t, const char* format = "%FT%T%z"); -/// @} +// @} + +/// The local time since the epoch in microseconds. +/// +/// FIXME: This function has nothing to do with local time. +double local_time_microseconds(); -/// Formatted time stamp of current local time with millisecond precision -std::string now_format_local_time_milliseconds(); diff --git a/Pods/Realm/include/core/realm/util/timestamp_formatter.hpp b/Pods/Realm/include/core/realm/util/timestamp_formatter.hpp new file mode 100644 index 0000000000..47e4ce3f84 --- /dev/null +++ b/Pods/Realm/include/core/realm/util/timestamp_formatter.hpp @@ -0,0 +1,110 @@ +/************************************************************************* + * + * REALM CONFIDENTIAL + * __________________ + * + * [2011] - [2016] Realm Inc + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Realm Incorporated and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to Realm Incorporated + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Realm Incorporated. + * + **************************************************************************/ + +#ifndef REALM_UTIL_TIMESTAMP_FORMATTER_HPP +#define REALM_UTIL_TIMESTAMP_FORMATTER_HPP + +#include +#include +#include +#include + +#include +#include +#include +#include + + +namespace realm { +namespace util { + +class TimestampFormatter { +public: + using char_type = char; + using string_view_type = util::BasicStringView; + + enum class Precision { seconds, milliseconds, microseconds, nanoseconds }; + + /// Default configuration for corresponds to local time in ISO 8601 date and + /// time format. + struct Config { + Config() {} + + bool utc_time = false; + + Precision precision = Precision::seconds; + + /// The format of the timestamp as understood by std::put_time(), except + /// that the first occurrence of `%S` (also taking into account the `%S` + /// that is an implicit part of `%T`) is expanded to `SS.fff` if \ref + /// precision is Precision::milliseconds, or to `SS.ffffff` if \ref + /// precision is Precision::microseconds, or to `SS.fffffffff` if \ref + /// precision is Precision::nanoseconds, where `SS` is what `%S` expands + /// to conventionally. + const char* format = "%FT%T%z"; + }; + + TimestampFormatter(Config = {}); + + // FIXME: Use std::timespec in C++17. + string_view_type format(std::time_t time, long nanoseconds); + + template string_view_type format(std::chrono::time_point); + +private: + using memory_output_stream_type = util::MemoryOutputStream; + using format_segments_type = std::pair; + + const bool m_utc_time; + const Precision m_precision; + const format_segments_type m_format_segments; + char_type m_buffer[64]; + memory_output_stream_type m_out; + + static format_segments_type make_format_segments(const Config&); +}; + + + + + +// Implementation + +template +inline auto TimestampFormatter::format(std::chrono::time_point time) -> string_view_type +{ + using clock_type = B; + using time_point_type = std::chrono::time_point; + std::time_t time_2 = clock_type::to_time_t(time); + time_point_type time_3 = clock_type::from_time_t(time_2); + if (REALM_UNLIKELY(time_3 > time)) { + --time_2; + time_3 = clock_type::from_time_t(time_2); + } + long nanoseconds = + int(std::chrono::duration_cast(time - time_3).count()); + REALM_ASSERT(nanoseconds >= 0 && nanoseconds < 1000000000); + return format(time_2, nanoseconds); // Throws +} + +} // namespace util +} // namespace realm + +#endif // REALM_UTIL_TIMESTAMP_FORMATTER_HPP diff --git a/Pods/Realm/include/core/realm/util/timestamp_logger.hpp b/Pods/Realm/include/core/realm/util/timestamp_logger.hpp new file mode 100644 index 0000000000..a9789a5a4e --- /dev/null +++ b/Pods/Realm/include/core/realm/util/timestamp_logger.hpp @@ -0,0 +1,49 @@ +/************************************************************************* + * + * REALM CONFIDENTIAL + * __________________ + * + * [2011] - [2016] Realm Inc + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Realm Incorporated and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to Realm Incorporated + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Realm Incorporated. + * + **************************************************************************/ + +#ifndef REALM_UTIL_TIMESTAMP_LOGGER_HPP +#define REALM_UTIL_TIMESTAMP_LOGGER_HPP + +#include +#include + + +namespace realm { +namespace util { + +class TimestampStderrLogger : public RootLogger { +public: + using Precision = TimestampFormatter::Precision; + using Config = TimestampFormatter::Config; + + explicit TimestampStderrLogger(Config = {}); + +protected: + void do_log(Logger::Level, std::string message) override; + +private: + TimestampFormatter m_formatter; +}; + + +} // namespace util +} // namespace realm + +#endif // REALM_UTIL_TIMESTAMP_LOGGER_HPP diff --git a/Pods/Realm/include/core/realm/util/value_reset_guard.hpp b/Pods/Realm/include/core/realm/util/value_reset_guard.hpp index 27821d4ed6..2dc641967f 100644 --- a/Pods/Realm/include/core/realm/util/value_reset_guard.hpp +++ b/Pods/Realm/include/core/realm/util/value_reset_guard.hpp @@ -25,54 +25,62 @@ namespace realm { namespace util { -template class ValueResetGuard { +template class ValueResetGuard { public: - ValueResetGuard(T& var, T val); + ValueResetGuard(T& var, U val); ValueResetGuard(ValueResetGuard&&); ~ValueResetGuard(); private: T* m_var; - T m_val; + U m_val; }; +/// Set \a var to `T{}` when the returned object is destroyed. +template ValueResetGuard make_value_reset_guard(T& var); + /// Set \a var to \a val when the returned object is destroyed. -template inline ValueResetGuard make_value_reset_guard(T& var, T val = {}); +template ValueResetGuard make_value_reset_guard(T& var, U val); /// Set \a var to \a val_1 immediately, and then to \a val_2 when the returned /// object is destroyed. -template inline ValueResetGuard make_temp_assign(T& var, T val_1, T val_2 = {}); +template ValueResetGuard make_temp_assign(T& var, U val_1, U val_2 = {}); // Implementation -template inline ValueResetGuard::ValueResetGuard(T& var, T val) : +template inline ValueResetGuard::ValueResetGuard(T& var, U val) : m_var{&var}, m_val{std::move(val)} { } -template inline ValueResetGuard::ValueResetGuard(ValueResetGuard&& other) : +template inline ValueResetGuard::ValueResetGuard(ValueResetGuard&& other) : m_var{other.m_var}, m_val{std::move(other.m_val)} { other.m_var = nullptr; } -template inline ValueResetGuard::~ValueResetGuard() +template inline ValueResetGuard::~ValueResetGuard() { if (m_var) *m_var = std::move(m_val); } -template inline ValueResetGuard make_value_reset_guard(T& var, T val) +template inline ValueResetGuard make_value_reset_guard(T& var) +{ + return ValueResetGuard(var, T{}); +} + +template inline ValueResetGuard make_value_reset_guard(T& var, U val) { - return ValueResetGuard(var, std::move(val)); + return ValueResetGuard(var, std::move(val)); } -template inline ValueResetGuard make_temp_assign(T& var, T val_1, T val_2) +template inline ValueResetGuard make_temp_assign(T& var, U val_1, U val_2) { var = std::move(val_1); return make_value_reset_guard(var, std::move(val_2)); diff --git a/Pods/Realm/include/core/realm/util/websocket.hpp b/Pods/Realm/include/core/realm/util/websocket.hpp index bdf33a9fed..8090bb5c25 100644 --- a/Pods/Realm/include/core/realm/util/websocket.hpp +++ b/Pods/Realm/include/core/realm/util/websocket.hpp @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -74,16 +75,20 @@ class Config { /// websocket_read_error_handler() and websocket_write_error_handler() are called when an /// error occurs on the underlying stream given by the async_read and async_write functions above. /// The error_code is passed through. + /// /// websocket_handshake_error_handler() will be called when there is an error in the handshake /// such as "404 Not found". + /// /// websocket_protocol_error_handler() is called when there is an protocol error in the incoming /// websocket messages. + /// /// After calling any of these error callbacks, the Socket will move into the stopped state, and /// no more messages should be sent, or will be received. /// It is safe to destroy the WebSocket object in these handlers. virtual void websocket_read_error_handler(std::error_code) = 0; virtual void websocket_write_error_handler(std::error_code) = 0; - virtual void websocket_handshake_error_handler(std::error_code, const HTTPHeaders&) = 0; + virtual void websocket_handshake_error_handler(std::error_code, const HTTPHeaders*, + const util::StringView* body) = 0; virtual void websocket_protocol_error_handler(std::error_code) = 0; //@} diff --git a/Pods/Realm/include/core/realm/version.hpp b/Pods/Realm/include/core/realm/version.hpp index 24b15821e0..eb6d8f768e 100644 --- a/Pods/Realm/include/core/realm/version.hpp +++ b/Pods/Realm/include/core/realm/version.hpp @@ -21,13 +21,9 @@ #include -// Do not use `cmakedefine` here, as certain versions can be 0, which CMake -// interprets as being undefined. -#define REALM_VERSION_MAJOR 5 -#define REALM_VERSION_MINOR 12 -#define REALM_VERSION_PATCH 1 -#define REALM_VERSION_EXTRA "" -#define REALM_VERSION_STRING "5.12.1" +#ifndef REALM_VERSION_MAJOR +#include +#endif #define REALM_PRODUCT_NAME "realm-core" #define REALM_VER_CHUNK "[" REALM_PRODUCT_NAME "-" REALM_VERSION_STRING "]" diff --git a/Pods/Realm/include/core/realm/version_id.hpp b/Pods/Realm/include/core/realm/version_id.hpp index 069b2c7752..807146b079 100644 --- a/Pods/Realm/include/core/realm/version_id.hpp +++ b/Pods/Realm/include/core/realm/version_id.hpp @@ -41,27 +41,27 @@ struct VersionID { index = initial_index; } - bool operator==(const VersionID& other) + bool operator==(const VersionID& other) const { return version == other.version; } - bool operator!=(const VersionID& other) + bool operator!=(const VersionID& other) const { return version != other.version; } - bool operator<(const VersionID& other) + bool operator<(const VersionID& other) const { return version < other.version; } - bool operator<=(const VersionID& other) + bool operator<=(const VersionID& other) const { return version <= other.version; } - bool operator>(const VersionID& other) + bool operator>(const VersionID& other) const { return version > other.version; } - bool operator>=(const VersionID& other) + bool operator>=(const VersionID& other) const { return version >= other.version; } diff --git a/Pods/Realm/include/core/realm/version_numbers.hpp b/Pods/Realm/include/core/realm/version_numbers.hpp new file mode 100644 index 0000000000..12dc2c43e2 --- /dev/null +++ b/Pods/Realm/include/core/realm/version_numbers.hpp @@ -0,0 +1,30 @@ +/************************************************************************* + * + * Copyright 2016 Realm Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + **************************************************************************/ + +#ifndef REALM_VERSION_NUMBERS_HPP +#define REALM_VERSION_NUMBERS_HPP + +// Do not use `cmakedefine` here, as certain versions can be 0, which CMake +// interprets as being undefined. +#define REALM_VERSION_MAJOR 5 +#define REALM_VERSION_MINOR 23 +#define REALM_VERSION_PATCH 5 +#define REALM_VERSION_EXTRA "" +#define REALM_VERSION_STRING "5.23.5" + +#endif // REALM_VERSION_NUMBERS_HPP diff --git a/Pods/Realm/include/core/realm/views.hpp b/Pods/Realm/include/core/realm/views.hpp index 7925b27a0a..ee54c6f98d 100644 --- a/Pods/Realm/include/core/realm/views.hpp +++ b/Pods/Realm/include/core/realm/views.hpp @@ -21,10 +21,10 @@ #include #include - #include #include +#include namespace realm { @@ -37,7 +37,7 @@ class BaseDescriptor { BaseDescriptor() = default; virtual ~BaseDescriptor() = default; virtual bool is_valid() const noexcept = 0; - virtual std::string get_description(TableRef attached_table) const = 0; + virtual std::string get_description(ConstTableRef attached_table) const = 0; virtual std::unique_ptr clone() const = 0; virtual DescriptorExport export_for_handover() const = 0; virtual DescriptorType get_type() const = 0; @@ -46,6 +46,24 @@ class BaseDescriptor { // Forward declaration needed for deleted ColumnsDescriptor constructor class SortDescriptor; +struct LinkPathPart { + LinkPathPart(size_t col_ndx) + : column_ndx(col_ndx) + { + } + + LinkPathPart(size_t col_ndx, ConstTableRef source) + : column_ndx(col_ndx) + , from(source) + { + } + + size_t column_ndx; + // "from" is omitted for forward links, if it is valid then + // this path describes a backlink originating from the column from[column_ndx] + ConstTableRef from; +}; + // ColumnsDescriptor encapsulates a reference to a set of columns (possibly over // links), which is used to indicate the criteria columns for sort and distinct. // Although the input is column indices, it does not rely on those indices @@ -87,12 +105,38 @@ class ColumnsDescriptor : public BaseDescriptor { // handover support DescriptorExport export_for_handover() const override; - std::string get_description(TableRef attached_table) const override; + std::string get_description(ConstTableRef attached_table) const override; protected: + std::string description_for_prefix(std::string prefix, ConstTableRef attached_table) const; + std::vector> m_columns; }; +class IncludeDescriptor : public ColumnsDescriptor { +public: + IncludeDescriptor() = default; + // This constructor may throw an InvalidPathError exception if the path is not valid. + // A valid path consists of any number of connected link/list/backlink paths and always ends with a backlink + // column. + IncludeDescriptor(const Table& table, const std::vector>& column_indices); + ~IncludeDescriptor() = default; + std::string get_description(ConstTableRef attached_table) const override; + std::unique_ptr clone() const override; + DescriptorExport export_for_handover() const override; + DescriptorType get_type() const override + { + return DescriptorType::Include; + } + void append(const IncludeDescriptor& other); + void + report_included_backlinks(const Table* origin, size_t row_ndx, + std::function&)> reporter) const; + +private: + std::vector> m_backlink_sources; // stores a detached TableRef for non-backlink columns +}; + class SortDescriptor : public ColumnsDescriptor { public: // Create a sort descriptor for the given columns on the given table. @@ -115,7 +159,7 @@ class SortDescriptor : public ColumnsDescriptor { // handover support DescriptorExport export_for_handover() const override; - std::string get_description(TableRef attached_table) const override; + std::string get_description(ConstTableRef attached_table) const override; private: std::vector m_ascending; @@ -126,7 +170,7 @@ class LimitDescriptor : public BaseDescriptor { LimitDescriptor(size_t limit); virtual ~LimitDescriptor() = default; bool is_valid() const noexcept override { return true; } - std::string get_description(TableRef attached_table) const override; + std::string get_description(ConstTableRef attached_table) const override; std::unique_ptr clone() const override; DescriptorExport export_for_handover() const override; size_t get_limit() const noexcept { return m_limit; } @@ -154,9 +198,18 @@ class DescriptorOrdering { void append_sort(SortDescriptor sort); void append_distinct(DistinctDescriptor distinct); void append_limit(LimitDescriptor limit); + void append_include(IncludeDescriptor include); + + /// Remove all LIMIT statements from this descriptor ordering, returning the + /// minimum LIMIT value that existed. If there was no LIMIT statement, + /// returns `none`. + util::Optional remove_all_limits(); + bool descriptor_is_sort(size_t index) const; bool descriptor_is_distinct(size_t index) const; bool descriptor_is_limit(size_t index) const; + bool descriptor_is_include(size_t index) const; + DescriptorType get_type(size_t index) const; bool is_empty() const { return m_descriptors.empty(); } size_t size() const { return m_descriptors.size(); } @@ -164,9 +217,11 @@ class DescriptorOrdering { bool will_apply_sort() const; bool will_apply_distinct() const; bool will_apply_limit() const; + bool will_apply_include() const; realm::util::Optional get_min_limit() const; bool will_limit_to_zero() const; - std::string get_description(TableRef target_table) const; + IncludeDescriptor compile_included_backlinks() const; + std::string get_description(ConstTableRef target_table) const; // handover support using HandoverPatch = std::unique_ptr; diff --git a/Pods/Realm/include/impl/apple/external_commit_helper.hpp b/Pods/Realm/include/impl/apple/external_commit_helper.hpp index c87d8b2422..1fc99ed7ad 100644 --- a/Pods/Realm/include/impl/apple/external_commit_helper.hpp +++ b/Pods/Realm/include/impl/apple/external_commit_helper.hpp @@ -16,7 +16,7 @@ // //////////////////////////////////////////////////////////////////////////// -#include +#include namespace realm { class Realm; @@ -59,7 +59,7 @@ class ExternalCommitHelper { RealmCoordinator& m_parent; // The listener thread - std::future m_thread; + std::thread m_thread; // Pipe which is waited on for changes and written to when there is a new // commit to notify others of. When using a named pipe m_notify_fd is diff --git a/Pods/Realm/include/impl/realm_coordinator.hpp b/Pods/Realm/include/impl/realm_coordinator.hpp index e67e0eeece..2edc482cf2 100644 --- a/Pods/Realm/include/impl/realm_coordinator.hpp +++ b/Pods/Realm/include/impl/realm_coordinator.hpp @@ -58,6 +58,23 @@ class RealmCoordinator : public std::enable_shared_from_this { // configuration is compatible with the existing one std::shared_ptr get_realm(Realm::Config config); std::shared_ptr get_realm(); +#if REALM_ENABLE_SYNC + // Get a thread-local shared Realm with the given configuration + // If the Realm is not already present, it will be fully downloaded before being returned. + // If the Realm is already on disk, it will be fully synchronized before being returned. + // Timeouts and interruptions are not handled by this method and must be handled by upper layers. + std::shared_ptr get_synchronized_realm(Realm::Config config); +#endif + + // Get a Realm which is not bound to the current execution context + ThreadSafeReference get_unbound_realm(); + + // Get the existing cached Realm for the given execution context if it exists + std::shared_ptr get_cached_realm(Realm::Config const&, AnyExecutionContextID); + + // Bind an unbound Realm to a specific execution context. The Realm must + // be managed by this coordinator. + void bind_to_context(Realm& realm, AnyExecutionContextID); Realm::Config get_config() const { return m_config; } @@ -143,9 +160,11 @@ class RealmCoordinator : public std::enable_shared_from_this { #if REALM_ENABLE_SYNC // A work queue that can be used to perform background work related to partial sync. - partial_sync::WorkQueue& partial_sync_work_queue(); + _impl::partial_sync::WorkQueue& partial_sync_work_queue(); #endif + AuditInterface* audit_context() const noexcept { return m_audit_context.get(); } + private: Realm::Config m_config; @@ -184,11 +203,15 @@ class RealmCoordinator : public std::enable_shared_from_this { std::unique_ptr m_partial_sync_work_queue; #endif + std::shared_ptr m_audit_context; + // must be called with m_notifier_mutex locked void pin_version(VersionID version); void set_config(const Realm::Config&); - void create_sync_session(); + void create_sync_session(bool force_client_resync, bool validate_sync_history); + void do_get_realm(Realm::Config config, std::shared_ptr& realm, + std::unique_lock& realm_lock, bool bind_to_context=true); void run_async_notifiers(); void open_helper_shared_group(); diff --git a/Pods/Realm/include/impl/weak_realm_notifier.hpp b/Pods/Realm/include/impl/weak_realm_notifier.hpp index f0b3ad4b38..4a703435b2 100644 --- a/Pods/Realm/include/impl/weak_realm_notifier.hpp +++ b/Pods/Realm/include/impl/weak_realm_notifier.hpp @@ -39,7 +39,7 @@ namespace _impl { // a Realm instance is released from within a function holding the cache lock. class WeakRealmNotifier { public: - WeakRealmNotifier(const std::shared_ptr& realm, bool cache); + WeakRealmNotifier(const std::shared_ptr& realm, bool cache, bool bind_to_context); ~WeakRealmNotifier(); // Get a strong reference to the cached realm @@ -59,6 +59,8 @@ class WeakRealmNotifier { void notify(); + void bind_to_execution_context(AnyExecutionContextID context); + private: std::weak_ptr m_realm; AnyExecutionContextID m_execution_context; diff --git a/Pods/Realm/include/keypath_helpers.hpp b/Pods/Realm/include/keypath_helpers.hpp new file mode 100644 index 0000000000..4acd0db191 --- /dev/null +++ b/Pods/Realm/include/keypath_helpers.hpp @@ -0,0 +1,95 @@ +//////////////////////////////////////////////////////////////////////////// +// +// Copyright 2017 Realm Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////// + +#include "object_schema.hpp" +#include "object_store.hpp" +#include "shared_realm.hpp" + +#include + +namespace realm { +/// Create the mappings from user defined names of linkingObjects into the verbose +/// syntax that the parser supports: @links.Class.property. +inline void alias_backlinks(parser::KeyPathMapping& mapping, Realm& realm) +{ + for (auto& object_schema : realm.schema()) { + for (Property const& property : object_schema.computed_properties) { + if (property.type == PropertyType::LinkingObjects) { + auto table = ObjectStore::table_for_object_type(realm.read_group(), object_schema.name); + auto native_name = util::format("@links.%1.%2", + ObjectStore::table_name_for_object_type(property.object_type), + property.link_origin_property_name); + mapping.add_mapping(table, property.name, std::move(native_name)); + } + } + } +} + +/// Generate an IncludeDescriptor from a list of key paths. +/// +/// Each key path in the list is a period ('.') seperated property path, beginning +/// at the class defined by `object_schema` and ending with a linkingObjects relationship. +inline IncludeDescriptor generate_include_from_keypaths(std::vector const& paths, + Realm& realm, ObjectSchema const& object_schema, + parser::KeyPathMapping& mapping) +{ + auto base_table = ObjectStore::table_for_object_type(realm.read_group(), object_schema.name); + REALM_ASSERT(base_table); + // FIXME: the following is mostly copied from core's query_builder::apply_ordering + std::vector> properties; + for (size_t i = 0; i < paths.size(); ++i) { + StringData keypath = paths[i]; + if (keypath.size() == 0) { + throw InvalidPathError("missing property name while generating INCLUDE from keypaths"); + } + + util::KeyPath path = util::key_path_from_string(keypath); + size_t index = 0; + std::vector links; + ConstTableRef cur_table = base_table; + + while (index < path.size()) { + parser::KeyPathElement element = mapping.process_next_path(cur_table, path, index); // throws if invalid + // backlinks use type_LinkList since list operations apply to them (and is_backlink is set) + if (element.col_type != type_Link && element.col_type != type_LinkList) { + throw InvalidPathError(util::format("Property '%1' is not a link in object of type '%2' in 'INCLUDE' clause", + element.table->get_column_name(element.col_ndx), + get_printable_table_name(*element.table))); + } + if (element.table == cur_table) { + if (element.col_ndx == realm::npos) { + cur_table = element.table; + } + else { + cur_table = element.table->get_link_target(element.col_ndx); // advance through forward link + } + } + else { + cur_table = element.table; // advance through backlink + } + ConstTableRef tr; + if (element.is_backlink) { + tr = element.table; + } + links.emplace_back(element.col_ndx, tr); + } + properties.push_back(std::move(links)); + } + return IncludeDescriptor{*base_table, properties}; +} +} diff --git a/Pods/Realm/include/list.hpp b/Pods/Realm/include/list.hpp index 532d9d84d0..1812c0c5c3 100644 --- a/Pods/Realm/include/list.hpp +++ b/Pods/Realm/include/list.hpp @@ -270,8 +270,7 @@ void List::assign(Context& ctx, T&& values, bool update, bool update_only_diff) index++; }); while (index < sz) { - remove(index); - sz--; + remove(--sz); } } else { diff --git a/Pods/Realm/include/object.hpp b/Pods/Realm/include/object.hpp index 67f85a135b..d60a4b3da0 100644 --- a/Pods/Realm/include/object.hpp +++ b/Pods/Realm/include/object.hpp @@ -70,6 +70,9 @@ class Object { template ValueType get_property_value(ContextType& ctx, StringData prop_name); + template + ValueType get_property_value(ContextType& ctx, const Property& property); + // create an Object from a native representation template static Object create(ContextType& ctx, std::shared_ptr const& realm, diff --git a/Pods/Realm/include/object_accessor.hpp b/Pods/Realm/include/object_accessor.hpp index 829a013d76..3ee3742428 100644 --- a/Pods/Realm/include/object_accessor.hpp +++ b/Pods/Realm/include/object_accessor.hpp @@ -56,6 +56,12 @@ void Object::set_property_value(ContextType& ctx, StringData prop_name, ValueTyp set_property_value_impl(ctx, property, value, try_update, false, false); } +template +ValueType Object::get_property_value(ContextType& ctx, const Property& property) +{ + return get_property_value_impl(ctx, property); +} + template ValueType Object::get_property_value(ContextType& ctx, StringData prop_name) { @@ -63,14 +69,36 @@ ValueType Object::get_property_value(ContextType& ctx, StringData prop_name) } namespace { -template -inline void do_update_value(ContextType& ctx, Table& table, ValueType& value, size_t col, size_t row, bool update_only_diff, bool is_default) -{ - auto new_val = ctx.template unbox(value); - if (!update_only_diff || table.get(col, row) != new_val) { - table.set(col, row, new_val, is_default); +template +struct ValueUpdater { + ContextType& ctx; + Property const& property; + ValueType& value; + RowExpr row; + size_t col; + bool try_update; + bool update_only_diff; + bool is_default; + + void operator()(RowExpr*) + { + ContextType child_ctx(ctx, property); + auto curr_link = row.get_link(col); + auto link = child_ctx.template unbox(value, true, try_update, update_only_diff, curr_link); + if (!update_only_diff || curr_link != link.get_index()) { + row.set_link(col, link.get_index()); + } } -} + + template + void operator()(T*) + { + auto new_val = ctx.template unbox(value); + if (!update_only_diff || row.get(col) != new_val) { + row.set(col, new_val, is_default); + } + } +}; } template @@ -108,42 +136,9 @@ void Object::set_property_value_impl(ContextType& ctx, const Property &property, return; } - switch (property.type & ~PropertyType::Nullable) { - case PropertyType::Object: { - ContextType child_ctx(ctx, property); - auto curr_link = table.get_link(col,row); - auto link = child_ctx.template unbox(value, true, try_update, update_only_diff, curr_link); - if (!update_only_diff || curr_link != link.get_index()) { - table.set_link(col, row, link.get_index(), is_default); - } - break; - } - case PropertyType::Bool: - do_update_value(ctx, table, value, col, row, update_only_diff, is_default); - break; - case PropertyType::Int: - do_update_value(ctx, table, value, col, row, update_only_diff, is_default); - break; - case PropertyType::Float: - do_update_value(ctx, table, value, col, row, update_only_diff, is_default); - break; - case PropertyType::Double: - do_update_value(ctx, table, value, col, row, update_only_diff, is_default); - break; - case PropertyType::String: - do_update_value(ctx, table, value, col, row, update_only_diff, is_default); - break; - case PropertyType::Data: - do_update_value(ctx, table, value, col, row, update_only_diff, is_default); - break; - case PropertyType::Date: - do_update_value(ctx, table, value, col, row, update_only_diff, is_default); - break; - case PropertyType::Any: - throw std::logic_error("not supported"); - default: - REALM_COMPILER_HINT_UNREACHABLE(); - } + ValueUpdater updater{ctx, property, value, + table.get(row),col, try_update, update_only_diff, is_default}; + switch_on_type(property.type, updater); ctx.did_change(); } diff --git a/Pods/Realm/include/object_schema.hpp b/Pods/Realm/include/object_schema.hpp index 66cb118f8a..3637122096 100644 --- a/Pods/Realm/include/object_schema.hpp +++ b/Pods/Realm/include/object_schema.hpp @@ -49,6 +49,8 @@ class ObjectSchema { std::vector computed_properties; std::string primary_key; + Property *property_for_public_name(StringData public_name); + const Property *property_for_public_name(StringData public_name) const; Property *property_for_name(StringData name); const Property *property_for_name(StringData name) const; Property *primary_key_property() { diff --git a/Pods/Realm/include/property.hpp b/Pods/Realm/include/property.hpp index ad76b9d056..f0a384a640 100644 --- a/Pods/Realm/include/property.hpp +++ b/Pods/Realm/include/property.hpp @@ -62,7 +62,24 @@ struct Property { using IsPrimary = util::TaggedBool; using IsIndexed = util::TaggedBool; + // The internal column name used in the Realm file. std::string name; + + // The public name used by the binding to represent the internal column name in the Realm file. Bindings can use + // this to expose a different name in the binding API, e.g. to map between different naming conventions. + // + // Public names are only ever user defined, they are not persisted on disk, so reading the schema from the file + // will leave this field empty. If `public_name` is empty, the internal and public name are considered to be the same. + // + // ObjectStore will ensure that no conflicts occur between persisted properties and the public name, so + // the public name is just as unique an identifier as the internal name in the file. + // + // In order to respect public names bindings should use `ObjectSchema::property_for_public_name()` in the schema + // and `Object::value_for_property()` in the Object accessor for reading fields defined by the public name. + // + // For queries, bindings should provide an appropriate `KeyPathMapping` definition. Bindings are responsible + // for creating this. + std::string public_name; PropertyType type = PropertyType::Int; std::string object_type; std::string link_origin_property_name; @@ -73,10 +90,10 @@ struct Property { Property() = default; - Property(std::string name, PropertyType type, IsPrimary primary = false, IsIndexed indexed = false); + Property(std::string name, PropertyType type, IsPrimary primary = false, IsIndexed indexed = false, std::string public_name = ""); Property(std::string name, PropertyType type, std::string object_type, - std::string link_origin_property_name = ""); + std::string link_origin_property_name = "", std::string public_name = ""); Property(Property const&) = default; Property(Property&&) = default; @@ -196,8 +213,10 @@ static const char *string_for_property_type(PropertyType type) } inline Property::Property(std::string name, PropertyType type, - IsPrimary primary, IsIndexed indexed) + IsPrimary primary, IsIndexed indexed, + std::string public_name) : name(std::move(name)) +, public_name(std::move(public_name)) , type(type) , is_primary(primary) , is_indexed(indexed) @@ -206,8 +225,10 @@ inline Property::Property(std::string name, PropertyType type, inline Property::Property(std::string name, PropertyType type, std::string object_type, - std::string link_origin_property_name) + std::string link_origin_property_name, + std::string public_name) : name(std::move(name)) +, public_name(std::move(public_name)) , type(type) , object_type(std::move(object_type)) , link_origin_property_name(std::move(link_origin_property_name)) diff --git a/Pods/Realm/include/results.hpp b/Pods/Realm/include/results.hpp index ee8a2983eb..f0649571dc 100644 --- a/Pods/Realm/include/results.hpp +++ b/Pods/Realm/include/results.hpp @@ -345,10 +345,13 @@ void Results::set_property_value(ContextType& ctx, StringData prop_name, ValueTy throw ModifyPrimaryKeyException(m_object_schema->name, prop->name); } - // Update all objects in this ResultSets - size_t size = this->size(); + // Update all objects in this ResultSets. Use snapshot to avoid correctness problems if the + // object is removed from the TableView after the property update as well as avoiding to + // re-evaluating the query too many times. + auto snapshot = this->snapshot(); + size_t size = snapshot.size(); for (size_t i = 0; i < size; ++i) { - Object obj(m_realm, *m_object_schema, get(i)); + Object obj(m_realm, *m_object_schema, snapshot.get(i)); obj.set_property_value_impl(ctx, *prop, value, true, false, false); } } diff --git a/Pods/Realm/include/shared_realm.hpp b/Pods/Realm/include/shared_realm.hpp index 4a7b701f97..a2db0babc7 100644 --- a/Pods/Realm/include/shared_realm.hpp +++ b/Pods/Realm/include/shared_realm.hpp @@ -32,6 +32,8 @@ #include namespace realm { +class AsyncOpenTask; +class AuditInterface; class BindingContext; class Group; class Realm; @@ -188,6 +190,11 @@ class Realm : public std::enable_shared_from_this { // User-supplied encryption key. Must be either empty or 64 bytes. std::vector encryption_key; + // Core and Object Store will in some cases need to create named pipes alongside the Realm file. + // But on some filesystems this can be a problem (e.g. external storage on Android that uses FAT32). + // In order to work around this, a separate path can be specified for these files. + std::string fifo_files_fallback_path; + bool in_memory = false; SchemaMode schema_mode = SchemaMode::Automatic; @@ -242,9 +249,12 @@ class Realm : public std::enable_shared_from_this { /// A data structure storing data used to configure the Realm for sync support. std::shared_ptr sync_config; - // FIXME: Realm Java manages sync at the Java level, so it needs to create Realms using the sync history - // format. + // Open the Realm using the sync history mode even if a sync + // configuration is not supplied. bool force_sync_history = false; + + // A factory function which produces an audit implementation. + std::function()> audit_factory; }; // Get a cached Realm or create a new one if no cached copies exists @@ -252,6 +262,20 @@ class Realm : public std::enable_shared_from_this { // encryption key will raise an exception. static SharedRealm get_shared_realm(Config config); + // Get a Realm for the given execution context (or current thread if `none`) + // from the thread safe reference. May return a cached Realm or create a new one. + static SharedRealm get_shared_realm(ThreadSafeReference, util::Optional = util::none); + +#if REALM_ENABLE_SYNC + // Open a synchronized Realm and make sure it is fully up to date before + // returning it. + // + // It is possible to both cancel the download and listen to download progress + // using the `AsyncOpenTask` returned. Note that the download doesn't actually + // start until you call `AsyncOpenTask::start(callback)` + static std::shared_ptr get_synchronized_realm(Config config); +#endif + // Updates a Realm to a given schema, using the Realm's pre-set schema mode. void update_schema(Schema schema, uint64_t version=0, MigrationFunction migration_function=nullptr, @@ -279,7 +303,10 @@ class Realm : public std::enable_shared_from_this { void commit_transaction(); void cancel_transaction(); bool is_in_transaction() const noexcept; + bool is_in_read_transaction() const { return !!m_group; } + VersionID read_transaction_version() const; + Group& read_group(); bool is_in_migration() const noexcept { return m_in_migration; } @@ -329,6 +356,8 @@ class Realm : public std::enable_shared_from_this { ComputedPrivileges get_privileges(StringData object_type); ComputedPrivileges get_privileges(RowExpr row); + AuditInterface* audit_context() const noexcept; + static SharedRealm make_shared_realm(Config config, std::shared_ptr<_impl::RealmCoordinator> coordinator = nullptr) { struct make_shared_enabler : public Realm { make_shared_enabler(Config config, std::shared_ptr<_impl::RealmCoordinator> coordinator) @@ -426,12 +455,8 @@ class Realm : public std::enable_shared_from_this { public: std::unique_ptr m_binding_context; - // FIXME private - Group& read_group(); - - std::size_t compute_size(); - - Replication *history() { return m_history.get(); } + // FIXME: This is currently needed by the adapter to get access to its changeset cooker + Replication* history() { return m_history.get(); } friend class _impl::RealmFriend; }; diff --git a/Pods/Realm/include/sync/async_open_task.hpp b/Pods/Realm/include/sync/async_open_task.hpp new file mode 100644 index 0000000000..a69c4439e5 --- /dev/null +++ b/Pods/Realm/include/sync/async_open_task.hpp @@ -0,0 +1,60 @@ +//////////////////////////////////////////////////////////////////////////// +// +// Copyright 2019 Realm Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////// + +#ifndef ASYNC_OPEN_TASK_HPP +#define ASYNC_OPEN_TASK_HPP + +#include "util/atomic_shared_ptr.hpp" + +#include +#include + +namespace realm { +class Realm; +class SyncSession; +template class ThreadSafeReference; +namespace _impl { +class RealmCoordinator; +} + +// Class used to wrap the intent of opening a new Realm or fully synchronize it before returning it to the user +// Timeouts are not handled by this class but must be handled by each binding. +class AsyncOpenTask : public std::enable_shared_from_this { +public: + AsyncOpenTask(std::shared_ptr<_impl::RealmCoordinator> coordinator, std::shared_ptr session); + // Starts downloading the Realm. The callback will be triggered either when the download completes + // or an error is encountered. + // + // If multiple AsyncOpenTasks all attempt to download the same Realm and one of them is canceled, + // the other tasks will receive a "Cancelled" exception. + void start(std::function, std::exception_ptr)> callback); + + // Cancels the download and stops the session. No further functions should be called on this class. + void cancel(); + + uint64_t register_download_progress_notifier(std::function callback); + void unregister_download_progress_notifier(uint64_t token); + +private: + std::shared_ptr<_impl::RealmCoordinator> m_coordinator; + util::AtomicSharedPtr m_session; +}; + +} + +#endif // // ASYNC_OPEN_TASK_HPP diff --git a/Pods/Realm/include/sync/impl/sync_file.hpp b/Pods/Realm/include/sync/impl/sync_file.hpp index 67ce5f8e44..9863f198c8 100644 --- a/Pods/Realm/include/sync/impl/sync_file.hpp +++ b/Pods/Realm/include/sync/impl/sync_file.hpp @@ -97,13 +97,13 @@ class SyncFileManager { return m_base_path; } - std::string recovery_directory_path() const + std::string recovery_directory_path(util::Optional const& directory=none) const { - return get_special_directory(c_recovery_directory); + return get_special_directory(directory.value_or(c_recovery_directory)); } private: - std::string m_base_path; + const std::string m_base_path; static constexpr const char c_sync_directory[] = "realm-object-server"; static constexpr const char c_utility_directory[] = "io.realm.object-server-utility"; diff --git a/Pods/Realm/include/sync/impl/sync_metadata.hpp b/Pods/Realm/include/sync/impl/sync_metadata.hpp index 7414d9d832..a6e8bed28c 100644 --- a/Pods/Realm/include/sync/impl/sync_metadata.hpp +++ b/Pods/Realm/include/sync/impl/sync_metadata.hpp @@ -185,24 +185,19 @@ friend class SyncFileActionMetadata; // Return a Results object containing all pending actions. SyncFileActionMetadataResults all_pending_actions() const; - // Delete an existing metadata action given the original name of the Realm it involves. - // Returns true iff there was an existing metadata action and it was deleted. - bool delete_metadata_action(const std::string&) const; - // Retrieve or create user metadata. // Note: if `make_is_absent` is true and the user has been marked for deletion, it will be unmarked. util::Optional get_or_make_user_metadata(const std::string& identity, const std::string& url, bool make_if_absent=true) const; // Retrieve file action metadata. - util::Optional get_file_action_metadata(const std::string& path) const; + util::Optional get_file_action_metadata(StringData path) const; // Create file action metadata. - SyncFileActionMetadata make_file_action_metadata(const std::string& original_name, - const std::string& url, - const std::string& local_uuid, - SyncFileActionMetadata::Action action, - util::Optional new_name=none) const; + void make_file_action_metadata(StringData original_name, StringData url, + StringData local_uuid, + SyncFileActionMetadata::Action action, + StringData new_name = {}) const; // Get the unique identifier of this client. const std::string& client_uuid() const { return m_client_uuid; } @@ -223,6 +218,8 @@ friend class SyncFileActionMetadata; SyncFileActionMetadata::Schema m_file_action_schema; SyncClientMetadata::Schema m_client_schema; std::string m_client_uuid; + + std::shared_ptr get_realm() const; }; } diff --git a/Pods/Realm/include/sync/partial_sync.hpp b/Pods/Realm/include/sync/partial_sync.hpp index 070b103e0a..bfce16317a 100644 --- a/Pods/Realm/include/sync/partial_sync.hpp +++ b/Pods/Realm/include/sync/partial_sync.hpp @@ -35,6 +35,18 @@ class Object; class Realm; namespace partial_sync { +static constexpr const char* result_sets_type_name = "__ResultSets"; +static constexpr const char* property_name = "name"; +static constexpr const char* property_query = "query"; +static constexpr const char* property_matches_property_name = "matches_property"; +static constexpr const char* property_status = "status"; +static constexpr const char* property_error_message = "error_message"; +static constexpr const char* property_query_parse_counter = "query_parse_counter"; +static constexpr const char* property_created_at = "created_at"; +static constexpr const char* property_updated_at = "updated_at"; +static constexpr const char* property_expires_at = "expires_at"; +static constexpr const char* property_time_to_live = "time_to_live"; +static constexpr const size_t result_sets_property_count = 10; struct InvalidRealmStateException : public std::logic_error { InvalidRealmStateException(const std::string& msg); @@ -44,6 +56,10 @@ struct ExistingSubscriptionException : public std::runtime_error { ExistingSubscriptionException(const std::string& msg); }; +struct QueryTypeMismatchException: public std::logic_error { + QueryTypeMismatchException(const std::string& msg); +}; + enum class SubscriptionState : int8_t; struct SubscriptionNotificationToken { @@ -51,6 +67,29 @@ struct SubscriptionNotificationToken { NotificationToken result_sets_token; }; +struct SubscriptionCallbackWrapper { + std::function callback; + util::Optional last_state; +}; + +struct SubscriptionOptions { + // A user defined name for referencing this subscription later. If no name is provided, + // a default name will be generated based off the contents of the query. + util::Optional user_provided_name; + // `time_to_live` is expressed in milliseconds and indicates for how long a subscription should + // be persisted when not used. If no value is provided, the subscription will live until manually + // deleted. + util::Optional time_to_live_ms = none; + // If a subscription with the given name already exists the behaviour depends on `update`. If + // `update = true` the existing subscription will replace its query and time_to_live with the + // provided values. If `update = false` an exception is thrown if the new query doesn't match + // the old one. If no name is provided, the `update` flag is ignored. + bool update = false; + // A container which denotes a set of backlinks (linkingObjects) which should be included + // in the subscription. + IncludeDescriptor inclusions; +}; + class Subscription { public: ~Subscription(); @@ -62,22 +101,33 @@ class Subscription { SubscriptionNotificationToken add_notification_callback(std::function callback); + util::Optional result_set_object() const; + private: Subscription(std::string name, std::string object_type, std::shared_ptr); - util::Optional result_set_object() const; - void error_occurred(std::exception_ptr); + void run_callback(SubscriptionCallbackWrapper& callback_wrapper); ObjectSchema m_object_schema; mutable Results m_result_sets; + // Timestamp indicating when the subscription wrapper is created. This is used when checking the Results notifications + // By comparing this timestamp against the real subscriptions `created_at` and `updated_at` fields we can determine + // whether the subscription is in progress of being updated or created. + Timestamp m_wrapper_created_at; + + // Track the actual underlying subscription object once it is available. This is used to better track + // unsubscriptions. + util::Optional m_result_sets_object = none; + struct Notifier; _impl::CollectionNotifier::Handle m_notifier; - friend Subscription subscribe(Results const&, util::Optional); + friend Subscription subscribe(Results const&, SubscriptionOptions); friend void unsubscribe(Subscription&); + }; /// Create a Query-based subscription from the query associated with the `Results`. @@ -89,7 +139,7 @@ class Subscription { /// /// Programming errors, such as attempting to create a subscription in a Realm that is not /// Query-based, or subscribing to an unsupported query, will throw an exception. -Subscription subscribe(Results const&, util::Optional name); +Subscription subscribe(Results const&, SubscriptionOptions options); // Create a subscription from the query associated with the `Results` // @@ -100,7 +150,16 @@ Subscription subscribe(Results const&, util::Optional name); // a Realm that is not Query-based, or subscribing to an unsupported query, will throw an exception. // // The Row that represents the Subscription in the __ResultsSets table is returned. -RowExpr subscribe_blocking(Results const&, util::Optional name); +// +// If a subscription with the given name already exists the behaviour depends on `update`. If +// `update = true` the existing subscription will replace its query and time_to_live with the +// provided values. If `update = false` an exception is thrown if the new query doesn't match +// the old one. If no name is provided, the `update` flag is ignored. +// +// `time_to_live` is expressed in milliseconds and indicates for how long a subscription should +// be persisted when not used. If no value is provided, the subscription will live until manually +// deleted. +Row subscribe_blocking(Results const&, util::Optional name, util::Optional time_to_live_ms = none, bool update = false); /// Remove a partial sync subscription. /// @@ -108,11 +167,19 @@ RowExpr subscribe_blocking(Results const&, util::Optional name); /// `Subscription` transitioning to the `Invalidated` state. void unsubscribe(Subscription&); +/// Remove a partial sync subscription. +/// +/// This is effectively just obj.row().move_last_over(), but the deletion is +/// performed asynchronously on the partial sync worker thread rather than +/// the current thread. The object must be an object in the ResultSets table. +void unsubscribe(Object&&); + } // namespace partial_sync namespace _impl { void initialize_schema(Group&); +void ensure_partial_sync_schema_initialized(Realm&); } // namespace _impl } // namespace realm diff --git a/Pods/Realm/include/sync/sync_config.hpp b/Pods/Realm/include/sync/sync_config.hpp index 56cca285bc..f8677b15d5 100644 --- a/Pods/Realm/include/sync/sync_config.hpp +++ b/Pods/Realm/include/sync/sync_config.hpp @@ -112,7 +112,18 @@ struct SyncError { } }; +enum class ClientResyncMode : unsigned char { + // Enable automatic client resync with local transaction recovery + Recover = 0, + // Enable automatic client resync without local transaction recovery + DiscardLocal = 1, + // Fire a client reset error + Manual = 2, +}; + struct SyncConfig { + using ProxyConfig = sync::Session::Config::ProxyConfig; + std::shared_ptr user; // The URL of the Realm, or of the reference Realm if partial sync is being used. // The URL that will be used when connecting to the object server is that returned by `realm_url()`, @@ -120,23 +131,31 @@ struct SyncConfig { // Set this field, but read from `realm_url()`. std::string reference_realm_url; SyncSessionStopPolicy stop_policy = SyncSessionStopPolicy::AfterChangesUploaded; - std::function bind_session_handler = nullptr; - std::function error_handler = nullptr; - std::shared_ptr transformer = nullptr; - util::Optional> realm_encryption_key = none; + std::function bind_session_handler; + std::function error_handler; + std::shared_ptr transformer; + util::Optional> realm_encryption_key; bool client_validate_ssl = true; - util::Optional ssl_trust_certificate_path = none; - std::function ssl_verify_callback = nullptr; + util::Optional ssl_trust_certificate_path; + std::function ssl_verify_callback; + util::Optional proxy_config; bool is_partial = false; - util::Optional custom_partial_sync_identifier = none; + util::Optional custom_partial_sync_identifier; bool validate_sync_history = true; - util::Optional authorization_header_name = none; + util::Optional authorization_header_name; std::map custom_http_headers; + // Set the URL path prefix sync will use when opening a websocket for this session. Default is `/realm-sync`. + // Useful when the sync worker sits behind a firewall or load-balancer that rewrites incoming requests. util::Optional url_prefix = none; + // The name of the directory which Realms should be backed up to following + // a client reset + util::Optional recovery_directory; + ClientResyncMode client_resync_mode = ClientResyncMode::Recover; + // The URL that will be used when connecting to the object server. // This will differ from `reference_realm_url` when partial sync is being used. std::string realm_url() const; diff --git a/Pods/Realm/include/sync/sync_manager.hpp b/Pods/Realm/include/sync/sync_manager.hpp index 764a57de37..17ea51ef45 100644 --- a/Pods/Realm/include/sync/sync_manager.hpp +++ b/Pods/Realm/include/sync/sync_manager.hpp @@ -68,10 +68,10 @@ friend class SyncSession; // Configure the metadata and file management subsystems. This MUST be called upon startup. void configure(const std::string& base_file_path, - MetadataMode metadata_mode=MetadataMode::Encryption, - const std::string& user_agent_binding_info = "", - util::Optional> custom_encryption_key=none, - bool reset_metadata_on_error=false); + MetadataMode metadata_mode=MetadataMode::Encryption, + const std::string& user_agent_binding_info = "", + util::Optional> custom_encryption_key=none, + bool reset_metadata_on_error=false); // Immediately run file actions for a single Realm at a given original path. // Returns whether or not a file action was successfully executed for the specified Realm. @@ -92,6 +92,9 @@ friend class SyncSession; void set_log_level(util::Logger::Level) noexcept; void set_logger_factory(SyncLoggerFactory&) noexcept; + // Create a new logger of the type which will be used by the sync client + std::unique_ptr make_logger() const; + // Sets the application level user agent string. // This should have the format specified here: https://github.com/realm/realm-sync/blob/develop/src/realm/sync/client.hpp#L126 // The user agent can only be set up until the point the Sync Client is created. This happens when the first @@ -108,10 +111,15 @@ friend class SyncSession; util::Logger::Level log_level() const noexcept; - std::shared_ptr get_session(const std::string& path, const SyncConfig& config); + std::shared_ptr get_session(const std::string& path, const SyncConfig& config, bool force_client_resync=false); std::shared_ptr get_existing_session(const std::string& path) const; std::shared_ptr get_existing_active_session(const std::string& path) const; + // Returns `true` if the SyncManager still contains any existing sessions not yet fully cleaned up. + // This will return true as long as there is an external reference to a session object, no matter + // the state of that session. + bool has_existing_sessions(); + // If the metadata manager is configured, perform an update. Returns `true` iff the code was run. bool perform_metadata_update(std::function update_function) const; @@ -149,7 +157,7 @@ friend class SyncSession; std::string path_for_realm(const SyncUser& user, const std::string& raw_realm_url) const; // Get the path of the recovery directory for backed-up or recovered Realms. - std::string recovery_directory_path() const; + std::string recovery_directory_path(util::Optional const& custom_dir_name=none) const; // Get the unique identifier of this client. std::string client_uuid() const; @@ -216,6 +224,10 @@ friend class SyncSession; // inactive and have performed any necessary cleanup work. std::unordered_map> m_sessions; + // Internal method returning `true` if the SyncManager still contains sessions not yet fully closed. + // Callers of this method should hold the `m_session_mutex` themselves. + bool do_has_existing_sessions(); + // The unique identifier of this client. util::Optional m_client_uuid; }; diff --git a/Pods/Realm/include/sync/sync_session.hpp b/Pods/Realm/include/sync/sync_session.hpp index 0513729b37..334cdfeefc 100644 --- a/Pods/Realm/include/sync/sync_session.hpp +++ b/Pods/Realm/include/sync/sync_session.hpp @@ -136,17 +136,12 @@ class SyncSession : public std::enable_shared_from_this { // Register a callback that will be called when all pending uploads have completed. // The callback is run asynchronously, and upon whatever thread the underlying sync client - // chooses to run it on. The method returns immediately with true if the callback was - // successfully registered, false otherwise. If the method returns false the callback will - // never be run. - // This method will return true if the completion handler was registered, either immediately - // or placed in a queue. If it returns true the completion handler will always be called - // at least once, except in the case where a logged-out session is never logged back in. - bool wait_for_upload_completion(std::function callback); + // chooses to run it on. + void wait_for_upload_completion(std::function callback); // Register a callback that will be called when all pending downloads have been completed. // Works the same way as `wait_for_upload_completion()`. - bool wait_for_download_completion(std::function callback); + void wait_for_download_completion(std::function callback); using NotifierType = _impl::SyncProgressNotifier::NotifierType; // Register a notifier that updates the app regarding progress. @@ -213,6 +208,13 @@ class SyncSession : public std::enable_shared_from_this { // not make the session reconnect. void set_multiplex_identifier(std::string multiplex_identity); + // See SyncConfig::url_prefix + // + // This method allows to override this value after the session is created but before it is bound + // because of Realm Cloud's token refresh service returning the sync worker ingress path with the token response. + // Prefer using the SyncConfig field in all other cases. + void set_url_prefix(std::string url_prefix); + // Inform the sync session that it should close. void close(); @@ -227,6 +229,11 @@ class SyncSession : public std::enable_shared_from_this { // object store team before using it. void override_server(std::string address, int port); + // Update the sync configuration used for this session. The new configuration must have the + // same user and reference realm url as the old configuration. The session will immediately + // disconnect (if it was active), and then attempt to connect using the new configuration. + void update_configuration(SyncConfig new_config); + // An object representing the user who owns the Realm this `SyncSession` represents. std::shared_ptr user() const { @@ -310,24 +317,25 @@ class SyncSession : public std::enable_shared_from_this { friend class realm::SyncManager; // Called by SyncManager { - static std::shared_ptr create(_impl::SyncClient& client, std::string realm_path, SyncConfig config) + static std::shared_ptr create(_impl::SyncClient& client, std::string realm_path, + SyncConfig config, bool force_client_resync) { struct MakeSharedEnabler : public SyncSession { - MakeSharedEnabler(_impl::SyncClient& client, std::string realm_path, SyncConfig config) - : SyncSession(client, std::move(realm_path), std::move(config)) + MakeSharedEnabler(_impl::SyncClient& client, std::string realm_path, SyncConfig config, bool force_client_resync) + : SyncSession(client, std::move(realm_path), std::move(config), force_client_resync) {} }; - return std::make_shared(client, std::move(realm_path), std::move(config)); + return std::make_shared(client, std::move(realm_path), std::move(config), force_client_resync); } // } - SyncSession(_impl::SyncClient&, std::string realm_path, SyncConfig); + SyncSession(_impl::SyncClient&, std::string realm_path, SyncConfig, bool force_client_resync); void handle_error(SyncError); void cancel_pending_waits(std::unique_lock&); enum class ShouldBackup { yes, no }; void update_error_and_mark_file_for_deletion(SyncError&, ShouldBackup); - static std::string get_recovery_file_path(); + std::string get_recovery_file_path(); void handle_progress_update(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t); void set_sync_transact_callback(std::function); @@ -341,6 +349,8 @@ class SyncSession : public std::enable_shared_from_this { void unregister(std::unique_lock& lock); void did_drop_external_reference(); + void add_completion_callback(_impl::SyncProgressNotifier::NotifierType direction); + std::function m_sync_transact_callback; mutable std::mutex m_state_mutex; @@ -350,20 +360,20 @@ class SyncSession : public std::enable_shared_from_this { // The underlying state of the connection. Even when sharing connections, the underlying session // will always start out as diconnected and then immediately transition to the correct state when calling // bind(). - sync::Session::ConnectionState m_connection_state = sync::Session::ConnectionState::disconnected; + ConnectionState m_connection_state = ConnectionState::Disconnected; size_t m_death_count = 0; SyncConfig m_config; + bool m_force_client_resync; std::string m_realm_path; _impl::SyncClient& m_client; - // For storing wait-for-completion requests if the session isn't yet ready to handle them. - struct CompletionWaitPackage { - void(sync::Session::*waiter)(std::function); - std::function callback; - }; - std::vector m_completion_wait_packages; + std::vector> m_download_completion_callbacks; + std::vector> m_upload_completion_callbacks; + // How many times a client resync has occurred. Used to discard session + // completion notifications from before the most recent client resync. + int m_client_resync_counter = 0; struct ServerOverride { std::string address; diff --git a/Pods/Realm/include/thread_safe_reference.hpp b/Pods/Realm/include/thread_safe_reference.hpp index ca3cc194c3..b1a825544c 100644 --- a/Pods/Realm/include/thread_safe_reference.hpp +++ b/Pods/Realm/include/thread_safe_reference.hpp @@ -19,7 +19,6 @@ #ifndef REALM_THREAD_SAFE_REFERENCE_HPP #define REALM_THREAD_SAFE_REFERENCE_HPP - #include namespace realm { @@ -32,6 +31,7 @@ class Results; class TableView; template class BasicRow; typedef BasicRow
Row; +namespace _impl { class RealmCoordinator; } // Opaque type representing an object for handover class ThreadSafeReferenceBase { @@ -108,6 +108,24 @@ class ThreadSafeReference: public ThreadSafeReferenceBase { // Precondition: Realm and handover are on same version. Results import_into_realm(std::shared_ptr realm) &&; }; + +template<> +class ThreadSafeReference { + friend class Realm; + friend class _impl::RealmCoordinator; + + std::shared_ptr m_realm; + + ThreadSafeReference(std::shared_ptr); + std::shared_ptr resolve() &&; +public: + + ThreadSafeReference() = default; + ThreadSafeReference(ThreadSafeReference const&) = delete; + ThreadSafeReference(ThreadSafeReference &&) = default; + ThreadSafeReference& operator=(ThreadSafeReference const&) = delete; + ThreadSafeReference& operator=(ThreadSafeReference&&) = default; +}; } #endif /* REALM_THREAD_SAFE_REFERENCE_HPP */ diff --git a/Pods/Realm/include/util/event_loop_dispatcher.hpp b/Pods/Realm/include/util/event_loop_dispatcher.hpp new file mode 100644 index 0000000000..342c34d8be --- /dev/null +++ b/Pods/Realm/include/util/event_loop_dispatcher.hpp @@ -0,0 +1,111 @@ +//////////////////////////////////////////////////////////////////////////// +// +// Copyright 2019 Realm Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////// + +#ifndef REALM_OS_UTIL_EVENT_LOOP_DISPATCHER_HPP +#define REALM_OS_UTIL_EVENT_LOOP_DISPATCHER_HPP + +#include "util/event_loop_signal.hpp" + +#include +#include +#include + +namespace realm { +// FIXME: remove once we switch to C++ 17 where we can use std::apply +namespace _apply_polyfill { +template +constexpr auto apply_impl(Tuple&& t, F f, std::index_sequence) { + return f(std::get(std::forward(t))...); +} + +template +constexpr auto apply(Tuple&& t, F f) { + return apply_impl(std::forward(t), f, std::make_index_sequence{}>{}); +} +} + +namespace util { +template +class EventLoopDispatcher; + +template +class EventLoopDispatcher { + using Tuple = std::tuple::type...>; +private: + struct Callback; + + struct State { + public: + State(std::function func) + : m_func(std::move(func)) + { + } + + const std::function m_func; + std::queue m_invocations; + std::mutex m_mutex; + std::shared_ptr> m_signal; + }; + const std::shared_ptr m_state; + + struct Callback { + void operator()() + { + std::unique_lock lock(m_state->m_mutex); + while (!m_state->m_invocations.empty()) { + auto& tuple = m_state->m_invocations.front(); + _apply_polyfill::apply(std::move(tuple), m_state->m_func); + m_state->m_invocations.pop(); + } + m_state->m_signal.reset(); + } + + std::shared_ptr m_state; + }; + const std::shared_ptr> m_signal; + const std::thread::id m_thread = std::this_thread::get_id(); + +public: + EventLoopDispatcher(std::function func) + : m_state(std::make_shared(func)) + , m_signal(std::make_shared>(Callback{m_state})) + { + } + + const std::function& func() const { return m_state->m_func; } + + void operator()(Args... args) + { + if (m_thread == std::this_thread::get_id()) { + m_state->m_func(std::forward(args)...); + return; + } + + { + std::unique_lock lock(m_state->m_mutex); + m_state->m_signal = m_signal; + m_state->m_invocations.push(std::make_tuple(std::forward(args)...)); + } + m_signal->notify(); + } +}; +} // namespace util +} // namespace realm + +#endif + diff --git a/Pods/RealmSwift/README.md b/Pods/RealmSwift/README.md index ae255b289e..c9e93e6501 100644 --- a/Pods/RealmSwift/README.md +++ b/Pods/RealmSwift/README.md @@ -19,12 +19,12 @@ Please see the detailed instructions in our docs to add [Realm Objective-C](http ### Realm Objective-C The documentation can be found at [realm.io/docs/objc/latest](https://realm.io/docs/objc/latest). -The API reference is located at [realm.io/docs/objc/latest/api](https://realm.io/docs/objc/latest/api). +The API reference is located at [realm.io/docs/objc/latest/api/](https://realm.io/docs/objc/latest/api/). ### Realm Swift The documentation can be found at [realm.io/docs/swift/latest](https://realm.io/docs/swift/latest). -The API reference is located at [realm.io/docs/swift/latest/api](https://realm.io/docs/swift/latest/api). +The API reference is located at [realm.io/docs/swift/latest/api/](https://realm.io/docs/swift/latest/api/). ## Getting Help diff --git a/Pods/RealmSwift/RealmSwift/List.swift b/Pods/RealmSwift/RealmSwift/List.swift index 3b4f9d1052..4060ebb433 100644 --- a/Pods/RealmSwift/RealmSwift/List.swift +++ b/Pods/RealmSwift/RealmSwift/List.swift @@ -705,19 +705,29 @@ extension List: RangeReplaceableCollection { _rlmArray.removeLastObject() } -#if swift(>=3.2) - // The issue described below is fixed in Swift 3.2 and above. -#else - // These should not be necessary, but Swift 3.1's compiler fails to infer the `SubSequence`, - // and the standard library neglects to provide the default implementation of `subscript` - /// :nodoc: - public typealias SubSequence = RangeReplaceableRandomAccessSlice +} +#endif - /// :nodoc: - public subscript(slice: Range) -> SubSequence { - return SubSequence(base: self, bounds: slice) +// MARK: - Codable + +#if swift(>=4.1) +extension List: Decodable where Element: Decodable { + public convenience init(from decoder: Decoder) throws { + self.init() + var container = try decoder.unkeyedContainer() + while !container.isAtEnd { + append(try container.decode(Element.self)) + } + } +} + +extension List: Encodable where Element: Encodable { + public func encode(to encoder: Encoder) throws { + var container = encoder.unkeyedContainer() + for value in self { + try container.encode(value) + } } -#endif } #endif diff --git a/Pods/RealmSwift/RealmSwift/Object.swift b/Pods/RealmSwift/RealmSwift/Object.swift index 86b8a62d46..84ab084be2 100644 --- a/Pods/RealmSwift/RealmSwift/Object.swift +++ b/Pods/RealmSwift/RealmSwift/Object.swift @@ -269,7 +269,7 @@ open class Object: RLMObjectBase, ThreadConfined, RealmCollectionValue { Objects are considered the same if and only if they are both managed by the same Realm and point to the same underlying object in the database. - + - note: Equality comparison is implemented by `isEqual(_:)`. If the object type is defined with a primary key, `isEqual(_:)` behaves identically to this method. If the object type is not defined with a primary key, @@ -396,13 +396,20 @@ public final class DynamicObject: Object { @objc(RealmSwiftObjectUtil) public class ObjectUtil: NSObject { @objc private class func swiftVersion() -> NSString { +#if SWIFT_PACKAGE + return "5.1" +#else return swiftLanguageVersion as NSString +#endif } @objc private class func ignoredPropertiesForClass(_ type: AnyClass) -> NSArray? { if let type = type as? Object.Type { return type.ignoredProperties() as NSArray? } + if let type = type as? RLMObject.Type { + return type.ignoredProperties() as NSArray? + } return nil } @@ -410,10 +417,16 @@ public class ObjectUtil: NSObject { if let type = type as? Object.Type { return type.indexedProperties() as NSArray? } + if let type = type as? RLMObject.Type { + return type.indexedProperties() as NSArray? + } return nil } @objc private class func linkingObjectsPropertiesForClass(_ type: AnyClass) -> NSDictionary? { + if let type = type as? RLMObject.Type { + return type.linkingObjectsProperties() as NSDictionary? + } // Not used for Swift. getLinkingObjectsProperties(_:) is used instead. return nil } @@ -431,6 +444,12 @@ public class ObjectUtil: NSObject { return name.substring(to: storageRange.lowerBound) #endif } + // Xcode 11 changed the name of the storage property to "$__lazy_storage_$_propName" + #if swift(>=4.0) + if let storageRange = name.range(of: "$__lazy_storage_$_", options: [.anchored]) { + return String(name[storageRange.upperBound...]) + } + #endif return nil } @@ -456,6 +475,11 @@ public class ObjectUtil: NSObject { // Ignored lazy property. return false } + if object is RLMObject { + // Implicitly ignore lazy properties on RLMObject subclasses + // FIXME: should align RLMObject/Object behavior in 4.0 + return false + } // Managed lazy property; not currently supported. // FIXME: revisit this once Swift gets property behaviors/property macros. throwRealmException("Lazy managed property '\(lazyBaseName)' is not allowed on a Realm Swift object" diff --git a/Pods/RealmSwift/RealmSwift/ObjectSchema.swift b/Pods/RealmSwift/RealmSwift/ObjectSchema.swift index ce5b3b8c31..54fafcb485 100644 --- a/Pods/RealmSwift/RealmSwift/ObjectSchema.swift +++ b/Pods/RealmSwift/RealmSwift/ObjectSchema.swift @@ -18,6 +18,7 @@ import Foundation import Realm +import Realm.Private /** This class represents Realm model object schemas. @@ -44,6 +45,9 @@ public struct ObjectSchema: CustomStringConvertible { /// The name of the class the schema describes. public var className: String { return rlmObjectSchema.className } + /// The object class the schema describes. + public var objectClass: AnyClass { return rlmObjectSchema.objectClass } + /// The property which serves as the primary key for the class the schema describes, if any. public var primaryKeyProperty: Property? { if let rlmProperty = rlmObjectSchema.primaryKeyProperty { diff --git a/Pods/RealmSwift/RealmSwift/ObjectiveCSupport+Sync.swift b/Pods/RealmSwift/RealmSwift/ObjectiveCSupport+Sync.swift new file mode 100644 index 0000000000..c00cb9cb35 --- /dev/null +++ b/Pods/RealmSwift/RealmSwift/ObjectiveCSupport+Sync.swift @@ -0,0 +1,49 @@ +//////////////////////////////////////////////////////////////////////////// +// +// Copyright 2015 Realm Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////// + +import Realm + +/** + :nodoc: + **/ +public extension ObjectiveCSupport { + /// Convert a `SyncCredentials` to a `RLMSyncCredentials`. + static func convert(object: SyncCredentials) -> RLMSyncCredentials { + return RLMSyncCredentials(object) + } + + /// Convert a `RLMSyncCredentials` to a `SyncCredentials`. + static func convert(object: RLMSyncCredentials) -> SyncCredentials { + return SyncCredentials(object) + } + + /// Convert a `SyncConfiguration` to a `RLMSyncConfiguration`. + static func convert(object: SyncConfiguration) -> RLMSyncConfiguration { + return object.asConfig() + } + + /// Convert a `RLMSyncConfiguration` to a `SyncConfiguration`. + static func convert(object: RLMSyncConfiguration) -> SyncConfiguration { + return SyncConfiguration(config: object) + } + + /// Convert a `RLMSyncSubscription` to a `SyncSubscription`. + static func convert(object: RLMSyncSubscription) -> SyncSubscription { + return SyncSubscription(object) + } +} diff --git a/Pods/RealmSwift/RealmSwift/ObjectiveCSupport.swift b/Pods/RealmSwift/RealmSwift/ObjectiveCSupport.swift index 46a1dc3456..db69e27efa 100644 --- a/Pods/RealmSwift/RealmSwift/ObjectiveCSupport.swift +++ b/Pods/RealmSwift/RealmSwift/ObjectiveCSupport.swift @@ -130,16 +130,6 @@ public final class ObjectiveCSupport { return SortDescriptor(keyPath: object.keyPath, ascending: object.ascending) } - /// Convert a `SyncCredentials` to a `RLMSyncCredentials`. - public static func convert(object: SyncCredentials) -> RLMSyncCredentials { - return RLMSyncCredentials(object) - } - - /// Convert a `RLMSyncCredentials` to a `SyncCredentials`. - public static func convert(object: RLMSyncCredentials) -> SyncCredentials { - return SyncCredentials(object) - } - /// Convert a `RLMShouldCompactOnLaunchBlock` to a Realm Swift compact block. public static func convert(object: @escaping RLMShouldCompactOnLaunchBlock) -> (Int, Int) -> Bool { return { totalBytes, usedBytes in @@ -153,14 +143,4 @@ public final class ObjectiveCSupport { return object(Int(totalBytes), Int(usedBytes)) } } - - /// Convert a `SyncConfiguration` to a `RLMSyncConfiguration`. - public static func convert(object: SyncConfiguration) -> RLMSyncConfiguration { - return object.asConfig() - } - - /// Convert a `RLMSyncConfiguration` to a `SyncConfiguration`. - public static func convert(object: RLMSyncConfiguration) -> SyncConfiguration { - return SyncConfiguration(config: object) - } } diff --git a/Pods/RealmSwift/RealmSwift/Optional.swift b/Pods/RealmSwift/RealmSwift/Optional.swift index 6cf5838dec..5f302f04d8 100644 --- a/Pods/RealmSwift/RealmSwift/Optional.swift +++ b/Pods/RealmSwift/RealmSwift/Optional.swift @@ -24,7 +24,7 @@ public protocol RealmOptionalType { public extension RealmOptionalType { /// :nodoc: - public static func className() -> String { + static func className() -> String { return "" } } @@ -64,3 +64,19 @@ public final class RealmOptional: RLMOptionalBase { self.value = value } } + +#if swift(>=4.1) +extension RealmOptional: Codable where Value: Codable { + public convenience init(from decoder: Decoder) throws { + self.init() + // `try decoder.singleValueContainer().decode(Value?.self)` incorrectly + // rejects null values: https://bugs.swift.org/browse/SR-7404 + let container = try decoder.singleValueContainer() + self.value = container.decodeNil() ? nil : try container.decode(Value.self) + } + + public func encode(to encoder: Encoder) throws { + try self.value.encode(to: encoder) + } +} +#endif diff --git a/Pods/RealmSwift/RealmSwift/Realm.swift b/Pods/RealmSwift/RealmSwift/Realm.swift index def1432389..c5241e17af 100644 --- a/Pods/RealmSwift/RealmSwift/Realm.swift +++ b/Pods/RealmSwift/RealmSwift/Realm.swift @@ -110,17 +110,60 @@ public final class Realm { it will be passed in as an argument. Otherwise, a `Swift.Error` describing what went wrong will be passed to the block instead. + - returns: A task object which can be used to observe or cancel the async open. - note: The returned Realm is confined to the thread on which it was created. Because GCD does not guarantee that queues will always use the same thread, accessing the returned Realm outside the callback block (even if accessed from `callbackQueue`) is unsafe. */ + @discardableResult public static func asyncOpen(configuration: Realm.Configuration = .defaultConfiguration, callbackQueue: DispatchQueue = .main, - callback: @escaping (Realm?, Swift.Error?) -> Void) { - RLMRealm.asyncOpen(with: configuration.rlmConfiguration, callbackQueue: callbackQueue) { rlmRealm, error in + callback: @escaping (Realm?, Swift.Error?) -> Void) -> AsyncOpenTask { + return AsyncOpenTask(rlmTask: RLMRealm.asyncOpen(with: configuration.rlmConfiguration, callbackQueue: callbackQueue) { rlmRealm, error in callback(rlmRealm.flatMap(Realm.init), error) + }) + } + + /** + A task object which can be used to observe or cancel an async open. + + When a synchronized Realm is opened asynchronously, the latest state of the + Realm is downloaded from the server before the completion callback is + invoked. This task object can be used to observe the state of the download + or to cancel it. This should be used instead of trying to observe the + download via the sync session as the sync session itself is created + asynchronously, and may not exist yet when Realm.asyncOpen() returns. + */ + public struct AsyncOpenTask { + fileprivate let rlmTask: RLMAsyncOpenTask + + /** + Cancel the asynchronous open. + + Any download in progress will be cancelled, and the completion block for this + async open will never be called. If multiple async opens on the same Realm are + happening concurrently, all other opens will fail with the error "operation cancelled". + */ + public func cancel() { rlmTask.cancel() } + + /** + Register a progress notification block. + + Each registered progress notification block is called whenever the sync + subsystem has new progress data to report until the task is either cancelled + or the completion callback is called. Progress notifications are delivered on + the supplied queue. + + - parameter queue: The queue to deliver progress notifications on. + - parameter block: The block to invoke when notifications are available. + */ + public func addProgressNotification(queue: DispatchQueue = .main, + block: @escaping (SyncSession.Progress) -> Void) { + rlmTask.addProgressNotification(on: queue) { transferred, transferrable in + block(SyncSession.Progress(transferred: transferred, transferrable: transferrable)) + } } } @@ -144,12 +187,27 @@ public final class Realm { and generates notifications if applicable. This has no effect if the Realm was already up to date. + You can skip notifiying specific notification blocks about the changes made + in this write transaction by passing in their associated notification + tokens. This is primarily useful when the write transaction is saving + changes already made in the UI and you do not want to have the notification + block attempt to re-apply the same changes. + + The tokens passed to this function must be for notifications for this Realm + which were added on the same thread as the write transaction is being + performed on. Notifications for different threads cannot be skipped using + this method. + + - parameter tokens: An array of notification tokens which were returned + from adding callbacks which you do not want to be + notified for the changes made in this write transaction. + - parameter block: The block containing actions to perform. - throws: An `NSError` if the transaction could not be completed successfully. If `block` throws, the function throws the propagated `ErrorType` instead. */ - public func write(_ block: (() throws -> Void)) throws { + public func write(withoutNotifying tokens: [NotificationToken] = [], _ block: (() throws -> Void)) throws { beginWrite() do { try block() @@ -157,7 +215,7 @@ public final class Realm { if isInWriteTransaction { cancelWrite() } throw error } - if isInWriteTransaction { try commitWrite() } + if isInWriteTransaction { try commitWrite(withoutNotifying: tokens) } } /** @@ -207,6 +265,10 @@ public final class Realm { - warning: This method may only be called during a write transaction. + - parameter tokens: An array of notification tokens which were returned + from adding callbacks which you do not want to be + notified for the changes made in this write transaction. + - throws: An `NSError` if the transaction could not be written due to running out of disk space or other i/o errors. */ @@ -264,31 +326,94 @@ public final class Realm { // MARK: Adding and Creating objects /** - Adds or updates an existing object into the Realm. + What to do when an object being added to or created in a Realm has a primary key that already exists. + */ + public enum UpdatePolicy: Int { + /** + Throw an exception. This is the default when no policy is specified for `add()` or `create()`. - Only pass `true` to `update` if the object has a primary key. If no object exists in the Realm with the same - primary key value, the object is inserted. Otherwise, the existing object is updated with any changed values. + This behavior is the same as passing `update: false` to `add()` or `create()`. + */ + case error = 0 + /** + Overwrite only properties in the existing object which are different from the new values. This results + in change notifications reporting only the properties which changed, and influences the sync merge logic. - When added, all child relationships referenced by this object will also be added to the Realm if they are not - already in it. If the object or any related objects are already being managed by a different Realm an error will be - thrown. Instead, use one of the `create` functions to insert a copy of a managed object into a different Realm. + If few or no of the properties are changing this will be faster than .all and reduce how much data has + to be written to the Realm file. If all of the properties are changing, it may be slower than .all (but + will never result in *more* data being written). + */ + case modified = 1 + /** + Overwrite all properties in the existing object with the new values, even if they have not changed. This + results in change notifications reporting all properties as changed, and influences the sync merge logic. + + This behavior is the same as passing `update: true` to `add()` or `create()`. + */ + case all = 2 + } + + /** + Adds an unmanaged object to this Realm. + + If `update` is `true` and an object with the same primary key already exists in this Realm, the existing object + will be overwritten by the newly added one. If `update` is `false` then it is instead a non-recoverable error + to add an object with a primary key that is already in use. `update` must be `false` for object types which + do not have a primary key. + + Adding an object to a Realm will also add all child relationships referenced by that object (via `Object` and + `List` properties). Those objects must also be valid objects to add to this Realm, and the value of + the `update:` parameter is propagated to those adds. - The object to be added must be valid and cannot have been previously deleted from a Realm (i.e. `isInvalidated` - must be `false`). + The object to be added must either be an unmanaged object or a valid object which is already managed by this + Realm. Adding an object already managed by this Realm is a no-op, while adding an object which is managed by + another Realm or which has been deleted from any Realm (i.e. one where `isInvalidated` is `true`) is an error. + + To copy a managed object from one Realm to another, use `create()` instead. + + - warning: This method may only be called during a write transaction. - parameter object: The object to be added to this Realm. - parameter update: If `true`, the Realm will try to find an existing copy of the object (with the same primary key), and update it. Otherwise, the object will be added. */ - public func add(_ object: Object, update: Bool = false) { - if update && object.objectSchema.primaryKeyProperty == nil { + @available(*, deprecated, message: "Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.") + public func add(_ object: Object, update: Bool) { + add(object, update: update ? .all : .error) + } + + /** + Adds an unmanaged object to this Realm. + + If an object with the same primary key already exists in this Realm, it is updated with the property values from + this object as specified by the `UpdatePolicy` selected. The update policy must be `.error` for objects with no + primary key. + + Adding an object to a Realm will also add all child relationships referenced by that object (via `Object` and + `List` properties). Those objects must also be valid objects to add to this Realm, and the value of + the `update:` parameter is propagated to those adds. + + The object to be added must either be an unmanaged object or a valid object which is already managed by this + Realm. Adding an object already managed by this Realm is a no-op, while adding an object which is managed by + another Realm or which has been deleted from any Realm (i.e. one where `isInvalidated` is `true`) is an error. + + To copy a managed object from one Realm to another, use `create()` instead. + + - warning: This method may only be called during a write transaction. + + - parameter object: The object to be added to this Realm. + - parameter update: What to do if an object with the same primary key alredy exists. Must be `.error` for objects + without a primary key. + */ + public func add(_ object: Object, update: UpdatePolicy = .error) { + if update != .error && object.objectSchema.primaryKeyProperty == nil { throwRealmException("'\(object.objectSchema.className)' does not have a primary key and can not be updated") } - RLMAddObjectToRealm(object, rlmRealm, update) + RLMAddObjectToRealm(object, rlmRealm, RLMUpdatePolicy(rawValue: UInt(update.rawValue))!) } /** - Adds or updates all the objects in a collection into the Realm. + Adds all the objects in a collection into the Realm. - see: `add(_:update:)` @@ -297,7 +422,27 @@ public final class Realm { - parameter objects: A sequence which contains objects to be added to the Realm. - parameter update: If `true`, objects that are already in the Realm will be updated instead of added anew. */ - public func add(_ objects: S, update: Bool = false) where S.Iterator.Element: Object { + @available(*, deprecated, message: "Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.") + public func add(_ objects: S, update: Bool) where S.Iterator.Element: Object { + for obj in objects { + add(obj, update: update) + } + } + + /** + Adds all the objects in a collection into the Realm. + + - see: `add(_:update:)` + + - warning: This method may only be called during a write transaction. + + - parameter objects: A sequence which contains objects to be added to the Realm. + - parameter update: How to handle + without a primary key. + - parameter update: How to handle objects in the collection with a primary key that alredy exists in this + Realm. Must be `.error` for object types without a primary key. + */ + public func add(_ objects: S, update: UpdatePolicy = .error) where S.Iterator.Element: Object { for obj in objects { add(obj, update: update) } @@ -339,12 +484,49 @@ public final class Realm { - returns: The newly created object. */ @discardableResult - public func create(_ type: T.Type, value: Any = [:], update: Bool = false) -> T { - let typeName = (type as Object.Type).className() - if update && schema[typeName]?.primaryKeyProperty == nil { - throwRealmException("'\(typeName)' does not have a primary key and can not be updated") + @available(*, deprecated, message: "Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.") + public func create(_ type: T.Type, value: Any = [:], update: Bool) -> T { + return create(type, value: value, update: update ? .all : .error) + } + + /** + Creates a Realm object with a given value, adding it to the Realm and returning it. + + The `value` argument can be a Realm object, a key-value coding compliant object, an array + or dictionary returned from the methods in `NSJSONSerialization`, or an `Array` containing + one element for each managed property. Do not pass in a `LinkingObjects` instance, either + by itself or as a member of a collection. If the `value` argument is an array, all properties + must be present, valid and in the same order as the properties defined in the model. + + If the object type does not have a primary key or no object with the specified primary key + already exists, a new object is created in the Realm. If an object already exists in the Realm + with the specified primary key and the update policy is `.modified` or `.all`, the existing + object will be updated and a reference to that object will be returned. + + If the object is being updated, all properties defined in its schema will be set by copying + from `value` using key-value coding. If the `value` argument does not respond to `value(forKey:)` + for a given property name (or getter name, if defined), that value will remain untouched. + Nullable properties on the object can be set to nil by using `NSNull` as the updated value, + or (if you are passing in an instance of an `Object` subclass) setting the corresponding + property on `value` to nil. + + - warning: This method may only be called during a write transaction. + + - parameter type: The type of the object to create. + - parameter value: The value used to populate the object. + - parameter update: What to do if an object with the same primary key alredy exists. Must be `.error` for object + types without a primary key. + + - returns: The newly created object. + */ + @discardableResult + public func create(_ type: T.Type, value: Any = [:], update: UpdatePolicy = .error) -> T { + if update != .error { + RLMVerifyHasPrimaryKey(type) } - return unsafeDowncast(RLMCreateObjectInRealmWithValue(rlmRealm, typeName, value, update), to: T.self) + let typeName = (type as Object.Type).className() + return unsafeDowncast(RLMCreateObjectInRealmWithValue(rlmRealm, typeName, value, + RLMUpdatePolicy(rawValue: UInt(update.rawValue))!), to: type) } /** @@ -387,11 +569,56 @@ public final class Realm { :nodoc: */ @discardableResult - public func dynamicCreate(_ typeName: String, value: Any = [:], update: Bool = false) -> DynamicObject { - if update && schema[typeName]?.primaryKeyProperty == nil { + @available(*, deprecated, message: "Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.") + public func dynamicCreate(_ typeName: String, value: Any = [:], update: Bool) -> DynamicObject { + return dynamicCreate(typeName, value: value, update: update ? .all : .error) + } + + /** + This method is useful only in specialized circumstances, for example, when building + components that integrate with Realm. If you are simply building an app on Realm, it is + recommended to use the typed method `create(_:value:update:)`. + + Creates or updates an object with the given class name and adds it to the `Realm`, populating + the object with the given value. + + The `value` argument can be a Realm object, a key-value coding compliant object, an array + or dictionary returned from the methods in `NSJSONSerialization`, or an `Array` containing + one element for each managed property. Do not pass in a `LinkingObjects` instance, either + by itself or as a member of a collection. If the `value` argument is an array, all properties + must be present, valid and in the same order as the properties defined in the model. + + If the object type does not have a primary key or no object with the specified primary key + already exists, a new object is created in the Realm. If an object already exists in the Realm + with the specified primary key and the update policy is `.modified` or `.all`, the existing + object will be updated and a reference to that object will be returned. + + If the object is being updated, all properties defined in its schema will be set by copying + from `value` using key-value coding. If the `value` argument does not respond to `value(forKey:)` + for a given property name (or getter name, if defined), that value will remain untouched. + Nullable properties on the object can be set to nil by using `NSNull` as the updated value, + or (if you are passing in an instance of an `Object` subclass) setting the corresponding + property on `value` to nil. + + + - warning: This method can only be called during a write transaction. + + - parameter className: The class name of the object to create. + - parameter value: The value used to populate the object. + - parameter update: What to do if an object with the same primary key alredy exists. + Must be `.error` for object types without a primary key. + + - returns: The created object. + + :nodoc: + */ + @discardableResult + public func dynamicCreate(_ typeName: String, value: Any = [:], update: UpdatePolicy = .error) -> DynamicObject { + if update != .error && schema[typeName]?.primaryKeyProperty == nil { throwRealmException("'\(typeName)' does not have a primary key and can not be updated") } - return noWarnUnsafeBitCast(RLMCreateObjectInRealmWithValue(rlmRealm, typeName, value, update), + return noWarnUnsafeBitCast(RLMCreateObjectInRealmWithValue(rlmRealm, typeName, value, + RLMUpdatePolicy(rawValue: UInt(update.rawValue))!), to: DynamicObject.self) } diff --git a/Pods/RealmSwift/RealmSwift/RealmCollection.swift b/Pods/RealmSwift/RealmSwift/RealmCollection.swift index f2a427b74f..44f83b31fc 100644 --- a/Pods/RealmSwift/RealmSwift/RealmCollection.swift +++ b/Pods/RealmSwift/RealmSwift/RealmCollection.swift @@ -32,18 +32,16 @@ public struct RLMIterator: IteratorProtocol { /// Advance to the next element and return it, or `nil` if no next element exists. public mutating func next() -> Element? { let next = generatorBase.next() - #if swift(>=3.4) && (swift(>=4.1.50) || !swift(>=4)) if next is NSNull { return Element._nilValue() } - #endif if let next = next as? Object? { if next == nil { return nil as Element? } return unsafeBitCast(next, to: Optional.self) } - return next as! Element? + return dynamicBridgeCast(fromObjectiveC: next as Any) } } @@ -134,7 +132,6 @@ private func forceCast(_ from: A, to type: U.Type) -> U { return from as! U } -#if swift(>=3.4) && (swift(>=4.1.50) || !swift(>=4)) /// A type which can be stored in a Realm List or Results. /// /// Declaring additional types as conforming to this protocol will not make them @@ -147,18 +144,6 @@ public protocol RealmCollectionValue: Equatable { /// :nodoc: static func _nilValue() -> Self } -#else -/// A type which can be stored in a Realm List or Results -/// -/// Declaring additional types as conforming to this protocol will not make them -/// actually work. Most of the logic for how to store values in Realm is not -/// implemented in Swift and there is currently no extension mechanism for -/// supporting more types. -public protocol RealmCollectionValue { - /// :nodoc: - static func _rlmArray() -> RLMArray -} -#endif extension RealmCollectionValue { /// :nodoc: @@ -181,11 +166,10 @@ private func arrayType(_ type: T.Type) -> RLMArray { case is String.Type: return RLMArray(objectType: .string, optional: true) case is Data.Type: return RLMArray(objectType: .data, optional: true) case is Date.Type: return RLMArray(objectType: .date, optional: true) - default: fatalError("Unsupported type for List: \(T.self)?") + default: fatalError("Unsupported type for List: \(type)?") } } -#if swift(>=3.4) && (swift(>=4.1.50) || !swift(>=4)) extension Optional: RealmCollectionValue where Wrapped: RealmCollectionValue { /// :nodoc: public static func _rlmArray() -> RLMArray { @@ -196,18 +180,6 @@ extension Optional: RealmCollectionValue where Wrapped: RealmCollectionValue { return nil } } -#else -extension Optional: RealmCollectionValue { - /// :nodoc: - public static func _rlmArray() -> RLMArray { - return arrayType(Wrapped.self) - } - /// :nodoc: - public static func _nilValue() -> Optional { - return nil - } -} -#endif extension Int: RealmCollectionValue {} extension Int8: RealmCollectionValue {} @@ -252,21 +224,12 @@ extension Data: RealmCollectionValue { } } -#if swift(>=3.2) -// FIXME: When we drop support for Swift 3.1, change ElementType to Element -// throughout the project (this is a non-breaking change). We use ElementType -// only because of limitations in Swift 3.1's compiler. /// :nodoc: public protocol RealmCollectionBase: RandomAccessCollection, LazyCollectionProtocol, CustomStringConvertible, ThreadConfined where Element: RealmCollectionValue { + // This typealias was needed with Swift 3.1. It no longer is, but remains + // just in case someone was depending on it typealias ElementType = Element } -#else -/// :nodoc: -public protocol RealmCollectionBase: RandomAccessCollection, LazyCollectionProtocol, CustomStringConvertible, ThreadConfined { - /// The type of the objects contained in the collection. - associatedtype ElementType: RealmCollectionValue -} -#endif /** A homogenous collection of `Object`s which can be retrieved, filtered, sorted, and operated upon. @@ -300,7 +263,7 @@ public protocol RealmCollection: RealmCollectionBase { - parameter object: An object. */ - func index(of object: ElementType) -> Int? + func index(of object: Element) -> Int? /** Returns the index of the first object matching the predicate, or `nil` if no objects match. @@ -324,14 +287,14 @@ public protocol RealmCollection: RealmCollectionBase { - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. */ - func filter(_ predicateFormat: String, _ args: Any...) -> Results + func filter(_ predicateFormat: String, _ args: Any...) -> Results /** Returns a `Results` containing all objects matching the given predicate in the collection. - parameter predicate: The predicate to use to filter the objects. */ - func filter(_ predicate: NSPredicate) -> Results + func filter(_ predicate: NSPredicate) -> Results // MARK: Sorting @@ -349,7 +312,7 @@ public protocol RealmCollection: RealmCollectionBase { - parameter keyPath: The key path to sort by. - parameter ascending: The direction to sort in. */ - func sorted(byKeyPath keyPath: String, ascending: Bool) -> Results + func sorted(byKeyPath keyPath: String, ascending: Bool) -> Results /** Returns a `Results` containing the objects in the collection, but sorted. @@ -361,7 +324,7 @@ public protocol RealmCollection: RealmCollectionBase { - parameter sortDescriptors: A sequence of `SortDescriptor`s to sort by. */ - func sorted(by sortDescriptors: S) -> Results where S.Iterator.Element == SortDescriptor + func sorted(by sortDescriptors: S) -> Results where S.Iterator.Element == SortDescriptor // MARK: Aggregate Operations @@ -493,7 +456,7 @@ public protocol RealmCollection: RealmCollectionBase { func observe(_ block: @escaping (RealmCollectionChange) -> Void) -> NotificationToken /// :nodoc: - func _observe(_ block: @escaping (RealmCollectionChange>) -> Void) -> NotificationToken + func _observe(_ block: @escaping (RealmCollectionChange>) -> Void) -> NotificationToken } /// :nodoc: @@ -511,19 +474,17 @@ extension Optional: OptionalProtocol { } -// FIXME: See the declaration of RealmCollectionBase for why this `#if` is required. -#if swift(>=3.2) public extension RealmCollection where Element: MinMaxType { /** Returns the minimum (lowest) value of the collection, or `nil` if the collection is empty. */ - public func min() -> Element? { + func min() -> Element? { return min(ofProperty: "self") } /** Returns the maximum (highest) value of the collection, or `nil` if the collection is empty. */ - public func max() -> Element? { + func max() -> Element? { return max(ofProperty: "self") } } @@ -532,13 +493,13 @@ public extension RealmCollection where Element: OptionalProtocol, Element.Wrappe /** Returns the minimum (lowest) value of the collection, or `nil` if the collection is empty. */ - public func min() -> Element.Wrapped? { + func min() -> Element.Wrapped? { return min(ofProperty: "self") } /** Returns the maximum (highest) value of the collection, or `nil` if the collection is empty. */ - public func max() -> Element.Wrapped? { + func max() -> Element.Wrapped? { return max(ofProperty: "self") } } @@ -547,13 +508,13 @@ public extension RealmCollection where Element: AddableType { /** Returns the sum of the values in the collection, or `nil` if the collection is empty. */ - public func sum() -> Element { + func sum() -> Element { return sum(ofProperty: "self") } /** Returns the average of all of the values in the collection. */ - public func average() -> Double? { + func average() -> Double? { return average(ofProperty: "self") } } @@ -562,13 +523,13 @@ public extension RealmCollection where Element: OptionalProtocol, Element.Wrappe /** Returns the sum of the values in the collection, or `nil` if the collection is empty. */ - public func sum() -> Element.Wrapped { + func sum() -> Element.Wrapped { return sum(ofProperty: "self") } /** Returns the average of all of the values in the collection. */ - public func average() -> Double? { + func average() -> Double? { return average(ofProperty: "self") } } @@ -582,7 +543,7 @@ public extension RealmCollection where Element: Comparable { - parameter ascending: The direction to sort in. */ - public func sorted(ascending: Bool = true) -> Results { + func sorted(ascending: Bool = true) -> Results { return sorted(byKeyPath: "self", ascending: ascending) } } @@ -596,99 +557,10 @@ public extension RealmCollection where Element: OptionalProtocol, Element.Wrappe - parameter ascending: The direction to sort in. */ - public func sorted(ascending: Bool = true) -> Results { - return sorted(byKeyPath: "self", ascending: ascending) - } -} -#else -public extension RealmCollection where ElementType: MinMaxType { - /** - Returns the minimum (lowest) value of the collection, or `nil` if the collection is empty. - */ - public func min() -> ElementType? { - return min(ofProperty: "self") - } - /** - Returns the maximum (highest) value of the collection, or `nil` if the collection is empty. - */ - public func max() -> ElementType? { - return max(ofProperty: "self") - } -} - -public extension RealmCollection where ElementType: OptionalProtocol, ElementType.Wrapped: MinMaxType { - /** - Returns the minimum (lowest) value of the collection, or `nil` if the collection is empty. - */ - public func min() -> ElementType.Wrapped? { - return min(ofProperty: "self") - } - /** - Returns the maximum (highest) value of the collection, or `nil` if the collection is empty. - */ - public func max() -> ElementType.Wrapped? { - return max(ofProperty: "self") - } -} - -public extension RealmCollection where ElementType: AddableType { - /** - Returns the sum of the values in the collection, or `nil` if the collection is empty. - */ - public func sum() -> ElementType { - return sum(ofProperty: "self") - } - /** - Returns the average of all of the values in the collection. - */ - public func average() -> Double? { - return average(ofProperty: "self") - } -} - -public extension RealmCollection where ElementType: OptionalProtocol, ElementType.Wrapped: AddableType { - /** - Returns the sum of the values in the collection, or `nil` if the collection is empty. - */ - public func sum() -> ElementType.Wrapped { - return sum(ofProperty: "self") - } - /** - Returns the average of all of the values in the collection. - */ - public func average() -> Double? { - return average(ofProperty: "self") - } -} - -public extension RealmCollection where ElementType: Comparable { - /** - Returns a `Results` containing the objects in the collection, but sorted. - - Objects are sorted based on their values. For example, to sort a collection of `Date`s from - neweset to oldest based, you might call `dates.sorted(ascending: true)`. - - - parameter ascending: The direction to sort in. - */ - public func sorted(ascending: Bool = true) -> Results { - return sorted(byKeyPath: "self", ascending: ascending) - } -} - -public extension RealmCollection where ElementType: OptionalProtocol, ElementType.Wrapped: Comparable { - /** - Returns a `Results` containing the objects in the collection, but sorted. - - Objects are sorted based on their values. For example, to sort a collection of `Date`s from - neweset to oldest based, you might call `dates.sorted(ascending: true)`. - - - parameter ascending: The direction to sort in. - */ - public func sorted(ascending: Bool = true) -> Results { + func sorted(ascending: Bool = true) -> Results { return sorted(byKeyPath: "self", ascending: ascending) } } -#endif private class _AnyRealmCollectionBase: AssistedObjectiveCBridgeable { typealias Wrapper = AnyRealmCollection @@ -723,7 +595,7 @@ private class _AnyRealmCollectionBase: AssistedObjectiv var bridged: (objectiveCValue: Any, metadata: Any?) { fatalError() } } -private final class _AnyRealmCollection: _AnyRealmCollectionBase { +private final class _AnyRealmCollection: _AnyRealmCollectionBase { let base: C init(base: C) { self.base = base @@ -739,7 +611,7 @@ private final class _AnyRealmCollection: _AnyRealmCollection // MARK: Index Retrieval - override func index(of object: C.ElementType) -> Int? { return base.index(of: object) } + override func index(of object: C.Element) -> Int? { return base.index(of: object) } override func index(matching predicate: NSPredicate) -> Int? { return base.index(matching: predicate) } @@ -749,20 +621,20 @@ private final class _AnyRealmCollection: _AnyRealmCollection // MARK: Filtering - override func filter(_ predicateFormat: String, _ args: Any...) -> Results { + override func filter(_ predicateFormat: String, _ args: Any...) -> Results { return base.filter(NSPredicate(format: predicateFormat, argumentArray: unwrapOptionals(in: args))) } - override func filter(_ predicate: NSPredicate) -> Results { return base.filter(predicate) } + override func filter(_ predicate: NSPredicate) -> Results { return base.filter(predicate) } // MARK: Sorting - override func sorted(byKeyPath keyPath: String, ascending: Bool) -> Results { + override func sorted(byKeyPath keyPath: String, ascending: Bool) -> Results { return base.sorted(byKeyPath: keyPath, ascending: ascending) } override func sorted - (by sortDescriptors: S) -> Results where S.Iterator.Element == SortDescriptor { + (by sortDescriptors: S) -> Results where S.Iterator.Element == SortDescriptor { return base.sorted(by: sortDescriptors) } @@ -788,12 +660,8 @@ private final class _AnyRealmCollection: _AnyRealmCollection // MARK: Sequence Support - override subscript(position: Int) -> C.ElementType { - #if swift(>=3.2) - return base[position as! C.Index] - #else - return base[position as! C.Index] as! C.ElementType - #endif + override subscript(position: Int) -> C.Element { + return base[position as! C.Index] } override func makeIterator() -> RLMIterator { @@ -862,7 +730,7 @@ public final class AnyRealmCollection: RealmColle } /// Creates an `AnyRealmCollection` wrapping `base`. - public init(_ base: C) where C.ElementType == Element { + public init(_ base: C) where C.Element == Element { self.base = _AnyRealmCollection(base: base) } @@ -1155,7 +1023,7 @@ extension AnyRealmCollection: AssistedObjectiveCBridgeable { extension RealmCollection { @available(*, unavailable, renamed: "sorted(byKeyPath:ascending:)") - func sorted(byProperty property: String, ascending: Bool) -> Results { fatalError() } + func sorted(byProperty property: String, ascending: Bool) -> Results { fatalError() } @available(*, unavailable, renamed: "observe(_:)") public func addNotificationBlock(_ block: @escaping (RealmCollectionChange) -> Void) -> NotificationToken { diff --git a/Pods/RealmSwift/RealmSwift/Results.swift b/Pods/RealmSwift/RealmSwift/Results.swift index 068c779201..0b0e43d6d6 100644 --- a/Pods/RealmSwift/RealmSwift/Results.swift +++ b/Pods/RealmSwift/RealmSwift/Results.swift @@ -257,7 +257,7 @@ public final class Results: NSObject, NSFastEnume /** Returns a `Results` containing distinct objects based on the specified key paths - + - parameter keyPaths: The key paths used produce distinct results */ public func distinct(by keyPaths: S) -> Results @@ -337,7 +337,7 @@ public final class Results: NSObject, NSFastEnume will reflect the state of the Realm after the write transaction. ```swift - let results = realm.objects(Dog.self) + let dogs = realm.objects(Dog.self) print("dogs.count: \(dogs?.count)") // => 0 let token = dogs.observe { changes in switch changes { @@ -418,3 +418,16 @@ extension Results: AssistedObjectiveCBridgeable { return (objectiveCValue: rlmResults, metadata: nil) } } + +// MARK: - Codable + +#if swift(>=4.1) +extension Results: Encodable where Element: Encodable { + public func encode(to encoder: Encoder) throws { + var container = encoder.unkeyedContainer() + for value in self { + try container.encode(value) + } + } +} +#endif diff --git a/Pods/RealmSwift/RealmSwift/SwiftVersion.swift b/Pods/RealmSwift/RealmSwift/SwiftVersion.swift index 5b893bd29e..f49e91de84 100644 --- a/Pods/RealmSwift/RealmSwift/SwiftVersion.swift +++ b/Pods/RealmSwift/RealmSwift/SwiftVersion.swift @@ -1 +1 @@ -let swiftLanguageVersion = "4.2.1" +let swiftLanguageVersion = "5.1" diff --git a/Pods/RealmSwift/RealmSwift/Sync.swift b/Pods/RealmSwift/RealmSwift/Sync.swift index a50b92a776..2b03937194 100644 --- a/Pods/RealmSwift/RealmSwift/Sync.swift +++ b/Pods/RealmSwift/RealmSwift/Sync.swift @@ -188,7 +188,7 @@ public typealias Provider = RLMIdentityProvider public enum ServerValidationPolicy { /// Perform no validation and accept potentially invalid certificates. /// - /// -warning: DO NOT USE THIS OPTION IN PRODUCTION. + /// - warning: DO NOT USE THIS OPTION IN PRODUCTION. case none /// Use the default server trust evaluation based on the system-wide CA @@ -237,6 +237,8 @@ public struct SyncConfiguration { /** Whether the SSL certificate of the Realm Object Server should be validated. + + - warning: This has been deprecated. Use serverValidationPolicy instead. */ @available(*, deprecated, message: "Use serverValidationPolicy instead") public var enableSSLValidation: Bool { @@ -249,7 +251,7 @@ public struct SyncConfiguration { Partial synchronization mode means that no objects are synchronized from the remote Realm except those matching queries that the user explicitly specifies. - -warning: Partial synchronization is a tech preview. Its APIs are subject to change. + - warning: This has been deprecated - use fullSyncronization instead. */ @available(*, deprecated, message: "Use fullSynchronization instead") public var isPartial: Bool { @@ -316,11 +318,13 @@ public struct SyncConfiguration { `enableSSLValidation` is true by default. It can be disabled for debugging purposes. + - warning: This has ben deprecated. Use SyncUser.configuration() instead. + - warning: The URL must be absolute (e.g. `realms://example.com/~/foo`), and cannot end with `.realm`, `.realm.lock` or `.realm.management`. - warning: NEVER disable SSL validation for a system running in production. - */ + */ @available(*, deprecated, message: "Use SyncUser.configuration() instead") public init(user: SyncUser, realmURL: URL, enableSSLValidation: Bool = true, isPartial: Bool = false, urlPrefix: String? = nil) { self.user = user @@ -334,10 +338,12 @@ public struct SyncConfiguration { /** Return a Realm configuration for syncing with the default Realm of the currently logged-in sync user. - Partial synchronization is enabled in the returned configuration. + Query based synchronization is enabled in the returned configuration. - requires: There be exactly one logged-in `SyncUser` - */ + + - warning: This has ben deprecated. Use SyncUser.configuration() instead. + */ @available(*, deprecated, message: "Use SyncUser.configuration() instead") public static func automatic() -> Realm.Configuration { return ObjectiveCSupport.convert(object: RLMSyncConfiguration.automaticConfiguration()) @@ -412,6 +418,7 @@ public struct SyncCredentials { } /// Initialize new credentials using a nickname. + @available(*, deprecated, message: "Use usernamePassword instead.") public static func nickname(_ nickname: String, isAdmin: Bool = false) -> SyncCredentials { return SyncCredentials(RLMSyncCredentials(nickname: nickname, isAdmin: isAdmin)) } @@ -420,6 +427,11 @@ public struct SyncCredentials { public static func anonymous() -> SyncCredentials { return SyncCredentials(RLMSyncCredentials.anonymous()) } + + /// Initialize new credentials using an externally-issued refresh token + public static func customRefreshToken(_ token: String, identity: String, isAdmin: Bool = false) -> SyncCredentials { + return SyncCredentials(RLMSyncCredentials(customRefreshToken: token, identity: identity, isAdmin: isAdmin)) + } } extension RLMSyncCredentials { @@ -633,14 +645,14 @@ public extension SyncSession { - see: `RLMSyncSessionState` */ - public typealias State = RLMSyncSessionState + typealias State = RLMSyncSessionState /** The current state of a sync session's connection. - see: `RLMSyncConnectionState` */ - public typealias ConnectionState = RLMSyncConnectionState + typealias ConnectionState = RLMSyncConnectionState /** The transfer direction (upload or download) tracked by a given progress notification block. @@ -648,7 +660,7 @@ public extension SyncSession { Progress notification blocks can be registered on sessions if your app wishes to be informed how many bytes have been uploaded or downloaded, for example to show progress indicator UIs. */ - public enum ProgressDirection { + enum ProgressDirection { /// For monitoring upload progress. case upload /// For monitoring download progress. @@ -661,7 +673,7 @@ public extension SyncSession { Progress notification blocks can be registered on sessions if your app wishes to be informed how many bytes have been uploaded or downloaded, for example to show progress indicator UIs. */ - public enum ProgressMode { + enum ProgressMode { /** The block will be called forever, or until it is unregistered by calling `ProgressNotificationToken.invalidate()`. @@ -688,12 +700,12 @@ public extension SyncSession { been automatically stopped, calling `invalidate()` does nothing. `invalidate()` should be called before the token is destroyed. */ - public typealias ProgressNotificationToken = RLMProgressNotificationToken + typealias ProgressNotificationToken = RLMProgressNotificationToken /** A struct encapsulating progress information, as well as useful helper methods. */ - public struct Progress { + struct Progress { /// The number of bytes that have been transferred. public let transferredBytes: Int @@ -724,7 +736,7 @@ public extension SyncSession { return transferredBytes >= transferrableBytes } - fileprivate init(transferred: UInt, transferrable: UInt) { + internal init(transferred: UInt, transferrable: UInt) { transferredBytes = Int(transferred) transferrableBytes = Int(transferrable) } @@ -759,9 +771,9 @@ public extension SyncSession { - see: `ProgressDirection`, `Progress`, `ProgressNotificationToken` */ - public func addProgressNotification(for direction: ProgressDirection, - mode: ProgressMode, - block: @escaping (Progress) -> Void) -> ProgressNotificationToken? { + func addProgressNotification(for direction: ProgressDirection, + mode: ProgressMode, + block: @escaping (Progress) -> Void) -> ProgressNotificationToken? { return __addProgressNotification(for: (direction == .upload ? .upload : .download), mode: (mode == .reportIndefinitely ? .reportIndefinitely @@ -779,7 +791,7 @@ extension Realm { The results will be returned asynchronously in the callback. Use `Results.observe(_:)` to be notified to changes to the set of synchronized objects. - -warning: Partial synchronization is a tech preview. Its APIs are subject to change. + - warning: Partial synchronization is a tech preview. Its APIs are subject to change. */ @available(*, deprecated, message: "Use Results.subscribe()") public func subscribe(to objects: T.Type, where: String, @@ -844,10 +856,6 @@ extension Results where Element == SyncPermission { // MARK: - Partial sync subscriptions -// Partial sync subscriptions are only available in Swift 3.2 and newer. -#if swift(>=3.2) - - /// The possible states of a sync subscription. public enum SyncSubscriptionState: Equatable { /// The subscription is being created, but has not yet been written to the synced Realm. @@ -902,7 +910,7 @@ public enum SyncSubscriptionState: Equatable { /// Changes to the state of the subscription can be observed using `SyncSubscription.observe(_:options:_:)`. /// /// Subscriptions are created using `Results.subscribe()` or `Results.subscribe(named:)`. -public class SyncSubscription { +public final class SyncSubscription: RealmCollectionValue { private let rlmSubscription: RLMSyncSubscription /// The name of the subscription. @@ -913,10 +921,74 @@ public class SyncSubscription { /// The state of the subscription. public var state: SyncSubscriptionState { return SyncSubscriptionState(rlmSubscription) } + /** + The raw query which this subscription is running on the server. + + This string is a serialized representation of the Results which the + subscription was created from. This representation does *not* use NSPredicate + syntax, and is not guaranteed to remain consistent between versions of Realm. + Any use of this other than manual inspection when debugging is likely to be + incorrect. + + This is `nil` while the subscription is in the Creating state. + */ + public var query: String? { return rlmSubscription.query } + + /** + When this subscription was first created. + + This value will be `nil` for subscriptions created with older versions of + Realm which did not store the creation date. Newly created subscriptions + should always have a non-nil creation date. + */ + public var createdAt: Date? { return rlmSubscription.createdAt } + + /** + When this subscription was last updated. + + This value will be `nil` for subscriptions created with older versions of + Realm which did not store the update date. Newly created subscriptions + should always have a non-nil update date. + + The update date is the time when the subscription was last updated by a call + to `Results.subscribe()`, and not when the set of objects which match the + subscription last changed. + */ + public var updatedAt: Date? { return rlmSubscription.updatedAt } + + /** + When this subscription will be automatically removed. + + If the `timeToLive` parameter is set when creating a sync subscription, the + subscription will be automatically removed the first time that any subscription + is created, modified, or deleted after that time has elapsed. + + This property will be `nil` if the `timeToLive` option was not enabled. + */ + public var expiresAt: Date? { return rlmSubscription.expiresAt } + + /** + How long this subscription will persist after last being updated. + + If the `timeToLive` parameter is set when creating a sync subscription, the + subscription will be automatically removed the first time that any subscription + is created, modified, or deleted after that time has elapsed. + + This property will be nil if the `timeToLive` option was not enabled. + */ + public var timeToLive: TimeInterval? { + let ttl = rlmSubscription.timeToLive + return ttl.isNaN ? nil : ttl + } + internal init(_ rlmSubscription: RLMSyncSubscription) { self.rlmSubscription = rlmSubscription } + public static func == (lhs: SyncSubscription, rhs: SyncSubscription) -> Bool { + return lhs.rlmSubscription == rhs.rlmSubscription + } + /// Observe the subscription for state changes. /// /// When the state of the subscription changes, `block` will be invoked and @@ -952,7 +1024,19 @@ public class SyncSubscription { } } +// :nodoc: +extension SyncSubscription: CustomObjectiveCBridgeable { + static func bridging(objCValue: Any) -> SyncSubscription { + return ObjectiveCSupport.convert(object: RLMCastToSyncSubscription(objCValue)) as! SyncSubscription + } + var objCValue: Any { + return 0 + } +} + extension Results { + // MARK: Sync + /// Subscribe to the query represented by this `Results` /// /// Subscribing to a query asks the server to synchronize all objects to the @@ -963,32 +1047,89 @@ extension Results { /// notified of when the subscription has been processed by the server and /// all objects matching the query are available. /// + /// --- + /// /// Creating a new subscription with the same name and query as an existing /// subscription will not create a new subscription, but instead will return /// an object referring to the existing sync subscription. This means that /// performing the same subscription twice followed by removing it once will /// result in no subscription existing. /// - /// The number of top-level matches may optionally be limited. This limit - /// respects the sort and distinct order of the query being subscribed to, - /// if any. Please note that the limit does not count or apply to objects - /// which are added indirectly due to being linked to by the objects in the - /// subscription. If the limit is larger than the number of objects which - /// match the query, all objects will be included. Limiting a subscription - /// requires ROS 3.10.1 or newer, and will fail with an invalid predicate - /// error with older versions. + /// By default trying to create a subscription with a name as an existing + /// subscription with a different query or options will fail. If `update` is + /// `true`, instead the existing subscription will be changed to use the + /// query and options from the new subscription. This only works if the new + /// subscription is for the same type of objects as the existing + /// subscription, and trying to overwrite a subscription with a subscription + /// of a different type of objects will still fail. + /// + /// --- + /// + /// The number of top-level objects which are included in the subscription + /// can optionally be limited by setting the `limit` paramter. If more + /// top-level objects than the limit match the query, only the first + /// `limit` objects will be included. This respects the sort and distinct + /// order of the query being subscribed to for the determination of what the + /// "first" objects are. + /// + /// The limit does not count or apply to objects which are added indirectly + /// due to being linked to by the objects in the subscription or due to + /// being listed in `includeLinkingObjects`. If the limit is larger than the + /// number of objects which match the query, all objects will be + /// included. + /// + /// --- + /// + /// By default subscriptions are persistent, and last until they are + /// explicitly removed by calling `unsubscribe()`. Subscriptions can instead + /// be made temporary by setting the time to live to how long the + /// subscription should remain. After that time has elapsed the subscription + /// will be automatically removed. + /// + /// --- + /// + /// Outgoing links (i.e. `List` and `Object` properties) are automatically + /// included in sync subscriptions. That is, if you subscribe to a query + /// which matches one object, every object which is reachable via links + /// from that object are also included in the subscription. By default, + /// `LinkingObjects` properties do not work this way and instead, they only + /// report objects which happen to be included in a subscription. Specific + /// `LinkingObjects` properties can be explicitly included in the + /// subscription by naming them in the `includingLinkingObjects` array. Any + /// keypath which ends in a `LinkingObjects` property can be included in + /// this array, including ones involving intermediate links. + /// + /// --- + /// + /// Creating a subscription is an asynchronous operation and the newly + /// created subscription will not be reported by Realm.subscriptions() until + /// it has transitioned from the `.creating` state to `.pending`, + /// `.created` or `.error`. /// /// - parameter subscriptionName: An optional name for the subscription. - /// - parameter limit: The maximum number of objects to include in the subscription. + /// - parameter limit: The maximum number of top-level objects to include + /// in the subscription. + /// - parameter update: Whether an existing subscription with the same name + /// should be updated or if it should be an error. + /// - parameter timeToLive: How long in seconds this subscription should + /// remain active. + /// - parameter includingLinkingObjects: Which `LinkingObjects` properties + /// should pull in the contained objects. /// - returns: The subscription. - public func subscribe(named subscriptionName: String? = nil, limit: Int? = nil) -> SyncSubscription { + public func subscribe(named subscriptionName: String? = nil, limit: Int? = nil, + update: Bool = false, timeToLive: TimeInterval? = nil, + includingLinkingObjects: [String] = []) -> SyncSubscription { + let options = RLMSyncSubscriptionOptions() + options.name = subscriptionName + options.overwriteExisting = update if let limit = limit { - return SyncSubscription(rlmResults.subscribe(withName: subscriptionName, limit: UInt(limit))) + options.limit = UInt(limit) } - if let name = subscriptionName { - return SyncSubscription(rlmResults.subscribe(withName: name)) + if let timeToLive = timeToLive { + options.timeToLive = timeToLive } - return SyncSubscription(rlmResults.subscribe()) + options.includeLinkingObjectProperties = includingLinkingObjects + return SyncSubscription(rlmResults.subscribe(with: options)) } } @@ -1004,7 +1145,6 @@ internal class KeyValueObservationNotificationToken: NotificationToken { self.observation = nil } } -#endif // Swift >= 3.2 // MARK: - Migration assistance @@ -1381,6 +1521,8 @@ public struct ObjectPrivileges: OptionSet, CustomDebugStringConvertible { } extension Realm { + // MARK: Sync - Permissions + /** Returns the computed privileges which the current user has for this Realm. @@ -1393,7 +1535,8 @@ extension Realm { operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server. - Non-synchronized Realms always have permission to perform all operations. + Non-synchronized and fully-synchronized Realms always have permission to + perform all operations. - returns: The privileges which the current user has for the current Realm. */ @@ -1413,7 +1556,8 @@ extension Realm { operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server. - Non-synchronized Realms always have permission to perform all operations. + Non-synchronized and fully-synchronized Realms always have permission to + perform all operations. The object must be a valid object managed by this Realm. Passing in an invalidated object, an unmanaged object, or an object managed by a @@ -1438,7 +1582,8 @@ extension Realm { operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server. - Non-synchronized Realms always have permission to perform all operations. + Non-synchronized and fully-synchronized Realms always have permission to + perform all operations. - parameter cls: An Object subclass to get the privileges for. - returns: The privileges which the current user has for the given class. @@ -1459,7 +1604,8 @@ extension Realm { operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server. - Non-synchronized Realms always have permission to perform all operations. + Non-synchronized and fully-synchronized Realms always have permission to + perform all operations. - parameter className: The name of an Object subclass to get the privileges for. - returns: The privileges which the current user has for the named class. @@ -1473,7 +1619,7 @@ extension Realm { - parameter cls: An Object subclass to get the permissions for. - returns: The class-wide permissions for the given class. - - requires: This must only be called on a partially-synced Realm. + - requires: This must only be called on a Realm using query-based sync. */ public func permissions(forType cls: T.Type) -> List { return permissions(forClassNamed: cls._realmObjectName() ?? cls.className()) @@ -1485,7 +1631,7 @@ extension Realm { - parameter cls: The name of an Object subclass to get the permissions for. - returns: The class-wide permissions for the named class. - requires: className must name a class in this Realm's schema. - - requires: This must only be called on a partially-synced Realm. + - requires: This must only be called on a Realm using query-based sync. */ public func permissions(forClassNamed className: String) -> List { let classPermission = object(ofType: ClassPermission.self, forPrimaryKey: className)! @@ -1495,11 +1641,44 @@ extension Realm { /** Returns the Realm-wide permissions. - - requires: This must only be called on a partially-synced Realm. + - requires: This must only be called on a Realm using query-based sync. */ public var permissions: List { return object(ofType: RealmPermission.self, forPrimaryKey: 0)!.permissions } + + // MARK: Sync - Subscriptions + + /** + Returns this list of the query-based sync subscriptions made for this Realm. + + This list includes all subscriptions which are currently in the states + `.pending`, `.created`, and `.error`. Newly created subscriptions which are + still in the `.creating` state are not included, and calling this + immediately after calling `Results.subscribe()` will typically not include + that subscription. Similarly, because unsubscription happens asynchronously, + this may continue to include subscriptions after + `SyncSubscription.unsubscribe()` is called on them. + + - requires: This must only be called on a Realm using query-based sync. + */ + public func subscriptions() -> Results> { + return Results(rlmRealm.subscriptions() as! RLMResults) + } + + /** + Returns the named query-based sync subscription, if it exists. + + Subscriptions are created asynchronously, so calling this immediately after + calling Results.subscribe(named:)` will typically return `nil`. Only + subscriptions which are currently in the states `.pending`, `.created`, + and `.error` can be retrieved with this method. + + - requires: This must only be called on a Realm using query-based sync. + */ + public func subscription(named: String) -> SyncSubscription? { + return rlmRealm.subscription(withName: named).map(SyncSubscription.init) + } } extension List where Element == Permission { @@ -1518,7 +1697,7 @@ extension List where Element == Permission { */ public func findOrCreate(forRoleNamed roleName: String) -> Permission { precondition(realm != nil, "Cannot be called on an unmanaged object") - return RLMPermissionForRole(_rlmArray, realm!.create(PermissionRole.self, value: [roleName], update: true)) as! Permission + return RLMPermissionForRole(_rlmArray, realm!.create(PermissionRole.self, value: [roleName], update: .modified)) as! Permission } /** diff --git a/Pods/RealmSwift/RealmSwift/ThreadSafeReference.swift b/Pods/RealmSwift/RealmSwift/ThreadSafeReference.swift index 37379fd44b..96af15b566 100644 --- a/Pods/RealmSwift/RealmSwift/ThreadSafeReference.swift +++ b/Pods/RealmSwift/RealmSwift/ThreadSafeReference.swift @@ -93,6 +93,8 @@ public class ThreadSafeReference { } extension Realm { + // MARK: Thread Safe Reference + /** Returns the same object as the one referenced when the `ThreadSafeReference` was first created, but resolved for the current Realm for this thread. Returns `nil` if this object was diff --git a/Pods/RealmSwift/RealmSwift/Util.swift b/Pods/RealmSwift/RealmSwift/Util.swift index 954f4fb6a5..fd5d0ae370 100644 --- a/Pods/RealmSwift/RealmSwift/Util.swift +++ b/Pods/RealmSwift/RealmSwift/Util.swift @@ -83,7 +83,8 @@ extension Object { // MARK: CustomObjectiveCBridgeable -internal func dynamicBridgeCast(fromObjectiveC x: Any) -> T { +/// :nodoc: +public func dynamicBridgeCast(fromObjectiveC x: Any) -> T { if T.self == DynamicObject.self { return unsafeBitCast(x as AnyObject, to: T.self) } else if let bridgeableType = T.self as? CustomObjectiveCBridgeable.Type { @@ -93,7 +94,8 @@ internal func dynamicBridgeCast(fromObjectiveC x: Any) -> T { } } -internal func dynamicBridgeCast(fromSwift x: T) -> Any { +/// :nodoc: +public func dynamicBridgeCast(fromSwift x: T) -> Any { if let x = x as? CustomObjectiveCBridgeable { return x.objCValue } else { diff --git a/Pods/RealmSwift/build.sh b/Pods/RealmSwift/build.sh index 3cbc7c34a6..6fa5542ffa 100755 --- a/Pods/RealmSwift/build.sh +++ b/Pods/RealmSwift/build.sh @@ -6,8 +6,8 @@ # (C) Copyright 2011-2015 by realm.io. ################################################################################## -# Warning: pipefail is not a POSIX compatible option, but on OS X it works just fine. -# OS X uses a POSIX complain version of bash as /bin/sh, but apparently it does +# Warning: pipefail is not a POSIX compatible option, but on macOS it works just fine. +# macOS uses a POSIX complain version of bash as /bin/sh, but apparently it does # not strip away this feature. Also, this will fail if somebody forces the script # to be run with zsh. set -o pipefail @@ -16,6 +16,8 @@ set -e source_root="$(dirname "$0")" # You can override the version of the core library +: ${REALM_BASE_URL:="https://static.realm.io/downloads"} # set it if you need to use a remote repo + : ${REALM_CORE_VERSION:=$(sed -n 's/^REALM_CORE_VERSION=\(.*\)$/\1/p' ${source_root}/dependencies.list)} # set to "current" to always use the current build : ${REALM_SYNC_VERSION:=$(sed -n 's/^REALM_SYNC_VERSION=\(.*\)$/\1/p' ${source_root}/dependencies.list)} @@ -43,7 +45,7 @@ command: clean: clean up/remove all generated files download-core: downloads core library (binary version) download-sync: downloads sync library (binary version, core+sync) - build: builds all iOS and OS X frameworks + build: builds all iOS and macOS frameworks ios-static: builds fat iOS static framework ios-dynamic: builds iOS dynamic frameworks ios-swift: builds RealmSwift frameworks for iOS @@ -51,11 +53,12 @@ command: watchos-swift: builds RealmSwift framework for watchOS tvos: builds tvOS framework tvos-swift: builds RealmSwift framework for tvOS - osx: builds OS X framework - osx-swift: builds RealmSwift framework for OS X - analyze-osx: analyzes OS X framework - test: tests all iOS and OS X frameworks - test-all: tests all iOS and OS X frameworks in both Debug and Release configurations + osx: builds macOS framework + osx-swift: builds RealmSwift framework for macOS + xcframework [plats]: builds xcframeworks for Realm and RealmSwift for given platforms + analyze-osx: analyzes macOS framework + test: tests all iOS and macOS frameworks + test-all: tests all iOS and macOS frameworks in both Debug and Release configurations test-ios-static: tests static iOS framework on 32-bit and 64-bit simulators test-ios-dynamic: tests dynamic iOS framework on 32-bit and 64-bit simulators test-ios-swift: tests RealmSwift iOS framework on 32-bit and 64-bit simulators @@ -65,15 +68,16 @@ command: test-tvos: tests tvOS framework test-tvos-swift: tests RealmSwift tvOS framework test-tvos-devices: tests ObjC & Swift tvOS frameworks on all attached tvOS devices - test-osx: tests OS X framework - test-osx-swift: tests RealmSwift OS X framework + test-osx: tests macOS framework + test-osx-swift: tests RealmSwift macOS framework + test-swiftpm: tests ObjC and Swift macOS frameworks via SwiftPM verify: verifies docs, osx, osx-swift, ios-static, ios-dynamic, ios-swift, ios-device in both Debug and Release configurations, swiftlint verify-osx-object-server: downloads the Realm Object Server and runs the Objective-C and Swift integration tests docs: builds docs in docs/output examples: builds all examples examples-ios: builds all static iOS examples examples-ios-swift: builds all Swift iOS examples - examples-osx: builds all OS X examples + examples-osx: builds all macOS examples get-version: get the current version set-version version: set the version cocoapods-setup: download realm-core and create a stub RLMPlatform.h file to enable building via CocoaPods @@ -124,7 +128,7 @@ xc() { } xctest() { - xc "$@" build + xc "$@" build-for-testing xc "$@" test } @@ -145,25 +149,18 @@ build_combined() { local os_name="" if [[ "$os" == "iphoneos" ]]; then os_name="ios" - destination="iPhone 6" + destination="iPhone 8" elif [[ "$os" == "watchos" ]]; then os_name="$os" - if (( $(xcode_version_major) >= 10 )); then - destination="Apple Watch Series 3 - 42mm" - else - destination="Apple Watch - 42mm" - fi + destination="Apple Watch Series 3 - 42mm" elif [[ "$os" == "appletvos" ]]; then os_name="tvos" - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" fi # Derive build paths local build_products_path="build/DerivedData/Realm/Build/Products" + local build_intermediates_path="build/DerivedData/Realm/Build/Intermediates.noindex" local product_name="$module_name.framework" local binary_path="$module_name" local os_path="$build_products_path/$config-$os$scope_suffix/$product_name" @@ -179,6 +176,20 @@ build_combined() { cp $simulator_path/Modules/$module_name.swiftmodule/* $os_path/Modules/$module_name.swiftmodule/ fi + # Xcode 10.2 merges the generated headers together with ifdef guards for + # each of the target platforms. This doesn't handle merging + # device/simulator builds, so we need to take care of that ourselves. + # Currently all platforms have identical headers, so we just pick one and + # use that rather than merging, but this may change in the future. + if [ -f $os_path/Headers/$module_name-Swift.h ]; then + unique_headers=$(find $build_intermediates_path -name $module_name-Swift.h -exec shasum {} \; | cut -d' ' -f 1 | uniq | grep -c '^') + if [ $unique_headers != "1" ]; then + echo "Platform-specific Swift generated headers are not identical. Merging them is required and is not yet implemented." + exit 1 + fi + find $build_intermediates_path -name $module_name-Swift.h -exec cp {} $os_path/Headers \; -quit + fi + # Copy *.bcsymbolmap to .framework for submitting app with bitcode copy_bcsymbolmap "$build_products_path/$config-$os$scope_suffix" "$os_path" @@ -196,6 +207,12 @@ build_combined() { fi } +copy_realm_framework() { + local platform="$1" + rm -rf build/$platform/swift-$REALM_XCODE_VERSION/Realm.framework + cp -R build/$platform/Realm.framework build/$platform/swift-$REALM_XCODE_VERSION +} + clean_retrieve() { mkdir -p "$2" rm -rf "$2/$3" @@ -210,20 +227,14 @@ move_to_clean_dir() { test_ios_static() { destination="$1" - xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' build" - if (( $(xcode_version_major) < 9 )); then - xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' test 'ARCHS=\$(ARCHS_STANDARD_32_BIT)'" - fi - - # Xcode's depending tracking is lacking and it doesn't realize that the Realm static framework's static library - # needs to be recreated when the active architectures change. Help Xcode out by removing the static library. - settings=$(xcode "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' -showBuildSettings") - path=$(echo "$settings" | awk '/CONFIGURATION_BUILD_DIR/ { cbd = $3; } /EXECUTABLE_PATH/ { ep = $3; } END { printf "%s/%s\n", cbd, ep; }') - rm "$path" - + xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' build-for-testing" xc "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination '$destination' test" } +plist_get() { + /usr/libexec/PlistBuddy -c "Print :$2" $1 2> /dev/null +} + ###################################### # Device Test Helper ###################################### @@ -319,16 +330,16 @@ download_common() { if [ "$download_type" == "core" ]; then version=$REALM_CORE_VERSION - url="https://static.realm.io/downloads/core/realm-core-${version}.tar.xz" + url="${REALM_BASE_URL}/core/realm-core-${version}.tar.xz" elif [ "$download_type" == "sync" ]; then version=$REALM_SYNC_VERSION - url="https://static.realm.io/downloads/sync/realm-sync-cocoa-${version}.tar.xz" + url="${REALM_BASE_URL}/sync/realm-sync-cocoa-${version}.tar.xz" else echo "Unknown dowload_type: $download_type" exit 1 fi - echo "Downloading dependency: ${download_type} ${version}" + echo "Downloading dependency: ${download_type} ${version} from ${url}" if [ -z "$TMPDIR" ]; then TMPDIR='/tmp' @@ -378,18 +389,13 @@ download_sync() { COMMAND="$1" # Use Debug config if command ends with -debug, otherwise default to Release -# Set IS_RUNNING_PACKAGING when running packaging steps to avoid running iOS static tests with Xcode 8.3.3 case "$COMMAND" in *-debug) COMMAND="${COMMAND%-debug}" CONFIGURATION="Debug" ;; - package-*) - IS_RUNNING_PACKAGING=1 - ;; esac export CONFIGURATION=${CONFIGURATION:-Release} -export IS_RUNNING_PACKAGING=${IS_RUNNING_PACKAGING:-0} # Pre-choose Xcode and Swift versions for those operations that do not set them REALM_XCODE_VERSION=${xcode_version:-$REALM_XCODE_VERSION} @@ -512,8 +518,8 @@ case "$COMMAND" in "ios-swift") sh build.sh ios-dynamic - build_combined RealmSwift RealmSwift iphoneos iphonesimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/ios/Realm.framework build/ios/swift-$REALM_SWIFT_VERSION + build_combined RealmSwift RealmSwift iphoneos iphonesimulator '' "/swift-$REALM_XCODE_VERSION" + copy_realm_framework ios exit 0 ;; @@ -524,8 +530,8 @@ case "$COMMAND" in "watchos-swift") sh build.sh watchos - build_combined RealmSwift RealmSwift watchos watchsimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/watchos/Realm.framework build/watchos/swift-$REALM_SWIFT_VERSION + build_combined RealmSwift RealmSwift watchos watchsimulator '' "/swift-$REALM_XCODE_VERSION" + copy_realm_framework watchos exit 0 ;; @@ -536,8 +542,8 @@ case "$COMMAND" in "tvos-swift") sh build.sh tvos - build_combined RealmSwift RealmSwift appletvos appletvsimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/tvos/Realm.framework build/tvos/swift-$REALM_SWIFT_VERSION + build_combined RealmSwift RealmSwift appletvos appletvsimulator '' "/swift-$REALM_XCODE_VERSION" + copy_realm_framework tvos exit 0 ;; @@ -550,12 +556,183 @@ case "$COMMAND" in "osx-swift") sh build.sh osx xc "-scheme 'RealmSwift' -configuration $CONFIGURATION build" - destination="build/osx/swift-$REALM_SWIFT_VERSION" + destination="build/osx/swift-$REALM_XCODE_VERSION" clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/RealmSwift.framework" "$destination" "RealmSwift.framework" + rm -rf "$destination/Realm.framework" cp -R build/osx/Realm.framework "$destination" exit 0 ;; + "catalyst") + if (( $(xcode_version_major) < 11 )); then + echo 'Building for Catalyst requires Xcode 11' + exit 1 + fi + + xc "-scheme Realm -configuration $CONFIGURATION REALM_CATALYST_FLAGS='-target x86_64-apple-ios13.0-macabi' REALM_PLATFORM_SUFFIX='maccatalyst'" + clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/Realm.framework" "build/catalyst" "Realm.framework" + ;; + + "catalyst-swift") + if (( $(xcode_version_major) < 11 )); then + echo 'Building for Catalyst requires Xcode 11' + exit 1 + fi + + sh build.sh catalyst + # FIXME: change this to just "-destination variant='Mac Catalyst'" once the CI machines are running 10.15 + xc "-scheme 'RealmSwift' -configuration $CONFIGURATION build \ + REALM_CATALYST_FLAGS='-target x86_64-apple-ios13.0-macabi' \ + REALM_PLATFORM_SUFFIX='maccatalyst' \ + SWIFT_DEPLOYMENT_TARGET='13.0-macabi' \ + SWIFT_PLATFORM_TARGET_PREFIX='ios'" + destination="build/catalyst/swift-$REALM_XCODE_VERSION" + clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/RealmSwift.framework" "$destination" "RealmSwift.framework" + rm -rf "$destination/Realm.framework" + cp -R build/catalyst/Realm.framework "$destination" + ;; + + "xcframework") + if (( $(xcode_version_major) < 11 )); then + echo 'Building a xcframework requires Xcode 11' + exit 1 + fi + + export REALM_EXTRA_BUILD_ARGUMENTS="$REALM_EXTRA_BUILD_ARGUMENTS BUILD_LIBRARY_FOR_DISTRIBUTION=YES REALM_OBJC_MACH_O_TYPE=staticlib" + + # Build all of the requested frameworks + shift + PLATFORMS="${*:-osx ios watchos tvos catalyst}" + for platform in $PLATFORMS; do + sh build.sh $platform-swift + done + + # Assemble them into xcframeworks + rm -rf build/*.xcframework + find build/DerivedData/Realm/Build/Products -name 'Realm.framework' \ + | grep -v '\-static' \ + | sed 's/.*/-framework &/' \ + | xargs xcodebuild -create-xcframework -output build/Realm.xcframework + find build/DerivedData/Realm/Build/Products -name 'RealmSwift.framework' \ + | sed 's/.*/-framework &/' \ + | xargs xcodebuild -create-xcframework -output build/RealmSwift.xcframework + + # strip-frameworks.sh isn't needed with xcframeworks since we don't + # lipo together device/simulator libs + find build/Realm.xcframework -name 'strip-frameworks.sh' -delete + find build/RealmSwift.xcframework -name 'strip-frameworks.sh' -delete + + # swiftinterface files currently have incorrect name resolution which + # results in the RealmSwift.Realm class name clashing with the Realm + # module name. Work around this by renaming the Realm module to + # RealmObjc. This is safe to do with a pre-built library because the + # module name is unrelated to what symbols are exported by an obj-c + # library, and we're statically linking the obj-c library into the + # swift library so it doesn't need to be loaded at runtime. + cd build + cp -R Realm.xcframework RealmObjc.xcframework + find RealmObjc.xcframework -name 'Realm.framework' \ + -execdir mv {} RealmObjc.framework \; || true 2> /dev/null + find RealmObjc.xcframework -name '*.h' \ + -exec sed -i '' 's/Realm\//RealmObjc\//' {} \; + find RealmObjc.xcframework -name 'module.modulemap' \ + -exec sed -i '' 's/module Realm/module RealmObjc/' {} \; + sed -i '' 's/Realm.framework/RealmObjc.framework/' RealmObjc.xcframework/Info.plist + + find RealmSwift.xcframework -name '*.swiftinterface' \ + -exec sed -i '' 's/import Realm/import RealmObjc/' {} \; + find RealmSwift.xcframework -name '*.swiftinterface' \ + -exec sed -i '' 's/Realm.RLM/RealmObjc.RLM/g' {} \; + + # Realm is statically linked into RealmSwift so we no longer actually + # need the obj-c static library, and just need the framework shell. + # Remove everything but placeholder.o so that there's still a library + # to link against that just doesn't define any symbols. + find RealmObjc.xcframework -name 'Realm' | while read file; do + ( + cd $(dirname $file) + if readlink Realm > /dev/null; then + ln -sf Versions/Current/RealmObjc Realm + elif lipo -info Realm | grep -q 'Non-fat'; then + ar -t Realm | grep -v placeholder | tr '\n' '\0' | xargs -0 ar -d Realm >/dev/null 2>&1 + ranlib Realm >/dev/null 2>&1 + else + for arch in $(lipo -info Realm | cut -f3 -d':'); do + lipo Realm -thin $arch -output tmp.a + ar -t tmp.a | grep -v placeholder | tr '\n' '\0' | xargs -0 ar -d tmp.a >/dev/null 2>&1 + ranlib tmp.a >/dev/null 2>&1 + lipo Realm -replace $arch tmp.a -output Realm + rm tmp.a + done + fi + mv Realm RealmObjc + ) + done + + # We built Realm.framework as a static framework so that we could link + # it into RealmSwift.framework and not have to deal with the runtime + # implications of renaming the shared library, but we want the end + # result to be that Realm.xcframework is a dynamic framework. Our build + # system isn't really set up to build both static and dynamic versions + # of it, so instead just turn each of the static libraries in + # Realm.xcframework into a shared library. + cd Realm.xcframework + i=0 + while plist_get Info.plist "AvailableLibraries:$i" > /dev/null; do + arch_dir_name="$(plist_get Info.plist "AvailableLibraries:$i:LibraryIdentifier")" + platform="$(plist_get Info.plist "AvailableLibraries:$i:SupportedPlatform")" + variant="$(plist_get Info.plist "AvailableLibraries:$i:SupportedPlatformVariant" 2> /dev/null || echo 'os')" + deployment_target_name="$platform" + install_name='@rpath/Realm.framework/Realm' + bitcode_flag='-fembed-bitcode' + if [ "$variant" = 'simulator' ]; then + bitcode_flag='' + fi + case "$platform" in + "macos") sdk='macosx'; install_name='@rpath/Realm.framework/Versions/A/Realm'; bitcode_flag='';; + "ios") sdk="iphone$variant"; deployment_target_name='iphoneos';; + "watchos") sdk="watch$variant";; + "tvos") sdk="appletv$variant";; + esac + deployment_target=$(grep -i "$deployment_target_name.*_DEPLOYMENT_TARGET" ../../Configuration/Base.xcconfig \ + | sed 's/.*= \(.*\);/\1/') + architectures="" + j=0 + while plist_get Info.plist "AvailableLibraries:$i:SupportedArchitectures:$j" > /dev/null; do + architectures="${architectures} -arch $(plist_get Info.plist "AvailableLibraries:$i:SupportedArchitectures:$j")" + j=$(($j + 1)) + done + + ( + cd $arch_dir_name/Realm.framework + realm_lib=$(readlink Realm || echo 'Realm') + # feature_token.cpp.o depends on PKey, which isn't actually + # present in the macOS build of the sync library. This normally + # works fine because we never reference any symbols from + # feature_token.cpp.o so it doesn't get pulled in at all, but + # -all_load makes every object file in the input get linked + # into the shared library. + ar -d $realm_lib feature_token.cpp.o 2> /dev/null || true + clang++ -shared $architectures \ + -target ${platform}${deployment_target} \ + -isysroot $(xcrun --sdk ${sdk} --show-sdk-path) \ + -install_name "$install_name" \ + -compatibility_version 1 -current_version 1 \ + -fapplication-extension \ + $bitcode_flag \ + -Wl,-all_load \ + -Wl,-unexported_symbol,'__Z*' \ + -o realm.dylib \ + Realm -lz + mv realm.dylib $realm_lib + ) + + i=$(($i + 1)) + done + + exit 0 + ;; + ###################################### # Analysis ###################################### @@ -590,25 +767,19 @@ case "$COMMAND" in ;; "test-ios-static") - test_ios_static "name=iPhone 6" + test_ios_static "name=iPhone 8" exit 0 ;; "test-ios-dynamic") - xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' build" - if (( $(xcode_version_major) < 9 )); then - xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test 'ARCHS=\$(ARCHS_STANDARD_32_BIT)'" - fi - xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" + xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' build-for-testing" + xc "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' test" exit 0 ;; "test-ios-swift") - xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' build" - if (( $(xcode_version_major) < 9 )); then - xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test 'ARCHS=\$(ARCHS_STANDARD_32_BIT)'" - fi - xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" + xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' build-for-testing" + xc "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 8' test" exit 0 ;; @@ -631,21 +802,13 @@ case "$COMMAND" in ;; "test-tvos") - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" xctest "-scheme Realm -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=$destination'" exit $? ;; "test-tvos-swift") - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" xctest "-scheme RealmSwift -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=$destination'" exit $? ;; @@ -673,6 +836,11 @@ case "$COMMAND" in exit 0 ;; + "test-swiftpm") + xcrun swift test --configuration $(echo $CONFIGURATION | tr "[:upper:]" "[:lower:]") + exit 0 + ;; + ###################################### # Full verification ###################################### @@ -696,6 +864,7 @@ case "$COMMAND" in sh build.sh verify-tvos-debug sh build.sh verify-tvos-device sh build.sh verify-swiftlint + sh build.sh verify-swiftpm sh build.sh verify-osx-object-server ;; @@ -714,6 +883,10 @@ case "$COMMAND" in fi fi + sh build.sh verify-cocoapods-ios + sh build.sh verify-cocoapods-osx + sh build.sh verify-cocoapods-watchos + # https://github.com/CocoaPods/CocoaPods/issues/7708 export EXPANDED_CODE_SIGN_IDENTITY='' cd examples/installation @@ -726,6 +899,18 @@ case "$COMMAND" in sh build.sh test-watchos-swift-cocoapods ;; + verify-cocoapods-*) + PLATFORM=$(echo $COMMAND | cut -d - -f 3) + # https://github.com/CocoaPods/CocoaPods/issues/7708 + export EXPANDED_CODE_SIGN_IDENTITY='' + cd examples/installation + sh build.sh test-$PLATFORM-objc-cocoapods + sh build.sh test-$PLATFORM-swift-cocoapods + if [[ $PLATFORM = "ios" ]]; then + sh build.sh test-ios-objc-cocoapods-dynamic + fi + ;; + "verify-osx-encryption") REALM_ENCRYPT_ALL=YES sh build.sh test-osx exit 0 @@ -733,7 +918,6 @@ case "$COMMAND" in "verify-osx") sh build.sh test-osx - sh build.sh analyze-osx sh build.sh examples-osx ( @@ -792,8 +976,12 @@ case "$COMMAND" in "verify-tvos") sh build.sh test-tvos - sh build.sh test-tvos-swift sh build.sh examples-tvos + exit 0 + ;; + + "verify-tvos-swift") + sh build.sh test-tvos-swift sh build.sh examples-tvos-swift exit 0 ;; @@ -808,6 +996,11 @@ case "$COMMAND" in exit 0 ;; + "verify-swiftpm") + sh build.sh test-swiftpm + exit 0 + ;; + "verify-osx-object-server") sh build.sh test-osx-object-server exit 0 @@ -839,17 +1032,17 @@ case "$COMMAND" in sh build.sh prelaunch-simulator workspace="examples/ios/objc/RealmExamples.xcworkspace" pod install --project-directory="$workspace/.." --no-repo-update - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme RACTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Draw -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme RACTableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Draw -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" if [ ! -z "${JENKINS_HOME}" ]; then - xc "-workspace $workspace -scheme Extension -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Extension -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" fi exit 0 @@ -859,15 +1052,15 @@ case "$COMMAND" in sh build.sh prelaunch-simulator workspace="examples/ios/swift/RealmExamples.xcworkspace" if [[ ! -d "$workspace" ]]; then - workspace="${workspace/swift/swift-$REALM_SWIFT_VERSION}" + workspace="${workspace/swift/swift-$REALM_XCODE_VERSION}" fi - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" + xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 8' build ${CODESIGN_PARAMS}" exit 0 ;; @@ -877,11 +1070,7 @@ case "$COMMAND" in "examples-tvos") workspace="examples/tvos/objc/RealmExamples.xcworkspace" - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" - fi + destination="Apple TV" xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" @@ -891,15 +1080,10 @@ case "$COMMAND" in "examples-tvos-swift") workspace="examples/tvos/swift/RealmExamples.xcworkspace" if [[ ! -d "$workspace" ]]; then - workspace="${workspace/swift/swift-$REALM_SWIFT_VERSION}" - fi - - if (( $(xcode_version_major) >= 9 )); then - destination="Apple TV" - else - destination="Apple TV 1080p" + workspace="${workspace/swift/swift-$REALM_XCODE_VERSION}" fi + destination="Apple TV" xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=$destination' build ${CODESIGN_PARAMS}" exit 0 @@ -909,8 +1093,7 @@ case "$COMMAND" in # Versioning ###################################### "get-version") - version_file="Realm/Realm-Info.plist" - echo "$(PlistBuddy -c "Print :CFBundleShortVersionString" "$version_file")" + echo "$(plist_get 'Realm/Realm-Info.plist' 'CFBundleShortVersionString')" exit 0 ;; @@ -930,6 +1113,8 @@ case "$COMMAND" in PlistBuddy -c "Set :CFBundleShortVersionString $realm_version" "$version_file" done sed -i '' "s/^VERSION=.*/VERSION=$realm_version/" dependencies.list + sed -i '' "s/^let coreVersionStr =.*/let coreVersionStr = \"$REALM_CORE_VERSION\"/" Package.swift + sed -i '' "s/^let cocoaVersionStr =.*/let cocoaVersionStr = \"$realm_version\"/" Package.swift exit 0 ;; @@ -1055,8 +1240,10 @@ EOM else export sha=$GITHUB_PR_SOURCE_BRANCH export CONFIGURATION=$configuration - export REALM_EXTRA_BUILD_ARGUMENTS='GCC_GENERATE_DEBUGGING_SYMBOLS=NO' - sh build.sh prelaunch-simulator + export REALM_EXTRA_BUILD_ARGUMENTS='GCC_GENERATE_DEBUGGING_SYMBOLS=NO -allowProvisioningUpdates' + if [[ ${target} != *"osx"* ]];then + sh build.sh prelaunch-simulator + fi source $(brew --prefix nvm)/nvm.sh export REALM_NODE_PATH="$(nvm which 8)" @@ -1107,12 +1294,11 @@ EOM zip --symlinks -r realm-examples.zip examples -x "examples/installation/*" ;; - "package-test-examples") + "package-test-examples-objc") if ! VERSION=$(echo realm-objc-*.zip | egrep -o '\d*\.\d*\.\d*-[a-z]*(\.\d*)?'); then VERSION=$(echo realm-objc-*.zip | egrep -o '\d*\.\d*\.\d*') fi OBJC="realm-objc-${VERSION}" - SWIFT="realm-swift-${VERSION}" unzip ${OBJC}.zip cp $0 ${OBJC} @@ -1123,7 +1309,13 @@ EOM sh build.sh examples-osx cd .. rm -rf ${OBJC} + ;; + "package-test-examples-swift") + if ! VERSION=$(echo realm-swift-*.zip | egrep -o '\d*\.\d*\.\d*-[a-z]*(\.\d*)?'); then + VERSION=$(echo realm-swift-*.zip | egrep -o '\d*\.\d*\.\d*') + fi + SWIFT="realm-swift-${VERSION}" unzip ${SWIFT}.zip cp $0 ${SWIFT} @@ -1143,124 +1335,21 @@ EOM zip --symlinks -r realm-framework-ios-static.zip Realm.framework ;; - "package-ios") - sh build.sh prelaunch-simulator - sh build.sh ios-dynamic - cd build/ios - zip --symlinks -r realm-framework-ios.zip Realm.framework - ;; - - "package-osx") - sh build.sh osx - - cd build/DerivedData/Realm/Build/Products/Release - zip --symlinks -r realm-framework-osx.zip Realm.framework - ;; - - "package-watchos") - sh build.sh prelaunch-simulator - sh build.sh watchos - - # If we're building the obj-c library with an Xcode version older than - # 10, we need to also build the arm64_32 slice with Xcode 10 and lipo - # it in - if (( $(xcode_version_major) < 10 )); then - ( - REALM_XCODE_VERSION=10.0 - REALM_SWIFT_VERSION= - set_xcode_and_swift_versions - sh build.sh prelaunch-simulator - xc "-scheme Realm -configuration $CONFIGURATION -sdk watchos ARCHS='arm64_32'" - cp build/DerivedData/Realm/Build/Products/Release-watchos/Realm.framework/*.bcsymbolmap build/watchos/Realm.framework - xcrun lipo \ - -create build/watchos/Realm.framework/Realm build/DerivedData/Realm/Build/Products/Release-watchos/Realm.framework/Realm \ - -output build/watchos-tmp - mv build/watchos-tmp build/watchos/Realm.framework/Realm - ) - fi + "package") + PLATFORM="$2" + REALM_SWIFT_VERSION= - cd build/watchos - zip --symlinks -r realm-framework-watchos.zip Realm.framework - ;; - - "package-tvos") - sh build.sh prelaunch-simulator - sh build.sh tvos - - cd build/tvos - zip --symlinks -r realm-framework-tvos.zip Realm.framework - ;; + set_xcode_and_swift_versions - package-*-swift) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - for version in 9.2 9.3 9.4 10.0 10.1; do - REALM_XCODE_VERSION=$version - REALM_SWIFT_VERSION= - set_xcode_and_swift_versions + if [[ "$PLATFORM" = "catalyst" ]] && (( $(xcode_version_major) < 11 )); then + mkdir -p build/catalyst/swift-$REALM_XCODE_VERSION + else sh build.sh prelaunch-simulator sh build.sh $PLATFORM-swift - done - - cd build/$PLATFORM - ln -s swift-4.0.3 swift-3.2.3 - ln -s swift-4.1 swift-3.3 - ln -s swift-4.1.2 swift-3.3.2 - ln -s swift-4.2 swift-3.4 - ln -s swift-4.2.1 swift-3.4.1 - zip --symlinks -r realm-swift-framework-$PLATFORM.zip swift-3.2.3 swift-3.3 swift-3.3.2 swift-3.4 swift-3.4.1 swift-4.0.3 swift-4.1 swift-4.1.2 swift-4.2 swift-4.2.1 - ;; - - package-*-swift-3.2.3) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.0.2 swift-3.2.3 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.2.3.zip swift-3.2.3 - ;; - - package-*-swift-3.3) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.1 swift-3.3 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.3.zip swift-3.3 - ;; - - package-*-swift-3.3.2) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.1.2 swift-3.3.2 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.3.2.zip swift-3.3.2 - ;; - - package-*-swift-3.4) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.2 swift-3.4 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.4.zip swift-3.4 - ;; - - package-*-swift-3.4.1) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - mkdir -p build/$PLATFORM - cd build/$PLATFORM - ln -s swift-4.2.1 swift-3.4.1 - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-3.4.1.zip swift-3.4.1 - ;; - - package-*-swift-*) - PLATFORM=$(echo $COMMAND | cut -d - -f 2) - REALM_SWIFT_VERSION=$(echo $COMMAND | cut -d - -f 4) - REALM_XCODE_VERSION= - - set_xcode_and_swift_versions - sh build.sh prelaunch-simulator - sh build.sh $PLATFORM-swift + fi cd build/$PLATFORM - zip --symlinks -r realm-swift-framework-$PLATFORM-swift-$REALM_SWIFT_VERSION.zip swift-$REALM_SWIFT_VERSION + zip --symlinks -r realm-framework-$PLATFORM-$REALM_XCODE_VERSION.zip swift-$REALM_XCODE_VERSION ;; "package-release") @@ -1278,58 +1367,20 @@ EOM mkdir -p ${FOLDER}/ios/dynamic mkdir -p ${FOLDER}/Swift - ( - cd ${FOLDER}/osx - unzip ${WORKSPACE}/realm-framework-osx.zip - ) - - ( - cd ${FOLDER}/ios/static - unzip ${WORKSPACE}/realm-framework-ios-static.zip - ) + unzip ${WORKSPACE}/realm-framework-ios-static.zip -d ${FOLDER}/ios/static + for platform in osx ios watchos tvos catalyst; do + unzip ${WORKSPACE}/realm-framework-${platform}-${REALM_XCODE_VERSION}.zip -d ${FOLDER}/${platform} + mv ${FOLDER}/${platform}/swift-*/Realm.framework ${FOLDER}/${platform} + rm -r ${FOLDER}/${platform}/swift-* + done - ( - cd ${FOLDER}/ios/dynamic - unzip ${WORKSPACE}/realm-framework-ios.zip - ) - - ( - cd ${FOLDER}/watchos - unzip ${WORKSPACE}/realm-framework-watchos.zip - ) - - ( - cd ${FOLDER}/tvos - unzip ${WORKSPACE}/realm-framework-tvos.zip - ) + mv ${FOLDER}/ios/Realm.framework ${FOLDER}/ios/dynamic else - ( - cd ${FOLDER}/osx - for f in ${WORKSPACE}/realm-swift-framework-osx-swift-*.zip; do - unzip "$f" - done - ) - - ( - cd ${FOLDER}/ios - for f in ${WORKSPACE}/realm-swift-framework-ios-swift-*.zip; do - unzip "$f" - done - ) - - ( - cd ${FOLDER}/watchos - for f in ${WORKSPACE}/realm-swift-framework-watchos-swift-*.zip; do - unzip "$f" - done - ) - - ( - cd ${FOLDER}/tvos - for f in ${WORKSPACE}/realm-swift-framework-tvos-swift-*.zip; do - unzip "$f" - done - ) + for platform in osx ios watchos tvos catalyst; do + find ${WORKSPACE} -name "realm-framework-$platform-*.zip" \ + -maxdepth 1 \ + -exec unzip {} -d ${FOLDER}/${platform} \; + done fi ( @@ -1392,40 +1443,37 @@ EOF echo 'Packaging iOS' sh build.sh package-ios-static - cp build/ios-static/realm-framework-ios-static.zip .. - sh build.sh package-ios - cp build/ios/realm-framework-ios.zip .. - sh build.sh package-ios-swift - cp build/ios/realm-swift-framework-ios.zip .. - - echo 'Packaging OS X' - sh build.sh package-osx - cp build/DerivedData/Realm/Build/Products/Release/realm-framework-osx.zip .. - sh build.sh package-osx-swift - cp build/osx/realm-swift-framework-osx.zip .. + cp build/ios-static/realm-framework-ios-static.zip . + sh build.sh package ios + cp build/ios/realm-framework-ios-$REALM_XCODE_VERSION.zip . + + echo 'Packaging macOS' + sh build.sh package osx + cp build/osx/realm-framework-osx-$REALM_XCODE_VERSION.zip . echo 'Packaging watchOS' - sh build.sh package-watchos - cp build/watchos/realm-framework-watchos.zip .. - sh build.sh package-watchos-swift - cp build/watchos/realm-swift-framework-watchos.zip .. + sh build.sh package watchos + cp build/watchos/realm-framework-watchos-$REALM_XCODE_VERSION.zip . echo 'Packaging tvOS' - sh build.sh package-tvos - cp build/tvos/realm-framework-tvos.zip .. - sh build.sh package-tvos-swift - cp build/tvos/realm-swift-framework-tvos.zip .. + sh build.sh package tvos + cp build/tvos/realm-framework-tvos-$REALM_XCODE_VERSION.zip . + + echo 'Packaging Catalyst' + sh build.sh package catalyst + cp build/catalyst/realm-framework-catalyst-$REALM_XCODE_VERSION.zip . echo 'Packaging examples' sh build.sh package-examples - cp realm-examples.zip .. echo 'Building final release packages' + export WORKSPACE="${WORKSPACE}/realm-cocoa" sh build.sh package-release objc sh build.sh package-release swift echo 'Testing packaged examples' - sh build.sh package-test-examples + sh build.sh package-test-examples-objc + sh build.sh package-test-examples-swift ;; "github-release") @@ -1451,8 +1499,9 @@ x.y.z Release notes (yyyy-MM-dd) ### Compatibility * File format: Generates Realms with format v9 (Reads and upgrades all previous formats) -* Realm Object Server: 3.11.0 or later. +* Realm Object Server: 3.21.0 or later. * APIs are backwards compatible with all previous releases in the 3.x.y series. +* Carthage release for Swift is built with Xcode 11.0. EOS) changelog=$(cat CHANGELOG.md) echo "$empty_section" > CHANGELOG.md diff --git a/Pods/RocketChatViewController/Composer/Assets/cs.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/cs.lproj/Localizable.strings index cd8d82b5d5..fb143ee974 100644 --- a/Pods/RocketChatViewController/Composer/Assets/cs.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/cs.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; //TODO "composer.editingview.title" = "Editing Message"; //TODO "composer.recordaudioview.swipe" = "Swipe to cancel"; //TODO - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/de.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/de.lproj/Localizable.strings index cd8d82b5d5..fb143ee974 100644 --- a/Pods/RocketChatViewController/Composer/Assets/de.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/de.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; //TODO "composer.editingview.title" = "Editing Message"; //TODO "composer.recordaudioview.swipe" = "Swipe to cancel"; //TODO - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/el.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/el.lproj/Localizable.strings index cd8d82b5d5..fb143ee974 100644 --- a/Pods/RocketChatViewController/Composer/Assets/el.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/el.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; //TODO "composer.editingview.title" = "Editing Message"; //TODO "composer.recordaudioview.swipe" = "Swipe to cancel"; //TODO - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/en.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/en.lproj/Localizable.strings index 67b669d911..066dc968b5 100644 --- a/Pods/RocketChatViewController/Composer/Assets/en.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/en.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; "composer.editingview.title" = "Editing Message"; "composer.recordaudioview.swipe" = "Swipe to cancel"; - -// Accessibility - -"composer.sendButton.label" = "Send"; -"composer.micButton.label" = "Voice message"; -"composer.addButton.label" = "Share media"; diff --git a/Pods/RocketChatViewController/Composer/Assets/es.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/es.lproj/Localizable.strings index cd8d82b5d5..fb143ee974 100644 --- a/Pods/RocketChatViewController/Composer/Assets/es.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/es.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; //TODO "composer.editingview.title" = "Editing Message"; //TODO "composer.recordaudioview.swipe" = "Swipe to cancel"; //TODO - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/fr.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/fr.lproj/Localizable.strings index cd8d82b5d5..fb143ee974 100644 --- a/Pods/RocketChatViewController/Composer/Assets/fr.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/fr.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; //TODO "composer.editingview.title" = "Editing Message"; //TODO "composer.recordaudioview.swipe" = "Swipe to cancel"; //TODO - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/ja.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/ja.lproj/Localizable.strings index cd8d82b5d5..fb143ee974 100644 --- a/Pods/RocketChatViewController/Composer/Assets/ja.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/ja.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; //TODO "composer.editingview.title" = "Editing Message"; //TODO "composer.recordaudioview.swipe" = "Swipe to cancel"; //TODO - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/pl.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/pl.lproj/Localizable.strings index ba2a6d8577..6cef6d7132 100644 --- a/Pods/RocketChatViewController/Composer/Assets/pl.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/pl.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Wpisz wiadomość"; "composer.editingview.title" = "Edytowanie wiadomości"; "composer.recordaudioview.swipe" = "Przesuń, aby anulować"; - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/pt-BR.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/pt-BR.lproj/Localizable.strings index a829a0ee5a..3b7e8a5acc 100644 --- a/Pods/RocketChatViewController/Composer/Assets/pt-BR.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/pt-BR.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Escreva uma mensagem"; "composer.editingview.title" = "Editando Mensagem"; "composer.recordaudioview.swipe" = "Deslize para cancelar"; - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/pt-PT.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/pt-PT.lproj/Localizable.strings index a829a0ee5a..3b7e8a5acc 100644 --- a/Pods/RocketChatViewController/Composer/Assets/pt-PT.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/pt-PT.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Escreva uma mensagem"; "composer.editingview.title" = "Editando Mensagem"; "composer.recordaudioview.swipe" = "Deslize para cancelar"; - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Assets/ru.lproj/Localizable.strings b/Pods/RocketChatViewController/Composer/Assets/ru.lproj/Localizable.strings index cd8d82b5d5..fb143ee974 100644 --- a/Pods/RocketChatViewController/Composer/Assets/ru.lproj/Localizable.strings +++ b/Pods/RocketChatViewController/Composer/Assets/ru.lproj/Localizable.strings @@ -1,9 +1,3 @@ "composer.textview.placeholder" = "Type a message"; //TODO "composer.editingview.title" = "Editing Message"; //TODO "composer.recordaudioview.swipe" = "Swipe to cancel"; //TODO - -// Accessibility - -"composer.sendButton.label" = "Send"; // TODO -"composer.micButton.label" = "Voice message"; // TODO -"composer.addButton.label" = "Share media"; // TODO diff --git a/Pods/RocketChatViewController/Composer/Classes/Addons/ComposerAddon.swift b/Pods/RocketChatViewController/Composer/Classes/Addons/ComposerAddon.swift index 25799cb22a..b4a3f9e342 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Addons/ComposerAddon.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Addons/ComposerAddon.swift @@ -17,15 +17,15 @@ public struct ComposerAddon { } public extension ComposerAddon { - public static var reply: ComposerAddon { + static var reply: ComposerAddon { return ComposerAddon(viewType: ReplyView.self) } - public static var hints: ComposerAddon { + static var hints: ComposerAddon { return ComposerAddon(viewType: HintsView.self) } - public static var editing: ComposerAddon { + static var editing: ComposerAddon { return ComposerAddon(viewType: EditingView.self) } } diff --git a/Pods/RocketChatViewController/Composer/Classes/Addons/Editing/EditingView.swift b/Pods/RocketChatViewController/Composer/Classes/Addons/Editing/EditingView.swift index 36248bff28..b55f81e7a5 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Addons/Editing/EditingView.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Addons/Editing/EditingView.swift @@ -83,7 +83,7 @@ public class EditingView: UIView, ComposerLocalizable { clipsToBounds = true isHidden = true - NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: nil, using: { [weak self] _ in + NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil, using: { [weak self] _ in self?.setNeedsLayout() }) diff --git a/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/HintsView.swift b/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/HintsView.swift index 572fa6f3c8..83e344592a 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/HintsView.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/HintsView.swift @@ -101,14 +101,14 @@ public class HintsView: UITableView { Shared initialization procedures. */ private func commonInit() { - NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: nil, using: { [weak self] _ in + NotificationCenter.default.addObserver(forName: UserDefaults.didChangeNotification, object: nil, queue: nil, using: { [weak self] _ in self?.beginUpdates() self?.endUpdates() }) dataSource = self delegate = self - rowHeight = UITableViewAutomaticDimension + rowHeight = 44 estimatedRowHeight = 44 separatorInset = UIEdgeInsets( top: 0, diff --git a/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/TextHintCell.swift b/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/TextHintCell.swift index 83df4dfed0..b6e1f803b2 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/TextHintCell.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/TextHintCell.swift @@ -43,7 +43,7 @@ open class TextHintCell: UITableViewCell { return CGSize(width: super.intrinsicContentSize.width, height: height) } - public override init(style: UITableViewCellStyle, reuseIdentifier: String?) { + public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) commonInit() } diff --git a/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/UserHintCell.swift b/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/UserHintCell.swift index 351dad9f76..268b03106b 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/UserHintCell.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Addons/Hints/UserHintCell.swift @@ -55,7 +55,7 @@ open class UserHintCell: UITableViewCell { return CGSize(width: super.intrinsicContentSize.width, height: height) } - public override init(style: UITableViewCellStyle, reuseIdentifier: String?) { + public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) commonInit() } diff --git a/Pods/RocketChatViewController/Composer/Classes/Addons/Reply/ReplyView.swift b/Pods/RocketChatViewController/Composer/Classes/Addons/Reply/ReplyView.swift index 81becc12c3..d6a83d2496 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Addons/Reply/ReplyView.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Addons/Reply/ReplyView.swift @@ -133,7 +133,7 @@ public class ReplyView: UIView { clipsToBounds = true isHidden = true - NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: nil, using: { [weak self] _ in + NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil, using: { [weak self] _ in self?.setNeedsLayout() }) diff --git a/Pods/RocketChatViewController/Composer/Classes/Delegate/ComposerViewExpandedDelegate.swift b/Pods/RocketChatViewController/Composer/Classes/Delegate/ComposerViewExpandedDelegate.swift index eef8e2326a..3cb677f79d 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Delegate/ComposerViewExpandedDelegate.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Delegate/ComposerViewExpandedDelegate.swift @@ -85,9 +85,6 @@ public extension ComposerViewExpandedDelegate { func composerView(_ composerView: ComposerView, willConfigureButton button: ComposerButton) { if button == composerView.rightButton { - let composerButtonAccessibilityLabel = composerView.textView.text.isEmpty - ? ComposerView.localized(.micButtonLabel) : ComposerView.localized(.sendButtonLabel) - button.accessibilityLabel = composerButtonAccessibilityLabel let image = composerView.textView.text.isEmpty ? ComposerAssets.micButtonImage : ComposerAssets.sendButtonImage button.setBackgroundImage(image, for: .normal) diff --git a/Pods/RocketChatViewController/Composer/Classes/Library/AudioRecorder.swift b/Pods/RocketChatViewController/Composer/Classes/Library/AudioRecorder.swift index 7b62079581..519d2688d9 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Library/AudioRecorder.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Library/AudioRecorder.swift @@ -41,7 +41,7 @@ public class AudioRecorder: NSObject { let session = AVAudioSession.sharedInstance() do { - try session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .defaultToSpeaker) + try session.setCategory(AVAudioSession.Category(rawValue: AVAudioSession.Category.playAndRecord.rawValue)) setUpRecorder() } catch let error { print("Set category error: \(error.localizedDescription).") @@ -79,11 +79,11 @@ public class AudioRecorder: NSObject { private func setSession(active: Bool) { let session = AVAudioSession.sharedInstance() - do { - try session.setActive(active, with: [.notifyOthersOnDeactivation]) - } catch let error { - print("Set active error: \(error.localizedDescription).") - } +// do { +// try session.setActive(active, with: [.notifyOthersOnDeactivation]) +// } catch let error { +// print("Set active error: \(error.localizedDescription).") +// } } func record() { @@ -108,4 +108,3 @@ public class AudioRecorder: NSObject { setSession(active: false) } } - diff --git a/Pods/RocketChatViewController/Composer/Classes/Library/ComposerLocalizable.swift b/Pods/RocketChatViewController/Composer/Classes/Library/ComposerLocalizable.swift index 0b2f0d25d3..e01dafb745 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Library/ComposerLocalizable.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Library/ComposerLocalizable.swift @@ -11,12 +11,6 @@ enum ComposerLocalizableKey: String { case textViewPlaceholder = "composer.textview.placeholder" case editingViewTitle = "composer.editingview.title" case swipeIndicatorViewTitle = "composer.recordaudioview.swipe" - - // Accessibility - - case sendButtonLabel = "composer.sendButton.label" - case micButtonLabel = "composer.micButton.label" - case addButtonLabel = "composer.addButton.label" } protocol ComposerLocalizable { diff --git a/Pods/RocketChatViewController/Composer/Classes/Overlays/PreviewAudioView.swift b/Pods/RocketChatViewController/Composer/Classes/Overlays/PreviewAudioView.swift index df91e0cba4..684fb0dec8 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Overlays/PreviewAudioView.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Overlays/PreviewAudioView.swift @@ -108,7 +108,7 @@ public class PreviewAudioView: UIView, ComposerLocalizable { backgroundColor = .white clipsToBounds = true - NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: nil, using: { [weak self] _ in + NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil, using: { [weak self] _ in self?.setNeedsLayout() }) @@ -284,7 +284,7 @@ public class AudioView: UIView { layer.cornerRadius = Consts.layerCornerRadius clipsToBounds = true - NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: nil, using: { [weak self] _ in + NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil, using: { [weak self] _ in self?.setNeedsLayout() }) @@ -366,7 +366,7 @@ public class AudioView: UIView { extension AudioView: AVAudioPlayerDelegate { - private func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { + public func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { playing = false progressSlider.value = 0.0 } diff --git a/Pods/RocketChatViewController/Composer/Classes/Overlays/RecordAudioView.swift b/Pods/RocketChatViewController/Composer/Classes/Overlays/RecordAudioView.swift index 6d1eee5f5d..66f30c131f 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Overlays/RecordAudioView.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Overlays/RecordAudioView.swift @@ -121,7 +121,7 @@ public class RecordAudioView: UIView { repeats: true ) - NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: nil, using: { [weak self] _ in + NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil, using: { [weak self] _ in self?.setNeedsLayout() }) @@ -317,7 +317,7 @@ public class SwipeIndicatorView: UIView, ComposerLocalizable { private func commonInit() { clipsToBounds = true - NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: nil, using: { [weak self] _ in + NotificationCenter.default.addObserver(forName: UIContentSizeCategory.didChangeNotification, object: nil, queue: nil, using: { [weak self] _ in self?.setNeedsLayout() }) diff --git a/Pods/RocketChatViewController/Composer/Classes/Views/ComposerTextView.swift b/Pods/RocketChatViewController/Composer/Classes/Views/ComposerTextView.swift index 7a21a6ef05..d37c6751ad 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Views/ComposerTextView.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Views/ComposerTextView.swift @@ -79,7 +79,7 @@ public class ComposerTextView: UITextView { private func commonInit() { let notificationCenter = NotificationCenter.default - notificationCenter.addObserver(self, selector: #selector(textDidChange), name: .UITextViewTextDidChange, object: nil) + notificationCenter.addObserver(self, selector: #selector(textDidChange), name: UITextView.textDidChangeNotification, object: nil) placeholderLabel.addObserver(self, forKeyPath: "bounds", options: .new, context: nil) self.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil) @@ -130,7 +130,7 @@ public class ComposerTextView: UITextView { } deinit { - NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UITextViewTextDidChange, object: nil) + NotificationCenter.default.removeObserver(self, name: UITextView.textDidChangeNotification, object: nil) } } @@ -141,7 +141,7 @@ public extension ComposerTextView { /** Called when the content size of the placeholder label changes and adjusts the content size. */ - public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { + override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if object as AnyObject? === placeholderLabel && keyPath == "bounds" { if text.isEmpty { text = placeholderLabel.text diff --git a/Pods/RocketChatViewController/Composer/Classes/Views/ComposerView.swift b/Pods/RocketChatViewController/Composer/Classes/Views/ComposerView.swift index fa13f7600f..187992c124 100644 --- a/Pods/RocketChatViewController/Composer/Classes/Views/ComposerView.swift +++ b/Pods/RocketChatViewController/Composer/Classes/Views/ComposerView.swift @@ -64,7 +64,6 @@ public class ComposerView: UIView, ComposerLocalizable { public let leftButton = tap(ComposerButton()) { $0.translatesAutoresizingMaskIntoConstraints = false $0.setBackgroundImage(ComposerAssets.addButtonImage, for: .normal) - $0.accessibilityLabel = localized(.addButtonLabel) $0.addTarget(self, action: #selector(touchUpInsideButton), for: .touchUpInside) $0.addTarget(self, action: #selector(touchUpOutsideButton), for: .touchUpOutside) @@ -96,15 +95,14 @@ public class ComposerView: UIView, ComposerLocalizable { */ public let textView = tap(ComposerTextView()) { $0.translatesAutoresizingMaskIntoConstraints = false - $0.text = "" - $0.font = .preferredFont(forTextStyle: .body) - $0.adjustsFontForContentSizeCategory = true - $0.accessibilityLabel = localized(.textViewPlaceholder) + $0.text = "" $0.placeholderLabel.text = localized(.textViewPlaceholder) $0.placeholderLabel.font = .preferredFont(forTextStyle: .body) $0.placeholderLabel.adjustsFontForContentSizeCategory = true - $0.placeholderLabel.isAccessibilityElement = false + + $0.font = .preferredFont(forTextStyle: .body) + $0.adjustsFontForContentSizeCategory = true } /** @@ -313,7 +311,7 @@ public extension ComposerView { // MARK: Buttons public extension ComposerView { - public func configureButtons() { + func configureButtons() { currentDelegate.composerView(self, willConfigureButton: leftButton) currentDelegate.composerView(self, willConfigureButton: rightButton) } @@ -322,7 +320,7 @@ public extension ComposerView { // MARK: Addons public extension ComposerView { - public func reloadAddons() { + func reloadAddons() { [ (componentStackView, ComposerAddonSlot.component), (utilityStackView, ComposerAddonSlot.utility) @@ -353,7 +351,7 @@ public extension ComposerView { /** Called when the content size of the text view changes and adjusts the composer height constraint. */ - public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { + override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if object as AnyObject? === leftButton && keyPath == "bounds" { textViewLeadingConstraint.constant = leftButton.isHidden ? 0 : layoutMargins.left } @@ -407,7 +405,7 @@ public extension ComposerView { // MARK: UITextView Delegate extension ComposerView: UITextViewDelegate { - @objc func textViewDidChangeSelection(_ textView: UITextView) { + public func textViewDidChangeSelection(_ textView: UITextView) { currentDelegate.composerViewDidChangeSelection(self) return } diff --git a/Pods/RocketChatViewController/RocketChatViewController/Classes/RocketChatViewController.swift b/Pods/RocketChatViewController/RocketChatViewController/Classes/RocketChatViewController.swift index b8468f51db..872b62766e 100644 --- a/Pods/RocketChatViewController/RocketChatViewController/Classes/RocketChatViewController.swift +++ b/Pods/RocketChatViewController/RocketChatViewController/Classes/RocketChatViewController.swift @@ -10,7 +10,7 @@ import UIKit import DifferenceKit public extension UICollectionView { - public func dequeueChatCell(withReuseIdentifier reuseIdetifier: String, for indexPath: IndexPath) -> ChatCell { + func dequeueChatCell(withReuseIdentifier reuseIdetifier: String, for indexPath: IndexPath) -> ChatCell { guard let cell = dequeueReusableCell(withReuseIdentifier: reuseIdetifier, for: indexPath) as? ChatCell else { fatalError("Trying to dequeue a reusable UICollectionViewCell that doesn't conforms to BindableCell protocol") } @@ -132,7 +132,7 @@ public extension ChatItem where Self: Differentiable { // In order to use a ChatCellViewModel along with a SectionController // we must use it as a type-erased ChatCellViewModel, which in this case also means // that it must conform to the Differentiable protocol. - public var wrapped: AnyChatItem { + var wrapped: AnyChatItem { return AnyChatItem(self) } } @@ -288,7 +288,7 @@ open class RocketChatViewController: UICollectionViewController { collectionView.scrollsToTop = false if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout, isSelfSizing { - flowLayout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize + flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize } } @@ -410,11 +410,7 @@ extension RocketChatViewController { } } -extension RocketChatViewController: UICollectionViewDelegateFlowLayout { - open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { - return .zero - } -} +extension RocketChatViewController: UICollectionViewDelegateFlowLayout {} extension RocketChatViewController { @@ -422,7 +418,7 @@ extension RocketChatViewController { NotificationCenter.default.addObserver( self, selector: #selector(_onKeyboardFrameWillChangeNotificationReceived(_:)), - name: NSNotification.Name.UIKeyboardWillChangeFrame, + name: UIResponder.keyboardWillChangeFrameNotification, object: nil ) } @@ -430,7 +426,7 @@ extension RocketChatViewController { func stopObservingKeyboard() { NotificationCenter.default.removeObserver( self, - name: NSNotification.Name.UIKeyboardWillChangeFrame, + name: UIResponder.keyboardWillChangeFrameNotification, object: nil ) } @@ -442,7 +438,7 @@ extension RocketChatViewController { guard let userInfo = notification.userInfo, - let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue, + let keyboardFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue, let collectionView = collectionView else { return @@ -452,10 +448,10 @@ extension RocketChatViewController { let safeAreaFrame = view.safeAreaLayoutGuide.layoutFrame.insetBy(dx: 0, dy: -additionalSafeAreaInsets.top) let intersection = safeAreaFrame.intersection(keyboardFrameInView) - let animationDuration: TimeInterval = (notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0 - let animationCurveRawNSN = notification.userInfo?[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber - let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIViewAnimationOptions.curveEaseInOut.rawValue - let animationCurve = UIViewAnimationOptions(rawValue: animationCurveRaw) + let animationDuration: TimeInterval = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0 + let animationCurveRawNSN = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber + let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIView.AnimationOptions.curveEaseInOut.rawValue + let animationCurve = UIView.AnimationOptions(rawValue: animationCurveRaw) guard intersection.height != self.keyboardHeight else { return diff --git a/Pods/Starscream/README.md b/Pods/Starscream/README.md index 4d28297bb9..90a7e0e6ce 100644 --- a/Pods/Starscream/README.md +++ b/Pods/Starscream/README.md @@ -311,6 +311,29 @@ To integrate Starscream into your Xcode project using Carthage, specify it in yo github "daltoniam/Starscream" >= 3.0.2 ``` +### Accio + +Check out the [Accio](https://github.com/JamitLabs/Accio) docs on how to add a install. + +Add the following to your Package.swift: + +```swift +.package(url: "https://github.com/daltoniam/Starscream.git", .upToNextMajor(from: "3.1.0")), +``` + +Next, add `Starscream` to your App targets dependencies like so: + +```swift +.target( + name: "App", + dependencies: [ + "Starscream", + ] +), +``` + +Then run `accio update`. + ### Rogue First see the [installation docs](https://github.com/acmacalister/Rogue) for how to install Rogue. @@ -385,6 +408,10 @@ func websocketHttpUpgrade(socket: WebSocketClient, response: CFHTTPMessage) { } ``` +## Swift versions + +* Swift 4.2 - 3.0.6 + ## KNOWN ISSUES - WatchOS does not have the the CFNetwork String constants to modify the stream's SSL behavior. It will be the default Foundation SSL behavior. This means watchOS CANNOT use `SSLCiphers`, `disableSSLCertValidation`, or SSL pinning. All these values set on watchOS will do nothing. - Linux does not have the security framework, so it CANNOT use SSL pinning or `SSLCiphers` either. diff --git a/Pods/Starscream/Sources/Starscream/WebSocket.swift b/Pods/Starscream/Sources/Starscream/WebSocket.swift index 4101c5acd2..7d48a20d99 100644 --- a/Pods/Starscream/Sources/Starscream/WebSocket.swift +++ b/Pods/Starscream/Sources/Starscream/WebSocket.swift @@ -135,7 +135,7 @@ public protocol WSStream { } open class FoundationStream : NSObject, WSStream, StreamDelegate { - private static let sharedWorkQueue = DispatchQueue(label: "com.vluxe.starscream.websocket", attributes: []) + private let workQueue = DispatchQueue(label: "com.vluxe.starscream.websocket", attributes: []) private var inputStream: InputStream? private var outputStream: OutputStream? public weak var delegate: WSStreamDelegate? @@ -210,13 +210,13 @@ open class FoundationStream : NSObject, WSStream, StreamDelegate { #endif } - CFReadStreamSetDispatchQueue(inStream, FoundationStream.sharedWorkQueue) - CFWriteStreamSetDispatchQueue(outStream, FoundationStream.sharedWorkQueue) + CFReadStreamSetDispatchQueue(inStream, workQueue) + CFWriteStreamSetDispatchQueue(outStream, workQueue) inStream.open() outStream.open() var out = timeout// wait X seconds before giving up - FoundationStream.sharedWorkQueue.async { [weak self] in + workQueue.async { [weak self] in while !outStream.hasSpaceAvailable { usleep(100) // wait until the socket is ready out -= 100 @@ -475,7 +475,7 @@ open class WebSocket : NSObject, StreamDelegate, WebSocketClient, WSStreamDelega } self.request.setValue(origin, forHTTPHeaderField: headerOriginName) } - if let protocols = protocols { + if let protocols = protocols, !protocols.isEmpty { self.request.setValue(protocols.joined(separator: ","), forHTTPHeaderField: headerWSProtocolName) } writeQueue.maxConcurrentOperationCount = 1 diff --git a/Pods/SwiftLint/swiftlint b/Pods/SwiftLint/swiftlint index 096b9f87c8..11cd888d5f 100755 Binary files a/Pods/SwiftLint/swiftlint and b/Pods/SwiftLint/swiftlint differ diff --git a/Pods/SwiftyJSON/README.md b/Pods/SwiftyJSON/README.md index 327497995e..7a10e29c24 100644 --- a/Pods/SwiftyJSON/README.md +++ b/Pods/SwiftyJSON/README.md @@ -1,9 +1,15 @@ # SwiftyJSON -[![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/SwiftyJSON/SwiftyJSON) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![CocoaPods](https://img.shields.io/cocoapods/v/SwiftyJSON.svg) ![Platform](https://img.shields.io/badge/platforms-iOS%208.0+%20%7C%20macOS%2010.10+%20%7C%20tvOS%209.0+%20%7C%20watchOS%202.0+-333333.svg) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![CocoaPods](https://img.shields.io/cocoapods/v/SwiftyJSON.svg) ![Platform](https://img.shields.io/badge/platforms-iOS%208.0%20%7C%20macOS%2010.10%20%7C%20tvOS%209.0%20%7C%20watchOS%203.0-F28D00.svg) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) SwiftyJSON makes it easy to deal with JSON data in Swift. +Platform | Build Status +---------| --------------| +*OS | [![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/SwiftyJSON/SwiftyJSON) | +[Linux](https://github.com/IBM-Swift/SwiftyJSON) | [![Build Status](https://travis-ci.org/IBM-Swift/SwiftyJSON.svg?branch=master)](https://travis-ci.org/IBM-Swift/SwiftyJSON) | + + 1. [Why is the typical JSON handling in Swift NOT good](#why-is-the-typical-json-handling-in-swift-not-good) 2. [Requirements](#requirements) 3. [Integration](#integration) @@ -20,6 +26,7 @@ SwiftyJSON makes it easy to deal with JSON data in Swift. - [Merging](#merging) 5. [Work with Alamofire](#work-with-alamofire) 6. [Work with Moya](#work-with-moya) +7. [SwiftyJSON Model Generator](#swiftyjson-model-generator) > [中文介绍](http://tangplin.github.io/swiftyjson/) @@ -66,11 +73,12 @@ And don't worry about the Optional Wrapping thing. It's done for you automatical ```swift let json = JSON(data: dataFromNetworking) -if let userName = json[999999]["wrong_key"]["wrong_name"].string { +let result = json[999999]["wrong_key"]["wrong_name"] +if let userName = result.string { //Calm down, take it easy, the ".string" property still produces the correct Optional String type with safety } else { //Print the error - print(json[999999]["wrong_key"]["wrong_name"]) + print(result.error) } ``` @@ -161,7 +169,7 @@ let name = json[0].double ```swift // Getting an array of string from a JSON Array -let arrayNames = json["users"].arrayValue.map({$0["name"].stringValue}) +let arrayNames = json["users"].arrayValue.map {$0["name"].stringValue} ``` ```swift @@ -547,3 +555,8 @@ provider.request(.showProducts) { result in } ``` + +## SwiftyJSON Model Generator +Tools to generate SwiftyJSON Models +* [JSON Cafe](http://www.jsoncafe.com/) +* [JSON Export](https://github.com/Ahmed-Ali/JSONExport) diff --git a/Pods/SwiftyJSON/Source/SwiftyJSON.swift b/Pods/SwiftyJSON/Source/SwiftyJSON/SwiftyJSON.swift similarity index 69% rename from Pods/SwiftyJSON/Source/SwiftyJSON.swift rename to Pods/SwiftyJSON/Source/SwiftyJSON/SwiftyJSON.swift index a6c1f3a690..f7a3f08530 100644 --- a/Pods/SwiftyJSON/Source/SwiftyJSON.swift +++ b/Pods/SwiftyJSON/Source/SwiftyJSON/SwiftyJSON.swift @@ -138,7 +138,7 @@ public struct JSON { - returns: The created JSON */ fileprivate init(jsonObject: Any) { - self.object = jsonObject + object = jsonObject } /** @@ -174,14 +174,14 @@ public struct JSON { Typecheck is set to true for the first recursion level to prevent total override of the source JSON */ fileprivate mutating func merge(with other: JSON, typecheck: Bool) throws { - if self.type == other.type { - switch self.type { + if type == other.type { + switch type { case .dictionary: for (key, _) in other { try self[key].merge(with: other[key], typecheck: false) } case .array: - self = JSON(self.arrayValue + other.arrayValue) + self = JSON(arrayValue + other.arrayValue) default: self = other } @@ -211,19 +211,13 @@ public struct JSON { /// Object in JSON public var object: Any { get { - switch self.type { - case .array: - return self.rawArray - case .dictionary: - return self.rawDictionary - case .string: - return self.rawString - case .number: - return self.rawNumber - case .bool: - return self.rawBool - default: - return self.rawNull + switch type { + case .array: return rawArray + case .dictionary: return rawDictionary + case .string: return rawString + case .number: return rawNumber + case .bool: return rawBool + default: return rawNull } } set { @@ -232,24 +226,24 @@ public struct JSON { case let number as NSNumber: if number.isBool { type = .bool - self.rawBool = number.boolValue + rawBool = number.boolValue } else { type = .number - self.rawNumber = number + rawNumber = number } case let string as String: type = .string - self.rawString = string + rawString = string case _ as NSNull: type = .null case nil: type = .null case let array as [Any]: type = .array - self.rawArray = array + rawArray = array case let dictionary as [String: Any]: type = .dictionary - self.rawDictionary = dictionary + rawDictionary = dictionary default: type = .unknown error = SwiftyJSONError.unsupportedType @@ -271,11 +265,11 @@ private func unwrap(_ object: Any) -> Any { case let array as [Any]: return array.map(unwrap) case let dictionary as [String: Any]: - var unwrappedDic = dictionary - for (k, v) in dictionary { - unwrappedDic[k] = unwrap(v) + var d = dictionary + dictionary.forEach { pair in + d[pair.key] = unwrap(pair.value) } - return unwrappedDic + return d default: return object } @@ -288,24 +282,18 @@ public enum Index: Comparable { static public func == (lhs: Index, rhs: Index) -> Bool { switch (lhs, rhs) { - case (.array(let left), .array(let right)): - return left == right - case (.dictionary(let left), .dictionary(let right)): - return left == right - case (.null, .null): return true - default: - return false + case (.array(let left), .array(let right)): return left == right + case (.dictionary(let left), .dictionary(let right)): return left == right + case (.null, .null): return true + default: return false } } static public func < (lhs: Index, rhs: Index) -> Bool { switch (lhs, rhs) { - case (.array(let left), .array(let right)): - return left < right - case (.dictionary(let left), .dictionary(let right)): - return left < right - default: - return false + case (.array(let left), .array(let right)): return left < right + case (.dictionary(let left), .dictionary(let right)): return left < right + default: return false } } } @@ -319,46 +307,33 @@ extension JSON: Swift.Collection { public var startIndex: Index { switch type { - case .array: - return .array(rawArray.startIndex) - case .dictionary: - return .dictionary(rawDictionary.startIndex) - default: - return .null + case .array: return .array(rawArray.startIndex) + case .dictionary: return .dictionary(rawDictionary.startIndex) + default: return .null } } public var endIndex: Index { switch type { - case .array: - return .array(rawArray.endIndex) - case .dictionary: - return .dictionary(rawDictionary.endIndex) - default: - return .null + case .array: return .array(rawArray.endIndex) + case .dictionary: return .dictionary(rawDictionary.endIndex) + default: return .null } } public func index(after i: Index) -> Index { switch i { - case .array(let idx): - return .array(rawArray.index(after: idx)) - case .dictionary(let idx): - return .dictionary(rawDictionary.index(after: idx)) - default: - return .null + case .array(let idx): return .array(rawArray.index(after: idx)) + case .dictionary(let idx): return .dictionary(rawDictionary.index(after: idx)) + default: return .null } } public subscript (position: Index) -> (String, JSON) { switch position { - case .array(let idx): - return (String(idx), JSON(self.rawArray[idx])) - case .dictionary(let idx): - let (key, value) = self.rawDictionary[idx] - return (key, JSON(value)) - default: - return ("", JSON.null) + case .array(let idx): return (String(idx), JSON(rawArray[idx])) + case .dictionary(let idx): return (rawDictionary[idx].key, JSON(rawDictionary[idx].value)) + default: return ("", JSON.null) } } } @@ -394,12 +369,12 @@ extension JSON { /// If `type` is `.array`, return json whose object is `array[index]`, otherwise return null json with error. fileprivate subscript(index index: Int) -> JSON { get { - if self.type != .array { + if type != .array { var r = JSON.null r.error = self.error ?? SwiftyJSONError.wrongType return r - } else if self.rawArray.indices.contains(index) { - return JSON(self.rawArray[index]) + } else if rawArray.indices.contains(index) { + return JSON(rawArray[index]) } else { var r = JSON.null r.error = SwiftyJSONError.indexOutOfBounds @@ -407,10 +382,10 @@ extension JSON { } } set { - if self.type == .array && - self.rawArray.indices.contains(index) && + if type == .array && + rawArray.indices.contains(index) && newValue.error == nil { - self.rawArray[index] = newValue.object + rawArray[index] = newValue.object } } } @@ -419,8 +394,8 @@ extension JSON { fileprivate subscript(key key: String) -> JSON { get { var r = JSON.null - if self.type == .dictionary { - if let o = self.rawDictionary[key] { + if type == .dictionary { + if let o = rawDictionary[key] { r = JSON(o) } else { r.error = SwiftyJSONError.notExist @@ -431,8 +406,8 @@ extension JSON { return r } set { - if self.type == .dictionary && newValue.error == nil { - self.rawDictionary[key] = newValue.object + if type == .dictionary && newValue.error == nil { + rawDictionary[key] = newValue.object } } } @@ -442,13 +417,13 @@ extension JSON { get { switch sub.jsonKey { case .index(let index): return self[index: index] - case .key(let key): return self[key: key] + case .key(let key): return self[key: key] } } set { switch sub.jsonKey { case .index(let index): self[index: index] = newValue - case .key(let key): self[key: key] = newValue + case .key(let key): self[key: key] = newValue } } } @@ -476,10 +451,8 @@ extension JSON { } set { switch path.count { - case 0: - return - case 1: - self[sub:path[0]].object = newValue.object + case 0: return + case 1: self[sub:path[0]].object = newValue.object default: var aPath = path aPath.remove(at: 0) @@ -576,15 +549,15 @@ extension JSON: Swift.RawRepresentable { } public var rawValue: Any { - return self.object + return object } public func rawData(options opt: JSONSerialization.WritingOptions = JSONSerialization.WritingOptions(rawValue: 0)) throws -> Data { - guard JSONSerialization.isValidJSONObject(self.object) else { + guard JSONSerialization.isValidJSONObject(object) else { throw SwiftyJSONError.invalidJSON } - return try JSONSerialization.data(withJSONObject: self.object, options: opt) + return try JSONSerialization.data(withJSONObject: object, options: opt) } public func rawString(_ encoding: String.Encoding = .utf8, options opt: JSONSerialization.WritingOptions = .prettyPrinted) -> String? { @@ -609,16 +582,16 @@ extension JSON: Swift.RawRepresentable { fileprivate func _rawString(_ encoding: String.Encoding = .utf8, options: [writingOptionsKeys: Any], maxObjectDepth: Int = 10) throws -> String? { guard maxObjectDepth > 0 else { throw SwiftyJSONError.invalidJSON } - switch self.type { + switch type { case .dictionary: do { if !(options[.castNilToNSNull] as? Bool ?? false) { let jsonOption = options[.jsonSerialization] as? JSONSerialization.WritingOptions ?? JSONSerialization.WritingOptions.prettyPrinted - let data = try self.rawData(options: jsonOption) + let data = try rawData(options: jsonOption) return String(data: data, encoding: encoding) } - guard let dict = self.object as? [String: Any?] else { + guard let dict = object as? [String: Any?] else { return nil } let body = try dict.keys.map { key throws -> String in @@ -648,11 +621,11 @@ extension JSON: Swift.RawRepresentable { do { if !(options[.castNilToNSNull] as? Bool ?? false) { let jsonOption = options[.jsonSerialization] as? JSONSerialization.WritingOptions ?? JSONSerialization.WritingOptions.prettyPrinted - let data = try self.rawData(options: jsonOption) + let data = try rawData(options: jsonOption) return String(data: data, encoding: encoding) } - guard let array = self.object as? [Any?] else { + guard let array = object as? [Any?] else { return nil } let body = try array.map { value throws -> String in @@ -675,16 +648,11 @@ extension JSON: Swift.RawRepresentable { } catch _ { return nil } - case .string: - return self.rawString - case .number: - return self.rawNumber.stringValue - case .bool: - return self.rawBool.description - case .null: - return "null" - default: - return nil + case .string: return rawString + case .number: return rawNumber.stringValue + case .bool: return rawBool.description + case .null: return "null" + default: return nil } } } @@ -694,11 +662,7 @@ extension JSON: Swift.RawRepresentable { extension JSON: Swift.CustomStringConvertible, Swift.CustomDebugStringConvertible { public var description: String { - if let string = self.rawString(options: .prettyPrinted) { - return string - } else { - return "unknown" - } + return rawString(options: .prettyPrinted) ?? "unknown" } public var debugDescription: String { @@ -712,11 +676,7 @@ extension JSON { //Optional [JSON] public var array: [JSON]? { - if self.type == .array { - return self.rawArray.map { JSON($0) } - } else { - return nil - } + return type == .array ? rawArray.map { JSON($0) } : nil } //Non-optional [JSON] @@ -727,19 +687,13 @@ extension JSON { //Optional [Any] public var arrayObject: [Any]? { get { - switch self.type { - case .array: - return self.rawArray - default: - return nil + switch type { + case .array: return rawArray + default: return nil } } set { - if let array = newValue { - self.object = array - } else { - self.object = NSNull() - } + self.object = newValue ?? NSNull() } } } @@ -750,10 +704,10 @@ extension JSON { //Optional [String : JSON] public var dictionary: [String: JSON]? { - if self.type == .dictionary { + if type == .dictionary { var d = [String: JSON](minimumCapacity: rawDictionary.count) - for (key, value) in rawDictionary { - d[key] = JSON(value) + rawDictionary.forEach { pair in + d[pair.key] = JSON(pair.value) } return d } else { @@ -763,26 +717,20 @@ extension JSON { //Non-optional [String : JSON] public var dictionaryValue: [String: JSON] { - return self.dictionary ?? [:] + return dictionary ?? [:] } //Optional [String : Any] public var dictionaryObject: [String: Any]? { get { - switch self.type { - case .dictionary: - return self.rawDictionary - default: - return nil + switch type { + case .dictionary: return rawDictionary + default: return nil } } set { - if let v = newValue { - self.object = v - } else { - self.object = NSNull() - } + object = newValue ?? NSNull() } } } @@ -794,38 +742,28 @@ extension JSON { // : Swift.Bool //Optional bool public var bool: Bool? { get { - switch self.type { - case .bool: - return self.rawBool - default: - return nil + switch type { + case .bool: return rawBool + default: return nil } } set { - if let newValue = newValue { - self.object = newValue as Bool - } else { - self.object = NSNull() - } + object = newValue ?? NSNull() } } //Non-optional bool public var boolValue: Bool { get { - switch self.type { - case .bool: - return self.rawBool - case .number: - return self.rawNumber.boolValue - case .string: - return ["true", "y", "t", "yes", "1"].contains { self.rawString.caseInsensitiveCompare($0) == .orderedSame } - default: - return false + switch type { + case .bool: return rawBool + case .number: return rawNumber.boolValue + case .string: return ["true", "y", "t", "yes", "1"].contains { rawString.caseInsensitiveCompare($0) == .orderedSame } + default: return false } } set { - self.object = newValue + object = newValue } } } @@ -837,38 +775,28 @@ extension JSON { //Optional string public var string: String? { get { - switch self.type { - case .string: - return self.object as? String - default: - return nil + switch type { + case .string: return object as? String + default: return nil } } set { - if let newValue = newValue { - self.object = NSString(string: newValue) - } else { - self.object = NSNull() - } + object = newValue ?? NSNull() } } //Non-optional string public var stringValue: String { get { - switch self.type { - case .string: - return self.object as? String ?? "" - case .number: - return self.rawNumber.stringValue - case .bool: - return (self.object as? Bool).map { String($0) } ?? "" - default: - return "" + switch type { + case .string: return object as? String ?? "" + case .number: return rawNumber.stringValue + case .bool: return (object as? Bool).map { String($0) } ?? "" + default: return "" } } set { - self.object = NSString(string: newValue) + object = newValue } } } @@ -880,40 +808,31 @@ extension JSON { //Optional number public var number: NSNumber? { get { - switch self.type { - case .number: - return self.rawNumber - case .bool: - return NSNumber(value: self.rawBool ? 1 : 0) - default: - return nil + switch type { + case .number: return rawNumber + case .bool: return NSNumber(value: rawBool ? 1 : 0) + default: return nil } } set { - self.object = newValue ?? NSNull() + object = newValue ?? NSNull() } } //Non-optional number public var numberValue: NSNumber { get { - switch self.type { + switch type { case .string: - let decimal = NSDecimalNumber(string: self.object as? String) - if decimal == NSDecimalNumber.notANumber { // indicates parse error - return NSDecimalNumber.zero - } - return decimal - case .number: - return self.object as? NSNumber ?? NSNumber(value: 0) - case .bool: - return NSNumber(value: self.rawBool ? 1 : 0) - default: - return NSNumber(value: 0.0) + let decimal = NSDecimalNumber(string: object as? String) + return decimal == .notANumber ? .zero : decimal + case .number: return object as? NSNumber ?? NSNumber(value: 0) + case .bool: return NSNumber(value: rawBool ? 1 : 0) + default: return NSNumber(value: 0.0) } } set { - self.object = newValue + object = newValue } } } @@ -923,17 +842,15 @@ extension JSON { extension JSON { public var null: NSNull? { + set { + object = NSNull() + } get { - switch self.type { - case .null: - return self.rawNull - default: - return nil + switch type { + case .null: return rawNull + default: return nil } } - set { - self.object = NSNull() - } } public func exists() -> Bool { if let errorValue = error, (400...1000).contains(errorValue.errorCode) { @@ -950,12 +867,12 @@ extension JSON { //Optional URL public var url: URL? { get { - switch self.type { + switch type { case .string: // Check for existing percent escapes first to prevent double-escaping of % character - if self.rawString.range(of: "%[0-9A-Fa-f]{2}", options: .regularExpression, range: nil, locale: nil) != nil { - return Foundation.URL(string: self.rawString) - } else if let encodedString_ = self.rawString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) { + if rawString.range(of: "%[0-9A-Fa-f]{2}", options: .regularExpression, range: nil, locale: nil) != nil { + return Foundation.URL(string: rawString) + } else if let encodedString_ = rawString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) { // We have to use `Foundation.URL` otherwise it conflicts with the variable name. return Foundation.URL(string: encodedString_) } else { @@ -966,7 +883,7 @@ extension JSON { } } set { - self.object = newValue?.absoluteString ?? NSNull() + object = newValue?.absoluteString ?? NSNull() } } } @@ -977,265 +894,265 @@ extension JSON { public var double: Double? { get { - return self.number?.doubleValue + return number?.doubleValue } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var doubleValue: Double { get { - return self.numberValue.doubleValue + return numberValue.doubleValue } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var float: Float? { get { - return self.number?.floatValue + return number?.floatValue } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var floatValue: Float { get { - return self.numberValue.floatValue + return numberValue.floatValue } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var int: Int? { get { - return self.number?.intValue + return number?.intValue } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var intValue: Int { get { - return self.numberValue.intValue + return numberValue.intValue } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var uInt: UInt? { get { - return self.number?.uintValue + return number?.uintValue } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var uIntValue: UInt { get { - return self.numberValue.uintValue + return numberValue.uintValue } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var int8: Int8? { get { - return self.number?.int8Value + return number?.int8Value } set { if let newValue = newValue { - self.object = NSNumber(value: Int(newValue)) + object = NSNumber(value: Int(newValue)) } else { - self.object = NSNull() + object = NSNull() } } } public var int8Value: Int8 { get { - return self.numberValue.int8Value + return numberValue.int8Value } set { - self.object = NSNumber(value: Int(newValue)) + object = NSNumber(value: Int(newValue)) } } public var uInt8: UInt8? { get { - return self.number?.uint8Value + return number?.uint8Value } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var uInt8Value: UInt8 { get { - return self.numberValue.uint8Value + return numberValue.uint8Value } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var int16: Int16? { get { - return self.number?.int16Value + return number?.int16Value } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var int16Value: Int16 { get { - return self.numberValue.int16Value + return numberValue.int16Value } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var uInt16: UInt16? { get { - return self.number?.uint16Value + return number?.uint16Value } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var uInt16Value: UInt16 { get { - return self.numberValue.uint16Value + return numberValue.uint16Value } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var int32: Int32? { get { - return self.number?.int32Value + return number?.int32Value } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var int32Value: Int32 { get { - return self.numberValue.int32Value + return numberValue.int32Value } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var uInt32: UInt32? { get { - return self.number?.uint32Value + return number?.uint32Value } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var uInt32Value: UInt32 { get { - return self.numberValue.uint32Value + return numberValue.uint32Value } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var int64: Int64? { get { - return self.number?.int64Value + return number?.int64Value } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var int64Value: Int64 { get { - return self.numberValue.int64Value + return numberValue.int64Value } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } public var uInt64: UInt64? { get { - return self.number?.uint64Value + return number?.uint64Value } set { if let newValue = newValue { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } else { - self.object = NSNull() + object = NSNull() } } } public var uInt64Value: UInt64 { get { - return self.numberValue.uint64Value + return numberValue.uint64Value } set { - self.object = NSNumber(value: newValue) + object = NSNumber(value: newValue) } } } @@ -1247,84 +1164,57 @@ extension JSON: Swift.Comparable {} public func == (lhs: JSON, rhs: JSON) -> Bool { switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber == rhs.rawNumber - case (.string, .string): - return lhs.rawString == rhs.rawString - case (.bool, .bool): - return lhs.rawBool == rhs.rawBool - case (.array, .array): - return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): - return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): - return true - default: - return false + case (.number, .number): return lhs.rawNumber == rhs.rawNumber + case (.string, .string): return lhs.rawString == rhs.rawString + case (.bool, .bool): return lhs.rawBool == rhs.rawBool + case (.array, .array): return lhs.rawArray as NSArray == rhs.rawArray as NSArray + case (.dictionary, .dictionary): return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary + case (.null, .null): return true + default: return false } } public func <= (lhs: JSON, rhs: JSON) -> Bool { switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber <= rhs.rawNumber - case (.string, .string): - return lhs.rawString <= rhs.rawString - case (.bool, .bool): - return lhs.rawBool == rhs.rawBool - case (.array, .array): - return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): - return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): - return true - default: - return false + case (.number, .number): return lhs.rawNumber <= rhs.rawNumber + case (.string, .string): return lhs.rawString <= rhs.rawString + case (.bool, .bool): return lhs.rawBool == rhs.rawBool + case (.array, .array): return lhs.rawArray as NSArray == rhs.rawArray as NSArray + case (.dictionary, .dictionary): return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary + case (.null, .null): return true + default: return false } } public func >= (lhs: JSON, rhs: JSON) -> Bool { switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber >= rhs.rawNumber - case (.string, .string): - return lhs.rawString >= rhs.rawString - case (.bool, .bool): - return lhs.rawBool == rhs.rawBool - case (.array, .array): - return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): - return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): - return true - default: - return false + case (.number, .number): return lhs.rawNumber >= rhs.rawNumber + case (.string, .string): return lhs.rawString >= rhs.rawString + case (.bool, .bool): return lhs.rawBool == rhs.rawBool + case (.array, .array): return lhs.rawArray as NSArray == rhs.rawArray as NSArray + case (.dictionary, .dictionary): return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary + case (.null, .null): return true + default: return false } } public func > (lhs: JSON, rhs: JSON) -> Bool { switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber > rhs.rawNumber - case (.string, .string): - return lhs.rawString > rhs.rawString - default: - return false + case (.number, .number): return lhs.rawNumber > rhs.rawNumber + case (.string, .string): return lhs.rawString > rhs.rawString + default: return false } } public func < (lhs: JSON, rhs: JSON) -> Bool { switch (lhs.type, rhs.type) { - case (.number, .number): - return lhs.rawNumber < rhs.rawNumber - case (.string, .string): - return lhs.rawString < rhs.rawString - default: - return false + case (.number, .number): return lhs.rawNumber < rhs.rawNumber + case (.string, .string): return lhs.rawString < rhs.rawString + default: return false } } @@ -1348,12 +1238,9 @@ extension NSNumber { func == (lhs: NSNumber, rhs: NSNumber) -> Bool { switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) == .orderedSame + case (false, true): return false + case (true, false): return false + default: return lhs.compare(rhs) == .orderedSame } } @@ -1364,48 +1251,36 @@ func != (lhs: NSNumber, rhs: NSNumber) -> Bool { func < (lhs: NSNumber, rhs: NSNumber) -> Bool { switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) == .orderedAscending + case (false, true): return false + case (true, false): return false + default: return lhs.compare(rhs) == .orderedAscending } } func > (lhs: NSNumber, rhs: NSNumber) -> Bool { switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) == ComparisonResult.orderedDescending + case (false, true): return false + case (true, false): return false + default: return lhs.compare(rhs) == ComparisonResult.orderedDescending } } func <= (lhs: NSNumber, rhs: NSNumber) -> Bool { switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) != .orderedDescending + case (false, true): return false + case (true, false): return false + default: return lhs.compare(rhs) != .orderedDescending } } func >= (lhs: NSNumber, rhs: NSNumber) -> Bool { switch (lhs.isBool, rhs.isBool) { - case (false, true): - return false - case (true, false): - return false - default: - return lhs.compare(rhs) != .orderedAscending + case (false, true): return false + case (true, false): return false + default: return lhs.compare(rhs) != .orderedAscending } } diff --git a/Pods/SwipeCellKit/README.md b/Pods/SwipeCellKit/README.md index 33de22c2e1..edfc694927 100644 --- a/Pods/SwipeCellKit/README.md +++ b/Pods/SwipeCellKit/README.md @@ -25,6 +25,7 @@ A swipeable `UITableViewCell` or `UICollectionViewCell` with support for: * Customizable expansion animations * Support for both `UITableView` and `UICollectionView` * Accessibility +* Dark Mode ## Background @@ -75,7 +76,7 @@ The expansion style describes the behavior when the cell is swiped past a define ## Requirements * Swift 5.0 -* Xcode 10.2+ +* Xcode 10.3+ * iOS 9.0+ ## Installation @@ -91,6 +92,9 @@ pod 'SwipeCellKit' # Get the latest on develop pod 'SwipeCellKit', :git => 'https://github.com/SwipeCellKit/SwipeCellKit.git', :branch => 'develop' +# If you have NOT upgraded to Xcode 11, use the last Swift Xcode 10.X compatible release +pod 'SwipeCellKit', '2.6.0' + # If you have NOT upgraded to Swift 5.0, use the last Swift 4.2/Xcode 10.2 compatible release pod 'SwipeCellKit', '2.5.4' diff --git a/Pods/SwipeCellKit/Source/SwipeActionButton.swift b/Pods/SwipeCellKit/Source/SwipeActionButton.swift index c02264e947..8e83b1f142 100755 --- a/Pods/SwipeCellKit/Source/SwipeActionButton.swift +++ b/Pods/SwipeCellKit/Source/SwipeActionButton.swift @@ -35,7 +35,7 @@ class SwipeActionButton: UIButton { } override var intrinsicContentSize: CGSize { - return CGSize(width: UIViewNoIntrinsicMetric, height: contentEdgeInsets.top + alignmentRect.height + contentEdgeInsets.bottom) + return CGSize(width: UIView.noIntrinsicMetric, height: contentEdgeInsets.top + alignmentRect.height + contentEdgeInsets.bottom) } convenience init(action: SwipeAction) { diff --git a/Pods/SwipeCellKit/Source/SwipeActionsView.swift b/Pods/SwipeCellKit/Source/SwipeActionsView.swift index 40f78dd71d..fb9023b749 100755 --- a/Pods/SwipeCellKit/Source/SwipeActionsView.swift +++ b/Pods/SwipeCellKit/Source/SwipeActionsView.swift @@ -111,7 +111,25 @@ class SwipeActionsView: UIView { clipsToBounds = true translatesAutoresizingMaskIntoConstraints = false - backgroundColor = options.backgroundColor ?? #colorLiteral(red: 0.862745098, green: 0.862745098, blue: 0.862745098, alpha: 1) + + + #if canImport(Combine) + if let backgroundColor = options.backgroundColor { + self.backgroundColor = backgroundColor + } + else if #available(iOS 13.0, *) { + backgroundColor = UIColor.systemGray5 + } else { + backgroundColor = #colorLiteral(red: 0.7803494334, green: 0.7761332393, blue: 0.7967314124, alpha: 1) + } + #else + if let backgroundColor = options.backgroundColor { + self.backgroundColor = backgroundColor + } + else { + backgroundColor = #colorLiteral(red: 0.7803494334, green: 0.7761332393, blue: 0.7967314124, alpha: 1) + } + #endif buttons = addButtons(for: self.actions, withMaximum: maxSize, contentEdgeInsets: contentEdgeInsets) } @@ -301,9 +319,25 @@ class SwipeActionButtonWrapperView: UIView { } else { switch action.style { case .destructive: + #if canImport(Combine) + if #available(iOS 13.0, *) { + actionBackgroundColor = UIColor.systemRed + } else { + actionBackgroundColor = #colorLiteral(red: 1, green: 0.2352941176, blue: 0.1882352941, alpha: 1) + } + #else actionBackgroundColor = #colorLiteral(red: 1, green: 0.2352941176, blue: 0.1882352941, alpha: 1) + #endif default: - actionBackgroundColor = #colorLiteral(red: 0.862745098, green: 0.862745098, blue: 0.862745098, alpha: 1) + #if canImport(Combine) + if #available(iOS 13.0, *) { + actionBackgroundColor = UIColor.systemGray3 + } else { + actionBackgroundColor = #colorLiteral(red: 0.7803494334, green: 0.7761332393, blue: 0.7967314124, alpha: 1) + } + #else + actionBackgroundColor = #colorLiteral(red: 0.7803494334, green: 0.7761332393, blue: 0.7967314124, alpha: 1) + #endif } } } diff --git a/Pods/SwipeCellKit/Source/SwipeCollectionViewCell.swift b/Pods/SwipeCellKit/Source/SwipeCollectionViewCell.swift index 5736c41c95..7afad29370 100644 --- a/Pods/SwipeCellKit/Source/SwipeCollectionViewCell.swift +++ b/Pods/SwipeCellKit/Source/SwipeCollectionViewCell.swift @@ -82,6 +82,17 @@ open class SwipeCollectionViewCell: UICollectionViewCell { func configure() { contentView.clipsToBounds = false + if contentView.translatesAutoresizingMaskIntoConstraints == true { + contentView.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + contentView.leadingAnchor.constraint(equalTo: self.leadingAnchor), + contentView.topAnchor.constraint(equalTo: self.topAnchor), + contentView.trailingAnchor.constraint(equalTo: self.trailingAnchor), + contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor), + ]) + } + swipeController = SwipeController(swipeable: self, actionsContainerView: contentView) swipeController.delegate = self } @@ -153,7 +164,11 @@ open class SwipeCollectionViewCell: UICollectionViewCell { // the collection view. /// :nodoc: open override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { - guard let actionsView = actionsView else { return super.hitTest(point, with: event) } + guard + let actionsView = actionsView, + isHidden == false + else { return super.hitTest(point, with: event) } + let modifiedPoint = actionsView.convert(point, from: self) return actionsView.hitTest(modifiedPoint, with: event) ?? super.hitTest(point, with: event) } diff --git a/Pods/SwipeCellKit/Source/SwipeController.swift b/Pods/SwipeCellKit/Source/SwipeController.swift index cab15ac43a..408354373d 100644 --- a/Pods/SwipeCellKit/Source/SwipeController.swift +++ b/Pods/SwipeCellKit/Source/SwipeController.swift @@ -432,6 +432,7 @@ extension SwipeController: SwipeActionsViewDelegate { } }) { [weak self] _ in self?.actionsContainerView?.mask = nil + self?.resetSwipe() self?.reset() } case .reset: @@ -481,6 +482,15 @@ extension SwipeController: SwipeActionsViewDelegate { delegate?.swipeController(self, didEndEditingSwipeableFor: actionView.orientation) } + func resetSwipe() { + guard let swipeable = self.swipeable, let actionsContainerView = self.actionsContainerView else { return } + + let targetCenter = self.targetCenter(active: false) + + actionsContainerView.center = CGPoint(x: targetCenter, y: actionsContainerView.center.y) + swipeable.actionsView?.visibleWidth = abs(actionsContainerView.frame.minX) + } + func showSwipe(orientation: SwipeActionsOrientation, animated: Bool = true, completion: ((Bool) -> Void)? = nil) { setSwipeOffset(.greatestFiniteMagnitude * orientation.scale * -1, animated: animated, diff --git a/Pods/Target Support Files/1PasswordExtension/1PasswordExtension-Info.plist b/Pods/Target Support Files/1PasswordExtension/1PasswordExtension-Info.plist deleted file mode 100644 index 34d49ec59b..0000000000 --- a/Pods/Target Support Files/1PasswordExtension/1PasswordExtension-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.8.5 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/1PasswordExtension/1PasswordExtension.xcconfig b/Pods/Target Support Files/1PasswordExtension/1PasswordExtension.xcconfig index a5a2a1796b..9e73121df9 100644 --- a/Pods/Target Support Files/1PasswordExtension/1PasswordExtension.xcconfig +++ b/Pods/Target Support Files/1PasswordExtension/1PasswordExtension.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "MobileCoreServices" -framework "UIKit" -weak_framework "WebKit" +OTHER_LDFLAGS = -framework "Foundation" -framework "MobileCoreServices" -framework "UIKit" -weak_framework "WebKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist b/Pods/Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist deleted file mode 100644 index 37edc9ff5d..0000000000 --- a/Pods/Target Support Files/1PasswordExtension/ResourceBundle-OnePasswordExtensionResources-1PasswordExtension-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.8.5 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig b/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig deleted file mode 100644 index ff20aba62c..0000000000 --- a/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Crashlytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "Security" -framework "SystemConfiguration" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Crashlytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-dummy.m b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-dummy.m new file mode 100644 index 0000000000..63e4995265 --- /dev/null +++ b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_DifferenceKit_Core : NSObject +@end +@implementation PodsDummy_DifferenceKit_Core +@end diff --git a/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-prefix.pch b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-prefix.pch new file mode 100644 index 0000000000..beb2a24418 --- /dev/null +++ b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-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/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-umbrella.h b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-umbrella.h new file mode 100644 index 0000000000..4a6f2f7eeb --- /dev/null +++ b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core-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 DifferenceKitVersionNumber; +FOUNDATION_EXPORT const unsigned char DifferenceKitVersionString[]; + diff --git a/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core.modulemap b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core.modulemap new file mode 100644 index 0000000000..38398be36c --- /dev/null +++ b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core.modulemap @@ -0,0 +1,6 @@ +framework module DifferenceKit { + umbrella header "DifferenceKit-Core-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SwiftLint/SwiftLint.xcconfig b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core.xcconfig similarity index 60% rename from Pods/Target Support Files/SwiftLint/SwiftLint.xcconfig rename to Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core.xcconfig index 00f22eb07b..699a7073ce 100644 --- a/Pods/Target Support Files/SwiftLint/SwiftLint.xcconfig +++ b/Pods/Target Support Files/DifferenceKit-Core/DifferenceKit-Core.xcconfig @@ -1,8 +1,9 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftLint +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftLint +PODS_TARGET_SRCROOT = ${PODS_ROOT}/DifferenceKit PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/DifferenceKit/DifferenceKit-Info.plist b/Pods/Target Support Files/DifferenceKit-Core/Info.plist similarity index 100% rename from Pods/Target Support Files/DifferenceKit/DifferenceKit-Info.plist rename to Pods/Target Support Files/DifferenceKit-Core/Info.plist diff --git a/Pods/Target Support Files/DifferenceKit/DifferenceKit.xcconfig b/Pods/Target Support Files/DifferenceKit/DifferenceKit.xcconfig index 1157aa490b..eece5c67fe 100644 --- a/Pods/Target Support Files/DifferenceKit/DifferenceKit.xcconfig +++ b/Pods/Target Support Files/DifferenceKit/DifferenceKit.xcconfig @@ -1,7 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_LDFLAGS = -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/DifferenceKit/Info.plist b/Pods/Target Support Files/DifferenceKit/Info.plist index 2243fe6e27..bfb8987915 100644 --- a/Pods/Target Support Files/DifferenceKit/Info.plist +++ b/Pods/Target Support Files/DifferenceKit/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.0.0 + 1.1.3 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist b/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist deleted file mode 100644 index b8236f13a6..0000000000 --- a/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.12 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage.xcconfig b/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage.xcconfig index 244a507835..2fd6000b7b 100644 --- a/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage.xcconfig +++ b/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" +OTHER_LDFLAGS = -framework "CoreGraphics" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/FLEX/FLEX-Info.plist b/Pods/Target Support Files/FLEX/FLEX-Info.plist deleted file mode 100644 index e526849606..0000000000 --- a/Pods/Target Support Files/FLEX/FLEX-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.4.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/FLEX/FLEX.xcconfig b/Pods/Target Support Files/FLEX/FLEX.xcconfig index 48a51b53c5..1d10867fcd 100644 --- a/Pods/Target Support Files/FLEX/FLEX.xcconfig +++ b/Pods/Target Support Files/FLEX/FLEX.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FLEX GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Foundation" -framework "UIKit" +OTHER_LDFLAGS = -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Foundation" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/Fabric/Fabric.xcconfig b/Pods/Target Support Files/Fabric/Fabric.xcconfig deleted file mode 100644 index 8cc41b6bce..0000000000 --- a/Pods/Target Support Files/Fabric/Fabric.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Fabric -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Fabric/iOS" -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}/Fabric -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Firebase/Firebase.xcconfig b/Pods/Target Support Files/Firebase/Firebase.xcconfig deleted file mode 100644 index 9533e5ad63..0000000000 --- a/Pods/Target Support Files/Firebase/Firebase.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.xcconfig b/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.xcconfig deleted file mode 100644 index d56c29ec51..0000000000 --- a/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -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}/FirebaseAnalytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist b/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist deleted file mode 100644 index ffa9cc9708..0000000000 --- a/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.1.7 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h b/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h index 791a7c0e31..102aecb860 100644 --- a/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h +++ b/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h @@ -10,7 +10,6 @@ #endif #endif -#import "FIRAnalyticsConfiguration.h" #import "FIRApp.h" #import "FIRConfiguration.h" #import "FirebaseCore.h" diff --git a/Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig b/Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig index 532b15e7c5..496812baa3 100644 --- a/Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig +++ b/Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig @@ -1,8 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=5.1.7 Firebase_VERSION=5.12.0 -OTHER_CFLAGS = -fno-autolink +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.3.2 Firebase_VERSION=6.11.0 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" +OTHER_CFLAGS = $(inherited) -fno-autolink +OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m new file mode 100644 index 0000000000..224d263ef9 --- /dev/null +++ b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_FirebaseCoreDiagnostics : NSObject +@end +@implementation PodsDummy_FirebaseCoreDiagnostics +@end diff --git a/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h new file mode 100644 index 0000000000..29502cdc50 --- /dev/null +++ b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FIRCoreDiagnosticsDateFileStorage.h" +#import "firebasecore.nanopb.h" + +FOUNDATION_EXPORT double FirebaseCoreDiagnosticsVersionNumber; +FOUNDATION_EXPORT const unsigned char FirebaseCoreDiagnosticsVersionString[]; + diff --git a/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap new file mode 100644 index 0000000000..d9cad8bc95 --- /dev/null +++ b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap @@ -0,0 +1,6 @@ +framework module FirebaseCoreDiagnostics { + umbrella header "FirebaseCoreDiagnostics-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.xcconfig b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.xcconfig new file mode 100644 index 0000000000..4a29e289a4 --- /dev/null +++ b/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.xcconfig @@ -0,0 +1,14 @@ +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" +GCC_C_LANGUAGE_STANDARD = c99 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 +GCC_TREAT_WARNINGS_AS_ERRORS = YES +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/" +OTHER_LDFLAGS = -framework "Foundation" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-dummy.m b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-dummy.m new file mode 100644 index 0000000000..937a03d9c4 --- /dev/null +++ b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_FirebaseInstanceID : NSObject +@end +@implementation PodsDummy_FirebaseInstanceID +@end diff --git a/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-umbrella.h b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-umbrella.h new file mode 100644 index 0000000000..90ba5defff --- /dev/null +++ b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FirebaseInstanceID.h" +#import "FIRInstanceID.h" + +FOUNDATION_EXPORT double FirebaseInstanceIDVersionNumber; +FOUNDATION_EXPORT const unsigned char FirebaseInstanceIDVersionString[]; + diff --git a/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.modulemap b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.modulemap new file mode 100644 index 0000000000..ff5248fe5b --- /dev/null +++ b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.modulemap @@ -0,0 +1,6 @@ +framework module FirebaseInstanceID { + umbrella header "FirebaseInstanceID-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.xcconfig b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.xcconfig index 8a05a13059..955a185314 100644 --- a/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.xcconfig +++ b/Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.xcconfig @@ -1,7 +1,9 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "Security" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" +GCC_C_LANGUAGE_STANDARD = c99 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRInstanceID_LIB_VERSION=4.2.6 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m new file mode 100644 index 0000000000..9a08ec35ed --- /dev/null +++ b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_GoogleDataTransport : NSObject +@end +@implementation PodsDummy_GoogleDataTransport +@end diff --git a/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h new file mode 100644 index 0000000000..6b7954344e --- /dev/null +++ b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-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 "GDTCORAssert.h" +#import "GDTCORClock.h" +#import "GDTCORConsoleLogger.h" +#import "GDTCORDataFuture.h" +#import "GDTCOREvent.h" +#import "GDTCOREventDataObject.h" +#import "GDTCOREventTransformer.h" +#import "GDTCORLifecycle.h" +#import "GDTCORPlatform.h" +#import "GDTCORPrioritizer.h" +#import "GDTCORRegistrar.h" +#import "GDTCORStoredEvent.h" +#import "GDTCORTargets.h" +#import "GDTCORTransport.h" +#import "GDTCORUploader.h" +#import "GDTCORUploadPackage.h" +#import "GoogleDataTransport.h" + +FOUNDATION_EXPORT double GoogleDataTransportVersionNumber; +FOUNDATION_EXPORT const unsigned char GoogleDataTransportVersionString[]; + diff --git a/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap new file mode 100644 index 0000000000..8a67414a1f --- /dev/null +++ b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap @@ -0,0 +1,6 @@ +framework module GoogleDataTransport { + umbrella header "GoogleDataTransport-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.xcconfig b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.xcconfig similarity index 52% rename from Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.xcconfig rename to Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.xcconfig index e9a8c04ec8..d8b83fcca9 100644 --- a/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.xcconfig +++ b/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.xcconfig @@ -1,10 +1,12 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleAppMeasurement -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport +GCC_C_LANGUAGE_STANDARD = c99 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" +GCC_TREAT_WARNINGS_AS_ERRORS = YES +HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleAppMeasurement +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m new file mode 100644 index 0000000000..3c7f556984 --- /dev/null +++ b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_GoogleDataTransportCCTSupport : NSObject +@end +@implementation PodsDummy_GoogleDataTransportCCTSupport +@end diff --git a/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h new file mode 100644 index 0000000000..7f5ac1c2a0 --- /dev/null +++ b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "cct.nanopb.h" + +FOUNDATION_EXPORT double GoogleDataTransportCCTSupportVersionNumber; +FOUNDATION_EXPORT const unsigned char GoogleDataTransportCCTSupportVersionString[]; + diff --git a/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap new file mode 100644 index 0000000000..7cec8f02ec --- /dev/null +++ b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap @@ -0,0 +1,6 @@ +framework module GoogleDataTransportCCTSupport { + umbrella header "GoogleDataTransportCCTSupport-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.xcconfig b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.xcconfig new file mode 100644 index 0000000000..ccd6a83288 --- /dev/null +++ b/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.xcconfig @@ -0,0 +1,14 @@ +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" +GCC_C_LANGUAGE_STANDARD = c99 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 +GCC_TREAT_WARNINGS_AS_ERRORS = YES +HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/" +OTHER_LDFLAGS = -l"z" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist b/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist deleted file mode 100644 index 9ce5a43b6b..0000000000 --- a/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.3.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.xcconfig b/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.xcconfig index 6a52687505..dd562e2eca 100644 --- a/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.xcconfig +++ b/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"z" -framework "Security" -framework "SystemConfiguration" +OTHER_LDFLAGS = -l"z" -framework "Security" -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/GoogleUtilities/Info.plist b/Pods/Target Support Files/GoogleUtilities/Info.plist index 9ce5a43b6b..e9068b0f4b 100644 --- a/Pods/Target Support Files/GoogleUtilities/Info.plist +++ b/Pods/Target Support Files/GoogleUtilities/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.3.4 + 6.3.1 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist b/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist deleted file mode 100644 index 21a30b4a6c..0000000000 --- a/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig b/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig index 021d75c746..8fab560fcc 100644 --- a/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig +++ b/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" +OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/MobilePlayer/Info.plist b/Pods/Target Support Files/MobilePlayer/Info.plist index 2a9158a0ba..7b6b52a408 100644 --- a/Pods/Target Support Files/MobilePlayer/Info.plist +++ b/Pods/Target Support Files/MobilePlayer/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.2.0 + 1.4.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/MobilePlayer/MobilePlayer-Info.plist b/Pods/Target Support Files/MobilePlayer/MobilePlayer-Info.plist deleted file mode 100644 index 7b6b52a408..0000000000 --- a/Pods/Target Support Files/MobilePlayer/MobilePlayer-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.4.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/MobilePlayer/MobilePlayer.xcconfig b/Pods/Target Support Files/MobilePlayer/MobilePlayer.xcconfig index 0f5126c180..cb04232c10 100644 --- a/Pods/Target Support Files/MobilePlayer/MobilePlayer.xcconfig +++ b/Pods/Target Support Files/MobilePlayer/MobilePlayer.xcconfig @@ -1,7 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "MediaPlayer" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_LDFLAGS = -framework "MediaPlayer" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist b/Pods/Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist index 76f0fc5d7f..b13a756b6d 100644 --- a/Pods/Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist +++ b/Pods/Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-Info.plist @@ -13,7 +13,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 1.2.0 + 1.4.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-MobilePlayer-Info.plist b/Pods/Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-MobilePlayer-Info.plist deleted file mode 100644 index b13a756b6d..0000000000 --- a/Pods/Target Support Files/MobilePlayer/ResourceBundle-MobilePlayer-MobilePlayer-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.4.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist b/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist index e92eb78557..2eb204d0dd 100644 --- a/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist +++ b/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 6.0.0 + 6.1.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-Info.plist b/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-Info.plist deleted file mode 100644 index e92eb78557..0000000000 --- a/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 6.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.xcconfig b/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.xcconfig index ed0fdac0fe..7b52b69d79 100644 --- a/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.xcconfig +++ b/Pods/Target Support Files/Nuke-FLAnimatedImage-Plugin/Nuke-FLAnimatedImage-Plugin.xcconfig @@ -1,7 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/Nuke/Info.plist b/Pods/Target Support Files/Nuke/Info.plist index dd739c8a49..55c676bd5f 100644 --- a/Pods/Target Support Files/Nuke/Info.plist +++ b/Pods/Target Support Files/Nuke/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 7.5.2 + 7.6.3 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/Nuke/Nuke-Info.plist b/Pods/Target Support Files/Nuke/Nuke-Info.plist deleted file mode 100644 index 55c676bd5f..0000000000 --- a/Pods/Target Support Files/Nuke/Nuke-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 7.6.3 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Nuke/Nuke.xcconfig b/Pods/Target Support Files/Nuke/Nuke.xcconfig index 25dcf80a81..7c67c00aa5 100644 --- a/Pods/Target Support Files/Nuke/Nuke.xcconfig +++ b/Pods/Target Support Files/Nuke/Nuke.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Nuke GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/OAuthSwift/Info.plist b/Pods/Target Support Files/OAuthSwift/Info.plist index e433362ea8..0a12077e3f 100644 --- a/Pods/Target Support Files/OAuthSwift/Info.plist +++ b/Pods/Target Support Files/OAuthSwift/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.2.2 + 2.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/OAuthSwift/OAuthSwift-Info.plist b/Pods/Target Support Files/OAuthSwift/OAuthSwift-Info.plist deleted file mode 100644 index e433362ea8..0000000000 --- a/Pods/Target Support Files/OAuthSwift/OAuthSwift-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/OAuthSwift/OAuthSwift.xcconfig b/Pods/Target Support Files/OAuthSwift/OAuthSwift.xcconfig index be0955b49b..d159567f8c 100644 --- a/Pods/Target Support Files/OAuthSwift/OAuthSwift.xcconfig +++ b/Pods/Target Support Files/OAuthSwift/OAuthSwift.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension-Info.plist b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension-Info.plist deleted file mode 100644 index 2243fe6e27..0000000000 --- a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.beta.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.beta.xcconfig index 07b47a582b..30e9392394 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.beta.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.beta.xcconfig @@ -1,11 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "ImageIO" -framework "MBProgressHUD" -framework "MobileCoreServices" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "QuartzCore" -framework "Realm" -framework "RealmSwift" -framework "Security" -framework "SwiftyJSON" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "MBProgressHUD" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "Realm" -framework "RealmSwift" -framework "SwiftyJSON" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.debug.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.debug.xcconfig index 07b47a582b..30e9392394 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.debug.xcconfig @@ -1,11 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "ImageIO" -framework "MBProgressHUD" -framework "MobileCoreServices" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "QuartzCore" -framework "Realm" -framework "RealmSwift" -framework "Security" -framework "SwiftyJSON" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "MBProgressHUD" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "Realm" -framework "RealmSwift" -framework "SwiftyJSON" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.release.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.release.xcconfig index 07b47a582b..30e9392394 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.release.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.release.xcconfig @@ -1,11 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "ImageIO" -framework "MBProgressHUD" -framework "MobileCoreServices" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "QuartzCore" -framework "Realm" -framework "RealmSwift" -framework "Security" -framework "SwiftyJSON" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "MBProgressHUD" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "Realm" -framework "RealmSwift" -framework "SwiftyJSON" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.test.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.test.xcconfig index 07b47a582b..30e9392394 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.test.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.test.xcconfig @@ -1,11 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "ImageIO" -framework "MBProgressHUD" -framework "MobileCoreServices" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "QuartzCore" -framework "Realm" -framework "RealmSwift" -framework "Security" -framework "SwiftyJSON" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "DifferenceKit" -framework "FLAnimatedImage" -framework "MBProgressHUD" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "Realm" -framework "RealmSwift" -framework "SwiftyJSON" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-Info.plist b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-Info.plist deleted file mode 100644 index 2243fe6e27..0000000000 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.markdown b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.markdown index 953d679c2e..137753a5e6 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.markdown @@ -895,11 +895,213 @@ Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is ## Firebase -Copyright 2018 Google + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ## FirebaseAnalytics -Copyright 2018 Google +Copyright 2019 Google ## FirebaseCore @@ -1107,13 +1309,1039 @@ Copyright 2018 Google limitations under the License. -## FirebaseInstanceID +## FirebaseCoreDiagnostics -Copyright 2018 Google -## GoogleAppMeasurement + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## FirebaseCoreDiagnosticsInterop + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## FirebaseInstanceID + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## GoogleAppMeasurement + +Copyright 2019 Google + +## GoogleDataTransport + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## GoogleDataTransportCCTSupport + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -Copyright 2018 Google ## GoogleUtilities diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.plist b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.plist index f66e43834e..6c8af4c376 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-acknowledgements.plist @@ -978,9 +978,211 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - Copyright 2018 Google + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + License - Copyright + Apache Title Firebase Type @@ -988,7 +1190,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - Copyright 2018 Google + Copyright 2019 Google License Copyright Title @@ -1210,21 +1412,1071 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - Copyright 2018 Google - License - Copyright - Title - FirebaseInstanceID - Type - PSGroupSpecifier - - - FooterText - Copyright 2018 Google - License - Copyright - Title - GoogleAppMeasurement + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + FirebaseCoreDiagnostics + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + FirebaseCoreDiagnosticsInterop + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + FirebaseInstanceID + Type + PSGroupSpecifier + + + FooterText + Copyright 2019 Google + License + Copyright + Title + GoogleAppMeasurement + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + GoogleDataTransport + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + GoogleDataTransportCCTSupport Type PSGroupSpecifier diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh index 95274503d2..45e45f9a32 100755 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh +++ b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh @@ -3,15 +3,10 @@ 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 + # 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}" @@ -41,8 +36,8 @@ install_framework() local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" + echo "Symlinked..." + source="$(readlink "${source}")" fi # Use filter instead of exclude so missing patterns don't throw errors. @@ -52,13 +47,8 @@ install_framework() 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 @@ -72,7 +62,7 @@ install_framework() # 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) + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) for lib in $swift_runtime_libs; do echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" @@ -111,8 +101,8 @@ install_dsym() { # 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 + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" @@ -141,7 +131,7 @@ strip_invalid_archs() { for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" fi done @@ -174,6 +164,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework" install_framework "${BUILT_PRODUCTS_DIR}/semver/semver.framework" + install_framework "${BUILT_PRODUCTS_DIR}/DifferenceKit-Core/DifferenceKit.framework" fi if [[ "$CONFIGURATION" == "Test" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/DifferenceKit/DifferenceKit.framework" @@ -196,6 +187,7 @@ if [[ "$CONFIGURATION" == "Test" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework" install_framework "${BUILT_PRODUCTS_DIR}/semver/semver.framework" + install_framework "${BUILT_PRODUCTS_DIR}/DifferenceKit-Core/DifferenceKit.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/DifferenceKit/DifferenceKit.framework" @@ -218,6 +210,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework" install_framework "${BUILT_PRODUCTS_DIR}/semver/semver.framework" + install_framework "${BUILT_PRODUCTS_DIR}/DifferenceKit-Core/DifferenceKit.framework" fi if [[ "$CONFIGURATION" == "Beta" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/DifferenceKit/DifferenceKit.framework" @@ -241,6 +234,7 @@ if [[ "$CONFIGURATION" == "Beta" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework" install_framework "${BUILT_PRODUCTS_DIR}/semver/semver.framework" + install_framework "${BUILT_PRODUCTS_DIR}/DifferenceKit-Core/DifferenceKit.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.beta.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.beta.xcconfig index 80548d3db5..2be2c28551 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.beta.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.beta.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.debug.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.debug.xcconfig index 80548d3db5..2be2c28551 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.debug.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.release.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.release.xcconfig index 31d6d70dfe..d182e3ac0f 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.release.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.release.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.test.xcconfig b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.test.xcconfig index 31d6d70dfe..d182e3ac0f 100644 --- a/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.test.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.test.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit-Core/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-Info.plist b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-Info.plist deleted file mode 100644 index 2243fe6e27..0000000000 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.markdown b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.markdown index 953d679c2e..137753a5e6 100644 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.markdown @@ -895,11 +895,213 @@ Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is ## Firebase -Copyright 2018 Google + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ## FirebaseAnalytics -Copyright 2018 Google +Copyright 2019 Google ## FirebaseCore @@ -1107,13 +1309,1039 @@ Copyright 2018 Google limitations under the License. -## FirebaseInstanceID +## FirebaseCoreDiagnostics -Copyright 2018 Google -## GoogleAppMeasurement + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## FirebaseCoreDiagnosticsInterop + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## FirebaseInstanceID + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## GoogleAppMeasurement + +Copyright 2019 Google + +## GoogleDataTransport + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## GoogleDataTransportCCTSupport + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -Copyright 2018 Google ## GoogleUtilities diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.plist b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.plist index f66e43834e..6c8af4c376 100644 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-acknowledgements.plist @@ -978,9 +978,211 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - Copyright 2018 Google + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + License - Copyright + Apache Title Firebase Type @@ -988,7 +1190,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - Copyright 2018 Google + Copyright 2019 Google License Copyright Title @@ -1210,21 +1412,1071 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - Copyright 2018 Google - License - Copyright - Title - FirebaseInstanceID - Type - PSGroupSpecifier - - - FooterText - Copyright 2018 Google - License - Copyright - Title - GoogleAppMeasurement + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + FirebaseCoreDiagnostics + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + FirebaseCoreDiagnosticsInterop + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + FirebaseInstanceID + Type + PSGroupSpecifier + + + FooterText + Copyright 2019 Google + License + Copyright + Title + GoogleAppMeasurement + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + GoogleDataTransport + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + GoogleDataTransportCCTSupport Type PSGroupSpecifier diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-frameworks.sh b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-frameworks.sh index 95274503d2..dfbbb770d0 100755 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-frameworks.sh +++ b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-frameworks.sh @@ -3,15 +3,10 @@ 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 + # 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}" @@ -41,8 +36,8 @@ install_framework() local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" + echo "Symlinked..." + source="$(readlink "${source}")" fi # Use filter instead of exclude so missing patterns don't throw errors. @@ -52,13 +47,8 @@ install_framework() 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 @@ -72,7 +62,7 @@ install_framework() # 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) + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) for lib in $swift_runtime_libs; do echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" @@ -111,8 +101,8 @@ install_dsym() { # 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 + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" @@ -141,7 +131,7 @@ strip_invalid_archs() { for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" fi done diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.beta.xcconfig b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.beta.xcconfig index 80548d3db5..7715a27e99 100644 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.beta.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.beta.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.debug.xcconfig b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.debug.xcconfig index 80548d3db5..7715a27e99 100644 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.debug.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "FLEX" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.release.xcconfig b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.release.xcconfig index 31d6d70dfe..83133740fc 100644 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.release.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.release.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.test.xcconfig b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.test.xcconfig index 31d6d70dfe..83133740fc 100644 --- a/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.test.xcconfig +++ b/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.test.xcconfig @@ -1,12 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_CONFIGURATION_BUILD_DIR}/semver" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources +HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" -iframework "${PODS_ROOT}/FirebaseInstanceID/Frameworks" -iframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/semver" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" -framework "ImageIO" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "QuartzCore" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" -weak_framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/1PasswordExtension/OnePasswordExtension.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit/DifferenceKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MobilePlayer/MobilePlayer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OAuthSwift/OAuthSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser/RCMarkdownParser.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController/RocketChatViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer/SimpleImageViewer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit/SwipeCellKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/semver/semver.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "DifferenceKit" -framework "FIRAnalyticsConnector" -framework "FLAnimatedImage" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstanceID" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MBProgressHUD" -framework "MobilePlayer" -framework "Nuke" -framework "NukeFLAnimatedImagePlugin" -framework "OAuthSwift" -framework "OnePasswordExtension" -framework "RCMarkdownParser" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "RocketChatViewController" -framework "Security" -framework "SimpleImageViewer" -framework "Starscream" -framework "StoreKit" -framework "SwiftyJSON" -framework "SwipeCellKit" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -framework "semver" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/RCMarkdownParser/RCMarkdownParser-Info.plist b/Pods/Target Support Files/RCMarkdownParser/RCMarkdownParser-Info.plist deleted file mode 100644 index 62bad7c9e2..0000000000 --- a/Pods/Target Support Files/RCMarkdownParser/RCMarkdownParser-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.0.7 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/RCMarkdownParser/RCMarkdownParser.xcconfig b/Pods/Target Support Files/RCMarkdownParser/RCMarkdownParser.xcconfig index c0265a9dd2..8e7646c001 100644 --- a/Pods/Target Support Files/RCMarkdownParser/RCMarkdownParser.xcconfig +++ b/Pods/Target Support Files/RCMarkdownParser/RCMarkdownParser.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCMarkdownParser GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/ReachabilitySwift/Info.plist b/Pods/Target Support Files/ReachabilitySwift/Info.plist index 2b967cc3ee..e2771ff4bb 100644 --- a/Pods/Target Support Files/ReachabilitySwift/Info.plist +++ b/Pods/Target Support Files/ReachabilitySwift/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.2.1 + 5.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist deleted file mode 100644 index 2b967cc3ee..0000000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.2.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig index b3e81b684d..6c3da8ffd4 100644 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig +++ b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig @@ -1,7 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "SystemConfiguration" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_LDFLAGS = -framework "CoreTelephony" -framework "SystemConfiguration" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/Realm/Info.plist b/Pods/Target Support Files/Realm/Info.plist index 1130dfdf63..2ccdbe6847 100644 --- a/Pods/Target Support Files/Realm/Info.plist +++ b/Pods/Target Support Files/Realm/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.12.0 + 3.20.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/Realm/Realm-Info.plist b/Pods/Target Support Files/Realm/Realm-Info.plist deleted file mode 100644 index 1130dfdf63..0000000000 --- a/Pods/Target Support Files/Realm/Realm-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.12.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Realm/Realm.xcconfig b/Pods/Target Support Files/Realm/Realm.xcconfig index ec883d19df..b66d150332 100644 --- a/Pods/Target Support Files/Realm/Realm.xcconfig +++ b/Pods/Target Support Files/Realm/Realm.xcconfig @@ -5,7 +5,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Realm GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" OTHER_CPLUSPLUSFLAGS = -isystem "${PODS_ROOT}/Realm/include/core" -fvisibility-inlines-hidden -OTHER_LDFLAGS = $(inherited) -l"c++" -l"realmcore-ios" -l"z" -framework "Security" +OTHER_LDFLAGS = -l"c++" -l"realmcore-ios" -l"z" -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/RealmSwift/Info.plist b/Pods/Target Support Files/RealmSwift/Info.plist index 1130dfdf63..2ccdbe6847 100644 --- a/Pods/Target Support Files/RealmSwift/Info.plist +++ b/Pods/Target Support Files/RealmSwift/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.12.0 + 3.20.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/RealmSwift/RealmSwift-Info.plist b/Pods/Target Support Files/RealmSwift/RealmSwift-Info.plist deleted file mode 100644 index 1130dfdf63..0000000000 --- a/Pods/Target Support Files/RealmSwift/RealmSwift-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.12.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig b/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig index 723e241751..db47c315a4 100644 --- a/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig +++ b/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig @@ -2,7 +2,7 @@ APPLICATION_EXTENSION_API_ONLY = YES CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Realm" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/RocketChatViewController/Info.plist b/Pods/Target Support Files/RocketChatViewController/Info.plist index 2243fe6e27..3c175b60df 100644 --- a/Pods/Target Support Files/RocketChatViewController/Info.plist +++ b/Pods/Target Support Files/RocketChatViewController/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.0.0 + 1.0.1 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/RocketChatViewController/RocketChatViewController-Info.plist b/Pods/Target Support Files/RocketChatViewController/RocketChatViewController-Info.plist deleted file mode 100644 index 2243fe6e27..0000000000 --- a/Pods/Target Support Files/RocketChatViewController/RocketChatViewController-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/RocketChatViewController/RocketChatViewController.xcconfig b/Pods/Target Support Files/RocketChatViewController/RocketChatViewController.xcconfig index a396e11f39..0b9de46224 100644 --- a/Pods/Target Support Files/RocketChatViewController/RocketChatViewController.xcconfig +++ b/Pods/Target Support Files/RocketChatViewController/RocketChatViewController.xcconfig @@ -1,7 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RocketChatViewController FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DifferenceKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/SimpleImageViewer/SimpleImageViewer-Info.plist b/Pods/Target Support Files/SimpleImageViewer/SimpleImageViewer-Info.plist deleted file mode 100644 index 2a9158a0ba..0000000000 --- a/Pods/Target Support Files/SimpleImageViewer/SimpleImageViewer-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.2.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/SimpleImageViewer/SimpleImageViewer.xcconfig b/Pods/Target Support Files/SimpleImageViewer/SimpleImageViewer.xcconfig index e0e2521671..77298cacf1 100644 --- a/Pods/Target Support Files/SimpleImageViewer/SimpleImageViewer.xcconfig +++ b/Pods/Target Support Files/SimpleImageViewer/SimpleImageViewer.xcconfig @@ -1,7 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SimpleImageViewer FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/Starscream/Info.plist b/Pods/Target Support Files/Starscream/Info.plist index e822e16086..793d31a9fd 100644 --- a/Pods/Target Support Files/Starscream/Info.plist +++ b/Pods/Target Support Files/Starscream/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.6 + 3.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/Starscream/Starscream-Info.plist b/Pods/Target Support Files/Starscream/Starscream-Info.plist deleted file mode 100644 index e822e16086..0000000000 --- a/Pods/Target Support Files/Starscream/Starscream-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.0.6 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Starscream/Starscream.xcconfig b/Pods/Target Support Files/Starscream/Starscream.xcconfig index 0dc8587b20..e3062635f3 100644 --- a/Pods/Target Support Files/Starscream/Starscream.xcconfig +++ b/Pods/Target Support Files/Starscream/Starscream.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Starscream GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/SwiftyJSON/Info.plist b/Pods/Target Support Files/SwiftyJSON/Info.plist index 6631be71f7..e2771ff4bb 100644 --- a/Pods/Target Support Files/SwiftyJSON/Info.plist +++ b/Pods/Target Support Files/SwiftyJSON/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.2.0 + 5.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist deleted file mode 100644 index 6631be71f7..0000000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.2.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.xcconfig b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.xcconfig index eac39591de..4ff9fb6f6a 100644 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.xcconfig +++ b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/SwipeCellKit/Info.plist b/Pods/Target Support Files/SwipeCellKit/Info.plist index 3e85049814..50413d972b 100644 --- a/Pods/Target Support Files/SwipeCellKit/Info.plist +++ b/Pods/Target Support Files/SwipeCellKit/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.5.0 + 2.7.1 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/SwipeCellKit/SwipeCellKit-Info.plist b/Pods/Target Support Files/SwipeCellKit/SwipeCellKit-Info.plist deleted file mode 100644 index d4fb73c717..0000000000 --- a/Pods/Target Support Files/SwipeCellKit/SwipeCellKit-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.6.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/SwipeCellKit/SwipeCellKit.xcconfig b/Pods/Target Support Files/SwipeCellKit/SwipeCellKit.xcconfig index 614281c64c..d7d58e07e3 100644 --- a/Pods/Target Support Files/SwipeCellKit/SwipeCellKit.xcconfig +++ b/Pods/Target Support Files/SwipeCellKit/SwipeCellKit.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwipeCellKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/nanopb/Info.plist b/Pods/Target Support Files/nanopb/Info.plist index dbeb19fc24..bcc2778099 100644 --- a/Pods/Target Support Files/nanopb/Info.plist +++ b/Pods/Target Support Files/nanopb/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.3.901 + 0.3.9011 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/nanopb/nanopb-Info.plist b/Pods/Target Support Files/nanopb/nanopb-Info.plist deleted file mode 100644 index dbeb19fc24..0000000000 --- a/Pods/Target Support Files/nanopb/nanopb-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.3.901 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/semver/semver-Info.plist b/Pods/Target Support Files/semver/semver-Info.plist deleted file mode 100644 index 21a30b4a6c..0000000000 --- a/Pods/Target Support Files/semver/semver-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/semver/semver.xcconfig b/Pods/Target Support Files/semver/semver.xcconfig index 1526e7625c..90a8ee8da2 100644 --- a/Pods/Target Support Files/semver/semver.xcconfig +++ b/Pods/Target Support Files/semver/semver.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/semver GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Rocket.Chat.xcodeproj/project.pbxproj b/Rocket.Chat.xcodeproj/project.pbxproj old mode 100644 new mode 100755 index bd92c31ec1..463af876b8 --- a/Rocket.Chat.xcodeproj/project.pbxproj +++ b/Rocket.Chat.xcodeproj/project.pbxproj @@ -13,17 +13,12 @@ 0B7A210D204680D500D11085 /* ChangeLanguageResetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7A210C204680D500D11085 /* ChangeLanguageResetCell.swift */; }; 0B80EE5920FC614600E7E43B /* RCPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B80EE5820FC614600E7E43B /* RCPickerView.swift */; }; 0B92E65520F74CE8003DAB5A /* ShortcutsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B92E65420F74CE8003DAB5A /* ShortcutsManager.swift */; }; - 0B92E65720F76393003DAB5A /* ShortcutsManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B92E65620F76393003DAB5A /* ShortcutsManagerSpec.swift */; }; 0B92E66A20F767F8003DAB5A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0B92E66C20F767F8003DAB5A /* InfoPlist.strings */; }; 0B9AB2C120444ECD00ABEA05 /* LanguageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B9AB2C020444ECD00ABEA05 /* LanguageViewController.swift */; }; 0B9AB2C320444ED600ABEA05 /* LanguageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B9AB2C220444ED600ABEA05 /* LanguageViewModel.swift */; }; 0BB9678A2031A74B0051D68C /* DrawingBrushColorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BB967892031A74B0051D68C /* DrawingBrushColorViewModel.swift */; }; 0BBCC2BF204532F0001E3B6D /* ChangeLanguageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BBCC2BE204532F0001E3B6D /* ChangeLanguageCell.swift */; }; - 0BBCC2C2204546CF001E3B6D /* LanguageViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BBCC2C1204546CF001E3B6D /* LanguageViewModelSpec.swift */; }; - 0BC0E8612032DB20004BFAAF /* DrawingBrushColorSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0E8602032DB20004BFAAF /* DrawingBrushColorSpec.swift */; }; 0BC0E8632032DD95004BFAAF /* DrawingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0E8622032DD95004BFAAF /* DrawingViewModel.swift */; }; - 0BC0E8652032DF9B004BFAAF /* DrawingViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0E8642032DF9B004BFAAF /* DrawingViewModelSpec.swift */; }; - 140A95DE202F1E6F003FD564 /* ChangeAppIconViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 140A95DD202F1E6F003FD564 /* ChangeAppIconViewModelSpec.swift */; }; 140A95E1202F526C003FD564 /* Drawing.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 140A95E0202F526C003FD564 /* Drawing.storyboard */; }; 140A95E4202F536D003FD564 /* DrawingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 140A95E3202F536D003FD564 /* DrawingViewController.swift */; }; 140A95E6202F7074003FD564 /* DrawingControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 140A95E5202F7074003FD564 /* DrawingControllerDelegate.swift */; }; @@ -36,7 +31,6 @@ 1496A87220FA469C005C2E14 /* Dynamic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1496A87120FA469C005C2E14 /* Dynamic.swift */; }; 1496A87920FA4736005C2E14 /* EnumExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1496A87820FA4735005C2E14 /* EnumExtensions.swift */; }; 1496A87C20FA481B005C2E14 /* SaveNotificationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1496A87B20FA481B005C2E14 /* SaveNotificationRequest.swift */; }; - 1496A87D20FA4845005C2E14 /* EnumExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1496A87820FA4735005C2E14 /* EnumExtensions.swift */; }; 1496A88020FA4890005C2E14 /* NotificationPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1496A87F20FA4890005C2E14 /* NotificationPreferences.swift */; }; 1496A88220FA4A92005C2E14 /* NotificationsSettings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1496A88120FA4A92005C2E14 /* NotificationsSettings.storyboard */; }; 14A6A83120421DF8008C210D /* ColorPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A6A83020421DF8008C210D /* ColorPickerView.swift */; }; @@ -97,13 +91,7 @@ 14F8A298202E65C700175FDC /* Blue-29@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 14F8A28F202E65C700175FDC /* Blue-29@2x.png */; }; 14F8A299202E65C700175FDC /* Blue-40@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 14F8A290202E65C700175FDC /* Blue-40@3x.png */; }; 14F8A29A202E65C700175FDC /* Blue-76@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 14F8A291202E65C700175FDC /* Blue-76@2x.png */; }; - 15A2FD223558011BFDE03883 /* Pods_Rocket_ChatTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68D870A8D54F5431A14607AE /* Pods_Rocket_ChatTests.framework */; }; - 33093DC5207C7EAF00DD81F6 /* ChatNotificationSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33093DC4207C7EAF00DD81F6 /* ChatNotificationSpec.swift */; }; - 33093DC7207C900900DD81F6 /* NotificationManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33093DC6207C900900DD81F6 /* NotificationManagerSpec.swift */; }; - 33093DC9207C949C00DD81F6 /* NotificationViewControllerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33093DC8207C949C00DD81F6 /* NotificationViewControllerSpec.swift */; }; 33230AAE20E8D5C40031C71D /* RuntimeAttributesThemeableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33230AAD20E8D5C40031C71D /* RuntimeAttributesThemeableView.swift */; }; - 33230AB420EA6B230031C71D /* ThemeManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33230AB020EA6A970031C71D /* ThemeManagerSpec.swift */; }; - 33230AB520EA6B590031C71D /* ThemeableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33230AB120EA6A970031C71D /* ThemeableSpec.swift */; }; 332BCB1C20DA6D5F00C8CAD2 /* SubscriptionsSortingHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 332BCB1B20DA6D5E00C8CAD2 /* SubscriptionsSortingHeaderView.swift */; }; 3330329820738D4600A9514D /* SubscriptionManagerMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3330329720738D4600A9514D /* SubscriptionManagerMessages.swift */; }; 3330329A20738E1500A9514D /* SubscriptionManagerRooms.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3330329920738E1500A9514D /* SubscriptionManagerRooms.swift */; }; @@ -114,11 +102,8 @@ 334CFFEE20668DDF003CDB99 /* EmojiCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334CFFED20668DDF003CDB99 /* EmojiCollectionViewCell.swift */; }; 334F78EC211DC639003D0C5A /* UnmanagedSubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334F78EB211DC639003D0C5A /* UnmanagedSubscription.swift */; }; 334F78EE211DCB79003D0C5A /* UnmanagedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334F78ED211DCB79003D0C5A /* UnmanagedObject.swift */; }; - 334F78EF211DE726003D0C5A /* UnmanagedSubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334F78EB211DC639003D0C5A /* UnmanagedSubscription.swift */; }; - 334F78F0211DE72D003D0C5A /* UnmanagedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334F78ED211DCB79003D0C5A /* UnmanagedObject.swift */; }; 335F4F03207A31D3005E14AF /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335F4F02207A31D3005E14AF /* NotificationManager.swift */; }; 3367424A213EBBF800E6816E /* ListExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33674249213EBBF800E6816E /* ListExtension.swift */; }; - 3397604920EA72EE0054758A /* RuntimeAttributesThemeableViewSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3397604820EA72EE0054758A /* RuntimeAttributesThemeableViewSpec.swift */; }; 339B692B2050449700F97392 /* KeyboardFrameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 339B6929205042D300F97392 /* KeyboardFrameView.swift */; }; 33A1BB0520FE312900AFA7D4 /* ChatMessageVideoView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 412A95D51FD94ED000954AA6 /* ChatMessageVideoView.xib */; }; 33A1BB0720FF75D600AFA7D4 /* BaseSubscriptionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A1BB0620FF75D600AFA7D4 /* BaseSubscriptionCell.swift */; }; @@ -144,7 +129,6 @@ 33D08E3120BD92A5008D03EF /* ThemePreferenceCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33D08E3020BD92A5008D03EF /* ThemePreferenceCell.swift */; }; 33E33ED620E0E59B00EF4560 /* AuthNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33E33ED520E0E59B00EF4560 /* AuthNavigationController.swift */; }; 33F67A40212BFC40004EB4A0 /* UnmanagedUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F67A3F212BFC40004EB4A0 /* UnmanagedUser.swift */; }; - 33F67A41212C0119004EB4A0 /* UnmanagedUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F67A3F212BFC40004EB4A0 /* UnmanagedUser.swift */; }; 33F67A44212D8F62004EB4A0 /* DifferenceKitExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F67A43212D8F62004EB4A0 /* DifferenceKitExtension.swift */; }; 33F73B2D2073BDF400F03F29 /* NotificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F73B2B2073BDF400F03F29 /* NotificationView.swift */; }; 33F73B302073F24200F03F29 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F73B2F2073F24200F03F29 /* NotificationViewController.swift */; }; @@ -155,49 +139,34 @@ 33FE57EA20E5A01400E5C548 /* UserDetailHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE57E920E5A01400E5C548 /* UserDetailHeaderView.swift */; }; 35A203212022D3F900B4BE5A /* ChatMessageAttachmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35A203202022D3F900B4BE5A /* ChatMessageAttachmentView.swift */; }; 35BCD301201A57EA00B4BE5A /* Ask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35BCD300201A57EA00B4BE5A /* Ask.swift */; }; - 35BCD303201A9FB800B4BE5A /* AskSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35BCD302201A9FB800B4BE5A /* AskSpec.swift */; }; 35C7D19A202B130400B4BE5A /* RCDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35C7D199202B130400B4BE5A /* RCDateFormatter.swift */; }; - 35E892C4201BF2C900B4BE5A /* AlertSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E892C3201BF2C900B4BE5A /* AlertSpec.swift */; }; 35E892C6201CDCBC00B4BE5A /* OAuthManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E892C5201CDCBC00B4BE5A /* OAuthManager.swift */; }; 35E892C8201CDD1600B4BE5A /* NewRoomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E892C7201CDD1600B4BE5A /* NewRoomViewController.swift */; }; 35E892CA201CDD9700B4BE5A /* PreferencesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E892C9201CDD9700B4BE5A /* PreferencesViewModel.swift */; }; - 4100B2842087779D00E2883A /* LogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4174CB1B1D2DB2080086DAC8 /* LogManager.swift */; }; 4101B02921A2EF6B00772F7C /* HeaderChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4101B02821A2EF6B00772F7C /* HeaderChatItem.swift */; }; 4101B02B21A2EF8C00772F7C /* HeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4101B02A21A2EF8C00772F7C /* HeaderCell.xib */; }; 4101B02D21A2EF9300772F7C /* HeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4101B02C21A2EF9300772F7C /* HeaderCell.swift */; }; 4101BF011F8D0A1700F67E89 /* AppManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4101BF001F8D0A1700F67E89 /* AppManager.swift */; }; - 4101BF031F8D11FB00F67E89 /* AppManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4101BF021F8D11FB00F67E89 /* AppManagerSpec.swift */; }; 4104C8752216E08C00576C92 /* APISecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4104C8742216E08C00576C92 /* APISecurity.swift */; }; - 4104C8762216E2A500576C92 /* APISecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4104C8742216E08C00576C92 /* APISecurity.swift */; }; - 410AD84720A9B73B00EAFC64 /* FileSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 410AD84620A9B73B00EAFC64 /* FileSpec.swift */; }; 411119B61F680DB00019854B /* NetworkCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411119B51F680DB00019854B /* NetworkCoordinator.swift */; }; - 411119B81F6825C30019854B /* NetworkManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411119B71F6825C30019854B /* NetworkManagerSpec.swift */; }; 4112DC581FFFB9B2005995E1 /* BaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4112DC551FFFB9B1005995E1 /* BaseModel.swift */; }; 4112DC591FFFB9B2005995E1 /* ModelHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4112DC561FFFB9B1005995E1 /* ModelHandler.swift */; }; 4112DC5A1FFFB9B2005995E1 /* ModelMappeable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4112DC571FFFB9B1005995E1 /* ModelMappeable.swift */; }; - 41132159216D1BA70061FA11 /* UserModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BD37E01E290F2900CBC4C2 /* UserModelMapping.swift */; }; 4113BF70208E23F000A9D4D8 /* Preferences.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4102E3A91E532323004BAA82 /* Preferences.storyboard */; }; - 411498E11FC7A85400D66542 /* ChatTitleViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411498E01FC7A85400D66542 /* ChatTitleViewModelSpec.swift */; }; 411498E31FC7A99C00D66542 /* ChatTitleViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411498E21FC7A99C00D66542 /* ChatTitleViewModel.swift */; }; - 411498E51FC7B8D500D66542 /* AttachmentSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411498E41FC7B8D500D66542 /* AttachmentSpec.swift */; }; 4116CBE520B599D9007E7163 /* StatusTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4116CBE420B599D9007E7163 /* StatusTableViewController.swift */; }; 4116CBE720B599E6007E7163 /* StatusViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4116CBE620B599E6007E7163 /* StatusViewModel.swift */; }; - 411D40C620D2668B001A1035 /* SubscriptionLastMessageSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D40C520D2668B001A1035 /* SubscriptionLastMessageSpec.swift */; }; 411D40C920D27A5E001A1035 /* ChannelInfoDescriptionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 411D40C720D27A5E001A1035 /* ChannelInfoDescriptionCell.xib */; }; 411D40CA20D27A5E001A1035 /* ChannelInfoDescriptionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D40C820D27A5E001A1035 /* ChannelInfoDescriptionCell.swift */; }; 411D40CD20D28150001A1035 /* ChannelInfoBasicCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 411D40CB20D2814F001A1035 /* ChannelInfoBasicCell.xib */; }; 411D40CE20D28150001A1035 /* ChannelInfoBasicCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D40CC20D2814F001A1035 /* ChannelInfoBasicCell.swift */; }; 411D76E51F39F05A00B0A8DF /* AuthSettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D76E41F39F05A00B0A8DF /* AuthSettingsManager.swift */; }; - 411D76E71F39FA7B00B0A8DF /* AuthSettingsManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D76E61F39FA7B00B0A8DF /* AuthSettingsManagerSpec.swift */; }; 411EDED51E3102CB00BC7BE3 /* UploadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411EDED41E3102CB00BC7BE3 /* UploadManager.swift */; }; 411F7D941F5179A50080E8AD /* ChatChannelHeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411F7D931F5179A50080E8AD /* ChatChannelHeaderCell.swift */; }; 411F7D961F5179B50080E8AD /* ChatChannelHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 411F7D951F5179B50080E8AD /* ChatChannelHeaderCell.xib */; }; - 412435C820CAC89C00A3602D /* SubscriptionsSortingViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412435C720CAC89C00A3602D /* SubscriptionsSortingViewModelSpec.swift */; }; - 412435CA20CACF1400A3602D /* SubscriptionSortingManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412435C920CACF1400A3602D /* SubscriptionSortingManagerSpec.swift */; }; 4124D833209A0517005374CD /* ChatLoaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41CABFF91F5047E200E0B289 /* ChatLoaderCell.swift */; }; 4124D834209A0521005374CD /* ChatMessageDaySeparator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D3A62F1E0805490011949D /* ChatMessageDaySeparator.swift */; }; 4124D835209A0533005374CD /* ChatDirectMessageHeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D894011F4EF64200E284D2 /* ChatDirectMessageHeaderCell.swift */; }; - 4124D837209A06BD005374CD /* Permission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806401301FB09DE800990572 /* Permission.swift */; }; 4124FCC61F7A61C6008ED4C3 /* ChannelInfoActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4124FCC41F7A61C5008ED4C3 /* ChannelInfoActionCell.swift */; }; 4124FCC81F7A6BF5008ED4C3 /* ChannelInfoUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4124FCC71F7A6252008ED4C3 /* ChannelInfoUserCell.xib */; }; 4124FCC91F7A6BF9008ED4C3 /* ChannelInfoActionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4124FCC51F7A61C5008ED4C3 /* ChannelInfoActionCell.xib */; }; @@ -212,8 +181,6 @@ 412BCC871E55C6B800F7F4EE /* ChatMessageTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412BCC861E55C6B800F7F4EE /* ChatMessageTextView.swift */; }; 412BCC8B1E55D4AA00F7F4EE /* UIColorCSSColorsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412BCC8A1E55D4AA00F7F4EE /* UIColorCSSColorsExtension.swift */; }; 412DF58E216F8A1F005161A4 /* UnmanagedAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412DF58D216F8A1F005161A4 /* UnmanagedAttachment.swift */; }; - 412DF58F216F901D005161A4 /* UnmanagedAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412DF58D216F8A1F005161A4 /* UnmanagedAttachment.swift */; }; - 412DF591216F9EC3005161A4 /* UnmanagedMessageSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412DF590216F9EC3005161A4 /* UnmanagedMessageSpec.swift */; }; 412E1F3B1DB6D55000531FDA /* ChatMessageURLView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412E1F391DB6D55000531FDA /* ChatMessageURLView.swift */; }; 412E1F3C1DB6D55000531FDA /* ChatMessageURLView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 412E1F3A1DB6D55000531FDA /* ChatMessageURLView.xib */; }; 412EF3C62050507C001689A3 /* ReusableViewText.xib in Resources */ = {isa = PBXBuildFile; fileRef = 412EF3C52050507C001689A3 /* ReusableViewText.xib */; }; @@ -223,7 +190,6 @@ 4135A64421623F1300C1741A /* ImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4135A64321623F1300C1741A /* ImageCell.swift */; }; 4135A64621623F2A00C1741A /* ImageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4135A64521623F2A00C1741A /* ImageCell.xib */; }; 4135A64821623F3600C1741A /* ImageMessageChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4135A64721623F3600C1741A /* ImageMessageChatItem.swift */; }; - 41366B2321D4DAEC00B9D832 /* JitsiViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41366B2221D4DAEC00B9D832 /* JitsiViewModelSpec.swift */; }; 413996171F3B44500075F96E /* UploadHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 413996161F3B44500075F96E /* UploadHelper.swift */; }; 413C596C22259A4800466BA5 /* Directory.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 413C596B22259A4800466BA5 /* Directory.storyboard */; }; 413C596F22259BC300466BA5 /* DirectoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 413C596E22259BC300466BA5 /* DirectoryViewController.swift */; }; @@ -242,7 +208,6 @@ 4146ECF3223A6A92000070EA /* DirectoryChannelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4146ECF2223A6A92000070EA /* DirectoryChannelCell.swift */; }; 4147CE7D1F5EAAB300C322C3 /* ServerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4147CE7C1F5EAAB300C322C3 /* ServerCell.swift */; }; 4147CE7F1F5EB27B00C322C3 /* AddServerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4147CE7E1F5EB27B00C322C3 /* AddServerCell.swift */; }; - 4147CE811F5EE03300C322C3 /* ServerManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4147CE801F5EE03300C322C3 /* ServerManagerSpec.swift */; }; 41494B921D63C6280004F369 /* UIImageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41494B911D63C6280004F369 /* UIImageExtension.swift */; }; 41499C8F1F2A116900790EA7 /* ServerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41499C8E1F2A116900790EA7 /* ServerManager.swift */; }; 41499C911F2A1A7200790EA7 /* TimestampCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41499C901F2A1A7200790EA7 /* TimestampCoordinator.swift */; }; @@ -254,13 +219,8 @@ 414D99161EA0E7CB0020F7E9 /* SignupTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414D99151EA0E7CB0020F7E9 /* SignupTableViewController.swift */; }; 414E8A8D20A5DD2200615CE6 /* RoomRolesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414E8A8C20A5DD2200615CE6 /* RoomRolesRequest.swift */; }; 414EE62921CD1F98003693D2 /* JitsiViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414EE62821CD1F98003693D2 /* JitsiViewController.swift */; }; - 414EE63021CD2912003693D2 /* JitsiMeet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 414EE62B21CD1FEB003693D2 /* JitsiMeet.framework */; }; - 414EE63121CD2912003693D2 /* JitsiMeet.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 414EE62B21CD1FEB003693D2 /* JitsiMeet.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 414EE63321CD2915003693D2 /* WebRTC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 414EE62D21CD1FEB003693D2 /* WebRTC.framework */; }; - 414EE63421CD2915003693D2 /* WebRTC.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 414EE62D21CD1FEB003693D2 /* WebRTC.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 414EFF921E54FE69004F001F /* AuthExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414EFF911E54FE69004F001F /* AuthExtensions.swift */; }; 415066881EB8B541003AEA1C /* MessageTextCacheManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415066871EB8B541003AEA1C /* MessageTextCacheManager.swift */; }; - 4151807C1EAE249F0000A039 /* ChatMessageTextViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151807A1EAE249F0000A039 /* ChatMessageTextViewModelSpec.swift */; }; 4151B44E1E2CF19A00F8AA1B /* UserModelHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151B44D1E2CF19A00F8AA1B /* UserModelHandler.swift */; }; 4151B4541E2D1A9E00F8AA1B /* SubscriptionModelHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151B4531E2D1A9E00F8AA1B /* SubscriptionModelHandler.swift */; }; 4151B4561E2D1AFF00F8AA1B /* SubscriptionModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151B4551E2D1AFF00F8AA1B /* SubscriptionModelMapping.swift */; }; @@ -268,12 +228,9 @@ 4151B45A1E2D1DD400F8AA1B /* AttachmentModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151B4591E2D1DD400F8AA1B /* AttachmentModelMapping.swift */; }; 4151B45C1E2D1E5800F8AA1B /* AuthSettingsModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151B45B1E2D1E5800F8AA1B /* AuthSettingsModelMapping.swift */; }; 4151B45E1E2D32EA00F8AA1B /* MessageURLModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151B45D1E2D32EA00F8AA1B /* MessageURLModelMapping.swift */; }; - 41534EE2208E4411009C5A17 /* AnalyticsCoordinatorSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41534EE1208E4411009C5A17 /* AnalyticsCoordinatorSpec.swift */; }; 4153E80520504BE700FBC26B /* ReusableViewText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4153E80420504BE700FBC26B /* ReusableViewText.swift */; }; 41552F661D30308C0081438D /* AuthManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41552F651D30308C0081438D /* AuthManager.swift */; }; - 41552F681D3035D80081438D /* SocketManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41552F671D3035D80081438D /* SocketManagerSpec.swift */; }; 4156250820BEDCD100D20576 /* ServersListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4156250720BEDCD100D20576 /* ServersListViewModel.swift */; }; - 4156250B20BEDFA500D20576 /* ServersListViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4156250A20BEDFA500D20576 /* ServersListViewModelSpec.swift */; }; 4159720C1D3DB854002258F4 /* Email.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4159720B1D3DB854002258F4 /* Email.swift */; }; 4159720E1D3DB882002258F4 /* Mention.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4159720D1D3DB882002258F4 /* Mention.swift */; }; 41597DCE1E8D3C5B00638E3E /* TwoFactorAuthTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41597DCD1E8D3C5B00638E3E /* TwoFactorAuthTableViewController.swift */; }; @@ -281,24 +238,11 @@ 415B10F122660461007B684B /* ThreadMessagesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415B10F022660461007B684B /* ThreadMessagesRequest.swift */; }; 415B10F322660486007B684B /* ThreadFollowRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415B10F222660486007B684B /* ThreadFollowRequest.swift */; }; 415B10F5226604AB007B684B /* ThreadUnfollowRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415B10F4226604AB007B684B /* ThreadUnfollowRequest.swift */; }; - 415B10F82266051D007B684B /* ThreadsListRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415B10F72266051D007B684B /* ThreadsListRequestSpec.swift */; }; - 415B10FA22660B24007B684B /* ThreadMessagesRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415B10F922660B24007B684B /* ThreadMessagesRequestSpec.swift */; }; - 415B10FC22660CFA007B684B /* ThreadFollowRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415B10FB22660CFA007B684B /* ThreadFollowRequestSpec.swift */; }; - 415B10FE22660F31007B684B /* ThreadUnfollowRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415B10FD22660F31007B684B /* ThreadUnfollowRequestSpec.swift */; }; 415DC7F61F67F5D30039FB4F /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415DC7F51F67F5D30039FB4F /* NetworkManager.swift */; }; 416133321D46CA4E00E09DA2 /* ChatMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416133311D46CA4E00E09DA2 /* ChatMessageCell.swift */; }; 416133341D46CA7200E09DA2 /* ChatMessageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 416133331D46CA7200E09DA2 /* ChatMessageCell.xib */; }; - 416133381D46DB1D00E09DA2 /* BaseModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416133371D46DB1D00E09DA2 /* BaseModelSpec.swift */; }; - 4161333A1D46E0A200E09DA2 /* AuthSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416133391D46E0A200E09DA2 /* AuthSpec.swift */; }; - 4161333C1D46E32F00E09DA2 /* UserSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4161333B1D46E32F00E09DA2 /* UserSpec.swift */; }; - 4161333E1D46E3AB00E09DA2 /* SubscriptionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4161333D1D46E3AB00E09DA2 /* SubscriptionSpec.swift */; }; - 416133401D46E6A800E09DA2 /* MessageSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4161333F1D46E6A800E09DA2 /* MessageSpec.swift */; }; - 416296F91F41B42B00BCCEDD /* UploadHelperSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416296F81F41B42B00BCCEDD /* UploadHelperSpec.swift */; }; - 416296FA1F41B7F400BCCEDD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 41DF76E91D2C50710028DBF8 /* Assets.xcassets */; }; - 416296FC1F41D42800BCCEDD /* DownloadManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416296FB1F41D42800BCCEDD /* DownloadManagerSpec.swift */; }; 4162E1531D651A8800AAAE49 /* UserManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4162E1521D651A8800AAAE49 /* UserManager.swift */; }; 4162E1551D654A7400AAAE49 /* SocketHandlers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4162E1541D654A7400AAAE49 /* SocketHandlers.swift */; }; - 4171ABA51E7C056E009FC3F0 /* AvatarViewSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4171ABA41E7C056E009FC3F0 /* AvatarViewSpec.swift */; }; 4174CB0D1D2D994A0086DAC8 /* ConnectServerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4174CB0C1D2D994A0086DAC8 /* ConnectServerViewController.swift */; }; 4174CB0F1D2D995F0086DAC8 /* Auth.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4174CB0E1D2D995F0086DAC8 /* Auth.storyboard */; }; 4174CB131D2D99960086DAC8 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4174CB121D2D99960086DAC8 /* BaseViewController.swift */; }; @@ -307,21 +251,15 @@ 4174CB1F1D2DB3350086DAC8 /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4174CB1E1D2DB3350086DAC8 /* StringExtensions.swift */; }; 41778EB920ED4C2C007F72F9 /* SubscriptionCellCondensed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41778EB820ED4C2C007F72F9 /* SubscriptionCellCondensed.swift */; }; 41798BC8226F549B00F446C6 /* MessagesListProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41798BC7226F549B00F446C6 /* MessagesListProtocol.swift */; }; - 417A70031D47918200FF46EE /* ResponseMessageSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 417A70021D47918200FF46EE /* ResponseMessageSpec.swift */; }; 41833F4E1DEF16B600E54655 /* Keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 41833F4D1DEF16B600E54655 /* Keys.plist */; }; 41852E891F92BBEC00D1C499 /* MessagesViewControllerReplying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41852E881F92BBEC00D1C499 /* MessagesViewControllerReplying.swift */; }; 41865AF21FC8B23400A5E48F /* WebViewControllerEmbedded.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41865AF11FC8B23400A5E48F /* WebViewControllerEmbedded.swift */; }; 41865AF41FC8B25100A5E48F /* WebViewControllerEmbedded.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41865AF31FC8B25100A5E48F /* WebViewControllerEmbedded.xib */; }; 418858E72215D162009014F2 /* SecurityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418858E62215D162009014F2 /* SecurityManager.swift */; }; 418A8FA6224114100048A9B6 /* IntExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418A8FA5224114100048A9B6 /* IntExtensions.swift */; }; - 418BBC4D20D02E0100EC09F5 /* SocketManagerConnectionHandlerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418BBC4C20D02E0100EC09F5 /* SocketManagerConnectionHandlerSpec.swift */; }; - 418BBC4F20D02FC200EC09F5 /* SubscriptionsTitleViewSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418BBC4E20D02FC200EC09F5 /* SubscriptionsTitleViewSpec.swift */; }; - 418BBC5120D0309400EC09F5 /* ChatTitleViewSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418BBC5020D0309400EC09F5 /* ChatTitleViewSpec.swift */; }; 418C4DC61DC4C07800ABED4C /* SubscriptionSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418C4DC51DC4C07800ABED4C /* SubscriptionSectionView.swift */; }; 418C4DC81DC4C08800ABED4C /* SubscriptionSectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 418C4DC71DC4C08800ABED4C /* SubscriptionSectionView.xib */; }; - 418C74411FA3627F00499577 /* PickerViewDelegateSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418C74401FA3627F00499577 /* PickerViewDelegateSpec.swift */; }; 418C74431FA3813F00499577 /* CompoundPickerViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418C74421FA3813F00499577 /* CompoundPickerViewDelegate.swift */; }; - 418C74451FA3820F00499577 /* CompoundPickerViewDelegateSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418C74441FA3820F00499577 /* CompoundPickerViewDelegateSpec.swift */; }; 41900C271D9FE35400308EF4 /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41900C261D9FE35400308EF4 /* Attachment.swift */; }; 4190511E2281B5AF009BC573 /* SubscriptionsDirectoryHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4190511D2281B5AF009BC573 /* SubscriptionsDirectoryHeaderView.swift */; }; 4190693B21D0D8C600FE2573 /* Jitsi.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4190693A21D0D8C600FE2573 /* Jitsi.storyboard */; }; @@ -335,7 +273,6 @@ 4192054E1D52F5F1004EEC5F /* UIColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192054D1D52F5F1004EEC5F /* UIColorExtension.swift */; }; 4199A9891DABCC570035F820 /* Emojione.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4199A9881DABCC570035F820 /* Emojione.swift */; }; 419D78831FBDB7E0005FC7A2 /* InfoRequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419D78821FBDB7E0005FC7A2 /* InfoRequestHandler.swift */; }; - 419D78871FBDCF6C005FC7A2 /* InfoRequestHandlerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419D78861FBDCF6C005FC7A2 /* InfoRequestHandlerSpec.swift */; }; 419EB5AF215E3C0A00E591BF /* AudioMessageChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419EB5AE215E3C0A00E591BF /* AudioMessageChatItem.swift */; }; 419EB5B1215E3C1400E591BF /* AudioCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419EB5B0215E3C1400E591BF /* AudioCell.swift */; }; 419EB5B3215E3C2200E591BF /* AudioCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 419EB5B2215E3C2200E591BF /* AudioCell.xib */; }; @@ -355,7 +292,6 @@ 41A897F8223FB55F00D2DB22 /* DirectoryChannelCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41A897F7223FB55F00D2DB22 /* DirectoryChannelCell.xib */; }; 41A897FA223FB56C00D2DB22 /* DirectoryUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41A897F9223FB56C00D2DB22 /* DirectoryUserCell.xib */; }; 41A9B708215B0D0700CEB218 /* MessagesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A9B707215B0D0700CEB218 /* MessagesViewModel.swift */; }; - 41ADDD4B1E9E787E0007A458 /* LoaderViewSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41ADDD4A1E9E787E0007A458 /* LoaderViewSpec.swift */; }; 41AE8B372264AF6C0031A99B /* MessageMainThreadChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41AE8B362264AF6C0031A99B /* MessageMainThreadChatItem.swift */; }; 41AE8B3A2264B5900031A99B /* MessageMainThreadCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41AE8B382264B5900031A99B /* MessageMainThreadCell.swift */; }; 41AE8B3B2264B5900031A99B /* MessageMainThreadCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41AE8B392264B5900031A99B /* MessageMainThreadCell.xib */; }; @@ -364,25 +300,19 @@ 41B554C51FBF0C71000510B7 /* UIWindowExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B554C41FBF0C71000510B7 /* UIWindowExtensions.swift */; }; 41B554C71FBF0F9D000510B7 /* WindowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B554C61FBF0F9D000510B7 /* WindowManager.swift */; }; 41B96362207E48260068F1A6 /* MessageTextValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B96361207E48260068F1A6 /* MessageTextValidator.swift */; }; - 41B96365207E492C0068F1A6 /* MessageTextValidatorSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B96364207E492C0068F1A6 /* MessageTextValidatorSpec.swift */; }; - 41BA89241D303D8B00CBF526 /* AuthManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BA89231D303D8B00CBF526 /* AuthManagerSpec.swift */; }; 41BAE3E71D71B26C00C2445A /* URLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3E61D71B26C00C2445A /* URLExtension.swift */; }; - 41BAE3E91D71C15A00C2445A /* URLExtensionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3E81D71C15A00C2445A /* URLExtensionSpec.swift */; }; 41BD37E11E290F2900CBC4C2 /* UserModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BD37E01E290F2900CBC4C2 /* UserModelMapping.swift */; }; 41BF4D6C215B47AD00588B35 /* MessagesSubscriptionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BF4D6B215B47AD00588B35 /* MessagesSubscriptionViewModel.swift */; }; 41BF4D6E215B4CA100588B35 /* DateSeparatorChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BF4D6D215B4CA100588B35 /* DateSeparatorChatItem.swift */; }; 41BF4D70215B4CBD00588B35 /* DateSeparatorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BF4D6F215B4CBD00588B35 /* DateSeparatorCell.swift */; }; 41BF4D72215B4CC800588B35 /* DateSeparatorCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41BF4D71215B4CC800588B35 /* DateSeparatorCell.xib */; }; - 41BFA0A72146D0C1008B9611 /* MessageManagerSystemMessageSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BFA0A62146D0C1008B9611 /* MessageManagerSystemMessageSpec.swift */; }; 41C275DF1D848005003C88CF /* AvatarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C275DE1D848005003C88CF /* AvatarView.swift */; }; 41C56D59219C7AC80087115F /* AuthSettingsManagerPersistencyExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C56D58219C7AC80087115F /* AuthSettingsManagerPersistencyExtension.swift */; }; - 41C56D5A219C7AD40087115F /* AuthSettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D76E41F39F05A00B0A8DF /* AuthSettingsManager.swift */; }; 41C955FA20A3931C00FC8314 /* ChatMessageActionButtonsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41F3705320A3917D00C5449E /* ChatMessageActionButtonsView.xib */; }; 41C955FC20A3937A00FC8314 /* ChatMessageActionButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C955FB20A3937A00FC8314 /* ChatMessageActionButtonsView.swift */; }; 41CA1C81226DE38600295AA8 /* ThreadsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41CA1C80226DE38600295AA8 /* ThreadsViewController.swift */; }; 41CA1C83226DE38F00295AA8 /* ThreadsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41CA1C82226DE38F00295AA8 /* ThreadsViewModel.swift */; }; 41CD52D520BEFA3B00336892 /* New Room.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 41CD52D420BEFA3B00336892 /* New Room.storyboard */; }; - 41D0DA5820991BAE008649E7 /* UploadMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CF61FD9AA1B00F5ECF9 /* UploadMessageRequest.swift */; }; 41D1610B2254E0B300B42274 /* MessageDiscussionChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D1610A2254E0B300B42274 /* MessageDiscussionChatItem.swift */; }; 41D1610E2254E1D300B42274 /* MessageDiscussionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41D1610C2254E1D300B42274 /* MessageDiscussionCell.xib */; }; 41D1610F2254E1D300B42274 /* MessageDiscussionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D1610D2254E1D300B42274 /* MessageDiscussionCell.swift */; }; @@ -390,16 +320,11 @@ 41D3668720C0323100970B99 /* SubscriptionsSortingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D3668420C0323100970B99 /* SubscriptionsSortingView.swift */; }; 41D3668820C0323100970B99 /* SubscriptionsSortingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D3668520C0323100970B99 /* SubscriptionsSortingViewModel.swift */; }; 41D51B0620A62DD60073E8E7 /* Role.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D51B0520A62DD60073E8E7 /* Role.swift */; }; - 41D51B0720A62DD60073E8E7 /* Role.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D51B0520A62DD60073E8E7 /* Role.swift */; }; 41D8EC941F78151A00764B36 /* ChannelActionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D8EC931F78151A00764B36 /* ChannelActionsViewController.swift */; }; 41D945FF225E1EEC00AE8FD8 /* GetMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D945FE225E1EEC00AE8FD8 /* GetMessageRequest.swift */; }; - 41D94601225E262D00AE8FD8 /* GetMessageRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D94600225E262D00AE8FD8 /* GetMessageRequestSpec.swift */; }; 41DAE93C1D318E280098E068 /* SubscriptionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DAE93B1D318E280098E068 /* SubscriptionManager.swift */; }; 41DAE93E1D318F350098E068 /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DAE93D1D318F350098E068 /* Subscription.swift */; }; 41DC7A1B1D38454500896FC0 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DC7A1A1D38454500896FC0 /* Message.swift */; }; - 41DC7A1F1D3865FE00896FC0 /* MessageManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DC7A1E1D3865FE00896FC0 /* MessageManagerSpec.swift */; }; - 41DC7A221D386B4700896FC0 /* StringExtensionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DC7A211D386B4700896FC0 /* StringExtensionSpec.swift */; }; - 41DC7A241D386CA800896FC0 /* DateExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DC7A231D386CA800896FC0 /* DateExtensionsSpec.swift */; }; 41DCB8261DDC828200E1197F /* SubscriptionSearchMoreView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41DCB8251DDC828200E1197F /* SubscriptionSearchMoreView.xib */; }; 41DCB8281DDC82E000E1197F /* SubscriptionSearchMoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DCB8271DDC82E000E1197F /* SubscriptionSearchMoreView.swift */; }; 41DD613A203D9E6600B02D8A /* UISplitViewControllerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DD6139203D9E6600B02D8A /* UISplitViewControllerExtensions.swift */; }; @@ -409,16 +334,12 @@ 41DF76E31D2C50710028DBF8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DF76E21D2C50710028DBF8 /* AppDelegate.swift */; }; 41DF76EA1D2C50710028DBF8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 41DF76E91D2C50710028DBF8 /* Assets.xcassets */; }; 41DF76ED1D2C50720028DBF8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 41DF76EB1D2C50720028DBF8 /* LaunchScreen.storyboard */; }; - 41DF77031D2C50720028DBF8 /* RocketChatUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DF77021D2C50720028DBF8 /* RocketChatUITests.swift */; }; 41E2F9FF1D414DE800238DFD /* Chat.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 41E2F9FE1D414DE800238DFD /* Chat.storyboard */; }; 41E2FA011D414EA100238DFD /* Subscriptions.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 41E2FA001D414EA100238DFD /* Subscriptions.storyboard */; }; 41E2FA051D414F0400238DFD /* SubscriptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E2FA041D414F0400238DFD /* SubscriptionsViewController.swift */; }; - 41E423002044216000543877 /* UIColorExtensionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E422FF2044216000543877 /* UIColorExtensionSpec.swift */; }; 41E53A171E546F5500C3FBB3 /* UINibExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E53A161E546F5500C3FBB3 /* UINibExtensions.swift */; }; - 41E96C3120B88A0000ACBA92 /* RoomRolesRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E96C3020B88A0000ACBA92 /* RoomRolesRequestSpec.swift */; }; 41E991D41D343A9F00BDDCA8 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E991D31D343A9F00BDDCA8 /* DateExtension.swift */; }; 41E9BD0D208EA4040084D4D8 /* AuthInternalExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E9BD0C208EA4040084D4D8 /* AuthInternalExtensions.swift */; }; - 41E9BD0F208EA8C40084D4D8 /* SubscriptionQueriesSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E9BD0E208EA8C40084D4D8 /* SubscriptionQueriesSpec.swift */; }; 41E9F025215D4C6B00B2C9E7 /* TestingCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E9F024215D4C6B00B2C9E7 /* TestingCoordinator.swift */; }; 41EB22331E5E474200AA3AE7 /* UploadVideoCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41EB22321E5E474200AA3AE7 /* UploadVideoCompression.swift */; }; 41EB22361E5F056600AA3AE7 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 41EB22381E5F056600AA3AE7 /* Localizable.strings */; }; @@ -429,10 +350,7 @@ 41F47D702267605500B464CF /* MessageReplyThreadChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F47D6F2267605500B464CF /* MessageReplyThreadChatItem.swift */; }; 41F47D732267653700B464CF /* ThreadReplyCollapsedCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41F47D712267653600B464CF /* ThreadReplyCollapsedCell.xib */; }; 41F47D742267653700B464CF /* ThreadReplyCollapsedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F47D722267653700B464CF /* ThreadReplyCollapsedCell.swift */; }; - 41F8487E1FA38B0A00C9AE84 /* PreferencesViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F8487D1FA38B0A00C9AE84 /* PreferencesViewModelSpec.swift */; }; 41FB7138215B0FD6002B5187 /* MessagesSizingManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41FB7137215B0FD6002B5187 /* MessagesSizingManager.swift */; }; - 41FB713A215B0FFA002B5187 /* MessagesSizingViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41FB7139215B0FFA002B5187 /* MessagesSizingViewModelSpec.swift */; }; - 41FB713C215B3841002B5187 /* MessagesViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41FB713B215B3841002B5187 /* MessagesViewModelSpec.swift */; }; 41FBF4E720BC320E0080D00D /* ServersListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41FBF4E620BC320E0080D00D /* ServersListView.swift */; }; 41FBF4E920BC321C0080D00D /* ServersListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41FBF4E820BC321C0080D00D /* ServersListView.xib */; }; 41FBF4EB20BD8C650080D00D /* ServerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41FBF4EA20BD8C650080D00D /* ServerCell.xib */; }; @@ -446,28 +364,19 @@ 41FC9E0E209B44CD00FED485 /* ChatLoaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41CABFF71F5047D600E0B289 /* ChatLoaderCell.xib */; }; 41FC9E0F209B469C00FED485 /* AutocompleteCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41AC3CD21DCC9873002DC39A /* AutocompleteCell.xib */; }; 41FC9E10209B49B200FED485 /* ChatDirectMessageHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41D894031F4EF65700E284D2 /* ChatDirectMessageHeaderCell.xib */; }; - 41FE55531F6038D60071E97A /* DatabaseManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41FE55521F6038D60071E97A /* DatabaseManagerSpec.swift */; }; 597ECBA21E3708A50041C5C5 /* DataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 597ECBA11E3708A50041C5C5 /* DataExtension.swift */; }; 597ECBA41E3708B10041C5C5 /* PushManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 597ECBA31E3708B10041C5C5 /* PushManager.swift */; }; - 68D186DF1ED9714F0030EE8C /* MessageURLSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D186DE1ED9714F0030EE8C /* MessageURLSpec.swift */; }; 7758A7641F8FA44400FAA244 /* PickerViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7758A7631F8FA44400FAA244 /* PickerViewDelegate.swift */; }; 7798B4151F852B720074B2F4 /* SelectField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7798B4141F852B720074B2F4 /* SelectField.swift */; }; 7798B4191F852D670074B2F4 /* CustomField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7798B4181F852D670074B2F4 /* CustomField.swift */; }; 77BA81511F87C4CB00F295F4 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77BA81501F87C4CB00F295F4 /* TextField.swift */; }; - 77C261251F97445300724A1F /* AuthSettingsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77C261241F97445300724A1F /* AuthSettingsSpec.swift */; }; - 77C261271F97445F00724A1F /* DictionaryExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77C261261F97445F00724A1F /* DictionaryExtensionsSpec.swift */; }; - 77C2612C1F97453600724A1F /* CustomFieldsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77C261291F97453600724A1F /* CustomFieldsSpec.swift */; }; - 77C2612D1F97453600724A1F /* SelectFieldSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77C2612A1F97453600724A1F /* SelectFieldSpec.swift */; }; - 77C2612E1F97453600724A1F /* TextFieldSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77C2612B1F97453600724A1F /* TextFieldSpec.swift */; }; 77CCB6BE1F8D0597004BBF67 /* DictionaryExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CCB6BD1F8D0597004BBF67 /* DictionaryExtensions.swift */; }; 7DE1B07114BBD1D46E9CC71B /* Pods_Rocket_Chat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F5191CD6C53AEA006C82524 /* Pods_Rocket_Chat.framework */; }; 80054CF11FD9505A00F5ECF9 /* SendMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CF01FD9505A00F5ECF9 /* SendMessageRequest.swift */; }; 80054CF31FD951B100F5ECF9 /* MessagesClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CF21FD951B100F5ECF9 /* MessagesClient.swift */; }; - 80054CF51FD96AFE00F5ECF9 /* MessagesClientSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CF41FD96AFE00F5ECF9 /* MessagesClientSpec.swift */; }; 80054CFC1FDAFD7700F5ECF9 /* PushTokenDeleteRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CFB1FDAFD7700F5ECF9 /* PushTokenDeleteRequest.swift */; }; 80054CFE1FDAFF5200F5ECF9 /* PushClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CFD1FDAFF5200F5ECF9 /* PushClient.swift */; }; 80054D001FDB1FA200F5ECF9 /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CFF1FDB1FA200F5ECF9 /* Alert.swift */; }; - 800640F72049BA25006D990F /* SEScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800640F62049BA25006D990F /* SEScene.swift */; }; 800E22841F8500A200DA84F1 /* MessagesListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800E22831F8500A200DA84F1 /* MessagesListViewController.swift */; }; 800E22861F8507E400DA84F1 /* RoomMessagesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800E22851F8507E400DA84F1 /* RoomMessagesRequest.swift */; }; 800F38ED2019492D0005CB78 /* DeepLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800F38EC2019492D0005CB78 /* DeepLink.swift */; }; @@ -477,7 +386,6 @@ 800FCD501F728EC800D9A692 /* MemberCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800FCD491F728E6A00D9A692 /* MemberCell.swift */; }; 800FCD511F728EC800D9A692 /* MemberCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 800FCD4A1F728E6A00D9A692 /* MemberCell.xib */; }; 80113DF81F98330C0048F2C2 /* OAuthViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80113DF71F98330B0048F2C2 /* OAuthViewController.swift */; }; - 8013F8431FD02D8F00EE1A4E /* ChatCollectionViewFlowLayoutSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8421FD02D8F00EE1A4E /* ChatCollectionViewFlowLayoutSpec.swift */; }; 8013F8651FD5E13600EE1A4E /* APIExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8641FD5E13600EE1A4E /* APIExtensions.swift */; }; 8013F8671FD6B4F400EE1A4E /* Command.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8661FD6B4F400EE1A4E /* Command.swift */; }; 8013F86B1FD6B59A00EE1A4E /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8681FD6B59900EE1A4E /* Version.swift */; }; @@ -486,16 +394,9 @@ 8013F8711FD6B5B000EE1A4E /* InfoClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F86F1FD6B5B000EE1A4E /* InfoClient.swift */; }; 8013F8721FD6B5B000EE1A4E /* CommandsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8701FD6B5B000EE1A4E /* CommandsClient.swift */; }; 8013F8761FD6B5E000EE1A4E /* VersionMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8751FD6B5E000EE1A4E /* VersionMiddleware.swift */; }; - 8013F8791FD6B63200EE1A4E /* VersionMiddlewareSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8781FD6B63200EE1A4E /* VersionMiddlewareSpec.swift */; }; - 8013F87C1FD6B64500EE1A4E /* MockAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F87A1FD6B64400EE1A4E /* MockAPI.swift */; }; - 8013F87D1FD6B64500EE1A4E /* VersionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F87B1FD6B64400EE1A4E /* VersionSpec.swift */; }; - 8013F8811FD6B6C600EE1A4E /* CommandsClientSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F87F1FD6B6C600EE1A4E /* CommandsClientSpec.swift */; }; - 8013F8821FD6B6C600EE1A4E /* InfoClientSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8801FD6B6C600EE1A4E /* InfoClientSpec.swift */; }; 8013F8861FD6B76600EE1A4E /* CommandsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8841FD6B76500EE1A4E /* CommandsRequest.swift */; }; 8013F8871FD6B76600EE1A4E /* RunCommandRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8851FD6B76500EE1A4E /* RunCommandRequest.swift */; }; - 8013F88C1FD6B7D400EE1A4E /* RunCommandRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F88B1FD6B7D400EE1A4E /* RunCommandRequestSpec.swift */; }; 8013F88E1FD6B83C00EE1A4E /* CommandModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F88D1FD6B83C00EE1A4E /* CommandModelMapping.swift */; }; - 8018B5701FBE070000C3CC25 /* PushManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8018B56F1FBE070000C3CC25 /* PushManagerSpec.swift */; }; 801B0EF42114B2A300C0972E /* ShortcutHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 801B0EF32114B2A300C0972E /* ShortcutHelpers.swift */; }; 801B0EF7211895E900C0972E /* MainSplitViewControllerShortcuts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 801B0EF6211895E900C0972E /* MainSplitViewControllerShortcuts.swift */; }; 801DF8151FD7172500302CC8 /* SubscriptionUserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 801DF8141FD7172500302CC8 /* SubscriptionUserView.swift */; }; @@ -505,20 +406,13 @@ 8020CCF01FEAB4A7003424F4 /* EmojiPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8020CCEF1FEAB4A7003424F4 /* EmojiPicker.swift */; }; 8020CCF21FEAB4C3003424F4 /* EmojiPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8020CCF11FEAB4C3003424F4 /* EmojiPicker.xib */; }; 8020CCF51FEAD8C9003424F4 /* EmojiPickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8020CCF41FEAD8C9003424F4 /* EmojiPickerController.swift */; }; - 80213C0B1FDFE35C00809E14 /* UploadMessageRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80213C0A1FDFE35C00809E14 /* UploadMessageRequestSpec.swift */; }; 80213C0E1FE0639E00809E14 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80213C0D1FE0639E00809E14 /* HTTPMethod.swift */; }; 80235D1B1F74070100A56CA5 /* RoomMembersRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80235D1A1F74070100A56CA5 /* RoomMembersRequest.swift */; }; - 80235D221F7442F700A56CA5 /* RoomMembersRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80235D211F7442F700A56CA5 /* RoomMembersRequestSpec.swift */; }; 80235D241F7466FF00A56CA5 /* LoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80235D231F7466FE00A56CA5 /* LoaderTableViewCell.swift */; }; 80235D261F74672D00A56CA5 /* LoaderTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80235D251F74672D00A56CA5 /* LoaderTableViewCell.xib */; }; - 80247B3F1FE8582700878833 /* MessageReactionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80247B3E1FE8582700878833 /* MessageReactionSpec.swift */; }; 802498EE1F7A8380005477EC /* MeRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802498ED1F7A8380005477EC /* MeRequest.swift */; }; - 802498F11F7A9BB4005477EC /* MeRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802498F01F7A9BB4005477EC /* MeRequestSpec.swift */; }; 802498F31F7ACD76005477EC /* ChatMessageAudioView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 802498F21F7ACD76005477EC /* ChatMessageAudioView.xib */; }; 802498F51F7ACDB7005477EC /* ChatMessageAudioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802498F41F7ACDB7005477EC /* ChatMessageAudioView.swift */; }; - 8029B2F22059B6F60067157B /* VideoInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8029B2F12059B6F60067157B /* VideoInfo.swift */; }; - 8029B2F42059C1840067157B /* UIAlertController+StatusReport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8029B2F32059C1840067157B /* UIAlertController+StatusReport.swift */; }; - 802A4E112049C7340072CD23 /* SENavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802A4E102049C7340072CD23 /* SENavigationController.swift */; }; 802A4E24204D73100072CD23 /* AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802A4E23204D730F0072CD23 /* AppGroup.swift */; }; 802C8959216314CF00C6B9B2 /* MessagesViewControllerUploading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802C8958216314CF00C6B9B2 /* MessagesViewControllerUploading.swift */; }; 802C895C21639B8900C6B9B2 /* MessagesViewControllerBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802C895B21639B8900C6B9B2 /* MessagesViewControllerBanner.swift */; }; @@ -529,60 +423,35 @@ 80307E411FD75DC0006AD9EF /* VoiceOver.strings in Resources */ = {isa = PBXBuildFile; fileRef = 80307E431FD75DC0006AD9EF /* VoiceOver.strings */; }; 8032E3E820362EF5009D33CE /* UpdateMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8032E3E720362EF5009D33CE /* UpdateMessageRequest.swift */; }; 8039441120AF1334002F317A /* RoomKickRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039441020AF1334002F317A /* RoomKickRequest.swift */; }; - 8039441320AF17F1002F317A /* RoomKickRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039441220AF17F1002F317A /* RoomKickRequestSpec.swift */; }; 8039441820AF620C002F317A /* ResourceSharedProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039441720AF620C002F317A /* ResourceSharedProperties.swift */; }; 8039442520B330B2002F317A /* RoomInviteRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039442420B330B2002F317A /* RoomInviteRequest.swift */; }; - 8039442820B332E8002F317A /* RoomInviteRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039442720B332E8002F317A /* RoomInviteRequestSpec.swift */; }; 8039442C20B33F63002F317A /* SubscriptionCanInviteUsers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039442B20B33F63002F317A /* SubscriptionCanInviteUsers.swift */; }; 8039442E20B342BB002F317A /* AddUsersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039442D20B342BB002F317A /* AddUsersViewController.swift */; }; 8039443220B3988F002F317A /* PagedResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8039443120B3988F002F317A /* PagedResource.swift */; }; - 803D866821062D7E00B1B697 /* SubscriptionsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E32820A1CAAB0044F407 /* SubscriptionsRequest.swift */; }; - 803D866C21062F7400B1B697 /* SEStateAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803D866B21062F7400B1B697 /* SEStateAPI.swift */; }; - 803D866D2106307C00B1B697 /* SubscriptionModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151B4551E2D1AFF00F8AA1B /* SubscriptionModelMapping.swift */; }; - 803D866E2106309200B1B697 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E991D31D343A9F00BDDCA8 /* DateExtension.swift */; }; - 803D866F210630A800B1B697 /* ServerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41499C8E1F2A116900790EA7 /* ServerManager.swift */; }; - 803D8670210631D700B1B697 /* ModelMappeable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4112DC571FFFB9B1005995E1 /* ModelMappeable.swift */; }; - 803D86762106333900B1B697 /* SESubscriptionModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803D86742106333500B1B697 /* SESubscriptionModelMapping.swift */; }; 8041C0402028C7A1007E21FA /* ReactorListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8041C03F2028C7A1007E21FA /* ReactorListViewController.swift */; }; 8041C0422028C7EF007E21FA /* ReactorListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8041C0412028C7EF007E21FA /* ReactorListView.swift */; }; 8041C0442028C828007E21FA /* ReactorListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8041C0432028C828007E21FA /* ReactorListView.xib */; }; 8041C04620290A48007E21FA /* RCEmojiKitLocalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8041C04520290A48007E21FA /* RCEmojiKitLocalizable.swift */; }; 8041C048202BA234007E21FA /* RCEmojiKit.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8041C047202BA233007E21FA /* RCEmojiKit.xcassets */; }; - 804273D6204D7F38006DF420 /* AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802A4E23204D730F0072CD23 /* AppGroup.swift */; }; - 804273DD204EBD51006DF420 /* API.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1D535EB1F7081FA006625D2 /* API.swift */; }; - 804273DE204EBD51006DF420 /* APIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F86A1FD6B59A00EE1A4E /* APIClient.swift */; }; - 804273DF204EBD51006DF420 /* APIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8691FD6B59900EE1A4E /* APIError.swift */; }; - 804273E0204EBD51006DF420 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8681FD6B59900EE1A4E /* Version.swift */; }; - 804273E1204EBD51006DF420 /* APIRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1D535ED1F708628006625D2 /* APIRequest.swift */; }; - 804273E2204EBD51006DF420 /* APIResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15C83851F70991F001AB155 /* APIResponse.swift */; }; 8045F49820D0543900AA0F3C /* ReadReceiptsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8045F49720D0543900AA0F3C /* ReadReceiptsRequest.swift */; }; 8045F49B20D0599800AA0F3C /* ReadReceiptListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8045F49A20D0599800AA0F3C /* ReadReceiptListView.swift */; }; 8045F49D20D059A600AA0F3C /* ReadReceiptListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8045F49C20D059A600AA0F3C /* ReadReceiptListView.xib */; }; 8045F49F20D05A1700AA0F3C /* ReadReceiptListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8045F49E20D05A1700AA0F3C /* ReadReceiptListViewController.swift */; }; - 8045F4A120D14D1C00AA0F3C /* ReadReceiptsRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8045F4A020D14D1C00AA0F3C /* ReadReceiptsRequestSpec.swift */; }; 8045F4A420D30B8300AA0F3C /* UISearchBarTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8045F4A320D30B8300AA0F3C /* UISearchBarTextField.swift */; }; 8045F4AB20D3115900AA0F3C /* UITextFieldClearButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8045F4AA20D3115900AA0F3C /* UITextFieldClearButton.swift */; }; 8045F4AD20D313C100AA0F3C /* UITextFieldActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8045F4AC20D313C100AA0F3C /* UITextFieldActivityIndicator.swift */; }; 80461ACB2190FF06003F1F32 /* UserHintAvatarViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80461ACA2190FF06003F1F32 /* UserHintAvatarViewCell.swift */; }; 80461ACD2191D0D1003F1F32 /* TextHintEmojiViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80461ACC2191D0D1003F1F32 /* TextHintEmojiViewCell.swift */; }; 80461ACF2191D24D003F1F32 /* TextHintLabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80461ACE2191D24D003F1F32 /* TextHintLabelCell.swift */; }; - 804C0D9A232861F40021A880 /* CustomEmojiRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804C0D99232861F40021A880 /* CustomEmojiRequest.swift */; }; 8052F75720B4ADC400B3B0CF /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8052F75620B4ADC400B3B0CF /* Debounce.swift */; }; 8052F75920B7522100B3B0CF /* UIAlertActionImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8052F75820B7522100B3B0CF /* UIAlertActionImage.swift */; }; 8052F75C20B7529800B3B0CF /* UIAlertActionTitleTextAlignment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8052F75B20B7529800B3B0CF /* UIAlertActionTitleTextAlignment.swift */; }; - 805C87D92052AA1900AD0EB0 /* SEComposeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805C87D82052AA1900AD0EB0 /* SEComposeViewController.swift */; }; - 805C87DD2052AE1D00AD0EB0 /* SEXibInitializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805C87DC2052AE1D00AD0EB0 /* SEXibInitializable.swift */; }; 805DEC351FFC03380033151B /* CustomEmojiManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805DEC341FFC03380033151B /* CustomEmojiManager.swift */; }; 805DEC371FFC08870033151B /* CustomEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805DEC361FFC08870033151B /* CustomEmoji.swift */; }; - 805DEC391FFE54820033151B /* CustomEmojiSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805DEC381FFE54820033151B /* CustomEmojiSpec.swift */; }; 8062E327209E19BB0044F407 /* AuthClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E326209E19BB0044F407 /* AuthClient.swift */; }; 8062E32920A1CAAB0044F407 /* SubscriptionsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E32820A1CAAB0044F407 /* SubscriptionsRequest.swift */; }; 8062E32C20A1F8100044F407 /* RoomsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E32B20A1F8100044F407 /* RoomsRequest.swift */; }; - 8062E32E20A366360044F407 /* SubscriptionsRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E32D20A366360044F407 /* SubscriptionsRequestSpec.swift */; }; - 8062E33120A3A2BB0044F407 /* RoomsRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E33020A3A2BB0044F407 /* RoomsRequestSpec.swift */; }; - 8062E33320A3AA760044F407 /* SubscriptionsClientSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E33220A3AA760044F407 /* SubscriptionsClientSpec.swift */; }; 8062E33520A5ECF50044F407 /* APIRequestOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E33420A5ECF50044F407 /* APIRequestOption.swift */; }; - 8062E33620A5ED200044F407 /* APIRequestOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8062E33420A5ECF50044F407 /* APIRequestOption.swift */; }; 806401311FB09DE800990572 /* Permission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806401301FB09DE800990572 /* Permission.swift */; }; 806401331FB09EC400990572 /* PermissionModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806401321FB09EC400990572 /* PermissionModelMapping.swift */; }; 806401351FB09F8A00990572 /* PermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806401341FB09F8A00990572 /* PermissionManager.swift */; }; @@ -590,99 +459,43 @@ 806465EE1FED1AFE001F27DB /* EmojiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806465ED1FED1AFE001F27DB /* EmojiView.swift */; }; 806728FD200789F4009FE94D /* PreferencesNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806728FC200789F4009FE94D /* PreferencesNavigationController.swift */; }; 806728FF20079734009FE94D /* DeleteMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806728FE20079734009FE94D /* DeleteMessageRequest.swift */; }; - 8067290120081046009FE94D /* DeleteMessageRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8067290020081046009FE94D /* DeleteMessageRequestSpec.swift */; }; 8067DA9B206BC71A005E3369 /* ReactMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8067DA9A206BC71A005E3369 /* ReactMessageRequest.swift */; }; - 8067DA9D206BC7D2005E3369 /* ReactMessageRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8067DA9C206BC7D2005E3369 /* ReactMessageRequestSpec.swift */; }; 8067DAA6206D1883005E3369 /* APIResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8067DAA5206D1883005E3369 /* APIResource.swift */; }; 8069D26E1FFF876D00C75926 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8069D26D1FFF876D00C75926 /* Emoji.swift */; }; 806C59A21FBB0BD600C32D0A /* PostMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806C59A11FBB0BD600C32D0A /* PostMessageRequest.swift */; }; - 806C59A51FBB2F4C00C32D0A /* PostMessageRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806C59A41FBB2F4C00C32D0A /* PostMessageRequestSpec.swift */; }; - 806DB94320687697004ED8ED /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CFF1FDB1FA200F5ECF9 /* Alert.swift */; }; - 806DB94420692518004ED8ED /* UIWindowExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B554C41FBF0C71000510B7 /* UIWindowExtensions.swift */; }; 806DB94E20698C25004ED8ED /* ChatMessageCellAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806DB94D20698C25004ED8ED /* ChatMessageCellAccessibility.swift */; }; 806EFA5E209BF1AC00D0D650 /* SubscriptionReadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806EFA5D209BF1AC00D0D650 /* SubscriptionReadRequest.swift */; }; 806EFA62209BF30500D0D650 /* SubscriptionsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806EFA61209BF30500D0D650 /* SubscriptionsClient.swift */; }; 8073719A1F94E83600D53ADF /* SocketError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807371991F94E83600D53ADF /* SocketError.swift */; }; - 8073719C1F963FA400D53ADF /* APITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8073719B1F963FA400D53ADF /* APITestCase.swift */; }; 8073719E1F9688B200D53ADF /* LoginServiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8073719D1F9688B200D53ADF /* LoginServiceManager.swift */; }; 807371A01F96937100D53ADF /* LoginService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8073719F1F96937100D53ADF /* LoginService.swift */; }; 807371A21F96968C00D53ADF /* LoginServiceModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807371A11F96968C00D53ADF /* LoginServiceModelMapping.swift */; }; 807371A61F96A4FF00D53ADF /* LoginServiceModelHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807371A51F96A4FF00D53ADF /* LoginServiceModelHandler.swift */; }; - 8076FD9A20484A6000114F28 /* SEStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FD9920484A6000114F28 /* SEStore.swift */; }; - 8076FD9D2048510100114F28 /* AuthSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A87BAC1DA66E700000EE80 /* AuthSettings.swift */; }; - 8076FD9E2048510C00114F28 /* AuthManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41552F651D30308C0081438D /* AuthManager.swift */; }; 8076FDA02048519D00114F28 /* AuthManagerSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FD9F2048519D00114F28 /* AuthManagerSocket.swift */; }; 8076FDA42048533000114F28 /* String+Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDA32048533000114F28 /* String+Random.swift */; }; - 8076FDA52048534200114F28 /* String+Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDA32048533000114F28 /* String+Random.swift */; }; - 8076FDA62048536800114F28 /* BaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4112DC551FFFB9B1005995E1 /* BaseModel.swift */; }; 8076FDA9204853DE00114F28 /* RealmExecute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDA8204853DE00114F28 /* RealmExecute.swift */; }; 8076FDAB2048549C00114F28 /* AuthSettingsHiddenTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDAA2048549C00114F28 /* AuthSettingsHiddenTypes.swift */; }; 8076FDAE2048567B00114F28 /* AuthCanDeleteMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDAD2048567B00114F28 /* AuthCanDeleteMessage.swift */; }; 8076FDB0204856AF00114F28 /* AuthCanBlockMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDAF204856AF00114F28 /* AuthCanBlockMessage.swift */; }; 8076FDB2204856CC00114F28 /* AuthCanEditMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDB1204856CC00114F28 /* AuthCanEditMessage.swift */; }; - 8076FDB3204856E200114F28 /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A79C121D2F09F200A1968E /* Auth.swift */; }; 8076FDB52048571200114F28 /* AuthUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDB42048571200114F28 /* AuthUser.swift */; }; 8076FDB92048581F00114F28 /* AuthManagerCurrentUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDB82048581F00114F28 /* AuthManagerCurrentUser.swift */; }; 8076FDBB2048591A00114F28 /* AuthManagerRecover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDBA2048591A00114F28 /* AuthManagerRecover.swift */; }; - 8076FDBC2048596100114F28 /* URLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3E61D71B26C00C2445A /* URLExtension.swift */; }; - 8076FDBD2048598100114F28 /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DAE93D1D318F350098E068 /* Subscription.swift */; }; 8076FDC320485A2200114F28 /* SubscriptionUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDC220485A2200114F28 /* SubscriptionUtils.swift */; }; 8076FDC520485ABB00114F28 /* SubscriptionUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDC420485ABB00114F28 /* SubscriptionUser.swift */; }; 8076FDC72048632300114F28 /* SubscriptionQueries.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDC62048632300114F28 /* SubscriptionQueries.swift */; }; - 8076FDC82048639700114F28 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41DC7A1A1D38454500896FC0 /* Message.swift */; }; - 8076FDC9204863AF00114F28 /* Mention.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4159720D1D3DB882002258F4 /* Mention.swift */; }; - 8076FDCA204863B900114F28 /* Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10E9C191F643457007F1796 /* Channel.swift */; }; - 8076FDCB204863C500114F28 /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41900C261D9FE35400308EF4 /* Attachment.swift */; }; - 8076FDCC204863DF00114F28 /* AuthExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414EFF911E54FE69004F001F /* AuthExtensions.swift */; }; - 8076FDCD204863FC00114F28 /* MessageURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F3C0FF1DB577ED000E0C76 /* MessageURL.swift */; }; - 8076FDCE2048642400114F28 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A79C0E1D2F085F00A1968E /* User.swift */; }; 8076FDD12048646500114F28 /* MessageReply.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDD02048646500114F28 /* MessageReply.swift */; }; - 8076FDD22048648D00114F28 /* Email.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4159720B1D3DB854002258F4 /* Email.swift */; }; - 8076FDD3204864A400114F28 /* MessageReaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809B53151FE3D3DC00833DD2 /* MessageReaction.swift */; }; 8076FDD6204864E700114F28 /* UserQueries.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDD5204864E700114F28 /* UserQueries.swift */; }; 8076FDD82048654F00114F28 /* UserUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDD72048654F00114F28 /* UserUtils.swift */; }; - 8076FDDA20489F5900114F28 /* SEViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDD920489F5900114F28 /* SEViewController.swift */; }; - 8076FDE22048A7C500114F28 /* SEComposeHeaderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDE12048A7C500114F28 /* SEComposeHeaderViewController.swift */; }; 8076FDE42048CC8600114F28 /* MigrationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDE32048CC8600114F28 /* MigrationCoordinator.swift */; }; 8076FDE62048CD0600114F28 /* UserDefaults+Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDE52048CD0600114F28 /* UserDefaults+Group.swift */; }; - 8076FDE82048D3AD00114F28 /* UserDefaults+Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDE52048CD0600114F28 /* UserDefaults+Group.swift */; }; - 8076FDED2049A5F600114F28 /* SECellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDEC2049A5F600114F28 /* SECellModel.swift */; }; - 807A8F671F9E3D4F00CC78DB /* LoginServiceSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807A8F661F9E3D4F00CC78DB /* LoginServiceSpec.swift */; }; - 807A8F6B1F9E4D0C00CC78DB /* OAuthManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807A8F6A1F9E4D0C00CC78DB /* OAuthManagerSpec.swift */; }; 807C7BF920740F3C006B600E /* AuthCanPinMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807C7BF820740F3C006B600E /* AuthCanPinMessage.swift */; }; - 807C7C022074307F006B600E /* KMPlaceholderTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807C7C012074307F006B600E /* KMPlaceholderTextView.swift */; }; 807C7C0620751ED2006B600E /* SpotlightClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807C7C0520751ED1006B600E /* SpotlightClient.swift */; }; 807C7C0820751EDC006B600E /* SpotlightRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807C7C0720751EDB006B600E /* SpotlightRequest.swift */; }; - 807C7C0C20751F06006B600E /* SpotlightRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807C7C0B20751F06006B600E /* SpotlightRequestSpec.swift */; }; - 807C7C1020751F40006B600E /* SpotlightClientSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807C7C0F20751F40006B600E /* SpotlightClientSpec.swift */; }; 807C7C12207522EF006B600E /* LoginServicesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807C7C11207522EF006B600E /* LoginServicesRequest.swift */; }; 807FB53D2044B49800E21429 /* Emojione+Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807FB53C2044B49800E21429 /* Emojione+Transform.swift */; }; - 807FB53F2045F36E00E21429 /* EmojioneSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807FB53E2045F36D00E21429 /* EmojioneSpec.swift */; }; - 807FB55B2046E7DD00E21429 /* SERoomsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807FB55A2046E7DD00E21429 /* SERoomsViewController.swift */; }; - 807FB55E2046E7DD00E21429 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 807FB55C2046E7DD00E21429 /* Main.storyboard */; }; - 807FB5622046E7DD00E21429 /* Rocket.Chat.ShareExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 807FB5582046E7DD00E21429 /* Rocket.Chat.ShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 807FB569204729E500E21429 /* SEServersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807FB568204729E500E21429 /* SEServersViewController.swift */; }; - 807FB56B20472A0F00E21429 /* SERoomsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807FB56A20472A0F00E21429 /* SERoomsViewModel.swift */; }; - 807FB56F20472B6A00E21429 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 807FB57120472B6A00E21429 /* Localizable.strings */; }; - 807FB582204837AF00E21429 /* SEServersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807FB581204837AF00E21429 /* SEServersViewModel.swift */; }; 80819DD221CBEC1400DCAE91 /* SubscriptionPermalink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80819DD121CBEC1400DCAE91 /* SubscriptionPermalink.swift */; }; - 80819DD421CBF50D00DCAE91 /* SubscriptionPermalinkSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80819DD321CBF50D00DCAE91 /* SubscriptionPermalinkSpec.swift */; }; 80819DD621CCF3C600DCAE91 /* MessagesViewControllerTyping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80819DD521CCF3C600DCAE91 /* MessagesViewControllerTyping.swift */; }; - 80825F0D207EB2D800C477DE /* APIResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8067DAA5206D1883005E3369 /* APIResource.swift */; }; - 808792361FB145B200EFE77F /* PermissionManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 808792351FB145B200EFE77F /* PermissionManagerSpec.swift */; }; - 808792381FB14B3300EFE77F /* PermissionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 808792371FB14B3300EFE77F /* PermissionSpec.swift */; }; - 808D0146232C143A00C4BA28 /* Pods_Rocket_Chat_ShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 808D0145232C143A00C4BA28 /* Pods_Rocket_Chat_ShareExtension.framework */; }; - 808D0148232C26E500C4BA28 /* DifferenceKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 808D0147232C26E500C4BA28 /* DifferenceKit.framework */; }; - 80977AB0204EE21F00C41435 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80213C0D1FE0639E00809E14 /* HTTPMethod.swift */; }; - 80977AB1204EE21F00C41435 /* VersionMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8013F8751FD6B5E000EE1A4E /* VersionMiddleware.swift */; }; - 80977AB2204EE21F00C41435 /* SendMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80054CF01FD9505A00F5ECF9 /* SendMessageRequest.swift */; }; - 80977AB4204EE41200C41435 /* DataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 597ECBA11E3708A50041C5C5 /* DataExtension.swift */; }; - 80977AB6204EEF1E00C41435 /* SelectServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80977AB5204EEF1E00C41435 /* SelectServer.swift */; }; - 80977AB9204EFBCC00C41435 /* SENavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80977AB8204EFBCC00C41435 /* SENavigation.swift */; }; - 80977ABB204EFC0F00C41435 /* SESceneTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80977ABA204EFC0F00C41435 /* SESceneTransition.swift */; }; - 80977ABF204F36F200C41435 /* SESearchState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80977ABE204F36F200C41435 /* SESearchState.swift */; }; - 80977AC2204F37C200C41435 /* SEState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80977AC1204F37C200C41435 /* SEState.swift */; }; - 80977AC4204FEEA700C41435 /* SEComposeHeaderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80977AC3204FEEA700C41435 /* SEComposeHeaderViewModel.swift */; }; 809B530B1FE2B1AB00833DD2 /* UploadClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809B530A1FE2B1AB00833DD2 /* UploadClient.swift */; }; 809B530E1FE2EFA100833DD2 /* ReactionListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809B530D1FE2EFA100833DD2 /* ReactionListView.swift */; }; 809B53101FE2F17D00833DD2 /* ReactionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809B530F1FE2F17D00833DD2 /* ReactionView.swift */; }; @@ -692,20 +505,14 @@ 809D577620EBAE5F0014C364 /* UIButtonCenterImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809D577520EBAE5F0014C364 /* UIButtonCenterImage.swift */; }; 809D577920ED06E50014C364 /* UINavigationControllerRedrawBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809D577820ED06E50014C364 /* UINavigationControllerRedrawBar.swift */; }; 80A2A2AB2073BD0800857DAF /* RealmCurrent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A2A2AA2073BD0800857DAF /* RealmCurrent.swift */; }; - 80A2A2AC2073BE3500857DAF /* RealmCurrent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A2A2AA2073BD0800857DAF /* RealmCurrent.swift */; }; 80A2F39020056C5E005D2DCA /* EmojiSearcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A2F38F20056C5E005D2DCA /* EmojiSearcher.swift */; }; 80A2F39220057AD0005D2DCA /* EmojiAutocompleteCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A2F39120057AD0005D2DCA /* EmojiAutocompleteCell.swift */; }; 80A2F39420057B48005D2DCA /* EmojiAutocompleteCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80A2F39320057B48005D2DCA /* EmojiAutocompleteCell.xib */; }; 80A63C4F1F719F9600FE5AC4 /* RoomInfoRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A63C4E1F719F9600FE5AC4 /* RoomInfoRequest.swift */; }; - 80A63C511F719FB300FE5AC4 /* RoomInfoRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A63C501F719FB300FE5AC4 /* RoomInfoRequestSpec.swift */; }; 80A63C531F71BD2900FE5AC4 /* UserInfoRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A63C521F71BD2900FE5AC4 /* UserInfoRequest.swift */; }; - 80A63C551F71BF3A00FE5AC4 /* UserInfoRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A63C541F71BF3A00FE5AC4 /* UserInfoRequestSpec.swift */; }; - 80A63C571F71D2E400FE5AC4 /* APISpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A63C561F71D2E400FE5AC4 /* APISpec.swift */; }; - 80A97F012006293D00A2774C /* EmojiSearcherSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A97F002006293D00A2774C /* EmojiSearcherSpec.swift */; }; 80AC400420EECB03005082E1 /* ChatBannerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80AC400320EECB03005082E1 /* ChatBannerView.xib */; }; 80AC400620EECB84005082E1 /* ChatBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80AC400520EECB84005082E1 /* ChatBannerView.swift */; }; 80AC400820EECB90005082E1 /* ChatBannerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80AC400720EECB90005082E1 /* ChatBannerViewModel.swift */; }; - 80AE2540203E5A3000DC2867 /* SubscriptionExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80AE253F203E5A3000DC2867 /* SubscriptionExtensionsSpec.swift */; }; 80AE2542203E61AF00DC2867 /* ChatMessageUnreadSeparator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80AE2541203E61AF00DC2867 /* ChatMessageUnreadSeparator.swift */; }; 80AE2544203E61CF00DC2867 /* ChatMessageUnreadSeparator.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80AE2543203E61CF00DC2867 /* ChatMessageUnreadSeparator.xib */; }; 80B2D98720E5496E002F4149 /* UserDetail.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 80B2D98020E5496E002F4149 /* UserDetail.storyboard */; }; @@ -721,79 +528,32 @@ 80B3DC0B202DCE1D004249AD /* SAMLViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80B3DC0A202DCE1D004249AD /* SAMLViewController.swift */; }; 80BFF60121D40BD500D99771 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFF60021D40BD500D99771 /* Throttle.swift */; }; 80BFF60321D40EDF00D99771 /* RoomHistoryRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BFF60221D40EDF00D99771 /* RoomHistoryRequest.swift */; }; - 80C110891FB62F7B00205BB1 /* OAuthViewControllerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80C110881FB62F7B00205BB1 /* OAuthViewControllerSpec.swift */; }; 80CC78CF20DAE334002FBEBC /* SubscriptionsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80CC78CE20DAE334002FBEBC /* SubscriptionsViewModel.swift */; }; 80CC78D120DD7F99002FBEBC /* RealmAssorter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80CC78D020DD7F99002FBEBC /* RealmAssorter.swift */; }; 80CC8A1920ACE320009D64DF /* UserPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80CC8A1820ACE320009D64DF /* UserPermissions.swift */; }; 80CCD3B7215EA992002AFE83 /* MessagesViewControllerComposerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80CCD3B6215EA992002AFE83 /* MessagesViewControllerComposerDelegate.swift */; }; 80CCD3BC216235B1002AFE83 /* MessagesComposerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80CCD3BB216235B1002AFE83 /* MessagesComposerViewModel.swift */; }; - 80D0CE5C204FFAA50056B17F /* SEServerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80D0CE5B204FFAA50056B17F /* SEServerCell.xib */; }; - 80D0CE60205016B40056B17F /* SEServerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D0CE5F205016B40056B17F /* SEServerCell.swift */; }; - 80D0CE62205023710056B17F /* SECell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D0CE61205023710056B17F /* SECell.swift */; }; - 80D0CE64205034280056B17F /* SEServerCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D0CE63205034280056B17F /* SEServerCellModel.swift */; }; - 80D0CE6620503C860056B17F /* SERoomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D0CE6520503C860056B17F /* SERoomCell.swift */; }; - 80D0CE6820503C970056B17F /* SERoomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80D0CE6720503C970056B17F /* SERoomCell.xib */; }; - 80D0CE6C205080AA0056B17F /* SERoomCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D0CE6B205080AA0056B17F /* SERoomCellModel.swift */; }; - 80D0CE6D205083280056B17F /* SubscriptionUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDC420485ABB00114F28 /* SubscriptionUser.swift */; }; - 80D0CE6F20509C100056B17F /* SEAvatarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D0CE6E20509C100056B17F /* SEAvatarView.swift */; }; - 80D0CE7120509C230056B17F /* SEAvatarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80D0CE7020509C230056B17F /* SEAvatarView.xib */; }; - 80D0CE722050BD160056B17F /* UIColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192054D1D52F5F1004EEC5F /* UIColorExtension.swift */; }; - 80D0CE732050BE680056B17F /* UIColorCSSColorsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412BCC8A1E55D4AA00F7F4EE /* UIColorCSSColorsExtension.swift */; }; - 80D0CE742050BFBE0056B17F /* AuthManagerCurrentUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDB82048581F00114F28 /* AuthManagerCurrentUser.swift */; }; - 80D0CE752050BFD20056B17F /* AuthUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8076FDB42048571200114F28 /* AuthUser.swift */; }; 80D41DF6208FC57100034D1F /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41DF5208FC57100034D1F /* PreferencesViewController.swift */; }; 80D41DFA2092147300034D1F /* UserActionSheetPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41DF92092147300034D1F /* UserActionSheetPresenter.swift */; }; 80D41DFD2092378400034D1F /* StarMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41DFC2092378400034D1F /* StarMessageRequest.swift */; }; 80D41DFF20923AA600034D1F /* AuthCanStarMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41DFE20923AA600034D1F /* AuthCanStarMessage.swift */; }; - 80D41E01209248F800034D1F /* StarMessageRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41E00209248F800034D1F /* StarMessageRequestSpec.swift */; }; - 80D41E0520924A8200034D1F /* AuthCanStarMessageSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41E0420924A8200034D1F /* AuthCanStarMessageSpec.swift */; }; 80D41E072099341C00034D1F /* PermissionsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41E062099341C00034D1F /* PermissionsRequest.swift */; }; - 80D41E092099393600034D1F /* PermissionsRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41E082099393600034D1F /* PermissionsRequestSpec.swift */; }; 80D41E0B20993CE200034D1F /* PinMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41E0A20993CE200034D1F /* PinMessageRequest.swift */; }; - 80D41E0D20993FCB00034D1F /* PinMessageRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D41E0C20993FCB00034D1F /* PinMessageRequestSpec.swift */; }; - 80D5637220592D32008896D6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 80D5637120592D32008896D6 /* Assets.xcassets */; }; - 80D563752059325A008896D6 /* MimeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D563742059325A008896D6 /* MimeType.swift */; }; - 80D5637720593533008896D6 /* ParseItemProviders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D5637620593533008896D6 /* ParseItemProviders.swift */; }; 80D955C2202154A300E3F281 /* CASViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D955C1202154A300E3F281 /* CASViewController.swift */; }; 80DC9A6C206BA95600032BE0 /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80DC9A6B206BA95600032BE0 /* Localized.swift */; }; - 80DC9A6E206BA96200032BE0 /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80DC9A6B206BA95600032BE0 /* Localized.swift */; }; - 80DC9A70206BAC8B00032BE0 /* mimetype.json in Resources */ = {isa = PBXBuildFile; fileRef = 80DC9A6F206BAC8B00032BE0 /* mimetype.json */; }; 80DF7123219CABAD000F0DA5 /* MessagesViewControllerJoining.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80DF7122219CABAD000F0DA5 /* MessagesViewControllerJoining.swift */; }; 80E99F291FD8B2B800B70B59 /* UserExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E99F281FD8B2B800B70B59 /* UserExtensions.swift */; }; - 80E99F2C1FD8B4BA00B70B59 /* APIExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E99F2B1FD8B4BA00B70B59 /* APIExtensionsSpec.swift */; }; - 80E99F2F1FD8B4F400B70B59 /* UserExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E99F2E1FD8B4F400B70B59 /* UserExtensionsSpec.swift */; }; 80E9DBD6209CA8FE00A48CA9 /* Closeable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E9DBD5209CA8FE00A48CA9 /* Closeable.swift */; }; - 80E9DBD8209CB06200A48CA9 /* SubscriptionReadRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E9DBD7209CB06000A48CA9 /* SubscriptionReadRequestSpec.swift */; }; - 80ECE2CE21D81EF10006AAE9 /* RoomHistoryRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80ECE2CD21D81EF10006AAE9 /* RoomHistoryRequestSpec.swift */; }; 80EE865321A82E6100BFEEC8 /* UIViewControllerDimming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80EE865221A82E6100BFEEC8 /* UIViewControllerDimming.swift */; }; - 80EF621A205A981600EF739B /* UIImageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41494B911D63C6280004F369 /* UIImageExtension.swift */; }; 80F09A1D1FFFC24800977D0D /* NSAttributedString+CustomEmojis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F09A1C1FFFC24800977D0D /* NSAttributedString+CustomEmojis.swift */; }; - 80F1F8102080F307007998AB /* MarkdownManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F1F80F2080F307007998AB /* MarkdownManagerSpec.swift */; }; 80F533E62195A33B00B7292E /* MessagesViewControllerSending.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F533E52195A33B00B7292E /* MessagesViewControllerSending.swift */; }; - 80FA9066205313E20069038F /* SEContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA9065205313E20069038F /* SEContent.swift */; }; - 80FA9068205314040069038F /* SEServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA9067205314040069038F /* SEServer.swift */; }; - 80FA906A20569F890069038F /* SEComposeFileCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA906920569F890069038F /* SEComposeFileCell.swift */; }; - 80FA906C20569FA10069038F /* SEComposeFileCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80FA906B20569FA10069038F /* SEComposeFileCell.xib */; }; - 80FA906E2056A1F80069038F /* SEComposeFileCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA906D2056A1F80069038F /* SEComposeFileCellModel.swift */; }; - 80FA90702056A33A0069038F /* SEComposeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA906F2056A33A0069038F /* SEComposeViewModel.swift */; }; - 80FA90722056C1190069038F /* SEComposeTextCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA90712056C1190069038F /* SEComposeTextCell.swift */; }; - 80FA90742056C1350069038F /* SEComposeTextCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80FA90732056C1350069038F /* SEComposeTextCell.xib */; }; - 80FA90762056C24C0069038F /* SEComposeTextCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA90752056C24C0069038F /* SEComposeTextCellModel.swift */; }; - 80FA90782056C3AE0069038F /* SEComposeCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA90772056C3AE0069038F /* SEComposeCellModel.swift */; }; - 80FA907D2057F4650069038F /* SubmitContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FA907C2057F4650069038F /* SubmitContent.swift */; }; - 80FE8DEE206584EA0099170E /* SEFileDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80FE8DED206584EA0099170E /* SEFileDetailView.xib */; }; - 80FE8DF0206587510099170E /* SEFileDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FE8DEF206587510099170E /* SEFileDetailView.swift */; }; - 890DA8AE1F942A35007C022B /* RoomCreateRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890DA8AD1F942A35007C022B /* RoomCreateRequestSpec.swift */; }; 897083D31F8CF08100233561 /* CheckTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897083CE1F8CF08100233561 /* CheckTableViewCell.swift */; }; 897083D41F8CF08100233561 /* CheckTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 897083CF1F8CF08100233561 /* CheckTableViewCell.xib */; }; 897083D51F8CF08100233561 /* TextFieldTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897083D01F8CF08100233561 /* TextFieldTableViewCell.swift */; }; 897083D61F8CF08100233561 /* TextFieldTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 897083D11F8CF08100233561 /* TextFieldTableViewCell.xib */; }; 897083D71F8CF08100233561 /* FormTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897083D21F8CF08100233561 /* FormTableViewCell.swift */; }; 89AEB7F81F7D225D00112A09 /* RoomCreateRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89AEB7F71F7D225D00112A09 /* RoomCreateRequest.swift */; }; - 89AFF3C81F94374D00D07A30 /* NewRoomViewControllerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89AFF3C71F94374D00D07A30 /* NewRoomViewControllerSpec.swift */; }; - 990B4B642069DC9900999FE7 /* EditProfileTableViewControllerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990B4B632069DC9900999FE7 /* EditProfileTableViewControllerSpec.swift */; }; 990FF6D620740C79007B4A53 /* RoomMentionsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990FF6D520740C79007B4A53 /* RoomMentionsRequest.swift */; }; - 990FF6D8207438D4007B4A53 /* RoomMentionsRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990FF6D7207438D4007B4A53 /* RoomMentionsRequestSpec.swift */; }; 99100B6C20CF3B3F000C5FCC /* LoginTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99100B6B20CF3B3F000C5FCC /* LoginTableViewController.swift */; }; 9911CF3420C1CF58001471C3 /* StyledButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9911CF3320C1CF58001471C3 /* StyledButton.swift */; }; 9914183B2166AF63007D2AA2 /* MessageURLCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9914183A2166AF63007D2AA2 /* MessageURLCell.xib */; }; @@ -803,11 +563,9 @@ 991AB00821744E640097AE4C /* BaseAudioMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991AB00721744E640097AE4C /* BaseAudioMessageCell.swift */; }; 991AB00A217458790097AE4C /* AudioMessageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 991AB009217458790097AE4C /* AudioMessageCell.xib */; }; 991AB00C217459690097AE4C /* AudioMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991AB00B217459690097AE4C /* AudioMessageCell.swift */; }; - 9921BFAC2075AF5F00BB027A /* PublicSettingsRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9921BFAB2075AF5F00BB027A /* PublicSettingsRequestSpec.swift */; }; 992358DF2193767300265233 /* MessagesViewControllerMessageCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992358DE2193767300265233 /* MessagesViewControllerMessageCellProtocol.swift */; }; 9928225F204DDC8C005D2067 /* EditProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9928225E204DDC8C005D2067 /* EditProfileViewModel.swift */; }; 992B5AB6209A14B5009C8123 /* AudioFileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992B5AB5209A14B5009C8123 /* AudioFileViewController.swift */; }; - 992B5AB8209A2890009C8123 /* RoomFilesRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992B5AB7209A2890009C8123 /* RoomFilesRequestSpec.swift */; }; 993417F520D1B31F0008B643 /* LegalTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993417F420D1B31F0008B643 /* LegalTableViewController.swift */; }; 99363FC820C8650B00AA68C0 /* AuthSeparatorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 99363FC720C8650B00AA68C0 /* AuthSeparatorTableViewCell.xib */; }; 99363FCA20C8657400AA68C0 /* ShowMoreSeparatorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 99363FC920C8657400AA68C0 /* ShowMoreSeparatorTableViewCell.xib */; }; @@ -818,13 +576,10 @@ 993B7B3C215F07020067B962 /* FileCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 993B7B3B215F07020067B962 /* FileCell.xib */; }; 993B7B3E215F0A270067B962 /* FileCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993B7B3D215F0A270067B962 /* FileCell.swift */; }; 993B7B40215F0B730067B962 /* FileMessageChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993B7B3F215F0B730067B962 /* FileMessageChatItem.swift */; }; - 993E513A1FB1E18D006403D5 /* DraftMessageManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993E51391FB1E18D006403D5 /* DraftMessageManagerSpec.swift */; }; 994C90B42174B50B00383AFF /* BaseVideoMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994C90B32174B50B00383AFF /* BaseVideoMessageCell.swift */; }; 994C90B62174BA5100383AFF /* VideoMessageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 994C90B52174BA5100383AFF /* VideoMessageCell.xib */; }; 994C90B82174BCAF00383AFF /* VideoMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994C90B72174BCAF00383AFF /* VideoMessageCell.swift */; }; 994D1EDF205AB945007F29C8 /* UINavigationControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994D1EDE205AB945007F29C8 /* UINavigationControllerExtension.swift */; }; - 994DA2B020653FB600083FB8 /* WebBrowserManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994DA2AF20653FB600083FB8 /* WebBrowserManagerSpec.swift */; }; - 994DA2B32065486D00083FB8 /* WebBrowserViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994DA2B22065486D00083FB8 /* WebBrowserViewModelSpec.swift */; }; 994EB8042050DD5D0011A9CE /* NewPasswordTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994EB8032050DD5D0011A9CE /* NewPasswordTableViewController.swift */; }; 99549ED2216FE4F50037D6A5 /* BaseMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99549ED1216FE4F50037D6A5 /* BaseMessageCell.swift */; }; 995F710B20C7822A00B7535F /* AuthTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995F710A20C7822A00B7535F /* AuthTableViewController.swift */; }; @@ -847,8 +602,7 @@ 996E741D215DFBDB00842818 /* SequentialMessageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 996E741C215DFBDB00842818 /* SequentialMessageCell.xib */; }; 996E741F215DFBF400842818 /* SequentialMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 996E741E215DFBF400842818 /* SequentialMessageCell.swift */; }; 996E7421215DFE0700842818 /* SequentialMessageChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 996E7420215DFE0700842818 /* SequentialMessageChatItem.swift */; }; - 9977302720725B5C009AF465 /* CustomEmojiRequestOld.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9977302620725B5C009AF465 /* CustomEmojiRequestOld.swift */; }; - 9977302A20727E17009AF465 /* CustomEmojiRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9977302920727E17009AF465 /* CustomEmojiRequestSpec.swift */; }; + 9977302720725B5C009AF465 /* CustomEmojiRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9977302620725B5C009AF465 /* CustomEmojiRequest.swift */; }; 9977302C2072B746009AF465 /* PublicSettingsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9977302B2072B746009AF465 /* PublicSettingsRequest.swift */; }; 9977D857217E942200FE5EC6 /* MessageActionsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9977D856217E942200FE5EC6 /* MessageActionsCell.xib */; }; 9977D859217E94C400FE5EC6 /* MessageActionsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9977D858217E94C400FE5EC6 /* MessageActionsCell.swift */; }; @@ -856,8 +610,6 @@ 997FE19A210B9D2E000F6836 /* SubscriptionLeaveRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 997FE199210B9D2E000F6836 /* SubscriptionLeaveRequest.swift */; }; 997FE19C210BA5B8000F6836 /* SubscriptionHideRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 997FE19B210BA5B8000F6836 /* SubscriptionHideRequest.swift */; }; 99805D7520C191BE00741B8E /* StyledTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99805D7420C191BE00741B8E /* StyledTextField.swift */; }; - 998165CA204EBBA10059D346 /* UpdateUserRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998165C9204EBBA10059D346 /* UpdateUserRequestSpec.swift */; }; - 998165CC204EDBA30059D346 /* UploadAvatarRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998165CB204EDBA30059D346 /* UploadAvatarRequestSpec.swift */; }; 9987B5962093E4BA007D277C /* FilesListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9987B5952093E4BA007D277C /* FilesListViewController.swift */; }; 9987B5992093E526007D277C /* FileTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9987B5972093E523007D277C /* FileTableViewCell.swift */; }; 9987B59A2093E526007D277C /* FileTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9987B5982093E524007D277C /* FileTableViewCell.xib */; }; @@ -883,20 +635,15 @@ 999F25B5207EEB0C002E0F68 /* FileModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999F25B4207EEB0C002E0F68 /* FileModelMapping.swift */; }; 99B060CE1FB1225200F471C2 /* DraftMessageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99B060CD1FB1225200F471C2 /* DraftMessageManager.swift */; }; 99B15BCD20FD4589005A528F /* DatabaseManagerAuthSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99B15BCC20FD4589005A528F /* DatabaseManagerAuthSettings.swift */; }; - 99B15BCF20FD4681005A528F /* DatabaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412F8DD81F599EF100AF7786 /* DatabaseManager.swift */; }; 99B4A7B02164681200C80FF2 /* QuoteCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 99B4A7AF2164681200C80FF2 /* QuoteCell.xib */; }; 99B4A7B22164683200C80FF2 /* QuoteCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99B4A7B12164683200C80FF2 /* QuoteCell.swift */; }; 99B4A7B4216479CD00C80FF2 /* QuoteChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99B4A7B3216479CD00C80FF2 /* QuoteChatItem.swift */; }; 99B802ED20BC3BD400230109 /* ImageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99B802EC20BC3BD400230109 /* ImageManager.swift */; }; - 99B802EE20BC3EF700230109 /* ImageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99B802EC20BC3BD400230109 /* ImageManager.swift */; }; - 99B802EF20BC3F0800230109 /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4174CB1E1D2DB3350086DAC8 /* StringExtensions.swift */; }; - 99BC81102107E3020084C948 /* DeepLinkSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99BC810F2107E3020084C948 /* DeepLinkSpec.swift */; }; 99BE4D822152D56E001A43E2 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99BE4D812152D56E001A43E2 /* MessagesViewController.swift */; }; 99BE4D85215300FD001A43E2 /* MessageSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99BE4D84215300FD001A43E2 /* MessageSection.swift */; }; 99BE4D882153013A001A43E2 /* MessageSectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99BE4D872153013A001A43E2 /* MessageSectionModel.swift */; }; 99BE4D8A2153162A001A43E2 /* UnmanagedMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99BE4D892153162A001A43E2 /* UnmanagedMessage.swift */; }; 99C29A37212A66EC00521266 /* ObjectExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C29A36212A66EC00521266 /* ObjectExtension.swift */; }; - 99C29A38212A6BFA00521266 /* ObjectExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C29A36212A66EC00521266 /* ObjectExtension.swift */; }; 99C577EE207E4F1500CE9B4D /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C577ED207E4F1500CE9B4D /* File.swift */; }; 99D77C6B20E474BF008F2438 /* AnalyticsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D77C6A20E474BF008F2438 /* AnalyticsManager.swift */; }; 99D86ABA20D0C5240036C127 /* LoginTableViewControllerAuthenticationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D86AB920D0C5240036C127 /* LoginTableViewControllerAuthenticationHandler.swift */; }; @@ -904,27 +651,18 @@ 99D888FB204623A900E51306 /* UpdateUserRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D888FA204623A900E51306 /* UpdateUserRequest.swift */; }; 99DBB872208FF6FE00382DB2 /* SearchMessagesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99DBB871208FF6FE00382DB2 /* SearchMessagesRequest.swift */; }; 99DBB8742090360600382DB2 /* MessagesListControllerSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99DBB8732090360600382DB2 /* MessagesListControllerSearch.swift */; }; - 99DBB87620903A7F00382DB2 /* SearchMessagesRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99DBB87520903A7F00382DB2 /* SearchMessagesRequestSpec.swift */; }; 99EA5F8A21B9AC2B006D40C5 /* HeaderSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99EA5F8921B9AC2B006D40C5 /* HeaderSection.swift */; }; 99EA7A99219181750023BB63 /* BaseTextAttachmentChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99EA7A98219181750023BB63 /* BaseTextAttachmentChatItem.swift */; }; - 99F41BCE20658B1300B240FC /* EditProfileViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F41BCD20658B1300B240FC /* EditProfileViewModelSpec.swift */; }; - 99F41BD020658C3400B240FC /* NewPasswordViewModelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F41BCF20658C3400B240FC /* NewPasswordViewModelSpec.swift */; }; 99F530A120D0F08A004EC060 /* BaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F530A020D0F08A004EC060 /* BaseTableViewController.swift */; }; 99F8FAED20B66F210025FEEF /* ImageCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F8FAEC20B66F210025FEEF /* ImageCoordinator.swift */; }; A0FFC1611E8A9D8D00A1B5EA /* TintedTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0FFC1601E8A9D8D00A1B5EA /* TintedTextField.swift */; }; B5893BF41F6C4A5F00365768 /* UserReviewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5893BF31F6C4A5E00365768 /* UserReviewManager.swift */; }; - B5893BF61F6C4B1D00365768 /* UserReviewManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5893BF51F6C4B1D00365768 /* UserReviewManagerSpec.swift */; }; D10E9C1A1F643457007F1796 /* Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10E9C191F643457007F1796 /* Channel.swift */; }; D10E9C1E1F643474007F1796 /* ChannelModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10E9C1D1F643474007F1796 /* ChannelModelMapping.swift */; }; D10E9C221F643616007F1796 /* MentionModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10E9C211F643616007F1796 /* MentionModelMapping.swift */; }; D12D34031F69C76400AED992 /* SubscriptionExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D12D34021F69C76400AED992 /* SubscriptionExtensions.swift */; }; - D1411A2A1F6777F300D6EDF7 /* ChannelSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1411A291F6777F300D6EDF7 /* ChannelSpec.swift */; }; - D1411A2C1F6779A200D6EDF7 /* MentionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1411A2B1F6779A200D6EDF7 /* MentionSpec.swift */; }; D15C83861F70991F001AB155 /* APIResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15C83851F70991F001AB155 /* APIResponse.swift */; }; - D18675EA1F70A58B00406FB4 /* InfoRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D18675E91F70A58B00406FB4 /* InfoRequestSpec.swift */; }; D18675EC1F716A0D00406FB4 /* LoginRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D18675EB1F716A0D00406FB4 /* LoginRequest.swift */; }; - D18675EE1F716FBC00406FB4 /* LoginRequestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D18675ED1F716FBC00406FB4 /* LoginRequestSpec.swift */; }; - D1A403D91F6760BC00798EDA /* NSAttributedStringExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A403D81F6760BC00798EDA /* NSAttributedStringExtensionsSpec.swift */; }; D1C536CC1F688B2F00EBA8D9 /* MarkdownManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1C536CB1F688B2F00EBA8D9 /* MarkdownManager.swift */; }; D1C536CE1F688B7100EBA8D9 /* UIFontExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1C536CD1F688B7100EBA8D9 /* UIFontExtensions.swift */; }; D1D535EC1F7081FA006625D2 /* API.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1D535EB1F7081FA006625D2 /* API.swift */; }; @@ -937,30 +675,6 @@ DB926AFD21FA0AEE0046F53F /* ChatAnnouncementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB926AFC21FA0AEE0046F53F /* ChatAnnouncementView.swift */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 41DF76F41D2C50720028DBF8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 41DF76D71D2C50710028DBF8 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 41DF76DE1D2C50710028DBF8; - remoteInfo = Rocket.Chat; - }; - 41DF76FF1D2C50720028DBF8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 41DF76D71D2C50710028DBF8 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 41DF76DE1D2C50710028DBF8; - remoteInfo = Rocket.Chat; - }; - 807FB5602046E7DD00E21429 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 41DF76D71D2C50710028DBF8 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 807FB5572046E7DD00E21429; - remoteInfo = Rocket.Chat.ShareExtension; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXCopyFilesBuildPhase section */ 414EE63221CD2912003693D2 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -968,8 +682,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 414EE63121CD2912003693D2 /* JitsiMeet.framework in Embed Frameworks */, - 414EE63421CD2915003693D2 /* WebRTC.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -980,7 +692,6 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - 807FB5622046E7DD00E21429 /* Rocket.Chat.ShareExtension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -1419,9 +1130,7 @@ 41DF76E91D2C50710028DBF8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 41DF76EC1D2C50720028DBF8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 41DF76EE1D2C50720028DBF8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 41DF76F31D2C50720028DBF8 /* Rocket.ChatTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rocket.ChatTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 41DF76F91D2C50720028DBF8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 41DF76FE1D2C50720028DBF8 /* Rocket.ChatUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rocket.ChatUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 41DF77021D2C50720028DBF8 /* RocketChatUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RocketChatUITests.swift; sourceTree = ""; }; 41DF77041D2C50720028DBF8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 41E2F9FE1D414DE800238DFD /* Chat.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Chat.storyboard; sourceTree = ""; }; @@ -1575,7 +1284,6 @@ 80461ACA2190FF06003F1F32 /* UserHintAvatarViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserHintAvatarViewCell.swift; sourceTree = ""; }; 80461ACC2191D0D1003F1F32 /* TextHintEmojiViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextHintEmojiViewCell.swift; sourceTree = ""; }; 80461ACE2191D24D003F1F32 /* TextHintLabelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextHintLabelCell.swift; sourceTree = ""; }; - 804C0D99232861F40021A880 /* CustomEmojiRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomEmojiRequest.swift; sourceTree = ""; }; 8052F75620B4ADC400B3B0CF /* Debounce.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Debounce.swift; sourceTree = ""; }; 8052F75820B7522100B3B0CF /* UIAlertActionImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIAlertActionImage.swift; sourceTree = ""; }; 8052F75B20B7529800B3B0CF /* UIAlertActionTitleTextAlignment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIAlertActionTitleTextAlignment.swift; sourceTree = ""; }; @@ -1648,7 +1356,6 @@ 807C7C11207522EF006B600E /* LoginServicesRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginServicesRequest.swift; sourceTree = ""; }; 807FB53C2044B49800E21429 /* Emojione+Transform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Emojione+Transform.swift"; sourceTree = ""; }; 807FB53E2045F36D00E21429 /* EmojioneSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojioneSpec.swift; sourceTree = ""; }; - 807FB5582046E7DD00E21429 /* Rocket.Chat.ShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Rocket.Chat.ShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 807FB55A2046E7DD00E21429 /* SERoomsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SERoomsViewController.swift; sourceTree = ""; }; 807FB55D2046E7DD00E21429 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 807FB55F2046E7DD00E21429 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1667,9 +1374,6 @@ 80819DD521CCF3C600DCAE91 /* MessagesViewControllerTyping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewControllerTyping.swift; sourceTree = ""; }; 808792351FB145B200EFE77F /* PermissionManagerSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionManagerSpec.swift; sourceTree = ""; }; 808792371FB14B3300EFE77F /* PermissionSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionSpec.swift; sourceTree = ""; }; - 808D0143232C131300C4BA28 /* DifferenceKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DifferenceKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 808D0145232C143A00C4BA28 /* Pods_Rocket_Chat_ShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Pods_Rocket_Chat_ShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 808D0147232C26E500C4BA28 /* DifferenceKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DifferenceKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80977AB5204EEF1E00C41435 /* SelectServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectServer.swift; sourceTree = ""; }; 80977AB8204EFBCC00C41435 /* SENavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SENavigation.swift; sourceTree = ""; }; 80977ABA204EFC0F00C41435 /* SESceneTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SESceneTransition.swift; sourceTree = ""; }; @@ -1843,7 +1547,7 @@ 996E741C215DFBDB00842818 /* SequentialMessageCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SequentialMessageCell.xib; sourceTree = ""; }; 996E741E215DFBF400842818 /* SequentialMessageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SequentialMessageCell.swift; sourceTree = ""; }; 996E7420215DFE0700842818 /* SequentialMessageChatItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SequentialMessageChatItem.swift; sourceTree = ""; }; - 9977302620725B5C009AF465 /* CustomEmojiRequestOld.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomEmojiRequestOld.swift; sourceTree = ""; }; + 9977302620725B5C009AF465 /* CustomEmojiRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomEmojiRequest.swift; sourceTree = ""; }; 9977302920727E17009AF465 /* CustomEmojiRequestSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomEmojiRequestSpec.swift; sourceTree = ""; }; 9977302B2072B746009AF465 /* PublicSettingsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublicSettingsRequest.swift; sourceTree = ""; }; 9977D856217E942200FE5EC6 /* MessageActionsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MessageActionsCell.xib; sourceTree = ""; }; @@ -1945,32 +1649,6 @@ buildActionMask = 2147483647; files = ( 7DE1B07114BBD1D46E9CC71B /* Pods_Rocket_Chat.framework in Frameworks */, - 414EE63021CD2912003693D2 /* JitsiMeet.framework in Frameworks */, - 414EE63321CD2915003693D2 /* WebRTC.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 41DF76F01D2C50720028DBF8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 15A2FD223558011BFDE03883 /* Pods_Rocket_ChatTests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 41DF76FB1D2C50720028DBF8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 807FB5552046E7DD00E21429 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 808D0148232C26E500C4BA28 /* DifferenceKit.framework in Frameworks */, - 808D0146232C143A00C4BA28 /* Pods_Rocket_Chat_ShareExtension.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2029,9 +1707,6 @@ 106DAA428B5BF7289FB70C65 /* Frameworks */ = { isa = PBXGroup; children = ( - 808D0147232C26E500C4BA28 /* DifferenceKit.framework */, - 808D0145232C143A00C4BA28 /* Pods_Rocket_Chat_ShareExtension.framework */, - 808D0143232C131300C4BA28 /* DifferenceKit.framework */, 0F5191CD6C53AEA006C82524 /* Pods_Rocket_Chat.framework */, 68D870A8D54F5431A14607AE /* Pods_Rocket_ChatTests.framework */, 6787D07A45177F339DB234DD /* Pods_Rocket_Chat_ShareExtension.framework */, @@ -2676,9 +2351,9 @@ 4174CB0B1D2D99170086DAC8 /* Storyboards */ = { isa = PBXGroup; children = ( - 1496A88120FA4A92005C2E14 /* NotificationsSettings.storyboard */, 4174CB0E1D2D995F0086DAC8 /* Auth.storyboard */, 41E2F9FE1D414DE800238DFD /* Chat.storyboard */, + 1496A88120FA4A92005C2E14 /* NotificationsSettings.storyboard */, 4190693A21D0D8C600FE2573 /* Jitsi.storyboard */, 140A95E0202F526C003FD564 /* Drawing.storyboard */, 41DF76EB1D2C50720028DBF8 /* LaunchScreen.storyboard */, @@ -3096,9 +2771,6 @@ isa = PBXGroup; children = ( 41DF76DF1D2C50710028DBF8 /* Rocket.Chat.app */, - 41DF76F31D2C50720028DBF8 /* Rocket.ChatTests.xctest */, - 41DF76FE1D2C50720028DBF8 /* Rocket.ChatUITests.xctest */, - 807FB5582046E7DD00E21429 /* Rocket.Chat.ShareExtension.appex */, ); name = Products; sourceTree = ""; @@ -4150,8 +3822,7 @@ 9977302520725B3A009AF465 /* Emoji */ = { isa = PBXGroup; children = ( - 9977302620725B5C009AF465 /* CustomEmojiRequestOld.swift */, - 804C0D99232861F40021A880 /* CustomEmojiRequest.swift */, + 9977302620725B5C009AF465 /* CustomEmojiRequest.swift */, ); path = Emoji; sourceTree = ""; @@ -4366,71 +4037,12 @@ buildRules = ( ); dependencies = ( - 807FB5612046E7DD00E21429 /* PBXTargetDependency */, ); name = Rocket.Chat; productName = Rocket.Chat; productReference = 41DF76DF1D2C50710028DBF8 /* Rocket.Chat.app */; productType = "com.apple.product-type.application"; }; - 41DF76F21D2C50720028DBF8 /* Rocket.ChatTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 41DF770A1D2C50720028DBF8 /* Build configuration list for PBXNativeTarget "Rocket.ChatTests" */; - buildPhases = ( - 37A12832FCABEE937B91E416 /* [CP] Check Pods Manifest.lock */, - F0237DBB56B21F1F60250436 /* [CP] Check Pods Manifest.lock */, - 41DF76EF1D2C50720028DBF8 /* Sources */, - 41DF76F01D2C50720028DBF8 /* Frameworks */, - 41DF76F11D2C50720028DBF8 /* Resources */, - DC24B2F8EF9BED399B024C23 /* [CP] Embed Pods Frameworks */, - DEFA8FD3D3E972322218FB03 /* 📦 Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 41DF76F51D2C50720028DBF8 /* PBXTargetDependency */, - ); - name = Rocket.ChatTests; - productName = Rocket.ChatTests; - productReference = 41DF76F31D2C50720028DBF8 /* Rocket.ChatTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 41DF76FD1D2C50720028DBF8 /* Rocket.ChatUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 41DF770D1D2C50720028DBF8 /* Build configuration list for PBXNativeTarget "Rocket.ChatUITests" */; - buildPhases = ( - 41DF76FA1D2C50720028DBF8 /* Sources */, - 41DF76FB1D2C50720028DBF8 /* Frameworks */, - 41DF76FC1D2C50720028DBF8 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 41DF77001D2C50720028DBF8 /* PBXTargetDependency */, - ); - name = Rocket.ChatUITests; - productName = Rocket.ChatUITests; - productReference = 41DF76FE1D2C50720028DBF8 /* Rocket.ChatUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 807FB5572046E7DD00E21429 /* Rocket.Chat.ShareExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 807FB5662046E7DD00E21429 /* Build configuration list for PBXNativeTarget "Rocket.Chat.ShareExtension" */; - buildPhases = ( - B1F628369682ADA8656A5D07 /* [CP] Check Pods Manifest.lock */, - 807FB5542046E7DD00E21429 /* Sources */, - 807FB5552046E7DD00E21429 /* Frameworks */, - 807FB5562046E7DD00E21429 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Rocket.Chat.ShareExtension; - productName = Rocket.Chat.ShareExtension; - productReference = 807FB5582046E7DD00E21429 /* Rocket.Chat.ShareExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -4443,8 +4055,9 @@ TargetAttributes = { 41DF76DE1D2C50710028DBF8 = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = S6UPZG7ZR3; + DevelopmentTeam = F73KYQA484; LastSwiftMigration = 1000; + ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.ApplicationGroups.iOS = { enabled = 1; @@ -4463,29 +4076,6 @@ }; }; }; - 41DF76F21D2C50720028DBF8 = { - CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = S6UPZG7ZR3; - LastSwiftMigration = 1000; - TestTargetID = 41DF76DE1D2C50710028DBF8; - }; - 41DF76FD1D2C50720028DBF8 = { - CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = S6UPZG7ZR3; - LastSwiftMigration = 1000; - TestTargetID = 41DF76DE1D2C50710028DBF8; - }; - 807FB5572046E7DD00E21429 = { - CreatedOnToolsVersion = 9.2; - DevelopmentTeam = S6UPZG7ZR3; - LastSwiftMigration = 1000; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.ApplicationGroups.iOS = { - enabled = 1; - }; - }; - }; }; }; buildConfigurationList = 41DF76DA1D2C50710028DBF8 /* Build configuration list for PBXProject "Rocket.Chat" */; @@ -4516,9 +4106,6 @@ projectRoot = ""; targets = ( 41DF76DE1D2C50710028DBF8 /* Rocket.Chat */, - 807FB5572046E7DD00E21429 /* Rocket.Chat.ShareExtension */, - 41DF76F21D2C50720028DBF8 /* Rocket.ChatTests */, - 41DF76FD1D2C50720028DBF8 /* Rocket.ChatUITests */, ); }; /* End PBXProject section */ @@ -4689,38 +4276,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 41DF76F11D2C50720028DBF8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 416296FA1F41B7F400BCCEDD /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 41DF76FC1D2C50720028DBF8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 807FB5562046E7DD00E21429 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 80FA906C20569FA10069038F /* SEComposeFileCell.xib in Resources */, - 80FE8DEE206584EA0099170E /* SEFileDetailView.xib in Resources */, - 80D0CE6820503C970056B17F /* SERoomCell.xib in Resources */, - 807FB55E2046E7DD00E21429 /* Main.storyboard in Resources */, - 807FB56F20472B6A00E21429 /* Localizable.strings in Resources */, - 80DC9A70206BAC8B00032BE0 /* mimetype.json in Resources */, - 80D0CE7120509C230056B17F /* SEAvatarView.xib in Resources */, - 80FA90742056C1350069038F /* SEComposeTextCell.xib in Resources */, - 80D5637220592D32008896D6 /* Assets.xcassets in Resources */, - 80D0CE5C204FFAA50056B17F /* SEServerCell.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -4746,24 +4301,6 @@ 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; }; - 37A12832FCABEE937B91E416 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Rocket.ChatTests-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; - }; 41EFB5C721D3AA6F006C10AC /* Remove Simulator architectures from WebRTC and JitsiMeet frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -4804,7 +4341,7 @@ inputFileListPaths = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh", + "${SRCROOT}/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh", "${BUILT_PRODUCTS_DIR}/DifferenceKit/DifferenceKit.framework", "${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework", "${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework", @@ -4826,6 +4363,7 @@ "${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework", "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework", "${BUILT_PRODUCTS_DIR}/semver/semver.framework", + "${BUILT_PRODUCTS_DIR}/DifferenceKit-Core/DifferenceKit.framework", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( @@ -4855,29 +4393,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - B1F628369682ADA8656A5D07 /* [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-Rocket.Chat.ShareExtension-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"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; D37272A11E13E60E00A25E1A /* SwiftLint */ = { @@ -4894,94 +4410,6 @@ shellPath = /bin/sh; shellScript = "if [ \"${CONFIGURATION}\" = \"Debug\" ]; then\n \"${PODS_ROOT}/SwiftLint/swiftlint\"\nfi\n"; }; - DC24B2F8EF9BED399B024C23 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/DifferenceKit/DifferenceKit.framework", - "${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework", - "${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework", - "${BUILT_PRODUCTS_DIR}/Nuke/Nuke.framework", - "${BUILT_PRODUCTS_DIR}/Nuke-FLAnimatedImage-Plugin/NukeFLAnimatedImagePlugin.framework", - "${BUILT_PRODUCTS_DIR}/Realm/Realm.framework", - "${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework", - "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework", - "${BUILT_PRODUCTS_DIR}/1PasswordExtension/OnePasswordExtension.framework", - "${BUILT_PRODUCTS_DIR}/FLEX/FLEX.framework", - "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", - "${BUILT_PRODUCTS_DIR}/MobilePlayer/MobilePlayer.framework", - "${BUILT_PRODUCTS_DIR}/OAuthSwift/OAuthSwift.framework", - "${BUILT_PRODUCTS_DIR}/RCMarkdownParser/RCMarkdownParser.framework", - "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework", - "${BUILT_PRODUCTS_DIR}/RocketChatViewController/RocketChatViewController.framework", - "${BUILT_PRODUCTS_DIR}/SimpleImageViewer/SimpleImageViewer.framework", - "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework", - "${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework", - "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework", - "${BUILT_PRODUCTS_DIR}/semver/semver.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DifferenceKit.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nuke.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NukeFLAnimatedImagePlugin.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RealmSwift.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OnePasswordExtension.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLEX.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MobilePlayer.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OAuthSwift.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RCMarkdownParser.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RocketChatViewController.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SimpleImageViewer.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwipeCellKit.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/semver.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - DEFA8FD3D3E972322218FB03 /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - F0237DBB56B21F1F60250436 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -5233,7 +4661,7 @@ 4146ECF1223A6A81000070EA /* DirectoryUserCell.swift in Sources */, 4151B45E1E2D32EA00F8AA1B /* MessageURLModelMapping.swift in Sources */, 998E649C2161B4D900E7C45A /* AttachmentFieldView.swift in Sources */, - 9977302720725B5C009AF465 /* CustomEmojiRequestOld.swift in Sources */, + 9977302720725B5C009AF465 /* CustomEmojiRequest.swift in Sources */, 0BB9678A2031A74B0051D68C /* DrawingBrushColorViewModel.swift in Sources */, 9987B59C2093E60D007D277C /* RoomFilesRequest.swift in Sources */, 33FE57EA20E5A01400E5C548 /* UserDetailHeaderView.swift in Sources */, @@ -5312,7 +4740,6 @@ 8076FDC320485A2200114F28 /* SubscriptionUtils.swift in Sources */, 33D08E2420BD5EDC008D03EF /* ThemeableViewControllers.swift in Sources */, 415B10F5226604AB007B684B /* ThreadUnfollowRequest.swift in Sources */, - 804C0D9A232861F40021A880 /* CustomEmojiRequest.swift in Sources */, 35BCD301201A57EA00B4BE5A /* Ask.swift in Sources */, 4135A64421623F1300C1741A /* ImageCell.swift in Sources */, 33D08E3120BD92A5008D03EF /* ThemePreferenceCell.swift in Sources */, @@ -5500,289 +4927,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 41DF76EF1D2C50720028DBF8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 77C2612E1F97453600724A1F /* TextFieldSpec.swift in Sources */, - 4171ABA51E7C056E009FC3F0 /* AvatarViewSpec.swift in Sources */, - 994DA2B32065486D00083FB8 /* WebBrowserViewModelSpec.swift in Sources */, - 805DEC391FFE54820033151B /* CustomEmojiSpec.swift in Sources */, - D18675EA1F70A58B00406FB4 /* InfoRequestSpec.swift in Sources */, - 808792361FB145B200EFE77F /* PermissionManagerSpec.swift in Sources */, - 418BBC4F20D02FC200EC09F5 /* SubscriptionsTitleViewSpec.swift in Sources */, - 99F41BCE20658B1300B240FC /* EditProfileViewModelSpec.swift in Sources */, - 8062E33320A3AA760044F407 /* SubscriptionsClientSpec.swift in Sources */, - 417A70031D47918200FF46EE /* ResponseMessageSpec.swift in Sources */, - 0B92E65720F76393003DAB5A /* ShortcutsManagerSpec.swift in Sources */, - D18675EE1F716FBC00406FB4 /* LoginRequestSpec.swift in Sources */, - 41BA89241D303D8B00CBF526 /* AuthManagerSpec.swift in Sources */, - 412435C820CAC89C00A3602D /* SubscriptionsSortingViewModelSpec.swift in Sources */, - 35E892C4201BF2C900B4BE5A /* AlertSpec.swift in Sources */, - 994DA2B020653FB600083FB8 /* WebBrowserManagerSpec.swift in Sources */, - 80AE2540203E5A3000DC2867 /* SubscriptionExtensionsSpec.swift in Sources */, - 35BCD303201A9FB800B4BE5A /* AskSpec.swift in Sources */, - 415B10F82266051D007B684B /* ThreadsListRequestSpec.swift in Sources */, - 41DC7A241D386CA800896FC0 /* DateExtensionsSpec.swift in Sources */, - 41552F681D3035D80081438D /* SocketManagerSpec.swift in Sources */, - 807A8F6B1F9E4D0C00CC78DB /* OAuthManagerSpec.swift in Sources */, - 890DA8AE1F942A35007C022B /* RoomCreateRequestSpec.swift in Sources */, - 80235D221F7442F700A56CA5 /* RoomMembersRequestSpec.swift in Sources */, - 8013F8791FD6B63200EE1A4E /* VersionMiddlewareSpec.swift in Sources */, - 41F8487E1FA38B0A00C9AE84 /* PreferencesViewModelSpec.swift in Sources */, - 41E9BD0F208EA8C40084D4D8 /* SubscriptionQueriesSpec.swift in Sources */, - 808792381FB14B3300EFE77F /* PermissionSpec.swift in Sources */, - 8039442820B332E8002F317A /* RoomInviteRequestSpec.swift in Sources */, - 807C7C0C20751F06006B600E /* SpotlightRequestSpec.swift in Sources */, - 4161333C1D46E32F00E09DA2 /* UserSpec.swift in Sources */, - 802498F11F7A9BB4005477EC /* MeRequestSpec.swift in Sources */, - 411D76E71F39FA7B00B0A8DF /* AuthSettingsManagerSpec.swift in Sources */, - 9921BFAC2075AF5F00BB027A /* PublicSettingsRequestSpec.swift in Sources */, - 4156250B20BEDFA500D20576 /* ServersListViewModelSpec.swift in Sources */, - 8013F87D1FD6B64500EE1A4E /* VersionSpec.swift in Sources */, - D1411A2A1F6777F300D6EDF7 /* ChannelSpec.swift in Sources */, - 80A63C571F71D2E400FE5AC4 /* APISpec.swift in Sources */, - 8067DA9D206BC7D2005E3369 /* ReactMessageRequestSpec.swift in Sources */, - 418BBC4D20D02E0100EC09F5 /* SocketManagerConnectionHandlerSpec.swift in Sources */, - 77C2612C1F97453600724A1F /* CustomFieldsSpec.swift in Sources */, - 0BC0E8652032DF9B004BFAAF /* DrawingViewModelSpec.swift in Sources */, - 80E99F2C1FD8B4BA00B70B59 /* APIExtensionsSpec.swift in Sources */, - 41E423002044216000543877 /* UIColorExtensionSpec.swift in Sources */, - 419D78871FBDCF6C005FC7A2 /* InfoRequestHandlerSpec.swift in Sources */, - 411D40C620D2668B001A1035 /* SubscriptionLastMessageSpec.swift in Sources */, - 411498E11FC7A85400D66542 /* ChatTitleViewModelSpec.swift in Sources */, - 80E99F2F1FD8B4F400B70B59 /* UserExtensionsSpec.swift in Sources */, - 80247B3F1FE8582700878833 /* MessageReactionSpec.swift in Sources */, - 99BC81102107E3020084C948 /* DeepLinkSpec.swift in Sources */, - 80D41E0520924A8200034D1F /* AuthCanStarMessageSpec.swift in Sources */, - 8013F8431FD02D8F00EE1A4E /* ChatCollectionViewFlowLayoutSpec.swift in Sources */, - 77C2612D1F97453600724A1F /* SelectFieldSpec.swift in Sources */, - 807C7C1020751F40006B600E /* SpotlightClientSpec.swift in Sources */, - 998165CA204EBBA10059D346 /* UpdateUserRequestSpec.swift in Sources */, - 33093DC5207C7EAF00DD81F6 /* ChatNotificationSpec.swift in Sources */, - 9977302A20727E17009AF465 /* CustomEmojiRequestSpec.swift in Sources */, - 992B5AB8209A2890009C8123 /* RoomFilesRequestSpec.swift in Sources */, - 807A8F671F9E3D4F00CC78DB /* LoginServiceSpec.swift in Sources */, - 4161333A1D46E0A200E09DA2 /* AuthSpec.swift in Sources */, - 990B4B642069DC9900999FE7 /* EditProfileTableViewControllerSpec.swift in Sources */, - 33093DC7207C900900DD81F6 /* NotificationManagerSpec.swift in Sources */, - 8062E33120A3A2BB0044F407 /* RoomsRequestSpec.swift in Sources */, - 41DC7A1F1D3865FE00896FC0 /* MessageManagerSpec.swift in Sources */, - 41B96365207E492C0068F1A6 /* MessageTextValidatorSpec.swift in Sources */, - 415B10FE22660F31007B684B /* ThreadUnfollowRequestSpec.swift in Sources */, - 412435CA20CACF1400A3602D /* SubscriptionSortingManagerSpec.swift in Sources */, - 41BAE3E91D71C15A00C2445A /* URLExtensionSpec.swift in Sources */, - 998165CC204EDBA30059D346 /* UploadAvatarRequestSpec.swift in Sources */, - 8039441320AF17F1002F317A /* RoomKickRequestSpec.swift in Sources */, - 993E513A1FB1E18D006403D5 /* DraftMessageManagerSpec.swift in Sources */, - 3397604920EA72EE0054758A /* RuntimeAttributesThemeableViewSpec.swift in Sources */, - 416133401D46E6A800E09DA2 /* MessageSpec.swift in Sources */, - 41ADDD4B1E9E787E0007A458 /* LoaderViewSpec.swift in Sources */, - 8018B5701FBE070000C3CC25 /* PushManagerSpec.swift in Sources */, - 41366B2321D4DAEC00B9D832 /* JitsiViewModelSpec.swift in Sources */, - 80D41E092099393600034D1F /* PermissionsRequestSpec.swift in Sources */, - 418C74451FA3820F00499577 /* CompoundPickerViewDelegateSpec.swift in Sources */, - 80ECE2CE21D81EF10006AAE9 /* RoomHistoryRequestSpec.swift in Sources */, - 80D41E0D20993FCB00034D1F /* PinMessageRequestSpec.swift in Sources */, - 140A95DE202F1E6F003FD564 /* ChangeAppIconViewModelSpec.swift in Sources */, - 8013F8821FD6B6C600EE1A4E /* InfoClientSpec.swift in Sources */, - 77C261251F97445300724A1F /* AuthSettingsSpec.swift in Sources */, - 80054CF51FD96AFE00F5ECF9 /* MessagesClientSpec.swift in Sources */, - 411498E51FC7B8D500D66542 /* AttachmentSpec.swift in Sources */, - 8013F87C1FD6B64500EE1A4E /* MockAPI.swift in Sources */, - 41DC7A221D386B4700896FC0 /* StringExtensionSpec.swift in Sources */, - 41FB713C215B3841002B5187 /* MessagesViewModelSpec.swift in Sources */, - 80F1F8102080F307007998AB /* MarkdownManagerSpec.swift in Sources */, - 68D186DF1ED9714F0030EE8C /* MessageURLSpec.swift in Sources */, - 77C261271F97445F00724A1F /* DictionaryExtensionsSpec.swift in Sources */, - 418C74411FA3627F00499577 /* PickerViewDelegateSpec.swift in Sources */, - 410AD84720A9B73B00EAFC64 /* FileSpec.swift in Sources */, - 80A63C551F71BF3A00FE5AC4 /* UserInfoRequestSpec.swift in Sources */, - 33230AB520EA6B590031C71D /* ThemeableSpec.swift in Sources */, - B5893BF61F6C4B1D00365768 /* UserReviewManagerSpec.swift in Sources */, - 4151807C1EAE249F0000A039 /* ChatMessageTextViewModelSpec.swift in Sources */, - 80213C0B1FDFE35C00809E14 /* UploadMessageRequestSpec.swift in Sources */, - 80C110891FB62F7B00205BB1 /* OAuthViewControllerSpec.swift in Sources */, - 80E9DBD8209CB06200A48CA9 /* SubscriptionReadRequestSpec.swift in Sources */, - 415B10FC22660CFA007B684B /* ThreadFollowRequestSpec.swift in Sources */, - 411119B81F6825C30019854B /* NetworkManagerSpec.swift in Sources */, - 80D41E01209248F800034D1F /* StarMessageRequestSpec.swift in Sources */, - 8062E32E20A366360044F407 /* SubscriptionsRequestSpec.swift in Sources */, - 99F41BD020658C3400B240FC /* NewPasswordViewModelSpec.swift in Sources */, - 41E96C3120B88A0000ACBA92 /* RoomRolesRequestSpec.swift in Sources */, - 416296F91F41B42B00BCCEDD /* UploadHelperSpec.swift in Sources */, - 33230AB420EA6B230031C71D /* ThemeManagerSpec.swift in Sources */, - 80A63C511F719FB300FE5AC4 /* RoomInfoRequestSpec.swift in Sources */, - 41FE55531F6038D60071E97A /* DatabaseManagerSpec.swift in Sources */, - 416296FC1F41D42800BCCEDD /* DownloadManagerSpec.swift in Sources */, - 41FB713A215B0FFA002B5187 /* MessagesSizingViewModelSpec.swift in Sources */, - 41D94601225E262D00AE8FD8 /* GetMessageRequestSpec.swift in Sources */, - 41BFA0A72146D0C1008B9611 /* MessageManagerSystemMessageSpec.swift in Sources */, - 8013F8811FD6B6C600EE1A4E /* CommandsClientSpec.swift in Sources */, - 8045F4A120D14D1C00AA0F3C /* ReadReceiptsRequestSpec.swift in Sources */, - 99DBB87620903A7F00382DB2 /* SearchMessagesRequestSpec.swift in Sources */, - 0BC0E8612032DB20004BFAAF /* DrawingBrushColorSpec.swift in Sources */, - 418BBC5120D0309400EC09F5 /* ChatTitleViewSpec.swift in Sources */, - D1A403D91F6760BC00798EDA /* NSAttributedStringExtensionsSpec.swift in Sources */, - 8067290120081046009FE94D /* DeleteMessageRequestSpec.swift in Sources */, - 807FB53F2045F36E00E21429 /* EmojioneSpec.swift in Sources */, - 412DF591216F9EC3005161A4 /* UnmanagedMessageSpec.swift in Sources */, - 80819DD421CBF50D00DCAE91 /* SubscriptionPermalinkSpec.swift in Sources */, - 33093DC9207C949C00DD81F6 /* NotificationViewControllerSpec.swift in Sources */, - 990FF6D8207438D4007B4A53 /* RoomMentionsRequestSpec.swift in Sources */, - 8073719C1F963FA400D53ADF /* APITestCase.swift in Sources */, - 416133381D46DB1D00E09DA2 /* BaseModelSpec.swift in Sources */, - 89AFF3C81F94374D00D07A30 /* NewRoomViewControllerSpec.swift in Sources */, - 80A97F012006293D00A2774C /* EmojiSearcherSpec.swift in Sources */, - 415B10FA22660B24007B684B /* ThreadMessagesRequestSpec.swift in Sources */, - 4101BF031F8D11FB00F67E89 /* AppManagerSpec.swift in Sources */, - 0BBCC2C2204546CF001E3B6D /* LanguageViewModelSpec.swift in Sources */, - 8013F88C1FD6B7D400EE1A4E /* RunCommandRequestSpec.swift in Sources */, - 4161333E1D46E3AB00E09DA2 /* SubscriptionSpec.swift in Sources */, - 41534EE2208E4411009C5A17 /* AnalyticsCoordinatorSpec.swift in Sources */, - 4147CE811F5EE03300C322C3 /* ServerManagerSpec.swift in Sources */, - D1411A2C1F6779A200D6EDF7 /* MentionSpec.swift in Sources */, - 806C59A51FBB2F4C00C32D0A /* PostMessageRequestSpec.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 41DF76FA1D2C50720028DBF8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 41DF77031D2C50720028DBF8 /* RocketChatUITests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 807FB5542046E7DD00E21429 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4100B2842087779D00E2883A /* LogManager.swift in Sources */, - 80D0CE62205023710056B17F /* SECell.swift in Sources */, - 80FA90702056A33A0069038F /* SEComposeViewModel.swift in Sources */, - 80977AB2204EE21F00C41435 /* SendMessageRequest.swift in Sources */, - 41D51B0720A62DD60073E8E7 /* Role.swift in Sources */, - 80977AB6204EEF1E00C41435 /* SelectServer.swift in Sources */, - 807FB55B2046E7DD00E21429 /* SERoomsViewController.swift in Sources */, - 80977AC4204FEEA700C41435 /* SEComposeHeaderViewModel.swift in Sources */, - 99B15BCF20FD4681005A528F /* DatabaseManager.swift in Sources */, - 804273E2204EBD51006DF420 /* APIResponse.swift in Sources */, - 8029B2F22059B6F60067157B /* VideoInfo.swift in Sources */, - 80D0CE6620503C860056B17F /* SERoomCell.swift in Sources */, - 80FA90722056C1190069038F /* SEComposeTextCell.swift in Sources */, - 80D0CE60205016B40056B17F /* SEServerCell.swift in Sources */, - 803D866821062D7E00B1B697 /* SubscriptionsRequest.swift in Sources */, - 8076FDCC204863DF00114F28 /* AuthExtensions.swift in Sources */, - 412DF58F216F901D005161A4 /* UnmanagedAttachment.swift in Sources */, - 80D0CE64205034280056B17F /* SEServerCellModel.swift in Sources */, - 8076FDD3204864A400114F28 /* MessageReaction.swift in Sources */, - 80D0CE6C205080AA0056B17F /* SERoomCellModel.swift in Sources */, - 80FA90762056C24C0069038F /* SEComposeTextCellModel.swift in Sources */, - 80FA90782056C3AE0069038F /* SEComposeCellModel.swift in Sources */, - 80977AB9204EFBCC00C41435 /* SENavigation.swift in Sources */, - 8076FDDA20489F5900114F28 /* SEViewController.swift in Sources */, - 80977AC2204F37C200C41435 /* SEState.swift in Sources */, - 803D86762106333900B1B697 /* SESubscriptionModelMapping.swift in Sources */, - 804273E1204EBD51006DF420 /* APIRequest.swift in Sources */, - 8076FDCA204863B900114F28 /* Channel.swift in Sources */, - 8076FDBD2048598100114F28 /* Subscription.swift in Sources */, - 803D8670210631D700B1B697 /* ModelMappeable.swift in Sources */, - 4124D837209A06BD005374CD /* Permission.swift in Sources */, - 41D0DA5820991BAE008649E7 /* UploadMessageRequest.swift in Sources */, - 804273DE204EBD51006DF420 /* APIClient.swift in Sources */, - 8076FDCB204863C500114F28 /* Attachment.swift in Sources */, - 803D866E2106309200B1B697 /* DateExtension.swift in Sources */, - 804273D6204D7F38006DF420 /* AppGroup.swift in Sources */, - 8076FDE22048A7C500114F28 /* SEComposeHeaderViewController.swift in Sources */, - 80DC9A6E206BA96200032BE0 /* Localized.swift in Sources */, - 80D0CE732050BE680056B17F /* UIColorCSSColorsExtension.swift in Sources */, - 8076FDC82048639700114F28 /* Message.swift in Sources */, - 807FB569204729E500E21429 /* SEServersViewController.swift in Sources */, - 80A2A2AC2073BE3500857DAF /* RealmCurrent.swift in Sources */, - 80977ABB204EFC0F00C41435 /* SESceneTransition.swift in Sources */, - 80FA9066205313E20069038F /* SEContent.swift in Sources */, - 804273E0204EBD51006DF420 /* Version.swift in Sources */, - 802A4E112049C7340072CD23 /* SENavigationController.swift in Sources */, - 805C87D92052AA1900AD0EB0 /* SEComposeViewController.swift in Sources */, - 8076FDA62048536800114F28 /* BaseModel.swift in Sources */, - 80FA906A20569F890069038F /* SEComposeFileCell.swift in Sources */, - 804273DF204EBD51006DF420 /* APIError.swift in Sources */, - 803D866D2106307C00B1B697 /* SubscriptionModelMapping.swift in Sources */, - 803D866C21062F7400B1B697 /* SEStateAPI.swift in Sources */, - 806DB94320687697004ED8ED /* Alert.swift in Sources */, - 41132159216D1BA70061FA11 /* UserModelMapping.swift in Sources */, - 80D0CE752050BFD20056B17F /* AuthUser.swift in Sources */, - 8062E33620A5ED200044F407 /* APIRequestOption.swift in Sources */, - 800640F72049BA25006D990F /* SEScene.swift in Sources */, - 334F78F0211DE72D003D0C5A /* UnmanagedObject.swift in Sources */, - 8076FDBC2048596100114F28 /* URLExtension.swift in Sources */, - 80FA907D2057F4650069038F /* SubmitContent.swift in Sources */, - 80977AB4204EE41200C41435 /* DataExtension.swift in Sources */, - 99B802EE20BC3EF700230109 /* ImageManager.swift in Sources */, - 80D0CE6D205083280056B17F /* SubscriptionUser.swift in Sources */, - 8076FDB3204856E200114F28 /* Auth.swift in Sources */, - 8076FDC9204863AF00114F28 /* Mention.swift in Sources */, - 80FA906E2056A1F80069038F /* SEComposeFileCellModel.swift in Sources */, - 8076FDD22048648D00114F28 /* Email.swift in Sources */, - 806DB94420692518004ED8ED /* UIWindowExtensions.swift in Sources */, - 80D5637720593533008896D6 /* ParseItemProviders.swift in Sources */, - 8076FDE82048D3AD00114F28 /* UserDefaults+Group.swift in Sources */, - 80977AB0204EE21F00C41435 /* HTTPMethod.swift in Sources */, - 33F67A41212C0119004EB4A0 /* UnmanagedUser.swift in Sources */, - 4104C8762216E2A500576C92 /* APISecurity.swift in Sources */, - 807C7C022074307F006B600E /* KMPlaceholderTextView.swift in Sources */, - 80977AB1204EE21F00C41435 /* VersionMiddleware.swift in Sources */, - 99C29A38212A6BFA00521266 /* ObjectExtension.swift in Sources */, - 807FB582204837AF00E21429 /* SEServersViewModel.swift in Sources */, - 8076FDED2049A5F600114F28 /* SECellModel.swift in Sources */, - 8076FDCD204863FC00114F28 /* MessageURL.swift in Sources */, - 80977ABF204F36F200C41435 /* SESearchState.swift in Sources */, - 334F78EF211DE726003D0C5A /* UnmanagedSubscription.swift in Sources */, - 99B802EF20BC3F0800230109 /* StringExtensions.swift in Sources */, - 80FE8DF0206587510099170E /* SEFileDetailView.swift in Sources */, - 805C87DD2052AE1D00AD0EB0 /* SEXibInitializable.swift in Sources */, - 80D0CE6F20509C100056B17F /* SEAvatarView.swift in Sources */, - 8076FD9D2048510100114F28 /* AuthSettings.swift in Sources */, - 41C56D5A219C7AD40087115F /* AuthSettingsManager.swift in Sources */, - 8076FD9A20484A6000114F28 /* SEStore.swift in Sources */, - 80D0CE722050BD160056B17F /* UIColorExtension.swift in Sources */, - 8076FD9E2048510C00114F28 /* AuthManager.swift in Sources */, - 1496A87D20FA4845005C2E14 /* EnumExtensions.swift in Sources */, - 80D563752059325A008896D6 /* MimeType.swift in Sources */, - 8076FDA52048534200114F28 /* String+Random.swift in Sources */, - 80EF621A205A981600EF739B /* UIImageExtension.swift in Sources */, - 807FB56B20472A0F00E21429 /* SERoomsViewModel.swift in Sources */, - 8076FDCE2048642400114F28 /* User.swift in Sources */, - 804273DD204EBD51006DF420 /* API.swift in Sources */, - 8029B2F42059C1840067157B /* UIAlertController+StatusReport.swift in Sources */, - 80D0CE742050BFBE0056B17F /* AuthManagerCurrentUser.swift in Sources */, - 803D866F210630A800B1B697 /* ServerManager.swift in Sources */, - 80825F0D207EB2D800C477DE /* APIResource.swift in Sources */, - 80FA9068205314040069038F /* SEServer.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 41DF76F51D2C50720028DBF8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 41DF76DE1D2C50710028DBF8 /* Rocket.Chat */; - targetProxy = 41DF76F41D2C50720028DBF8 /* PBXContainerItemProxy */; - }; - 41DF77001D2C50720028DBF8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 41DF76DE1D2C50710028DBF8 /* Rocket.Chat */; - targetProxy = 41DF76FF1D2C50720028DBF8 /* PBXContainerItemProxy */; - }; - 807FB5612046E7DD00E21429 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 807FB5572046E7DD00E21429 /* Rocket.Chat.ShareExtension */; - targetProxy = 807FB5602046E7DD00E21429 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 0B92E66C20F767F8003DAB5A /* InfoPlist.strings */ = { isa = PBXVariantGroup; @@ -5973,26 +5119,25 @@ baseConfigurationReference = E05A718A50D61E3E547007AF /* Pods-Rocket.Chat.test.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; + APPLICATION_EXTENSION_API_ONLY = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = Rocket.Chat/Rocket.Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = S6UPZG7ZR3; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Rocket.Chat/External/JitsiMeet", - "$(PROJECT_DIR)/Rocket.Chat/External/WebRTC", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_OPTIMIZATION_LEVEL = s; INFOPLIST_FILE = Rocket.Chat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_SWIFT_FLAGS = "$(inherited) -D TEST"; - PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios; + PRODUCT_BUNDLE_IDENTIFIER = "com.credit-suisse.apac-chat.pta"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_DISABLE_SAFETY_CHECKS = NO; SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; SWIFT_OPTIMIZATION_LEVEL = "-O"; @@ -6001,68 +5146,6 @@ }; name = Test; }; - 33A37DF520EAB7E9004014B6 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 14F7905B55B69407BBC02BC5 /* Pods-Rocket.Chat.ShareExtension.test.xcconfig */; - buildSettings = { - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = Rocket.Chat.ShareExtension/Rocket.Chat.ShareExtension.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = Rocket.Chat.ShareExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.ios.Rocket-Chat-ShareExtension"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_OBJC_INTERFACE_HEADER_NAME = "Rocket_Chat-Swift.h"; - SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = arm64; - }; - name = Test; - }; - 33A37DF620EAB7E9004014B6 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 931A9FDD60FB42509A0958F5 /* Pods-Rocket.ChatTests.test.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = Rocket.ChatTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_VERSION = 4.2; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rocket.Chat.app/Rocket.Chat"; - }; - name = Test; - }; - 33A37DF720EAB7E9004014B6 /* Test */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = S6UPZG7ZR3; - INFOPLIST_FILE = Rocket.ChatUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; - TEST_TARGET_NAME = Rocket.Chat; - }; - name = Test; - }; 41DF77051D2C50720028DBF8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -6178,25 +5261,24 @@ baseConfigurationReference = BCF38696E8EC385488688390 /* Pods-Rocket.Chat.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; + APPLICATION_EXTENSION_API_ONLY = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = Rocket.Chat/Rocket.Chat.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = S6UPZG7ZR3; + DEVELOPMENT_TEAM = F73KYQA484; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Rocket.Chat/External/JitsiMeet", - "$(PROJECT_DIR)/Rocket.Chat/External/WebRTC", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Rocket.Chat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_SWIFT_FLAGS = "$(inherited) -D DEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios; + PRODUCT_BUNDLE_IDENTIFIER = "com.credit-suisse.apac-chat.pta"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_DISABLE_SAFETY_CHECKS = NO; SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -6210,95 +5292,30 @@ baseConfigurationReference = 5108B4F1453CB9F4E425E3F4 /* Pods-Rocket.Chat.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; + APPLICATION_EXTENSION_API_ONLY = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = Rocket.Chat/Rocket.Chat.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = S6UPZG7ZR3; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Rocket.Chat/External/JitsiMeet", - "$(PROJECT_DIR)/Rocket.Chat/External/WebRTC", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Rocket.Chat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_SWIFT_FLAGS = "$(inherited) -D RELEASE"; - PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios; + PRODUCT_BUNDLE_IDENTIFIER = "com.credit-suisse.apac-chat.pta"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; SWIFT_VERSION = 4.2; VALID_ARCHS = arm64; }; name = Release; }; - 41DF770B1D2C50720028DBF8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 58C7F7D8D91A05CA5D1C9FE0 /* Pods-Rocket.ChatTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = Rocket.ChatTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_VERSION = 4.2; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rocket.Chat.app/Rocket.Chat"; - }; - name = Debug; - }; - 41DF770C1D2C50720028DBF8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 35AE3FC690B1D3DC4E9DE715 /* Pods-Rocket.ChatTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = Rocket.ChatTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_VERSION = 4.2; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rocket.Chat.app/Rocket.Chat"; - }; - name = Release; - }; - 41DF770E1D2C50720028DBF8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = S6UPZG7ZR3; - INFOPLIST_FILE = Rocket.ChatUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; - TEST_TARGET_NAME = Rocket.Chat; - }; - name = Debug; - }; - 41DF770F1D2C50720028DBF8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = S6UPZG7ZR3; - INFOPLIST_FILE = Rocket.ChatUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; - TEST_TARGET_NAME = Rocket.Chat; - }; - name = Release; - }; 41E69F0420050A310040ADB2 /* Beta */ = { isa = XCBuildConfiguration; buildSettings = { @@ -6356,152 +5373,30 @@ baseConfigurationReference = AAC8D92081FF042E089F3063 /* Pods-Rocket.Chat.beta.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; + APPLICATION_EXTENSION_API_ONLY = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = Rocket.Chat/Rocket.Chat.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = S6UPZG7ZR3; + DEVELOPMENT_TEAM = F73KYQA484; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Rocket.Chat/External/JitsiMeet", - "$(PROJECT_DIR)/Rocket.Chat/External/WebRTC", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Rocket.Chat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_SWIFT_FLAGS = "$(inherited) -D BETA"; - PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios; + PRODUCT_BUNDLE_IDENTIFIER = "com.credit-suisse.apac-chat.pta"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; SWIFT_VERSION = 4.2; VALID_ARCHS = arm64; }; name = Beta; }; - 41E69F0620050A310040ADB2 /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FEDACA44BBB1C0633DEA6F3D /* Pods-Rocket.ChatTests.beta.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = Rocket.ChatTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_VERSION = 4.2; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rocket.Chat.app/Rocket.Chat"; - }; - name = Beta; - }; - 41E69F0720050A310040ADB2 /* Beta */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = S6UPZG7ZR3; - INFOPLIST_FILE = Rocket.ChatUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.Rocket-ChatUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; - TEST_TARGET_NAME = Rocket.Chat; - }; - name = Beta; - }; - 807FB5632046E7DD00E21429 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A633C5AF9C033AF48DB8EE0 /* Pods-Rocket.Chat.ShareExtension.debug.xcconfig */; - buildSettings = { - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = Rocket.Chat.ShareExtension/Rocket.Chat.ShareExtension.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = Rocket.Chat.ShareExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.ios.Rocket-Chat-ShareExtension"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_OBJC_INTERFACE_HEADER_NAME = "Rocket_Chat-Swift.h"; - SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = arm64; - }; - name = Debug; - }; - 807FB5642046E7DD00E21429 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 81DE5CC08EFE20733A40A51E /* Pods-Rocket.Chat.ShareExtension.release.xcconfig */; - buildSettings = { - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = Rocket.Chat.ShareExtension/Rocket.Chat.ShareExtension.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = Rocket.Chat.ShareExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.ios.Rocket-Chat-ShareExtension"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_OBJC_INTERFACE_HEADER_NAME = "Rocket_Chat-Swift.h"; - SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = arm64; - }; - name = Release; - }; - 807FB5652046E7DD00E21429 /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F87E8221BEB77AF190F06201 /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */; - buildSettings = { - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = Rocket.Chat.ShareExtension/Rocket.Chat.ShareExtension.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = S6UPZG7ZR3; - ENABLE_BITCODE = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = Rocket.Chat.ShareExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "chat.rocket.ios.Rocket-Chat-ShareExtension"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Rocket.Chat/Rocket.Chat-Bridge.h"; - SWIFT_OBJC_INTERFACE_HEADER_NAME = "Rocket_Chat-Swift.h"; - SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = arm64; - }; - name = Beta; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -6527,39 +5422,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 41DF770A1D2C50720028DBF8 /* Build configuration list for PBXNativeTarget "Rocket.ChatTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 41DF770B1D2C50720028DBF8 /* Debug */, - 33A37DF620EAB7E9004014B6 /* Test */, - 41DF770C1D2C50720028DBF8 /* Release */, - 41E69F0620050A310040ADB2 /* Beta */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 41DF770D1D2C50720028DBF8 /* Build configuration list for PBXNativeTarget "Rocket.ChatUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 41DF770E1D2C50720028DBF8 /* Debug */, - 33A37DF720EAB7E9004014B6 /* Test */, - 41DF770F1D2C50720028DBF8 /* Release */, - 41E69F0720050A310040ADB2 /* Beta */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 807FB5662046E7DD00E21429 /* Build configuration list for PBXNativeTarget "Rocket.Chat.ShareExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 807FB5632046E7DD00E21429 /* Debug */, - 33A37DF520EAB7E9004014B6 /* Test */, - 807FB5642046E7DD00E21429 /* Release */, - 807FB5652046E7DD00E21429 /* Beta */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 41DF76D71D2C50710028DBF8 /* Project object */; diff --git a/Rocket.Chat/AppDelegate.swift b/Rocket.Chat/AppDelegate.swift old mode 100644 new mode 100755 index 796603f013..89c1d41391 --- a/Rocket.Chat/AppDelegate.swift +++ b/Rocket.Chat/AppDelegate.swift @@ -51,6 +51,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { notificationWindow?.rootViewController = NotificationViewController.shared notificationWindow?.windowLevel = UIWindow.Level.alert notificationWindow?.makeKeyAndVisible() + NotificationViewController.shared.notificationViewIsHidden = true notificationWindow?.isHidden = true } diff --git a/Rocket.Chat/Controllers/Chat/ChannelActionsViewController.swift b/Rocket.Chat/Controllers/Chat/ChannelActionsViewController.swift old mode 100644 new mode 100755 index 8f4803310e..3674a28bdd --- a/Rocket.Chat/Controllers/Chat/ChannelActionsViewController.swift +++ b/Rocket.Chat/Controllers/Chat/ChannelActionsViewController.swift @@ -196,9 +196,10 @@ extension ChannelActionsViewController { } @objc func buttonVideoCallDidPressed(_ sender: UIButton) { - if let subscription = subscription { - AppManager.openVideoCall(room: subscription) - } + return +// if let subscription = subscription { +// AppManager.openVideoCall(room: subscription) +// } } } diff --git a/Rocket.Chat/Controllers/Chat/MessagesViewController.swift b/Rocket.Chat/Controllers/Chat/MessagesViewController.swift index 2c45cec6a5..c66ee29a30 100644 --- a/Rocket.Chat/Controllers/Chat/MessagesViewController.swift +++ b/Rocket.Chat/Controllers/Chat/MessagesViewController.swift @@ -633,7 +633,7 @@ extension MessagesViewController { return .zero } - override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { guard let item = viewModel.item(for: indexPath) else { return .zero } diff --git a/Rocket.Chat/Controllers/Notification/NotificationViewController.swift b/Rocket.Chat/Controllers/Notification/NotificationViewController.swift old mode 100644 new mode 100755 index ee478d7ed7..743d5087f6 --- a/Rocket.Chat/Controllers/Notification/NotificationViewController.swift +++ b/Rocket.Chat/Controllers/Notification/NotificationViewController.swift @@ -40,7 +40,17 @@ final class NotificationViewController: TopTransparentViewController { set { visibleConstraint?.isActive = !newValue hiddenConstraint?.isActive = newValue - (UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.alpha = newValue || isDeviceWithNotch ? 1 : 0 + + if #available(iOS 13.0, *) { + let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first + // Reference - https://stackoverflow.com/a/57899013/7316675 + let statusBar = UIView(frame: window?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.zero) + statusBar.alpha = newValue || isDeviceWithNotch ? 1 : 0 + window?.addSubview(statusBar) + } else { + (UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.alpha = newValue || isDeviceWithNotch ? 1 : 0 + } + } } diff --git a/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconCell.swift b/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconCell.swift old mode 100644 new mode 100755 index 35fa35d3e8..c65a2c61c6 --- a/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconCell.swift +++ b/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconCell.swift @@ -10,22 +10,16 @@ import UIKit final class ChangeAppIconCell: UICollectionViewCell { - @IBOutlet private weak var iconImageView: UIImageView! { - didSet { - iconImageView.isAccessibilityElement = true - } - } + @IBOutlet private weak var iconImageView: UIImageView! @IBOutlet private weak var checkImageView: UIImageView! @IBOutlet private weak var checkImageViewBackground: UIView! - func setIcon(name: (String, String), selected: Bool) { - iconImageView.image = UIImage(named: name.0) - iconImageView.accessibilityLabel = VOLocalizedString(name.1) + func setIcon(name: String, selected: Bool) { + iconImageView.image = UIImage(named: name) if selected { iconImageView.layer.borderColor = UIColor.RCBlue().cgColor iconImageView.layer.borderWidth = 3 - iconImageView.accessibilityTraits = .selected checkImageView.image = checkImageView.image?.imageWithTint(UIColor.RCBlue()) checkImageView.isHidden = false @@ -33,7 +27,6 @@ final class ChangeAppIconCell: UICollectionViewCell { } else { iconImageView.layer.borderColor = UIColor.RCLightGray().cgColor iconImageView.layer.borderWidth = 1 - iconImageView.accessibilityTraits = .none checkImageView.isHidden = true checkImageViewBackground.isHidden = true diff --git a/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewController.swift b/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewController.swift old mode 100644 new mode 100755 index b56a9b639c..401836d018 --- a/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewController.swift +++ b/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewController.swift @@ -61,16 +61,16 @@ extension ChangeAppIconViewController: UICollectionViewDataSource { fatalError("Could not dequeue reuable cell as ChangeAppIconCell") } - let icon = viewModel.availableIcons[indexPath.row] + let iconName = viewModel.availableIcons[indexPath.row] var isSelected = false if let selectedIcon = UIApplication.shared.alternateIconName { - isSelected = icon.iconName == selectedIcon + isSelected = iconName == selectedIcon } else { isSelected = indexPath.row == 0 } - cell.setIcon(name: icon, selected: isSelected) + cell.setIcon(name: iconName, selected: isSelected) return cell } @@ -102,7 +102,7 @@ extension ChangeAppIconViewController: UICollectionViewDelegateFlowLayout { extension ChangeAppIconViewController: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - changeIcon(name: viewModel.availableIcons[indexPath.row].iconName) + changeIcon(name: viewModel.availableIcons[indexPath.row]) } } diff --git a/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewModel.swift b/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewModel.swift old mode 100644 new mode 100755 index a6219ed543..46fa1026fd --- a/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewModel.swift +++ b/Rocket.Chat/Controllers/Preferences/ChangeAppIcon/ChangeAppIconViewModel.swift @@ -28,13 +28,13 @@ final class ChangeAppIconViewModel { } // Adding more available icons require proper entries in Info.plist file - let availableIcons: [(iconName: String, iconAccessibilityName: String)] = [ - ("Default", "preferences.icon.default"), - ("Black", "preferences.icon.black"), - ("Red", "preferences.icon.red"), - ("BnW", "preferences.icon.bnw"), - ("Grey", "preferences.icon.grey"), - ("White", "preferences.icon.white"), - ("Blue", "preferences.icon.blue") + let availableIcons = [ + "Default", + "Black", + "Red", + "BnW", + "Grey", + "White", + "Blue" ] } diff --git a/Rocket.Chat/Controllers/Preferences/PreferencesViewController.swift b/Rocket.Chat/Controllers/Preferences/PreferencesViewController.swift old mode 100644 new mode 100755 index 1893d5fb7b..88e1e985ca --- a/Rocket.Chat/Controllers/Preferences/PreferencesViewController.swift +++ b/Rocket.Chat/Controllers/Preferences/PreferencesViewController.swift @@ -128,7 +128,7 @@ final class PreferencesViewController: BaseTableViewController { } } - var switchTracking: UISwitch! { + @IBOutlet weak var switchTracking: UISwitch! { didSet { switchTracking.isOn = viewModel.trackingValue } @@ -140,19 +140,6 @@ final class PreferencesViewController: BaseTableViewController { } } - @IBOutlet weak var trackingCell: UITableViewCell! { - didSet { - // Configuring the switch control for the crash report cell - // The switch is being added as an accessory view to enable - // control with VoiceOver. - - switchTracking = UISwitch() - switchTracking.addTarget(self, action: #selector(crashReportSwitchDidChange(sender:)), for: .valueChanged) - switchTracking.accessibilityLabel = "" - trackingCell.accessoryView = switchTracking - } - } - override var navigationController: PreferencesNavigationController? { return super.navigationController as? PreferencesNavigationController } @@ -162,8 +149,6 @@ final class PreferencesViewController: BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() title = viewModel.title - - navigationItem.leftBarButtonItem?.accessibilityLabel = VOLocalizedString("auth.close.label") } override func viewWillAppear(_ animated: Bool) { @@ -357,7 +342,7 @@ final class PreferencesViewController: BaseTableViewController { } } - @objc func crashReportSwitchDidChange(sender: Any) { + @IBAction func crashReportSwitchDidChange(sender: Any) { AnalyticsCoordinator.toggleCrashReporting(disabled: !switchTracking.isOn) } diff --git a/Rocket.Chat/Controllers/Preferences/Profile/EditProfileTableViewController.swift b/Rocket.Chat/Controllers/Preferences/Profile/EditProfileTableViewController.swift old mode 100644 new mode 100755 index 0d64b512dd..f8063aba01 --- a/Rocket.Chat/Controllers/Preferences/Profile/EditProfileTableViewController.swift +++ b/Rocket.Chat/Controllers/Preferences/Profile/EditProfileTableViewController.swift @@ -46,11 +46,7 @@ final class EditProfileTableViewController: BaseTableViewController, MediaPicker } } - @IBOutlet weak var avatarButton: UIButton! { - didSet { - avatarButton.accessibilityLabel = avatarButtonAccessibilityLabel - } - } + @IBOutlet weak var avatarButton: UIButton! var avatarView: AvatarView = { let avatarView = AvatarView() @@ -221,7 +217,6 @@ final class EditProfileTableViewController: BaseTableViewController, MediaPicker if authSettings?.isAllowedToEditAvatar ?? false { avatarButton.setImage(editingAvatarImage, for: .normal) - avatarButton.accessibilityLabel = avatarEditingButtonAccessibilityLabel } enableUserInteraction() @@ -238,7 +233,6 @@ final class EditProfileTableViewController: BaseTableViewController, MediaPicker if authSettings?.isAllowedToEditAvatar ?? false { avatarButton.setImage(nil, for: .normal) - avatarButton.accessibilityLabel = avatarButtonAccessibilityLabel } disableUserInteraction() @@ -282,11 +276,6 @@ final class EditProfileTableViewController: BaseTableViewController, MediaPicker email.isEnabled = false } - // MARK: Accessibility - - var avatarButtonAccessibilityLabel: String? = VOLocalizedString("preferences.profile.edit.label") - var avatarEditingButtonAccessibilityLabel: String? = VOLocalizedString("preferences.profile.editing.label") - // MARK: Actions @IBAction func saveProfile(_ sender: UIBarButtonItem) { diff --git a/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift b/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift old mode 100644 new mode 100755 index 85239c0959..4af461482a --- a/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift +++ b/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift @@ -72,8 +72,6 @@ final class SubscriptionsViewController: BaseViewController { super.viewDidLoad() - navigationItem.leftBarButtonItem?.accessibilityLabel = VOLocalizedString("channel.preferences.label") - // If the device is not using the SplitView, we want to show // the 3D Touch preview for the cells if splitViewController?.detailViewController as? BaseNavigationController == nil { @@ -351,10 +349,7 @@ extension SubscriptionsViewController: UISearchBarDelegate { } func openServersList() { - guard - serversView == nil && - AppManager.supportsMultiServer - else { + guard serversView == nil else { return } diff --git a/Rocket.Chat/Controllers/Threads/ThreadsViewController.swift b/Rocket.Chat/Controllers/Threads/ThreadsViewController.swift old mode 100644 new mode 100755 index 51cdc2dae9..8725f14306 --- a/Rocket.Chat/Controllers/Threads/ThreadsViewController.swift +++ b/Rocket.Chat/Controllers/Threads/ThreadsViewController.swift @@ -158,7 +158,7 @@ extension ThreadsViewController { return .zero } - override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { guard let item = viewModel.item(for: indexPath) else { return .zero } diff --git a/Rocket.Chat/Controllers/User/UserDetail/UserDetailViewController.swift b/Rocket.Chat/Controllers/User/UserDetail/UserDetailViewController.swift old mode 100644 new mode 100755 index d30ce3cbba..286b454030 --- a/Rocket.Chat/Controllers/User/UserDetail/UserDetailViewController.swift +++ b/Rocket.Chat/Controllers/User/UserDetail/UserDetailViewController.swift @@ -62,7 +62,6 @@ class UserDetailViewController: BaseViewController, StoryboardInitializable { if let url = model.avatarUrl, let avatar = avatarImageView, let background = backgroundImageView { ImageManager.loadImage(with: url, into: avatar) - avatar.accessibilityLabel = model.name ImageManager.loadImage(with: url, into: background) } @@ -90,9 +89,10 @@ class UserDetailViewController: BaseViewController, StoryboardInitializable { } @IBAction func videoDidPress(_ sender: UIButton) { - if let subscription = Subscription.find(name: model.username, subscriptionType: [.directMessage]) { - AppManager.openVideoCall(room: subscription) - } + return +// if let subscription = Subscription.find(name: model.username, subscriptionType: [.directMessage]) { +// AppManager.openVideoCall(room: subscription) +// } } } diff --git a/Rocket.Chat/Controllers/Video Conferencing/JitsiViewController.swift b/Rocket.Chat/Controllers/Video Conferencing/JitsiViewController.swift old mode 100644 new mode 100755 index b6feca4665..f29a1610f4 --- a/Rocket.Chat/Controllers/Video Conferencing/JitsiViewController.swift +++ b/Rocket.Chat/Controllers/Video Conferencing/JitsiViewController.swift @@ -7,14 +7,14 @@ // import UIKit -import JitsiMeet +//import JitsiMeet final class JitsiViewController: UIViewController { let viewModel = JitsiViewModel() let timer = Timer() - @IBOutlet weak var jitsiMeetView: JitsiMeetView? + @IBOutlet weak var jitsiMeetView: UIView? deinit { timer.invalidate() @@ -35,21 +35,21 @@ final class JitsiViewController: UIViewController { self?.updateJitsiTimeout() } - jitsiMeetView?.delegate = self - jitsiMeetView?.loadURLObject([ - "config": [ - "startWithAudioMuted": false, - "startWithVideoMuted": true - ], - "context": [ - "user": [ - "name": viewModel.userDisplayName, - "avatar": viewModel.userAvatar - ], - "iss": "rocketchat-ios" - ], - "url": viewModel.videoCallURL - ]) +// jitsiMeetView?.delegate = self +// jitsiMeetView?.loadURLObject([ +// "config": [ +// "startWithAudioMuted": false, +// "startWithVideoMuted": true +// ], +// "context": [ +// "user": [ +// "name": viewModel.userDisplayName, +// "avatar": viewModel.userAvatar +// ], +// "iss": "rocketchat-ios" +// ], +// "url": viewModel.videoCallURL +// ]) } func updateJitsiTimeout() { @@ -70,42 +70,42 @@ final class JitsiViewController: UIViewController { // MARK: JitsiMeetViewDelegate -extension JitsiViewController: JitsiMeetViewDelegate { - - func onJitsiMeetViewDelegateEvent(name: String, data: [AnyHashable: Any]) { - Log.debug("[\(#file):\(#line)] JitsiMeetViewDelegate \(name) \(data)") - } - - func conferenceFailed(_ data: [AnyHashable: Any]) { - onJitsiMeetViewDelegateEvent(name: "CONFERENCE_FAILED", data: data) - Log.debug("conference Failed log is : \(data)") - } - - func conferenceJoined(_ data: [AnyHashable: Any]) { - onJitsiMeetViewDelegateEvent(name: "CONFERENCE_JOINED", data: data) - Log.debug("conference Joined log is : \(data)") - } - - func conferenceLeft(_ data: [AnyHashable: Any]) { - onJitsiMeetViewDelegateEvent(name: "CONFERENCE_LEFT", data: data) - Log.debug("conference Left log is : \(data)") - close() - } - - func conferenceWillJoin(_ data: [AnyHashable: Any]) { - onJitsiMeetViewDelegateEvent(name: "CONFERENCE_WILL_JOIN", data: data) - Log.debug("conference Join log is : \(data)") - } - - func conferenceWillLeave(_ data: [AnyHashable: Any]) { - onJitsiMeetViewDelegateEvent(name: "CONFERENCE_WILL_LEAVE", data: data) - Log.debug("conference Leave log is : \(data)") - close() - } - - func loadConfigError(_ data: [AnyHashable: Any]) { - onJitsiMeetViewDelegateEvent(name: "LOAD_CONFIG_ERROR", data: data) - Log.debug("conference Error log is : \(data)") - } - -} +//extension JitsiViewController: JitsiMeetViewDelegate { +// +// func onJitsiMeetViewDelegateEvent(name: String, data: [AnyHashable: Any]) { +// Log.debug("[\(#file):\(#line)] JitsiMeetViewDelegate \(name) \(data)") +// } +// +// func conferenceFailed(_ data: [AnyHashable: Any]) { +// onJitsiMeetViewDelegateEvent(name: "CONFERENCE_FAILED", data: data) +// Log.debug("conference Failed log is : \(data)") +// } +// +// func conferenceJoined(_ data: [AnyHashable: Any]) { +// onJitsiMeetViewDelegateEvent(name: "CONFERENCE_JOINED", data: data) +// Log.debug("conference Joined log is : \(data)") +// } +// +// func conferenceLeft(_ data: [AnyHashable: Any]) { +// onJitsiMeetViewDelegateEvent(name: "CONFERENCE_LEFT", data: data) +// Log.debug("conference Left log is : \(data)") +// close() +// } +// +// func conferenceWillJoin(_ data: [AnyHashable: Any]) { +// onJitsiMeetViewDelegateEvent(name: "CONFERENCE_WILL_JOIN", data: data) +// Log.debug("conference Join log is : \(data)") +// } +// +// func conferenceWillLeave(_ data: [AnyHashable: Any]) { +// onJitsiMeetViewDelegateEvent(name: "CONFERENCE_WILL_LEAVE", data: data) +// Log.debug("conference Leave log is : \(data)") +// close() +// } +// +// func loadConfigError(_ data: [AnyHashable: Any]) { +// onJitsiMeetViewDelegateEvent(name: "LOAD_CONFIG_ERROR", data: data) +// Log.debug("conference Error log is : \(data)") +// } +// +//} diff --git a/Rocket.Chat/Extensions/UISearchBar/UISearchBarTextField.swift b/Rocket.Chat/Extensions/UISearchBar/UISearchBarTextField.swift old mode 100644 new mode 100755 index da4d24e461..f60e7e803b --- a/Rocket.Chat/Extensions/UISearchBar/UISearchBarTextField.swift +++ b/Rocket.Chat/Extensions/UISearchBar/UISearchBarTextField.swift @@ -10,6 +10,11 @@ import UIKit extension UISearchBar { var textField: UITextField? { - return value(forKey: "_searchField") as? UITextField + if #available(iOS 13.0, *) { + return searchTextField + } else { + return value(forKey: "_searchField") as? UITextField + } + } } diff --git a/Rocket.Chat/Extensions/UIWindowExtensions.swift b/Rocket.Chat/Extensions/UIWindowExtensions.swift index 0af7eab386..73762a7a4a 100644 --- a/Rocket.Chat/Extensions/UIWindowExtensions.swift +++ b/Rocket.Chat/Extensions/UIWindowExtensions.swift @@ -40,10 +40,14 @@ extension UIWindow { newRootViewController.setNeedsStatusBarAppearanceUpdate() } - /// The presenting view controllers view doesn't get removed from the window as its currently transistioning and presenting a view controller - if let transitionViewClass = NSClassFromString("UITransitionView") { - for subview in subviews where subview.isKind(of: transitionViewClass) { - subview.removeFromSuperview() + if #available(iOS 13.0, *) { + + } else { + /// The presenting view controllers view doesn't get removed from the window as its currently transistioning and presenting a view controller + if let transitionViewClass = NSClassFromString("UITransitionView") { + for subview in subviews where subview.isKind(of: transitionViewClass) { + subview.removeFromSuperview() + } } } diff --git a/Rocket.Chat/Managers/Model/CustomEmojiManager.swift b/Rocket.Chat/Managers/Model/CustomEmojiManager.swift index 7f900d1c09..72e4e3f4eb 100644 --- a/Rocket.Chat/Managers/Model/CustomEmojiManager.swift +++ b/Rocket.Chat/Managers/Model/CustomEmojiManager.swift @@ -14,40 +14,6 @@ struct CustomEmojiManager { CustomEmoji.cachedEmojis = nil API.current(realm: realm)?.fetch(CustomEmojiRequest()) { response in - switch response { - case .resource(let resource): - guard resource.success else { - return Log.debug(resource.errorMessage) - } - - realm?.execute({ realm in - realm.delete(realm.objects(CustomEmoji.self)) - - let emoji = List() - resource.customEmoji.forEach({ customEmoji in - let realmCustomEmoji = realm.create(CustomEmoji.self, value: customEmoji, update: true) - emoji.append(realmCustomEmoji) - }) - - realm.add(emoji, update: true) - }) - - case .error(let error): - switch error { - case .version: - // For Rocket.Chat < 0.75.0 - oldSync(realm: realm) - default: - break - } - } - } - } - - private static func oldSync(realm: Realm? = Realm.current) { - CustomEmoji.cachedEmojis = nil - - API.current(realm: realm)?.fetch(CustomEmojiRequestOld()) { response in if case let .resource(resource) = response { guard resource.success else { return Log.debug(resource.errorMessage) @@ -67,4 +33,5 @@ struct CustomEmojiManager { } } } + } diff --git a/Rocket.Chat/Managers/NetworkManager.swift b/Rocket.Chat/Managers/NetworkManager.swift index d5bd5935f9..dbec6e6a6d 100644 --- a/Rocket.Chat/Managers/NetworkManager.swift +++ b/Rocket.Chat/Managers/NetworkManager.swift @@ -16,14 +16,18 @@ final class NetworkManager { static var isConnected: Bool { if self.shared.reachability != nil { - self.shared.reachability = Reachability() + do { + self.shared.reachability = try Reachability() + } catch _ {} } return self.shared.reachability?.connection != .none } func start() { - reachability = Reachability() + do { + reachability = try Reachability() + } catch _ {} reachability?.whenReachable = { reachability in if !SocketManager.isConnected() { diff --git a/Rocket.Chat/Managers/OAuthManager.swift b/Rocket.Chat/Managers/OAuthManager.swift old mode 100644 new mode 100755 index 784e9069d6..889e1a057b --- a/Rocket.Chat/Managers/OAuthManager.swift +++ b/Rocket.Chat/Managers/OAuthManager.swift @@ -54,9 +54,17 @@ final class OAuthManager { oauthSwift.authorizeURLHandler = handler self.oauthSwift = oauthSwift - return oauthSwift.authorize(withCallbackURL: callbackUrl, scope: scope, state: state, success: { _, _, _ in }, failure: { _ in - failure() - }) != nil + return oauthSwift.authorize(withCallbackURL: callbackUrl, scope: scope, state: state) { result in + switch result { + case .success(_, _, _): break +// self.showTokenAlert(name: serviceParameters["name"], credential: credential) + case .failure(_): + failure() + } + } != nil +// return oauthSwift.authorize(withCallbackURL: callbackUrl, scope: scope, state: state, success: { _, _, _ in }, failure: { _ in +// failure() +// }) != nil } static func credentialsForUrlFragment(_ fragment: String) -> OAuthCredentials? {