diff --git a/.travis.yml b/.travis.yml index 8f8c9b684..5c5e20309 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ branches: - master language: objective-c os: osx -osx_image: xcode7.3 +osx_image: xcode8.3 env: global: - LC_CTYPE=en_US.UTF-8 @@ -35,4 +35,4 @@ after_success: - | if [ "$TEST_TYPE" = iOS ] || [ "$TEST_TYPE" = macOS ]; then bash <(curl -s https://codecov.io/bash) - fi \ No newline at end of file + fi diff --git a/Cartfile.resolved b/Cartfile.resolved index 8c65dab96..148de4fa9 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,2 +1,2 @@ github "BoltsFramework/Bolts-ObjC" "1.8.4" -github "erikdoe/OCMock" "v3.3.1" +github "erikdoe/OCMock" "v3.4" diff --git a/Configurations/ParseUnitTests-iOS.xcconfig b/Configurations/ParseUnitTests-iOS.xcconfig index f96deb03d..2578bfac2 100644 --- a/Configurations/ParseUnitTests-iOS.xcconfig +++ b/Configurations/ParseUnitTests-iOS.xcconfig @@ -14,6 +14,8 @@ PRODUCT_NAME = ParseUnitTests-iOS PRODUCT_MODULE_NAME = ParseUnitTests PRODUCT_BUNDLE_IDENTIFIER = com.parse.unit.ios +SWIFT_VERSION = 3.0 + IPHONEOS_DEPLOYMENT_TARGET = 8.0 INFOPLIST_FILE = $(SRCROOT)/Tests/Resources/ParseUnitTests-iOS-Info.plist diff --git a/Configurations/ParseUnitTests-macOS.xcconfig b/Configurations/ParseUnitTests-macOS.xcconfig index ad8f050da..a79886a59 100644 --- a/Configurations/ParseUnitTests-macOS.xcconfig +++ b/Configurations/ParseUnitTests-macOS.xcconfig @@ -14,6 +14,8 @@ PRODUCT_NAME = ParseUnitTests-macOS PRODUCT_MODULE_NAME = ParseUnitTests PRODUCT_BUNDLE_IDENTIFIER = com.parse.unit.macOS +SWIFT_VERSION = 3.0 + INFOPLIST_FILE = $(SRCROOT)/Tests/Resources/ParseUnitTests-OSX-Info.plist USER_HEADER_SEARCH_PATHS = $(inherited) $(PARSE_DIR)/Parse/Internal/** diff --git a/LICENSE b/LICENSE index d98b0e04d..3ee08596d 100644 --- a/LICENSE +++ b/LICENSE @@ -28,3 +28,7 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +As of April 5, 2017, Parse, LLC has transferred this code to the parse-community organization, and will no longer be contributing to or distributing this code. diff --git a/PATENTS b/PATENTS index c67b292cc..8b27d1b3e 100644 --- a/PATENTS +++ b/PATENTS @@ -31,3 +31,7 @@ necessarily infringed by the Software standing alone. A "Patent Assertion" is any lawsuit or other action alleging direct, indirect, or contributory infringement or inducement to infringe any patent, including a cross-claim or counterclaim. + +----- + +As of April 5, 2017, Parse, LLC has transferred this code to the parse-community organization, and will no longer be contributing to or distributing this code. diff --git a/Parse.podspec b/Parse.podspec index 3e5ec9e9e..0adabdff4 100644 --- a/Parse.podspec +++ b/Parse.podspec @@ -1,12 +1,12 @@ Pod::Spec.new do |s| s.name = 'Parse' - s.version = '1.14.3' + s.version = '1.15.0' s.license = { :type => 'BSD', :file => 'LICENSE' } - s.homepage = 'https://www.parse.com/' + s.homepage = 'http://parseplatform.org/' s.summary = 'A library that gives you access to the powerful Parse cloud platform from your iOS/OS X/watchOS/tvOS app.' s.authors = 'Parse' - s.source = { :git => "https://github.com/ParsePlatform/Parse-SDK-iOS-OSX.git", :tag => s.version.to_s } + s.source = { :git => "https://github.com/parse-community/Parse-SDK-iOS-OSX.git", :tag => s.version.to_s } s.platform = :ios, :osx, :tvos, :watchos s.ios.deployment_target = '7.0' diff --git a/Parse.xcodeproj/project.pbxproj b/Parse.xcodeproj/project.pbxproj index d8df3f0a9..9cc1331dd 100644 --- a/Parse.xcodeproj/project.pbxproj +++ b/Parse.xcodeproj/project.pbxproj @@ -111,7 +111,6 @@ 8101556E1BB3832700D7C7BD /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 09809FB21434F98C00EC3E74 /* PFInternalUtils.m */; }; 8101556F1BB3832700D7C7BD /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 818D586E1B5DA43800813989 /* PFCommandRunning.m */; }; 810155711BB3832700D7C7BD /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 8103FA34198FC190000BAE3F /* BFTask+Private.m */; }; - 810155721BB3832700D7C7BD /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 81068EF01AE0845D00A34D13 /* PFEncoder.m */; }; 810155731BB3832700D7C7BD /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 81951F151ACB90DA00E142EB /* PFJSONSerialization.m */; }; 810155741BB3832700D7C7BD /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 805D3DA015E31241007E8D10 /* PFCloud.m */; }; 810155751BB3832700D7C7BD /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0925ABF613D791770095FEFA /* PFUser.m */; }; @@ -127,7 +126,6 @@ 8101557F1BB3832700D7C7BD /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EB6633198A7FA600851598 /* PFConfig.m */; }; 810155801BB3832700D7C7BD /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8148815F1B795CD4008763BF /* PFMultiProcessFileLockController.m */; }; 810155811BB3832700D7C7BD /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 81BBE12E19FFCB3700622646 /* PFURLConstructor.m */; }; - 810155821BB3832700D7C7BD /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 919311D619AE5EB20008FF12 /* PFDecoder.m */; }; 810155841BB3832700D7C7BD /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = F586B34F1B1E3BD70082E3BD /* PFBaseState.m */; }; 810155851BB3832700D7C7BD /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 91115EF81A097AF30092D1C9 /* PFEventuallyPin.m */; }; 810155861BB3832700D7C7BD /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5C42CD31B34F68C00C720D8 /* PFObjectSubclassingController.m */; }; @@ -178,7 +176,6 @@ 810155BC1BB3832700D7C7BD /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 81DDB90B199A3EC200B50F35 /* ParseModule.h */; }; 810155BD1BB3832700D7C7BD /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E2D5AF19DDAAB5009053A1 /* PFAssert.h */; }; 810155BE1BB3832700D7C7BD /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDEF1B4DF63600007B7F /* PFUserState.h */; }; - 810155BF1BB3832700D7C7BD /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 919311D519AE5EB20008FF12 /* PFDecoder.h */; }; 810155C01BB3832700D7C7BD /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B119FB1488429D002B5594 /* PFGeoPointPrivate.h */; }; 810155C11BB3832700D7C7BD /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */; }; 810155C21BB3832700D7C7BD /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 09809FB11434F98C00EC3E74 /* PFInternalUtils.h */; }; @@ -215,7 +212,6 @@ 810155E51BB3832700D7C7BD /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDF51B4DF66500007B7F /* PFMutableUserState.h */; }; 810155E61BB3832700D7C7BD /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 815EE92119F989380076FE5D /* PFRESTConfigCommand.h */; }; 810155E81BB3832700D7C7BD /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E7A2231B6042BD006CB680 /* PFObjectFileCodingLogic.h */; }; - 810155E91BB3832700D7C7BD /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EEF1AE0845D00A34D13 /* PFEncoder.h */; }; 810155EA1BB3832700D7C7BD /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 812B7AB61AF2FA4800D15FF5 /* PFQueryController.h */; }; 810155EB1BB3832700D7C7BD /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BCB4BF1B744626006659CB /* PFURLSessionDataTaskDelegate_Private.h */; }; 810155EC1BB3832700D7C7BD /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F5556A171B66F47900410837 /* PFURLSession_Private.h */; }; @@ -329,10 +325,6 @@ 8103FA3E198FC190000BAE3F /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 8103FA36198FC190000BAE3F /* PFCategoryLoader.m */; }; 81068EBB1ADE462500A34D13 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EBA1ADE462500A34D13 /* Parse_Private.h */; }; 81068EBC1ADE462500A34D13 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EBA1ADE462500A34D13 /* Parse_Private.h */; }; - 81068EF11AE0845D00A34D13 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EEF1AE0845D00A34D13 /* PFEncoder.h */; }; - 81068EF21AE0845D00A34D13 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EEF1AE0845D00A34D13 /* PFEncoder.h */; }; - 81068EF31AE0845D00A34D13 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 81068EF01AE0845D00A34D13 /* PFEncoder.m */; }; - 81068EF41AE0845D00A34D13 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 81068EF01AE0845D00A34D13 /* PFEncoder.m */; }; 810749AE1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */; }; 810749AF1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */; }; 810749B01B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 810749AD1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.m */; }; @@ -803,7 +795,6 @@ 815F23191BD04D150054659F /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 09809FB21434F98C00EC3E74 /* PFInternalUtils.m */; }; 815F231A1BD04D150054659F /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 818D586E1B5DA43800813989 /* PFCommandRunning.m */; }; 815F231C1BD04D150054659F /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 8103FA34198FC190000BAE3F /* BFTask+Private.m */; }; - 815F231D1BD04D150054659F /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 81068EF01AE0845D00A34D13 /* PFEncoder.m */; }; 815F231E1BD04D150054659F /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 81951F151ACB90DA00E142EB /* PFJSONSerialization.m */; }; 815F231F1BD04D150054659F /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 805D3DA015E31241007E8D10 /* PFCloud.m */; }; 815F23201BD04D150054659F /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0925ABF613D791770095FEFA /* PFUser.m */; }; @@ -819,7 +810,6 @@ 815F232A1BD04D150054659F /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EB6633198A7FA600851598 /* PFConfig.m */; }; 815F232B1BD04D150054659F /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8148815F1B795CD4008763BF /* PFMultiProcessFileLockController.m */; }; 815F232C1BD04D150054659F /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 81BBE12E19FFCB3700622646 /* PFURLConstructor.m */; }; - 815F232D1BD04D150054659F /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 919311D619AE5EB20008FF12 /* PFDecoder.m */; }; 815F232F1BD04D150054659F /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = F586B34F1B1E3BD70082E3BD /* PFBaseState.m */; }; 815F23301BD04D150054659F /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 91115EF81A097AF30092D1C9 /* PFEventuallyPin.m */; }; 815F23311BD04D150054659F /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5C42CD31B34F68C00C720D8 /* PFObjectSubclassingController.m */; }; @@ -873,7 +863,6 @@ 815F23681BD04D150054659F /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 81DDB90B199A3EC200B50F35 /* ParseModule.h */; }; 815F23691BD04D150054659F /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E2D5AF19DDAAB5009053A1 /* PFAssert.h */; }; 815F236A1BD04D150054659F /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDEF1B4DF63600007B7F /* PFUserState.h */; }; - 815F236B1BD04D150054659F /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 919311D519AE5EB20008FF12 /* PFDecoder.h */; }; 815F236C1BD04D150054659F /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B119FB1488429D002B5594 /* PFGeoPointPrivate.h */; }; 815F236D1BD04D150054659F /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */; }; 815F236E1BD04D150054659F /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 09809FB11434F98C00EC3E74 /* PFInternalUtils.h */; }; @@ -913,7 +902,6 @@ 815F23911BD04D150054659F /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDF51B4DF66500007B7F /* PFMutableUserState.h */; }; 815F23921BD04D150054659F /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 815EE92119F989380076FE5D /* PFRESTConfigCommand.h */; }; 815F23941BD04D150054659F /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E7A2231B6042BD006CB680 /* PFObjectFileCodingLogic.h */; }; - 815F23951BD04D150054659F /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EEF1AE0845D00A34D13 /* PFEncoder.h */; }; 815F23961BD04D150054659F /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 812B7AB61AF2FA4800D15FF5 /* PFQueryController.h */; }; 815F23971BD04D150054659F /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BCB4BF1B744626006659CB /* PFURLSessionDataTaskDelegate_Private.h */; }; 815F23981BD04D150054659F /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F5556A171B66F47900410837 /* PFURLSession_Private.h */; }; @@ -1115,7 +1103,6 @@ 8166FCE91B504083003841A2 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8166FCE61B504083003841A2 /* PFPushManager.h */; }; 8166FCEA1B504083003841A2 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8166FCE71B504083003841A2 /* PFPushManager.m */; }; 8166FCEB1B504083003841A2 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8166FCE71B504083003841A2 /* PFPushManager.m */; }; - 8169701C19BE94BB00EC1D1F /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 919311D619AE5EB20008FF12 /* PFDecoder.m */; }; 816A64631C29D2820029B197 /* PFConfig+Synchronous.h in Headers */ = {isa = PBXBuildFile; fileRef = 816A64621C29D2820029B197 /* PFConfig+Synchronous.h */; settings = {ATTRIBUTES = (Public, ); }; }; 816A64641C29D2820029B197 /* PFConfig+Synchronous.h in Headers */ = {isa = PBXBuildFile; fileRef = 816A64621C29D2820029B197 /* PFConfig+Synchronous.h */; settings = {ATTRIBUTES = (Public, ); }; }; 816A64651C29D2820029B197 /* PFConfig+Synchronous.h in Headers */ = {isa = PBXBuildFile; fileRef = 816A64621C29D2820029B197 /* PFConfig+Synchronous.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -1316,7 +1303,6 @@ 81C3826B19CCAD850066284A /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 818D049A19A3B84500BEE20F /* PFThreadsafety.m */; }; 81C3826C19CCADA00066284A /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DDB90C199A3EC200B50F35 /* ParseModule.m */; }; 81C3826F19CCADA00066284A /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1FDDCB14E1B1BD00A77007 /* PFCommandCache.m */; }; - 81C3827019CCADA00066284A /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 919311D619AE5EB20008FF12 /* PFDecoder.m */; }; 81C3827319CCADA00066284A /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 09809FB21434F98C00EC3E74 /* PFInternalUtils.m */; }; 81C3827419CCADA00066284A /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 81D0EE9819B0A2060000AE75 /* PFKeychainStore.m */; }; 81C3827819CCADA00066284A /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6390EB1C151EDDA40001B779 /* PFMulticastDelegate.m */; }; @@ -1430,7 +1416,6 @@ 81C5834F1C3B0A98000063C6 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 818D586E1B5DA43800813989 /* PFCommandRunning.m */; }; 81C583501C3B0A98000063C6 /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81CD66591B4DA5BA0042FC0B /* PFInstallationController.m */; }; 81C583511C3B0A98000063C6 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 8103FA34198FC190000BAE3F /* BFTask+Private.m */; }; - 81C583521C3B0A98000063C6 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 81068EF01AE0845D00A34D13 /* PFEncoder.m */; }; 81C583531C3B0A98000063C6 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 81951F151ACB90DA00E142EB /* PFJSONSerialization.m */; }; 81C583541C3B0A98000063C6 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 805D3DA015E31241007E8D10 /* PFCloud.m */; }; 81C583551C3B0A98000063C6 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0925ABF613D791770095FEFA /* PFUser.m */; }; @@ -1446,7 +1431,6 @@ 81C5835F1C3B0A98000063C6 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EB6633198A7FA600851598 /* PFConfig.m */; }; 81C583601C3B0A98000063C6 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8148815F1B795CD4008763BF /* PFMultiProcessFileLockController.m */; }; 81C583611C3B0A98000063C6 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 81BBE12E19FFCB3700622646 /* PFURLConstructor.m */; }; - 81C583621C3B0A98000063C6 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 919311D619AE5EB20008FF12 /* PFDecoder.m */; }; 81C583631C3B0A98000063C6 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 44B78E12157D21B000A5E97F /* PFInstallation.m */; }; 81C583641C3B0A98000063C6 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = F586B34F1B1E3BD70082E3BD /* PFBaseState.m */; }; 81C583651C3B0A98000063C6 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 91115EF81A097AF30092D1C9 /* PFEventuallyPin.m */; }; @@ -1511,7 +1495,6 @@ 81C583A21C3B0A98000063C6 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 81DDB90B199A3EC200B50F35 /* ParseModule.h */; }; 81C583A31C3B0A98000063C6 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E2D5AF19DDAAB5009053A1 /* PFAssert.h */; }; 81C583A41C3B0A98000063C6 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDEF1B4DF63600007B7F /* PFUserState.h */; }; - 81C583A51C3B0A98000063C6 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 919311D519AE5EB20008FF12 /* PFDecoder.h */; }; 81C583A61C3B0A98000063C6 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B119FB1488429D002B5594 /* PFGeoPointPrivate.h */; }; 81C583A71C3B0A98000063C6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */; }; 81C583A81C3B0A98000063C6 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 09809FB11434F98C00EC3E74 /* PFInternalUtils.h */; }; @@ -1556,7 +1539,6 @@ 81C583CF1C3B0A98000063C6 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 815EE92119F989380076FE5D /* PFRESTConfigCommand.h */; }; 81C583D01C3B0A98000063C6 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 81C9C9F519FEA89200D514C5 /* PFRESTPushCommand.h */; }; 81C583D11C3B0A98000063C6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E7A2231B6042BD006CB680 /* PFObjectFileCodingLogic.h */; }; - 81C583D21C3B0A98000063C6 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EEF1AE0845D00A34D13 /* PFEncoder.h */; }; 81C583D31C3B0A98000063C6 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 812B7AB61AF2FA4800D15FF5 /* PFQueryController.h */; }; 81C583D41C3B0A98000063C6 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BCB4BF1B744626006659CB /* PFURLSessionDataTaskDelegate_Private.h */; }; 81C583D51C3B0A98000063C6 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F5556A171B66F47900410837 /* PFURLSession_Private.h */; }; @@ -1788,7 +1770,6 @@ 81C584C21C3B0AA1000063C6 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 09809FB21434F98C00EC3E74 /* PFInternalUtils.m */; }; 81C584C31C3B0AA1000063C6 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 818D586E1B5DA43800813989 /* PFCommandRunning.m */; }; 81C584C41C3B0AA1000063C6 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 8103FA34198FC190000BAE3F /* BFTask+Private.m */; }; - 81C584C51C3B0AA1000063C6 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 81068EF01AE0845D00A34D13 /* PFEncoder.m */; }; 81C584C61C3B0AA1000063C6 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 81951F151ACB90DA00E142EB /* PFJSONSerialization.m */; }; 81C584C71C3B0AA1000063C6 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 805D3DA015E31241007E8D10 /* PFCloud.m */; }; 81C584C81C3B0AA1000063C6 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0925ABF613D791770095FEFA /* PFUser.m */; }; @@ -1805,7 +1786,6 @@ 81C584D31C3B0AA1000063C6 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EB6633198A7FA600851598 /* PFConfig.m */; }; 81C584D41C3B0AA1000063C6 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8148815F1B795CD4008763BF /* PFMultiProcessFileLockController.m */; }; 81C584D51C3B0AA1000063C6 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 81BBE12E19FFCB3700622646 /* PFURLConstructor.m */; }; - 81C584D61C3B0AA1000063C6 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 919311D619AE5EB20008FF12 /* PFDecoder.m */; }; 81C584D71C3B0AA1000063C6 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = F586B34F1B1E3BD70082E3BD /* PFBaseState.m */; }; 81C584D81C3B0AA1000063C6 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 91115EF81A097AF30092D1C9 /* PFEventuallyPin.m */; }; 81C584D91C3B0AA1000063C6 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5C42CD31B34F68C00C720D8 /* PFObjectSubclassingController.m */; }; @@ -1862,7 +1842,6 @@ 81C5850E1C3B0AA1000063C6 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E2D5AF19DDAAB5009053A1 /* PFAssert.h */; }; 81C5850F1C3B0AA1000063C6 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDEF1B4DF63600007B7F /* PFUserState.h */; }; 81C585101C3B0AA1000063C6 /* PFUser+Synchronous.h in Headers */ = {isa = PBXBuildFile; fileRef = 816A64871C29E5A00029B197 /* PFUser+Synchronous.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81C585111C3B0AA1000063C6 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 919311D519AE5EB20008FF12 /* PFDecoder.h */; }; 81C585121C3B0AA1000063C6 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B119FB1488429D002B5594 /* PFGeoPointPrivate.h */; }; 81C585131C3B0AA1000063C6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */; }; 81C585141C3B0AA1000063C6 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 09809FB11434F98C00EC3E74 /* PFInternalUtils.h */; }; @@ -1905,7 +1884,6 @@ 81C585391C3B0AA1000063C6 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDF51B4DF66500007B7F /* PFMutableUserState.h */; }; 81C5853A1C3B0AA1000063C6 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 815EE92119F989380076FE5D /* PFRESTConfigCommand.h */; }; 81C5853B1C3B0AA1000063C6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E7A2231B6042BD006CB680 /* PFObjectFileCodingLogic.h */; }; - 81C5853C1C3B0AA1000063C6 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EEF1AE0845D00A34D13 /* PFEncoder.h */; }; 81C5853D1C3B0AA1000063C6 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 812B7AB61AF2FA4800D15FF5 /* PFQueryController.h */; }; 81C5853E1C3B0AA1000063C6 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BCB4BF1B744626006659CB /* PFURLSessionDataTaskDelegate_Private.h */; }; 81C5853F1C3B0AA1000063C6 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F5556A171B66F47900410837 /* PFURLSession_Private.h */; }; @@ -2126,7 +2104,6 @@ 81C586211C3B0AA9000063C6 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 09809FB21434F98C00EC3E74 /* PFInternalUtils.m */; }; 81C586221C3B0AA9000063C6 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 818D586E1B5DA43800813989 /* PFCommandRunning.m */; }; 81C586231C3B0AA9000063C6 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 8103FA34198FC190000BAE3F /* BFTask+Private.m */; }; - 81C586241C3B0AA9000063C6 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 81068EF01AE0845D00A34D13 /* PFEncoder.m */; }; 81C586251C3B0AA9000063C6 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 81951F151ACB90DA00E142EB /* PFJSONSerialization.m */; }; 81C586261C3B0AA9000063C6 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 805D3DA015E31241007E8D10 /* PFCloud.m */; }; 81C586271C3B0AA9000063C6 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0925ABF613D791770095FEFA /* PFUser.m */; }; @@ -2142,7 +2119,6 @@ 81C586311C3B0AA9000063C6 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EB6633198A7FA600851598 /* PFConfig.m */; }; 81C586321C3B0AA9000063C6 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8148815F1B795CD4008763BF /* PFMultiProcessFileLockController.m */; }; 81C586331C3B0AA9000063C6 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 81BBE12E19FFCB3700622646 /* PFURLConstructor.m */; }; - 81C586341C3B0AA9000063C6 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 919311D619AE5EB20008FF12 /* PFDecoder.m */; }; 81C586351C3B0AA9000063C6 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = F586B34F1B1E3BD70082E3BD /* PFBaseState.m */; }; 81C586361C3B0AA9000063C6 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 91115EF81A097AF30092D1C9 /* PFEventuallyPin.m */; }; 81C586371C3B0AA9000063C6 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5C42CD31B34F68C00C720D8 /* PFObjectSubclassingController.m */; }; @@ -2196,7 +2172,6 @@ 81C586691C3B0AA9000063C6 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E2D5AF19DDAAB5009053A1 /* PFAssert.h */; }; 81C5866A1C3B0AA9000063C6 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 814BCDEF1B4DF63600007B7F /* PFUserState.h */; }; 81C5866B1C3B0AA9000063C6 /* PFFile+Deprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 81CA29DC1C28EA7400C4F34A /* PFFile+Deprecated.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81C5866C1C3B0AA9000063C6 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 919311D519AE5EB20008FF12 /* PFDecoder.h */; }; 81C5866D1C3B0AA9000063C6 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B119FB1488429D002B5594 /* PFGeoPointPrivate.h */; }; 81C5866E1C3B0AA9000063C6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */; }; 81C5866F1C3B0AA9000063C6 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 09809FB11434F98C00EC3E74 /* PFInternalUtils.h */; }; @@ -2237,7 +2212,6 @@ 81C586921C3B0AA9000063C6 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 815EE92119F989380076FE5D /* PFRESTConfigCommand.h */; }; 81C586931C3B0AA9000063C6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E7A2231B6042BD006CB680 /* PFObjectFileCodingLogic.h */; }; 81C586941C3B0AA9000063C6 /* PFUserDefaultsPersistenceGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 818ADC741BE1A8BA00C8006C /* PFUserDefaultsPersistenceGroup.h */; }; - 81C586951C3B0AA9000063C6 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81068EEF1AE0845D00A34D13 /* PFEncoder.h */; }; 81C586961C3B0AA9000063C6 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 812B7AB61AF2FA4800D15FF5 /* PFQueryController.h */; }; 81C586971C3B0AA9000063C6 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BCB4BF1B744626006659CB /* PFURLSessionDataTaskDelegate_Private.h */; }; 81C586981C3B0AA9000063C6 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F5556A171B66F47900410837 /* PFURLSession_Private.h */; }; @@ -2546,6 +2520,34 @@ 91DF24961A09BAF100CFC7D4 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DF24941A09BAF100CFC7D4 /* PFPinningEventuallyQueue.h */; }; 91DF24971A09BAF100CFC7D4 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 91DF24951A09BAF100CFC7D4 /* PFPinningEventuallyQueue.m */; }; 91DF24991A0B0FF200CFC7D4 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DF24981A0B0FF200CFC7D4 /* PFEventuallyQueue_Private.h */; }; + 96FAF7A01D8443E300EAB299 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF79E1D8443E300EAB299 /* PFDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7A11D8443E300EAB299 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF79F1D8443E300EAB299 /* PFDecoder.m */; }; + 96FAF7A21D8443F500EAB299 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF79E1D8443E300EAB299 /* PFDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7A31D8443F600EAB299 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF79E1D8443E300EAB299 /* PFDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7A41D8443F800EAB299 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF79E1D8443E300EAB299 /* PFDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7A51D8443F800EAB299 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF79E1D8443E300EAB299 /* PFDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7A61D8443F900EAB299 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF79E1D8443E300EAB299 /* PFDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7A71D8443F900EAB299 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF79E1D8443E300EAB299 /* PFDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7A81D84440600EAB299 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF79F1D8443E300EAB299 /* PFDecoder.m */; }; + 96FAF7AA1D84441600EAB299 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF79F1D8443E300EAB299 /* PFDecoder.m */; }; + 96FAF7AC1D84441800EAB299 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF79F1D8443E300EAB299 /* PFDecoder.m */; }; + 96FAF7AD1D84441900EAB299 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF79F1D8443E300EAB299 /* PFDecoder.m */; }; + 96FAF7AE1D84441900EAB299 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF79F1D8443E300EAB299 /* PFDecoder.m */; }; + 96FAF7AF1D84441A00EAB299 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF79F1D8443E300EAB299 /* PFDecoder.m */; }; + 96FAF7B81D84461D00EAB299 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF7B61D84461D00EAB299 /* PFEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7B91D84461D00EAB299 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF7B71D84461D00EAB299 /* PFEncoder.m */; }; + 96FAF7BA1D84462700EAB299 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF7B61D84461D00EAB299 /* PFEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7BB1D84462700EAB299 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF7B71D84461D00EAB299 /* PFEncoder.m */; }; + 96FAF7BC1D84462700EAB299 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF7B61D84461D00EAB299 /* PFEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7BD1D84462700EAB299 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF7B71D84461D00EAB299 /* PFEncoder.m */; }; + 96FAF7BE1D84462800EAB299 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF7B61D84461D00EAB299 /* PFEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7BF1D84462800EAB299 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF7B71D84461D00EAB299 /* PFEncoder.m */; }; + 96FAF7C01D84462900EAB299 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF7B61D84461D00EAB299 /* PFEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7C11D84462900EAB299 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF7B71D84461D00EAB299 /* PFEncoder.m */; }; + 96FAF7C21D84462900EAB299 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF7B61D84461D00EAB299 /* PFEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7C31D84462900EAB299 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF7B71D84461D00EAB299 /* PFEncoder.m */; }; + 96FAF7C41D84462900EAB299 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FAF7B61D84461D00EAB299 /* PFEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96FAF7C51D84462900EAB299 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FAF7B71D84461D00EAB299 /* PFEncoder.m */; }; 970110691630B44200AB761E /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1FDDCB14E1B1BD00A77007 /* PFCommandCache.m */; }; 9701106E1630B44200AB761E /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 09809FB21434F98C00EC3E74 /* PFInternalUtils.m */; }; 970110721630B44200AB761E /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6390EB1C151EDDA40001B779 /* PFMulticastDelegate.m */; }; @@ -2566,6 +2568,34 @@ 97DE045A16321492007154E8 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97DE045916321492007154E8 /* Security.framework */; }; 97DE045C163214C0007154E8 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97DE045B163214C0007154E8 /* SystemConfiguration.framework */; }; 97EB055516F7CCE400E09147 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 9739513916B9D28E0010B884 /* PFAnalytics.m */; }; + A6E2958C1E96173D009917BF /* ParseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E295801E961727009917BF /* ParseManagerPrivate.h */; }; + A6E2958D1E96173F009917BF /* ParseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E295801E961727009917BF /* ParseManagerPrivate.h */; }; + A6E2958E1E961741009917BF /* ParseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E295801E961727009917BF /* ParseManagerPrivate.h */; }; + A6E2958F1E961742009917BF /* ParseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E295801E961727009917BF /* ParseManagerPrivate.h */; }; + A6E295901E961744009917BF /* ParseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E295801E961727009917BF /* ParseManagerPrivate.h */; }; + A6E295911E961744009917BF /* ParseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E295801E961727009917BF /* ParseManagerPrivate.h */; }; + A6E295921E961744009917BF /* ParseManagerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E295801E961727009917BF /* ParseManagerPrivate.h */; }; + B141169E1E5BC24B00F70D7A /* PFFileUploadController.h in Headers */ = {isa = PBXBuildFile; fileRef = B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14116F41E5D075C00F70D7A /* PFFileUploadController.h in Headers */ = {isa = PBXBuildFile; fileRef = B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14116F51E5D075E00F70D7A /* PFFileUploadController.h in Headers */ = {isa = PBXBuildFile; fileRef = B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14116F61E5D076000F70D7A /* PFFileUploadController.h in Headers */ = {isa = PBXBuildFile; fileRef = B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14116F71E5D076100F70D7A /* PFFileUploadController.h in Headers */ = {isa = PBXBuildFile; fileRef = B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14116F81E5D076200F70D7A /* PFFileUploadController.h in Headers */ = {isa = PBXBuildFile; fileRef = B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14116F91E5D076300F70D7A /* PFFileUploadController.h in Headers */ = {isa = PBXBuildFile; fileRef = B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14117031E5D078E00F70D7A /* PFFileUploadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */; }; + B14117041E5D078E00F70D7A /* PFFileUploadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */; }; + B14117051E5D078E00F70D7A /* PFFileUploadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */; }; + B14117061E5D078E00F70D7A /* PFFileUploadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */; }; + B14117071E5D078E00F70D7A /* PFFileUploadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */; }; + B14117081E5D078E00F70D7A /* PFFileUploadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */; }; + B14117091E5D078E00F70D7A /* PFFileUploadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */; }; + B141170B1E5D081500F70D7A /* PFFileUploadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B141170A1E5D081500F70D7A /* PFFileUploadResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B141170C1E5D081500F70D7A /* PFFileUploadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B141170A1E5D081500F70D7A /* PFFileUploadResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B141170D1E5D081500F70D7A /* PFFileUploadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B141170A1E5D081500F70D7A /* PFFileUploadResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B141170E1E5D081500F70D7A /* PFFileUploadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B141170A1E5D081500F70D7A /* PFFileUploadResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B141170F1E5D081500F70D7A /* PFFileUploadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B141170A1E5D081500F70D7A /* PFFileUploadResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14117101E5D081500F70D7A /* PFFileUploadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B141170A1E5D081500F70D7A /* PFFileUploadResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14117111E5D081500F70D7A /* PFFileUploadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B141170A1E5D081500F70D7A /* PFFileUploadResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; F50C66331B33A708001941A6 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F50C66311B33A708001941A6 /* PFPushUtilities.h */; }; F50C66341B33A708001941A6 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F50C66321B33A708001941A6 /* PFPushUtilities.m */; }; F50C667C1B34B231001941A6 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F50C66321B33A708001941A6 /* PFPushUtilities.m */; }; @@ -2625,7 +2655,6 @@ F5B0B2F11B449F1D00F3EBC4 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8124C8811B27542A00758E00 /* PFCoreDataProvider.h */; }; F5B0B2F21B449F1D00F3EBC4 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 81DDB90B199A3EC200B50F35 /* ParseModule.h */; }; F5B0B2F31B449F1D00F3EBC4 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E2D5AF19DDAAB5009053A1 /* PFAssert.h */; }; - F5B0B2F81B449F1D00F3EBC4 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 919311D519AE5EB20008FF12 /* PFDecoder.h */; }; F5B0B2FA1B449F1D00F3EBC4 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B119FB1488429D002B5594 /* PFGeoPointPrivate.h */; }; F5B0B2FC1B449F1D00F3EBC4 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 09809FB11434F98C00EC3E74 /* PFInternalUtils.h */; }; F5B0B2FD1B449F1D00F3EBC4 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 81D0EE9719B0A2060000AE75 /* PFKeychainStore.h */; }; @@ -2651,7 +2680,6 @@ F5B0B3271B44A33100F3EBC4 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C8F2BE1B1F7E6B00CD98E7 /* PFAsyncTaskQueue.h */; }; F5B0B3281B44A33100F3EBC4 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = F586B34E1B1E3BD70082E3BD /* PFBaseState.h */; }; F5B0B32B1B44A33100F3EBC4 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8124C8811B27542A00758E00 /* PFCoreDataProvider.h */; }; - F5B0B32C1B44A33100F3EBC4 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 919311D519AE5EB20008FF12 /* PFDecoder.h */; }; F5B0B32E1B44A33100F3EBC4 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B119FB1488429D002B5594 /* PFGeoPointPrivate.h */; }; F5B0B3301B44A33100F3EBC4 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 09809FB11434F98C00EC3E74 /* PFInternalUtils.h */; }; F5B0B3331B44A33100F3EBC4 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E18AE41623835600B17A67 /* PFLocationManager.h */; }; @@ -3005,8 +3033,6 @@ 8103FA35198FC190000BAE3F /* PFCategoryLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFCategoryLoader.h; sourceTree = ""; }; 8103FA36198FC190000BAE3F /* PFCategoryLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFCategoryLoader.m; sourceTree = ""; }; 81068EBA1ADE462500A34D13 /* Parse_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Parse_Private.h; sourceTree = ""; }; - 81068EEF1AE0845D00A34D13 /* PFEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFEncoder.h; sourceTree = ""; }; - 81068EF01AE0845D00A34D13 /* PFEncoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFEncoder.m; sourceTree = ""; }; 810749AC1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; 810749AD1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; 810B7D751A0291FF003C0909 /* PFMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMacros.h; sourceTree = ""; }; @@ -3452,13 +3478,15 @@ 91115EF71A097AF30092D1C9 /* PFEventuallyPin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFEventuallyPin.h; sourceTree = ""; }; 91115EF81A097AF30092D1C9 /* PFEventuallyPin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFEventuallyPin.m; sourceTree = ""; }; 913B9F2C1A311FF40040247C /* PFCommandCache_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFCommandCache_Private.h; sourceTree = ""; }; - 919311D519AE5EB20008FF12 /* PFDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFDecoder.h; sourceTree = ""; }; - 919311D619AE5EB20008FF12 /* PFDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFDecoder.m; sourceTree = ""; }; 91DF24901A09BA7600CFC7D4 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFEventuallyQueue.h; sourceTree = ""; }; 91DF24911A09BA7600CFC7D4 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFEventuallyQueue.m; sourceTree = ""; }; 91DF24941A09BAF100CFC7D4 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFPinningEventuallyQueue.h; sourceTree = ""; }; 91DF24951A09BAF100CFC7D4 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFPinningEventuallyQueue.m; sourceTree = ""; }; 91DF24981A0B0FF200CFC7D4 /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFEventuallyQueue_Private.h; sourceTree = ""; }; + 96FAF79E1D8443E300EAB299 /* PFDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFDecoder.h; sourceTree = ""; }; + 96FAF79F1D8443E300EAB299 /* PFDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFDecoder.m; sourceTree = ""; }; + 96FAF7B61D84461D00EAB299 /* PFEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFEncoder.h; sourceTree = ""; }; + 96FAF7B71D84461D00EAB299 /* PFEncoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFEncoder.m; sourceTree = ""; }; 97010FAC1630B18F00AB761E /* Parse.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Parse.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 970110191630B1FE00AB761E /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 9739513816B9D28E0010B884 /* PFAnalytics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFAnalytics.h; sourceTree = ""; }; @@ -3470,6 +3498,10 @@ 97DE045B163214C0007154E8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 97E18AE41623835600B17A67 /* PFLocationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFLocationManager.h; sourceTree = ""; }; 97E18AE51623835600B17A67 /* PFLocationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFLocationManager.m; sourceTree = ""; }; + A6E295801E961727009917BF /* ParseManagerPrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ParseManagerPrivate.h; sourceTree = ""; }; + B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFFileUploadController.h; sourceTree = ""; }; + B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFFileUploadResult.m; sourceTree = ""; }; + B141170A1E5D081500F70D7A /* PFFileUploadResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFFileUploadResult.h; sourceTree = ""; }; E9BBE98E16D18E5800CD7B52 /* PFObject+Subclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = SOURCE_ROOT; }; E9E81E8316EEF93E001D034F /* PFSubclassing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFSubclassing.h; sourceTree = ""; }; F50C66311B33A708001941A6 /* PFPushUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFPushUtilities.h; sourceTree = ""; }; @@ -3658,10 +3690,16 @@ 81EB6633198A7FA600851598 /* PFConfig.m */, 0925ABEB13D791770095FEFA /* PFConstants.h */, 0925ABEC13D791770095FEFA /* PFConstants.m */, + 96FAF79E1D8443E300EAB299 /* PFDecoder.h */, + 96FAF79F1D8443E300EAB299 /* PFDecoder.m */, + 96FAF7B61D84461D00EAB299 /* PFEncoder.h */, + 96FAF7B71D84461D00EAB299 /* PFEncoder.m */, 81DEF07D199C42A300D86A21 /* PFFile.h */, 816A646B1C29DA680029B197 /* PFFile+Synchronous.h */, 81CA29DC1C28EA7400C4F34A /* PFFile+Deprecated.h */, 81DEF07E199C42A300D86A21 /* PFFile.m */, + B141170A1E5D081500F70D7A /* PFFileUploadResult.h */, + B141169D1E5BC24B00F70D7A /* PFFileUploadController.h */, 09B119F614880776002B5594 /* PFGeoPoint.h */, 09B119F714880776002B5594 /* PFGeoPoint.m */, 44B78E11157D21B000A5E97F /* PFInstallation.h */, @@ -3733,6 +3771,7 @@ 09EEA1351435143500E3A3FA /* ParseInternal.h */, 81A245F11B1FB188006A6953 /* PFDataProvider.h */, 812714861AE6F1270076AE8D /* ParseManager.h */, + A6E295801E961727009917BF /* ParseManagerPrivate.h */, 812714871AE6F1270076AE8D /* ParseManager.m */, 8124C8811B27542A00758E00 /* PFCoreDataProvider.h */, 8196D58B1B0BD23B000465A1 /* PFCoreManager.h */, @@ -3744,10 +3783,6 @@ 816AC9B81A3F48250031D94C /* PFApplication.h */, 816AC9B91A3F48250031D94C /* PFApplication.m */, F556643F1C10F37E006DEC12 /* ParseClientConfiguration_Private.h */, - 81068EEF1AE0845D00A34D13 /* PFEncoder.h */, - 81068EF01AE0845D00A34D13 /* PFEncoder.m */, - 919311D519AE5EB20008FF12 /* PFDecoder.h */, - 919311D619AE5EB20008FF12 /* PFDecoder.m */, 81BB6E1F1B0E7A1A00465C38 /* PFBase64Encoder.h */, 81BB6E201B0E7A1A00465C38 /* PFBase64Encoder.m */, 815618FE1A1F79AC0076504A /* PFDateFormatter.h */, @@ -3817,6 +3852,7 @@ 099C082113AC013900D71869 /* Tests */, 09D3364C139C54940098E916 /* Frameworks */, 09D3364B139C54940098E916 /* Products */, + 4AAB99061EE6D7E50073D7A7 /* Recovered References */, ); indentWidth = 4; sourceTree = ""; @@ -3874,6 +3910,16 @@ name = Views; sourceTree = ""; }; + 4AAB99061EE6D7E50073D7A7 /* Recovered References */ = { + isa = PBXGroup; + children = ( + F5B0B3121B44A05100F3EBC4 /* PFPaymentTransactionObserver_Private.h */, + 97DE045B163214C0007154E8 /* SystemConfiguration.framework */, + 97DE045016321428007154E8 /* CoreLocation.framework */, + ); + name = "Recovered References"; + sourceTree = ""; + }; 7C83A03B15B4A609005E2C8E /* Commands */ = { isa = PBXGroup; children = ( @@ -5030,6 +5076,7 @@ 81EB595D1AF46434001EA1FC /* PFFileController.m */, F50E486C1B83ED270055094D /* PFFileStagingController.h */, F50E486D1B83ED270055094D /* PFFileStagingController.m */, + B14116FB1E5D078E00F70D7A /* PFFileUploadResult.m */, ); path = Controller; sourceTree = ""; @@ -5236,6 +5283,7 @@ 810155AA1BB3832700D7C7BD /* PFAnalytics.h in Headers */, 810155AC1BB3832700D7C7BD /* PFSQLiteDatabaseController.h in Headers */, 810155AD1BB3832700D7C7BD /* PFRESTFileCommand.h in Headers */, + 96FAF7C21D84462900EAB299 /* PFEncoder.h in Headers */, 810155AE1BB3832700D7C7BD /* PFObjectState_Private.h in Headers */, 810155AF1BB3832700D7C7BD /* PFBase64Encoder.h in Headers */, 810155B01BB3832700D7C7BD /* Parse.h in Headers */, @@ -5254,7 +5302,6 @@ 810155BD1BB3832700D7C7BD /* PFAssert.h in Headers */, 810155BE1BB3832700D7C7BD /* PFUserState.h in Headers */, 81CA29E11C28EB2000C4F34A /* PFFile+Deprecated.h in Headers */, - 810155BF1BB3832700D7C7BD /* PFDecoder.h in Headers */, 810155C01BB3832700D7C7BD /* PFGeoPointPrivate.h in Headers */, 810155C11BB3832700D7C7BD /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, 810155C21BB3832700D7C7BD /* PFInternalUtils.h in Headers */, @@ -5295,7 +5342,6 @@ 810155E61BB3832700D7C7BD /* PFRESTConfigCommand.h in Headers */, 810155E81BB3832700D7C7BD /* PFObjectFileCodingLogic.h in Headers */, 818ADC851BE1A8BA00C8006C /* PFUserDefaultsPersistenceGroup.h in Headers */, - 810155E91BB3832700D7C7BD /* PFEncoder.h in Headers */, 810155EA1BB3832700D7C7BD /* PFQueryController.h in Headers */, 810155EB1BB3832700D7C7BD /* PFURLSessionDataTaskDelegate_Private.h in Headers */, 810155EC1BB3832700D7C7BD /* PFURLSession_Private.h in Headers */, @@ -5321,6 +5367,7 @@ 810156001BB3832700D7C7BD /* PFSQLiteDatabaseResult.h in Headers */, 810156011BB3832700D7C7BD /* PFAnalytics_Private.h in Headers */, 81CA29DB1C28E15900C4F34A /* PFCloud+Deprecated.h in Headers */, + B14117101E5D081500F70D7A /* PFFileUploadResult.h in Headers */, 810156021BB3832700D7C7BD /* PFConfigController.h in Headers */, 810156031BB3832700D7C7BD /* PFRelationState.h in Headers */, 810156041BB3832700D7C7BD /* PFFileState_Private.h in Headers */, @@ -5356,6 +5403,7 @@ 810156241BB3832700D7C7BD /* PFACLState_Private.h in Headers */, 810156251BB3832700D7C7BD /* PFObject.h in Headers */, 810156271BB3832700D7C7BD /* PFSQLiteDatabase.h in Headers */, + B14116F81E5D076200F70D7A /* PFFileUploadController.h in Headers */, 8101562A1BB3832700D7C7BD /* PFKeyValueCache.h in Headers */, 8101562C1BB3832700D7C7BD /* PFSessionController.h in Headers */, 403093701C81F0B200CF09F8 /* PFQueryConstants.h in Headers */, @@ -5387,8 +5435,10 @@ 818ADC791BE1A8BA00C8006C /* PFFilePersistenceGroup.h in Headers */, 81CA29F31C28ECFD00C4F34A /* PFUser+Deprecated.h in Headers */, 810156481BB3832700D7C7BD /* PFURLSessionDataTaskDelegate.h in Headers */, + 96FAF7A61D8443F900EAB299 /* PFDecoder.h in Headers */, 81CA29D21C28DF8F00C4F34A /* PFAnonymousUtils+Deprecated.h in Headers */, 810156491BB3832700D7C7BD /* PFDateFormatter.h in Headers */, + A6E295911E961744009917BF /* ParseManagerPrivate.h in Headers */, 8101564A1BB3832700D7C7BD /* PFCloudCodeController.h in Headers */, 8101564B1BB3832700D7C7BD /* PFMultiProcessFileLockController.h in Headers */, 8101564C1BB3832700D7C7BD /* PFCurrentUserController.h in Headers */, @@ -5432,6 +5482,7 @@ 815F23561BD04D150054659F /* PFAnalytics.h in Headers */, 815F23581BD04D150054659F /* PFSQLiteDatabaseController.h in Headers */, 815F23591BD04D150054659F /* PFRESTFileCommand.h in Headers */, + B14116F61E5D076000F70D7A /* PFFileUploadController.h in Headers */, 815F235A1BD04D150054659F /* PFObjectState_Private.h in Headers */, 815F235B1BD04D150054659F /* PFBase64Encoder.h in Headers */, 815E764F1BDF168A00E1DF8E /* PFPersistenceController.h in Headers */, @@ -5451,7 +5502,6 @@ 815F23691BD04D150054659F /* PFAssert.h in Headers */, 815F236A1BD04D150054659F /* PFUserState.h in Headers */, 816A648A1C29E5A00029B197 /* PFUser+Synchronous.h in Headers */, - 815F236B1BD04D150054659F /* PFDecoder.h in Headers */, 815F236C1BD04D150054659F /* PFGeoPointPrivate.h in Headers */, 815F236D1BD04D150054659F /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, 815F236E1BD04D150054659F /* PFInternalUtils.h in Headers */, @@ -5462,6 +5512,7 @@ 815F23731BD04D150054659F /* PFCurrentObjectControlling.h in Headers */, 815F23741BD04D150054659F /* PFPaymentTransactionObserver.h in Headers */, 815BE6C21C29D17C00738638 /* PFCloud+Synchronous.h in Headers */, + B141170E1E5D081500F70D7A /* PFFileUploadResult.h in Headers */, 815F23751BD04D150054659F /* PFUserConstants.h in Headers */, 815F23761BD04D150054659F /* PFInstallationIdentifierStore_Private.h in Headers */, 815F23771BD04D150054659F /* PFTaskQueue.h in Headers */, @@ -5483,6 +5534,7 @@ 815F23871BD04D150054659F /* PFObjectController.h in Headers */, 815F23881BD04D150054659F /* PFAlertView.h in Headers */, 815F23891BD04D150054659F /* PFNetworkCommand.h in Headers */, + 96FAF7BE1D84462800EAB299 /* PFEncoder.h in Headers */, 818ADC841BE1A8BA00C8006C /* PFUserDefaultsPersistenceGroup.h in Headers */, 815F238A1BD04D150054659F /* PFOfflineQueryLogic.h in Headers */, 815F238B1BD04D150054659F /* PFJSONSerialization.h in Headers */, @@ -5494,7 +5546,6 @@ 815F23911BD04D150054659F /* PFMutableUserState.h in Headers */, 815F23921BD04D150054659F /* PFRESTConfigCommand.h in Headers */, 815F23941BD04D150054659F /* PFObjectFileCodingLogic.h in Headers */, - 815F23951BD04D150054659F /* PFEncoder.h in Headers */, 815F23961BD04D150054659F /* PFQueryController.h in Headers */, 815F23971BD04D150054659F /* PFURLSessionDataTaskDelegate_Private.h in Headers */, 815F23981BD04D150054659F /* PFURLSession_Private.h in Headers */, @@ -5549,6 +5600,7 @@ 815F23C51BD04D150054659F /* PFURLSessionCommandRunner.h in Headers */, 815F23C61BD04D150054659F /* PFRESTObjectCommand.h in Headers */, 815F23C71BD04D150054659F /* PFCommandRunning.h in Headers */, + A6E2958F1E961742009917BF /* ParseManagerPrivate.h in Headers */, 815F23C81BD04D150054659F /* PFRESTCloudCommand.h in Headers */, 815F23C91BD04D150054659F /* PFProduct.h in Headers */, 815F23CA1BD04D150054659F /* PFQuery.h in Headers */, @@ -5601,6 +5653,7 @@ 815F23FB1BD04D150054659F /* PFPropertyInfo.h in Headers */, 815F23FC1BD04D150054659F /* PFSubclassing.h in Headers */, 815F23FD1BD04D150054659F /* PFObjectBatchController.h in Headers */, + 96FAF7A41D8443F800EAB299 /* PFDecoder.h in Headers */, 815F23FE1BD04D150054659F /* PFAnalyticsUtilities.h in Headers */, 815F23FF1BD04D150054659F /* PFObject+Subclass.h in Headers */, 815F24001BD04D150054659F /* PFUserState_Private.h in Headers */, @@ -5654,6 +5707,7 @@ 818AAA7619D36B1C00FC1B3C /* PFFile.h in Headers */, 816AC9BA1A3F48250031D94C /* PFApplication.h in Headers */, F5B0B2EC1B449F1D00F3EBC4 /* BFTask+Private.h in Headers */, + A6E2958C1E96173D009917BF /* ParseManagerPrivate.h in Headers */, F5B0B2ED1B449F1D00F3EBC4 /* PFCategoryLoader.h in Headers */, F5B0B2EE1B449F1D00F3EBC4 /* PFThreadsafety.h in Headers */, F5B0B2EF1B449F1D00F3EBC4 /* PFRelationState_Private.h in Headers */, @@ -5663,7 +5717,8 @@ F5B0B2F21B449F1D00F3EBC4 /* ParseModule.h in Headers */, F5B0B2F31B449F1D00F3EBC4 /* PFAssert.h in Headers */, 814BCDF11B4DF63600007B7F /* PFUserState.h in Headers */, - F5B0B2F81B449F1D00F3EBC4 /* PFDecoder.h in Headers */, + B141169E1E5BC24B00F70D7A /* PFFileUploadController.h in Headers */, + B141170B1E5D081500F70D7A /* PFFileUploadResult.h in Headers */, F5B0B2FA1B449F1D00F3EBC4 /* PFGeoPointPrivate.h in Headers */, 810749AE1B74662B00682EEB /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, F5B0B2FC1B449F1D00F3EBC4 /* PFInternalUtils.h in Headers */, @@ -5695,6 +5750,7 @@ F50E486E1B83ED270055094D /* PFFileStagingController.h in Headers */, 8166FC731B50376D003841A2 /* PFObjectController.h in Headers */, F5B0B2EB1B449EEF00F3EBC4 /* PFAlertView.h in Headers */, + 96FAF7B81D84461D00EAB299 /* PFEncoder.h in Headers */, 8119C9971A76E28F0085B516 /* PFNetworkCommand.h in Headers */, 8166FCB01B503886003841A2 /* PFOfflineQueryLogic.h in Headers */, 81CA29EB1C28ECA300C4F34A /* PFQuery+Deprecated.h in Headers */, @@ -5708,7 +5764,6 @@ 815EE92319F989380076FE5D /* PFRESTConfigCommand.h in Headers */, 81C9C9F719FEA89200D514C5 /* PFRESTPushCommand.h in Headers */, 81E7A2251B6042BD006CB680 /* PFObjectFileCodingLogic.h in Headers */, - 81068EF11AE0845D00A34D13 /* PFEncoder.h in Headers */, 812B7AB81AF2FA4800D15FF5 /* PFQueryController.h in Headers */, 81BCB4C81B744626006659CB /* PFURLSessionDataTaskDelegate_Private.h in Headers */, F5556A181B66F47900410837 /* PFURLSession_Private.h in Headers */, @@ -5838,6 +5893,7 @@ F5C42CD41B34F68C00C720D8 /* PFObjectSubclassingController.h in Headers */, 8143E65D1AFC1BA5008C4E06 /* PFOfflineQueryController.h in Headers */, 818AAA8119D36B1C00FC1B3C /* PFUser.h in Headers */, + 96FAF7A01D8443E300EAB299 /* PFDecoder.h in Headers */, F51D06371B793A110044539E /* PFSQLiteDatabase_Private.h in Headers */, F51535001B571E9100C49F56 /* PFACLState.h in Headers */, 81BF4ABC1B0BF64B00A3D75B /* PFCurrentConfigController.h in Headers */, @@ -5848,6 +5904,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + B14116F41E5D075C00F70D7A /* PFFileUploadController.h in Headers */, 81C583801C3B0A98000063C6 /* PFPinningObjectStore.h in Headers */, 81C583811C3B0A98000063C6 /* PFMacros.h in Headers */, 81C583821C3B0A98000063C6 /* PFPersistenceController.h in Headers */, @@ -5885,7 +5942,6 @@ 81C583A21C3B0A98000063C6 /* ParseModule.h in Headers */, 81C583A31C3B0A98000063C6 /* PFAssert.h in Headers */, 81C583A41C3B0A98000063C6 /* PFUserState.h in Headers */, - 81C583A51C3B0A98000063C6 /* PFDecoder.h in Headers */, 81C583A61C3B0A98000063C6 /* PFGeoPointPrivate.h in Headers */, 81C583A71C3B0A98000063C6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, 81C583A81C3B0A98000063C6 /* PFInternalUtils.h in Headers */, @@ -5930,7 +5986,6 @@ 81C583CF1C3B0A98000063C6 /* PFRESTConfigCommand.h in Headers */, 81C583D01C3B0A98000063C6 /* PFRESTPushCommand.h in Headers */, 81C583D11C3B0A98000063C6 /* PFObjectFileCodingLogic.h in Headers */, - 81C583D21C3B0A98000063C6 /* PFEncoder.h in Headers */, 81C583D31C3B0A98000063C6 /* PFQueryController.h in Headers */, 81C583D41C3B0A98000063C6 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, 81C583D51C3B0A98000063C6 /* PFURLSession_Private.h in Headers */, @@ -5958,6 +6013,7 @@ 81C583EB1C3B0A98000063C6 /* PFGeoPoint.h in Headers */, 81C583EC1C3B0A98000063C6 /* PFLogger.h in Headers */, 81C583ED1C3B0A98000063C6 /* PFConstants.h in Headers */, + 96FAF7A21D8443F500EAB299 /* PFDecoder.h in Headers */, 81C583EE1C3B0A98000063C6 /* PFSQLiteDatabaseResult.h in Headers */, 81C583EF1C3B0A98000063C6 /* PFAnalytics_Private.h in Headers */, 81C583F01C3B0A98000063C6 /* PFConfigController.h in Headers */, @@ -5997,6 +6053,7 @@ 81C584121C3B0A98000063C6 /* PFFilePersistenceGroup.h in Headers */, 81C584131C3B0A98000063C6 /* PFRESTQueryCommand.h in Headers */, 81C584141C3B0A98000063C6 /* PFACLState_Private.h in Headers */, + A6E2958D1E96173F009917BF /* ParseManagerPrivate.h in Headers */, 81C584151C3B0A98000063C6 /* PFConfig+Synchronous.h in Headers */, 81C584161C3B0A98000063C6 /* PFObject.h in Headers */, 81C584171C3B0A98000063C6 /* PFPushUtilities.h in Headers */, @@ -6024,6 +6081,7 @@ 81C5842D1C3B0A98000063C6 /* PFURLSessionCommandRunner_Private.h in Headers */, 81C5842E1C3B0A98000063C6 /* PFConfig_Private.h in Headers */, 81C5842F1C3B0A98000063C6 /* PFURLConstructor.h in Headers */, + 96FAF7BA1D84462700EAB299 /* PFEncoder.h in Headers */, 81C584301C3B0A98000063C6 /* PFRelationPrivate.h in Headers */, 81C584311C3B0A98000063C6 /* PFMutableRelationState.h in Headers */, 81C584321C3B0A98000063C6 /* PFSession_Private.h in Headers */, @@ -6051,6 +6109,7 @@ 81C584471C3B0A98000063C6 /* PFUser+Synchronous.h in Headers */, 81C584481C3B0A98000063C6 /* PFObject+Subclass.h in Headers */, 81C584491C3B0A98000063C6 /* PFUserState_Private.h in Headers */, + B141170C1E5D081500F70D7A /* PFFileUploadResult.h in Headers */, 81C5844A1C3B0A98000063C6 /* PFAnonymousAuthenticationProvider.h in Headers */, 81C5844B1C3B0A98000063C6 /* PFQueryState.h in Headers */, 81C5844C1C3B0A98000063C6 /* PFObjectFileCoder.h in Headers */, @@ -6084,6 +6143,7 @@ 81C584FC1C3B0AA1000063C6 /* PFAnalytics.h in Headers */, 81C584FD1C3B0AA1000063C6 /* PFSQLiteDatabaseController.h in Headers */, 81C584FE1C3B0AA1000063C6 /* PFRESTFileCommand.h in Headers */, + B14116F71E5D076100F70D7A /* PFFileUploadController.h in Headers */, 81C584FF1C3B0AA1000063C6 /* PFObjectState_Private.h in Headers */, 81C585001C3B0AA1000063C6 /* PFBase64Encoder.h in Headers */, 81C585011C3B0AA1000063C6 /* PFPersistenceController.h in Headers */, @@ -6103,7 +6163,6 @@ 81C5850E1C3B0AA1000063C6 /* PFAssert.h in Headers */, 81C5850F1C3B0AA1000063C6 /* PFUserState.h in Headers */, 81C585101C3B0AA1000063C6 /* PFUser+Synchronous.h in Headers */, - 81C585111C3B0AA1000063C6 /* PFDecoder.h in Headers */, 81C585121C3B0AA1000063C6 /* PFGeoPointPrivate.h in Headers */, 81C585131C3B0AA1000063C6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, 81C585141C3B0AA1000063C6 /* PFInternalUtils.h in Headers */, @@ -6114,6 +6173,7 @@ 81C585191C3B0AA1000063C6 /* PFCurrentObjectControlling.h in Headers */, 81C5851A1C3B0AA1000063C6 /* PFPaymentTransactionObserver.h in Headers */, 81C5851B1C3B0AA1000063C6 /* PFCloud+Synchronous.h in Headers */, + B141170F1E5D081500F70D7A /* PFFileUploadResult.h in Headers */, 81C5851C1C3B0AA1000063C6 /* PFUserConstants.h in Headers */, 81C5851D1C3B0AA1000063C6 /* PFInstallationIdentifierStore_Private.h in Headers */, 81C5851E1C3B0AA1000063C6 /* PFTaskQueue.h in Headers */, @@ -6135,6 +6195,7 @@ 81C5852E1C3B0AA1000063C6 /* PFObjectController.h in Headers */, 81C5852F1C3B0AA1000063C6 /* PFAlertView.h in Headers */, 81C585301C3B0AA1000063C6 /* PFNetworkCommand.h in Headers */, + 96FAF7C01D84462900EAB299 /* PFEncoder.h in Headers */, 81C585311C3B0AA1000063C6 /* PFUserDefaultsPersistenceGroup.h in Headers */, 81C585321C3B0AA1000063C6 /* PFOfflineQueryLogic.h in Headers */, 81C585331C3B0AA1000063C6 /* PFJSONSerialization.h in Headers */, @@ -6146,7 +6207,6 @@ 81C585391C3B0AA1000063C6 /* PFMutableUserState.h in Headers */, 81C5853A1C3B0AA1000063C6 /* PFRESTConfigCommand.h in Headers */, 81C5853B1C3B0AA1000063C6 /* PFObjectFileCodingLogic.h in Headers */, - 81C5853C1C3B0AA1000063C6 /* PFEncoder.h in Headers */, 81C5853D1C3B0AA1000063C6 /* PFQueryController.h in Headers */, 81C5853E1C3B0AA1000063C6 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, 81C5853F1C3B0AA1000063C6 /* PFURLSession_Private.h in Headers */, @@ -6201,6 +6261,7 @@ 81C585701C3B0AA1000063C6 /* PFURLSessionCommandRunner.h in Headers */, 81C585711C3B0AA1000063C6 /* PFRESTObjectCommand.h in Headers */, 81C585721C3B0AA1000063C6 /* PFCommandRunning.h in Headers */, + A6E295901E961744009917BF /* ParseManagerPrivate.h in Headers */, 81C585731C3B0AA1000063C6 /* PFRESTCloudCommand.h in Headers */, 81C585741C3B0AA1000063C6 /* PFProduct.h in Headers */, 81C585751C3B0AA1000063C6 /* PFQuery.h in Headers */, @@ -6253,6 +6314,7 @@ 81C585A41C3B0AA1000063C6 /* PFPropertyInfo.h in Headers */, 81C585A51C3B0AA1000063C6 /* PFSubclassing.h in Headers */, 81C585A61C3B0AA1000063C6 /* PFObjectBatchController.h in Headers */, + 96FAF7A51D8443F800EAB299 /* PFDecoder.h in Headers */, 81C585A71C3B0AA1000063C6 /* PFAnalyticsUtilities.h in Headers */, 81C585A81C3B0AA1000063C6 /* PFObject+Subclass.h in Headers */, 81C585A91C3B0AA1000063C6 /* PFUserState_Private.h in Headers */, @@ -6291,6 +6353,7 @@ 81C586571C3B0AA9000063C6 /* PFAnalytics.h in Headers */, 81C586581C3B0AA9000063C6 /* PFSQLiteDatabaseController.h in Headers */, 81C586591C3B0AA9000063C6 /* PFRESTFileCommand.h in Headers */, + 96FAF7C41D84462900EAB299 /* PFEncoder.h in Headers */, 81C5865A1C3B0AA9000063C6 /* PFObjectState_Private.h in Headers */, 81C5865B1C3B0AA9000063C6 /* PFBase64Encoder.h in Headers */, 81C5865C1C3B0AA9000063C6 /* Parse.h in Headers */, @@ -6309,7 +6372,6 @@ 81C586691C3B0AA9000063C6 /* PFAssert.h in Headers */, 81C5866A1C3B0AA9000063C6 /* PFUserState.h in Headers */, 81C5866B1C3B0AA9000063C6 /* PFFile+Deprecated.h in Headers */, - 81C5866C1C3B0AA9000063C6 /* PFDecoder.h in Headers */, 81C5866D1C3B0AA9000063C6 /* PFGeoPointPrivate.h in Headers */, 81C5866E1C3B0AA9000063C6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, 81C5866F1C3B0AA9000063C6 /* PFInternalUtils.h in Headers */, @@ -6350,7 +6412,6 @@ 81C586921C3B0AA9000063C6 /* PFRESTConfigCommand.h in Headers */, 81C586931C3B0AA9000063C6 /* PFObjectFileCodingLogic.h in Headers */, 81C586941C3B0AA9000063C6 /* PFUserDefaultsPersistenceGroup.h in Headers */, - 81C586951C3B0AA9000063C6 /* PFEncoder.h in Headers */, 81C586961C3B0AA9000063C6 /* PFQueryController.h in Headers */, 81C586971C3B0AA9000063C6 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, 81C586981C3B0AA9000063C6 /* PFURLSession_Private.h in Headers */, @@ -6376,6 +6437,7 @@ 81C586AC1C3B0AA9000063C6 /* PFSQLiteDatabaseResult.h in Headers */, 81C586AD1C3B0AA9000063C6 /* PFAnalytics_Private.h in Headers */, 81C586AE1C3B0AA9000063C6 /* PFCloud+Deprecated.h in Headers */, + B14117111E5D081500F70D7A /* PFFileUploadResult.h in Headers */, 81C586AF1C3B0AA9000063C6 /* PFConfigController.h in Headers */, 81C586B01C3B0AA9000063C6 /* PFRelationState.h in Headers */, 81C586B11C3B0AA9000063C6 /* PFFileState_Private.h in Headers */, @@ -6411,6 +6473,7 @@ 81C586CF1C3B0AA9000063C6 /* PFACLState_Private.h in Headers */, 81C586D01C3B0AA9000063C6 /* PFObject.h in Headers */, 81C586D11C3B0AA9000063C6 /* PFSQLiteDatabase.h in Headers */, + B14116F91E5D076300F70D7A /* PFFileUploadController.h in Headers */, 81C586D21C3B0AA9000063C6 /* PFKeyValueCache.h in Headers */, 81C586D31C3B0AA9000063C6 /* PFSessionController.h in Headers */, 403093711C81F0B200CF09F8 /* PFQueryConstants.h in Headers */, @@ -6442,8 +6505,10 @@ 81C586ED1C3B0AA9000063C6 /* PFFilePersistenceGroup.h in Headers */, 81C586EE1C3B0AA9000063C6 /* PFUser+Deprecated.h in Headers */, 81C586EF1C3B0AA9000063C6 /* PFURLSessionDataTaskDelegate.h in Headers */, + 96FAF7A71D8443F900EAB299 /* PFDecoder.h in Headers */, 81C586F01C3B0AA9000063C6 /* PFAnonymousUtils+Deprecated.h in Headers */, 81C586F11C3B0AA9000063C6 /* PFDateFormatter.h in Headers */, + A6E295921E961744009917BF /* ParseManagerPrivate.h in Headers */, 81C586F21C3B0AA9000063C6 /* PFCloudCodeController.h in Headers */, 81C586F31C3B0AA9000063C6 /* PFMultiProcessFileLockController.h in Headers */, 81C586F41C3B0AA9000063C6 /* PFCurrentUserController.h in Headers */, @@ -6497,7 +6562,6 @@ 81C7F4AD1AF42BD9007B5418 /* PFMutableQueryState.h in Headers */, 81EDD4D31B59A6EC002F69C0 /* PFCommandRunning.h in Headers */, 8196D55C1B0AB64B000465A1 /* PFAnalyticsController.h in Headers */, - 81068EF21AE0845D00A34D13 /* PFEncoder.h in Headers */, 81BB6E221B0E7A1A00465C38 /* PFBase64Encoder.h in Headers */, F5B0B3191B44A33100F3EBC4 /* PFCommandCache.h in Headers */, F5B0B31A1B44A33100F3EBC4 /* PFCommandCache_Private.h in Headers */, @@ -6515,13 +6579,14 @@ 81CD66551B4DA5A70042FC0B /* PFCurrentInstallationController.h in Headers */, F5B0B3231B44A33100F3EBC4 /* ParseModule.h in Headers */, F5B0B3251B44A33100F3EBC4 /* PFApplication.h in Headers */, + B14116F51E5D075E00F70D7A /* PFFileUploadController.h in Headers */, F5B0B3261B44A33100F3EBC4 /* PFAssert.h in Headers */, F5B0B3271B44A33100F3EBC4 /* PFAsyncTaskQueue.h in Headers */, F5B0B3281B44A33100F3EBC4 /* PFBaseState.h in Headers */, + A6E2958E1E961741009917BF /* ParseManagerPrivate.h in Headers */, F51535091B57240900C49F56 /* PFMutableACLState.h in Headers */, F5B0B32B1B44A33100F3EBC4 /* PFCoreDataProvider.h in Headers */, 814881611B795CD4008763BF /* PFMultiProcessFileLock.h in Headers */, - F5B0B32C1B44A33100F3EBC4 /* PFDecoder.h in Headers */, F5B0B32E1B44A33100F3EBC4 /* PFGeoPointPrivate.h in Headers */, F5B0B3301B44A33100F3EBC4 /* PFInternalUtils.h in Headers */, 8166FC951B503809003841A2 /* PFPushPrivate.h in Headers */, @@ -6541,6 +6606,7 @@ 811083F31BA2580100FC7F65 /* PFUserAuthenticationDelegate.h in Headers */, 81CA29EC1C28ECA300C4F34A /* PFQuery+Deprecated.h in Headers */, F5B0B3481B44A33200F3EBC4 /* PFMutablePushState.h in Headers */, + 96FAF7A31D8443F600EAB299 /* PFDecoder.h in Headers */, F5B0B3491B44A33200F3EBC4 /* PFPushController.h in Headers */, F5B0B34A1B44A33200F3EBC4 /* PFPushChannelsController.h in Headers */, F5B0B34B1B44A33200F3EBC4 /* PFPushUtilities.h in Headers */, @@ -6657,12 +6723,14 @@ 8166FB9C1B4F2F08003841A2 /* PFUserConstants.h in Headers */, 81C76EE91B4B201E0031C2FD /* PFObjectConstants.h in Headers */, 81CB7F701B166FE500DC601D /* PFObjectState.h in Headers */, + B141170D1E5D081500F70D7A /* PFFileUploadResult.h in Headers */, 818D6F151B3C8D1900F94C82 /* PFObjectLocalIdStore.h in Headers */, 8166FC781B50376D003841A2 /* PFObjectController_Private.h in Headers */, 81493AA51A0D6DE0008D5504 /* PFRESTObjectBatchCommand.h in Headers */, 814881521B795CAC008763BF /* PFPropertyInfo.h in Headers */, 8166FC7A1B50376D003841A2 /* PFObjectControlling.h in Headers */, 8196D58E1B0BD23B000465A1 /* PFCoreManager.h in Headers */, + 96FAF7BC1D84462700EAB299 /* PFEncoder.h in Headers */, 81C7F48C1AF4110B007B5418 /* PFQueryUtilities.h in Headers */, 81CA29F11C28ECFD00C4F34A /* PFUser+Deprecated.h in Headers */, 8166FC981B50381B003841A2 /* PFQueryPrivate.h in Headers */, @@ -6874,11 +6942,18 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0730; + LastUpgradeCheck = 0820; ORGANIZATIONNAME = "Parse Inc."; TargetAttributes = { + 810155051BB3832700D7C7BD = { + LastSwiftMigration = 0830; + }; + 816F441B1A8E8933009CDB32 = { + LastSwiftMigration = 0900; + }; 81C3821B19CCA89E0066284A = { CreatedOnToolsVersion = 6.0.1; + LastSwiftMigration = 0830; }; }; }; @@ -7228,8 +7303,10 @@ files = ( 8101550A1BB3832700D7C7BD /* PFWeakValue.m in Sources */, 8101550B1BB3832700D7C7BD /* PFUserState.m in Sources */, + B14117081E5D078E00F70D7A /* PFFileUploadResult.m in Sources */, 8101550C1BB3832700D7C7BD /* PFCommandURLRequestConstructor.m in Sources */, 8101550D1BB3832700D7C7BD /* PFCoreManager.m in Sources */, + 96FAF7AE1D84441900EAB299 /* PFDecoder.m in Sources */, 8101550E1BB3832700D7C7BD /* PFURLSessionUploadTaskDelegate.m in Sources */, 8101550F1BB3832700D7C7BD /* PFPin.m in Sources */, 810155101BB3832700D7C7BD /* PFMulticastDelegate.m in Sources */, @@ -7321,7 +7398,6 @@ 8101556E1BB3832700D7C7BD /* PFInternalUtils.m in Sources */, 8101556F1BB3832700D7C7BD /* PFCommandRunning.m in Sources */, 810155711BB3832700D7C7BD /* BFTask+Private.m in Sources */, - 810155721BB3832700D7C7BD /* PFEncoder.m in Sources */, 810155731BB3832700D7C7BD /* PFJSONSerialization.m in Sources */, 810155741BB3832700D7C7BD /* PFCloud.m in Sources */, 810155751BB3832700D7C7BD /* PFUser.m in Sources */, @@ -7337,12 +7413,12 @@ 8101557F1BB3832700D7C7BD /* PFConfig.m in Sources */, 810155801BB3832700D7C7BD /* PFMultiProcessFileLockController.m in Sources */, 810155811BB3832700D7C7BD /* PFURLConstructor.m in Sources */, - 810155821BB3832700D7C7BD /* PFDecoder.m in Sources */, 810155841BB3832700D7C7BD /* PFBaseState.m in Sources */, 810155851BB3832700D7C7BD /* PFEventuallyPin.m in Sources */, 810155861BB3832700D7C7BD /* PFObjectSubclassingController.m in Sources */, 810155871BB3832700D7C7BD /* PFCommandResult.m in Sources */, 810155881BB3832700D7C7BD /* PFConstants.m in Sources */, + 96FAF7C31D84462900EAB299 /* PFEncoder.m in Sources */, 810155891BB3832700D7C7BD /* PFAnalytics.m in Sources */, 8101558A1BB3832700D7C7BD /* PFApplication.m in Sources */, 8101558B1BB3832700D7C7BD /* PFSession.m in Sources */, @@ -7419,6 +7495,7 @@ 815F22E71BD04D150054659F /* PFRESTQueryCommand.m in Sources */, 815F22E81BD04D150054659F /* PFRESTSessionCommand.m in Sources */, 815F22E91BD04D150054659F /* PFPropertyInfo.m in Sources */, + 96FAF7BF1D84462800EAB299 /* PFEncoder.m in Sources */, 815F22EB1BD04D150054659F /* PFMutableObjectState.m in Sources */, 815F22ED1BD04D150054659F /* PFQuery.m in Sources */, 815F22EE1BD04D150054659F /* PFConfigController.m in Sources */, @@ -7465,7 +7542,6 @@ 815F23191BD04D150054659F /* PFInternalUtils.m in Sources */, 815F231A1BD04D150054659F /* PFCommandRunning.m in Sources */, 815F231C1BD04D150054659F /* BFTask+Private.m in Sources */, - 815F231D1BD04D150054659F /* PFEncoder.m in Sources */, 815F231E1BD04D150054659F /* PFJSONSerialization.m in Sources */, 815F231F1BD04D150054659F /* PFCloud.m in Sources */, 815F23201BD04D150054659F /* PFUser.m in Sources */, @@ -7482,7 +7558,7 @@ 815F232A1BD04D150054659F /* PFConfig.m in Sources */, 815F232B1BD04D150054659F /* PFMultiProcessFileLockController.m in Sources */, 815F232C1BD04D150054659F /* PFURLConstructor.m in Sources */, - 815F232D1BD04D150054659F /* PFDecoder.m in Sources */, + 96FAF7AC1D84441800EAB299 /* PFDecoder.m in Sources */, 815F232F1BD04D150054659F /* PFBaseState.m in Sources */, 815F23301BD04D150054659F /* PFEventuallyPin.m in Sources */, 815F23311BD04D150054659F /* PFObjectSubclassingController.m in Sources */, @@ -7508,6 +7584,7 @@ 815F23451BD04D150054659F /* PFURLSession.m in Sources */, 815F23461BD04D150054659F /* PFPurchase.m in Sources */, 815F23471BD04D150054659F /* PFUserFileCodingLogic.m in Sources */, + B14117061E5D078E00F70D7A /* PFFileUploadResult.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7805,6 +7882,7 @@ F51D06351B792CF10044539E /* PFSQLiteDatabaseController.m in Sources */, 815960A31ABCA3B30069EBCC /* PFFileManager.m in Sources */, 81CD66561B4DA5A70042FC0B /* PFCurrentInstallationController.m in Sources */, + 96FAF7B91D84461D00EAB299 /* PFEncoder.m in Sources */, 91DF24971A09BAF100CFC7D4 /* PFPinningEventuallyQueue.m in Sources */, 815EE94819FAD12F0076FE5D /* PFRESTQueryCommand.m in Sources */, 8121457F1AA4A808000B23F5 /* PFRESTSessionCommand.m in Sources */, @@ -7862,7 +7940,6 @@ 818D586F1B5DA43800813989 /* PFCommandRunning.m in Sources */, 81CD665C1B4DA5BA0042FC0B /* PFInstallationController.m in Sources */, 81C3826919CCAD7F0066284A /* BFTask+Private.m in Sources */, - 81068EF31AE0845D00A34D13 /* PFEncoder.m in Sources */, 81951F181ACB90DA00E142EB /* PFJSONSerialization.m in Sources */, 81C3824319CCAD2C0066284A /* PFCloud.m in Sources */, 81C3825019CCAD2C0066284A /* PFUser.m in Sources */, @@ -7878,8 +7955,8 @@ 81C3824419CCAD2C0066284A /* PFConfig.m in Sources */, 814881661B795CD4008763BF /* PFMultiProcessFileLockController.m in Sources */, 81BBE13119FFCB3700622646 /* PFURLConstructor.m in Sources */, - 81C3827019CCADA00066284A /* PFDecoder.m in Sources */, 81C3824719CCAD2C0066284A /* PFInstallation.m in Sources */, + B14117031E5D078E00F70D7A /* PFFileUploadResult.m in Sources */, F586B3511B1E3BD70082E3BD /* PFBaseState.m in Sources */, 91115EFA1A097AF30092D1C9 /* PFEventuallyPin.m in Sources */, F5C42CD61B34F68C00C720D8 /* PFObjectSubclassingController.m in Sources */, @@ -7893,6 +7970,7 @@ 81C3824D19CCAD2C0066284A /* PFRelation.m in Sources */, F5C42CDC1B38761B00C720D8 /* PFObjectSubclassInfo.m in Sources */, 81146C801A785203001F8473 /* PFRESTObjectCommand.m in Sources */, + 96FAF7A11D8443E300EAB299 /* PFDecoder.m in Sources */, 818ADC7A1BE1A8BA00C8006C /* PFFilePersistenceGroup.m in Sources */, 8166FCEA1B504083003841A2 /* PFPushManager.m in Sources */, 8166FCB61B503886003841A2 /* PFOfflineStore.m in Sources */, @@ -7965,6 +8043,7 @@ 81C583171C3B0A98000063C6 /* PFSQLiteDatabaseController.m in Sources */, 81C583181C3B0A98000063C6 /* PFFileManager.m in Sources */, 81C583191C3B0A98000063C6 /* PFCurrentInstallationController.m in Sources */, + 96FAF7BB1D84462700EAB299 /* PFEncoder.m in Sources */, 81C5831A1C3B0A98000063C6 /* PFPinningEventuallyQueue.m in Sources */, 81C5831B1C3B0A98000063C6 /* PFRESTQueryCommand.m in Sources */, 81C5831C1C3B0A98000063C6 /* PFRESTSessionCommand.m in Sources */, @@ -8022,7 +8101,6 @@ 81C5834F1C3B0A98000063C6 /* PFCommandRunning.m in Sources */, 81C583501C3B0A98000063C6 /* PFInstallationController.m in Sources */, 81C583511C3B0A98000063C6 /* BFTask+Private.m in Sources */, - 81C583521C3B0A98000063C6 /* PFEncoder.m in Sources */, 81C583531C3B0A98000063C6 /* PFJSONSerialization.m in Sources */, 81C583541C3B0A98000063C6 /* PFCloud.m in Sources */, 81C583551C3B0A98000063C6 /* PFUser.m in Sources */, @@ -8038,8 +8116,8 @@ 81C5835F1C3B0A98000063C6 /* PFConfig.m in Sources */, 81C583601C3B0A98000063C6 /* PFMultiProcessFileLockController.m in Sources */, 81C583611C3B0A98000063C6 /* PFURLConstructor.m in Sources */, - 81C583621C3B0A98000063C6 /* PFDecoder.m in Sources */, 81C583631C3B0A98000063C6 /* PFInstallation.m in Sources */, + B14117041E5D078E00F70D7A /* PFFileUploadResult.m in Sources */, 81C583641C3B0A98000063C6 /* PFBaseState.m in Sources */, 81C583651C3B0A98000063C6 /* PFEventuallyPin.m in Sources */, 81C583661C3B0A98000063C6 /* PFObjectSubclassingController.m in Sources */, @@ -8053,6 +8131,7 @@ 81C5836E1C3B0A98000063C6 /* PFRelation.m in Sources */, 81C5836F1C3B0A98000063C6 /* PFObjectSubclassInfo.m in Sources */, 81C583701C3B0A98000063C6 /* PFRESTObjectCommand.m in Sources */, + 96FAF7A81D84440600EAB299 /* PFDecoder.m in Sources */, 81C583711C3B0A98000063C6 /* PFFilePersistenceGroup.m in Sources */, 81C583721C3B0A98000063C6 /* PFPushManager.m in Sources */, 81C583731C3B0A98000063C6 /* PFOfflineStore.m in Sources */, @@ -8125,6 +8204,7 @@ 81C584941C3B0AA1000063C6 /* PFRESTQueryCommand.m in Sources */, 81C584951C3B0AA1000063C6 /* PFRESTSessionCommand.m in Sources */, 81C584961C3B0AA1000063C6 /* PFPropertyInfo.m in Sources */, + 96FAF7C11D84462900EAB299 /* PFEncoder.m in Sources */, 81C584971C3B0AA1000063C6 /* PFMutableObjectState.m in Sources */, 81C584981C3B0AA1000063C6 /* PFQuery.m in Sources */, 81C584991C3B0AA1000063C6 /* PFConfigController.m in Sources */, @@ -8171,7 +8251,6 @@ 81C584C21C3B0AA1000063C6 /* PFInternalUtils.m in Sources */, 81C584C31C3B0AA1000063C6 /* PFCommandRunning.m in Sources */, 81C584C41C3B0AA1000063C6 /* BFTask+Private.m in Sources */, - 81C584C51C3B0AA1000063C6 /* PFEncoder.m in Sources */, 81C584C61C3B0AA1000063C6 /* PFJSONSerialization.m in Sources */, 81C584C71C3B0AA1000063C6 /* PFCloud.m in Sources */, 81C584C81C3B0AA1000063C6 /* PFUser.m in Sources */, @@ -8188,7 +8267,7 @@ 81C584D31C3B0AA1000063C6 /* PFConfig.m in Sources */, 81C584D41C3B0AA1000063C6 /* PFMultiProcessFileLockController.m in Sources */, 81C584D51C3B0AA1000063C6 /* PFURLConstructor.m in Sources */, - 81C584D61C3B0AA1000063C6 /* PFDecoder.m in Sources */, + 96FAF7AD1D84441900EAB299 /* PFDecoder.m in Sources */, 81C584D71C3B0AA1000063C6 /* PFBaseState.m in Sources */, 81C584D81C3B0AA1000063C6 /* PFEventuallyPin.m in Sources */, 81C584D91C3B0AA1000063C6 /* PFObjectSubclassingController.m in Sources */, @@ -8214,6 +8293,7 @@ 81C584ED1C3B0AA1000063C6 /* PFURLSession.m in Sources */, 81C584EE1C3B0AA1000063C6 /* PFPurchase.m in Sources */, 81C584EF1C3B0AA1000063C6 /* PFUserFileCodingLogic.m in Sources */, + B14117071E5D078E00F70D7A /* PFFileUploadResult.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8223,8 +8303,10 @@ files = ( 81C585C61C3B0AA9000063C6 /* PFWeakValue.m in Sources */, 81C585C71C3B0AA9000063C6 /* PFUserState.m in Sources */, + B14117091E5D078E00F70D7A /* PFFileUploadResult.m in Sources */, 81C585C81C3B0AA9000063C6 /* PFCommandURLRequestConstructor.m in Sources */, 81C585C91C3B0AA9000063C6 /* PFCoreManager.m in Sources */, + 96FAF7AF1D84441A00EAB299 /* PFDecoder.m in Sources */, 81C585CA1C3B0AA9000063C6 /* PFURLSessionUploadTaskDelegate.m in Sources */, 81C585CB1C3B0AA9000063C6 /* PFPin.m in Sources */, 81C585CC1C3B0AA9000063C6 /* PFMulticastDelegate.m in Sources */, @@ -8316,7 +8398,6 @@ 81C586211C3B0AA9000063C6 /* PFInternalUtils.m in Sources */, 81C586221C3B0AA9000063C6 /* PFCommandRunning.m in Sources */, 81C586231C3B0AA9000063C6 /* BFTask+Private.m in Sources */, - 81C586241C3B0AA9000063C6 /* PFEncoder.m in Sources */, 81C586251C3B0AA9000063C6 /* PFJSONSerialization.m in Sources */, 81C586261C3B0AA9000063C6 /* PFCloud.m in Sources */, 81C586271C3B0AA9000063C6 /* PFUser.m in Sources */, @@ -8332,12 +8413,12 @@ 81C586311C3B0AA9000063C6 /* PFConfig.m in Sources */, 81C586321C3B0AA9000063C6 /* PFMultiProcessFileLockController.m in Sources */, 81C586331C3B0AA9000063C6 /* PFURLConstructor.m in Sources */, - 81C586341C3B0AA9000063C6 /* PFDecoder.m in Sources */, 81C586351C3B0AA9000063C6 /* PFBaseState.m in Sources */, 81C586361C3B0AA9000063C6 /* PFEventuallyPin.m in Sources */, 81C586371C3B0AA9000063C6 /* PFObjectSubclassingController.m in Sources */, 81C586381C3B0AA9000063C6 /* PFCommandResult.m in Sources */, 81C586391C3B0AA9000063C6 /* PFConstants.m in Sources */, + 96FAF7C51D84462900EAB299 /* PFEncoder.m in Sources */, 81C5863A1C3B0AA9000063C6 /* PFAnalytics.m in Sources */, 81C5863B1C3B0AA9000063C6 /* PFApplication.m in Sources */, 81C5863C1C3B0AA9000063C6 /* PFSession.m in Sources */, @@ -8368,6 +8449,7 @@ 91CDB94C1A32E5C900FF830F /* PFEventuallyQueue.m in Sources */, 814881581B795CAC008763BF /* PFPropertyInfo_Runtime.m in Sources */, 81D843CC1B012FBA007CEBCB /* PFCloudCodeController.m in Sources */, + 96FAF7AA1D84441600EAB299 /* PFDecoder.m in Sources */, F50C667C1B34B231001941A6 /* PFPushUtilities.m in Sources */, 91CDB94D1A32E5C900FF830F /* PFPinningEventuallyQueue.m in Sources */, 81C7F48E1AF4110B007B5418 /* PFQueryUtilities.m in Sources */, @@ -8408,7 +8490,6 @@ 81D0EE9C19B0A2060000AE75 /* PFKeychainStore.m in Sources */, 814881671B795CD4008763BF /* PFMultiProcessFileLockController.m in Sources */, F5B0C4F71BA248F7000AB0D5 /* PFFileDataStream.m in Sources */, - 81068EF41AE0845D00A34D13 /* PFEncoder.m in Sources */, F51535071B57240900C49F56 /* PFACLState.m in Sources */, 970110821630B45800AB761E /* PFGeoPoint.m in Sources */, 970110841630B45800AB761E /* PFObject.m in Sources */, @@ -8426,6 +8507,7 @@ 9701108C1630B45800AB761E /* PFUser.m in Sources */, F5C6B38B1B83F7A100690F3A /* PFFileStagingController.m in Sources */, 81E7A2281B6042BD006CB680 /* PFObjectFileCodingLogic.m in Sources */, + 96FAF7BD1D84462700EAB299 /* PFEncoder.m in Sources */, 818ADC7B1BE1A8BA00C8006C /* PFFilePersistenceGroup.m in Sources */, 8166FCEB1B504083003841A2 /* PFPushManager.m in Sources */, 819A4B0B1A67330200D01241 /* PFHash.m in Sources */, @@ -8473,8 +8555,8 @@ 81CD665D1B4DA5BA0042FC0B /* PFInstallationController.m in Sources */, 81CD66571B4DA5A70042FC0B /* PFCurrentInstallationController.m in Sources */, 81EBF3481B33E7EB00991947 /* PFInstallation.m in Sources */, - 8169701C19BE94BB00EC1D1F /* PFDecoder.m in Sources */, 81329E911AE1E8840071EE3E /* PFReachability.m in Sources */, + B14117051E5D078E00F70D7A /* PFFileUploadResult.m in Sources */, F515350A1B57240900C49F56 /* PFMutableACLState.m in Sources */, 81493AA71A0D6DE0008D5504 /* PFRESTObjectBatchCommand.m in Sources */, 818ADC871BE1A8BA00C8006C /* PFUserDefaultsPersistenceGroup.m in Sources */, @@ -8597,6 +8679,8 @@ isa = XCBuildConfiguration; baseConfigurationReference = 81DCD1491D2DA080002501A2 /* Debug.xcconfig */; buildSettings = { + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; }; name = Debug; }; @@ -8604,6 +8688,8 @@ isa = XCBuildConfiguration; baseConfigurationReference = 81DCD14A1D2DA080002501A2 /* Release.xcconfig */; buildSettings = { + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; }; name = Release; }; @@ -8611,6 +8697,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 810154FE1BB382F800D7C7BD /* Parse-watchOS.xcconfig */; buildSettings = { + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -8618,6 +8705,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 810154FE1BB382F800D7C7BD /* Parse-watchOS.xcconfig */; buildSettings = { + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -8667,6 +8755,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = F55ABB531B4F39DA00A0ECD5 /* Parse-iOS.xcconfig */; buildSettings = { + CLANG_ENABLE_MODULES = YES; + DEFINES_MODULE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -8674,6 +8768,11 @@ isa = XCBuildConfiguration; baseConfigurationReference = F55ABB531B4F39DA00A0ECD5 /* Parse-iOS.xcconfig */; buildSettings = { + CLANG_ENABLE_MODULES = YES; + DEFINES_MODULE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/Parse.xcodeproj/xcshareddata/xcschemes/Parse-iOS-Dynamic.xcscheme b/Parse.xcodeproj/xcshareddata/xcschemes/Parse-iOS-Dynamic.xcscheme index a814e8318..f5e2a497f 100644 --- a/Parse.xcodeproj/xcshareddata/xcschemes/Parse-iOS-Dynamic.xcscheme +++ b/Parse.xcodeproj/xcshareddata/xcschemes/Parse-iOS-Dynamic.xcscheme @@ -1,6 +1,6 @@ *task) { - @strongify(self); - PFCommandResult *result = task.result; - PFFileState *fileState = [[PFFileState alloc] initWithName:result.result[@"name"] - urlString:result.result[@"url"] - mimeType:nil]; - return [[self _cacheFileAsyncWithState:fileState atPath:sourceFilePath] continueWithSuccessResult:fileState]; - }]; + + id customFileUploadController = Parse.currentConfiguration.fileUploadController; + if (customFileUploadController) { + @weakify(self); + return [[customFileUploadController uploadSourceFilePath:sourceFilePath + fileName:fileState.name + mimeType:fileState.mimeType + sessionToken:sessionToken + cancellationToken:cancellationToken + progressBlock:progressBlock] + continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFFileUploadResult *result = task.result; + PFFileState *fileState = [[PFFileState alloc] initWithName:result.name + urlString:result.url + mimeType:nil]; + return [[self _cacheFileAsyncWithState:fileState atPath:sourceFilePath] continueWithSuccessResult:fileState]; + }]; + } else { + PFRESTFileCommand *command = [PFRESTFileCommand uploadCommandForFileWithName:fileState.name sessionToken:sessionToken]; + @weakify(self); + return [[self.dataSource.commandRunner runFileUploadCommandAsync:command + withContentType:fileState.mimeType + contentSourceFilePath:sourceFilePath + options:PFCommandRunningOptionRetryIfFailed + cancellationToken:cancellationToken + progressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFCommandResult *result = task.result; + PFFileState *fileState = [[PFFileState alloc] initWithName:result.result[@"name"] + urlString:result.result[@"url"] + mimeType:nil]; + return [[self _cacheFileAsyncWithState:fileState atPath:sourceFilePath] continueWithSuccessResult:fileState]; + }]; + } } ///-------------------------------------- diff --git a/Parse/Internal/File/Controller/PFFileUploadResult.m b/Parse/Internal/File/Controller/PFFileUploadResult.m new file mode 100644 index 000000000..48f2a3d69 --- /dev/null +++ b/Parse/Internal/File/Controller/PFFileUploadResult.m @@ -0,0 +1,13 @@ +// +// PFFileUploadResult.m +// Parse +// +// Created by Ken Cooper on 2/21/17. +// Copyright © 2017 Parse Inc. All rights reserved. +// + +#import "PFFileUploadResult.h" + +@implementation PFFileUploadResult + +@end diff --git a/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m b/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m index 262d3aaaa..f34386f6d 100644 --- a/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m +++ b/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m @@ -1000,6 +1000,16 @@ - (void)updateObjectIdForObject:(PFObject *)object oldObjectId:(NSString *)oldObjectId newObjectId:(NSString *)newObjectId { if (oldObjectId != nil) { +#if TARGET_OS_IOS + if ([object isKindOfClass:[PFInstallation class]] + && newObjectId == nil) { + NSString *key = [self _generateKeyForClassName:object.parseClassName objectId:oldObjectId]; + @synchronized(self.lock) { + [self.classNameAndObjectIdToObjectMap removeObjectForKey:key]; + } + return; + } +#endif PFConsistencyAssert([oldObjectId isEqualToString:newObjectId], @"objectIds cannot be changed in offline mode."); return; } diff --git a/Parse/Internal/Object/State/PFObjectState.m b/Parse/Internal/Object/State/PFObjectState.m index 3dbe94b84..ba3eafa03 100644 --- a/Parse/Internal/Object/State/PFObjectState.m +++ b/Parse/Internal/Object/State/PFObjectState.m @@ -15,6 +15,7 @@ #import "PFMutableObjectState.h" #import "PFObjectConstants.h" #import "PFObjectUtilities.h" +#import "PFFieldOperation.h" @implementation PFObjectState @@ -129,7 +130,11 @@ - (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectE #pragma mark Accessors - (void)setServerDataObject:(id)object forKey:(NSString *)key { - _serverData[key] = object; + if (!object || [object isKindOfClass:[PFDeleteOperation class]]) { + [self removeServerDataObjectForKey:key]; + } else { + _serverData[key] = object; + } } - (void)removeServerDataObjectForKey:(NSString *)key { diff --git a/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m b/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m index 0442f71af..1be108765 100644 --- a/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m +++ b/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m @@ -332,7 +332,7 @@ - (void)_rawRegisterSubclass:(Class)kls { - (void)_registerSubclassesInLoadedBundle:(NSBundle *)bundle { // Skip bundles that aren't loaded yet. - if (!bundle.loaded || !bundle.executablePath) { + if (![bundle isKindOfClass:NSBundle.class] || !bundle.loaded || !bundle.executablePath) { return; } // Filter out any system bundles @@ -343,7 +343,7 @@ - (void)_registerSubclassesInLoadedBundle:(NSBundle *)bundle { } - (void)_registerSubclassesInBundle:(NSBundle *)bundle { - PFConsistencyAssert(bundle.loaded, @"Cannot register subclasses in a bundle that hasn't been loaded!"); + PFConsistencyAssert(bundle.loaded, @"Cannot register subclasses in an unloaded bundle: %@", bundle); const char *executablePath = bundle.executablePath.UTF8String; if (executablePath == NULL) { diff --git a/Parse/Internal/PFEventuallyQueue.h b/Parse/Internal/PFEventuallyQueue.h index 4e36b4d6c..7e6a2eb64 100644 --- a/Parse/Internal/PFEventuallyQueue.h +++ b/Parse/Internal/PFEventuallyQueue.h @@ -67,7 +67,7 @@ extern NSTimeInterval const PFEventuallyQueueDefaultTimeoutRetryInterval; - (void)start NS_REQUIRES_SUPER; - (void)resume NS_REQUIRES_SUPER; - (void)pause NS_REQUIRES_SUPER; - +- (void)stop NS_REQUIRES_SUPER; - (void)removeAllCommands NS_REQUIRES_SUPER; @end diff --git a/Parse/Internal/PFEventuallyQueue.m b/Parse/Internal/PFEventuallyQueue.m index 663024e7b..68d31aad5 100644 --- a/Parse/Internal/PFEventuallyQueue.m +++ b/Parse/Internal/PFEventuallyQueue.m @@ -197,6 +197,10 @@ - (void)pause { dispatch_suspend(_processingQueueSource); } +- (void)stop { + dispatch_source_cancel(_processingQueueSource); +} + - (void)removeAllCommands { dispatch_sync(_synchronizationQueue, ^{ [_taskCompletionSources removeAllObjects]; diff --git a/Parse/Internal/ParseClientConfiguration_Private.h b/Parse/Internal/ParseClientConfiguration_Private.h index 11a0d1874..4af07fe86 100644 --- a/Parse/Internal/ParseClientConfiguration_Private.h +++ b/Parse/Internal/ParseClientConfiguration_Private.h @@ -17,6 +17,7 @@ extern NSString *const _ParseDefaultServerURLString; @property (nullable, nonatomic, copy, readwrite) NSString *applicationId; @property (nullable, nonatomic, copy, readwrite) NSString *clientKey; +@property (nullable, nonatomic, strong, readwrite) id fileUploadController; @property (nonatomic, copy, readwrite) NSString *server; diff --git a/Parse/Internal/ParseManager.m b/Parse/Internal/ParseManager.m index daa908252..b6c9d4af3 100644 --- a/Parse/Internal/ParseManager.m +++ b/Parse/Internal/ParseManager.m @@ -27,6 +27,7 @@ #import "PFUser.h" #import "PFURLSessionCommandRunner.h" #import "PFPersistenceController.h" +#import "ParseManagerPrivate.h" #if !TARGET_OS_WATCH && !TARGET_OS_TV #import "PFPushManager.h" @@ -173,12 +174,15 @@ - (PFEventuallyQueue *)eventuallyQueue { [PFPinningEventuallyQueue newDefaultPinningEventuallyQueueWithDataSource:self] : commandCache); - // We still need to clear out the old command cache even if we're using Pinning in case // anything is left over when the user upgraded. Checking number of pending and then // clearing should be enough. - if (self.offlineStoreLoaded && commandCache.commandCount > 0) { - [commandCache removeAllCommands]; + if (self.offlineStoreLoaded) { + if (commandCache.commandCount > 0) { + [commandCache removeAllCommands]; + } + // we won't need it after stop everything... + [commandCache stop]; } } #endif @@ -304,6 +308,11 @@ - (PFInstallationIdentifierStore *)installationIdentifierStore { #pragma mark CommandRunner +// Set Command Runner. Used for testing. +- (void)setCommandRunner:(id)commandRunner { + _commandRunner = commandRunner; +} + - (id)commandRunner { __block id runner = nil; dispatch_sync(_commandRunnerAccessQueue, ^{ diff --git a/Parse/Internal/ParseManagerPrivate.h b/Parse/Internal/ParseManagerPrivate.h new file mode 100644 index 000000000..dc95e93db --- /dev/null +++ b/Parse/Internal/ParseManagerPrivate.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "ParseManager.h" + +@interface ParseManager () + +- (void)setCommandRunner:(id)commandRunner; + +@end diff --git a/Parse/Internal/Query/PFQueryConstants.h b/Parse/Internal/Query/PFQueryConstants.h index d86c189fb..b311073df 100644 --- a/Parse/Internal/Query/PFQueryConstants.h +++ b/Parse/Internal/Query/PFQueryConstants.h @@ -21,6 +21,7 @@ extern NSString *const PFQueryKeyNotContainedIn; extern NSString *const PFQueryKeyContainsAll; extern NSString *const PFQueryKeyNearSphere; extern NSString *const PFQueryKeyWithin; +extern NSString *const PFQueryKeyGeoWithin; extern NSString *const PFQueryKeyRegex; extern NSString *const PFQueryKeyExists; extern NSString *const PFQueryKeyInQuery; @@ -35,6 +36,7 @@ extern NSString *const PFQueryKeyObject; extern NSString *const PFQueryOptionKeyMaxDistance; extern NSString *const PFQueryOptionKeyBox; +extern NSString *const PFQueryOptionKeyPolygon; extern NSString *const PFQueryOptionKeyRegexOptions; NS_ASSUME_NONNULL_END diff --git a/Parse/Internal/Query/PFQueryConstants.m b/Parse/Internal/Query/PFQueryConstants.m index 8a9d98be7..b84beb009 100644 --- a/Parse/Internal/Query/PFQueryConstants.m +++ b/Parse/Internal/Query/PFQueryConstants.m @@ -19,6 +19,7 @@ NSString *const PFQueryKeyContainsAll = @"$all"; NSString *const PFQueryKeyNearSphere = @"$nearSphere"; NSString *const PFQueryKeyWithin = @"$within"; +NSString *const PFQueryKeyGeoWithin = @"$geoWithin"; NSString *const PFQueryKeyRegex = @"$regex"; NSString *const PFQueryKeyExists = @"$exists"; NSString *const PFQueryKeyInQuery = @"$inQuery"; @@ -33,4 +34,5 @@ NSString *const PFQueryOptionKeyMaxDistance = @"$maxDistance"; NSString *const PFQueryOptionKeyBox = @"$box"; +NSString *const PFQueryOptionKeyPolygon = @"$polygon"; NSString *const PFQueryOptionKeyRegexOptions = @"$options"; diff --git a/Parse/PFConstants.h b/Parse/PFConstants.h index 160947972..649a54b1b 100644 --- a/Parse/PFConstants.h +++ b/Parse/PFConstants.h @@ -13,7 +13,7 @@ #pragma mark - SDK Version ///-------------------------------------- -#define PARSE_VERSION @"1.14.2" +#define PARSE_VERSION @"1.15.0" ///-------------------------------------- #pragma mark - Platform diff --git a/Parse/Internal/PFDecoder.h b/Parse/PFDecoder.h similarity index 100% rename from Parse/Internal/PFDecoder.h rename to Parse/PFDecoder.h diff --git a/Parse/Internal/PFDecoder.m b/Parse/PFDecoder.m similarity index 100% rename from Parse/Internal/PFDecoder.m rename to Parse/PFDecoder.m diff --git a/Parse/Internal/PFEncoder.h b/Parse/PFEncoder.h similarity index 98% rename from Parse/Internal/PFEncoder.h rename to Parse/PFEncoder.h index 8015d3794..2d77fd308 100644 --- a/Parse/Internal/PFEncoder.h +++ b/Parse/PFEncoder.h @@ -11,8 +11,6 @@ #import -#import "PFMacros.h" - @class BFTask<__covariant BFGenericType>; @class PFObject; @class PFOfflineStore; diff --git a/Parse/Internal/PFEncoder.m b/Parse/PFEncoder.m similarity index 99% rename from Parse/Internal/PFEncoder.m rename to Parse/PFEncoder.m index c44f42195..f0de1f131 100644 --- a/Parse/Internal/PFEncoder.m +++ b/Parse/PFEncoder.m @@ -19,6 +19,7 @@ #import "PFObjectPrivate.h" #import "PFOfflineStore.h" #import "PFRelationPrivate.h" +#import "PFMacros.h" @implementation PFEncoder diff --git a/Parse/PFFileUploadController.h b/Parse/PFFileUploadController.h new file mode 100644 index 000000000..4a843e710 --- /dev/null +++ b/Parse/PFFileUploadController.h @@ -0,0 +1,37 @@ +// +// PFUploadController.h +// Parse +// +// Created by Ken Cooper on 2/20/17. +// Copyright © 2017 Parse Inc. All rights reserved. +// + +#import +#import + +/** + A policy interface for overriding the default upload behavior of uploading a PFFile + to application's parse server. Allows for direct uploads to other file storage + providers. + */ +@protocol PFFileUploadController + +/** + Uploads a file asynchronously from file path for a given file state. + + @param sourceFilePath Path to the file to upload. + @param fileName The PFFile's fileName. + @param mimeType The PFFile's mime type. + @param sessionToken The current users's session token. + @param cancellationToken Cancellation token. + @param progressBlock Progress block to call (optional). + + @return `BFTask` with a success result set to `PFFileUploadResult` containing the url and name of the uploaded file. + */ +-(BFTask * _Nonnull)uploadSourceFilePath:(NSString * _Nonnull)sourceFilePath + fileName:(NSString * _Nullable)fileName + mimeType:(NSString * _Nullable)mimeType + sessionToken:(NSString * _Nonnull)sessionToken + cancellationToken:(BFCancellationToken * _Nonnull)cancellationToken + progressBlock:(PFProgressBlock _Nonnull)progressBlock; +@end diff --git a/Parse/PFFileUploadResult.h b/Parse/PFFileUploadResult.h new file mode 100644 index 000000000..78d576a8d --- /dev/null +++ b/Parse/PFFileUploadResult.h @@ -0,0 +1,17 @@ +// +// PFFileUploadResult.h +// Parse +// +// Created by Ken Cooper on 2/21/17. +// Copyright © 2017 Parse Inc. All rights reserved. +// + +#import + +/** + Response provided by a custom `PFFileUploadController`. + */ +@interface PFFileUploadResult : NSObject +@property (strong, nonatomic) NSString *url; +@property (strong, nonatomic) NSString *name; +@end diff --git a/Parse/PFInstallation.m b/Parse/PFInstallation.m index 18b25223c..161ade665 100644 --- a/Parse/PFInstallation.m +++ b/Parse/PFInstallation.m @@ -28,6 +28,8 @@ #import "PFQueryPrivate.h" #import "Parse_Private.h" #import "PFErrorUtilities.h" +#import "PFObjectState_Private.h" +#import "PFObjectConstants.h" @implementation PFInstallation (Private) @@ -36,7 +38,8 @@ @implementation PFInstallation (Private) + (void)initialize { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - protectedKeys = PF_SET(PFInstallationKeyDeviceType, + protectedKeys = PF_SET(PFObjectObjectIdRESTKey, + PFInstallationKeyDeviceType, PFInstallationKeyInstallationId, PFInstallationKeyTimeZone, PFInstallationKeyLocaleIdentifier, @@ -83,6 +86,14 @@ - (NSString *)displayClassName { return NSStringFromClass([PFInstallation class]); } +///-------------------------------------- +#pragma mark - Properties +///-------------------------------------- + +- (void) setObjectId:(NSString *)objectId { + PFParameterAssertionFailure(@"Installation's objectIds cannot be changed"); +} + ///-------------------------------------- #pragma mark - Command Handlers ///-------------------------------------- @@ -223,16 +234,13 @@ - (void)setChannels:(NSArray *)channels { - (BFTask *)saveAsync:(BFTask *)toAwait { return [[super saveAsync:toAwait] continueWithBlock:^id(BFTask *task) { - // Do not attempt to resave an object if LDS is enabled, since changing objectId is not allowed. - if ([Parse _currentManager].offlineStoreLoaded) { - return task; - } - if (task.error.code == kPFErrorObjectNotFound) { @synchronized (self.lock) { // Retry the fetch as a save operation because this Installation was deleted on the server. // We always want [currentInstallation save] to succeed. - self.objectId = nil; + PFObjectState *state = [PFObjectState stateWithState:self._state]; + state.objectId = nil; + self._state = state; [self _markAllFieldsDirty]; return [super saveAsync:nil]; } diff --git a/Parse/PFObject.m b/Parse/PFObject.m index 21848f6c3..ebcfd213c 100644 --- a/Parse/PFObject.m +++ b/Parse/PFObject.m @@ -268,7 +268,7 @@ + (void)collectDirtyChildren:(id)node // Recurse into this object's children looking for dirty children. // We only need to look at the child object's current estimated data, // because that's the only data that might need to be saved now. - toSearch = [object->_estimatedData.dictionaryRepresentation copy]; + toSearch = [object._estimatedData.dictionaryRepresentation copy]; } [self collectDirtyChildren:toSearch diff --git a/Parse/PFQuery.h b/Parse/PFQuery.h index d28137c40..6f86cd1c1 100644 --- a/Parse/PFQuery.h +++ b/Parse/PFQuery.h @@ -308,6 +308,21 @@ typedef void (^PFQueryArrayResultBlock)(NSArray *_Nullable obje */ - (instancetype)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(PFGeoPoint *)southwest toNortheast:(PFGeoPoint *)northeast; +/** + * Add a constraint to the query that requires a particular key's + * coordinates be contained within and on the bounds of a given polygon + * Supports closed and open (last point is connected to first) paths. + * (Requires parse-server@2.5.0) + * + * Polygon must have at least 3 points + * + * @param key The key to be constrained. + * @param points The polygon points as an Array of `PFGeoPoint`'s. + * + * @return The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key withinPolygon:(NSArray *)points; + ///-------------------------------------- #pragma mark - Adding String Constraints ///-------------------------------------- diff --git a/Parse/PFQuery.m b/Parse/PFQuery.m index e346d6401..3a1faa9e9 100644 --- a/Parse/PFQuery.m +++ b/Parse/PFQuery.m @@ -301,6 +301,11 @@ - (instancetype)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(PFGeoPoint * return [self whereKey:key condition:PFQueryKeyWithin object:dictionary]; } +- (instancetype)whereKey:(NSString *)key withinPolygon:(NSArray *)points { + NSDictionary *dictionary = @{ PFQueryOptionKeyPolygon : points }; + return [self whereKey:key condition:PFQueryKeyGeoWithin object:dictionary]; +} + - (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex { return [self whereKey:key condition:PFQueryKeyRegex object:regex]; } diff --git a/Parse/Parse.h b/Parse/Parse.h index 02a872632..decc3d6f2 100644 --- a/Parse/Parse.h +++ b/Parse/Parse.h @@ -20,6 +20,8 @@ #import #import #import +#import +#import #import #import #import @@ -39,6 +41,8 @@ #import #import #import +#import +#import #if TARGET_OS_IOS diff --git a/Parse/ParseClientConfiguration.h b/Parse/ParseClientConfiguration.h index 51a9d888a..9795976b2 100644 --- a/Parse/ParseClientConfiguration.h +++ b/Parse/ParseClientConfiguration.h @@ -11,6 +11,8 @@ #import +@protocol PFFileUploadController; + NS_ASSUME_NONNULL_BEGIN /** @@ -49,6 +51,11 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nonatomic, copy) NSString *server; +/** + Sets a custom file upload controller that uploads PFFiles using its own policy. + */ +@property (nonatomic, strong, readwrite, nullable) id fileUploadController; + ///-------------------------------------- #pragma mark - Enabling Local Datastore ///-------------------------------------- @@ -120,6 +127,11 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nonatomic, copy, readonly) NSString *server; +/** + The custom upload controller that synchronously uploads PFFiles using its own policy. + */ +@property (nonatomic, strong, readonly, nullable) id fileUploadController; + ///-------------------------------------- #pragma mark - Enabling Local Datastore ///-------------------------------------- diff --git a/Parse/ParseClientConfiguration.m b/Parse/ParseClientConfiguration.m index ef4ce424a..e27b401db 100644 --- a/Parse/ParseClientConfiguration.m +++ b/Parse/ParseClientConfiguration.m @@ -112,6 +112,7 @@ - (BOOL)isEqual:(id)object { return ([PFObjectUtilities isObject:self.applicationId equalToObject:other.applicationId] && [PFObjectUtilities isObject:self.clientKey equalToObject:other.clientKey] && [self.server isEqualToString:other.server] && + self.fileUploadController == other.fileUploadController && self.localDatastoreEnabled == other.localDatastoreEnabled && [PFObjectUtilities isObject:self.applicationGroupIdentifier equalToObject:other.applicationGroupIdentifier] && [PFObjectUtilities isObject:self.containingApplicationBundleIdentifier equalToObject:other.containingApplicationBundleIdentifier] && @@ -128,6 +129,7 @@ - (instancetype)copyWithZone:(NSZone *)zone { configuration->_applicationId = [self->_applicationId copy]; configuration->_clientKey = [self->_clientKey copy]; configuration->_server = [self.server copy]; + configuration->_fileUploadController = self->_fileUploadController; configuration->_localDatastoreEnabled = self->_localDatastoreEnabled; configuration->_applicationGroupIdentifier = [self->_applicationGroupIdentifier copy]; configuration->_containingApplicationBundleIdentifier = [self->_containingApplicationBundleIdentifier copy]; diff --git a/Parse/Resources/Parse-OSX.Info.plist b/Parse/Resources/Parse-OSX.Info.plist index dd49fbb27..dce1008f8 100644 --- a/Parse/Resources/Parse-OSX.Info.plist +++ b/Parse/Resources/Parse-OSX.Info.plist @@ -13,10 +13,10 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.14.2 + 1.15.0 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.15.0 diff --git a/Parse/Resources/Parse-iOS.Info.plist b/Parse/Resources/Parse-iOS.Info.plist index f0baf7874..699c50954 100644 --- a/Parse/Resources/Parse-iOS.Info.plist +++ b/Parse/Resources/Parse-iOS.Info.plist @@ -13,7 +13,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.14.2 + 1.15.0 CFBundleSignature ???? CFBundleSupportedPlatforms @@ -22,7 +22,7 @@ iPhoneOS CFBundleVersion - 1.14.2 + 1.15.0 MinimumOSVersion 6.0 diff --git a/Parse/Resources/Parse-tvOS.Info.plist b/Parse/Resources/Parse-tvOS.Info.plist index 64524f773..7558171b5 100644 --- a/Parse/Resources/Parse-tvOS.Info.plist +++ b/Parse/Resources/Parse-tvOS.Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.14.2 + 1.15.0 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.15.0 NSPrincipalClass diff --git a/Parse/Resources/Parse-watchOS.Info.plist b/Parse/Resources/Parse-watchOS.Info.plist index 64524f773..7558171b5 100644 --- a/Parse/Resources/Parse-watchOS.Info.plist +++ b/Parse/Resources/Parse-watchOS.Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.14.2 + 1.15.0 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.15.0 NSPrincipalClass diff --git a/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/project.pbxproj b/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/project.pbxproj index 9e5e9fe2b..dd63be378 100644 --- a/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/project.pbxproj +++ b/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/project.pbxproj @@ -151,7 +151,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0730; + LastUpgradeCheck = 0830; ORGANIZATIONNAME = Parse; TargetAttributes = { 81993FD51B69AC760077D6B9 = { @@ -159,6 +159,7 @@ }; 81CC85B71A49F2E00076DE19 = { CreatedOnToolsVersion = 6.1.1; + LastSwiftMigration = 0830; }; }; }; @@ -268,8 +269,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -277,6 +280,7 @@ ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -310,8 +314,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; @@ -319,6 +325,7 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -328,6 +335,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; @@ -344,6 +352,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.parse.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "ParseOSXStarterProject-Swift"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -360,6 +369,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.parse.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "ParseOSXStarterProject-Swift"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject-Swift.xcscheme b/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject-Swift.xcscheme index 6177b7f7e..b0cf95ffd 100644 --- a/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject-Swift.xcscheme +++ b/ParseStarterProject/OSX/ParseOSXStarterProject-Swift/ParseOSXStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject-Swift.xcscheme @@ -1,6 +1,6 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSMainNibFile diff --git a/ParseStarterProject/OSX/ParseOSXStarterProject/ParseOSXStarterProject.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject.xcscheme b/ParseStarterProject/OSX/ParseOSXStarterProject/ParseOSXStarterProject.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject.xcscheme index b4d06c79c..095e900d2 100644 --- a/ParseStarterProject/OSX/ParseOSXStarterProject/ParseOSXStarterProject.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject.xcscheme +++ b/ParseStarterProject/OSX/ParseOSXStarterProject/ParseOSXStarterProject.xcodeproj/xcshareddata/xcschemes/ParseOSXStarterProject.xcscheme @@ -1,6 +1,6 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSMainNibFile diff --git a/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/project.pbxproj b/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/project.pbxproj index a55df3213..1279f6120 100644 --- a/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/project.pbxproj +++ b/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/project.pbxproj @@ -28,10 +28,10 @@ 81BA814D1A49DA1800E65899 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81BA814C1A49DA1800E65899 /* ViewController.swift */; }; 81BA81701A49DB6800E65899 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81BA816B1A49DB6800E65899 /* Bolts.framework */; }; 81BA81711A49DB6800E65899 /* Parse.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81BA816C1A49DB6800E65899 /* Parse.framework */; }; - 81BA81771A49E0D500E65899 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 81BA81761A49E0D500E65899 /* libsqlite3.dylib */; }; 81BA81791A49E0DB00E65899 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81BA81781A49E0DB00E65899 /* AudioToolbox.framework */; }; 81BA817B1A49E0E500E65899 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81BA817A1A49E0E500E65899 /* SystemConfiguration.framework */; }; - 81BA817F1A49E0F000E65899 /* libstdc++.6.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 81BA817E1A49E0F000E65899 /* libstdc++.6.dylib */; }; + 8374E1021D9AB18E00E7A0B7 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8374E1011D9AB18E00E7A0B7 /* libsqlite3.tbd */; }; + 8374E1041D9AB24200E7A0B7 /* libstdc++.6.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8374E1031D9AB24200E7A0B7 /* libstdc++.6.tbd */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,12 +54,10 @@ 81BA814C1A49DA1800E65899 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 81BA816B1A49DB6800E65899 /* Bolts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Bolts.framework; sourceTree = ""; }; 81BA816C1A49DB6800E65899 /* Parse.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Parse.framework; sourceTree = ""; }; - 81BA816E1A49DB6800E65899 /* ParseFacebookUtils.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ParseFacebookUtils.framework; sourceTree = ""; }; - 81BA81761A49E0D500E65899 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; 81BA81781A49E0DB00E65899 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 81BA817A1A49E0E500E65899 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - 81BA817E1A49E0F000E65899 /* libstdc++.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.6.dylib"; path = "usr/lib/libstdc++.6.dylib"; sourceTree = SDKROOT; }; - 81BA81801A49E10C00E65899 /* ParseUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ParseUI.framework; sourceTree = ""; }; + 8374E1011D9AB18E00E7A0B7 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; + 8374E1031D9AB24200E7A0B7 /* libstdc++.6.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.6.tbd"; path = "usr/lib/libstdc++.6.tbd"; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -67,10 +65,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 81BA817F1A49E0F000E65899 /* libstdc++.6.dylib in Frameworks */, + 8374E1041D9AB24200E7A0B7 /* libstdc++.6.tbd in Frameworks */, + 8374E1021D9AB18E00E7A0B7 /* libsqlite3.tbd in Frameworks */, 81BA817B1A49E0E500E65899 /* SystemConfiguration.framework in Frameworks */, 81BA81791A49E0DB00E65899 /* AudioToolbox.framework in Frameworks */, - 81BA81771A49E0D500E65899 /* libsqlite3.dylib in Frameworks */, 81BA81711A49DB6800E65899 /* Parse.framework in Frameworks */, 81BA81701A49DB6800E65899 /* Bolts.framework in Frameworks */, ); @@ -122,8 +120,6 @@ children = ( 81BA816B1A49DB6800E65899 /* Bolts.framework */, 81BA816C1A49DB6800E65899 /* Parse.framework */, - 81BA816E1A49DB6800E65899 /* ParseFacebookUtils.framework */, - 81BA81801A49E10C00E65899 /* ParseUI.framework */, 81BA81751A49E0C500E65899 /* System Frameworks */, ); name = Frameworks; @@ -132,10 +128,10 @@ 81BA81751A49E0C500E65899 /* System Frameworks */ = { isa = PBXGroup; children = ( - 81BA817E1A49E0F000E65899 /* libstdc++.6.dylib */, + 8374E1031D9AB24200E7A0B7 /* libstdc++.6.tbd */, 81BA817A1A49E0E500E65899 /* SystemConfiguration.framework */, 81BA81781A49E0DB00E65899 /* AudioToolbox.framework */, - 81BA81761A49E0D500E65899 /* libsqlite3.dylib */, + 8374E1011D9AB18E00E7A0B7 /* libsqlite3.tbd */, ); name = "System Frameworks"; sourceTree = ""; @@ -168,14 +164,16 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0730; + LastUpgradeCheck = 0820; ORGANIZATIONNAME = Parse; TargetAttributes = { 81993FC71B69AA940077D6B9 = { CreatedOnToolsVersion = 6.4; + LastSwiftMigration = 0800; }; 81BA81441A49DA1800E65899 = { CreatedOnToolsVersion = 6.1.1; + LastSwiftMigration = 0820; }; }; }; @@ -264,6 +262,7 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -271,6 +270,7 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -287,8 +287,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -297,6 +299,7 @@ ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -309,7 +312,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -331,8 +334,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -340,15 +345,17 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -367,6 +374,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.parse.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "ParseStarterProject-Swift"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -383,6 +391,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.parse.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "ParseStarterProject-Swift"; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -396,7 +405,7 @@ 81993FC91B69AA950077D6B9 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; 81BA81401A49DA1800E65899 /* Build configuration list for PBXProject "ParseStarterProject-Swift" */ = { isa = XCConfigurationList; @@ -405,7 +414,7 @@ 81BA81631A49DA1800E65899 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; 81BA81641A49DA1800E65899 /* Build configuration list for PBXNativeTarget "ParseStarterProject-Swift" */ = { isa = XCConfigurationList; @@ -414,7 +423,7 @@ 81BA81661A49DA1800E65899 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; /* End XCConfigurationList section */ }; diff --git a/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarterProject-Swift.xcscheme b/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarterProject-Swift.xcscheme index 920b8c760..ac29ae485 100644 --- a/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarterProject-Swift.xcscheme +++ b/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarterProject-Swift.xcscheme @@ -1,6 +1,6 @@ Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // **************************************************************************** // Initialize Parse SDK // **************************************************************************** @@ -39,9 +40,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Enable storing and querying data from Local Datastore. // Remove this line if you don't want to use Local Datastore features or want to use cachePolicy. - $0.localDatastoreEnabled = true + $0.isLocalDatastoreEnabled = true } - Parse.initializeWithConfiguration(configuration) + Parse.initialize(with: configuration) // **************************************************************************** // If you are using Facebook, uncomment and add your FacebookAppID to your bundle's plist as @@ -55,29 +56,38 @@ class AppDelegate: UIResponder, UIApplicationDelegate { let defaultACL = PFACL() // If you would like all objects to be private by default, remove this line. - defaultACL.publicReadAccess = true + defaultACL.getPublicReadAccess = true - PFACL.setDefaultACL(defaultACL, withAccessForCurrentUser: true) + PFACL.setDefault(defaultACL, withAccessForCurrentUser: true) - if application.applicationState != UIApplicationState.Background { + if application.applicationState != UIApplicationState.background { // Track an app open here if we launch with a push, unless // "content_available" was used to trigger a background push (introduced in iOS 7). // In that case, we skip tracking here to avoid double counting the app-open. - let oldPushHandlerOnly = !respondsToSelector(#selector(UIApplicationDelegate.application(_:didReceiveRemoteNotification:fetchCompletionHandler:))) + let oldPushHandlerOnly = !responds(to: #selector(UIApplicationDelegate.application(_:didReceiveRemoteNotification:fetchCompletionHandler:))) var noPushPayload = false if let options = launchOptions { - noPushPayload = options[UIApplicationLaunchOptionsRemoteNotificationKey] == nil + noPushPayload = options[UIApplicationLaunchOptionsKey.remoteNotification] == nil } if oldPushHandlerOnly || noPushPayload { - PFAnalytics.trackAppOpenedWithLaunchOptions(launchOptions) + PFAnalytics.trackAppOpened(launchOptions: launchOptions) } } - let types: UIUserNotificationType = [.Alert, .Badge, .Sound] - let settings = UIUserNotificationSettings(forTypes: types, categories: nil) - application.registerUserNotificationSettings(settings) - application.registerForRemoteNotifications() + if #available(iOS 10.0, *) { + // iOS 10+ + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in + print("Notifications access granted: \(granted.description)") + } + application.registerForRemoteNotifications() + } else { + // iOS 8, 9 + let types: UIUserNotificationType = [.alert, .badge, .sound] + let settings = UIUserNotificationSettings(types: types, categories: nil) + application.registerUserNotificationSettings(settings) + application.registerForRemoteNotifications() + } return true } @@ -86,32 +96,32 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // MARK: Push Notifications //-------------------------------------- - func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { - let installation = PFInstallation.currentInstallation() - installation?.setDeviceTokenFromData(deviceToken) + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + let installation = PFInstallation.current() + installation?.setDeviceTokenFrom(deviceToken) installation?.saveInBackground() - PFPush.subscribeToChannelInBackground("") { (succeeded: Bool, error: NSError?) in + PFPush.subscribeToChannel(inBackground: "") { succeeded, error in if succeeded { print("ParseStarterProject successfully subscribed to push notifications on the broadcast channel.\n") } else { - print("ParseStarterProject failed to subscribe to push notifications on the broadcast channel with error = %@.\n", error) + print("ParseStarterProject failed to subscribe to push notifications on the broadcast channel with error = %@.\n", error!) } } } - func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { - if error.code == 3010 { + func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { + if error._code == 3010 { print("Push notifications are not supported in the iOS Simulator.\n") } else { print("application:didFailToRegisterForRemoteNotificationsWithError: %@\n", error) } } - func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { - PFPush.handlePush(userInfo) - if application.applicationState == UIApplicationState.Inactive { - PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo) + func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { + PFPush.handle(userInfo) + if application.applicationState == UIApplicationState.inactive { + PFAnalytics.trackAppOpened(withRemoteNotificationPayload: userInfo) } } diff --git a/ParseStarterProject/iOS/ParseStarterProject-Swift/Resources/Info.plist b/ParseStarterProject/iOS/ParseStarterProject-Swift/Resources/Info.plist index eafff20c9..1334ae32c 100644 --- a/ParseStarterProject/iOS/ParseStarterProject-Swift/Resources/Info.plist +++ b/ParseStarterProject/iOS/ParseStarterProject-Swift/Resources/Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 LSRequiresIPhoneOS UILaunchStoryboardName diff --git a/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/project.pbxproj b/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/project.pbxproj index 02100a3a1..cad5e898e 100644 --- a/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/project.pbxproj +++ b/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/project.pbxproj @@ -229,8 +229,11 @@ 09ABC06413A1D52D009C3FCF /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0720; + LastUpgradeCheck = 0830; TargetAttributes = { + 09ABC06C13A1D52D009C3FCF = { + LastSwiftMigration = 0830; + }; 814C3AE61B69A87F00E307BB = { CreatedOnToolsVersion = 6.4; }; @@ -340,12 +343,28 @@ 09ABC08C13A1D52E009C3FCF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -354,9 +373,24 @@ 09ABC08D13A1D52E009C3FCF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; }; @@ -375,7 +409,9 @@ ); GCC_DYNAMIC_NO_PIC = NO; INFOPLIST_FILE = Resources/Info.plist; + PRODUCT_BUNDLE_IDENTIFIER = "com.parse.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; WRAPPER_EXTENSION = app; }; name = Debug; @@ -392,7 +428,9 @@ "$(PROJECT_DIR)", ); INFOPLIST_FILE = Resources/Info.plist; + PRODUCT_BUNDLE_IDENTIFIER = "com.parse.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; VALIDATE_PRODUCT = YES; WRAPPER_EXTENSION = app; }; diff --git a/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/xcshareddata/xcschemes/ParseStarterProject.xcscheme b/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/xcshareddata/xcschemes/ParseStarterProject.xcscheme index c8956a81e..0163236b9 100644 --- a/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/xcshareddata/xcschemes/ParseStarterProject.xcscheme +++ b/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject.xcodeproj/xcshareddata/xcschemes/ParseStarterProject.xcscheme @@ -1,6 +1,6 @@ CFBundleIconFile CFBundleIdentifier - com.parse.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -19,11 +19,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 LSRequiresIPhoneOS NSMainNibFile diff --git a/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj b/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj index 877051b90..b0409d297 100644 --- a/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj +++ b/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj @@ -150,6 +150,7 @@ }; 81C066EB1BFAC1D4001E0658 = { CreatedOnToolsVersion = 7.1.1; + LastSwiftMigration = 0830; }; }; }; @@ -340,6 +341,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.parse.starter; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; @@ -360,6 +362,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.parse.starter; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; diff --git a/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarter-tvOS.xcscheme b/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarter-tvOS.xcscheme index 6f22c60bd..63fe38667 100644 --- a/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarter-tvOS.xcscheme +++ b/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseStarter-tvOS.xcscheme @@ -1,6 +1,6 @@ Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // **************************************************************************** // Initialize Parse SDK // **************************************************************************** @@ -34,13 +34,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Uncomment the following line and change to your Parse Server address; $0.server = "https://YOUR_PARSE_SERVER/parse" } - Parse.initializeWithConfiguration(configuration) + Parse.initialize(with: configuration) PFUser.enableAutomaticUser() let defaultACL = PFACL() - defaultACL.publicReadAccess = true // If you would like all objects to be private by default, remove this line. - PFACL.setDefaultACL(defaultACL, withAccessForCurrentUser: true) + defaultACL.getPublicReadAccess = true // If you would like all objects to be private by default, remove this line. + PFACL.setDefault(defaultACL, withAccessForCurrentUser: true) return true } diff --git a/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter/Info.plist b/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter/Info.plist index 7d650d3f6..5db825ab0 100644 --- a/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter/Info.plist +++ b/ParseStarterProject/tvOS/ParseStarterProject-Swift/ParseStarter/Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 LSRequiresIPhoneOS UIMainStoryboardFile diff --git a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/ExtensionDelegate.swift b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/ExtensionDelegate.swift index be4e04124..4c5bc4d66 100644 --- a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/ExtensionDelegate.swift +++ b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/ExtensionDelegate.swift @@ -28,12 +28,12 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate { // Enable storing and querying data from Local Datastore. // Remove this line if you don't want to use Local Datastore features or want to use cachePolicy. - $0.localDatastoreEnabled = true + $0.isLocalDatastoreEnabled = true } - Parse.initializeWithConfiguration(configuration) + Parse.initialize(with: configuration) // Track application opened event in Analytics - PFAnalytics.trackAppOpenedWithLaunchOptions(nil) + PFAnalytics.trackAppOpened(launchOptions: nil) } func applicationDidBecomeActive() { diff --git a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/Info.plist b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/Info.plist index 50fc8d85c..d7267349f 100644 --- a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/Info.plist +++ b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/Info.plist @@ -17,11 +17,11 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 NSExtension NSExtensionAttributes diff --git a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/InterfaceController.swift b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/InterfaceController.swift index 61cd58f4e..ed8beaa1b 100644 --- a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/InterfaceController.swift +++ b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter Extension/InterfaceController.swift @@ -13,8 +13,8 @@ import Parse class InterfaceController: WKInterfaceController { - override func awakeWithContext(context: AnyObject?) { - super.awakeWithContext(context) + override func awake(withContext context: Any?) { + super.awake(withContext: context) // Configure interface objects here. } diff --git a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj index 52353cbfa..87f57a265 100644 --- a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj +++ b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/project.pbxproj @@ -321,12 +321,15 @@ TargetAttributes = { 81411DCC1BC3658C0004BE84 = { CreatedOnToolsVersion = 7.0.1; + LastSwiftMigration = 0830; }; 81411DD81BC3658C0004BE84 = { CreatedOnToolsVersion = 7.0.1; + LastSwiftMigration = 0830; }; 81993FC71B69AA940077D6B9 = { CreatedOnToolsVersion = 6.4; + LastSwiftMigration = 0830; }; 81BA81441A49DA1800E65899 = { CreatedOnToolsVersion = 6.1.1; @@ -470,6 +473,7 @@ PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; @@ -492,6 +496,7 @@ PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; @@ -511,6 +516,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; @@ -530,6 +536,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; @@ -539,6 +546,7 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -546,6 +554,7 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseWatchStarter-iOS.xcscheme b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseWatchStarter-iOS.xcscheme index f85adbac1..ba8325657 100644 --- a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseWatchStarter-iOS.xcscheme +++ b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarter-Swift.xcodeproj/xcshareddata/xcschemes/ParseWatchStarter-iOS.xcscheme @@ -1,6 +1,6 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/ParseStarterProject/watchOS/ParseStarterProject-Swift/Resources/Info.plist b/ParseStarterProject/watchOS/ParseStarterProject-Swift/Resources/Info.plist index f7fb1ed61..7fb3a0f82 100644 --- a/ParseStarterProject/watchOS/ParseStarterProject-Swift/Resources/Info.plist +++ b/ParseStarterProject/watchOS/ParseStarterProject-Swift/Resources/Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.14.2 + 1.14.5 CFBundleSignature ???? CFBundleVersion - 1.14.2 + 1.14.5 LSRequiresIPhoneOS UIMainStoryboardFile diff --git a/README.md b/README.md index 31aa916d9..2b62325b8 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,14 @@ [![Join Chat][gitter-svg]][gitter-link] A library that gives you access to the powerful Parse cloud platform from your iOS or OS X app. -For more information Parse and its features, see [the website][parse.com] and [getting started][docs]. +For more information about Parse and its features, see [the blog][blog] and public [documentation][docs]. ## Getting Started To use parse, head on over to the [releases][releases] page, and download the latest build. -And you're off! Take a look at the public [documentation][docs] and start building. +And you're off!. Take a look at the public [documentation][docs] & [API][api] and start building. + +Notice the API docs aren't totally up to date when it comes to latest Swift signature of the methods and more importantly regarding [Push Notifications](http://blog.parse.com/learn/engineering/the-dangerous-world-of-client-push/) which are **no longer supported by Parse server**, keep an eye on [its repo](https://github.com/ParsePlatform/parse-server) **Other Installation Options** @@ -36,7 +38,7 @@ And you're off! Take a look at the public [documentation][docs] and start buildi Add the following line to your Cartfile: ``` - github "ParsePlatform/Parse-SDK-iOS-OSX" + github "parse-community/Parse-SDK-iOS-OSX" ``` Run `carthage update`, and you should now have the latest version of Parse SDK in your Carthage folder. @@ -87,28 +89,30 @@ LICENSE file in the root directory of this source tree. An additional grant of patent rights can be found in the PATENTS file in the same directory. ``` - [parse.com]: https://www.parse.com/products/ios - [docs]: https://www.parse.com/docs/ios/guide - [blog]: https://blog.parse.com/ +As of April 5, 2017, Parse, LLC has transferred this code to the parse-community organization, and will no longer be contributing to or distributing this code. + + [docs]: http://docs.parseplatform.org/ios/guide/ + [blog]: http://blog.parse.com/ + [api]: http://parseplatform.org/Parse-SDK-iOS-OSX/api/ - [parseui-link]: https://github.com/ParsePlatform/ParseUI-iOS - [parsefacebookutils-link]: https://github.com/ParsePlatform/ParseFacebookUtils-iOS - [parsetwitterutils-link]: https://github.com/ParsePlatform/ParseTwitterUtils-iOS + [parseui-link]: https://github.com/parse-community/ParseUI-iOS + [parsefacebookutils-link]: https://github.com/parse-community/ParseFacebookUtils-iOS + [parsetwitterutils-link]: https://github.com/parse-community/ParseTwitterUtils-iOS - [releases]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/releases - [contributing]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/CONTRIBUTING.md + [releases]: https://github.com/parse-community/Parse-SDK-iOS-OSX/releases + [contributing]: https://github.com/parse-community/Parse-SDK-iOS-OSX/blob/master/CONTRIBUTING.md [bolts-framework]: https://github.com/BoltsFramework/Bolts-ObjC [ocmock-framework]: http://ocmock.org - [build-status-svg]: https://img.shields.io/travis/ParsePlatform/Parse-SDK-iOS-OSX/master.svg - [build-status-link]: https://travis-ci.org/ParsePlatform/Parse-SDK-iOS-OSX/branches + [build-status-svg]: https://img.shields.io/travis/parse-community/Parse-SDK-iOS-OSX/master.svg + [build-status-link]: https://travis-ci.org/parse-community/Parse-SDK-iOS-OSX/branches - [coverage-status-svg]: https://img.shields.io/codecov/c/github/ParsePlatform/Parse-SDK-iOS-OSX/master.svg - [coverage-status-link]: https://codecov.io/github/ParsePlatform/Parse-SDK-iOS-OSX?branch=master + [coverage-status-svg]: https://img.shields.io/codecov/c/github/parse-community/Parse-SDK-iOS-OSX/master.svg + [coverage-status-link]: https://codecov.io/github/parse-community/Parse-SDK-iOS-OSX?branch=master [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg - [license-link]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/LICENSE + [license-link]: https://github.com/parse-community/Parse-SDK-iOS-OSX/blob/master/LICENSE [podspec-svg]: https://img.shields.io/cocoapods/v/Parse.svg [podspec-link]: https://cocoapods.org/pods/Parse @@ -119,7 +123,7 @@ of patent rights can be found in the PATENTS file in the same directory. [platforms-svg]: http://img.shields.io/cocoapods/p/Parse.svg?style=flat [dependencies-svg]: https://img.shields.io/badge/dependencies-2-yellowgreen.svg - [dependencies-link]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/Vendor + [dependencies-link]: https://github.com/parse-community/Parse-SDK-iOS-OSX/blob/master/Vendor [references-svg]: https://www.versioneye.com/objective-c/parse/reference_badge.svg [references-link]: https://www.versioneye.com/objective-c/parse/references diff --git a/Rakefile b/Rakefile index 3571fe6e3..e23a6431e 100644 --- a/Rakefile +++ b/Rakefile @@ -299,8 +299,7 @@ namespace :test do t.scheme = 'Parse-iOS' t.sdk = 'iphonesimulator' - t.destinations = ["\"platform=iOS Simulator,OS=9.1,name=iPhone 4s\"", - "\"platform=iOS Simulator,OS=9.1,name=iPhone 6s\"",] + t.destinations = ["\"platform=iOS Simulator,OS=9.1,name=iPhone 6s\"",] t.configuration = 'Debug' t.additional_options = { "GCC_INSTRUMENT_PROGRAM_FLOW_ARCS" => "YES", "GCC_GENERATE_TEST_COVERAGE_FILES" => "YES" } diff --git a/Tests/Other/Swift/SwiftSubclass.swift b/Tests/Other/Swift/SwiftSubclass.swift index 6db82970c..59dedeed1 100644 --- a/Tests/Other/Swift/SwiftSubclass.swift +++ b/Tests/Other/Swift/SwiftSubclass.swift @@ -13,10 +13,13 @@ import Parse @objc public class SwiftSubclass: PFObject, PFSubclassing { + @NSManaged public var primitiveProperty: Int @NSManaged public var objectProperty: AnyObject? - @NSManaged public var relationProperty: PFRelation? + public var relationProperty: PFRelation { + return relation(forKey: "relationProperty") + } @NSManaged public var badProperty: CGPoint public static func parseClassName() -> String { diff --git a/Tests/Unit/AlertViewTests.m b/Tests/Unit/AlertViewTests.m index 035510cac..ef5620779 100644 --- a/Tests/Unit/AlertViewTests.m +++ b/Tests/Unit/AlertViewTests.m @@ -112,7 +112,8 @@ - (void)testShowAlertWithAlertViewController { OCMVerifyAll(mockedAlertController); } -- (void)testShowWithoutAlertViewController { + +- (void)disabledTestShowWithoutAlertViewController { id mockedAlertView = PFStrictClassMock([UIAlertView class]); PFTestSwizzledMethod *swizzledMethod = [PFTestSwizzlingUtilities swizzleClassMethod:@selector(class) diff --git a/Tests/Unit/DecoderTests.m b/Tests/Unit/DecoderTests.m index b8f0cfec4..d0bdbcd9b 100644 --- a/Tests/Unit/DecoderTests.m +++ b/Tests/Unit/DecoderTests.m @@ -45,6 +45,17 @@ - (void)testDecodingFieldOperations { XCTAssertEqualObjects(operation.amount, @100500); } +- (void)testDecodingDeleteOperation { + PFDecoder *decoder = [[PFDecoder alloc] init]; + + NSDictionary *decoded = [decoder decodeObject:@{ @"key" : @{@"__op" : @"Delete"} }]; + XCTAssertNotNil(decoded); + + id operation = decoded[@"key"]; + XCTAssertNotNil(operation); + PFAssertIsKindOfClass(operation, [PFDeleteOperation class]); +} + - (void)testDecodingDates { PFDecoder *decoder = [[PFDecoder alloc] init]; diff --git a/Tests/Unit/InstallationUnitTests.m b/Tests/Unit/InstallationUnitTests.m index 5aad50ab0..3d5941873 100644 --- a/Tests/Unit/InstallationUnitTests.m +++ b/Tests/Unit/InstallationUnitTests.m @@ -6,10 +6,16 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ +#import #import "PFInstallation.h" #import "PFUnitTestCase.h" #import "Parse.h" +#import "Parse_Private.h" +#import "PFCommandRunning.h" +#import "ParseManagerPrivate.h" +#import "PFObjectState.h" +#import "PFObjectPrivate.h" @interface InstallationUnitTests : PFUnitTestCase @@ -17,6 +23,47 @@ @interface InstallationUnitTests : PFUnitTestCase @implementation InstallationUnitTests +- (void)testInstallationObjectIdCannotBeChanged { + PFInstallation *installation = [PFInstallation currentInstallation]; + PFAssertThrowsInvalidArgumentException(installation.objectId = nil); + PFAssertThrowsInvalidArgumentException(installation[@"objectId"] = @"abc"); +} + +- (void)testObjectNotFoundWhenSave { +#if TARGET_OS_IOS + // enable LDS + [[Parse _currentManager]loadOfflineStoreWithOptions:0]; + PFOfflineStore *offlineStoreSpy = PFPartialMock([Parse _currentManager].offlineStore); + [Parse _currentManager].offlineStore = offlineStoreSpy; + + // create and save installation + PFInstallation *installation = [PFInstallation currentInstallation]; + PFObjectState *state = [PFObjectState stateWithParseClassName:[PFInstallation parseClassName] objectId:@"abc" isComplete:YES]; + installation._state = state; + [installation save]; + + // mocking installation was deleted on the server + id commandRunner = PFStrictProtocolMock(@protocol(PFCommandRunning)); + [Parse _currentManager].commandRunner = commandRunner; + + BFTask *mockedTask = [BFTask taskWithError:[NSError errorWithDomain:@"Object Not Found" code:kPFErrorObjectNotFound userInfo:nil]]; + + __block int callCount = 0; + OCMStub([commandRunner runCommandAsync:[OCMArg any] withOptions:PFCommandRunningOptionRetryIfFailed]) + .andReturn(mockedTask) + .andDo(^(NSInvocation *invocation) { + callCount++; + }); + + installation.deviceToken = @"11433856eed2f1285fb3aa11136718c1198ed5647875096952c66bf8cb976306"; + [installation save]; + OCMVerifyAll(commandRunner); + XCTAssertEqual(2, callCount); + OCMVerify([offlineStoreSpy updateObjectIdForObject:installation oldObjectId:nil newObjectId:@"abc"]); + OCMVerify([offlineStoreSpy updateObjectIdForObject:installation oldObjectId:@"abc" newObjectId:nil]); +#endif +} + - (void)testInstallationImmutableFieldsCannotBeChanged { PFInstallation *installation = [PFInstallation currentInstallation]; installation.deviceToken = @"11433856eed2f1285fb3aa11136718c1198ed5647875096952c66bf8cb976306"; diff --git a/Tests/Unit/ObjectStateTests.m b/Tests/Unit/ObjectStateTests.m index 0b869ee64..baec00811 100644 --- a/Tests/Unit/ObjectStateTests.m +++ b/Tests/Unit/ObjectStateTests.m @@ -166,6 +166,17 @@ - (void)testServerData { XCTAssertEqualObjects(mutableState.serverData, @{ @"foo": @"bar" }); } +- (void)testDeleteFromServerData { + PFMutableObjectState *mutableState = [[PFMutableObjectState alloc] init]; + XCTAssertEqualObjects(mutableState.serverData, @{}); + + [mutableState setServerDataObject:@"foo" forKey:@"bar"]; + XCTAssertEqualObjects(mutableState.serverData, @{ @"bar": @"foo" }); + + [mutableState setServerDataObject:[PFDeleteOperation new] forKey:@"bar"]; + XCTAssertEqualObjects(mutableState.serverData, @{}); +} + - (void)testEncode { PFMutableObjectState *mutableState = [[PFMutableObjectState alloc] init]; mutableState.objectId = @"objectId"; diff --git a/Tests/Unit/ObjectSubclassingControllerTests.m b/Tests/Unit/ObjectSubclassingControllerTests.m index 9e4306251..75914218f 100644 --- a/Tests/Unit/ObjectSubclassingControllerTests.m +++ b/Tests/Unit/ObjectSubclassingControllerTests.m @@ -29,7 +29,7 @@ @interface PropertySubclass : PFObject { @property (nonatomic, assign) int primitiveProperty; @property (nonatomic, strong) id objectProperty; -@property (nonatomic, strong, readonly) PFRelation *relationProperty; +@property (nonatomic, strong, readonly) PFRelation *relationProperty; @property (nonatomic, strong) PFRelation *badRelation; @property (nonatomic, strong) id ivarProperty; @@ -367,6 +367,8 @@ - (void)testSwiftGetters { [subclassingController forwardObjectInvocation:invocation withObject:target]; AssertInvocationAssertValueEquals(invocation, __unsafe_unretained id, nil); + /* + // Because of lightweight generics the ivar type of the relation is @ and not @PFRelation anymore, still works correctly in obj-c invocation = [self _forwardingInvocationForTarget:target selector:@selector(relationProperty) controller:subclassingController]; @@ -374,6 +376,7 @@ - (void)testSwiftGetters { __unsafe_unretained PFRelation *returnValue = nil; [invocation getReturnValue:&returnValue]; XCTAssertTrue([returnValue isKindOfClass:[PFRelation class]]); + */ invocation = [self _forwardingInvocationForTarget:target selector:@selector(badProperty) diff --git a/Tests/Unit/QueryUnitTests.m b/Tests/Unit/QueryUnitTests.m index 24d33b634..b366452c6 100644 --- a/Tests/Unit/QueryUnitTests.m +++ b/Tests/Unit/QueryUnitTests.m @@ -415,6 +415,16 @@ - (void)testWhereKeyWithinGeobox { XCTAssertEqualObjects(query.state.conditions, (@{ @"yolo" : @{@"$within" : @{@"$box" : @[ geoPoint1, geoPoint2 ]}} })); } +- (void)testWhereKeyWithinPolygon { + PFGeoPoint *geoPoint1 = [PFGeoPoint geoPointWithLatitude:10.0 longitude:20.0]; + PFGeoPoint *geoPoint2 = [PFGeoPoint geoPointWithLatitude:20.0 longitude:30.0]; + PFGeoPoint *geoPoint3 = [PFGeoPoint geoPointWithLatitude:30.0 longitude:40.0]; + + PFQuery *query = [PFQuery queryWithClassName:@"a"]; + [query whereKey:@"yolo" withinPolygon:@[geoPoint1, geoPoint2, geoPoint3]]; + XCTAssertEqualObjects(query.state.conditions, (@{ @"yolo" : @{@"$geoWithin" : @{@"$polygon" : @[ geoPoint1, geoPoint2, geoPoint3 ]}} })); +} + - (void)testWhereKeyMatchesRegex { PFQuery *query = [PFQuery queryWithClassName:@"a"]; [query whereKey:@"yolo" matchesRegex:@"yarr"];