瀏覽代碼

Merge branch 'develop'

Marino Faggiana 7 年之前
父節點
當前提交
9948b66226
共有 100 個文件被更改,包括 107749 次插入3279 次删除
  1. 2 3
      .gitignore
  2. 二進制
      Libraries external/Analytics/FirebaseAnalytics.framework/FirebaseAnalytics
  3. 3 3
      Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h
  4. 1 1
      Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics.h
  5. 34 0
      Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIREventNames.h
  6. 72 0
      Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
  7. 1 2
      Libraries external/Analytics/FirebaseAnalytics.framework/Modules/module.modulemap
  8. 二進制
      Libraries external/Analytics/FirebaseCore.framework/FirebaseCore
  9. 6 0
      Libraries external/Analytics/FirebaseCore.framework/Headers/FIROptions.h
  10. 0 3
      Libraries external/Analytics/FirebaseCore.framework/Modules/module.modulemap
  11. 二進制
      Libraries external/Analytics/FirebaseInstanceID.framework/FirebaseInstanceID
  12. 1 1
      Libraries external/Analytics/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
  13. 2 2
      Libraries external/Analytics/FirebaseInstanceID.framework/Modules/module.modulemap
  14. 二進制
      Libraries external/Analytics/FirebaseMessaging.framework/FirebaseMessaging
  15. 1 0
      Libraries external/Analytics/FirebaseMessaging.framework/Headers/FIRMessaging.h
  16. 1 2
      Libraries external/Analytics/FirebaseMessaging.framework/Modules/module.modulemap
  17. 二進制
      Libraries external/Analytics/GoogleToolboxForMac.framework/GoogleToolboxForMac
  18. 二進制
      Libraries external/Analytics/Protobuf.framework/Protobuf
  19. 169 0
      Libraries external/JDStatusBarNotification/JDStatusBarNotification.h
  20. 600 0
      Libraries external/JDStatusBarNotification/JDStatusBarNotification.m
  21. 77 0
      Libraries external/JDStatusBarNotification/JDStatusBarStyle.h
  22. 106 0
      Libraries external/JDStatusBarNotification/JDStatusBarStyle.m
  23. 15 0
      Libraries external/JDStatusBarNotification/JDStatusBarView.h
  24. 95 0
      Libraries external/JDStatusBarNotification/JDStatusBarView.m
  25. 1 1
      Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/MagicalRecord for OS X.xcscheme
  26. 1 1
      Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/MagicalRecord for iOS.xcscheme
  27. 1 1
      Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/libMagicalRecord for OS X.xcscheme
  28. 1 1
      Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/libMagicalRecord for iOS.xcscheme
  29. 二進制
      Libraries external/OCCommunicationLib/OCCommunicationLib/Resources/test.jpeg
  30. 二進制
      Libraries external/OCCommunicationLib/OCCommunicationLib/Resources/video.MOV
  31. 0 34
      Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCChunkDto.h
  32. 0 30
      Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCChunkDto.m
  33. 0 13
      Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCURLSessionUploadTask.h
  34. 0 13
      Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCURLSessionUploadTask.m
  35. 0 17
      Libraries external/OCCommunicationLib/OCCommunicationLib/ownCloud iOS library-Prefix.pch
  36. 0 41
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/ConfigTests.h
  37. 0 37
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/OCCommunicationLibTests.h
  38. 0 2231
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/OCCommunicationLibTests.m
  39. 0 2
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/en.lproj/InfoPlist.strings
  40. 0 2
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/fr.lproj/InfoPlist.strings
  41. 0 2
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/is.lproj/InfoPlist.strings
  42. 0 22
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/ownCloud iOS libraryTests-Info.plist
  43. 0 2
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/pl.lproj/InfoPlist.strings
  44. 0 2
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/pt-BR.lproj/InfoPlist.strings
  45. 0 2
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/ru.lproj/InfoPlist.strings
  46. 0 2
      Libraries external/OCCommunicationLib/OCCommunicationLibTests/zh-Hans-CN.lproj/InfoPlist.strings
  47. 0 657
      Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/project.pbxproj
  48. 0 7
      Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  49. 二進制
      Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/project.xcworkspace/xcuserdata/marinofaggiana.xcuserdatad/UserInterfaceState.xcuserstate
  50. 0 81
      Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcshareddata/xcschemes/ownCloud iOS library.xcscheme
  51. 0 5
      Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcuserdata/Gonzalo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  52. 0 27
      Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcuserdata/Gonzalo.xcuserdatad/xcschemes/xcschememanagement.plist
  53. 0 29
      Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcuserdata/marinofaggiana.xcuserdatad/xcschemes/xcschememanagement.plist
  54. 12497 0
      Libraries external/Realm/Realm.framework/28DC3C4D-9ED3-3B6D-BA11-0DADE89D5E44.bcsymbolmap
  55. 12489 0
      Libraries external/Realm/Realm.framework/39584005-C47E-316A-80FC-328682F8C4BF.bcsymbolmap
  56. 544 0
      Libraries external/Realm/Realm.framework/9EA41024-E172-39B4-B0B8-6A4C3DF5CF37.bcsymbolmap
  57. 11440 0
      Libraries external/Realm/Realm.framework/A3A08E7F-D7E4-3A60-BF5C-30D6BA763CDC.bcsymbolmap
  58. 563 0
      Libraries external/Realm/Realm.framework/ABA8E654-1821-3570-86D7-FC63F21DABA7.bcsymbolmap
  59. 568 0
      Libraries external/Realm/Realm.framework/AD7B7691-B0A5-312F-A1FF-FE8A01860297.bcsymbolmap
  60. 12488 0
      Libraries external/Realm/Realm.framework/C6443776-AC38-3F17-BD1B-F68382E06830.bcsymbolmap
  61. 2470 0
      Libraries external/Realm/Realm.framework/CHANGELOG.md
  62. 12488 0
      Libraries external/Realm/Realm.framework/D6309AE2-90A1-3CE2-BFD1-372B3CA56E9D.bcsymbolmap
  63. 11441 0
      Libraries external/Realm/Realm.framework/D6F6FC9F-9069-3070-B2D0-62CF2AC58F9E.bcsymbolmap
  64. 568 0
      Libraries external/Realm/Realm.framework/F1BD0100-4BAF-36D7-8C01-4C783A0015D5.bcsymbolmap
  65. 11459 0
      Libraries external/Realm/Realm.framework/F720D66D-0BD8-363C-B016-3966EBEE210E.bcsymbolmap
  66. 11440 0
      Libraries external/Realm/Realm.framework/FA1BDC9B-FD09-3C94-90A6-84A41345E31E.bcsymbolmap
  67. 539 0
      Libraries external/Realm/Realm.framework/FB53A2D3-6CCC-3A3F-AC69-2F0F437B6A08.bcsymbolmap
  68. 563 0
      Libraries external/Realm/Realm.framework/FEA2B31A-1910-3950-B60E-FEDD7916150F.bcsymbolmap
  69. 43 0
      Libraries external/Realm/Realm.framework/Headers/NSError+RLMSync.h
  70. 439 0
      Libraries external/Realm/Realm.framework/Headers/RLMArray.h
  71. 411 0
      Libraries external/Realm/Realm.framework/Headers/RLMCollection.h
  72. 204 0
      Libraries external/Realm/Realm.framework/Headers/RLMConstants.h
  73. 127 0
      Libraries external/Realm/Realm.framework/Headers/RLMMigration.h
  74. 535 0
      Libraries external/Realm/Realm.framework/Headers/RLMObject.h
  75. 43 0
      Libraries external/Realm/Realm.framework/Headers/RLMObjectBase.h
  76. 82 0
      Libraries external/Realm/Realm.framework/Headers/RLMObjectBase_Dynamic.h
  77. 72 0
      Libraries external/Realm/Realm.framework/Headers/RLMObjectSchema.h
  78. 22 0
      Libraries external/Realm/Realm.framework/Headers/RLMPlatform.h
  79. 121 0
      Libraries external/Realm/Realm.framework/Headers/RLMProperty.h
  80. 652 0
      Libraries external/Realm/Realm.framework/Headers/RLMRealm.h
  81. 43 0
      Libraries external/Realm/Realm.framework/Headers/RLMRealmConfiguration+Sync.h
  82. 121 0
      Libraries external/Realm/Realm.framework/Headers/RLMRealmConfiguration.h
  83. 118 0
      Libraries external/Realm/Realm.framework/Headers/RLMRealm_Dynamic.h
  84. 342 0
      Libraries external/Realm/Realm.framework/Headers/RLMResults.h
  85. 77 0
      Libraries external/Realm/Realm.framework/Headers/RLMSchema.h
  86. 69 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncConfiguration.h
  87. 106 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncCredentials.h
  88. 118 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncManager.h
  89. 55 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncPermission.h
  90. 90 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionChange.h
  91. 91 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionOffer.h
  92. 73 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionOfferResponse.h
  93. 112 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionResults.h
  94. 113 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionValue.h
  95. 159 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncSession.h
  96. 233 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncUser.h
  97. 181 0
      Libraries external/Realm/Realm.framework/Headers/RLMSyncUtil.h
  98. 106 0
      Libraries external/Realm/Realm.framework/Headers/RLMThreadSafeReference.h
  99. 44 0
      Libraries external/Realm/Realm.framework/Headers/Realm.h
  100. 二進制
      Libraries external/Realm/Realm.framework/Info.plist

+ 2 - 3
.gitignore

@@ -4,14 +4,13 @@
 #                                                                       #
 #       Title         - .gitignore file                                 #
 #       For           - iOS - Xcode8                                    #
-#       Updated on    - 06/March/2017                                   #
 #                                                                       #
 #########################################################################
 
-############ Various settings ############
+## Nextcloud
+.DS_Store
 *.xcodeproj
 !Nextcloud.xcodeproj
-xcuserdata/
 README.md
 Documentation/
 Custom/

二進制
Libraries external/Analytics/FirebaseAnalytics.framework/FirebaseAnalytics


+ 3 - 3
Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h

@@ -34,9 +34,9 @@
 /**
  * Handles the event when the app is launched by a URL.
  *
- * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and
- * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on iOS 8.x
- * and below) in your app.
+ * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and
+ * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on
+ * iOS 8.x and below) in your app.
  *
  * @param url The URL resource to open. This resource can be a network resource or a file.
  */

+ 1 - 1
Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics.h

@@ -44,7 +44,7 @@ NS_ASSUME_NONNULL_BEGIN
 ///     supported. NSString parameter values can be up to 100 characters long. The "firebase_"
 ///     prefix is reserved and should not be used for parameter names.
 + (void)logEventWithName:(NSString *)name
-              parameters:(nullable NSDictionary<NSString *, NSObject *> *)parameters;
+              parameters:(nullable NSDictionary<NSString *, id> *)parameters;
 
 /// Sets a user property to a given value. Up to 25 user property names are supported. Once set,
 /// user property values persist throughout the app lifecycle and across sessions.

+ 34 - 0
Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIREventNames.h

@@ -98,6 +98,14 @@ static NSString *const kFIREventBeginCheckout = @"begin_checkout";
 /// </ul>
 static NSString *const kFIREventCampaignDetails = @"campaign_details";
 
+/// Checkout progress. Params:
+///
+/// <ul>
+///    <li>@c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)</li>
+///    <li>@c kFIRParameterCheckoutOption (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventCheckoutProgress = @"checkout_progress";
+
 /// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log
 /// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy.
 /// Params:
@@ -210,6 +218,24 @@ static NSString *const kFIREventPresentOffer = @"present_offer";
 /// </ul>
 static NSString *const kFIREventPurchaseRefund = @"purchase_refund";
 
+/// Remove from cart event. Params:
+///
+/// <ul>
+///     <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li>
+///     <li>@c kFIRParameterItemID (NSString)</li>
+///     <li>@c kFIRParameterItemName (NSString)</li>
+///     <li>@c kFIRParameterItemCategory (NSString)</li>
+///     <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+///     <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+///     <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+///     <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+///     <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+///     <li>@c kFIRParameterDestination (NSString) (optional)</li>
+///     <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+///     <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventRemoveFromCart = @"remove_from_cart";
+
 /// Search event. Apps that support search features can use this event to contextualize search
 /// operations by supplying the appropriate, corresponding parameters. This event can help you
 /// identify the most popular content in your app. Params:
@@ -240,6 +266,14 @@ static NSString *const kFIREventSearch = @"search";
 /// </ul>
 static NSString *const kFIREventSelectContent = @"select_content";
 
+/// Set checkout option. Params:
+///
+/// <ul>
+///    <li>@c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)</li>
+///    <li>@c kFIRParameterCheckoutOption (NSString)</li>
+/// </ul>
+static NSString *const kFIREventSetCheckoutOption = @"set_checkout_option";
+
 /// Share event. Apps with social features can log the Share event to identify the most viral
 /// content. Params:
 ///

+ 72 - 0
Libraries external/Analytics/FirebaseAnalytics.framework/Headers/FIRParameterNames.h

@@ -27,6 +27,15 @@ static NSString *const kFIRParameterAchievementID = @"achievement_id";
 /// </pre>
 static NSString *const kFIRParameterAdNetworkClickID = @"aclid";
 
+/// The store or affiliation from which this transaction occurred (NSString).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterAffiliation : @"Google Store",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterAffiliation = @"affiliation";
+
 /// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to
 /// capture campaign information, otherwise can be populated by developer. Highly Recommended
 /// (NSString).
@@ -47,6 +56,24 @@ static NSString *const kFIRParameterCampaign = @"campaign";
 /// </pre>
 static NSString *const kFIRParameterCharacter = @"character";
 
+/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutStep : @"1",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterCheckoutStep = @"checkout_step";
+
+/// Some option on a step in an ecommerce flow (NSString).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutOption : @"Visa",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterCheckoutOption = @"checkout_option";
+
 /// Campaign content (NSString).
 static NSString *const kFIRParameterContent = @"content";
 
@@ -78,6 +105,24 @@ static NSString *const kFIRParameterCoupon = @"coupon";
 /// </pre>
 static NSString *const kFIRParameterCP1 = @"cp1";
 
+/// The name of a creative used in a promotional spot (NSString).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeName : @"Summer Sale",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterCreativeName = @"creative_name";
+
+/// The name of a creative slot (NSString).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeSlot : @"summer_banner2",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterCreativeSlot = @"creative_slot";
+
 /// Purchase currency in 3-letter <a href="http://en.wikipedia.org/wiki/ISO_4217#Active_codes">
 /// ISO_4217</a> format (NSString).
 /// <pre>
@@ -125,6 +170,15 @@ static NSString *const kFIRParameterFlightNumber = @"flight_number";
 /// </pre>
 static NSString *const kFIRParameterGroupID = @"group_id";
 
+/// Item brand (NSString).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterItemBrand : @"Google",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterItemBrand = @"item_brand";
+
 /// Item category (NSString).
 /// <pre>
 ///     NSDictionary *params = @{
@@ -162,6 +216,24 @@ static NSString *const kFIRParameterItemLocationID = @"item_location_id";
 /// </pre>
 static NSString *const kFIRParameterItemName = @"item_name";
 
+/// The list in which the item was presented to the user (NSString).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterItemList : @"Search Results",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterItemList = @"item_list";
+
+/// Item variant (NSString).
+/// <pre>
+///     NSDictionary *params = @{
+///       kFIRParameterItemVariant : @"Red",
+///       // ...
+///     };
+/// </pre>
+static NSString *const kFIRParameterItemVariant = @"item_variant";
+
 /// Level in game (signed 64-bit integer as NSNumber).
 /// <pre>
 ///     NSDictionary *params = @{

+ 1 - 2
Libraries external/Analytics/FirebaseAnalytics.framework/Modules/module.modulemap

@@ -2,9 +2,8 @@ framework module FirebaseAnalytics {
   umbrella header "FirebaseAnalytics.h"
   export *
   module * { export *}
+  link "c++"
   link "sqlite3"
   link "z"
-  link framework "CoreGraphics"
-  link framework "Foundation"
   link framework "UIKit"
 }

二進制
Libraries external/Analytics/FirebaseCore.framework/FirebaseCore


+ 6 - 0
Libraries external/Analytics/FirebaseCore.framework/Headers/FIROptions.h

@@ -33,6 +33,12 @@
  */
 @property(nonatomic, readonly, copy) NSString *GCMSenderID;
 
+/**
+ * The Project ID from the Firebase console, for example @"abc-xyz-123". Currently only populated
+ * when using [FIROptions defaultOptions].
+ */
+@property(nonatomic, readonly, copy) NSString *projectID;
+
 /**
  * The Android client ID used in Google AppInvite when an iOS app has its Android version, for
  * example @"12345.apps.googleusercontent.com".

+ 0 - 3
Libraries external/Analytics/FirebaseCore.framework/Modules/module.modulemap

@@ -4,7 +4,4 @@ framework module FirebaseCore {
   module * { export *}
   link "c++"
   link "z"
-  link framework "CoreGraphics"
-  link framework "Foundation"
-  link framework "UIKit"
 }

二進制
Libraries external/Analytics/FirebaseInstanceID.framework/FirebaseInstanceID


+ 1 - 1
Libraries external/Analytics/FirebaseInstanceID.framework/Headers/FIRInstanceID.h

@@ -111,7 +111,7 @@ typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) {
 
 /**
  *  Instance ID provides a unique identifier for each app instance and a mechanism
- *  to authenticate and authorize actions (for example, sending a GCM message).
+ *  to authenticate and authorize actions (for example, sending an FCM message).
  *
  *  Instance ID is long lived but, may be reset if the device is not used for
  *  a long time or the Instance ID service detects a problem.

+ 2 - 2
Libraries external/Analytics/FirebaseInstanceID.framework/Modules/module.modulemap

@@ -2,6 +2,6 @@ framework module FirebaseInstanceID {
   umbrella header "FirebaseInstanceID.h"
   export *
   module * { export *}
-  link framework "Foundation"
-  link framework "UIKit"
+  link "c++"
+  link "z"
 }

二進制
Libraries external/Analytics/FirebaseMessaging.framework/FirebaseMessaging


+ 1 - 0
Libraries external/Analytics/FirebaseMessaging.framework/Headers/FIRMessaging.h

@@ -100,6 +100,7 @@ typedef NS_ENUM(NSInteger, FIRMessagingMessageStatus) {
  * To support devices running iOS 9 or below, use the local and remote notifications handlers
  * defined in UIApplicationDelegate protocol.
  */
+__IOS_AVAILABLE(10.0)
 @protocol FIRMessagingDelegate <NSObject>
 
 /// The callback to handle data message received via FCM for devices running iOS 10 or above.

+ 1 - 2
Libraries external/Analytics/FirebaseMessaging.framework/Modules/module.modulemap

@@ -2,10 +2,9 @@ framework module FirebaseMessaging {
   umbrella header "FirebaseMessaging.h"
   export *
   module * { export *}
+  link "c++"
   link "sqlite3"
   link "z"
-  link framework "CoreGraphics"
-  link framework "Foundation"
   link framework "SystemConfiguration"
   link framework "UIKit"
 }

二進制
Libraries external/Analytics/GoogleToolboxForMac.framework/GoogleToolboxForMac


二進制
Libraries external/Analytics/Protobuf.framework/Protobuf


+ 169 - 0
Libraries external/JDStatusBarNotification/JDStatusBarNotification.h

@@ -0,0 +1,169 @@
+//
+//  JDStatusBarNotification.h
+//
+//  Based on KGStatusBar by Kevin Gibbon
+//
+//  Created by Markus Emrich on 10/28/13.
+//  Copyright 2013 Markus Emrich. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "JDStatusBarStyle.h"
+#import "JDStatusBarView.h"
+
+/**
+ *  A block that is used to define the appearance of a notification.
+ *  A JDStatusBarStyle instance defines the notification appeareance.
+ *
+ *  @param style The current default JDStatusBarStyle instance.
+ *
+ *  @return The modified JDStatusBarStyle instance.
+ */
+typedef JDStatusBarStyle*(^JDPrepareStyleBlock)(JDStatusBarStyle *style);
+
+/**
+ *  This class is a singletion which is used to present notifications
+ *  on top of the status bar. To present a notification, use one of the
+ *  given class methods.
+ */
+@interface JDStatusBarNotification : NSObject
+
+#pragma mark Presentation
+
+/**
+ *  Show a notification. It won't hide automatically,
+ *  you have to dimiss it on your own.
+ *
+ *  @param status The message to display
+ *
+ *  @return The presented notification view for further customization
+ */
++ (JDStatusBarView*)showWithStatus:(NSString *)status;
+
+/**
+ *  Show a notification with a specific style. It won't
+ *  hide automatically, you have to dimiss it on your own.
+ *
+ *  @param status The message to display
+ *  @param styleName The name of the style. You can use any JDStatusBarStyle constant
+ *  (JDStatusBarStyleDefault, etc.), or a custom style identifier, after you added a
+ *  custom style. If this is nil, the default style will be used.
+ *
+ *  @return The presented notification view for further customization
+ */
++ (JDStatusBarView*)showWithStatus:(NSString *)status
+                         styleName:(NSString*)styleName;
+
+/**
+ *  Same as showWithStatus:, but the notification will
+ *  automatically dismiss after the given timeInterval.
+ *
+ *  @param status       The message to display
+ *  @param timeInterval The duration, how long the notification
+ *  is displayed. (Including the animation duration)
+ *
+ *  @return The presented notification view for further customization
+ */
++ (JDStatusBarView*)showWithStatus:(NSString *)status
+                      dismissAfter:(NSTimeInterval)timeInterval;
+
+/**
+ *  Same as showWithStatus:styleName:, but the notification
+ *  will automatically dismiss after the given timeInterval.
+ *
+ *  @param status       The message to display
+ *  @param timeInterval The duration, how long the notification
+ *  is displayed. (Including the animation duration)
+ *  @param styleName The name of the style. You can use any JDStatusBarStyle constant
+ *  (JDStatusBarStyleDefault, etc.), or a custom style identifier, after you added a
+ *  custom style. If this is nil, the default style will be used.
+ *
+ *  @return The presented notification view for further customization
+ */
++ (JDStatusBarView*)showWithStatus:(NSString *)status
+                      dismissAfter:(NSTimeInterval)timeInterval
+                         styleName:(NSString*)styleName;
+
+#pragma mark Dismissal
+
+/**
+ *  Calls dismissAnimated: with animated set to YES
+ */
++ (void)dismiss;
+
+/**
+ *  Dismisses any currently displayed notification immediately
+ *
+ *  @param animated If this is YES, the animation style used
+ *  for presentation will also be used for the dismissal.
+ */
++ (void)dismissAnimated:(BOOL)animated;
+
+/**
+ *  Same as dismissAnimated:, but you can specify a delay,
+ *  so the notification wont be dismissed immediately
+ *
+ *  @param delay The delay, how long the notification should stay visible
+ */
++ (void)dismissAfter:(NSTimeInterval)delay;
+
+#pragma mark Styles
+
+/**
+ *  This changes the default style, which is always used
+ *  when a method without styleName is used for presentation, or
+ *  styleName is nil, or no style is found with this name.
+ *
+ *  @param prepareBlock A block, which has a JDStatusBarStyle instance as
+ *  parameter. This instance can be modified to suit your needs. You need
+ *  to return the modified style again.
+ */
++ (void)setDefaultStyle:(JDPrepareStyleBlock)prepareBlock;
+
+/**
+ *  Adds a custom style, which than can be used
+ *  in the presentation methods.
+ *
+ *  @param identifier   The identifier, which will
+ *  later be used to reference the configured style.
+ *  @param prepareBlock A block, which has a JDStatusBarStyle instance as
+ *  parameter. This instance can be modified to suit your needs. You need
+ *  to return the modified style again.
+ *
+ *  @return Returns the given identifier, so it can
+ *  be directly used as styleName parameter.
+ */
++ (NSString*)addStyleNamed:(NSString*)identifier
+                   prepare:(JDPrepareStyleBlock)prepareBlock;
+
+#pragma mark progress & activity
+
+/**
+ *  Show the progress below the label.
+ *
+ *  @param progress Relative progress from 0.0 to 1.0
+ */
++ (void)showProgress:(CGFloat)progress;
+
+/**
+ *  Shows an activity indicator in front of the notification text
+ *
+ *  @param show  Use this flag to show or hide the activity indicator
+ *  @param style Sets the style of the activity indicator
+ */
++ (void)showActivityIndicator:(BOOL)show
+               indicatorStyle:(UIActivityIndicatorViewStyle)style;
+
+#pragma mark state
+
+/**
+ *  This method tests, if a notification is currently displayed.
+ *
+ *  @return YES, if a notification is currently displayed. Otherwise NO.
+ */
++ (BOOL)isVisible;
+
+@end
+
+

+ 600 - 0
Libraries external/JDStatusBarNotification/JDStatusBarNotification.m

@@ -0,0 +1,600 @@
+//
+//  JDStatusBarNotification.m
+//
+//  Based on KGStatusBar by Kevin Gibbon
+//
+//  Created by Markus Emrich on 10/28/13.
+//  Copyright 2013 Markus Emrich. All rights reserved.
+//
+
+#import <QuartzCore/QuartzCore.h>
+
+#import "JDStatusBarNotification.h"
+
+@interface JDStatusBarStyle (Hidden)
++ (NSArray*)allDefaultStyleIdentifier;
++ (JDStatusBarStyle*)defaultStyleWithName:(NSString*)styleName;
+@end
+
+@interface JDStatusBarNotificationViewController : UIViewController
+@end
+
+@interface UIApplication (mainWindow)
+- (UIWindow*)mainApplicationWindowIgnoringWindow:(UIWindow*)ignoringWindow;
+@end
+
+@interface JDStatusBarNotification () <CAAnimationDelegate>
+@property (nonatomic, strong, readonly) UIWindow *overlayWindow;
+@property (nonatomic, strong, readonly) UIView *progressView;
+@property (nonatomic, strong, readonly) JDStatusBarView *topBar;
+
+@property (nonatomic, strong) NSTimer *dismissTimer;
+@property (nonatomic, assign) CGFloat progress;
+
+@property (nonatomic, weak) JDStatusBarStyle *activeStyle;
+@property (nonatomic, strong) JDStatusBarStyle *defaultStyle;
+@property (nonatomic, strong) NSMutableDictionary *userStyles;
+@end
+
+@implementation JDStatusBarNotification
+
+@synthesize overlayWindow = _overlayWindow;
+@synthesize progressView = _progressView;
+@synthesize topBar = _topBar;
+
+#pragma mark Class methods
+
++ (JDStatusBarNotification*)sharedInstance {
+  static dispatch_once_t once;
+  static JDStatusBarNotification *sharedInstance;
+  dispatch_once(&once, ^ {
+    sharedInstance = [[self alloc] init];
+  });
+  return sharedInstance;
+}
+
++ (UIView*)showWithStatus:(NSString *)status;
+{
+  return [[self sharedInstance] showWithStatus:status
+                                     styleName:nil];
+}
+
++ (UIView*)showWithStatus:(NSString *)status
+                styleName:(NSString*)styleName;
+{
+  return [[self sharedInstance] showWithStatus:status
+                                     styleName:styleName];
+}
+
++ (UIView*)showWithStatus:(NSString *)status
+             dismissAfter:(NSTimeInterval)timeInterval;
+{
+  UIView *view = [[self sharedInstance] showWithStatus:status
+                                             styleName:nil];
+  [self dismissAfter:timeInterval];
+  return view;
+}
+
++ (UIView*)showWithStatus:(NSString *)status
+             dismissAfter:(NSTimeInterval)timeInterval
+                styleName:(NSString*)styleName;
+{
+  UIView *view = [[self sharedInstance] showWithStatus:status
+                                             styleName:styleName];
+  [self dismissAfter:timeInterval];
+  return view;
+}
+
++ (void)dismiss;
+{
+  [self dismissAnimated:YES];
+}
+
++ (void)dismissAnimated:(BOOL)animated;
+{
+  [[self sharedInstance] dismissAnimated:animated];
+}
+
++ (void)dismissAfter:(NSTimeInterval)delay;
+{
+  [[self sharedInstance] setDismissTimerWithInterval:delay];
+}
+
++ (void)setDefaultStyle:(JDPrepareStyleBlock)prepareBlock;
+{
+  NSAssert(prepareBlock != nil, @"No prepareBlock provided");
+
+  JDStatusBarStyle *style = [[self sharedInstance].defaultStyle copy];
+  [self sharedInstance].defaultStyle = prepareBlock(style);
+}
+
++ (NSString*)addStyleNamed:(NSString*)identifier
+                   prepare:(JDPrepareStyleBlock)prepareBlock;
+{
+  return [[self sharedInstance] addStyleNamed:identifier
+                                      prepare:prepareBlock];
+}
+
++ (void)showProgress:(CGFloat)progress;
+{
+  [[self sharedInstance] setProgress:progress];
+}
+
++ (void)showActivityIndicator:(BOOL)show indicatorStyle:(UIActivityIndicatorViewStyle)style;
+{
+  [[self sharedInstance] showActivityIndicator:show indicatorStyle:style];
+}
+
++ (BOOL)isVisible;
+{
+  return [[self sharedInstance] isVisible];
+}
+
+#pragma mark Implementation
+
+- (id)init
+{
+  if ((self = [super init]))
+  {
+    // set defaults
+    [self setupDefaultStyles];
+
+    // register for orientation changes
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarFrame:)
+                                                 name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
+  }
+  return self;
+}
+
+- (void)dealloc
+{
+  [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+#pragma mark Custom styles
+
+- (void)setupDefaultStyles;
+{
+  self.defaultStyle = [JDStatusBarStyle defaultStyleWithName:JDStatusBarStyleDefault];
+
+  self.userStyles = [NSMutableDictionary dictionary];
+  for (NSString *styleName in [JDStatusBarStyle allDefaultStyleIdentifier]) {
+    [self.userStyles setObject:[JDStatusBarStyle defaultStyleWithName:styleName] forKey:styleName];
+  }
+}
+
+- (NSString*)addStyleNamed:(NSString*)identifier
+                   prepare:(JDPrepareStyleBlock)prepareBlock;
+{
+  NSAssert(identifier != nil, @"No identifier provided");
+  NSAssert(prepareBlock != nil, @"No prepareBlock provided");
+
+  JDStatusBarStyle *style = [self.defaultStyle copy];
+  [self.userStyles setObject:prepareBlock(style) forKey:identifier];
+  return identifier;
+}
+
+#pragma mark Presentation
+
+- (UIView*)showWithStatus:(NSString *)status
+                styleName:(NSString*)styleName;
+{
+  JDStatusBarStyle *style = nil;
+  if (styleName != nil) {
+    style = self.userStyles[styleName];
+  }
+
+  if (style == nil) style = self.defaultStyle;
+  return [self showWithStatus:status style:style];
+}
+
+- (UIView*)showWithStatus:(NSString *)status
+                    style:(JDStatusBarStyle*)style;
+{
+  // first, check if status bar is visible at all
+  if ([UIApplication sharedApplication].statusBarHidden) return nil;
+
+  // prepare for new style
+  if (style != self.activeStyle) {
+    self.activeStyle = style;
+    if (self.activeStyle.animationType == JDStatusBarAnimationTypeFade) {
+      self.topBar.alpha = 0.0;
+      self.topBar.transform = CGAffineTransformIdentity;
+    } else {
+      self.topBar.alpha = 1.0;
+      self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height);
+    }
+  }
+
+  // cancel previous dismissing & remove animations
+  [[NSRunLoop currentRunLoop] cancelPerformSelector:@selector(dismiss) target:self argument:nil];
+  [self.topBar.layer removeAllAnimations];
+
+  // create & show window
+  [self.overlayWindow setHidden:NO];
+
+  // update style
+  self.topBar.backgroundColor = style.barColor;
+  self.topBar.textVerticalPositionAdjustment = style.textVerticalPositionAdjustment;
+  UILabel *textLabel = self.topBar.textLabel;
+  textLabel.textColor = style.textColor;
+  textLabel.font = style.font;
+  textLabel.accessibilityLabel = status;
+  textLabel.text = status;
+
+  if (style.textShadow) {
+    textLabel.shadowColor = style.textShadow.shadowColor;
+    textLabel.shadowOffset = style.textShadow.shadowOffset;
+  } else {
+    textLabel.shadowColor = nil;
+    textLabel.shadowOffset = CGSizeZero;
+  }
+
+  // reset progress & activity
+  self.progress = 0.0;
+  [self showActivityIndicator:NO indicatorStyle:0];
+
+  // animate in
+  BOOL animationsEnabled = (style.animationType != JDStatusBarAnimationTypeNone);
+  if (animationsEnabled && style.animationType == JDStatusBarAnimationTypeBounce) {
+    [self animateInWithBounceAnimation];
+  } else {
+    [UIView animateWithDuration:(animationsEnabled ? 0.4 : 0.0) animations:^{
+      self.topBar.alpha = 1.0;
+      self.topBar.transform = CGAffineTransformIdentity;
+    }];
+  }
+
+  return self.topBar;
+}
+
+#pragma mark Dismissal
+
+- (void)setDismissTimerWithInterval:(NSTimeInterval)interval;
+{
+  [self.dismissTimer invalidate];
+  self.dismissTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:interval]
+                                               interval:0 target:self selector:@selector(dismiss:) userInfo:nil repeats:NO];
+  [[NSRunLoop currentRunLoop] addTimer:self.dismissTimer forMode:NSRunLoopCommonModes];
+}
+
+- (void)dismiss:(NSTimer*)timer;
+{
+  [self dismissAnimated:YES];
+}
+
+- (void)dismissAnimated:(BOOL)animated;
+{
+  [self.dismissTimer invalidate];
+  self.dismissTimer = nil;
+
+  // check animation type
+  BOOL animationsEnabled = (self.activeStyle.animationType != JDStatusBarAnimationTypeNone);
+  animated &= animationsEnabled;
+
+  dispatch_block_t animation = ^{
+    if (self.activeStyle.animationType == JDStatusBarAnimationTypeFade) {
+      self.topBar.alpha = 0.0;
+    } else {
+      self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height);
+    }
+  };
+
+  void(^complete)(BOOL) = ^(BOOL finished) {
+    [self.overlayWindow removeFromSuperview];
+    [self.overlayWindow setHidden:YES];
+    _overlayWindow.rootViewController = nil;
+    _overlayWindow = nil;
+    _progressView = nil;
+    _topBar = nil;
+  };
+
+  if (animated) {
+    // animate out
+    [UIView animateWithDuration:0.4 animations:animation completion:complete];
+  } else {
+    animation();
+    complete(YES);
+  }
+}
+
+#pragma mark Bounce Animation
+
+- (void)animateInWithBounceAnimation;
+{
+  //don't animate in, if topBar is already fully visible
+  if (self.topBar.frame.origin.y >= 0) {
+    return;
+  }
+
+  // easing function (based on github.com/robb/RBBAnimation)
+  CGFloat(^RBBEasingFunctionEaseOutBounce)(CGFloat) = ^CGFloat(CGFloat t) {
+    if (t < 4.0 / 11.0) return pow(11.0 / 4.0, 2) * pow(t, 2);
+    if (t < 8.0 / 11.0) return 3.0 / 4.0 + pow(11.0 / 4.0, 2) * pow(t - 6.0 / 11.0, 2);
+    if (t < 10.0 / 11.0) return 15.0 /16.0 + pow(11.0 / 4.0, 2) * pow(t - 9.0 / 11.0, 2);
+    return 63.0 / 64.0 + pow(11.0 / 4.0, 2) * pow(t - 21.0 / 22.0, 2);
+  };
+
+  // create values
+  int fromCenterY=-20, toCenterY=0, animationSteps=100;
+  NSMutableArray *values = [NSMutableArray arrayWithCapacity:animationSteps];
+  for (int t = 1; t<=animationSteps; t++) {
+    float easedTime = RBBEasingFunctionEaseOutBounce((t*1.0)/animationSteps);
+    float easedValue = fromCenterY + easedTime * (toCenterY-fromCenterY);
+    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, easedValue, 0)]];
+  }
+
+  // build animation
+  CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
+  animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
+  animation.duration = 0.66;
+  animation.values = values;
+  animation.removedOnCompletion = NO;
+  animation.fillMode = kCAFillModeForwards;
+  animation.delegate = self;
+  [self.topBar.layer setValue:@(toCenterY) forKeyPath:animation.keyPath];
+  [self.topBar.layer addAnimation:animation forKey:@"JDBounceAnimation"];
+}
+
+- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
+{
+  self.topBar.transform = CGAffineTransformIdentity;
+  [self.topBar.layer removeAllAnimations];
+}
+
+#pragma mark Progress & Activity
+
+- (void)setProgress:(CGFloat)progress;
+{
+  if (_topBar == nil) return;
+
+  // trim progress
+  _progress = MIN(1.0, MAX(0.0,progress));
+
+  if (_progress == 0.0) {
+    _progressView.frame = CGRectZero;
+    return;
+  }
+
+  // update superview
+  if (self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionBelow ||
+      self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionNavBar) {
+    [self.topBar.superview addSubview:self.progressView];
+  } else {
+    [self.topBar insertSubview:self.progressView belowSubview:self.topBar.textLabel];
+  }
+
+  // calculate progressView frame
+  CGRect frame = self.topBar.bounds;
+  CGFloat height = MIN(frame.size.height,MAX(0.5, self.activeStyle.progressBarHeight));
+  if (height == 20.0 && frame.size.height > height) height = frame.size.height;
+  frame.size.height = height;
+  frame.size.width = round((frame.size.width - 2 * self.activeStyle.progressBarHorizontalInsets) * progress);
+  frame.origin.x = self.activeStyle.progressBarHorizontalInsets;
+
+  // apply y-position from active style
+  CGFloat barHeight = self.topBar.bounds.size.height;
+  if (self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionBottom) {
+    frame.origin.y = barHeight - height;
+  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionCenter) {
+    frame.origin.y = round((barHeight - height)/2.0);
+  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionTop) {
+    frame.origin.y = 0.0;
+  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionBelow) {
+    frame.origin.y = barHeight;
+  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionNavBar) {
+    CGFloat navBarHeight = 44.0;
+    if (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) &&
+        UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
+      navBarHeight = 32.0;
+    }
+    frame.origin.y = barHeight + navBarHeight;
+  }
+
+  // apply color from active style
+  self.progressView.backgroundColor = self.activeStyle.progressBarColor;
+
+  // apply corner radius
+  self.progressView.layer.cornerRadius = self.activeStyle.progressBarCornerRadius;
+
+  // update progressView frame
+  BOOL animated = !CGRectEqualToRect(self.progressView.frame, CGRectZero);
+  [UIView animateWithDuration:animated ? 0.05 : 0.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
+    self.progressView.frame = frame;
+  } completion:nil];
+}
+
+- (void)showActivityIndicator:(BOOL)show
+               indicatorStyle:(UIActivityIndicatorViewStyle)style;
+{
+  if (_topBar == nil) return;
+
+  if (show) {
+    [self.topBar.activityIndicatorView startAnimating];
+    self.topBar.activityIndicatorView.activityIndicatorViewStyle = style;
+  } else {
+    [self.topBar.activityIndicatorView stopAnimating];
+  }
+}
+
+#pragma mark State
+
+- (BOOL)isVisible;
+{
+  return (_topBar != nil);
+}
+
+#pragma mark Lazy views
+
+- (UIWindow *)overlayWindow;
+{
+  if(_overlayWindow == nil) {
+    _overlayWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+    _overlayWindow.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+    _overlayWindow.backgroundColor = [UIColor clearColor];
+    _overlayWindow.userInteractionEnabled = NO;
+    _overlayWindow.windowLevel = UIWindowLevelStatusBar;
+    _overlayWindow.rootViewController = [[JDStatusBarNotificationViewController alloc] init];
+    _overlayWindow.rootViewController.view.backgroundColor = [UIColor clearColor];
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000 // only when deployment target is < ios7
+    _overlayWindow.rootViewController.wantsFullScreenLayout = YES;
+#endif
+    [self updateWindowTransform];
+    [self updateTopBarFrameWithStatusBarFrame:[[UIApplication sharedApplication] statusBarFrame]];
+  }
+  return _overlayWindow;
+}
+
+- (JDStatusBarView*)topBar;
+{
+  if(_topBar == nil) {
+    _topBar = [[JDStatusBarView alloc] init];
+    [self.overlayWindow.rootViewController.view addSubview:_topBar];
+
+    JDStatusBarStyle *style = self.activeStyle ?: self.defaultStyle;
+    if (style.animationType != JDStatusBarAnimationTypeFade) {
+      self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height);
+    } else {
+      self.topBar.alpha = 0.0;
+    }
+  }
+  return _topBar;
+}
+
+- (UIView *)progressView;
+{
+  if (_progressView == nil) {
+    _progressView = [[UIView alloc] initWithFrame:CGRectZero];
+  }
+  return _progressView;
+}
+
+#pragma mark Rotation
+
+- (void)updateWindowTransform;
+{
+  UIWindow *window = [[UIApplication sharedApplication]
+                      mainApplicationWindowIgnoringWindow:self.overlayWindow];
+  _overlayWindow.transform = window.transform;
+  _overlayWindow.frame = window.frame;
+}
+
+- (void)updateTopBarFrameWithStatusBarFrame:(CGRect)rect;
+{
+  CGFloat width = MAX(rect.size.width, rect.size.height);
+  CGFloat height = MIN(rect.size.width, rect.size.height);
+
+  // on ios7 fix position, if statusBar has double height
+  CGFloat yPos = 0;
+  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 && height > 20.0) {
+    yPos = -height/2.0;
+  }
+
+  _topBar.frame = CGRectMake(0, yPos, width, height);
+}
+
+- (void)willChangeStatusBarFrame:(NSNotification*)notification;
+{
+  CGRect newBarFrame = [notification.userInfo[UIApplicationStatusBarFrameUserInfoKey] CGRectValue];
+  NSTimeInterval duration = [[UIApplication sharedApplication] statusBarOrientationAnimationDuration];
+
+  // update window & statusbar
+  void(^updateBlock)() = ^{
+    [self updateWindowTransform];
+    [self updateTopBarFrameWithStatusBarFrame:newBarFrame];
+    self.progress = self.progress; // // relayout progress bar
+  };
+
+  [UIView animateWithDuration:duration animations:^{
+    updateBlock();
+  } completion:^(BOOL finished) {
+    // this hack fixes a broken frame after the rotation (#35)
+    // but rotation animation is still broken
+    updateBlock();
+  }];
+}
+
+@end
+
+// A custom view controller, so the statusBarStyle & rotation behaviour is correct
+@implementation JDStatusBarNotificationViewController
+
+// rotation
+
+- (UIViewController*)mainController
+{
+  UIWindow *mainAppWindow = [[UIApplication sharedApplication] mainApplicationWindowIgnoringWindow:self.view.window];
+  UIViewController *topController = mainAppWindow.rootViewController;
+
+  while(topController.presentedViewController) {
+    topController = topController.presentedViewController;
+  }
+
+  return topController;
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
+  return [[self mainController] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
+}
+
+- (BOOL)shouldAutorotate {
+  return [[self mainController] shouldAutorotate];
+}
+
+#if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000
+- (NSUInteger)supportedInterfaceOrientations {
+#else
+  - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
+#endif
+    return [[self mainController] supportedInterfaceOrientations];
+  }
+
+  - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
+    return [[self mainController] preferredInterfaceOrientationForPresentation];
+  }
+
+  // statusbar
+
+  static BOOL JDUIViewControllerBasedStatusBarAppearanceEnabled() {
+    static BOOL enabled = NO;
+    static dispatch_once_t onceToken;
+
+    dispatch_once(&onceToken, ^{
+      enabled = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIViewControllerBasedStatusBarAppearance"] boolValue];
+    });
+
+    return enabled;
+  }
+
+  - (UIStatusBarStyle)preferredStatusBarStyle {
+    if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) {
+      return [[self mainController] preferredStatusBarStyle];
+    }
+
+    return [[UIApplication sharedApplication] statusBarStyle];
+  }
+
+  - (BOOL)prefersStatusBarHidden {
+    return NO;
+  }
+
+  - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
+    if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) {
+      return [[self mainController] preferredStatusBarUpdateAnimation];
+    }
+    return [super preferredStatusBarUpdateAnimation];
+  }
+
+  @end
+
+  @implementation UIApplication (mainWindow)
+  // we don't want the keyWindow, since it could be our own window
+  - (UIWindow*)mainApplicationWindowIgnoringWindow:(UIWindow *)ignoringWindow {
+    for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
+      if (!window.hidden && window != ignoringWindow) {
+        return window;
+      }
+    }
+    return nil;
+  }
+  @end

+ 77 - 0
Libraries external/JDStatusBarNotification/JDStatusBarStyle.h

@@ -0,0 +1,77 @@
+//
+//  JDStatusBarStyle.h
+//  JDStatusBarNotificationExample
+//
+//  Created by Markus on 04.12.13.
+//  Copyright (c) 2013 Markus. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+extern NSString *const JDStatusBarStyleError;   /// This style has a red background with a white Helvetica label.
+extern NSString *const JDStatusBarStyleWarning; /// This style has a yellow background with a gray Helvetica label.
+extern NSString *const JDStatusBarStyleSuccess; /// This style has a green background with a white Helvetica label.
+extern NSString *const JDStatusBarStyleMatrix;  /// This style has a black background with a green bold Courier label.
+extern NSString *const JDStatusBarStyleDefault; /// This style has a white background with a gray Helvetica label.
+extern NSString *const JDStatusBarStyleDark;    /// This style has a nearly black background with a nearly white Helvetica label.
+
+typedef NS_ENUM(NSInteger, JDStatusBarAnimationType) {
+    JDStatusBarAnimationTypeNone,   /// Notification won't animate
+    JDStatusBarAnimationTypeMove,   /// Notification will move in from the top, and move out again to the top
+    JDStatusBarAnimationTypeBounce, /// Notification will fall down from the top and bounce a little bit
+    JDStatusBarAnimationTypeFade    /// Notification will fade in and fade out
+};
+
+typedef NS_ENUM(NSInteger, JDStatusBarProgressBarPosition) {
+    JDStatusBarProgressBarPositionBottom, /// progress bar will be at the bottom of the status bar
+    JDStatusBarProgressBarPositionCenter, /// progress bar will be at the center of the status bar
+    JDStatusBarProgressBarPositionTop,    /// progress bar will be at the top of the status bar
+    JDStatusBarProgressBarPositionBelow,  /// progress bar will be below the status bar (the prograss bar won't move with the statusbar in this case)
+    JDStatusBarProgressBarPositionNavBar, /// progress bar will be below the navigation bar (the prograss bar won't move with the statusbar in this case)
+};
+
+/**
+ *  A Style defines the appeareance of a notification.
+ */
+@interface JDStatusBarStyle : NSObject <NSCopying>
+
+/// The background color of the notification bar
+@property (nonatomic, strong) UIColor *barColor;
+
+/// The text color of the notification label
+@property (nonatomic, strong) UIColor *textColor;
+
+/// The text shadow of the notification label
+@property (nonatomic, strong) NSShadow *textShadow;
+
+/// The font of the notification label
+@property (nonatomic, strong) UIFont *font;
+
+/// A correction of the vertical label position in points. Default is 0.0
+@property (nonatomic, assign) CGFloat textVerticalPositionAdjustment;
+
+#pragma mark Animation
+
+/// The animation, that is used to present the notification
+@property (nonatomic, assign) JDStatusBarAnimationType animationType;
+
+#pragma mark Progress Bar
+
+/// The background color of the progress bar (on top of the notification bar)
+@property (nonatomic, strong) UIColor *progressBarColor;
+
+/// The height of the progress bar. Default is 1.0
+@property (nonatomic, assign) CGFloat progressBarHeight;
+
+/// The position of the progress bar. Default is JDStatusBarProgressBarPositionBottom
+@property (nonatomic, assign) JDStatusBarProgressBarPosition progressBarPosition;
+
+/// The insets of the progress bar. Default is 0.0
+@property (nonatomic, assign) CGFloat progressBarHorizontalInsets;
+
+/// The corner radius of the progress bar. Default is 0.0
+@property (nonatomic, assign) CGFloat progressBarCornerRadius;
+
+@end
+

+ 106 - 0
Libraries external/JDStatusBarNotification/JDStatusBarStyle.m

@@ -0,0 +1,106 @@
+//
+//  JDStatusBarStyle.m
+//  JDStatusBarNotificationExample
+//
+//  Created by Markus on 04.12.13.
+//  Copyright (c) 2013 Markus. All rights reserved.
+//
+
+#import "JDStatusBarStyle.h"
+
+NSString *const JDStatusBarStyleError   = @"JDStatusBarStyleError";
+NSString *const JDStatusBarStyleWarning = @"JDStatusBarStyleWarning";
+NSString *const JDStatusBarStyleSuccess = @"JDStatusBarStyleSuccess";
+NSString *const JDStatusBarStyleMatrix  = @"JDStatusBarStyleMatrix";
+NSString *const JDStatusBarStyleDefault = @"JDStatusBarStyleDefault";
+NSString *const JDStatusBarStyleDark    = @"JDStatusBarStyleDark";
+
+@implementation JDStatusBarStyle
+
+- (instancetype)copyWithZone:(NSZone*)zone;
+{
+  JDStatusBarStyle *style = [[[self class] allocWithZone:zone] init];
+  style.barColor = self.barColor;
+  style.textColor = self.textColor;
+  style.textShadow = self.textShadow;
+  style.font = self.font;
+  style.textVerticalPositionAdjustment = self.textVerticalPositionAdjustment;
+  style.animationType = self.animationType;
+  style.progressBarColor = self.progressBarColor;
+  style.progressBarHeight = self.progressBarHeight;
+  style.progressBarPosition = self.progressBarPosition;
+  return style;
+}
+
++ (NSArray*)allDefaultStyleIdentifier;
+{
+  return @[JDStatusBarStyleError, JDStatusBarStyleWarning,
+           JDStatusBarStyleSuccess, JDStatusBarStyleMatrix,
+           JDStatusBarStyleDark];
+}
+
++ (JDStatusBarStyle*)defaultStyleWithName:(NSString*)styleName;
+{
+  // setup default style
+  JDStatusBarStyle *style = [[JDStatusBarStyle alloc] init];
+  style.barColor = [UIColor whiteColor];
+  style.progressBarColor = [UIColor greenColor];
+  style.progressBarHeight = 1.0;
+  style.progressBarPosition = JDStatusBarProgressBarPositionBottom;
+  style.textColor = [UIColor grayColor];
+  style.font = [UIFont systemFontOfSize:12.0];
+  style.animationType = JDStatusBarAnimationTypeMove;
+
+  // JDStatusBarStyleDefault
+  if ([styleName isEqualToString:JDStatusBarStyleDefault]) {
+    return style;
+  }
+
+  // JDStatusBarStyleError
+  else if ([styleName isEqualToString:JDStatusBarStyleError]) {
+    style.barColor = [UIColor colorWithRed:0.588 green:0.118 blue:0.000 alpha:1.000];
+    style.textColor = [UIColor whiteColor];
+    style.progressBarColor = [UIColor redColor];
+    style.progressBarHeight = 2.0;
+    return style;
+  }
+
+  // JDStatusBarStyleWarning
+  else if ([styleName isEqualToString:JDStatusBarStyleWarning]) {
+    style.barColor = [UIColor colorWithRed:0.900 green:0.734 blue:0.034 alpha:1.000];
+    style.textColor = [UIColor darkGrayColor];
+    style.progressBarColor = style.textColor;
+    return style;
+  }
+
+  // JDStatusBarStyleSuccess
+  else if ([styleName isEqualToString:JDStatusBarStyleSuccess]) {
+    style.barColor = [UIColor colorWithRed:0.588 green:0.797 blue:0.000 alpha:1.000];
+    style.textColor = [UIColor whiteColor];
+    style.progressBarColor = [UIColor colorWithRed:0.106 green:0.594 blue:0.319 alpha:1.000];
+    style.progressBarHeight = 1.0+1.0/[[UIScreen mainScreen] scale];
+    return style;
+  }
+
+  // JDStatusBarStyleDark
+  else if ([styleName isEqualToString:JDStatusBarStyleDark]) {
+    style.barColor = [UIColor colorWithRed:0.050 green:0.078 blue:0.120 alpha:1.000];
+    style.textColor = [UIColor colorWithWhite:0.95 alpha:1.0];
+    style.progressBarHeight = 1.0+1.0/[[UIScreen mainScreen] scale];
+    return style;
+  }
+
+  // JDStatusBarStyleMatrix
+  else if ([styleName isEqualToString:JDStatusBarStyleMatrix]) {
+    style.barColor = [UIColor blackColor];
+    style.textColor = [UIColor greenColor];
+    style.font = [UIFont fontWithName:@"Courier-Bold" size:14.0];
+    style.progressBarColor = [UIColor greenColor];
+    style.progressBarHeight = 2.0;
+    return style;
+  }
+
+  return nil;
+}
+
+@end

+ 15 - 0
Libraries external/JDStatusBarNotification/JDStatusBarView.h

@@ -0,0 +1,15 @@
+//
+//  JDStatusBarView.h
+//  JDStatusBarNotificationExample
+//
+//  Created by Markus on 04.12.13.
+//  Copyright (c) 2013 Markus. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface JDStatusBarView : UIView
+@property (nonatomic, strong, readonly) UILabel *textLabel;
+@property (nonatomic, strong, readonly) UIActivityIndicatorView *activityIndicatorView;
+@property (nonatomic, assign) CGFloat textVerticalPositionAdjustment;
+@end

+ 95 - 0
Libraries external/JDStatusBarNotification/JDStatusBarView.m

@@ -0,0 +1,95 @@
+//
+//  JDStatusBarView.m
+//  JDStatusBarNotificationExample
+//
+//  Created by Markus on 04.12.13.
+//  Copyright (c) 2013 Markus. All rights reserved.
+//
+
+#import "JDStatusBarView.h"
+
+@interface JDStatusBarView ()
+@property (nonatomic, strong) UILabel *textLabel;
+@property (nonatomic, strong) UIActivityIndicatorView *activityIndicatorView;
+@end
+
+@implementation JDStatusBarView
+
+#pragma mark dynamic getter
+
+- (UILabel *)textLabel;
+{
+  if (_textLabel == nil) {
+    _textLabel = [[UILabel alloc] init];
+    _textLabel.backgroundColor = [UIColor clearColor];
+    _textLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
+    _textLabel.textAlignment = NSTextAlignmentCenter;
+    _textLabel.adjustsFontSizeToFitWidth = YES;
+    _textLabel.clipsToBounds = YES;
+    [self addSubview:_textLabel];
+  }
+  return _textLabel;
+}
+
+- (UIActivityIndicatorView *)activityIndicatorView;
+{
+  if (_activityIndicatorView == nil) {
+    _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
+    _activityIndicatorView.transform = CGAffineTransformMakeScale(0.7, 0.7);
+    [self addSubview:_activityIndicatorView];
+  }
+  return _activityIndicatorView;
+}
+
+#pragma mark setter
+
+- (void)setTextVerticalPositionAdjustment:(CGFloat)textVerticalPositionAdjustment;
+{
+  _textVerticalPositionAdjustment = textVerticalPositionAdjustment;
+  [self setNeedsLayout];
+}
+
+#pragma mark layout
+
+- (void)layoutSubviews;
+{
+  [super layoutSubviews];
+
+  // label
+  self.textLabel.frame = CGRectMake(0, 1+self.textVerticalPositionAdjustment,
+                                    self.bounds.size.width, self.bounds.size.height-1);
+
+  // activity indicator
+  if (_activityIndicatorView ) {
+    CGSize textSize = [self currentTextSize];
+    CGRect indicatorFrame = _activityIndicatorView.frame;
+    indicatorFrame.origin.x = round((self.bounds.size.width - textSize.width)/2.0) - indicatorFrame.size.width - 8.0;
+    indicatorFrame.origin.y = ceil(1+(self.bounds.size.height - indicatorFrame.size.height)/2.0);
+    _activityIndicatorView.frame = indicatorFrame;
+  }
+}
+
+- (CGSize)currentTextSize;
+{
+  CGSize textSize = CGSizeZero;
+
+  // use new sizeWithAttributes: if possible
+  SEL selector = NSSelectorFromString(@"sizeWithAttributes:");
+  if ([self.textLabel.text respondsToSelector:selector]) {
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
+    NSDictionary *attributes = @{NSFontAttributeName:self.textLabel.font};
+    textSize = [self.textLabel.text sizeWithAttributes:attributes];
+#endif
+  }
+
+  // otherwise use old sizeWithFont:
+  else {
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000 // only when deployment target is < ios7
+    textSize = [self.textLabel.text sizeWithFont:self.textLabel.font];
+#endif
+  }
+
+  return textSize;
+}
+
+@end

+ 1 - 1
Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/MagicalRecord for OS X.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0820"
+   LastUpgradeVersion = "0830"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"

+ 1 - 1
Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/MagicalRecord for iOS.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0820"
+   LastUpgradeVersion = "0830"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"

+ 1 - 1
Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/libMagicalRecord for OS X.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0820"
+   LastUpgradeVersion = "0830"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"

+ 1 - 1
Libraries external/MagicalRecord/MagicalRecord.xcodeproj/xcshareddata/xcschemes/libMagicalRecord for iOS.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0820"
+   LastUpgradeVersion = "0830"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"

二進制
Libraries external/OCCommunicationLib/OCCommunicationLib/Resources/test.jpeg


二進制
Libraries external/OCCommunicationLib/OCCommunicationLib/Resources/video.MOV


+ 0 - 34
Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCChunkDto.h

@@ -1,34 +0,0 @@
-//
-//  OCChunkDto.h
-//  Owncloud iOs Client
-//
-// Copyright (C) 2016, ownCloud GmbH. ( http://www.owncloud.org/ )
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface OCChunkDto : NSObject 
-
-@property (nonatomic, copy) NSNumber *position;
-@property (nonatomic, copy) NSNumber *size;
-@property (nonatomic, copy) NSString *remotePath;
-
-@end

+ 0 - 30
Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCChunkDto.m

@@ -1,30 +0,0 @@
-//
-//  OCChunkDto.m
-//  Owncloud iOs Client
-//
-// Copyright (C) 2016, ownCloud GmbH. ( http://www.owncloud.org/ )
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-
-#import "OCChunkDto.h"
-
-@implementation OCChunkDto
-
-@end

+ 0 - 13
Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCURLSessionUploadTask.h

@@ -1,13 +0,0 @@
-//
-//  OCURLSessionUploadTask.h
-//  ownCloud iOS library
-//
-//  Created by Javier Gonzalez on 05/06/14.
-//  Copyright (c) 2014 ownCloud. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface OCURLSessionUploadTask : NSURLSessionUploadTask
-
-@end

+ 0 - 13
Libraries external/OCCommunicationLib/OCCommunicationLib/UploadSupport/OCURLSessionUploadTask.m

@@ -1,13 +0,0 @@
-//
-//  OCURLSessionUploadTask.m
-//  ownCloud iOS library
-//
-//  Created by Javier Gonzalez on 05/06/14.
-//  Copyright (c) 2014 ownCloud. All rights reserved.
-//
-
-#import "OCURLSessionUploadTask.h"
-
-@implementation OCURLSessionUploadTask
-
-@end

+ 0 - 17
Libraries external/OCCommunicationLib/OCCommunicationLib/ownCloud iOS library-Prefix.pch

@@ -1,17 +0,0 @@
-//
-//  Prefix header
-//
-//  The contents of this file are implicitly included at the beginning of every source file.
-//
-
-#ifdef __OBJC__
-    #import <Foundation/Foundation.h>
-#endif
-
-#ifndef TARGET_OS_IOS
-#define TARGET_OS_IOS TARGET_OS_IPHONE
-#endif
-
-#ifndef TARGET_OS_WATCH
-#define TARGET_OS_WATCH 0
-#endif

+ 0 - 41
Libraries external/OCCommunicationLib/OCCommunicationLibTests/ConfigTests.h

@@ -1,41 +0,0 @@
-//
-//  ConfigTests.h
-//  ownCloud iOS library
-//
-// Copyright (C) 2016, ownCloud GmbH.  ( http://www.owncloud.org/ )
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-
-//Your entire server url. ex:https://example.owncloud.com/owncloud/
-#define k_base_url @""
-//Server with webdav url. ex: https://example.owncloud.com/owncloud/remote.php/webdav/
-#define k_webdav_base_url @""
-//Server user
-#define k_user @"¡"
-//Server password
-#define k_password @""
-//Optional. You can change the folder of tests
-#define k_path_test_folder @""
-//User to share
-#define k_user_to_share @""
-//Group to share
-#define k_group_to_share @""
-//Remote user to share as federate
-#define k_remote_user_to_share @""

+ 0 - 37
Libraries external/OCCommunicationLib/OCCommunicationLibTests/OCCommunicationLibTests.h

@@ -1,37 +0,0 @@
-//
-//  OCCommunicationLibTests.h
-//
-// Copyright (C) 2016, ownCloud GmbH. ( http://www.owncloud.org/ )
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-
-
-#import <XCTest/XCTest.h>
-
-@class OCCommunication;
-@class ConfigTests;
-
-@interface OCCommunicationLibTests : XCTestCase
-
-@property (nonatomic, strong) ConfigTests *configTests;
-@property (nonatomic, strong) OCCommunication *sharedOCCommunication;
-
-
-@end

+ 0 - 2231
Libraries external/OCCommunicationLib/OCCommunicationLibTests/OCCommunicationLibTests.m

@@ -1,2231 +0,0 @@
-//
-//  Owncloud_iOs_ClientTests.m
-//  Owncloud iOs ClientTests
-//
-// Copyright (C) 2016, ownCloud GmbH. ( http://www.owncloud.org/ )
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-
-
-#import "OCCommunicationLibTests.h"
-#import "ConfigTests.h"
-#import "OCCommunication.h"
-#import "OCFrameworkConstants.h"
-#import "OCFileDto.h"
-#import "OCSharedDto.h"
-#import "ConfigTests.h"
-#import "AFURLSessionManager.h"
-#import "OCConstants.h"
-
-#import <UIKit/UIKit.h>
-
-/*
- *  With this implementation we allow the connection with any HTTPS server
- */
-#if DEBUG
-@implementation NSURLRequest (NSURLRequestWithIgnoreSSL)
-
-+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host {
-    return YES;
-}
-
-@end
-#endif
-
-@implementation OCCommunicationLibTests
-
-//You must enter this information of your server in order that the unit test works
-
-
-
-
-///-----------------------------------
-/// @name setUp
-///-----------------------------------
-
-/**
- * Method to get ready the tests
- */
-- (void)setUp
-{
-    [super setUp];
-    
-    _sharedOCCommunication = [[OCCommunication alloc] init];
-    [_sharedOCCommunication setCredentialsWithUser:k_user andPassword:k_password];
-    [_sharedOCCommunication setSecurityPolicyManagers:[_sharedOCCommunication  createSecurityPolicy]];
-    
-    //Create Tests folder
-    [self createFolderWithName:k_path_test_folder];
-    
-}
-
-- (void)tearDown
-{
-    
-    //Delete Test folder
-    [self deleteFolderWithName:k_path_test_folder];
-    
-    [super tearDown];
-    
-}
-
-#pragma mark - Util Methods to Set Up the Tests
-
-///-----------------------------------
-/// @name Create Folder With Name
-///-----------------------------------
-
-/**
- * This method create a new folder with the name passed in the server
- *
- * @param NSString -> path
- */
-- (void) createFolderWithName:(NSString*)path{
-    
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    NSString *folder = [NSString stringWithFormat:@"%@%@",k_webdav_base_url,path];
-     folder = [folder stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    [_sharedOCCommunication createFolder:folder onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        //Folder created
-        NSLog(@"Folder created");
-        dispatch_semaphore_signal(semaphore);
-
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        NSLog(@"Error created folder");
-        // Signal that block has completed
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        NSLog(@"Error created folder");
-        // Signal that block has completed
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-
-}
-
-///-----------------------------------
-/// @name Delete folder With Name
-///-----------------------------------
-
-/**
- * This method delete a folder with the name passed
- *
- * @param NSString -> path
- */
-
-- (void) deleteFolderWithName:(NSString *)path{
-    
-    NSString *folder = [NSString stringWithFormat:@"%@%@",k_webdav_base_url,path];
-    folder = [folder stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication deleteFileOrFolder:folder onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse * response, NSString *redirectedServer) {
-        //Folder deleted
-        NSLog(@"Folder deleted");
-        dispatch_semaphore_signal(semaphore);
-    } failureRquest:^(NSURLResponse * response, NSError * error, NSString *redirectedServer) {
-        //Error
-        NSLog(@"Error deleted folder");
-        // Signal that block has completed
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
-    
-}
-
-///-----------------------------------
-/// @name Upload File
-///-----------------------------------
-
-/**
- * This method upload a file from local path to remote path
- *
- * @param NSString -> localPath
- *
- * @param NSString -> remotePath
- */
-
-- (void) uploadFilePath:(NSString*)localPath inRemotePath:(NSString*)remotePath{
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Create the complete url
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@",k_webdav_base_url,remotePath];
-    
-    //Path of server file file
-    remotePath = [remotePath stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    
-    NSURLSessionUploadTask *uploadTask = nil;
-    
-    uploadTask = [_sharedOCCommunication uploadFileSession:localPath toDestiny:serverUrl onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        NSLog(@"File: %@ uploaded", localPath);
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSString *redirectedServer, NSError *error) {
-        NSLog(@"Failed uploading: %@", localPath);
-        NSLog(@"Error uploading");
-        dispatch_semaphore_signal(semaphore);
-    } failureBeforeRequest:^(NSError *error) {
-        NSLog(@"File that do not exist does not upload");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-#pragma mark - Tests
-
-
-///-----------------------------------
-/// @name testCreateFolder
-///-----------------------------------
-
-/**
- * Method to test if we can create a folder
- */
-- (void)testCreateFolder
-{
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    NSString *folder = [NSString stringWithFormat:@"%@%@/%@",k_webdav_base_url,k_path_test_folder,[NSString stringWithFormat:@"%f", [NSDate timeIntervalSinceReferenceDate]]];
-    
-    [_sharedOCCommunication createFolder:folder onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        //Folder created
-        NSLog(@"Folder created");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error testCreateFolder failureRequest");
-        // Signal that block has completed
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        XCTFail(@"Error testCreateFolder beforeRequest");
-        // Signal that block has completed
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name testCreateFolderWithForbiddenCharacters
-///-----------------------------------
-
-/**
- * Method to check if we check the forbidden characters when we try to create a folder
- *
- * @warning The special characters are: "\","<",">",":",""","|","?","*"
- */
-
-- (void)testCreateFolderWithForbiddenCharacters {
-    NSArray* arrayForbiddenCharacters = [NSArray arrayWithObjects:@"\\",@"<",@">",@":",@"\"",@"|",@"?",@"*", nil];
-    
-    for (NSString *currentCharacter in arrayForbiddenCharacters) {
-        NSString *folder = [NSString stringWithFormat:@"%@%@/%@",k_webdav_base_url,k_path_test_folder,[NSString stringWithFormat:@"%f%@-folder", [NSDate timeIntervalSinceReferenceDate], currentCharacter]];
-        
-        //We create a semaphore to wait until we recive the responses from Async calls
-        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-        
-        [_sharedOCCommunication createFolder:folder onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-            //Folder created
-            NSLog(@"Folder created");
-            XCTFail(@"Error testCreateFolderWithSpecialCharacters problem on: %@", currentCharacter);
-            dispatch_semaphore_signal(semaphore);
-
-        } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-            XCTFail(@"Error testCreateFolderWithSpecialCharacters problem on: %@", currentCharacter);
-            // Signal that block has completed
-            dispatch_semaphore_signal(semaphore);
-        } errorBeforeRequest:^(NSError *error) {
-            NSLog(@"Forbbiden character detected: %@", currentCharacter);
-            // Signal that block has completed
-            dispatch_semaphore_signal(semaphore);
-        }];
-        
-        // Run loop
-        while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                     beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    }
-}
-
-///-----------------------------------
-/// @name testMoveFileOnSameFolder
-///-----------------------------------
-
-/**
- * Method to test move file on the same folder
- */
-- (void)testMoveFileOnSameFolder {
-    
-    //Create Folder A for the Test
-    NSString *testPath = [NSString stringWithFormat:@"%@/Folder A", k_path_test_folder];
-    [self createFolderWithName:testPath];
-    
-    //Upload file /Tests/Folder A/test.jpeg
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    NSString *remotePath = [NSString stringWithFormat:@"%@/Folder A/Test.jpg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:remotePath];
-
-    
-    NSString *origin = [NSString stringWithFormat:@"%@%@/Folder A/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder A/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-        XCTFail(@"File Moved on the same folder");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error moving file on the same folder and Error");
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        if (error.code == OCErrorMovingTheDestinyAndOriginAreTheSame) {
-            NSLog(@"File on the same folder not moved");
-        } else {
-            XCTFail(@"Error moving file on same folder");
-        }
-        
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name testMoveFile
-///-----------------------------------
-
-/**
- * Method to try move a file
- */
-- (void)testMoveFile {
-    
-    //Create Folder A for the Test
-    NSString *testPathA = [NSString stringWithFormat:@"%@/Folder A", k_path_test_folder];
-    [self createFolderWithName:testPathA];
-    
-    //Create Folder B for the Test
-    NSString *testPathB = [NSString stringWithFormat:@"%@/Folder B", k_path_test_folder];
-    [self createFolderWithName:testPathB];
-    
-    //Upload file /Tests/Folder A/test.jpeg
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Folder A/Test.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath];
-
-    
-    
-    NSString *origin = [NSString stringWithFormat:@"%@%@/Folder A/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder B/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-        NSLog(@"File moved");
-        dispatch_semaphore_signal(semaphore);
-
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error moving file and Error");
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        XCTFail(@"Error moving file");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name testMoveFileForbiddenCharacters
-///-----------------------------------
-
-/**
- * Method to try to move a file with destiny name have forbidden characters
- */
-- (void)testMoveFileForbiddenCharacters {
-    
-    //Create Folder A for the Test
-    NSString *testPathA = [NSString stringWithFormat:@"%@/Folder A", k_path_test_folder];
-    [self createFolderWithName:testPathA];
-    
-    //Create Folder C for the Test
-    NSString *testPathC = [NSString stringWithFormat:@"%@/Folder C", k_path_test_folder];
-    [self createFolderWithName:testPathC];
-    
-    //Upload file /Tests/Folder A/test.jpeg
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Folder A/Test.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath];
-    
-    
-    NSArray *arrayForbiddenCharacters = [NSArray arrayWithObjects:@"\\",@"<",@">",@":",@"\"",@"|",@"?",@"*", nil];
-    
-    for (NSString *currentCharacter in arrayForbiddenCharacters) {
-        NSString *origin = [NSString stringWithFormat:@"%@%@/Folder A/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-        NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder C/Test%@.jpeg", k_webdav_base_url,k_path_test_folder, currentCharacter];
-        
-        //We create a semaphore to wait until we recive the responses from Async calls
-        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-        
-        [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-            XCTFail(@"File Moved and renamed");
-            dispatch_semaphore_signal(semaphore);
-        } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-            XCTFail(@"Error moving file and renamed and Error");
-            dispatch_semaphore_signal(semaphore);
-        } errorBeforeRequest:^(NSError *error) {
-            if (error.code == OCErrorMovingDestinyNameHaveForbiddenCharacters) {
-                NSLog(@"File with forbidden characters not moved");
-            } else {
-                XCTFail(@"Error moving and renaming file");
-            }
-            
-            dispatch_semaphore_signal(semaphore);
-        }];
-        
-        
-        // Run loop
-        while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                     beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    }
-}
-
-///-----------------------------------
-/// @name testMoveFolderInsideHimself
-///-----------------------------------
-
-/**
- * Method to try to move a folder inside himself
- */
-- (void)testMoveFolderInsideHimself {
-    
-    //Create Folder A for the Test
-    NSString *testPathA = [NSString stringWithFormat:@"%@/Folder A", k_path_test_folder];
-    [self createFolderWithName:testPathA];
-
-    NSString *origin = [NSString stringWithFormat:@"%@%@/Folder A/", k_webdav_base_url, k_path_test_folder];
-    NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder A/Folder A/", k_webdav_base_url, k_path_test_folder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-        XCTFail(@"Folder Moved inside himself");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error moving folder inside himself and Error");
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        if (error.code == OCErrorMovingFolderInsideHimself) {
-            NSLog(@"File renamed not moved");
-        } else {
-            XCTFail(@"Error moving folder inside himself");
-        }
-        
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name testMoveFolder
-///-----------------------------------
-
-/**
- * Method to try to move a folder
- */
-- (void)testMoveFolder {
-    
-    //Create Folder A for the Test
-    NSString *testPathA = [NSString stringWithFormat:@"%@/Folder A", k_path_test_folder];
-    [self createFolderWithName:testPathA];
-    
-    //Create Folder C for the Test
-    NSString *testPathB = [NSString stringWithFormat:@"%@/Folder B", k_path_test_folder];
-    [self createFolderWithName:testPathB];
-    
-    NSString *origin = [NSString stringWithFormat:@"%@%@/Folder A/", k_webdav_base_url, k_path_test_folder];
-    NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder B/Folder A/", k_webdav_base_url, k_path_test_folder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-        NSLog(@"Folder Moved");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error moving folder and Error");
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        XCTFail(@"Error moving folder");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name testRenameFileWithForbiddenCharacters
-///-----------------------------------
-
-/**
- * Method  try to rename a file with forbidden characters
- *
- */
-- (void)testRenameFileWithForbiddenCharacters {
-    
-    //Create Folder B for the Test
-    NSString *testPathB = [NSString stringWithFormat:@"%@/Folder B", k_path_test_folder];
-    [self createFolderWithName:testPathB];
-    
-    //Upload file /Tests/Folder B/test.jpeg
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Folder B/Test.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath];
-
-    NSArray *arrayForbiddenCharacters = [NSArray arrayWithObjects:@"\\",@"<",@">",@":",@"\"",@"|",@"?",@"*", nil];
-    
-    for (NSString *currentCharacter in arrayForbiddenCharacters) {
-        
-        NSString *origin = [NSString stringWithFormat:@"%@%@/Folder B/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-        NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder B/Test-%@.jpeg", k_webdav_base_url, k_path_test_folder, currentCharacter];
-        
-        //We create a semaphore to wait until we recive the responses from Async calls
-        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-        
-        [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-            XCTFail(@"File renamed with forbidden characters");
-            dispatch_semaphore_signal(semaphore);
-        } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-            XCTFail(@"Error renaming file with forbidden characters and Error");
-            dispatch_semaphore_signal(semaphore);
-        } errorBeforeRequest:^(NSError *error) {
-            if (error.code == OCErrorMovingDestinyNameHaveForbiddenCharacters) {
-                NSLog(@"File not renamed with forbidden characters");
-                dispatch_semaphore_signal(semaphore);
-            } else {
-                XCTFail(@"Error renaming file with forbidden characters");
-                dispatch_semaphore_signal(semaphore);
-            }
-        }];
-        
-        // Run loop
-        while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                     beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    }
-}
-
-///-----------------------------------
-/// @name testRenameFile
-///-----------------------------------
-
-/**
- * Method  try to rename a file
- *
- */
-- (void)testRenameFile {
-    
-    //Create Folder B for the Test
-    NSString *testPathB = [NSString stringWithFormat:@"%@/Folder B", k_path_test_folder];
-    [self createFolderWithName:testPathB];
-    
-    //Upload file /Tests/Folder B/test.jpeg
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Folder B/Test.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath];
-
-    NSString *origin = [NSString stringWithFormat:@"%@%@/Folder B/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder B/Test Renamed.jpeg", k_webdav_base_url, k_path_test_folder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-        NSLog(@"File Renamed");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error renaming file and Error");
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        XCTFail(@"Error renaming file");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name testRenameFolderWithForbiddenCharacters
-///-----------------------------------
-
-/**
- * Method  try to rename a folder with forbidden characters
- *
- */
-- (void)testRenameFolderWithForbiddenCharacters {
-    
-    //Create Folder A for the Test
-    NSString *testPathB = [NSString stringWithFormat:@"%@/Folder B", k_path_test_folder];
-    [self createFolderWithName:testPathB];
-    
-    NSArray *arrayForbiddenCharacters = [NSArray arrayWithObjects:@"\\",@"<",@">",@":",@"\"",@"|",@"?",@"*", nil];
-    
-    for (NSString *currentCharacter in arrayForbiddenCharacters) {
-        NSString *origin = [NSString stringWithFormat:@"%@%@/Folder B/", k_webdav_base_url, k_path_test_folder];
-        NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder B-%@/", k_webdav_base_url, k_path_test_folder, currentCharacter];
-        
-        //We create a semaphore to wait until we recive the responses from Async calls
-        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-        
-        [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-            XCTFail(@"Folder renamed with forbidden characters");
-            dispatch_semaphore_signal(semaphore);
-        } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-            XCTFail(@"Error renaming folder with forbidden characters and Error");
-            dispatch_semaphore_signal(semaphore);
-        } errorBeforeRequest:^(NSError *error) {
-            if (error.code == OCErrorMovingDestinyNameHaveForbiddenCharacters) {
-                NSLog(@"Folder not renamed with forbidden characters");
-                dispatch_semaphore_signal(semaphore);
-            } else {
-                XCTFail(@"Error renaming folder with forbidden characters");
-                dispatch_semaphore_signal(semaphore);
-            }
-        }];
-        
-        // Run loop
-        while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                     beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    }
-}
-
-///-----------------------------------
-/// @name testRenameFolder
-///-----------------------------------
-
-/**
- * Method  try to rename a folder
- *
- */
-- (void)testRenameFolder {
-    
-    //Create Folder A for the Test
-    NSString *testPathB = [NSString stringWithFormat:@"%@/Folder B", k_path_test_folder];
-    [self createFolderWithName:testPathB];
-    
-    NSString *origin = [NSString stringWithFormat:@"%@%@/Folder B/", k_webdav_base_url, k_path_test_folder];
-    NSString *destiny = [NSString stringWithFormat:@"%@%@/Folder B Renamed/", k_webdav_base_url, k_path_test_folder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication moveFileOrFolder:origin toDestiny:destiny onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectServer) {
-        NSLog(@"Folder Renamed");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error renaming folder and Error");
-        dispatch_semaphore_signal(semaphore);
-    } errorBeforeRequest:^(NSError *error) {
-        XCTFail(@"Error renaming folder");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-
-///-----------------------------------
-/// @name testToDeleteAFolder
-///-----------------------------------
-
-/**
- * Method to test if we can create a folder
- */
-- (void)testDeleteAFolder
-{
-    //Create Tests/DeleteFolder
-    NSString *testPathDelete = [NSString stringWithFormat:@"%@/DeleteFolder", k_path_test_folder];
-    [self createFolderWithName:testPathDelete];
-    
-    NSString *folder = [NSString stringWithFormat:@"%@%@/DeleteFolder", k_webdav_base_url, k_path_test_folder];
-
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    
-    [_sharedOCCommunication deleteFileOrFolder:folder onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse * response, NSString *redirectedServer) {
-        //Folder deleted
-        NSLog(@"Folder deleted");
-        dispatch_semaphore_signal(semaphore);
-    } failureRquest:^(NSURLResponse * response, NSError * error, NSString *redirectedServer) {
-        //Error
-        XCTFail(@"Error testDeleteFolder");
-        // Signal that block has completed
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
-}
-
-
-
-///-----------------------------------
-/// @name test to Delete a File
-///-----------------------------------
-
-/**
- * Method to test if we can delete a folder
- */
-- (void)testDeleteFile
-{
-    //Create Tests/DeleteFolder
-    NSString *testPathDelete = [NSString stringWithFormat:@"%@/DeleteFolder", k_path_test_folder];
-    [self createFolderWithName:testPathDelete];
-    
-    //Upload a file
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    
-    //Upload file Tests/Test Read Folder/File1
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/DeleteFolder/File1.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath];
-    
-    NSString *filePath = [NSString stringWithFormat:@"%@%@/DeleteFolder/File1.jpeg", k_webdav_base_url, k_path_test_folder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    
-    [_sharedOCCommunication deleteFileOrFolder:filePath onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse * response, NSString *redirectedServer) {
-        //File deleted
-        NSLog(@"File deleted");
-        dispatch_semaphore_signal(semaphore);
-    } failureRquest:^(NSURLResponse * response, NSError * error, NSString *redirectedServer) {
-        //Error
-        XCTFail(@"Error test delete file");
-        // Signal that block has completed
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
-}
-
-
-///-----------------------------------
-/// @name Test Read Folder
-///-----------------------------------
-
-/**
- * In this test we check many things:
- * 1.- The read folder method works, conected with server and get the answer
- * 2.- Check the parser checking a specific number of items in the selected path
- * 3.- Check the parser checking a specific number of files and folders
- *
- */
-- (void)testReadFolder{
-    
-    //Create Tests/Test Read Folder
-    NSString *testPathReadFolder = [NSString stringWithFormat:@"%@/Test Read Folder", k_path_test_folder];
-    [self createFolderWithName:testPathReadFolder];
-    
-    //Create Tests/Test Read Folder/Folder1
-    NSString *testPathReadFolder1 = [NSString stringWithFormat:@"%@/Test Read Folder/Folder1", k_path_test_folder];
-    [self createFolderWithName:testPathReadFolder1];
-    
-    //Create Tests/Test Read Folder/Folder2
-    NSString *testPathReadFolder2 = [NSString stringWithFormat:@"%@/Test Read Folder/Folder2", k_path_test_folder];
-    [self createFolderWithName:testPathReadFolder2];
-    
-    //Create Tests/Test Read Folder/Folder3
-    NSString *testPathReadFolder3 = [NSString stringWithFormat:@"%@/Test Read Folder/Folder3", k_path_test_folder];
-    [self createFolderWithName:testPathReadFolder3];
-    
-    
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    
-    //Upload file Tests/Test Read Folder/File1
-    NSString *uploadPath1 = [NSString stringWithFormat:@"%@/Test Read Folder/File1.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath1];
-    
-    //Upload file Tests/Test Read Folder/File2
-    NSString *uploadPath2 = [NSString stringWithFormat:@"%@/Test Read Folder/File2.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath2];
-    
-    //Upload file Tests/Test Read Folder/File3
-    NSString *uploadPath3 = [NSString stringWithFormat:@"%@/Test Read Folder/File3.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath3];
-    
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
-
-    //Path with 7 elements: {3 files, 3 folders and the parent folder}
-    NSString *path = [NSString stringWithFormat:@"%@%@/Test Read Folder/", k_webdav_base_url, k_path_test_folder];
-    
-    path = [path stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-     [_sharedOCCommunication readFolder:path withUserSessionToken:nil onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token) {
-        
-        //Counters
-        NSInteger foldersCount = 0;
-        NSInteger filesCount = 0;
-        //Remove the parent folder item
-        NSInteger realItemsCount = items.count - 1;
-        
-        //Constants
-        const int k_items = 6;
-        const int k_files = 3;
-        const int k_folders = 3;
-        
-        //Loop the items
-        for (OCFileDto *itemDto in items) {
-            //Check parser
-            NSLog(@"Item file name: %@", itemDto.fileName);
-            NSLog(@"Item file path: %@", itemDto.filePath);
-            
-            //Not include the root folder
-            if (itemDto.fileName !=nil) {
-                //File or folder
-                if (itemDto.isDirectory) {
-                    foldersCount++;
-                } else {
-                    filesCount++;
-                }
-            }
-        }
-        
-        if (realItemsCount ==  k_items) {
-            
-            //Check account of files and folders
-            if (foldersCount == k_folders && filesCount == k_files) {
-                NSLog(@"Read Folder Test OK");
-            } else {
-                XCTFail(@"Error reading a folder - There are: %ld folders and %ld files insead of %d folders and %d files", (long)foldersCount, (long)filesCount, k_folders, k_files);
-            }
-            
-        } else {
-            XCTFail(@"Error reading a folder - There are: %ld elements insead of 6 elements", (long)realItemsCount);
-        }
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer) {
-        XCTFail(@"Error reading a folder - and Error");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name Test Read File
-///-----------------------------------
-
-/**
- * In this test we check the etag of a specific folder
- * we do changes in the folder in order to know the etag changed
- *
- */
--(void)testReadFile{
-    
-    //Create Tests/Test Read File
-    NSString *testReadFilePath = [NSString stringWithFormat:@"%@/Test Read File", k_path_test_folder];
-    [self createFolderWithName:testReadFilePath];
-    
-    
-    //1.- Get and Store the etag of a specific folder
-    
-    //2.- Create a new folder with a specific name
-    
-    //3.- Delete the folder created
-    
-    //4.- Get and Compare the etag of the same folder with the preview, if is different the TEST is OK
-    
-    //Block Store Attributes
-    __block NSString *etag = @"";
-    
-    
-    //Path of new folder
-    NSString *newFolder = [NSString stringWithFormat:@"%@%@/Test Read File/DeletedFolder/", k_webdav_base_url, k_path_test_folder];
-    newFolder = [newFolder stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Path to the test
-    NSString *path = [NSString stringWithFormat:@"%@%@/Test Read File/", k_webdav_base_url, k_path_test_folder];
-    path = [path stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    [_sharedOCCommunication readFile:path onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *items, NSString *redirectedServer) {
-        
-        for (OCFileDto *itemDto in items) {
-            //Check parser
-            NSLog(@"Item file path: %@", itemDto.filePath);
-            NSLog(@"Item etag: %@", itemDto.etag);
-            
-            if (itemDto.etag) {
-                etag = itemDto.etag;
-            } else {
-                XCTFail(@"Error getting the etag");
-            }
-        }
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error reading the folder properties - and Error");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-    //Check if etag exists
-    if (etag) {
-        
-        //Create Folder
-        //We create a semaphore to wait until we recive the responses from Async calls
-        semaphore = dispatch_semaphore_create(0);
-        
-        [_sharedOCCommunication createFolder:newFolder onCommunication:_sharedOCCommunication withForbiddenCharactersSupported:NO successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-            //Folder created
-            NSLog(@"Folder created");
-            dispatch_semaphore_signal(semaphore);
-        } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-            XCTFail(@"Error testCreateFolder");
-            // Signal that block has completed
-            dispatch_semaphore_signal(semaphore);
-        } errorBeforeRequest:^(NSError *error) {
-            XCTFail(@"Error testCreateFolder");
-            // Signal that block has completed
-            dispatch_semaphore_signal(semaphore);
-        }];
-        
-        // Run loop
-        while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                     beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-        
-        
-        //Delete Folder
-        //We create a semaphore to wait until we recive the responses from Async calls
-        semaphore = dispatch_semaphore_create(0);
-        
-        
-        [_sharedOCCommunication deleteFileOrFolder:newFolder onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse * response, NSString *redirectedServer) {
-            //Folder deleted
-            NSLog(@"Folder deleted");
-            dispatch_semaphore_signal(semaphore);
-        } failureRquest:^(NSURLResponse * response, NSError * error, NSString *redirectedServer) {
-            //Error
-            XCTFail(@"Error testDeleteFolder");
-            // Signal that block has completed
-            dispatch_semaphore_signal(semaphore);
-        }];
-        
-        // Run loop
-        while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                     beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
-        
-        
-        
-        //Get the folder etag again
-        //We create a semaphore to wait until we recive the responses from Async calls
-        semaphore = dispatch_semaphore_create(0);
-        
-        [_sharedOCCommunication readFile:path onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *items, NSString *redirectedServer) {
-            
-            for (OCFileDto *itemDto in items) {
-                //Check parser
-                NSLog(@"Item file path: %@", itemDto.filePath);
-                NSLog(@"Item etag: %@", itemDto.etag);
-                
-                if (itemDto.etag) {
-                    
-                    if ([etag isEqual:itemDto.etag]) {
-                        XCTFail(@"The same etag after the changes");
-                    }else{
-                        NSLog(@"Test OK");
-                    }
-                    
-                    
-                } else {
-                    XCTFail(@"Error getting the etag");
-                }
-            }
-            
-            dispatch_semaphore_signal(semaphore);
-            
-        } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-            XCTFail(@"Error reading the folder properties - and Error");
-            dispatch_semaphore_signal(semaphore);
-            
-        }];
-        
-        // Run loop
-        while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                     beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-        
-    }
-    
-}
-
-
-///-----------------------------------
-/// @name Test Download File
-///-----------------------------------
-
-/**
- * This test try to download a specific file
- * It the file download the test is ok
- *
- */
-
-- (void) testDownloadFile {
-    
-    //Create Tests/Test Download Folder
-    NSString *downloadPath = [NSString stringWithFormat:@"%@/Test Download", k_path_test_folder];
-    [self createFolderWithName:downloadPath];
-    
-    //Upload test file
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    
-    //Upload file /Tests/Test Download/test.jpeg
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Test Download/Test.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Create Folder in File Sytem to test
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
-    //Documents/Test Download/
-    NSString *localPath = documentsDirectory;
-    
-    //Make the path if not exists
-    NSError *error = nil;
-    if (![[NSFileManager defaultManager] fileExistsAtPath:localPath])
-        [[NSFileManager defaultManager] createDirectoryAtPath:localPath withIntermediateDirectories:NO attributes:nil error:&error];
-    
-    //Documents/Test Download/image.png
-    localPath = [localPath stringByAppendingString:@"/image.jpeg"];
-    
-    //Path of server file file
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Download/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionTask *downloadTask = nil;
-    
-    downloadTask = [_sharedOCCommunication downloadFileSession:serverUrl toDestiny:localPath defaultPriority:YES onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSURL *filePath) {
-        
-        NSLog(@"File Downloaded ok");
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error) {
-        
-        XCTFail(@"Error download a file - Response - Error");
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-    
-}
- 
-///-----------------------------------
-/// @name Test download not existing file
-///-----------------------------------
-
-/**
- * This test try to download a unexisting file
- * The test works fine if the file is not download
- *
- */
-- (void) testDownloadNotExistingFile {
-    
-    //Create Tests/Test Download
-    NSString *downloadPath = [NSString stringWithFormat:@"%@/Test Download", k_path_test_folder];
-    [self createFolderWithName:downloadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Create Folder in File Sytem to test
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
-    //Documents/Test Download/
-    NSString *localPath = [documentsDirectory stringByAppendingPathComponent:@"Test Download"];
-    
-    //Make the path if not exists
-    NSError *error = nil;
-    if (![[NSFileManager defaultManager] fileExistsAtPath:documentsDirectory])
-        [[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:NO attributes:nil error:&error];
-    
-    
-    //Documents/Test Download/image.png
-    localPath = [localPath stringByAppendingString:@"/image.png"];
-    
-    //Path of server file that not exist
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Download/test image not exist.PNG", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionDownloadTask *downloadTask = nil;
-   
-    downloadTask = [_sharedOCCommunication downloadFileSession:serverUrl toDestiny:localPath defaultPriority:YES onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSURL *filePath) {
-        
-        XCTFail(@"Download file ok, not possible");
-        
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error) {
-        
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-
-
-///-----------------------------------
-/// @name Test Download File With Session
-///-----------------------------------
-
-/**
- * This test try to download a specific file using NSURLSession
- * If the file is downloaded the test is ok
- *
- */
-- (void) testDownloadFileWithSession {
-
-    //Create Tests/Test Download Folder
-    NSString *downloadPath = [NSString stringWithFormat:@"%@/Test Download", k_path_test_folder];
-    [self createFolderWithName:downloadPath];
-    
-    //Upload test file
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    
-    //Upload file /Tests/Test Download/test.jpeg
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Test Download/Test.jpeg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:uploadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Create Folder in File Sytem to test
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
-    //Documents/Test Download/
-    NSString *localPath = documentsDirectory;
-    
-    //Make the path if not exists
-    NSError *error = nil;
-    if (![[NSFileManager defaultManager] fileExistsAtPath:localPath])
-        [[NSFileManager defaultManager] createDirectoryAtPath:localPath withIntermediateDirectories:NO attributes:nil error:&error];
-    
-    //Documents/Test Download/image.png
-    localPath = [localPath stringByAppendingString:@"/image.jpeg"];
-    
-    //Path of server file file
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Download/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionDownloadTask *downloadTask = nil;
-    
-    downloadTask = [_sharedOCCommunication downloadFileSession:serverUrl toDestiny:localPath defaultPriority:YES onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSURL *filePath) {
-        
-        NSLog(@"File Downloaded ok");
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error) {
-        
-        XCTFail(@"Error download a file - Error");
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-
-
-///-----------------------------------
-/// @name Test Download With Session A File that does not exist
-///-----------------------------------
-
-/**
- * This test try to download a file that does not exist using NSURLSession
- * If the file is not downloaded, the test is ok
- *
- */
-- (void) testDownloadWithSessionAFileThatDoesNotExist {
-    
-    //Create Tests/Test Download Folder
-    NSString *downloadPath = [NSString stringWithFormat:@"%@/Test Download", k_path_test_folder];
-    [self createFolderWithName:downloadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Create Folder in File Sytem to test
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
-    //Documents/Test Download/
-    NSString *localPath = documentsDirectory;
-    
-    //Make the path if not exists
-    NSError *error = nil;
-    if (![[NSFileManager defaultManager] fileExistsAtPath:localPath])
-        [[NSFileManager defaultManager] createDirectoryAtPath:localPath withIntermediateDirectories:NO attributes:nil error:&error];
-    
-    //Documents/Test Download/image.png
-    localPath = [localPath stringByAppendingString:@"/image.jpeg"];
-    
-    //Path of server file file
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Download/Test.jpeg", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionDownloadTask *downloadTask = nil;
-    
-    downloadTask = [_sharedOCCommunication downloadFileSession:serverUrl toDestiny:localPath defaultPriority:YES onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSURL *filePath) {
-        
-        XCTFail(@"Download file ok, not possible");
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error) {
-        
-        NSLog(@"Error downloading a file - Error");
-        //Delete the file
-        NSError *theError = nil;
-        [[NSFileManager defaultManager] removeItemAtPath:localPath error:&theError];
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name Test to upload a file that does not exist
-///-----------------------------------
-
-/**
- * This test try to upload that does not exist on the filesystem
- * This test is passed if we detect that the file does not exist
- *
- */
-- (void) testUploadAFileThatDoesNotExist {
-    
-    //Create Tests/Test Upload
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Test Upload", k_path_test_folder];
-    [self createFolderWithName:uploadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Create Folder in File Sytem to test
-    NSString *localPath = [NSString stringWithFormat:@"%@/Name of the file that does not exist.png", [[NSBundle mainBundle] resourcePath]];
-    
-    //Path of server file file
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Upload/Name of the file that does not exist.png", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-
-    NSURLSessionUploadTask *uploadTask = nil;
-    
-    uploadTask = [_sharedOCCommunication uploadFileSession:localPath toDestiny:serverUrl onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        
-        XCTFail(@"Error We upload a file that does not exist");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSString *redirectedServer, NSError *error) {
-        
-        XCTFail(@"Error. File do not uploaded");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureBeforeRequest:^(NSError *error) {
-        NSLog(@"File that do not exist does not upload");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-///-----------------------------------
-/// @name Test to upload a file with Forbbiden Characters
-///-----------------------------------
-
-/**
- * This test try to uplad with special characters in destiny name
- */
-- (void) testUploadAFileWithSpecialCharacters {
-    
-    //Create Tests/Test Upload
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Test Upload", k_path_test_folder];
-    [self createFolderWithName:uploadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Upload test file
-    NSString *localPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"video" ofType:@"MOV"];
-    
-    //Path of server file file (Special character added in file name)
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Upload/video@.mov", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionUploadTask *uploadTask = nil;
-    
-    uploadTask = [_sharedOCCommunication uploadFileSession:localPath toDestiny:serverUrl onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        NSLog(@"File Uploaded with Special Characters");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSString *redirectedServer, NSError *error) {
-        XCTFail(@"Error. File do not uploaded");
-        dispatch_semaphore_signal(semaphore);
-    } failureBeforeRequest:^(NSError *error) {
-        XCTFail(@"Error File does not exist");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name Test to upload with session
-///-----------------------------------
-
-/**
- * This test try to uplad a file using NSURLSession
- *
- */
-- (void) testUploadFileWithSession {
-    
-    //Create Tests/Test Upload
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Test Upload", k_path_test_folder];
-    [self createFolderWithName:uploadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Upload test file
-    NSString *localPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    
-    //Path of server file file
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Upload/CompanyLogo.png", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionUploadTask *uploadTask = nil;
-    
-    uploadTask = [_sharedOCCommunication uploadFileSession:localPath toDestiny:serverUrl onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        
-        NSLog(@"File Uploaded");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSString *redirectedServer, NSError *error) {
-        
-        XCTFail(@"Error. File do not uploaded");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureBeforeRequest:^(NSError *error) {
-        NSLog(@"File that do not exist does not upload");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-//-----------------------------------
-/// @name Test to upload with session and special characters
-///-----------------------------------
-
-/**
- * This test try to uplad a file using NSURLSession
- *
- */
-- (void) testUploadFileWithSessionAndSpecialCharacters {
-    
-    //Create Tests/Test Upload
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Test Upload", k_path_test_folder];
-    [self createFolderWithName:uploadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Upload test file
-    NSString *localPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"video" ofType:@"MOV"];
-    
-    //Path of server file file (Special character added in file name)
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Upload/video@.mov", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionUploadTask *uploadTask = nil;
-    
-    uploadTask = [_sharedOCCommunication uploadFileSession:localPath toDestiny:serverUrl onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        
-        NSLog(@"File Uploaded");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSString *redirectedServer, NSError *error) {
-        
-        XCTFail(@"Error. File do not uploaded");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureBeforeRequest:^(NSError *error) {
-        NSLog(@"File that do not exist does not upload");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-///-----------------------------------
-/// @name Test to upload with session file that does not exists
-///-----------------------------------
-
-/**
- * This test try to uplad a file using NSURLSession
- *
- */
-- (void) testUploadWithSessionAFileThatDoesNotExist {
-    
-    //Create Tests/Test Upload
-    NSString *uploadPath = [NSString stringWithFormat:@"%@/Test Upload", k_path_test_folder];
-    [self createFolderWithName:uploadPath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //Upload test file
-    NSString *localPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"videoA" ofType:@"MOV"];
-    
-    //Path of server file file (Special character added in file name)
-    NSString *serverUrl = [NSString stringWithFormat:@"%@%@/Test Upload/video@.mov", k_webdav_base_url, k_path_test_folder];
-    serverUrl = [serverUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-    
-    NSURLSessionUploadTask *uploadTask = nil;
-    
-    uploadTask = [_sharedOCCommunication uploadFileSession:localPath toDestiny:serverUrl onCommunication:_sharedOCCommunication progress:^(NSProgress *progress) {
-        NSLog(@"File: %lld bytes", progress.completedUnitCount);
-    } successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        
-        XCTFail(@"Error We upload a file that does not exist");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSString *redirectedServer, NSError *error) {
-        
-         NSLog(@"File that do not exist does not upload");
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureBeforeRequest:^(NSError *error) {
-        NSLog(@"File that do not exist does not upload");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-///-----------------------------------
-/// @name Test the share a folder
-///-----------------------------------
-
-/**
- * This test try to share a folder
- */
-
-- (void) testShareAFolder {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication shareFileOrFolderByServer:k_base_url andFileOrFolderPath:[NSString stringWithFormat:@"/%@", k_path_test_folder] onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *listOfShared, NSString *redirectedServer) {
-        NSLog(@"Folder shared");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error sharing folder");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name Test read shares items
-///-----------------------------------
-
-/**
- * This test try to check if a shared folder is shared and obtain his information
- */
-- (void) testReadShared {
-    
-    //1. create the folder and share it
-    [self testShareAFolder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //2. Check if the folder is shared
-    [_sharedOCCommunication readSharedByServer:k_base_url onCommunication: _sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *listOfShared, NSString *redirectedServer) {
-        
-        BOOL isFolderShared = NO;
-        
-        for (OCSharedDto *current in listOfShared) {
-            if ([current.path isEqualToString:[NSString stringWithFormat:@"/%@/", k_path_test_folder]]) {
-                isFolderShared = YES;
-            }
-        }
-        
-        if (!isFolderShared) {
-            XCTFail(@"Folder not shared");
-            dispatch_semaphore_signal(semaphore);
-        }
-        
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        
-        XCTFail(@"Error reading shares");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name Test unshare items
-///-----------------------------------
-
-/**
- * This test try unshare a item
- */
-- (void) testUnShareAFolder {
-    
-    //1. create the folder and share it
-    [self testShareAFolder];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //2. read the folder to obtain the info of OCSharedDto
-    [_sharedOCCommunication readSharedByServer:k_base_url onCommunication: _sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *listOfShared, NSString *redirectedServer) {
-        
-        OCSharedDto *shared;
-        
-        for (OCSharedDto *current in listOfShared) {
-            if ([current.path isEqualToString:[NSString stringWithFormat:@"/%@/", k_path_test_folder]]) {
-                shared = current;
-            }
-        }
-        
-        if (shared) {
-            
-            //3. Unshare the folder
-            [_sharedOCCommunication unShareFileOrFolderByServer:k_base_url andIdRemoteShared:shared.idRemoteShared onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-                NSLog(@"File unshared");
-                dispatch_semaphore_signal(semaphore);
-                
-            } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-                XCTFail(@"Error unsharing folder");
-                dispatch_semaphore_signal(semaphore);
-            }];
-            
-            
-            
-        } else {
-            XCTFail(@"Folder not shared on testUnShareAFolder");
-            dispatch_semaphore_signal(semaphore);
-        }
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        
-        XCTFail(@"Error reading shares on testUnShareAFolder");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-
-///-----------------------------------
-/// @name Test read capabilities
-///-----------------------------------
-
-/**
- * This test try to check if a shared folder is shared and obtain his information
- */
-- (void) testGetCapabilitiesOfServer {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication getCapabilitiesOfServer:k_base_url onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, OCCapabilities *capabilities, NSString *redirectedServer) {
-        NSLog(@"Get capabilities ok");
-        XCTAssertNotNil(capabilities,  @"Error get capabilites of server");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error get capabilites of server");
-        dispatch_semaphore_signal(semaphore);
-    }];
-     
-     // Run loop
-     while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-     [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                              beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-
-///-----------------------------------
-/// @name Test read capabilities
-///-----------------------------------
-
-/**
- * This test check get capabilities
- */
-- (void) testShareLinkWithPassword {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication shareFileOrFolderByServer:k_base_url andFileOrFolderPath:[NSString stringWithFormat:@"/%@", k_path_test_folder] andPassword:@"testing" onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *shareLink, NSString *redirectedServer) {
-        NSLog(@"Folder shared by link with password");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error sharing folder by link with password");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-///-----------------------------------
-/// @name Test share link with expiration date and password
-///-----------------------------------
-
-/**
- * This test check the creation of a link with expiration date
- */
-- (void) testShareLinkWithExpirationDateAndPassword {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //1. Share a folder
-    [self testShareAFolder];
-    
-    //2. Read the shared
-    [_sharedOCCommunication readSharedByServer:k_base_url onCommunication: _sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *listOfShared, NSString *redirectedServer) {
-        
-        BOOL isFolderShared = NO;
-        
-        for (OCSharedDto *current in listOfShared) {
-            if ([current.path isEqualToString:[NSString stringWithFormat:@"/%@/", k_path_test_folder]]) {
-                isFolderShared = YES;
-                
-                NSDateFormatter *dateFormatter = [NSDateFormatter new];
-                [dateFormatter setDateFormat:@"YYYY-MM-dd"];
-                NSDate *tomorrow = [NSDate dateWithTimeInterval:(24*60*60) sinceDate:[NSDate date]];
-                NSString *foarmatedDate = [dateFormatter stringFromDate:tomorrow];
-                
-                //3. Update the share with password and expiration date
-                [_sharedOCCommunication updateShare:current.idRemoteShared ofServerPath:k_base_url withPasswordProtect:@"testing" andExpirationTime:foarmatedDate andPermissions:k_read_share_permission onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-                    
-                    NSLog(@"Updated shared by link with expiration date and password");
-                    dispatch_semaphore_signal(semaphore);
-                    
-                } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-                    
-                    XCTFail(@"Error updating shared by link with expiration date and password");
-                    dispatch_semaphore_signal(semaphore);
-                    
-                }];
-            }
-        }
-        
-        if (!isFolderShared) {
-            XCTFail(@"Folder not shared");
-            dispatch_semaphore_signal(semaphore);
-        }
-        
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        
-        XCTFail(@"Error reading shares");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-
-
-///-----------------------------------
-/// @name Tests search users and groups
-///-----------------------------------
-
-/**
- * This test search for first 30 users or groups on server that match the pattern "aa"
- */
-- (void) testSearchUsersAndGroups {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication searchUsersAndGroupsWith:@"aa" forPage:1 with:30 ofServer:k_base_url onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *itemList, NSString *redirectedServer) {
-        NSLog(@"Search users and groups");
-        XCTAssertNotNil(itemList,  @"Error search users and groups");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error get capabilites of server");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-/**
- * This test search for first 30 users or groups with special characters on server that match the pattern "user@"
- */
-- (void) testSearchUsersAndGroupsWithSpecialCharacters {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication searchUsersAndGroupsWith:@"user@" forPage:1 with:30 ofServer:k_base_url onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *itemList, NSString *redirectedServer) {
-        NSLog(@"Search users and groups");
-        XCTAssertNotNil(itemList,  @"Error search users and groups");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error get capabilites of server");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-
-
-///-----------------------------------
-/// @name Test share with user with special character
-///-----------------------------------
-
-/**
- * This test share with a userToShare the folder pathTestFolder
- */
-- (void) testShareWithUser {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication shareWith:k_user_to_share shareeType:shareTypeUser inServer:k_base_url andFileOrFolderPath:[NSString stringWithFormat:@"/%@", k_path_test_folder] andPermissions:k_read_share_permission onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        NSLog(@"Share with user");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error share with user");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-
-///-----------------------------------
-/// @name Test share with group with special character
-///-----------------------------------
-
-/**
- * This test share with groupToShare the folder pathTestFolder
- */
-- (void) testShareWithGroup {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication shareWith:k_group_to_share shareeType:shareTypeGroup inServer:k_base_url andFileOrFolderPath:[NSString stringWithFormat:@"/%@", k_path_test_folder] andPermissions:k_read_share_permission onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        NSLog(@"Share with group");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error share with group");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name Test unshare with user with special character
-///-----------------------------------
-
-/**
- * This test unShare with user the folder pathTestFolder
- */
-- (void) testUnShareWithUser {
-    
-    //1. create the folder and share it with user
-    [self testShareWithUser];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //2. read the folder to obtain the info of OCSharedDto
-    [_sharedOCCommunication readSharedByServer:k_base_url
-                               onCommunication: _sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *listOfShared, NSString *redirectedServer) {
-                                   
-        OCSharedDto *shared;
-        
-        for (OCSharedDto *current in listOfShared) {
-            if ([current.path isEqualToString:[NSString stringWithFormat:@"/%@/", k_path_test_folder]]
-                 && [current.shareWith isEqualToString:k_user_to_share]) {
-                shared = current;
-            }
-        }
-        
-        if (shared) {
-            
-            //3. Unshare the folder
-            [_sharedOCCommunication unShareFileOrFolderByServer:k_base_url andIdRemoteShared:shared.idRemoteShared onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-                NSLog(@"File unshared with user");
-                dispatch_semaphore_signal(semaphore);
-                
-            } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-                XCTFail(@"Error unsharing folder with user");
-                dispatch_semaphore_signal(semaphore);
-            }];
-            
-            
-            
-        } else {
-            XCTFail(@"Folder not shared on testUnShareWithUser");
-            dispatch_semaphore_signal(semaphore);
-        }
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        
-        XCTFail(@"Error reading shares on testUnShareWithUser");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];}
-
-///-----------------------------------
-/// @name Test is share by server
-///-----------------------------------
-
-/**
- * This test check if a shared file is shared
- */
-- (void) testIsShareByServer {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //1. Share a folder
-    [self testShareAFolder];
-    
-    //2. Read the shared
-    [_sharedOCCommunication readSharedByServer:k_base_url onCommunication: _sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *listOfShared, NSString *redirectedServer) {
-        
-        BOOL isFolderShared = NO;
-        
-        for (OCSharedDto *current in listOfShared) {
-            if ([current.path isEqualToString:[NSString stringWithFormat:@"/%@/", k_path_test_folder]]) {
-                isFolderShared = YES;
-               
-                
-                //3. Check if the share folder is shared by the id
-                [_sharedOCCommunication isShareFileOrFolderByServer:k_base_url andIdRemoteShared:current.idRemoteShared onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer, BOOL isShared, id shareDto) {
-                    
-                    NSLog(@"File is shared");
-                    dispatch_semaphore_signal(semaphore);
-                    
-                } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-                    
-                    XCTFail(@"Error checking if a share is shared by id share");
-                    dispatch_semaphore_signal(semaphore);
-                    
-                }];
-            }
-        }
-        
-        if (!isFolderShared) {
-            XCTFail(@"Folder not shared before check");
-            dispatch_semaphore_signal(semaphore);
-        }
-        
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        
-        XCTFail(@"Error reading shares");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-///-----------------------------------
-/// @name Test unshare file or folder
-///-----------------------------------
-
-/**
- * This test check if we can unshare a file or folder
- */
-- (void) testUnShareByServer {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    //1. Share a folder
-    [self testShareAFolder];
-    
-    //2. Read the shared
-    [_sharedOCCommunication readSharedByServer:k_base_url onCommunication: _sharedOCCommunication successRequest:^(NSURLResponse *response, NSArray *listOfShared, NSString *redirectedServer) {
-        
-        BOOL isFolderShared = NO;
-        
-        for (OCSharedDto *current in listOfShared) {
-            if ([current.path isEqualToString:[NSString stringWithFormat:@"/%@/", k_path_test_folder]]) {
-                isFolderShared = YES;
-                
-                //3. Unshare the share folder by the id
-                [_sharedOCCommunication unShareFileOrFolderByServer:k_base_url andIdRemoteShared:current.idRemoteShared onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-                    
-                    NSLog(@"Share unshared correctly");
-                    dispatch_semaphore_signal(semaphore);
-                    
-                } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-                    
-                    XCTFail(@"Error unsharing file by id share");
-                    dispatch_semaphore_signal(semaphore);
-                    
-                }];
-                
-            }
-        }
-        
-        if (!isFolderShared) {
-            XCTFail(@"Folder not shared before check");
-            dispatch_semaphore_signal(semaphore);
-        }
-        
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        
-        XCTFail(@"Error reading shares");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-///-----------------------------------
-/// @name testGetFeaturesSupportedByServer
-///-----------------------------------
-
-/**
- * This test check if we can get all the features supported by the server
- */
-- (void) testGetFeaturesSupportedByServer {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication getFeaturesSupportedByServer:k_base_url onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, BOOL hasShareSupport, BOOL hasShareeSupport, BOOL hasCookiesSupport, BOOL hasForbiddenCharactersSupport, BOOL hasCapabilitiesSupport, BOOL hasFedSharesOptionShareSupport, NSString *redirectedServer) {
-        
-        NSLog(@"Server features correctly read");
-        NSLog(@"hasShareSupport: %d", hasShareSupport);
-        NSLog(@"hasShareeSupport: %d", hasShareeSupport);
-        NSLog(@"hasCookiesSupport: %d", hasCookiesSupport);
-        NSLog(@"hasForbiddenCharactersSupport: %d", hasForbiddenCharactersSupport);
-        NSLog(@"hasCapabilitiesSupport: %d", hasCapabilitiesSupport);
-        NSLog(@"hasFedSharesOptionShareSupport: %d", hasFedSharesOptionShareSupport);
-        
-        dispatch_semaphore_signal(semaphore);
-        
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        
-        XCTFail(@"Error reading server features");
-        dispatch_semaphore_signal(semaphore);
-        
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-///-----------------------------------
-/// @name Test share with remote user federated sharing
-///-----------------------------------
-
-/**
- * This test share with a userToShare the folder pathTestFolder
- */
-- (void) testShareWithRemoteUser {
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication shareWith:k_remote_user_to_share shareeType:shareTypeRemote inServer:k_base_url andFileOrFolderPath:[NSString stringWithFormat:@"/%@", k_path_test_folder] andPermissions:k_max_folder_share_permission onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSString *redirectedServer) {
-        NSLog(@"Share with remote user");
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error share with remote user");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-}
-
-///-----------------------------------
-/// @name Test to get a remote thumbnail
-///-----------------------------------
-
-/**
- * This test try get a thumbnail of an image using the Thumbnail API
- *
- */
-- (void) testGetRemoteThumbnail {
-    
-    
-    //Create Folder A for the Test
-    NSString *testPath = [NSString stringWithFormat:@"%@/Folder A", k_path_test_folder];
-    [self createFolderWithName:testPath];
-    
-    //Upload file /Tests/Folder A/test.jpeg
-    NSString *bundlePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"test" ofType:@"jpeg"];
-    NSString *remotePath = [NSString stringWithFormat:@"%@/Folder A/Test.jpg", k_path_test_folder];
-    [self uploadFilePath:bundlePath inRemotePath:remotePath];
-    
-    //We create a semaphore to wait until we recive the responses from Async calls
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    
-    [_sharedOCCommunication getRemoteThumbnailByServer:k_base_url ofFilePath:remotePath withWidth:64 andHeight:64 onCommunication:_sharedOCCommunication successRequest:^(NSURLResponse *response, NSData *thumbnail, NSString *redirectedServer) {
-        if ([UIImage imageWithData:thumbnail]) {
-            NSLog(@"Thumbnail getted");
-        } else {
-            XCTFail(@"Thumbnail getted but it is not an image");
-        }
-        dispatch_semaphore_signal(semaphore);
-    } failureRequest:^(NSURLResponse *response, NSError *error, NSString *redirectedServer) {
-        XCTFail(@"Error getting thumbnail");
-        dispatch_semaphore_signal(semaphore);
-    }];
-    
-    // Run loop
-    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
-                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:k_timeout_webdav]];
-    
-}
-
-@end

+ 0 - 2
Libraries external/OCCommunicationLib/OCCommunicationLibTests/en.lproj/InfoPlist.strings

@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-

+ 0 - 2
Libraries external/OCCommunicationLib/OCCommunicationLibTests/fr.lproj/InfoPlist.strings

@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-

+ 0 - 2
Libraries external/OCCommunicationLib/OCCommunicationLibTests/is.lproj/InfoPlist.strings

@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-

+ 0 - 22
Libraries external/OCCommunicationLib/OCCommunicationLibTests/ownCloud iOS libraryTests-Info.plist

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>BNDL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-</dict>
-</plist>

+ 0 - 2
Libraries external/OCCommunicationLib/OCCommunicationLibTests/pl.lproj/InfoPlist.strings

@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-

+ 0 - 2
Libraries external/OCCommunicationLib/OCCommunicationLibTests/pt-BR.lproj/InfoPlist.strings

@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-

+ 0 - 2
Libraries external/OCCommunicationLib/OCCommunicationLibTests/ru.lproj/InfoPlist.strings

@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-

+ 0 - 2
Libraries external/OCCommunicationLib/OCCommunicationLibTests/zh-Hans-CN.lproj/InfoPlist.strings

@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-

+ 0 - 657
Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/project.pbxproj

@@ -1,657 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		131C67B9187C3E360009030E /* OCXMLSharedParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 131C67B8187C3E360009030E /* OCXMLSharedParser.m */; };
-		1345E4601884213400153F14 /* OCXMLShareByLinkParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1345E45F1884213400153F14 /* OCXMLShareByLinkParser.m */; };
-		13AA8636187C211900A10927 /* OCSharedDto.m in Sources */ = {isa = PBXBuildFile; fileRef = 13AA8635187C211900A10927 /* OCSharedDto.m */; };
-		13AA8640187C3B9700A10927 /* OCXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 13AA863F187C3B9700A10927 /* OCXMLParser.m */; };
-		59A5B71E191907F100724BE3 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A5B70E191907F100724BE3 /* AFHTTPSessionManager.m */; };
-		59A5B71F191907F100724BE3 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A5B711191907F100724BE3 /* AFNetworkReachabilityManager.m */; };
-		59A5B720191907F100724BE3 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A5B713191907F100724BE3 /* AFSecurityPolicy.m */; };
-		59A5B722191907F100724BE3 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A5B717191907F100724BE3 /* AFURLRequestSerialization.m */; };
-		59A5B723191907F100724BE3 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A5B719191907F100724BE3 /* AFURLResponseSerialization.m */; };
-		59A5B724191907F100724BE3 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A5B71B191907F100724BE3 /* AFURLSessionManager.m */; };
-		EA05999A1BB96D14002C2864 /* OCShareUser.m in Sources */ = {isa = PBXBuildFile; fileRef = EA0599991BB96D14002C2864 /* OCShareUser.m */; };
-		EA73DC831B1C48EA00C3AC21 /* OCXMLServerErrorsParser.m in Sources */ = {isa = PBXBuildFile; fileRef = EA73DC821B1C48EA00C3AC21 /* OCXMLServerErrorsParser.m */; };
-		EA7CC89B183E11E600B6A4B4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA7CC89A183E11E600B6A4B4 /* Foundation.framework */; };
-		EA7CC8A9183E11E600B6A4B4 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA7CC8A8183E11E600B6A4B4 /* XCTest.framework */; };
-		EA7CC8AA183E11E600B6A4B4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA7CC89A183E11E600B6A4B4 /* Foundation.framework */; };
-		EA7CC8AC183E11E600B6A4B4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA7CC8AB183E11E600B6A4B4 /* UIKit.framework */; };
-		EA7CC8AF183E11E600B6A4B4 /* libownCloudiOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EA7CC897183E11E600B6A4B4 /* libownCloudiOS.a */; };
-		EA7CC912183E146000B6A4B4 /* UtilsFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC911183E146000B6A4B4 /* UtilsFramework.m */; };
-		EA7CC913183E146000B6A4B4 /* UtilsFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC911183E146000B6A4B4 /* UtilsFramework.m */; };
-		EA7CC928183E14A100B6A4B4 /* NSDate+ISO8601.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC91E183E14A100B6A4B4 /* NSDate+ISO8601.m */; };
-		EA7CC929183E14A100B6A4B4 /* NSDate+ISO8601.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC91E183E14A100B6A4B4 /* NSDate+ISO8601.m */; };
-		EA7CC92A183E14A100B6A4B4 /* NSDate+RFC1123.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC920183E14A100B6A4B4 /* NSDate+RFC1123.m */; };
-		EA7CC92B183E14A100B6A4B4 /* NSDate+RFC1123.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC920183E14A100B6A4B4 /* NSDate+RFC1123.m */; };
-		EA7CC92C183E14A100B6A4B4 /* OCHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC923183E14A100B6A4B4 /* OCHTTPRequestOperation.m */; };
-		EA7CC92D183E14A100B6A4B4 /* OCHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC923183E14A100B6A4B4 /* OCHTTPRequestOperation.m */; };
-		EA7CC92E183E14A100B6A4B4 /* OCWebDAVClient.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC925183E14A100B6A4B4 /* OCWebDAVClient.m */; };
-		EA7CC92F183E14A100B6A4B4 /* OCWebDAVClient.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC925183E14A100B6A4B4 /* OCWebDAVClient.m */; };
-		EA7CC934183E150000B6A4B4 /* OCCommunication.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC933183E150000B6A4B4 /* OCCommunication.m */; };
-		EA7CC935183E150000B6A4B4 /* OCCommunication.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7CC933183E150000B6A4B4 /* OCCommunication.m */; };
-		EA913A721BE9FB0700D015B8 /* OCCapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EA913A711BE9FB0700D015B8 /* OCCapabilities.m */; };
-		EAABAA32183E688900909831 /* OCFileDto.m in Sources */ = {isa = PBXBuildFile; fileRef = EAABAA31183E688900909831 /* OCFileDto.m */; };
-		EAABAA33183E688900909831 /* OCFileDto.m in Sources */ = {isa = PBXBuildFile; fileRef = EAABAA31183E688900909831 /* OCFileDto.m */; };
-		EAABAB1E1858594A00909831 /* OCChunkDto.m in Sources */ = {isa = PBXBuildFile; fileRef = EAABAB191858594A00909831 /* OCChunkDto.m */; };
-		EAABAB1F1858594A00909831 /* OCChunkDto.m in Sources */ = {isa = PBXBuildFile; fileRef = EAABAB191858594A00909831 /* OCChunkDto.m */; };
-		EAABAB2618585C5200909831 /* NSString+Encode.m in Sources */ = {isa = PBXBuildFile; fileRef = EAABAB2518585C5200909831 /* NSString+Encode.m */; };
-		EAABAB2718585C5200909831 /* NSString+Encode.m in Sources */ = {isa = PBXBuildFile; fileRef = EAABAB2518585C5200909831 /* NSString+Encode.m */; };
-		EAABAB3C185EE33B00909831 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAABAB3B185EE33B00909831 /* UIKit.framework */; };
-		F704980D1E369EF6008F5BB6 /* OCNotifications.m in Sources */ = {isa = PBXBuildFile; fileRef = F70498081E369EF6008F5BB6 /* OCNotifications.m */; };
-		F704980E1E369EF6008F5BB6 /* OCNotificationsAction.m in Sources */ = {isa = PBXBuildFile; fileRef = F704980A1E369EF6008F5BB6 /* OCNotificationsAction.m */; };
-		F704980F1E369EF6008F5BB6 /* OCRichObjectStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = F704980C1E369EF6008F5BB6 /* OCRichObjectStrings.m */; };
-		F73C00351E56098300EEEFA7 /* OCUserProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = F73C00341E56098300EEEFA7 /* OCUserProfile.m */; };
-		F785C1341E6316A500469BAC /* OCXMLListParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F785C1331E6316A500469BAC /* OCXMLListParser.m */; };
-		F7E7D4B61E826FA000315A90 /* OCExternalSites.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E7D4B51E826FA000315A90 /* OCExternalSites.m */; };
-		F7FB5F171E66E63B00389481 /* OCActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = F7FB5F161E66E63B00389481 /* OCActivity.m */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		EA7CC8AD183E11E600B6A4B4 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = EA7CC88F183E11E600B6A4B4 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = EA7CC896183E11E600B6A4B4;
-			remoteInfo = OCCommunicationLib;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		EA7CC895183E11E600B6A4B4 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 12;
-			dstPath = "include/$(PRODUCT_NAME)";
-			dstSubfolderSpec = 16;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		131C67B7187C3E360009030E /* OCXMLSharedParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OCXMLSharedParser.h; path = OCWebDavClient/Parsers/OCXMLSharedParser.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		131C67B8187C3E360009030E /* OCXMLSharedParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = OCXMLSharedParser.m; path = OCWebDavClient/Parsers/OCXMLSharedParser.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		1345E45E1884213400153F14 /* OCXMLShareByLinkParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OCXMLShareByLinkParser.h; path = OCWebDavClient/Parsers/OCXMLShareByLinkParser.h; sourceTree = "<group>"; };
-		1345E45F1884213400153F14 /* OCXMLShareByLinkParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OCXMLShareByLinkParser.m; path = OCWebDavClient/Parsers/OCXMLShareByLinkParser.m; sourceTree = "<group>"; };
-		13AA8634187C211900A10927 /* OCSharedDto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OCSharedDto.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		13AA8635187C211900A10927 /* OCSharedDto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = OCSharedDto.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		13AA863E187C3B9700A10927 /* OCXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OCXMLParser.h; path = OCWebDavClient/Parsers/OCXMLParser.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		13AA863F187C3B9700A10927 /* OCXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = OCXMLParser.m; path = OCWebDavClient/Parsers/OCXMLParser.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		591BFBF31B1C809000AB8D3A /* OCConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OCConstants.h; path = Utils/OCConstants.h; sourceTree = "<group>"; };
-		59A5B70D191907F100724BE3 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = ExternalLibs/AFNetworking/AFHTTPSessionManager.h; sourceTree = "<group>"; };
-		59A5B70E191907F100724BE3 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = ExternalLibs/AFNetworking/AFHTTPSessionManager.m; sourceTree = "<group>"; };
-		59A5B70F191907F100724BE3 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = ExternalLibs/AFNetworking/AFNetworking.h; sourceTree = "<group>"; };
-		59A5B710191907F100724BE3 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = ExternalLibs/AFNetworking/AFNetworkReachabilityManager.h; sourceTree = "<group>"; };
-		59A5B711191907F100724BE3 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = ExternalLibs/AFNetworking/AFNetworkReachabilityManager.m; sourceTree = "<group>"; };
-		59A5B712191907F100724BE3 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = ExternalLibs/AFNetworking/AFSecurityPolicy.h; sourceTree = "<group>"; };
-		59A5B713191907F100724BE3 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = ExternalLibs/AFNetworking/AFSecurityPolicy.m; sourceTree = "<group>"; };
-		59A5B716191907F100724BE3 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = ExternalLibs/AFNetworking/AFURLRequestSerialization.h; sourceTree = "<group>"; };
-		59A5B717191907F100724BE3 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = ExternalLibs/AFNetworking/AFURLRequestSerialization.m; sourceTree = "<group>"; };
-		59A5B718191907F100724BE3 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = ExternalLibs/AFNetworking/AFURLResponseSerialization.h; sourceTree = "<group>"; };
-		59A5B719191907F100724BE3 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = ExternalLibs/AFNetworking/AFURLResponseSerialization.m; sourceTree = "<group>"; };
-		59A5B71A191907F100724BE3 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = ExternalLibs/AFNetworking/AFURLSessionManager.h; sourceTree = "<group>"; };
-		59A5B71B191907F100724BE3 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = ExternalLibs/AFNetworking/AFURLSessionManager.m; sourceTree = "<group>"; };
-		EA0599981BB96D14002C2864 /* OCShareUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCShareUser.h; sourceTree = "<group>"; };
-		EA0599991BB96D14002C2864 /* OCShareUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCShareUser.m; sourceTree = "<group>"; };
-		EA73DC811B1C48EA00C3AC21 /* OCXMLServerErrorsParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OCXMLServerErrorsParser.h; path = OCWebDavClient/Parsers/OCXMLServerErrorsParser.h; sourceTree = "<group>"; };
-		EA73DC821B1C48EA00C3AC21 /* OCXMLServerErrorsParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OCXMLServerErrorsParser.m; path = OCWebDavClient/Parsers/OCXMLServerErrorsParser.m; sourceTree = "<group>"; };
-		EA7CC897183E11E600B6A4B4 /* libownCloudiOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libownCloudiOS.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		EA7CC89A183E11E600B6A4B4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
-		EA7CC89E183E11E600B6A4B4 /* ownCloud iOS library-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ownCloud iOS library-Prefix.pch"; sourceTree = "<group>"; };
-		EA7CC8A7183E11E600B6A4B4 /* ownCloud iOS libraryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ownCloud iOS libraryTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		EA7CC8A8183E11E600B6A4B4 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
-		EA7CC8AB183E11E600B6A4B4 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
-		EA7CC910183E146000B6A4B4 /* UtilsFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = UtilsFramework.h; path = Utils/UtilsFramework.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EA7CC911183E146000B6A4B4 /* UtilsFramework.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = UtilsFramework.m; path = Utils/UtilsFramework.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EA7CC91D183E14A100B6A4B4 /* NSDate+ISO8601.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = "NSDate+ISO8601.h"; path = "OCWebDavClient/NSDate+ISO8601.h"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EA7CC91E183E14A100B6A4B4 /* NSDate+ISO8601.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = "NSDate+ISO8601.m"; path = "OCWebDavClient/NSDate+ISO8601.m"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EA7CC91F183E14A100B6A4B4 /* NSDate+RFC1123.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = "NSDate+RFC1123.h"; path = "OCWebDavClient/NSDate+RFC1123.h"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EA7CC920183E14A100B6A4B4 /* NSDate+RFC1123.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = "NSDate+RFC1123.m"; path = "OCWebDavClient/NSDate+RFC1123.m"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EA7CC922183E14A100B6A4B4 /* OCHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OCHTTPRequestOperation.h; path = OCWebDavClient/OCHTTPRequestOperation.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EA7CC923183E14A100B6A4B4 /* OCHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = OCHTTPRequestOperation.m; path = OCWebDavClient/OCHTTPRequestOperation.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EA7CC924183E14A100B6A4B4 /* OCWebDAVClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OCWebDAVClient.h; path = OCWebDavClient/OCWebDAVClient.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EA7CC925183E14A100B6A4B4 /* OCWebDAVClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = OCWebDAVClient.m; path = OCWebDavClient/OCWebDAVClient.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EA7CC932183E150000B6A4B4 /* OCCommunication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OCCommunication.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EA7CC933183E150000B6A4B4 /* OCCommunication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = OCCommunication.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EA913A701BE9FB0700D015B8 /* OCCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCCapabilities.h; sourceTree = "<group>"; };
-		EA913A711BE9FB0700D015B8 /* OCCapabilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCCapabilities.m; sourceTree = "<group>"; };
-		EAABAA2F183E687000909831 /* OCFrameworkConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OCFrameworkConstants.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EAABAA30183E688900909831 /* OCFileDto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OCFileDto.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EAABAA31183E688900909831 /* OCFileDto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = OCFileDto.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EAABAB1218574A7C00909831 /* OCErrorMsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OCErrorMsg.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EAABAB181858594A00909831 /* OCChunkDto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OCChunkDto.h; path = UploadSupport/OCChunkDto.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EAABAB191858594A00909831 /* OCChunkDto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = OCChunkDto.m; path = UploadSupport/OCChunkDto.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EAABAB2418585C5200909831 /* NSString+Encode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = "NSString+Encode.h"; path = "Utils/NSString+Encode.h"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
-		EAABAB2518585C5200909831 /* NSString+Encode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = "NSString+Encode.m"; path = "Utils/NSString+Encode.m"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
-		EAABAB3B185EE33B00909831 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
-		F70498071E369EF6008F5BB6 /* OCNotifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCNotifications.h; sourceTree = "<group>"; };
-		F70498081E369EF6008F5BB6 /* OCNotifications.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCNotifications.m; sourceTree = "<group>"; };
-		F70498091E369EF6008F5BB6 /* OCNotificationsAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCNotificationsAction.h; sourceTree = "<group>"; };
-		F704980A1E369EF6008F5BB6 /* OCNotificationsAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCNotificationsAction.m; sourceTree = "<group>"; };
-		F704980B1E369EF6008F5BB6 /* OCRichObjectStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCRichObjectStrings.h; sourceTree = "<group>"; };
-		F704980C1E369EF6008F5BB6 /* OCRichObjectStrings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCRichObjectStrings.m; sourceTree = "<group>"; };
-		F73C00331E56098300EEEFA7 /* OCUserProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCUserProfile.h; sourceTree = "<group>"; };
-		F73C00341E56098300EEEFA7 /* OCUserProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCUserProfile.m; sourceTree = "<group>"; };
-		F785C1321E6316A500469BAC /* OCXMLListParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OCXMLListParser.h; path = OCWebDavClient/Parsers/OCXMLListParser.h; sourceTree = "<group>"; };
-		F785C1331E6316A500469BAC /* OCXMLListParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OCXMLListParser.m; path = OCWebDavClient/Parsers/OCXMLListParser.m; sourceTree = "<group>"; };
-		F7E7D4B41E826FA000315A90 /* OCExternalSites.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCExternalSites.h; sourceTree = "<group>"; };
-		F7E7D4B51E826FA000315A90 /* OCExternalSites.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCExternalSites.m; sourceTree = "<group>"; };
-		F7FB5F151E66E63B00389481 /* OCActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCActivity.h; sourceTree = "<group>"; };
-		F7FB5F161E66E63B00389481 /* OCActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCActivity.m; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		EA7CC894183E11E600B6A4B4 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				EA7CC89B183E11E600B6A4B4 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EA7CC8A4183E11E600B6A4B4 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				EAABAB3C185EE33B00909831 /* UIKit.framework in Frameworks */,
-				EA7CC8AF183E11E600B6A4B4 /* libownCloudiOS.a in Frameworks */,
-				EA7CC8A9183E11E600B6A4B4 /* XCTest.framework in Frameworks */,
-				EA7CC8AC183E11E600B6A4B4 /* UIKit.framework in Frameworks */,
-				EA7CC8AA183E11E600B6A4B4 /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		13AA8637187C331F00A10927 /* Parsers */ = {
-			isa = PBXGroup;
-			children = (
-				F785C1321E6316A500469BAC /* OCXMLListParser.h */,
-				F785C1331E6316A500469BAC /* OCXMLListParser.m */,
-				131C67B7187C3E360009030E /* OCXMLSharedParser.h */,
-				131C67B8187C3E360009030E /* OCXMLSharedParser.m */,
-				13AA863E187C3B9700A10927 /* OCXMLParser.h */,
-				13AA863F187C3B9700A10927 /* OCXMLParser.m */,
-				1345E45E1884213400153F14 /* OCXMLShareByLinkParser.h */,
-				1345E45F1884213400153F14 /* OCXMLShareByLinkParser.m */,
-				EA73DC811B1C48EA00C3AC21 /* OCXMLServerErrorsParser.h */,
-				EA73DC821B1C48EA00C3AC21 /* OCXMLServerErrorsParser.m */,
-			);
-			name = Parsers;
-			sourceTree = "<group>";
-		};
-		EA7CC88E183E11E600B6A4B4 = {
-			isa = PBXGroup;
-			children = (
-				EA7CC89C183E11E600B6A4B4 /* OCCommunicationLib */,
-				EA7CC899183E11E600B6A4B4 /* Frameworks */,
-				EA7CC898183E11E600B6A4B4 /* Products */,
-			);
-			sourceTree = "<group>";
-		};
-		EA7CC898183E11E600B6A4B4 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				EA7CC897183E11E600B6A4B4 /* libownCloudiOS.a */,
-				EA7CC8A7183E11E600B6A4B4 /* ownCloud iOS libraryTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		EA7CC899183E11E600B6A4B4 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				EAABAB3B185EE33B00909831 /* UIKit.framework */,
-				EA7CC89A183E11E600B6A4B4 /* Foundation.framework */,
-				EA7CC8A8183E11E600B6A4B4 /* XCTest.framework */,
-				EA7CC8AB183E11E600B6A4B4 /* UIKit.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		EA7CC89C183E11E600B6A4B4 /* OCCommunicationLib */ = {
-			isa = PBXGroup;
-			children = (
-				F7FB5F151E66E63B00389481 /* OCActivity.h */,
-				F7FB5F161E66E63B00389481 /* OCActivity.m */,
-				F7E7D4B41E826FA000315A90 /* OCExternalSites.h */,
-				F7E7D4B51E826FA000315A90 /* OCExternalSites.m */,
-				EAABAA30183E688900909831 /* OCFileDto.h */,
-				EAABAA31183E688900909831 /* OCFileDto.m */,
-				EA0599981BB96D14002C2864 /* OCShareUser.h */,
-				EA0599991BB96D14002C2864 /* OCShareUser.m */,
-				13AA8634187C211900A10927 /* OCSharedDto.h */,
-				13AA8635187C211900A10927 /* OCSharedDto.m */,
-				EA913A701BE9FB0700D015B8 /* OCCapabilities.h */,
-				EA913A711BE9FB0700D015B8 /* OCCapabilities.m */,
-				EAABAA2F183E687000909831 /* OCFrameworkConstants.h */,
-				F73C00331E56098300EEEFA7 /* OCUserProfile.h */,
-				F73C00341E56098300EEEFA7 /* OCUserProfile.m */,
-				F70498071E369EF6008F5BB6 /* OCNotifications.h */,
-				F70498081E369EF6008F5BB6 /* OCNotifications.m */,
-				F70498091E369EF6008F5BB6 /* OCNotificationsAction.h */,
-				F704980A1E369EF6008F5BB6 /* OCNotificationsAction.m */,
-				F704980B1E369EF6008F5BB6 /* OCRichObjectStrings.h */,
-				F704980C1E369EF6008F5BB6 /* OCRichObjectStrings.m */,
-				EA7CC932183E150000B6A4B4 /* OCCommunication.h */,
-				EA7CC933183E150000B6A4B4 /* OCCommunication.m */,
-				EAABAB1218574A7C00909831 /* OCErrorMsg.h */,
-				EAABAB171858593500909831 /* UploadSupport */,
-				EA7CC91C183E147C00B6A4B4 /* OCWebDavClient */,
-				EA7CC8E7183E133800B6A4B4 /* Utils */,
-				EA7CC89D183E11E600B6A4B4 /* Supporting Files */,
-			);
-			path = OCCommunicationLib;
-			sourceTree = "<group>";
-		};
-		EA7CC89D183E11E600B6A4B4 /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				EA7CC8C0183E126B00B6A4B4 /* ExternalLibs */,
-				EA7CC89E183E11E600B6A4B4 /* ownCloud iOS library-Prefix.pch */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		EA7CC8C0183E126B00B6A4B4 /* ExternalLibs */ = {
-			isa = PBXGroup;
-			children = (
-				EA7CC8C1183E12C200B6A4B4 /* AFNetworking */,
-			);
-			name = ExternalLibs;
-			sourceTree = "<group>";
-		};
-		EA7CC8C1183E12C200B6A4B4 /* AFNetworking */ = {
-			isa = PBXGroup;
-			children = (
-				59A5B70D191907F100724BE3 /* AFHTTPSessionManager.h */,
-				59A5B70E191907F100724BE3 /* AFHTTPSessionManager.m */,
-				59A5B70F191907F100724BE3 /* AFNetworking.h */,
-				59A5B710191907F100724BE3 /* AFNetworkReachabilityManager.h */,
-				59A5B711191907F100724BE3 /* AFNetworkReachabilityManager.m */,
-				59A5B712191907F100724BE3 /* AFSecurityPolicy.h */,
-				59A5B713191907F100724BE3 /* AFSecurityPolicy.m */,
-				59A5B716191907F100724BE3 /* AFURLRequestSerialization.h */,
-				59A5B717191907F100724BE3 /* AFURLRequestSerialization.m */,
-				59A5B718191907F100724BE3 /* AFURLResponseSerialization.h */,
-				59A5B719191907F100724BE3 /* AFURLResponseSerialization.m */,
-				59A5B71A191907F100724BE3 /* AFURLSessionManager.h */,
-				59A5B71B191907F100724BE3 /* AFURLSessionManager.m */,
-			);
-			name = AFNetworking;
-			sourceTree = "<group>";
-		};
-		EA7CC8E7183E133800B6A4B4 /* Utils */ = {
-			isa = PBXGroup;
-			children = (
-				591BFBF31B1C809000AB8D3A /* OCConstants.h */,
-				EAABAB2418585C5200909831 /* NSString+Encode.h */,
-				EAABAB2518585C5200909831 /* NSString+Encode.m */,
-				EA7CC910183E146000B6A4B4 /* UtilsFramework.h */,
-				EA7CC911183E146000B6A4B4 /* UtilsFramework.m */,
-			);
-			name = Utils;
-			sourceTree = "<group>";
-		};
-		EA7CC91C183E147C00B6A4B4 /* OCWebDavClient */ = {
-			isa = PBXGroup;
-			children = (
-				13AA8637187C331F00A10927 /* Parsers */,
-				EA7CC91D183E14A100B6A4B4 /* NSDate+ISO8601.h */,
-				EA7CC91E183E14A100B6A4B4 /* NSDate+ISO8601.m */,
-				EA7CC91F183E14A100B6A4B4 /* NSDate+RFC1123.h */,
-				EA7CC920183E14A100B6A4B4 /* NSDate+RFC1123.m */,
-				EA7CC922183E14A100B6A4B4 /* OCHTTPRequestOperation.h */,
-				EA7CC923183E14A100B6A4B4 /* OCHTTPRequestOperation.m */,
-				EA7CC924183E14A100B6A4B4 /* OCWebDAVClient.h */,
-				EA7CC925183E14A100B6A4B4 /* OCWebDAVClient.m */,
-			);
-			name = OCWebDavClient;
-			sourceTree = "<group>";
-		};
-		EAABAB171858593500909831 /* UploadSupport */ = {
-			isa = PBXGroup;
-			children = (
-				EAABAB181858594A00909831 /* OCChunkDto.h */,
-				EAABAB191858594A00909831 /* OCChunkDto.m */,
-			);
-			name = UploadSupport;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		EA7CC896183E11E600B6A4B4 /* ownCloud iOS library */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = EA7CC8BA183E11E600B6A4B4 /* Build configuration list for PBXNativeTarget "ownCloud iOS library" */;
-			buildPhases = (
-				EA7CC893183E11E600B6A4B4 /* Sources */,
-				EA7CC894183E11E600B6A4B4 /* Frameworks */,
-				EA7CC895183E11E600B6A4B4 /* CopyFiles */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = "ownCloud iOS library";
-			productName = OCCommunicationLib;
-			productReference = EA7CC897183E11E600B6A4B4 /* libownCloudiOS.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		EA7CC8A6183E11E600B6A4B4 /* ownCloud iOS libraryTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = EA7CC8BD183E11E600B6A4B4 /* Build configuration list for PBXNativeTarget "ownCloud iOS libraryTests" */;
-			buildPhases = (
-				EA7CC8A3183E11E600B6A4B4 /* Sources */,
-				EA7CC8A4183E11E600B6A4B4 /* Frameworks */,
-				EA7CC8A5183E11E600B6A4B4 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				EA7CC8AE183E11E600B6A4B4 /* PBXTargetDependency */,
-			);
-			name = "ownCloud iOS libraryTests";
-			productName = OCCommunicationLibTests;
-			productReference = EA7CC8A7183E11E600B6A4B4 /* ownCloud iOS libraryTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		EA7CC88F183E11E600B6A4B4 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0800;
-				ORGANIZATIONNAME = ownCloud;
-			};
-			buildConfigurationList = EA7CC892183E11E600B6A4B4 /* Build configuration list for PBXProject "ownCloud iOS library" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-				ru,
-				pl,
-				is,
-				"pt-BR",
-				"zh-Hans-CN",
-			);
-			mainGroup = EA7CC88E183E11E600B6A4B4;
-			productRefGroup = EA7CC898183E11E600B6A4B4 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				EA7CC896183E11E600B6A4B4 /* ownCloud iOS library */,
-				EA7CC8A6183E11E600B6A4B4 /* ownCloud iOS libraryTests */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		EA7CC8A5183E11E600B6A4B4 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		EA7CC893183E11E600B6A4B4 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				59A5B724191907F100724BE3 /* AFURLSessionManager.m in Sources */,
-				EA913A721BE9FB0700D015B8 /* OCCapabilities.m in Sources */,
-				59A5B71E191907F100724BE3 /* AFHTTPSessionManager.m in Sources */,
-				59A5B71F191907F100724BE3 /* AFNetworkReachabilityManager.m in Sources */,
-				EA7CC92E183E14A100B6A4B4 /* OCWebDAVClient.m in Sources */,
-				EAABAB1E1858594A00909831 /* OCChunkDto.m in Sources */,
-				F7FB5F171E66E63B00389481 /* OCActivity.m in Sources */,
-				EA73DC831B1C48EA00C3AC21 /* OCXMLServerErrorsParser.m in Sources */,
-				F785C1341E6316A500469BAC /* OCXMLListParser.m in Sources */,
-				1345E4601884213400153F14 /* OCXMLShareByLinkParser.m in Sources */,
-				59A5B720191907F100724BE3 /* AFSecurityPolicy.m in Sources */,
-				EAABAA32183E688900909831 /* OCFileDto.m in Sources */,
-				F704980F1E369EF6008F5BB6 /* OCRichObjectStrings.m in Sources */,
-				F704980D1E369EF6008F5BB6 /* OCNotifications.m in Sources */,
-				F73C00351E56098300EEEFA7 /* OCUserProfile.m in Sources */,
-				EA7CC934183E150000B6A4B4 /* OCCommunication.m in Sources */,
-				F7E7D4B61E826FA000315A90 /* OCExternalSites.m in Sources */,
-				F704980E1E369EF6008F5BB6 /* OCNotificationsAction.m in Sources */,
-				131C67B9187C3E360009030E /* OCXMLSharedParser.m in Sources */,
-				13AA8640187C3B9700A10927 /* OCXMLParser.m in Sources */,
-				EA7CC912183E146000B6A4B4 /* UtilsFramework.m in Sources */,
-				EA7CC92A183E14A100B6A4B4 /* NSDate+RFC1123.m in Sources */,
-				13AA8636187C211900A10927 /* OCSharedDto.m in Sources */,
-				EA7CC928183E14A100B6A4B4 /* NSDate+ISO8601.m in Sources */,
-				EAABAB2618585C5200909831 /* NSString+Encode.m in Sources */,
-				59A5B722191907F100724BE3 /* AFURLRequestSerialization.m in Sources */,
-				EA05999A1BB96D14002C2864 /* OCShareUser.m in Sources */,
-				59A5B723191907F100724BE3 /* AFURLResponseSerialization.m in Sources */,
-				EA7CC92C183E14A100B6A4B4 /* OCHTTPRequestOperation.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EA7CC8A3183E11E600B6A4B4 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				EAABAB1F1858594A00909831 /* OCChunkDto.m in Sources */,
-				EA7CC92F183E14A100B6A4B4 /* OCWebDAVClient.m in Sources */,
-				EA7CC935183E150000B6A4B4 /* OCCommunication.m in Sources */,
-				EA7CC913183E146000B6A4B4 /* UtilsFramework.m in Sources */,
-				EA7CC92B183E14A100B6A4B4 /* NSDate+RFC1123.m in Sources */,
-				EAABAA33183E688900909831 /* OCFileDto.m in Sources */,
-				EA7CC929183E14A100B6A4B4 /* NSDate+ISO8601.m in Sources */,
-				EA7CC92D183E14A100B6A4B4 /* OCHTTPRequestOperation.m in Sources */,
-				EAABAB2718585C5200909831 /* NSString+Encode.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		EA7CC8AE183E11E600B6A4B4 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = EA7CC896183E11E600B6A4B4 /* ownCloud iOS library */;
-			targetProxy = EA7CC8AD183E11E600B6A4B4 /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
-		EA7CC8B8183E11E600B6A4B4 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_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;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				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",
-					"$(inherited)",
-				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = iphoneos;
-			};
-			name = Debug;
-		};
-		EA7CC8B9183E11E600B6A4B4 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_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;
-				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;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				SDKROOT = iphoneos;
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		EA7CC8BB183E11E600B6A4B4 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				DSTROOT = /tmp/OCCommunicationLib.dst;
-				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "OCCommunicationLib/ownCloud iOS library-Prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_LDFLAGS = "-ObjC";
-				PRODUCT_NAME = ownCloudiOS;
-				SKIP_INSTALL = YES;
-				VALID_ARCHS = "armv7 armv7s arm64";
-			};
-			name = Debug;
-		};
-		EA7CC8BC183E11E600B6A4B4 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				DSTROOT = /tmp/OCCommunicationLib.dst;
-				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "OCCommunicationLib/ownCloud iOS library-Prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_LDFLAGS = "-ObjC";
-				PRODUCT_NAME = ownCloudiOS;
-				SKIP_INSTALL = YES;
-				VALID_ARCHS = "armv7 armv7s arm64";
-			};
-			name = Release;
-		};
-		EA7CC8BE183E11E600B6A4B4 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(SDKROOT)/Developer/Library/Frameworks",
-					"$(inherited)",
-					"$(DEVELOPER_FRAMEWORKS_DIR)",
-				);
-				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "OCCommunicationLib/ownCloud iOS library-Prefix.pch";
-				GCC_PREPROCESSOR_DEFINITIONS = UNIT_TEST;
-				INFOPLIST_FILE = "OCCommunicationLibTests/ownCloud iOS libraryTests-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "owncloud.${PRODUCT_NAME:rfc1034identifier}";
-				PRODUCT_NAME = "ownCloud iOS libraryTests";
-				WRAPPER_EXTENSION = xctest;
-			};
-			name = Debug;
-		};
-		EA7CC8BF183E11E600B6A4B4 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(SDKROOT)/Developer/Library/Frameworks",
-					"$(inherited)",
-					"$(DEVELOPER_FRAMEWORKS_DIR)",
-				);
-				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "OCCommunicationLib/ownCloud iOS library-Prefix.pch";
-				GCC_PREPROCESSOR_DEFINITIONS = "";
-				INFOPLIST_FILE = "OCCommunicationLibTests/ownCloud iOS libraryTests-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "owncloud.${PRODUCT_NAME:rfc1034identifier}";
-				PRODUCT_NAME = "ownCloud iOS libraryTests";
-				WRAPPER_EXTENSION = xctest;
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		EA7CC892183E11E600B6A4B4 /* Build configuration list for PBXProject "ownCloud iOS library" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				EA7CC8B8183E11E600B6A4B4 /* Debug */,
-				EA7CC8B9183E11E600B6A4B4 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		EA7CC8BA183E11E600B6A4B4 /* Build configuration list for PBXNativeTarget "ownCloud iOS library" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				EA7CC8BB183E11E600B6A4B4 /* Debug */,
-				EA7CC8BC183E11E600B6A4B4 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		EA7CC8BD183E11E600B6A4B4 /* Build configuration list for PBXNativeTarget "ownCloud iOS libraryTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				EA7CC8BE183E11E600B6A4B4 /* Debug */,
-				EA7CC8BF183E11E600B6A4B4 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = EA7CC88F183E11E600B6A4B4 /* Project object */;
-}

+ 0 - 7
Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "self:ownCloud iOS library.xcodeproj">
-   </FileRef>
-</Workspace>

二進制
Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/project.xcworkspace/xcuserdata/marinofaggiana.xcuserdatad/UserInterfaceState.xcuserstate


+ 0 - 81
Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcshareddata/xcschemes/ownCloud iOS library.xcscheme

@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "0820"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "EA7CC896183E11E600B6A4B4"
-               BuildableName = "libownCloudiOS.a"
-               BlueprintName = "ownCloud iOS library"
-               ReferencedContainer = "container:ownCloud iOS library.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "NO">
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "EA7CC8A6183E11E600B6A4B4"
-               BuildableName = "ownCloud iOS libraryTests.xctest"
-               BlueprintName = "ownCloud iOS libraryTests"
-               ReferencedContainer = "container:ownCloud iOS library.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "EA7CC896183E11E600B6A4B4"
-            BuildableName = "libownCloudiOS.a"
-            BlueprintName = "ownCloud iOS library"
-            ReferencedContainer = "container:ownCloud iOS library.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 0 - 5
Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcuserdata/Gonzalo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Bucket
-   type = "1"
-   version = "2.0">
-</Bucket>

+ 0 - 27
Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcuserdata/Gonzalo.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>SchemeUserState</key>
-	<dict>
-		<key>ownCloud iOS library.xcscheme</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>1</integer>
-		</dict>
-	</dict>
-	<key>SuppressBuildableAutocreation</key>
-	<dict>
-		<key>EA7CC896183E11E600B6A4B4</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>EA7CC8A6183E11E600B6A4B4</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-	</dict>
-</dict>
-</plist>

+ 0 - 29
Libraries external/OCCommunicationLib/ownCloud iOS library.xcodeproj/xcuserdata/marinofaggiana.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>SchemeUserState</key>
-	<dict>
-		<key>ownCloud iOS library.xcscheme_^#shared#^_</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-			<key>orderHint</key>
-			<integer>5</integer>
-		</dict>
-	</dict>
-	<key>SuppressBuildableAutocreation</key>
-	<dict>
-		<key>EA7CC896183E11E600B6A4B4</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>EA7CC8A6183E11E600B6A4B4</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-	</dict>
-</dict>
-</plist>

文件差異過大導致無法顯示
+ 12497 - 0
Libraries external/Realm/Realm.framework/28DC3C4D-9ED3-3B6D-BA11-0DADE89D5E44.bcsymbolmap


文件差異過大導致無法顯示
+ 12489 - 0
Libraries external/Realm/Realm.framework/39584005-C47E-316A-80FC-328682F8C4BF.bcsymbolmap


文件差異過大導致無法顯示
+ 544 - 0
Libraries external/Realm/Realm.framework/9EA41024-E172-39B4-B0B8-6A4C3DF5CF37.bcsymbolmap


文件差異過大導致無法顯示
+ 11440 - 0
Libraries external/Realm/Realm.framework/A3A08E7F-D7E4-3A60-BF5C-30D6BA763CDC.bcsymbolmap


文件差異過大導致無法顯示
+ 563 - 0
Libraries external/Realm/Realm.framework/ABA8E654-1821-3570-86D7-FC63F21DABA7.bcsymbolmap


文件差異過大導致無法顯示
+ 568 - 0
Libraries external/Realm/Realm.framework/AD7B7691-B0A5-312F-A1FF-FE8A01860297.bcsymbolmap


文件差異過大導致無法顯示
+ 12488 - 0
Libraries external/Realm/Realm.framework/C6443776-AC38-3F17-BD1B-F68382E06830.bcsymbolmap


+ 2470 - 0
Libraries external/Realm/Realm.framework/CHANGELOG.md

@@ -0,0 +1,2470 @@
+2.7.0 Release notes (2017-05-03)
+=============================================================
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Use reachability API to minimize the reconnection delay if the network
+  connection was lost.
+* Add `-[RLMSyncUser changePassword:completion:]` API to change the current
+  user's password if using Realm's 'password' authentication provider.
+  Requires any edition of the Realm Object Server 1.4.0 or later.
+* `{RLM}SyncConfiguration` now has an `enableSSLValidation` property
+  (and default parameter in the Swift initializer) to allow SSL validation
+  to be specified on a per-server basis.
+* Transactions between a synced Realm and a Realm Object Server can now
+  exceed 16 MB in size.
+* Add new APIs for changing and retrieving permissions for synchronized Realms.
+  These APIs are intended to replace the existing Realm Object-based permissions
+  system. Requires any edition of the Realm Object Server 1.1.0 or later.
+
+### Bugfixes
+
+* Support Realm model classes defined in Swift with overridden Objective-C
+  names (e.g. `@objc(Foo) class SwiftFoo: Object {}`).
+* Fix `-[RLMMigration enumerateObjects:block:]` returning incorrect `oldObject`
+  objects when enumerating a class name after previously deleting a `newObject`.
+* Fix an issue where `Realm.asyncOpen(...)` would fail to work when opening a
+  synchronized Realm for which the user only had read permissions.
+* Using KVC to set a `List` property to `nil` now clears it to match the
+  behavior of `RLMArray` properties.
+* Fix crash from `!m_awaiting_pong` assertion failure when using synced Realms.
+* Fix poor performance or hangs when performing case-insensitive queries on
+  indexed string properties that contain many characters that don't differ
+  between upper and lower case (e.g., numbers, punctuation).
+
+2.6.2 Release notes (2017-04-21)
+=============================================================
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix an issue where calling `Realm.asyncOpen(...)` with a synchronized Realm
+  configuration would fail with an "Operation canceled" error.
+* Fix initial collection notification sometimes not being delivered for synced
+  Realms.
+* Fix circular links sometimes resulting in objects not being marked as
+  modified in change notifications.
+
+2.6.1 Release notes (2017-04-18)
+=============================================================
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix an issue where calling `Realm.asyncOpen(...)` with a synchronized Realm
+  configuration would crash in error cases rather than report the error.
+  This is a small source breaking change if you were relying on the error
+  being reported to be a `Realm.Error`.
+
+2.6.0 Release notes (2017-04-18)
+=============================================================
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Add a `{RLM}SyncUser.isAdmin` property indicating whether a user is a Realm
+  Object Server administrator.
+* Add an API to asynchronously open a Realm and deliver it to a block on a
+  given queue. This performs all work needed to get the Realm to
+  a usable state (such as running potentially time-consuming migrations) on a
+  background thread before dispatching to the given queue. In addition,
+  synchronized Realms wait for all remote content available at the time the
+  operation began to be downloaded and available locally.
+* Add `shouldCompactOnLaunch` block property when configuring a Realm to
+  determine if it should be compacted before being returned.
+* Speed up case-insensitive queries on indexed string properties.
+* Add RLMResults's collection aggregate methods to RLMArray.
+* Add support for calling the aggregate methods on unmanaged Lists.
+
+### Bugfixes
+
+* Fix a deadlock when multiple processes open a Realm at the same time.
+* Fix `value(forKey:)`/`value(forKeyPath:)` returning incorrect values for `List` properties.
+
+2.5.1 Release notes (2017-04-05)
+=============================================================
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix CocoaPods installation with static libraries and multiple platforms.
+* Fix uncaught "Bad version number" exceptions on the notification worker thread
+  followed by deadlocks when Realms refresh.
+
+2.5.0 Release notes (2017-03-28)
+=============================================================
+
+Files written by Realm this version cannot be read by earlier versions of Realm.
+Old files can still be opened and files open in read-only mode will not be
+modified.
+
+If using synchronized Realms, the Realm Object Server must be running version
+1.3.0 or later.
+
+Swift binaries are now produced for Swift 3.0, 3.0.1, 3.0.2 and 3.1.
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Add support for multi-level object equality comparisons against `NULL`.
+* Add support for the `[d]` modifier on string comparison operators to perform
+  diacritic-insensitive comparisons.
+* Explicitly mark `[[RLMRealm alloc] init]` as unavailable.
+* Include the name of the problematic class in the error message when an
+  invalid property type is marked as the primary key.
+
+### Bugfixes
+
+* Fix incorrect column type assertions which could occur after schemas were
+  merged by sync.
+* Eliminate an empty write transaction when opening a synced Realm.
+* Support encrypting synchronized Realms by respecting the `encryptionKey` value
+  of the Realm's configuration.
+* Fix crash when setting an `{NS}Data` property close to 16MB.
+* Fix for reading `{NS}Data` properties incorrectly returning `nil`.
+* Reduce file size growth in cases where Realm versions were pinned while
+  starting write transactions.
+* Fix an assertion failure when writing to large `RLMArray`/`List` properties.
+* Fix uncaught `BadTransactLog` exceptions when pulling invalid changesets from
+  synchronized Realms.
+* Fix an assertion failure when an observed `RLMArray`/`List` is deleted after
+  being modified.
+
+2.4.4 Release notes (2017-03-13)
+=============================================================
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Add `(RLM)SyncPermission` class to allow reviewing access permissions for
+  Realms. Requires any edition of the Realm Object Server 1.1.0 or later.
+* Further reduce the number of files opened per thread-specific Realm on macOS,
+  iOS and watchOS.
+
+### Bugfixes
+
+* Fix a crash that could occur if new Realm instances were created while the
+  application was exiting.
+* Fix a bug that could lead to bad version number errors when delivering
+  change notifications.
+* Fix a potential use-after-free bug when checking validity of results.
+* Fix an issue where a sync session might not close properly if it receives
+  an error while being torn down.
+* Fix some issues where a sync session might not reconnect to the server properly
+  or get into an inconsistent state if revived after invalidation.
+* Fix an issue where notifications might not fire when the children of an
+  observed object are changed.
+* Fix an issue where progress notifications on sync sessions might incorrectly
+  report out-of-date values.
+* Fix an issue where multiple threads accessing encrypted data could result in
+  corrupted data or crashes.
+* Fix an issue where certain `LIKE` queries could hang.
+* Fix an issue where `-[RLMRealm writeCopyToURL:encryptionKey:error]` could create
+  a corrupt Realm file.
+* Fix an issue where incrementing a synced Realm's schema version without actually
+  changing the schema could cause a crash.
+
+2.4.3 Release notes (2017-02-20)
+=============================================================
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Avoid copying copy-on-write data structures, which can grow the file, when the
+  write does not actually change existing values.
+* Improve performance of deleting all objects in an RLMResults.
+* Reduce the number of files opened per thread-specific Realm on macOS.
+* Improve startup performance with large numbers of `RLMObject`/`Object`
+  subclasses.
+
+### Bugfixes
+
+* Fix synchronized Realms not downloading remote changes when an access token
+  expires and there are no local changes to upload.
+* Fix an issue where values set on a Realm object using `setValue(value:, forKey:)`
+  that were not themselves Realm objects were not properly converted into Realm
+  objects or checked for validity.
+* Fix an issue where `-[RLMSyncUser sessionForURL:]` could erroneously return a
+  non-nil value when passed in an invalid URL.
+* `SyncSession.Progress.fractionTransferred` now returns 1 if there are no
+  transferrable bytes.
+* Fix sync progress notifications registered on background threads by always
+  dispatching on a dedicated background queue.
+* Fix compilation issues with Xcode 8.3 beta 2.
+* Fix incorrect sync progress notification values for Realms originally created
+  using a version of Realm prior to 2.3.0.
+* Fix LLDB integration to be able to display summaries of `RLMResults` once more.
+* Reject Swift properties with names which cause them to fall in to ARC method
+  families rather than crashing when they are accessed.
+* Fix sorting by key path when the declared property order doesn't match the order
+  of properties in the Realm file, which can happen when properties are added in
+  different schema versions.
+
+2.4.2 Release notes (2017-01-30)
+=============================================================
+
+### Bugfixes
+
+* Fix an issue where RLMRealm instances could end up in the autorelease pool
+  for other threads.
+
+2.4.1 Release notes (2017-01-27)
+=============================================================
+
+### Bugfixes
+
+* Fix an issue where authentication tokens were not properly refreshed
+  automatically before expiring.
+
+2.4.0 Release notes (2017-01-26)
+=============================================================
+
+This release drops support for compiling with Swift 2.x.
+Swift 3.0.0 is now the minimum Swift version supported.
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Add change notifications for individual objects with an API similar to that
+  of collection notifications.
+
+### Bugfixes
+
+* Fix Realm Objective-C compilation errors with Xcode 8.3 beta 1.
+* Fix several error handling issues when renewing expired authentication
+  tokens for synchronized Realms.
+* Fix a race condition leading to bad_version exceptions being thrown in
+  Realm's background worker thread.
+
+2.3.0 Release notes (2017-01-19)
+=============================================================
+
+### Sync Breaking Changes
+
+* Make `PermissionChange`'s `id` property a primary key.
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Add `SyncPermissionOffer` and `SyncPermissionOfferResponse` classes to allow
+  creating and accepting permission change events to synchronized Realms between
+  different users.
+* Support monitoring sync transfer progress by registering notification blocks
+  on `SyncSession`. Specify the transfer direction (`.upload`/`.download`) and
+  mode (`.reportIndefinitely`/`.forCurrentlyOutstandingWork`) to monitor.
+
+### Bugfixes
+
+* Fix a call to `commitWrite(withoutNotifying:)` committing a transaction that
+  would not have triggered a notification incorrectly skipping the next
+  notification.
+* Fix incorrect results and crashes when conflicting object insertions are
+  merged by the synchronization mechanism when there is a collection
+  notification registered for that object type.
+
+2.2.0 Release notes (2017-01-12)
+=============================================================
+
+### Sync Breaking Changes (In Beta)
+
+* Sync-related error reporting behavior has been changed. Errors not related
+  to a particular user or session are only reported if they are classed as
+  'fatal' by the underlying sync engine.
+* Added `RLMSyncErrorClientResetError` to `RLMSyncError` enum.
+
+### API Breaking Changes
+
+* The following Objective-C APIs have been deprecated in favor of newer or preferred versions:
+
+| Deprecated API                                              | New API                                                     |
+|:------------------------------------------------------------|:------------------------------------------------------------|
+| `-[RLMArray sortedResultsUsingProperty:]`                   | `-[RLMArray sortedResultsUsingKeyPath:]`                    |
+| `-[RLMCollection sortedResultsUsingProperty:]`              | `-[RLMCollection sortedResultsUsingKeyPath:]`               |
+| `-[RLMResults sortedResultsUsingProperty:]`                 | `-[RLMResults sortedResultsUsingKeyPath:]`                  |
+| `+[RLMSortDescriptor sortDescriptorWithProperty:ascending]` | `+[RLMSortDescriptor sortDescriptorWithKeyPath:ascending:]` |
+| `RLMSortDescriptor.property`                                | `RLMSortDescriptor.keyPath`                                 |
+
+* The following Swift APIs have been deprecated in favor of newer or preferred versions:
+
+| Deprecated API                                        | New API                                          |
+|:------------------------------------------------------|:-------------------------------------------------|
+| `LinkingObjects.sorted(byProperty:ascending:)`        | `LinkingObjects.sorted(byKeyPath:ascending:)`    |
+| `List.sorted(byProperty:ascending:)`                  | `List.sorted(byKeyPath:ascending:)`              |
+| `RealmCollection.sorted(byProperty:ascending:)`       | `RealmCollection.sorted(byKeyPath:ascending:)`   |
+| `Results.sorted(byProperty:ascending:)`               | `Results.sorted(byKeyPath:ascending:)`           |
+| `SortDescriptor(property:ascending:)`                 | `SortDescriptor(keyPath:ascending:)`             |
+| `SortDescriptor.property`                             | `SortDescriptor.keyPath`                         |
+
+### Enhancements
+
+* Introduce APIs for safely passing objects between threads. Create a
+  thread-safe reference to a thread-confined object by passing it to the
+  `+[RLMThreadSafeReference referenceWithThreadConfined:]`/`ThreadSafeReference(to:)`
+  constructor, which you can then safely pass to another thread to resolve in
+  the new Realm with `-[RLMRealm resolveThreadSafeReference:]`/`Realm.resolve(_:)`.
+* Realm collections can now be sorted by properties over to-one relationships.
+* Optimized `CONTAINS` queries to use Boyer-Moore algorithm
+  (around 10x speedup on large datasets).
+
+### Bugfixes
+
+* Setting `deleteRealmIfMigrationNeeded` now also deletes the Realm if a file
+  format migration is required, such as when moving from a file last accessed
+  with Realm 0.x to 1.x, or 1.x to 2.x.
+* Fix queries containing nested `SUBQUERY` expressions.
+* Fix spurious incorrect thread exceptions when a thread id happens to be
+  reused while an RLMRealm instance from the old thread still exists.
+* Fixed various bugs in aggregate methods (max, min, avg, sum).
+
+2.1.2 Release notes (2016--12-19)
+=============================================================
+
+This release adds binary versions of Swift 3.0.2 frameworks built with Xcode 8.2.
+
+### Sync Breaking Changes (In Beta)
+
+* Rename occurences of "iCloud" with "CloudKit" in APIs and comments to match
+  naming in the Realm Object Server.
+
+### API Breaking Changes
+
+* None.
+
+### Enhancements
+
+* Add support for 'LIKE' queries (wildcard matching).
+
+### Bugfixes
+
+* Fix authenticating with CloudKit.
+* Fix linker warning about "Direct access to global weak symbol".
+
+2.1.1 Release notes (2016-12-02)
+=============================================================
+
+### Enhancements
+
+* Add `RealmSwift.ObjectiveCSupport.convert(object:)` methods to help write
+  code that interoperates between Realm Objective-C and Realm Swift APIs.
+* Throw exceptions when opening a Realm with an incorrect configuration, like:
+    * `readOnly` set with a sync configuration.
+    * `readOnly` set with a migration block.
+    * migration block set with a sync configuration.
+* Greatly improve performance of write transactions which make a large number of
+  changes to indexed properties, including the automatic migration when opening
+  files written by Realm 1.x.
+
+### Bugfixes
+
+* Reset sync metadata Realm in case of decryption error.
+* Fix issue preventing using synchronized Realms in Xcode Playgrounds.
+* Fix assertion failure when migrating a model property from object type to
+  `RLMLinkingObjects` type.
+* Fix a `LogicError: Bad version number` exception when using `RLMResults` with
+  no notification blocks and explicitly called `-[RLMRealm refresh]` from that
+  thread.
+* Logged-out users are no longer returned from `+[RLMSyncUser currentUser]` or
+  `+[RLMSyncUser allUsers]`.
+* Fix several issues which could occur when the 1001st object of a given type
+  was created or added to an RLMArray/List, including crashes when rerunning
+  existing queries and possibly data corruption.
+* Fix a potential crash when the application exits due to a race condition in
+  the destruction of global static variables.
+* Fix race conditions when waiting for sync uploads or downloads to complete
+  which could result in crashes or the callback being called too early.
+
+2.1.0 Release notes (2016-11-18)
+=============================================================
+
+### Sync Breaking Changes (In Beta)
+
+* None.
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Add the ability to skip calling specific notification blocks when committing
+  a write transaction.
+
+### Bugfixes
+
+* Deliver collection notifications when beginning a write transaction which
+  advances the read version of a Realm (previously only Realm-level
+  notifications were sent).
+* Fix some scenarios which would lead to inconsistent states when using
+  collection notifications.
+* Fix several race conditions in the notification functionality.
+* Don't send Realm change notifications when canceling a write transaction.
+
+2.0.4 Release notes (2016-11-14)
+=============================================================
+
+### Sync Breaking Changes (In Beta)
+
+* Remove `RLMAuthenticationActions` and replace
+  `+[RLMSyncCredential credentialWithUsername:password:actions:]` with
+  `+[RLMSyncCredential credentialsWithUsername:password:register:]`.
+* Rename `+[RLMSyncUser authenticateWithCredential:]` to
+  `+[RLMSyncUser logInWithCredentials:]`.
+* Rename "credential"-related types and methods to
+  `RLMSyncCredentials`/`SyncCredentials` and consistently refer to credentials
+  in the plural form.
+* Change `+[RLMSyncUser all]` to return a dictionary of identifiers to users and
+  rename to:
+  * `+[RLMSyncUser allUsers]` in Objective-C.
+  * `SyncUser.allUsers()` in Swift 2.
+  * `SyncUser.all` in Swift 3.
+* Rename `SyncManager.sharedManager()` to `SyncManager.shared` in Swift 3.
+* Change `Realm.Configuration.syncConfiguration` to take a `SyncConfiguration`
+  struct rather than a named tuple.
+* `+[RLMSyncUser logInWithCredentials:]` now invokes its callback block on a
+  background queue.
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Add `+[RLMSyncUser currentUser]`.
+* Add the ability to change read, write and management permissions for
+  synchronized Realms using the management Realm obtained via the
+  `-[RLMSyncUser managementRealmWithError:]` API and the
+  `RLMSyncPermissionChange` class.
+
+### Bugfixes
+
+* None.
+
+2.0.3 Release notes (2016-10-27)
+=============================================================
+
+This release adds binary versions of Swift 3.0.1 frameworks built with Xcode 8.1
+GM seed.
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix a `BadVersion` exception caused by a race condition when delivering
+  collection change notifications.
+* Fix an assertion failure when additional model classes are added and
+  `deleteRealmIfMigrationNeeded` is enabled.
+* Fix a `BadTransactLog` exception when deleting an `RLMResults` in a synced
+  Realm.
+* Fix an assertion failure when a write transaction is in progress at the point
+  of process termination.
+* Fix a crash that could occur when working with a `RLMLinkingObject` property
+  of an unmanaged object.
+
+2.0.2 Release notes (2016-10-05)
+=============================================================
+
+This release is not protocol-compatible with previous version of the Realm
+Mobile Platform.
+
+### API breaking changes
+
+* Rename Realm Swift's `User` to `SyncUser` to make clear that it relates to the
+  Realm Mobile Platform, and to avoid potential conflicts with other `User` types.
+
+### Bugfixes
+
+* Fix Realm headers to be compatible with pre-C++11 dialects of Objective-C++.
+* Fix incorrect merging of RLMArray/List changes when objects with the same
+  primary key are created on multiple devices.
+* Fix bad transaction log errors after deleting objects on a different device.
+* Fix a BadVersion error when a background worker finishes running while older
+  results from that worker are being delivered to a different thread.
+
+2.0.1 Release notes (2016-09-29)
+=============================================================
+
+### Bugfixes
+
+* Fix an assertion failure when opening a Realm file written by a 1.x version
+  of Realm which has an indexed nullable int or bool property.
+
+2.0.0 Release notes (2016-09-27)
+=============================================================
+
+This release introduces support for the Realm Mobile Platform!
+See <https://realm.io/news/introducing-realm-mobile-platform/> for an overview
+of these great new features.
+
+### API breaking changes
+
+* By popular demand, `RealmSwift.Error` has been moved from the top-level
+  namespace into a `Realm` extension and is now `Realm.Error`, so that it no
+  longer conflicts with `Swift.Error`.
+* Files written by Realm 2.0 cannot be read by 1.x or earlier versions. Old
+  files can still be opened.
+
+### Enhancements
+
+* The .log, .log_a and .log_b files no longer exist and the state tracked in
+  them has been moved to the main Realm file. This reduces the number of open
+  files needed by Realm, improves performance of both opening and writing to
+  Realms, and eliminates a small window where committing write transactions
+  would prevent other processes from opening the file.
+
+### Bugfixes
+
+* Fix an assertion failure when sorting by zero properties.
+* Fix a mid-commit crash in one process also crashing all other processes with
+  the same Realm open.
+* Properly initialize new nullable float and double properties added to
+  existing objects to null rather than 0.
+* Fix a stack overflow when objects with indexed string properties had very
+  long common prefixes.
+* Fix a race condition which could lead to crashes when using async queries or
+  collection notifications.
+* Fix a bug which could lead to incorrect state when an object which links to
+  itself is deleted from the Realm.
+
+1.1.0 Release notes (2016-09-16)
+=============================================================
+
+This release brings official support for Xcode 8, Swift 2.3 and Swift 3.0.
+Prebuilt frameworks are now built with Xcode 7.3.1 and Xcode 8.0.
+
+### API breaking changes
+
+* Deprecate `migrateRealm:` in favor of new `performMigrationForConfiguration:error:` method
+  that follows Cocoa's NSError conventions.
+* Fix issue where `RLMResults` used `id `instead of its generic type as the return
+  type of subscript.
+
+### Enhancements
+
+* Improve error message when using NSNumber incorrectly in Swift models.
+* Further reduce the download size of the prebuilt static libraries.
+* Improve sort performance, especially on non-nullable columns.
+* Allow partial initialization of object by `initWithValue:`, deferring
+  required property checks until object is added to Realm.
+
+### Bugfixes
+
+* Fix incorrect truncation of the constant value for queries of the form
+  `column < value` for `float` and `double` columns.
+* Fix crash when an aggregate is accessed as an `Int8`, `Int16`, `Int32`, or `Int64`.
+* Fix a race condition that could lead to a crash if an RLMArray or List was
+  deallocated on a different thread than it was created on.
+* Fix a crash when the last reference to an observed object is released from
+  within the observation.
+* Fix a crash when `initWithValue:` is used to create a nested object for a class
+  with an uninitialized schema.
+* Enforce uniqueness for `RealmOptional` primary keys when using the `value` setter.
+
+1.0.2 Release notes (2016-07-13)
+=============================================================
+
+### API breaking changes
+
+* Attempting to add an object with no properties to a Realm now throws rather than silently
+  doing nothing.
+
+### Enhancements
+
+* Swift: A `write` block may now `throw`, reverting any changes already made in
+  the transaction.
+* Reduce address space used when committing write transactions.
+* Significantly reduce the download size of prebuilt binaries and slightly
+  reduce the final size contribution of Realm to applications.
+* Improve performance of accessing RLMArray properties and creating objects
+  with List properties.
+
+### Bugfixes
+
+* Fix a crash when reading the shared schema from an observed Swift object.
+* Fix crashes or incorrect results when passing an array of values to
+  `createOrUpdate` after reordering the class's properties.
+* Ensure that the initial call of a Results notification block is always passed
+  .Initial even if there is a write transaction between when the notification
+  is added and when the first notification is delivered.
+* Fix a crash when deleting all objects in a Realm while fast-enumerating query
+  results from that Realm.
+* Handle EINTR from flock() rather than crashing.
+* Fix incorrect behavior following a call to `[RLMRealm compact]`.
+* Fix live updating and notifications for Results created from a predicate involving
+  an inverse relationship to be triggered when an object at the other end of the relationship
+  is modified.
+
+1.0.1 Release notes (2016-06-12)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Significantly improve performance of opening Realm files, and slightly
+  improve performance of committing write transactions.
+
+### Bugfixes
+
+* Swift: Fix an error thrown when trying to create or update `Object` instances via
+  `add(:_update:)` with a primary key property of type `RealmOptional`.
+* Xcode playground in Swift release zip now runs successfully.
+* The `key` parameter of `Realm.objectForPrimaryKey(_:key:)`/ `Realm.dynamicObjectForPrimaryKey(_:key:)`
+ is now marked as optional.
+* Fix a potential memory leak when closing Realms after a Realm file has been
+  opened on multiple threads which are running in active run loops.
+* Fix notifications breaking on tvOS after a very large number of write
+  transactions have been committed.
+* Fix a "Destruction of mutex in use" assertion failure after an error while
+  opening a file.
+* Realm now throws an exception if an `Object` subclass is defined with a managed Swift `lazy` property.
+  Objects with ignored `lazy` properties should now work correctly.
+* Update the LLDB script to work with recent changes to the implementation of `RLMResults`.
+* Fix an assertion failure when a Realm file is deleted while it is still open,
+  and then a new Realm is opened at the same path. Note that this is still not
+  a supported scenario, and may break in other ways.
+
+1.0.0 Release notes (2016-05-25)
+=============================================================
+
+No changes since 0.103.2.
+
+0.103.2 Release notes (2016-05-24)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Improve the error messages when an I/O error occurs in `writeCopyToURL`.
+
+### Bugfixes
+
+* Fix an assertion failure which could occur when opening a Realm after opening
+  that Realm failed previously in some specific ways in the same run of the
+  application.
+* Reading optional integers, floats, and doubles from within a migration block
+  now correctly returns `nil` rather than 0 when the stored value is `nil`.
+
+0.103.1 Release notes (2016-05-19)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix a bug that sometimes resulted in a single object's NSData properties
+  changing from `nil` to a zero-length non-`nil` NSData when a different object
+  of the same type was deleted.
+
+0.103.0 Release notes (2016-05-18)
+=============================================================
+
+### API breaking changes
+
+* All functionality deprecated in previous releases has been removed entirely.
+* Support for Xcode 6.x & Swift prior to 2.2 has been completely removed.
+* `RLMResults`/`Results` now become empty when a `RLMArray`/`List` or object
+  they depend on is deleted, rather than throwing an exception when accessed.
+* Migrations are no longer run when `deleteRealmIfMigrationNeeded` is set,
+  recreating the file instead.
+
+### Enhancements
+
+* Added `invalidated` properties to `RLMResults`/`Results`, `RLMLinkingObjects`/`LinkingObjects`,
+  `RealmCollectionType` and `AnyRealmCollection`. These properties report whether the Realm
+  the object is associated with has been invalidated.
+* Some `NSError`s created by Realm now have more descriptive user info payloads.
+
+### Bugfixes
+
+* None.
+
+0.102.1 Release notes (2016-05-13)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Return `RLMErrorSchemaMismatch` error rather than the more generic `RLMErrorFail`
+  when a migration is required.
+* Improve the performance of allocating instances of `Object` subclasses
+  that have `LinkingObjects` properties.
+
+### Bugfixes
+
+* `RLMLinkingObjects` properties declared in Swift subclasses of `RLMObject`
+  now work correctly.
+* Fix an assertion failure when deleting all objects of a type, inserting more
+  objects, and then deleting some of the newly inserted objects within a single
+  write transaction when there is an active notification block for a different
+  object type which links to the objects being deleted.
+* Fix crashes and/or incorrect results when querying over multiple levels of
+  `LinkingObjects` properties.
+* Fix opening read-only Realms on multiple threads at once.
+* Fix a `BadTransactLog` exception when storing dates before the unix epoch (1970-01-01).
+
+0.102.0 Release notes (2016-05-09)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Add a method to rename properties during migrations:
+  * Swift: `Migration.renamePropertyForClass(_:oldName:newName:)`
+  * Objective-C: `-[RLMMigration renamePropertyForClass:oldName:newName:]`
+* Add `deleteRealmIfMigrationNeeded` to
+  `RLMRealmConfiguration`/`Realm.Configuration`. When this is set to `true`,
+  the Realm file will be automatically deleted and recreated when there is a
+  schema mismatch rather than migrated to the new schema.
+
+### Bugfixes
+
+* Fix `BETWEEN` queries that traverse `RLMArray`/`List` properties to ensure that
+  a single related object satisfies the `BETWEEN` criteria, rather than allowing
+  different objects in the array to satisfy the lower and upper bounds.
+* Fix a race condition when a Realm is opened on one thread while it is in the
+  middle of being closed on another thread which could result in crashes.
+* Fix a bug which could result in changes made on one thread being applied
+  incorrectly on other threads when those threads are refreshed.
+* Fix crash when migrating to the new date format introduced in 0.101.0.
+* Fix crash when querying inverse relationships when objects are deleted.
+
+0.101.0 Release notes (2016-05-04)
+=============================================================
+
+### API breaking changes
+
+* Files written by this version of Realm cannot be read by older versions of
+  Realm. Existing files will automatically be upgraded when they are opened.
+
+### Enhancements
+
+* Greatly improve performance of collection change calculation for complex
+  object graphs, especially for ones with cycles.
+* NSDate properties now support nanoseconds precision.
+* Opening a single Realm file on multiple threads now shares a single memory
+  mapping of the file for all threads, significantly reducing the memory
+  required to work with large files.
+* Crashing while in the middle of a write transaction no longer blocks other
+  processes from performing write transactions on the same file.
+* Improve the performance of refreshing a Realm (including via autorefresh)
+  when there are live Results/RLMResults objects for that Realm.
+
+### Bugfixes
+
+* Fix an assertion failure of "!more_before || index >= std::prev(it)->second)"
+  in `IndexSet::do_add()`.
+* Fix a crash when an `RLMArray` or `List` object is destroyed from the wrong
+  thread.
+
+0.100.0 Release notes (2016-04-29)
+=============================================================
+
+### API breaking changes
+
+* `-[RLMObject linkingObjectsOfClass:forProperty]` and `Object.linkingObjects(_:forProperty:)`
+  are deprecated in favor of properties of type `RLMLinkingObjects` / `LinkingObjects`.
+
+### Enhancements
+
+* The automatically-maintained inverse direction of relationships can now be exposed as
+  properties of type `RLMLinkingObjects` / `LinkingObjects`. These properties automatically
+  update to reflect the objects that link to the target object, can be used in queries, and
+  can be filtered like other Realm collection types.
+* Queries that compare objects for equality now support multi-level key paths.
+
+### Bugfixes
+
+* Fix an assertion failure when a second write transaction is committed after a
+  write transaction deleted the object containing an RLMArray/List which had an
+  active notification block.
+* Queries that compare `RLMArray` / `List` properties using != now give the correct results.
+
+0.99.1 Release notes (2016-04-26)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix a scenario that could lead to the assertion failure
+  "m_advancer_sg->get_version_of_current_transaction() ==
+  new_notifiers.front()->version()".
+
+0.99.0 Release notes (2016-04-22)
+=============================================================
+
+### API breaking changes
+
+* Deprecate properties of type `id`/`AnyObject`. This type was rarely used,
+  rarely useful and unsupported in every other Realm binding.
+* The block for `-[RLMArray addNotificationBlock:]` and
+  `-[RLMResults addNotificationBlock:]` now takes another parameter.
+* The following Objective-C APIs have been deprecated in favor of newer or preferred versions:
+
+| Deprecated API                                         | New API                                               |
+|:-------------------------------------------------------|:------------------------------------------------------|
+| `-[RLMRealm removeNotification:]`                      | `-[RLMNotificationToken stop]`                        |
+| `RLMRealmConfiguration.path`                           | `RLMRealmConfiguration.fileURL`                       |
+| `RLMRealm.path`                                        | `RLMRealmConfiguration.fileURL`                       |
+| `RLMRealm.readOnly`                                    | `RLMRealmConfiguration.readOnly`                      |
+| `+[RLMRealm realmWithPath:]`                           | `+[RLMRealm realmWithURL:]`                           |
+| `+[RLMRealm writeCopyToPath:error:]`                   | `+[RLMRealm writeCopyToURL:encryptionKey:error:]`     |
+| `+[RLMRealm writeCopyToPath:encryptionKey:error:]`     | `+[RLMRealm writeCopyToURL:encryptionKey:error:]`     |
+| `+[RLMRealm schemaVersionAtPath:error:]`               | `+[RLMRealm schemaVersionAtURL:encryptionKey:error:]` |
+| `+[RLMRealm schemaVersionAtPath:encryptionKey:error:]` | `+[RLMRealm schemaVersionAtURL:encryptionKey:error:]` |
+
+* The following Swift APIs have been deprecated in favor of newer or preferred versions:
+
+| Deprecated API                                | New API                                  |
+|:----------------------------------------------|:-----------------------------------------|
+| `Realm.removeNotification(_:)`                | `NotificationToken.stop()`               |
+| `Realm.Configuration.path`                    | `Realm.Configuration.fileURL`            |
+| `Realm.path`                                  | `Realm.Configuration.fileURL`            |
+| `Realm.readOnly`                              | `Realm.Configuration.readOnly`           |
+| `Realm.writeCopyToPath(_:encryptionKey:)`     | `Realm.writeCopyToURL(_:encryptionKey:)` |
+| `schemaVersionAtPath(_:encryptionKey:error:)` | `schemaVersionAtURL(_:encryptionKey:)`   |
+
+### Enhancements
+
+* Add information about what rows were added, removed, or modified to the
+  notifications sent to the Realm collections.
+* Improve error when illegally appending to an `RLMArray` / `List` property from a default value
+  or the standalone initializer (`init()`) before the schema is ready.
+
+### Bugfixes
+
+* Fix a use-after-free when an associated object's dealloc method is used to
+  remove observers from an RLMObject.
+* Fix a small memory leak each time a Realm file is opened.
+* Return a recoverable `RLMErrorAddressSpaceExhausted` error rather than
+  crash when there is insufficient available address space on Realm
+  initialization or write commit.
+
+0.98.8 Release notes (2016-04-15)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fixed a bug that caused some encrypted files created using
+  `-[RLMRealm writeCopyToPath:encryptionKey:error:]` to fail to open.
+
+0.98.7 Release notes (2016-04-13)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Mark further initializers in Objective-C as NS_DESIGNATED_INITIALIZER to prevent that these aren't
+  correctly defined in Swift Object subclasses, which don't qualify for auto-inheriting the required initializers.
+* `-[RLMResults indexOfObjectWithPredicate:]` now returns correct results
+  for `RLMResults` instances that were created by filtering an `RLMArray`.
+* Adjust how RLMObjects are destroyed in order to support using an associated
+  object on an RLMObject to remove KVO observers from that RLMObject.
+* `-[RLMResults indexOfObjectWithPredicate:]` now returns the index of the first matching object for a
+  sorted `RLMResults`, matching its documented behavior.
+* Fix a crash when canceling a transaction that set a relationship.
+* Fix a crash when a query referenced a deleted object.
+
+0.98.6 Release notes (2016-03-25)
+=============================================================
+
+Prebuilt frameworks are now built with Xcode 7.3.
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix running unit tests on iOS simulators and devices with Xcode 7.3.
+
+0.98.5 Release notes (2016-03-14)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix a crash when opening a Realm on 32-bit iOS devices.
+
+0.98.4 Release notes (2016-03-10)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Properly report changes made by adding an object to a Realm with
+  addOrUpdate:/createOrUpdate: to KVO observers for existing objects with that
+  primary key.
+* Fix crashes and assorted issues when a migration which added object link
+  properties is rolled back due to an error in the migration block.
+* Fix assertion failures when deleting objects within a migration block of a
+  type which had an object link property added in that migration.
+* Fix an assertion failure in `Query::apply_patch` when updating certain kinds
+  of queries after a write transaction is committed.
+
+0.98.3 Release notes (2016-02-26)
+=============================================================
+
+### Enhancements
+
+* Initializing the shared schema is 3x faster.
+
+### Bugfixes
+
+* Using Realm Objective-C from Swift while having Realm Swift linked no longer causes that the
+  declared `ignoredProperties` are not taken into account.
+* Fix assertion failures when rolling back a migration which added Object link
+  properties to a class.
+* Fix potential errors when cancelling a write transaction which modified
+  multiple `RLMArray`/`List` properties.
+* Report the correct value for inWriteTransaction after attempting to commit a
+  write transaction fails.
+* Support CocoaPods 1.0 beginning from prerelease 1.0.0.beta.4 while retaining
+  backwards compatibility with 0.39.
+
+0.98.2 Release notes (2016-02-18)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Aggregate operations (`ANY`, `NONE`, `@count`, `SUBQUERY`, etc.) are now supported for key paths
+  that begin with an object relationship so long as there is a `RLMArray`/`List` property at some
+  point in a key path.
+* Predicates of the form `%@ IN arrayProperty` are now supported.
+
+### Bugfixes
+
+* Use of KVC collection operators on Swift collection types no longer throws an exception.
+* Fix reporting of inWriteTransaction in notifications triggered by
+  `beginWriteTransaction`.
+* The contents of `List` and `Optional` properties are now correctly preserved when copying
+  a Swift object from one Realm to another, and performing other operations that result in a
+  Swift object graph being recursively traversed from Objective-C.
+* Fix a deadlock when queries are performed within a Realm notification block.
+* The `ANY` / `SOME` / `NONE` qualifiers are now required in comparisons involving a key path that
+  traverse a `RLMArray`/`List` property. Previously they were only required if the first key in the
+  key path was an `RLMArray`/`List` property.
+* Fix several scenarios where the default schema would be initialized
+  incorrectly if the first Realm opened used a restricted class subset (via
+  `objectClasses`/`objectTypes`).
+
+0.98.1 Release notes (2016-02-10)
+=============================================================
+
+### Bugfixes
+
+* Fix crashes when deleting an object containing an `RLMArray`/`List` which had
+  previously been queried.
+* Fix a crash when deleting an object containing an `RLMArray`/`List` with
+  active notification blocks.
+* Fix duplicate file warnings when building via CocoaPods.
+* Fix crash or incorrect results when calling `indexOfObject:` on an
+  `RLMResults` derived from an `RLMArray`.
+
+0.98.0 Release notes (2016-02-04)
+=============================================================
+
+### API breaking changes
+
+* `+[RLMRealm realmWithPath:]`/`Realm.init(path:)` now inherits from the default
+  configuration.
+* Swift 1.2 is no longer supported.
+
+### Enhancements
+
+* Add `addNotificationBlock` to `RLMResults`, `Results`, `RLMArray`, and
+  `List`, which calls the given block whenever the collection changes.
+* Do a lot of the work for keeping `RLMResults`/`Results` up-to-date after
+  write transactions on a background thread to help avoid blocking the main
+  thread.
+* `NSPredicate`'s `SUBQUERY` operator is now supported. It has the following limitations:
+  * `@count` is the only operator that may be applied to the `SUBQUERY` expression.
+  * The `SUBQUERY(…).@count` expression must be compared with a constant.
+  * Correlated subqueries are not yet supported.
+
+### Bugfixes
+
+* None.
+
+0.97.1 Release notes (2016-01-29)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Swift: Added `Error` enum allowing to catch errors e.g. thrown on initializing
+  `RLMRealm`/`Realm` instances.
+* Fail with `RLMErrorFileNotFound` instead of the more generic `RLMErrorFileAccess`,
+  if no file was found when a realm was opened as read-only or if the directory part
+  of the specified path was not found when a copy should be written. 
+* Greatly improve performance when deleting objects with one or more indexed
+  properties.
+* Indexing `BOOL`/`Bool` and `NSDate` properties are now supported.
+* Swift: Add support for indexing optional properties.
+
+### Bugfixes
+
+* Fix incorrect results or crashes when using `-[RLMResults setValue:forKey:]`
+  on an RLMResults which was filtered on the key being set.
+* Fix crashes when an RLMRealm is deallocated from the wrong thread.
+* Fix incorrect results from aggregate methods on `Results`/`RLMResults` after
+  objects which were previously in the results are deleted.
+* Fix a crash when adding a new property to an existing class with over a
+  million objects in the Realm.
+* Fix errors when opening encrypted Realm files created with writeCopyToPath.
+* Fix crashes or incorrect results for queries that use relationship equality
+  in cases where the `RLMResults` is kept alive and instances of the target class
+  of the relationship are deleted.
+
+0.97.0 Release notes (2015-12-17)
+=============================================================
+
+### API breaking changes
+
+* All functionality deprecated in previous releases has been removed entirely.
+* Add generic type annotations to NSArrays and NSDictionaries in public APIs.
+* Adding a Realm notification block on a thread not currently running from
+  within a run loop throws an exception rather than silently never calling the
+  notification block.
+
+### Enhancements
+
+* Support for tvOS.
+* Support for building Realm Swift from source when using Carthage.
+* The block parameter of `-[RLMRealm transactionWithBlock:]`/`Realm.write(_:)` is 
+  now marked as `__attribute__((noescape))`/`@noescape`.
+* Many forms of queries with key paths on both sides of the comparison operator
+  are now supported.
+* Add support for KVC collection operators in `RLMResults` and `RLMArray`.
+* Fail instead of deadlocking in `+[RLMRealm sharedSchema]`, if a Swift property is initialized
+  to a computed value, which attempts to open a Realm on its own.
+
+### Bugfixes
+
+* Fix poor performance when calling `-[RLMRealm deleteObjects:]` on an
+  `RLMResults` which filtered the objects when there are other classes linking
+  to the type of the deleted objects.
+* An exception is now thrown when defining `Object` properties of an unsupported
+  type.
+
+0.96.3 Release notes (2015-12-04)
+=============================================================
+
+### Enhancements
+
+* Queries are no longer limited to 16 levels of grouping.
+* Rework the implementation of encrypted Realms to no longer interfere with
+  debuggers.
+
+### Bugfixes
+
+* Fix crash when trying to retrieve object instances via `dynamicObjects`.
+* Throw an exception when querying on a link providing objects, which are from a different Realm.
+* Return empty results when querying on a link providing an unattached object.
+* Fix crashes or incorrect results when calling `-[RLMRealm refresh]` during
+  fast enumeration.
+* Add `Int8` support for `RealmOptional`, `MinMaxType` and `AddableType`.
+* Set the default value for newly added non-optional NSData properties to a
+  zero-byte NSData rather than nil.
+* Fix a potential crash when deleting all objects of a class.
+* Fix performance problems when creating large numbers of objects with
+  `RLMArray`/`List` properties.
+* Fix memory leak when using Object(value:) for subclasses with
+  `List` or `RealmOptional` properties.
+* Fix a crash when computing the average of an optional integer property.
+* Fix incorrect search results for some queries on integer properties.
+* Add error-checking for nil realm parameters in many methods such as
+  `+[RLMObject allObjectsInRealm:]`.
+* Fix a race condition between commits and opening Realm files on new threads
+  that could lead to a crash.
+* Fix several crashes when opening Realm files.
+* `-[RLMObject createInRealm:withValue:]`, `-[RLMObject createOrUpdateInRealm:withValue:]`, and
+  their variants for the default Realm now always match the contents of an `NSArray` against properties
+  in the same order as they are defined in the model.
+
+0.96.2 Release notes (2015-10-26)
+=============================================================
+
+Prebuilt frameworks are now built with Xcode 7.1.
+
+### Bugfixes
+
+* Fix ignoring optional properties in Swift.
+* Fix CocoaPods installation on case-sensitive file systems.
+
+0.96.1 Release notes (2015-10-20)
+=============================================================
+
+### Bugfixes
+
+* Support assigning `Results` to `List` properties via KVC.
+* Honor the schema version set in the configuration in `+[RLMRealm migrateRealm:]`.
+* Fix crash when using optional Int16/Int32/Int64 properties in Swift.
+
+0.96.0 Release notes (2015-10-14)
+=============================================================
+
+* No functional changes since beta2.
+
+0.96.0-beta2 Release notes (2015-10-08)
+=============================================================
+
+### Bugfixes
+
+* Add RLMOptionalBase.h to the podspec.
+
+0.96.0-beta Release notes (2015-10-07)
+=============================================================
+
+### API breaking changes
+
+* CocoaPods v0.38 or greater is now required to install Realm and RealmSwift
+  as pods.
+
+### Enhancements
+
+* Functionality common to both `List` and `Results` is now declared in a
+  `RealmCollectionType` protocol that both types conform to.
+* `Results.realm` now returns an `Optional<Realm>` in order to conform to
+  `RealmCollectionType`, but will always return `.Some()` since a `Results`
+  cannot exist independently from a `Realm`.
+* Aggregate operations are now available on `List`: `min`, `max`, `sum`,
+  `average`.
+* Committing write transactions (via `commitWrite` / `commitWriteTransaction` and
+  `write` / `transactionWithBlock`) now optionally allow for handling errors when
+  the disk is out of space.
+* Added `isEmpty` property on `RLMRealm`/`Realm` to indicate if it contains any
+  objects.
+* The `@count`, `@min`, `@max`, `@sum` and `@avg` collection operators are now
+  supported in queries.
+
+### Bugfixes
+
+* Fix assertion failure when inserting NSData between 8MB and 16MB in size.
+* Fix assertion failure when rolling back a migration which removed an object
+  link or `RLMArray`/`List` property.
+* Add the path of the file being opened to file open errors.
+* Fix a crash that could be triggered by rapidly opening and closing a Realm
+  many times on multiple threads at once.
+* Fix several places where exception messages included the name of the wrong
+  function which failed.
+
+0.95.3 Release notes (2015-10-05)
+=============================================================
+
+### Bugfixes
+
+* Compile iOS Simulator framework architectures with `-fembed-bitcode-marker`.
+* Fix crashes when the first Realm opened uses a class subset and later Realms
+  opened do not.
+* Fix inconsistent errors when `Object(value: ...)` is used to initialize the
+  default value of a property of an `Object` subclass.
+* Throw an exception when a class subset has objects with array or object
+  properties of a type that are not part of the class subset.
+
+0.95.2 Release notes (2015-09-24)
+=============================================================
+
+* Enable bitcode for iOS and watchOS frameworks.
+* Build libraries with Xcode 7 final rather than the GM.
+
+0.95.1 Release notes (2015-09-23)
+=============================================================
+
+### Enhancements
+
+* Add missing KVO handling for moving and exchanging objects in `RLMArray` and
+  `List`.
+
+### Bugfixes
+
+* Setting the primary key property on persisted `RLMObject`s / `Object`s
+  via subscripting or key-value coding will cause an exception to be thrown.
+* Fix crash due to race condition in `RLMRealmConfiguration` where the default
+  configuration was in the process of being copied in one thread, while
+  released in another.
+* Fix crash when a migration which removed an object or array property is
+  rolled back due to an error.
+
+0.95.0 Release notes (2015-08-25)
+=============================================================
+
+### API breaking changes
+
+* The following APIs have been deprecated in favor of the new `RLMRealmConfiguration` class in Realm Objective-C:
+
+| Deprecated API                                                    | New API                                                                          |
+|:------------------------------------------------------------------|:---------------------------------------------------------------------------------|
+| `+[RLMRealm realmWithPath:readOnly:error:]`                       | `+[RLMRealm realmWithConfiguration:error:]`                                      |
+| `+[RLMRealm realmWithPath:encryptionKey:readOnly:error:]`         | `+[RLMRealm realmWithConfiguration:error:]`                                      |
+| `+[RLMRealm setEncryptionKey:forRealmsAtPath:]`                   | `-[RLMRealmConfiguration setEncryptionKey:]`                                     |
+| `+[RLMRealm inMemoryRealmWithIdentifier:]`                        | `+[RLMRealm realmWithConfiguration:error:]`                                      |
+| `+[RLMRealm defaultRealmPath]`                                    | `+[RLMRealmConfiguration defaultConfiguration]`                                  |
+| `+[RLMRealm setDefaultRealmPath:]`                                | `+[RLMRealmConfiguration setDefaultConfiguration:]`                              |
+| `+[RLMRealm setDefaultRealmSchemaVersion:withMigrationBlock]`     | `RLMRealmConfiguration.schemaVersion` and `RLMRealmConfiguration.migrationBlock` |
+| `+[RLMRealm setSchemaVersion:forRealmAtPath:withMigrationBlock:]` | `RLMRealmConfiguration.schemaVersion` and `RLMRealmConfiguration.migrationBlock` |
+| `+[RLMRealm migrateRealmAtPath:]`                                 | `+[RLMRealm migrateRealm:]`                                                      |
+| `+[RLMRealm migrateRealmAtPath:encryptionKey:]`                   | `+[RLMRealm migrateRealm:]`                                                      |
+
+* The following APIs have been deprecated in favor of the new `Realm.Configuration` struct in Realm Swift for Swift 1.2:
+
+| Deprecated API                                                | New API                                                                      |
+|:--------------------------------------------------------------|:-----------------------------------------------------------------------------|
+| `Realm.defaultPath`                                           | `Realm.Configuration.defaultConfiguration`                                   |
+| `Realm(path:readOnly:encryptionKey:error:)`                   | `Realm(configuration:error:)`                                                |
+| `Realm(inMemoryIdentifier:)`                                  | `Realm(configuration:error:)`                                                |
+| `Realm.setEncryptionKey(:forPath:)`                           | `Realm(configuration:error:)`                                                |
+| `setDefaultRealmSchemaVersion(schemaVersion:migrationBlock:)` | `Realm.Configuration.schemaVersion` and `Realm.Configuration.migrationBlock` |
+| `setSchemaVersion(schemaVersion:realmPath:migrationBlock:)`   | `Realm.Configuration.schemaVersion` and `Realm.Configuration.migrationBlock` |
+| `migrateRealm(path:encryptionKey:)`                           | `migrateRealm(configuration:)`                                               |
+
+* The following APIs have been deprecated in favor of the new `Realm.Configuration` struct in Realm Swift for Swift 2.0:
+
+| Deprecated API                                                | New API                                                                      |
+|:--------------------------------------------------------------|:-----------------------------------------------------------------------------|
+| `Realm.defaultPath`                                           | `Realm.Configuration.defaultConfiguration`                                   |
+| `Realm(path:readOnly:encryptionKey:) throws`                  | `Realm(configuration:) throws`                                               |
+| `Realm(inMemoryIdentifier:)`                                  | `Realm(configuration:) throws`                                               |
+| `Realm.setEncryptionKey(:forPath:)`                           | `Realm(configuration:) throws`                                               |
+| `setDefaultRealmSchemaVersion(schemaVersion:migrationBlock:)` | `Realm.Configuration.schemaVersion` and `Realm.Configuration.migrationBlock` |
+| `setSchemaVersion(schemaVersion:realmPath:migrationBlock:)`   | `Realm.Configuration.schemaVersion` and `Realm.Configuration.migrationBlock` |
+| `migrateRealm(path:encryptionKey:)`                           | `migrateRealm(configuration:)`                                               |
+
+* `List.extend` in Realm Swift for Swift 2.0 has been replaced with `List.appendContentsOf`,
+  mirroring changes to `RangeReplaceableCollectionType`.
+
+* Object properties on `Object` subclasses in Realm Swift must be marked as optional,
+  otherwise a runtime exception will be thrown.
+
+### Enhancements
+
+* Persisted properties of `RLMObject`/`Object` subclasses are now Key-Value
+  Observing compliant.
+* The different options used to create Realm instances have been consolidated
+  into a single `RLMRealmConfiguration`/`Realm.Configuration` object.
+* Enumerating Realm collections (`RLMArray`, `RLMResults`, `List<>`,
+  `Results<>`) now enumerates over a copy of the collection, making it no
+  longer an error to modify a collection during enumeration (either directly,
+  or indirectly by modifying objects to make them no longer match a query).
+* Improve performance of object insertion in Swift to bring it roughly in line
+  with Objective-C.
+* Allow specifying a specific list of `RLMObject` / `Object` subclasses to include
+  in a given Realm via `RLMRealmConfiguration.objectClasses` / `Realm.Configuration.objectTypes`.
+
+### Bugfixes
+
+* Subscripting on `RLMObject` is now marked as nullable.
+
+0.94.1 Release notes (2015-08-10)
+=============================================================
+
+### API breaking changes
+
+* Building for watchOS requires Xcode 7 beta 5.
+
+### Enhancements
+
+* `Object.className` is now marked as `final`.
+
+### Bugfixes
+
+* Fix crash when adding a property to a model without updating the schema
+  version.
+* Fix unnecessary redownloading of the core library when building from source.
+* Fix crash when sorting by an integer or floating-point property on iOS 7.
+
+0.94.0 Release notes (2015-07-29)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Reduce the amount of memory used by RLMRealm notification listener threads.
+* Avoid evaluating results eagerly when filtering and sorting.
+* Add nullability annotations to the Objective-C API to provide enhanced compiler
+  warnings and bridging to Swift.
+* Make `RLMResult`s and `RLMArray`s support Objective-C generics.
+* Add support for building watchOS and bitcode-compatible apps.
+* Make the exceptions thrown in getters and setters more informative.
+* Add `-[RLMArray exchangeObjectAtIndex:withObjectAtIndex]` and `List.swap(_:_:)`
+  to allow exchanging the location of two objects in the given `RLMArray` / `List`.
+* Added anonymous analytics on simulator/debugger runs.
+* Add `-[RLMArray moveObjectAtIndex:toIndex:]` and `List.move(from:to:)` to
+  allow moving objects in the given `RLMArray` / `List`.
+
+### Bugfixes
+
+* Processes crashing due to an uncaught exception inside a write transaction will
+  no longer cause other processes using the same Realm to hang indefinitely.
+* Fix incorrect results when querying for < or <= on ints that
+  require 64 bits to represent with a CPU that supports SSE 4.2.
+* An exception will no longer be thrown when attempting to reset the schema
+  version or encryption key on an open Realm to the current value.
+* Date properties on 32 bit devices will retain 64 bit second precision.
+* Wrap calls to the block passed to `enumerate` in an autoreleasepool to reduce
+  memory growth when migrating a large amount of objects.
+* In-memory realms no longer write to the Documents directory on iOS or
+  Application Support on OS X.
+
+0.93.2 Release notes (2015-06-12)
+=============================================================
+
+### Bugfixes
+
+* Fixed an issue where the packaged OS X Realm.framework was built with
+  `GCC_GENERATE_TEST_COVERAGE_FILES` and `GCC_INSTRUMENT_PROGRAM_FLOW_ARCS`
+  enabled.
+* Fix a memory leak when constructing standalone Swift objects with NSDate
+  properties.
+* Throw an exception rather than asserting when an invalidated object is added
+  to an RLMArray.
+* Fix a case where data loss would occur if a device was hard-powered-off
+  shortly after a write transaction was committed which had to expand the Realm
+  file.
+
+0.93.1 Release notes (2015-05-29)
+=============================================================
+
+### Bugfixes
+
+* Objects are no longer copied into standalone objects during object creation. This fixes an issue where
+  nested objects with a primary key are sometimes duplicated rather than updated.
+* Comparison predicates with a constant on the left of the operator and key path on the right now give
+  correct results. An exception is now thrown for predicates that do not yet support this ordering.
+* Fix some crashes in `index_string.cpp` with int primary keys or indexed int properties.
+
+0.93.0 Release notes (2015-05-27)
+=============================================================
+
+### API breaking changes
+
+* Schema versions are now represented as `uint64_t` (Objective-C) and `UInt64` (Swift) so that they have
+  the same representation on all architectures.
+
+### Enhancements
+
+* Swift: `Results` now conforms to `CVarArgType` so it can
+  now be passed as an argument to `Results.filter(_:...)`
+  and `List.filter(_:...)`.
+* Swift: Made `SortDescriptor` conform to the `Equatable` and
+  `StringLiteralConvertible` protocols.
+* Int primary keys are once again automatically indexed.
+* Improve error reporting when attempting to mark a property of a type that
+  cannot be indexed as indexed.
+
+### Bugfixes
+
+* Swift: `RealmSwift.framework` no longer embeds `Realm.framework`,
+  which now allows apps using it to pass iTunes Connect validation.
+
+0.92.4 Release notes (2015-05-22)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Swift: Made `Object.init()` a required initializer.
+* `RLMObject`, `RLMResults`, `Object` and `Results` can now be safely
+  deallocated (but still not used) from any thread.
+* Improve performance of `-[RLMArray indexOfObjectWhere:]` and `-[RLMArray
+  indexOfObjectWithPredicate:]`, and implement them for standalone RLMArrays.
+* Improved performance of most simple queries.
+
+### Bugfixes
+
+* The interprocess notification mechanism no longer uses dispatch worker threads, preventing it from
+  starving other GCD clients of the opportunity to execute blocks when dozens of Realms are open at once.
+
+0.92.3 Release notes (2015-05-13)
+=============================================================
+
+### API breaking changes
+
+* Swift: `Results.average(_:)` now returns an optional, which is `nil` if and only if the results
+  set is empty.
+
+### Enhancements
+
+* Swift: Added `List.invalidated`, which returns if the given `List` is no longer
+  safe to be accessed, and is analogous to `-[RLMArray isInvalidated]`.
+* Assertion messages are automatically logged to Crashlytics if it's loaded
+  into the current process to make it easier to diagnose crashes.
+
+### Bugfixes
+
+* Swift: Enumerating through a standalone `List` whose objects themselves
+  have list properties won't crash.
+* Swift: Using a subclass of `RealmSwift.Object` in an aggregate operator of a predicate
+  no longer throws a spurious type error.
+* Fix incorrect results for when using OR in a query on a `RLMArray`/`List<>`.
+* Fix incorrect values from `[RLMResults count]`/`Results.count` when using
+  `!=` on an int property with no other query conditions.
+* Lower the maximum doubling threshold for Realm file sizes from 128MB to 16MB
+  to reduce the amount of wasted space.
+
+0.92.2 Release notes (2015-05-08)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Exceptions raised when incorrect object types are used with predicates now contain more detailed information.
+* Added `-[RLMMigration deleteDataForClassName:]` and `Migration.deleteData(_:)`
+  to enable cleaning up after removing object subclasses
+
+### Bugfixes
+
+* Prevent debugging of an application using an encrypted Realm to work around
+  frequent LLDB hangs. Until the underlying issue is addressed you may set
+  REALM_DISABLE_ENCRYPTION=YES in your application's environment variables to
+  have requests to open an encrypted Realm treated as a request for an
+  unencrypted Realm.
+* Linked objects are properly updated in `createOrUpdateInRealm:withValue:`.
+* List properties on Objects are now properly initialized during fast enumeration.
+
+0.92.1 Release notes (2015-05-06)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* `-[RLMRealm inWriteTransaction]` is now public.
+* Realm Swift is now available on CoocaPods.
+
+### Bugfixes
+
+* Force code re-signing after stripping architectures in `strip-frameworks.sh`.
+
+0.92.0 Release notes (2015-05-05)
+=============================================================
+
+### API breaking changes
+
+* Migration blocks are no longer called when a Realm file is first created.
+* The following APIs have been deprecated in favor of newer method names:
+
+| Deprecated API                                         | New API                                               |
+|:-------------------------------------------------------|:------------------------------------------------------|
+| `-[RLMMigration createObject:withObject:]`             | `-[RLMMigration createObject:withValue:]`             |
+| `-[RLMObject initWithObject:]`                         | `-[RLMObject initWithValue:]`                         |
+| `+[RLMObject createInDefaultRealmWithObject:]`         | `+[RLMObject createInDefaultRealmWithValue:]`         |
+| `+[RLMObject createInRealm:withObject:]`               | `+[RLMObject createInRealm:withValue:]`               |
+| `+[RLMObject createOrUpdateInDefaultRealmWithObject:]` | `+[RLMObject createOrUpdateInDefaultRealmWithValue:]` |
+| `+[RLMObject createOrUpdateInRealm:withObject:]`       | `+[RLMObject createOrUpdateInRealm:withValue:]`       |
+
+### Enhancements
+
+* `Int8` properties defined in Swift are now treated as integers, rather than
+  booleans.
+* NSPredicates created using `+predicateWithValue:` are now supported.
+
+### Bugfixes
+
+* Compound AND predicates with no subpredicates now correctly match all objects.
+
+0.91.5 Release notes (2015-04-28)
+=============================================================
+
+### Bugfixes
+
+* Fix issues with removing search indexes and re-enable it.
+
+0.91.4 Release notes (2015-04-27)
+=============================================================
+
+### Bugfixes
+
+* Temporarily disable removing indexes from existing columns due to bugs.
+
+0.91.3 Release notes (2015-04-17)
+=============================================================
+
+### Bugfixes
+
+* Fix `Extra argument 'objectClassName' in call` errors when building via
+  CocoaPods.
+
+0.91.2 Release notes (2015-04-16)
+=============================================================
+
+* Migration blocks are no longer called when a Realm file is first created.
+
+### Enhancements
+
+* `RLMCollection` supports collection KVC operations.
+* Sorting `RLMResults` is 2-5x faster (typically closer to 2x).
+* Refreshing `RLMRealm` after a write transaction which inserts or modifies
+  strings or `NSData` is committed on another thread is significantly faster.
+* Indexes are now added and removed from existing properties when a Realm file
+  is opened, rather than only when properties are first added.
+
+### Bugfixes
+
+* `+[RLMSchema dynamicSchemaForRealm:]` now respects search indexes.
+* `+[RLMProperty isEqualToProperty:]` now checks for equal `indexed` properties.
+
+0.91.1 Release notes (2015-03-12)
+=============================================================
+
+### Enhancements
+
+* The browser will automatically refresh when the Realm has been modified
+  from another process.
+* Allow using Realm in an embedded framework by setting
+  `APPLICATION_EXTENSION_API_ONLY` to YES.
+
+### Bugfixes
+
+* Fix a crash in CFRunLoopSourceInvalidate.
+
+0.91.0 Release notes (2015-03-10)
+=============================================================
+
+### API breaking changes
+
+* `attributesForProperty:` has been removed from `RLMObject`. You now specify indexed
+  properties by implementing the `indexedProperties` method.
+* An exception will be thrown when calling `setEncryptionKey:forRealmsAtPath:`,
+  `setSchemaVersion:forRealmAtPath:withMigrationBlock:`, and `migrateRealmAtPath:`
+  when a Realm at the given path is already open.
+* Object and array properties of type `RLMObject` will no longer be allowed.
+
+### Enhancements
+
+* Add support for sharing Realm files between processes.
+* The browser will no longer show objects that have no persisted properties.
+* `RLMSchema`, `RLMObjectSchema`, and `RLMProperty` now have more useful descriptions.
+* Opening an encrypted Realm while a debugger is attached to the process no
+  longer throws an exception.
+* `RLMArray` now exposes an `isInvalidated` property to indicate if it can no
+  longer be accessed.
+
+### Bugfixes
+
+* An exception will now be thrown when calling `-beginWriteTransaction` from within a notification
+  triggered by calling `-beginWriteTransaction` elsewhere.
+* When calling `delete:` we now verify that the object being deleted is persisted in the target Realm.
+* Fix crash when calling `createOrUpdate:inRealm` with nested linked objects.
+* Use the key from `+[RLMRealm setEncryptionKey:forRealmsAtPath:]` in
+  `-writeCopyToPath:error:` and `+migrateRealmAtPath:`.
+* Comparing an RLMObject to a non-RLMObject using `-[RLMObject isEqual:]` or
+  `-isEqualToObject:` now returns NO instead of crashing.
+* Improved error message when an `RLMObject` subclass is defined nested within
+  another Swift declaration.
+* Fix crash when the process is terminated by the OS on iOS while encrypted realms are open.
+* Fix crash after large commits to encrypted realms.
+
+0.90.6 Release notes (2015-02-20)
+=============================================================
+
+### Enhancements
+
+* Improve compatiblity of encrypted Realms with third-party crash reporters.
+
+### Bugfixes
+
+* Fix incorrect results when using aggregate functions on sorted RLMResults.
+* Fix data corruption when using writeCopyToPath:encryptionKey:.
+* Maybe fix some assertion failures.
+
+0.90.5 Release notes (2015-02-04)
+=============================================================
+
+### Bugfixes
+
+* Fix for crashes when encryption is enabled on 64-bit iOS devices.
+
+0.90.4 Release notes (2015-01-29)
+=============================================================
+
+### Bugfixes
+
+* Fix bug that resulted in columns being dropped and recreated during migrations.
+
+0.90.3 Release notes (2015-01-27)
+=============================================================
+
+### Enhancements
+
+* Calling `createInDefaultRealmWithObject:`, `createInRealm:withObject:`,
+  `createOrUpdateInDefaultRealmWithObject:` or `createOrUpdateInRealm:withObject:`
+  is a no-op if the argument is an RLMObject of the same type as the receiver
+  and is already backed by the target realm.
+
+### Bugfixes
+
+* Fix incorrect column type assertions when the first Realm file opened is a
+  read-only file that is missing tables.
+* Throw an exception when adding an invalidated or deleted object as a link.
+* Throw an exception when calling `createOrUpdateInRealm:withObject:` when the
+  receiver has no primary key defined.
+
+0.90.1 Release notes (2015-01-22)
+=============================================================
+
+### Bugfixes
+
+* Fix for RLMObject being treated as a model object class and showing up in the browser.
+* Fix compilation from the podspec.
+* Fix for crash when calling `objectsWhere:` with grouping in the query on `allObjects`.
+
+0.90.0 Release notes (2015-01-21)
+=============================================================
+
+### API breaking changes
+
+* Rename `-[RLMRealm encryptedRealmWithPath:key:readOnly:error:]` to
+  `-[RLMRealm realmWithPath:encryptionKey:readOnly:error:]`.
+* `-[RLMRealm setSchemaVersion:withMigrationBlock]` is no longer global and must be called
+  for each individual Realm path used. You can now call `-[RLMRealm setDefaultRealmSchemaVersion:withMigrationBlock]`
+  for the default Realm and `-[RLMRealm setSchemaVersion:forRealmAtPath:withMigrationBlock:]` for all others;
+
+### Enhancements
+
+* Add `-[RLMRealm writeCopyToPath:encryptionKey:error:]`.
+* Add support for comparing string columns to other string columns in queries.
+
+### Bugfixes
+
+* Roll back changes made when an exception is thrown during a migration.
+* Throw an exception if the number of items in a RLMResults or RLMArray changes
+  while it's being fast-enumerated.
+* Also encrypt the temporary files used when encryption is enabled for a Realm.
+* Fixed crash in JSONImport example on OS X with non-en_US locale.
+* Fixed infinite loop when opening a Realm file in the Browser at the same time
+  as it is open in a 32-bit simulator.
+* Fixed a crash when adding primary keys to older realm files with no primary
+  keys on any objects.
+* Fixed a crash when removing a primary key in a migration.
+* Fixed a crash when multiple write transactions with no changes followed by a
+  write transaction with changes were committed without the main thread
+  RLMRealm getting a chance to refresh.
+* Fixed incomplete results when querying for non-null relationships.
+* Improve the error message when a Realm file is opened in multiple processes
+  at once.
+
+0.89.2 Release notes (2015-01-02)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix an assertion failure when invalidating a Realm which is in a write
+  transaction, has already been invalidated, or has never been used.
+* Fix an assertion failure when sorting an empty RLMArray property.
+* Fix a bug resulting in the browser never becoming visible on 10.9.
+* Write UTF-8 when generating class files from a realm file in the Browser.
+
+0.89.1 Release notes (2014-12-22)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Improve the error message when a Realm can't be opened due to lacking write
+  permissions.
+
+### Bugfixes
+
+* Fix an assertion failure when inserting rows after calling `deleteAllObjects`
+  on a Realm.
+* Separate dynamic frameworks are now built for the simulator and devices to
+  work around App Store submission errors due to the simulator version not
+  being automatically stripped from dynamic libraries.
+
+0.89.0 Release notes (2014-12-18)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Add support for encrypting Realm files on disk.
+* Support using KVC-compliant objects without getters or with custom getter
+  names to initialize RLMObjects with `createObjectInRealm` and friends.
+
+### Bugfixes
+
+* Merge native Swift default property values with defaultPropertyValues().
+* Don't leave the database schema partially updated when opening a realm fails
+  due to a migration being needed.
+* Fixed issue where objects with custom getter names couldn't be used to
+  initialize other objects.
+* Fix a major performance regression on queries on string properties.
+* Fix a memory leak when circularly linked objects are added to a Realm.
+
+0.88.0 Release notes (2014-12-02)
+=============================================================
+
+### API breaking changes
+
+* Deallocating an RLMRealm instance in a write transaction lacking an explicit
+  commit/cancel will now be automatically cancelled instead of committed.
+* `-[RLMObject isDeletedFromRealm]` has been renamed to `-[RLMObject isInvalidated]`.
+
+### Enhancements
+
+* Add `-[RLMRealm writeCopyToPath:]` to write a compacted copy of the Realm
+  another file.
+* Add support for case insensitive, BEGINSWITH, ENDSWITH and CONTAINS string
+  queries on array properties.
+* Make fast enumeration of `RLMArray` and `RLMResults` ~30% faster and
+  `objectAtIndex:` ~55% faster.
+* Added a lldb visualizer script for displaying the contents of persisted
+  RLMObjects when debugging.
+* Added method `-setDefaultRealmPath:` to change the default Realm path.
+* Add `-[RLMRealm invalidate]` to release data locked by the current thread.
+
+### Bugfixes
+
+* Fix for crash when running many simultaneous write transactions on background threads.
+* Fix for crashes caused by opening Realms at multiple paths simultaneously which have had
+  properties re-ordered during migration.
+* Don't run the query twice when `firstObject` or `lastObject` are called on an
+  `RLMResults` which has not had its results accessed already.
+* Fix for bug where schema version is 0 for new Realm created at the latest version.
+* Fix for error message where no migration block is specified when required.
+
+0.87.4 Release notes (2014-11-07)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* Fix browser location in release zip.
+
+0.87.3 Release notes (2014-11-06)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Added method `-linkingObjectsOfClass:forProperty:` to RLMObject to expose inverse
+  relationships/backlinks.
+
+### Bugfixes
+
+* Fix for crash due to missing search index when migrating an object with a string primary key
+  in a database created using an older versions (0.86.3 and earlier).
+* Throw an exception when passing an array containing a
+  non-RLMObject to -[RLMRealm addObjects:].
+* Fix for crash when deleting an object from multiple threads.
+
+0.87.0 Release notes (2014-10-21)
+=============================================================
+
+### API breaking changes
+
+* RLMArray has been split into two classes, `RLMArray` and `RLMResults`. RLMArray is
+  used for object properties as in previous releases. Moving forward all methods used to
+  enumerate, query, and sort objects return an instance of a new class `RLMResults`. This
+  change was made to support diverging apis and the future addition of change notifications
+  for queries.
+* The api for migrations has changed. You now call `setSchemaVersion:withMigrationBlock:` to
+  register a global migration block and associated version. This block is applied to Realms as
+  needed when opened for Realms at a previous version. The block can be applied manually if
+  desired by calling `migrateRealmAtPath:`.
+* `arraySortedByProperty:ascending:` was renamed to `sortedResultsUsingProperty:ascending`
+* `addObjectsFromArray:` on both `RLMRealm` and `RLMArray` has been renamed to `addObjects:`
+  and now accepts any container class which implements `NSFastEnumeration`
+* Building with Swift support now requires Xcode 6.1
+
+### Enhancements
+
+* Add support for sorting `RLMArray`s by multiple columns with `sortedResultsUsingDescriptors:`
+* Added method `deleteAllObjects` on `RLMRealm` to clear a Realm.
+* Added method `createObject:withObject:` on `RLMMigration` which allows object creation during migrations.
+* Added method `deleteObject:` on `RLMMigration` which allows object deletion during migrations.
+* Updating to core library version 0.85.0.
+* Implement `objectsWhere:` and `objectsWithPredicate:` for array properties.
+* Add `cancelWriteTransaction` to revert all changes made in a write transaction and end the transaction.
+* Make creating `RLMRealm` instances on background threads when an instance
+  exists on another thread take a fifth of the time.
+* Support for partial updates when calling `createOrUpdateWithObject:` and `addOrUpdateObject:`
+* Re-enable Swift support on OS X
+
+### Bugfixes
+
+* Fix exceptions when trying to set `RLMObject` properties after rearranging
+  the properties in a `RLMObject` subclass.
+* Fix crash on IN query with several thousand items.
+* Fix crash when querying indexed `NSString` properties.
+* Fixed an issue which prevented in-memory Realms from being used accross multiple threads.
+* Preserve the sort order when querying a sorted `RLMResults`.
+* Fixed an issue with migrations where if a Realm file is deleted after a Realm is initialized,
+  the newly created Realm can be initialized with an incorrect schema version.
+* Fix crash in `RLMSuperSet` when assigning to a `RLMArray` property on a standalone object.
+* Add an error message when the protocol for an `RLMArray` property is not a
+  valid object type.
+* Add an error message when an `RLMObject` subclass is defined nested within
+  another Swift class.
+
+0.86.3 Release notes (2014-10-09)
+=============================================================
+
+### Enhancements
+
+* Add support for != in queries on object relationships.
+
+### Bugfixes
+
+* Re-adding an object to its Realm no longer throws an exception and is now a no-op
+  (as it was previously).
+* Fix another bug which would sometimes result in subclassing RLMObject
+  subclasses not working.
+
+0.86.2 Release notes (2014-10-06)
+=============================================================
+
+### Bugfixes
+
+* Fixed issues with packaging "Realm Browser.app" for release.
+
+0.86.1 Release notes (2014-10-03)
+=============================================================
+
+### Bugfixes
+
+* Fix a bug which would sometimes result in subclassing RLMObject subclasses
+  not working.
+
+0.86.0 Release notes (2014-10-03)
+=============================================================
+
+### API breaking changes
+
+* Xcode 6 is now supported from the main Xcode project `Realm.xcodeproj`.
+  Xcode 5 is no longer supported.
+
+### Enhancements
+
+* Support subclassing RLMObject models. Although you can now persist subclasses,
+  polymorphic behavior is not supported (i.e. setting a property to an
+  instance of its subclass).
+* Add support for sorting RLMArray properties.
+* Speed up inserting objects with `addObject:` by ~20%.
+* `readonly` properties are automatically ignored rather than having to be
+  added to `ignoredProperties`.
+* Updating to core library version 0.83.1.
+* Return "[deleted object]" rather than throwing an exception when
+  `-description` is called on a deleted RLMObject.
+* Significantly improve performance of very large queries.
+* Allow passing any enumerable to IN clauses rather than just NSArray.
+* Add `objectForPrimaryKey:` and `objectInRealm:forPrimaryKey:` convenience
+  methods to fetch an object by primary key.
+
+### Bugfixes
+
+* Fix error about not being able to persist property 'hash' with incompatible
+  type when building for devices with Xcode 6.
+* Fix spurious notifications of new versions of Realm.
+* Fix for updating nested objects where some types do not have primary keys.
+* Fix for inserting objects from JSON with NSNull values when default values
+  should be used.
+* Trying to add a persisted RLMObject to a different Realm now throws an
+  exception rather than creating an uninitialized object.
+* Fix validation errors when using IN on array properties.
+* Fix errors when an IN clause has zero items.
+* Fix for chained queries ignoring all but the last query's conditions.
+
+0.85.0 Release notes (2014-09-15)
+=============================================================
+
+### API breaking changes
+
+* Notifications for a refresh being needed (when autorefresh is off) now send
+  the notification type RLMRealmRefreshRequiredNotification rather than
+  RLMRealmDidChangeNotification.
+
+### Enhancements
+
+* Updating to core library version 0.83.0.
+* Support for primary key properties (for int and string columns). Declaring a property
+  to be the primary key ensures uniqueness for that property for all objects of a given type.
+  At the moment indexes on primary keys are not yet supported but this will be added in a future
+  release.
+* Added methods to update or insert (upsert) for objects with primary keys defined.
+* `[RLMObject initWithObject:]` and `[RLMObject createInRealmWithObject:]` now support
+  any object type with kvc properties.
+* The Swift support has been reworked to work around Swift not being supported
+  in Frameworks on iOS 7.
+* Improve performance when getting the count of items matching a query but not
+  reading any of the objects in the results.
+* Add a return value to `-[RLMRealm refresh]` that indicates whether or not
+  there was anything to refresh.
+* Add the class name to the error message when an RLMObject is missing a value
+  for a property without a default.
+* Add support for opening Realms in read-only mode.
+* Add an automatic check for updates when using Realm in a simulator (the
+  checker code is not compiled into device builds). This can be disabled by
+  setting the REALM_DISABLE_UPDATE_CHECKER environment variable to any value.
+* Add support for Int16 and Int64 properties in Swift classes.
+
+### Bugfixes
+
+* Realm change notifications when beginning a write transaction are now sent
+  after updating rather than before, to match refresh.
+* `-isEqual:` now uses the default `NSObject` implementation unless a primary key
+  is specified for an RLMObject. When a primary key is specified, `-isEqual:` calls
+  `-isEqualToObject:` and a corresponding implementation for `-hash` is also implemented.
+
+0.84.0 Release notes (2014-08-28)
+=============================================================
+
+### API breaking changes
+
+* The timer used to trigger notifications has been removed. Notifications are now
+  only triggered by commits made in other threads, and can not currently be triggered
+  by changes made by other processes. Interprocess notifications will be re-added in
+  a future commit with an improved design.
+
+### Enhancements
+
+* Updating to core library version 0.82.2.
+* Add property `deletedFromRealm` to RLMObject to indicate objects which have been deleted.
+* Add support for the IN operator in predicates.
+* Add support for the BETWEEN operator in link queries.
+* Add support for multi-level link queries in predicates (e.g. `foo.bar.baz = 5`).
+* Switch to building the SDK from source when using CocoaPods and add a
+  Realm.Headers subspec for use in targets that should not link a copy of Realm
+  (such as test targets).
+* Allow unregistering from change notifications in the change notification
+  handler block.
+* Significant performance improvements when holding onto large numbers of RLMObjects.
+* Realm-Xcode6.xcodeproj now only builds using Xcode6-Beta6.
+* Improved performance during RLMArray iteration, especially when mutating
+  contained objects.
+
+### Bugfixes
+
+* Fix crashes and assorted bugs when sorting or querying a RLMArray returned
+  from a query.
+* Notifications are no longer sent when initializing new RLMRealm instances on background
+  threads.
+* Handle object cycles in -[RLMObject description] and -[RLMArray description].
+* Lowered the deployment target for the Xcode 6 projects and Swift examples to
+  iOS 7.0, as they didn't actually require 8.0.
+* Support setting model properties starting with the letter 'z'
+* Fixed crashes that could result from switching between Debug and Relase
+  builds of Realm.
+
+0.83.0 Release notes (2014-08-13)
+=============================================================
+
+### API breaking changes
+
+* Realm-Xcode6.xcodeproj now only builds using Xcode6-Beta5.
+* Properties to be persisted in Swift classes must be explicitly declared as `dynamic`.
+* Subclasses of RLMObject subclasses now throw an exception on startup, rather
+  than when added to a Realm.
+
+### Enhancements
+
+* Add support for querying for nil object properties.
+* Improve error message when specifying invalid literals when creating or
+  initializing RLMObjects.
+* Throw an exception when an RLMObject is used from the incorrect thread rather
+  than crashing in confusing ways.
+* Speed up RLMRealm instantiation and array property iteration.
+* Allow array and objection relation properties to be missing or null when
+  creating a RLMObject from a NSDictionary.
+
+### Bugfixes
+
+* Fixed a memory leak when querying for objects.
+* Fixed initializing array properties on standalone Swift RLMObject subclasses.
+* Fix for queries on 64bit integers.
+
+0.82.0 Release notes (2014-08-05)
+=============================================================
+
+### API breaking changes
+
+* Realm-Xcode6.xcodeproj now only builds using Xcode6-Beta4.
+
+### Enhancements
+
+* Updating to core library version 0.80.5.
+* Now support disabling the `autorefresh` property on RLMRealm instances.
+* Building Realm-Xcode6 for iOS now builds a universal framework for Simulator & Device.
+* Using NSNumber properties (unsupported) now throws a more informative exception.
+* Added `[RLMRealm defaultRealmPath]`
+* Proper implementation for [RLMArray indexOfObjectWhere:]
+* The default Realm path on OS X is now ~/Library/Application Support/[bundle
+  identifier]/default.realm rather than ~/Documents
+* We now check that the correct framework (ios or osx) is used at compile time.
+
+### Bugfixes
+
+* Fixed rapid growth of the realm file size.
+* Fixed a bug which could cause a crash during RLMArray destruction after a query.
+* Fixed bug related to querying on float properties: `floatProperty = 1.7` now works.
+* Fixed potential bug related to the handling of array properties (RLMArray).
+* Fixed bug where array properties accessed the wrong property.
+* Fixed bug that prevented objects with custom getters to be added to a Realm.
+* Fixed a bug where initializing a standalone object with an array literal would
+  trigger an exception.
+* Clarified exception messages when using unsupported NSPredicate operators.
+* Clarified exception messages when using unsupported property types on RLMObject subclasses.
+* Fixed a memory leak when breaking out of a for-in loop on RLMArray.
+* Fixed a memory leak when removing objects from a RLMArray property.
+* Fixed a memory leak when querying for objects.
+
+
+0.81.0 Release notes (2014-07-22)
+=============================================================
+
+### API breaking changes
+
+* None.
+
+### Enhancements
+
+* Updating to core library version 0.80.3.
+* Added support for basic querying of RLMObject and RLMArray properties (one-to-one and one-to-many relationships).
+  e.g. `[Person objectsWhere:@"dog.name == 'Alfonso'"]` or `[Person objectsWhere:@"ANY dogs.name == 'Alfonso'"]`
+  Supports all normal operators for numeric and date types. Does not support NSData properties or `BEGINSWITH`, `ENDSWITH`, `CONTAINS`
+  and other options for string properties.
+* Added support for querying for object equality in RLMObject and RLMArray properties (one-to-one and one-to-many relationships).
+  e.g. `[Person objectsWhere:@"dog == %@", myDog]` `[Person objectsWhere:@"ANY dogs == %@", myDog]` `[Person objectsWhere:@"ANY friends.dog == %@", dog]`
+  Only supports comparing objects for equality (i.e. ==)
+* Added a helper method to RLMRealm to perform a block inside a transaction.
+* OSX framework now supported in CocoaPods.
+
+### Bugfixes
+
+* Fixed Unicode support in property names and string contents (Chinese, Russian, etc.). Closing #612 and #604.
+* Fixed bugs related to migration when properties are removed.
+* Fixed keyed subscripting for standalone RLMObjects.
+* Fixed bug related to double clicking on a .realm file to launch the Realm Browser (thanks to Dean Moore).
+
+
+0.80.0 Release notes (2014-07-15)
+=============================================================
+
+### API breaking changes
+
+* Rename migration methods to -migrateDefaultRealmWithBlock: and -migrateRealmAtPath:withBlock:
+* Moved Realm specific query methods from RLMRealm to class methods on RLMObject (-allObjects: to +allObjectsInRealm: ect.)
+
+### Enhancements
+
+* Added +createInDefaultRealmWithObject: method to RLMObject.
+* Added support for array and object literals when calling -createWithObject: and -initWithObject: variants.
+* Added method -deleteObjects: to batch delete objects from a Realm
+* Support for defining RLMObject models entirely in Swift (experimental, see known issues).
+* RLMArrays in Swift support Sequence-style enumeration (for obj in array).
+* Implemented -indexOfObject: for RLMArray
+
+### Known Issues for Swift-defined models
+
+* Properties other than String, NSData and NSDate require a default value in the model. This can be an empty (but typed) array for array properties.
+* The previous caveat also implies that not all models defined in Objective-C can be used for object properties. Only Objective-C models with only implicit (i.e. primitives) or explicit default values can be used. However, any Objective-C model object can be used in a Swift array property.
+* Array property accessors don't work until its parent object has been added to a realm.
+* Realm-Bridging-Header.h is temporarily exposed as a public header. This is temporary and will be private again once rdar://17633863 is fixed.
+* Does not leverage Swift generics and still uses RLM-prefix everywhere. This is coming in #549.
+
+
+0.22.0 Release notes
+=============================================================
+
+### API breaking changes
+
+* Rename schemaForObject: to schemaForClassName: on RLMSchema
+* Removed -objects:where: and -objects:orderedBy:where: from RLMRealm
+* Removed -indexOfObjectWhere:, -objectsWhere: and -objectsOrderedBy:where: from RLMArray
+* Removed +objectsWhere: and +objectsOrderedBy:where: from RLMObject
+
+### Enhancements
+
+* New Xcode 6 project for experimental swift support.
+* New Realm Editor app for reading and editing Realm db files.
+* Added support for migrations.
+* Added support for RLMArray properties on objects.
+* Added support for creating in-memory default Realm.
+* Added -objectsWithClassName:predicateFormat: and -objectsWithClassName:predicate: to RLMRealm
+* Added -indexOfObjectWithPredicateFormat:, -indexOfObjectWithPredicate:, -objectsWithPredicateFormat:, -objectsWithPredi
+* Added +objectsWithPredicateFormat: and +objectsWithPredicate: to RLMObject
+* Now allows predicates comparing two object properties of the same type.
+
+
+0.20.0 Release notes (2014-05-28)
+=============================================================
+
+Completely rewritten to be much more object oriented.
+
+### API breaking changes
+
+* Everything
+
+### Enhancements
+
+* None.
+
+### Bugfixes
+
+* None.
+
+
+0.11.0 Release notes (not released)
+=============================================================
+
+The Objective-C API has been updated and your code will break!
+
+### API breaking changes
+
+* `RLMTable` objects can only be created with an `RLMRealm` object.
+* Renamed `RLMContext` to `RLMTransactionManager`
+* Renamed `RLMContextDidChangeNotification` to `RLMRealmDidChangeNotification`
+* Renamed `contextWithDefaultPersistence` to `managerForDefaultRealm`
+* Renamed `contextPersistedAtPath:` to `managerForRealmWithPath:`
+* Renamed `realmWithDefaultPersistence` to `defaultRealm`
+* Renamed `realmWithDefaultPersistenceAndInitBlock` to `defaultRealmWithInitBlock`
+* Renamed `find:` to `firstWhere:`
+* Renamed `where:` to `allWhere:`
+* Renamed `where:orderBy:` to `allWhere:orderBy:`
+
+### Enhancements
+
+* Added `countWhere:` on `RLMTable`
+* Added `sumOfColumn:where:` on `RLMTable`
+* Added `averageOfColumn:where:` on `RLMTable`
+* Added `minOfProperty:where:` on `RLMTable`
+* Added `maxOfProperty:where:` on `RLMTable`
+* Added `toJSONString` on `RLMRealm`, `RLMTable` and `RLMView`
+* Added support for `NOT` operator in predicates
+* Added support for default values
+* Added validation support in `createInRealm:withObject:`
+
+### Bugfixes
+
+* None.
+
+
+0.10.0 Release notes (2014-04-23)
+=============================================================
+
+TightDB is now Realm! The Objective-C API has been updated
+and your code will break!
+
+### API breaking changes
+
+* All references to TightDB have been changed to Realm.
+* All prefixes changed from `TDB` to `RLM`.
+* `TDBTransaction` and `TDBSmartContext` have merged into `RLMRealm`.
+* Write transactions now take an optional rollback parameter (rather than needing to return a boolean).
+* `addColumnWithName:` and variant methods now return the index of the newly created column if successful, `NSNotFound` otherwise.
+
+### Enhancements
+
+* `createTableWithName:columns:` has been added to `RLMRealm`.
+* Added keyed subscripting for RLMTable's first column if column is of type RLMPropertyTypeString.
+* `setRow:atIndex:` has been added to `RLMTable`.
+* `RLMRealm` constructors now have variants that take an writable initialization block
+* New object interface - tables created/retrieved using `tableWithName:objectClass:` return custom objects
+
+### Bugfixes
+
+* None.
+
+
+0.6.0 Release notes (2014-04-11)
+=============================================================
+
+### API breaking changes
+
+* `contextWithPersistenceToFile:error:` renamed to `contextPersistedAtPath:error:` in `TDBContext`
+* `readWithBlock:` renamed to `readUsingBlock:` in `TDBContext`
+* `writeWithBlock:error:` renamed to `writeUsingBlock:error:` in `TDBContext`
+* `readTable:withBlock:` renamed to `readTable:usingBlock:` in `TDBContext`
+* `writeTable:withBlock:error:` renamed to `writeTable:usingBlock:error:` in `TDBContext`
+* `findFirstRow` renamed to `indexOfFirstMatchingRow` on `TDBQuery`.
+* `findFirstRowFromIndex:` renamed to `indexOfFirstMatchingRowFromIndex:` on `TDBQuery`.
+* Return `NSNotFound` instead of -1 when appropriate.
+* Renamed `castClass` to `castToTytpedTableClass` on `TDBTable`.
+* `removeAllRows`, `removeRowAtIndex`, `removeLastRow`, `addRow` and `insertRow` methods
+  on table now return void instead of BOOL.
+
+### Enhancements
+* A `TDBTable` can now be queried using `where:` and `where:orderBy:` taking
+  `NSPredicate` and `NSSortDescriptor` as arguments.
+* Added `find:` method on `TDBTable` to find first row matching predicate.
+* `contextWithDefaultPersistence` class method added to `TDBContext`. Will create a context persisted
+  to a file in app/documents folder.
+* `renameColumnWithIndex:to:` has been added to `TDBTable`.
+* `distinctValuesInColumnWithIndex` has been added to `TDBTable`.
+* `dateIsBetween::`, `doubleIsBetween::`, `floatIsBetween::` and `intIsBetween::`
+  have been added to `TDBQuery`.
+* Column names in Typed Tables can begin with non-capital letters too. The generated `addX`
+  selector can look odd. For example, a table with one column with name `age`,
+  appending a new row will look like `[table addage:7]`.
+* Mixed typed values are better validated when rows are added, inserted,
+  or modified as object literals.
+* `addRow`, `insertRow`, and row updates can be done using objects
+   derived from `NSObject`.
+* `where` has been added to `TDBView`and `TDBViewProtocol`.
+* Adding support for "smart" contexts (`TDBSmartContext`).
+
+### Bugfixes
+
+* Modifications of a `TDBView` and `TDBQuery` now throw an exception in a readtransaction.
+
+
+0.5.0 Release notes (2014-04-02)
+=============================================================
+
+The Objective-C API has been updated and your code will break!
+Of notable changes a fast interface has been added.
+This interface includes specific methods to get and set values into Tightdb.
+To use these methods import `<Tightdb/TightdbFast.h>`.
+
+### API breaking changes
+
+* `getTableWithName:` renamed to `tableWithName:` in `TDBTransaction`.
+* `addColumnWithName:andType:` renamed to `addColumnWithName:type:` in `TDBTable`.
+* `columnTypeOfColumn:` renamed to `columnTypeOfColumnWithIndex` in `TDBTable`.
+* `columnNameOfColumn:` renamed to `nameOfColumnWithIndex:` in `TDBTable`.
+* `addColumnWithName:andType:` renamed to `addColumnWithName:type:` in `TDBDescriptor`.
+* Fast getters and setters moved from `TDBRow.h` to `TDBRowFast.h`.
+
+### Enhancements
+
+* Added `minDateInColumnWithIndex` and `maxDateInColumnWithIndex` to `TDBQuery`.
+* Transactions can now be started directly on named tables.
+* You can create dynamic tables with initial schema.
+* `TDBTable` and `TDBView` now have a shared protocol so they can easier be used interchangeably.
+
+### Bugfixes
+
+* Fixed bug in 64 bit iOS when inserting BOOL as NSNumber.
+
+
+0.4.0 Release notes (2014-03-26)
+=============================================================
+
+### API breaking changes
+
+* Typed interface Cursor has now been renamed to Row.
+* TDBGroup has been renamed to TDBTransaction.
+* Header files are renamed so names match class names.
+* Underscore (_) removed from generated typed table classes.
+* TDBBinary has been removed; use NSData instead.
+* Underscope (_) removed from generated typed table classes.
+* Constructor for TDBContext has been renamed to contextWithPersistenceToFile:
+* Table findFirstRow and min/max/sum/avg operations has been hidden.
+* Table.appendRow has been renamed to addRow.
+* getOrCreateTable on Transaction has been removed.
+* set*:inColumnWithIndex:atRowIndex: methods have been prefixed with TDB
+* *:inColumnWithIndex:atRowIndex: methods have been prefixed with TDB
+* addEmptyRow on table has been removed. Use [table addRow:nil] instead.
+* TDBMixed removed. Use id and NSObject instead.
+* insertEmptyRow has been removed from table. Use insertRow:nil atIndex:index instead.
+
+#### Enhancements
+
+* Added firstRow, lastRow selectors on view.
+* firstRow and lastRow on table now return nil if table is empty.
+* getTableWithName selector added on group.
+* getting and creating table methods on group no longer take error argument.
+* [TDBQuery parent] and [TDBQuery subtable:] selectors now return self.
+* createTable method added on Transaction. Throws exception if table with same name already exists.
+* Experimental support for pinning transactions on Context.
+* TDBView now has support for object subscripting.
+
+### Bugfixes
+
+* None.
+
+
+0.3.0 Release notes (2014-03-14)
+=============================================================
+
+The Objective-C API has been updated and your code will break!
+
+### API breaking changes
+
+* Most selectors have been renamed in the binding!
+* Prepend TDB-prefix on all classes and types.
+
+### Enhancements
+
+* Return types and parameters changed from size_t to NSUInteger.
+* Adding setObject to TightdbTable (t[2] = @[@1, @"Hello"] is possible).
+* Adding insertRow to TightdbTable.
+* Extending appendRow to accept NSDictionary.
+
+### Bugfixes
+
+* None.
+
+
+0.2.0 Release notes (2014-03-07)
+=============================================================
+
+The Objective-C API has been updated and your code will break!
+
+### API breaking changes
+
+* addRow renamed to addEmptyRow
+
+### Enhancements
+
+* Adding a simple class for version numbering.
+* Adding get-version and set-version targets to build.sh.
+* tableview now supports sort on column with column type bool, date and int
+* tableview has method for checking the column type of a specified column
+* tableview has method for getting the number of columns
+* Adding methods getVersion, getCoreVersion and isAtLeast.
+* Adding appendRow to TightdbTable.
+* Adding object subscripting.
+* Adding method removeColumn on table.
+
+### Bugfixes
+
+* None.

文件差異過大導致無法顯示
+ 12488 - 0
Libraries external/Realm/Realm.framework/D6309AE2-90A1-3CE2-BFD1-372B3CA56E9D.bcsymbolmap


文件差異過大導致無法顯示
+ 11441 - 0
Libraries external/Realm/Realm.framework/D6F6FC9F-9069-3070-B2D0-62CF2AC58F9E.bcsymbolmap


文件差異過大導致無法顯示
+ 568 - 0
Libraries external/Realm/Realm.framework/F1BD0100-4BAF-36D7-8C01-4C783A0015D5.bcsymbolmap


文件差異過大導致無法顯示
+ 11459 - 0
Libraries external/Realm/Realm.framework/F720D66D-0BD8-363C-B016-3966EBEE210E.bcsymbolmap


文件差異過大導致無法顯示
+ 11440 - 0
Libraries external/Realm/Realm.framework/FA1BDC9B-FD09-3C94-90A6-84A41345E31E.bcsymbolmap


文件差異過大導致無法顯示
+ 539 - 0
Libraries external/Realm/Realm.framework/FB53A2D3-6CCC-3A3F-AC69-2F0F437B6A08.bcsymbolmap


文件差異過大導致無法顯示
+ 563 - 0
Libraries external/Realm/Realm.framework/FEA2B31A-1910-3950-B60E-FEDD7916150F.bcsymbolmap


+ 43 - 0
Libraries external/Realm/Realm.framework/Headers/NSError+RLMSync.h

@@ -0,0 +1,43 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2017 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// NSError category extension providing methods to get data out of Realm's
+/// "client reset" error.
+@interface NSError (RLMSync)
+
+/**
+ Given a Realm Object Server client reset error, return the block that can
+ be called to manually initiate the client reset process, or nil if the
+ error isn't a client reset error.
+ */
+- (nullable void(^)(void))rlmSync_clientResetBlock NS_REFINED_FOR_SWIFT;
+
+/**
+ Given a Realm Object Server client reset error, return the path where the
+ backup copy of the Realm will be placed once the client reset process is
+ complete.
+ */
+- (nullable NSString *)rlmSync_clientResetBackedUpRealmPath NS_SWIFT_UNAVAILABLE("");
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 439 - 0
Libraries external/Realm/Realm.framework/Headers/RLMArray.h

@@ -0,0 +1,439 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import <Realm/RLMCollection.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMObject, RLMRealm, RLMResults<RLMObjectType: RLMObject *>, RLMNotificationToken;
+
+/**
+ `RLMArray` is the container type in Realm used to define to-many relationships.
+
+ Unlike an `NSArray`, `RLMArray`s hold a single type, specified by the `objectClassName` property.
+ This is referred to in these docs as the “type” of the array.
+
+ When declaring an `RLMArray` property, the type must be marked as conforming to a
+ protocol by the same name as the objects it should contain (see the
+ `RLM_ARRAY_TYPE` macro). In addition, the property can be declared using Objective-C
+ generics for better compile-time type safety.
+
+     RLM_ARRAY_TYPE(ObjectType)
+     ...
+     @property RLMArray<ObjectType *><ObjectType> *arrayOfObjectTypes;
+
+ `RLMArray`s can be queried with the same predicates as `RLMObject` and `RLMResult`s.
+
+ `RLMArray`s cannot be created directly. `RLMArray` properties on `RLMObject`s are
+ lazily created when accessed, or can be obtained by querying a Realm.
+
+ ### Key-Value Observing
+
+ `RLMArray` supports array key-value observing on `RLMArray` properties on `RLMObject`
+ subclasses, and the `invalidated` property on `RLMArray` instances themselves is
+ key-value observing compliant when the `RLMArray` is attached to a managed
+ `RLMObject` (`RLMArray`s on unmanaged `RLMObject`s will never become invalidated).
+
+ Because `RLMArray`s are attached to the object which they are a property of, they
+ do not require using the mutable collection proxy objects from
+ `-mutableArrayValueForKey:` or KVC-compatible mutation methods on the containing
+ object. Instead, you can call the mutation methods on the `RLMArray` directly.
+ */
+
+@interface RLMArray<RLMObjectType: RLMObject *> : NSObject<RLMCollection, NSFastEnumeration>
+
+#pragma mark - Properties
+
+/**
+ The number of objects in the array.
+ */
+@property (nonatomic, readonly, assign) NSUInteger count;
+
+/**
+ The class name (i.e. type) of the `RLMObject`s contained in the array.
+ */
+@property (nonatomic, readonly, copy) NSString *objectClassName;
+
+/**
+ The Realm which manages the array. Returns `nil` for unmanaged arrays.
+ */
+@property (nonatomic, readonly, nullable) RLMRealm *realm;
+
+/**
+ Indicates if the array can no longer be accessed.
+ */
+@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated;
+
+#pragma mark - Accessing Objects from an Array
+
+/**
+ Returns the object at the index specified.
+
+ @param index   The index to look up.
+
+ @return An `RLMObject` of the type contained in the array.
+ */
+- (RLMObjectType)objectAtIndex:(NSUInteger)index;
+
+/**
+ Returns the first object in the array.
+
+ Returns `nil` if called on an empty array.
+
+ @return An `RLMObject` of the type contained in the array.
+ */
+- (nullable RLMObjectType)firstObject;
+
+/**
+ Returns the last object in the array.
+
+ Returns `nil` if called on an empty array.
+
+ @return An `RLMObject` of the type contained in the array.
+ */
+- (nullable RLMObjectType)lastObject;
+
+
+
+#pragma mark - Adding, Removing, and Replacing Objects in an Array
+
+/**
+ Adds an object to the end of the array.
+
+ @warning This method may only be called during a write transaction.
+
+ @param object  An `RLMObject` of the type contained in the array.
+ */
+- (void)addObject:(RLMObjectType)object;
+
+/**
+ Adds an array of objects to the end of the array.
+
+ @warning This method may only be called during a write transaction.
+
+ @param objects     An enumerable object such as `NSArray` or `RLMResults` which contains objects of the
+                    same class as the array.
+ */
+- (void)addObjects:(id<NSFastEnumeration>)objects;
+
+/**
+ Inserts an object at the given index.
+
+ Throws an exception if the index exceeds the bounds of the array.
+
+ @warning This method may only be called during a write transaction.
+
+ @param anObject  An `RLMObject` of the type contained in the array.
+ @param index   The index at which to insert the object.
+ */
+- (void)insertObject:(RLMObjectType)anObject atIndex:(NSUInteger)index;
+
+/**
+ Removes an object at the given index.
+
+ Throws an exception if the index exceeds the bounds of the array.
+
+ @warning This method may only be called during a write transaction.
+
+ @param index   The array index identifying the object to be removed.
+ */
+- (void)removeObjectAtIndex:(NSUInteger)index;
+
+/**
+ Removes the last object in the array.
+
+ @warning This method may only be called during a write transaction.
+*/
+- (void)removeLastObject;
+
+/**
+ Removes all objects from the array.
+
+ @warning This method may only be called during a write transaction.
+ */
+- (void)removeAllObjects;
+
+/**
+ Replaces an object at the given index with a new object.
+
+ Throws an exception if the index exceeds the bounds of the array.
+
+ @warning This method may only be called during a write transaction.
+
+ @param index       The index of the object to be replaced.
+ @param anObject    An object (of the same type as returned from the `objectClassName` selector).
+ */
+- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(RLMObjectType)anObject;
+
+/**
+ Moves the object at the given source index to the given destination index.
+
+ Throws an exception if the index exceeds the bounds of the array.
+
+ @warning This method may only be called during a write transaction.
+
+ @param sourceIndex      The index of the object to be moved.
+ @param destinationIndex The index to which the object at `sourceIndex` should be moved.
+ */
+- (void)moveObjectAtIndex:(NSUInteger)sourceIndex toIndex:(NSUInteger)destinationIndex;
+
+/**
+ Exchanges the objects in the array at given indices.
+
+ Throws an exception if either index exceeds the bounds of the array.
+
+ @warning This method may only be called during a write transaction.
+
+ @param index1 The index of the object which should replace the object at index `index2`.
+ @param index2 The index of the object which should replace the object at index `index1`.
+ */
+- (void)exchangeObjectAtIndex:(NSUInteger)index1 withObjectAtIndex:(NSUInteger)index2;
+
+#pragma mark - Querying an Array
+
+/**
+ Returns the index of an object in the array.
+
+ Returns `NSNotFound` if the object is not found in the array.
+
+ @param object  An object (of the same type as returned from the `objectClassName` selector).
+ */
+- (NSUInteger)indexOfObject:(RLMObjectType)object;
+
+/**
+ Returns the index of the first object in the array matching the predicate.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return    The index of the object, or `NSNotFound` if the object is not found in the array.
+ */
+- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
+- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args;
+
+/**
+ Returns the index of the first object in the array matching the predicate.
+
+ @param predicate   The predicate with which to filter the objects.
+
+ @return    The index of the object, or `NSNotFound` if the object is not found in the array.
+ */
+- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate;
+
+/**
+ Returns all the objects matching the given predicate in the array.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return                An `RLMResults` of objects that match the given predicate.
+ */
+- (RLMResults<RLMObjectType> *)objectsWhere:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
+- (RLMResults<RLMObjectType> *)objectsWhere:(NSString *)predicateFormat args:(va_list)args;
+
+/**
+ Returns all the objects matching the given predicate in the array.
+
+ @param predicate   The predicate with which to filter the objects.
+
+ @return            An `RLMResults` of objects that match the given predicate
+ */
+- (RLMResults<RLMObjectType> *)objectsWithPredicate:(NSPredicate *)predicate;
+
+/**
+ Returns a sorted `RLMResults` from the array.
+
+ @param keyPath     The key path to sort by.
+ @param ascending   The direction to sort in.
+
+ @return    An `RLMResults` sorted by the specified key path.
+ */
+- (RLMResults<RLMObjectType> *)sortedResultsUsingKeyPath:(NSString *)keyPath ascending:(BOOL)ascending;
+
+/**
+ Returns a sorted `RLMResults` from the array.
+
+ @param property    The property name to sort by.
+ @param ascending   The direction to sort in.
+
+ @return    An `RLMResults` sorted by the specified property.
+ */
+- (RLMResults<RLMObjectType> *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending
+    __deprecated_msg("Use `-sortedResultsUsingKeyPath:ascending:`");
+
+/**
+ Returns a sorted `RLMResults` from the array.
+
+ @param properties  An array of `RLMSortDescriptor`s to sort by.
+
+ @return    An `RLMResults` sorted by the specified properties.
+ */
+- (RLMResults<RLMObjectType> *)sortedResultsUsingDescriptors:(NSArray<RLMSortDescriptor *> *)properties;
+
+/// :nodoc:
+- (RLMObjectType)objectAtIndexedSubscript:(NSUInteger)index;
+
+/// :nodoc:
+- (void)setObject:(RLMObjectType)newValue atIndexedSubscript:(NSUInteger)index;
+
+#pragma mark - Notifications
+
+/**
+ Registers a block to be called each time the array changes.
+
+ The block will be asynchronously called with the initial array, and then
+ called again after each write transaction which changes any of the objects in
+ the array, which objects are in the results, or the order of the objects in the
+ array.
+
+ The `changes` parameter will be `nil` the first time the block is called.
+ For each call after that, it will contain information about
+ which rows in the array were added, removed or modified. If a write transaction
+ did not modify any objects in the array, the block is not called at all.
+ See the `RLMCollectionChange` documentation for information on how the changes
+ are reported and an example of updating a `UITableView`.
+
+ If an error occurs the block will be called with `nil` for the results
+ parameter and a non-`nil` error. Currently the only errors that can occur are
+ when opening the Realm on the background worker thread.
+
+ Notifications are delivered via the standard run loop, and so can't be
+ delivered while the run loop is blocked by other activity. When
+ notifications can't be delivered instantly, multiple notifications may be
+ coalesced into a single notification. This can include the notification
+ with the initial results. For example, the following code performs a write
+ transaction immediately after adding the notification block, so there is no
+ opportunity for the initial notification to be delivered first. As a
+ result, the initial notification will reflect the state of the Realm after
+ the write transaction.
+
+     Person *person = [[Person allObjectsInRealm:realm] firstObject];
+     NSLog(@"person.dogs.count: %zu", person.dogs.count); // => 0
+     self.token = [person.dogs addNotificationBlock(RLMArray<Dog *> *dogs,
+                                                    RLMCollectionChange *changes,
+                                                    NSError *error) {
+         // Only fired once for the example
+         NSLog(@"dogs.count: %zu", dogs.count) // => 1
+     }];
+     [realm transactionWithBlock:^{
+         Dog *dog = [[Dog alloc] init];
+         dog.name = @"Rex";
+         [person.dogs addObject:dog];
+     }];
+     // end of run loop execution context
+
+ You must retain the returned token for as long as you want updates to continue
+ to be sent to the block. To stop receiving updates, call `-stop` on the token.
+
+ @warning This method cannot be called during a write transaction, or when the
+          containing Realm is read-only.
+ @warning This method may only be called on a managed array.
+
+ @param block The block to be called each time the array changes.
+ @return A token which must be held for as long as you want updates to be delivered.
+ */
+- (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMArray<RLMObjectType> *__nullable array,
+                                                         RLMCollectionChange *__nullable changes,
+                                                         NSError *__nullable error))block __attribute__((warn_unused_result));
+
+#pragma mark - Aggregating Property Values
+
+/**
+ Returns the minimum (lowest) value of the given property among all the objects in the array.
+
+     NSNumber *min = [object.arrayProperty minOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose minimum value is desired. Only properties of
+                 types `int`, `float`, `double`, and `NSDate` are supported.
+
+ @return The minimum value of the property, or `nil` if the array is empty.
+ */
+- (nullable id)minOfProperty:(NSString *)property;
+
+/**
+ Returns the maximum (highest) value of the given property among all the objects in the array.
+
+     NSNumber *max = [object.arrayProperty maxOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose maximum value is desired. Only properties of
+                 types `int`, `float`, `double`, and `NSDate` are supported.
+
+ @return The maximum value of the property, or `nil` if the array is empty.
+ */
+- (nullable id)maxOfProperty:(NSString *)property;
+
+/**
+ Returns the sum of the values of a given property over all the objects in the array.
+
+     NSNumber *sum = [object.arrayProperty sumOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose values should be summed. Only properties of
+                 types `int`, `float`, and `double` are supported.
+
+ @return The sum of the given property.
+ */
+- (NSNumber *)sumOfProperty:(NSString *)property;
+
+/**
+ Returns the average value of a given property over the objects in the array.
+
+     NSNumber *average = [object.arrayProperty averageOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose average value should be calculated. Only
+                 properties of types `int`, `float`, and `double` are supported.
+
+ @return    The average value of the given property, or `nil` if the array is empty.
+ */
+- (nullable NSNumber *)averageOfProperty:(NSString *)property;
+
+
+#pragma mark - Unavailable Methods
+
+/**
+ `-[RLMArray init]` is not available because `RLMArray`s cannot be created directly.
+ `RLMArray` properties on `RLMObject`s are lazily created when accessed, or can be obtained by querying a Realm.
+ */
+- (instancetype)init __attribute__((unavailable("RLMArrays cannot be created directly")));
+
+/**
+ `+[RLMArray new]` is not available because `RLMArray`s cannot be created directly.
+ `RLMArray` properties on `RLMObject`s are lazily created when accessed, or can be obtained by querying a Realm.
+ */
++ (instancetype)new __attribute__((unavailable("RLMArrays cannot be created directly")));
+
+@end
+
+/// :nodoc:
+@interface RLMArray (Swift)
+// for use only in Swift class definitions
+- (instancetype)initWithObjectClassName:(NSString *)objectClassName;
+@end
+
+NS_ASSUME_NONNULL_END

+ 411 - 0
Libraries external/Realm/Realm.framework/Headers/RLMCollection.h

@@ -0,0 +1,411 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import "RLMThreadSafeReference.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMRealm, RLMResults, RLMObject, RLMSortDescriptor, RLMNotificationToken, RLMCollectionChange;
+
+/**
+ A homogenous collection of `RLMObject` instances. Examples of conforming types include `RLMArray`,
+ `RLMResults`, and `RLMLinkingObjects`.
+ */
+@protocol RLMCollection <NSFastEnumeration, RLMThreadConfined>
+
+@required
+
+#pragma mark - Properties
+
+/**
+ The number of objects in the collection.
+ */
+@property (nonatomic, readonly, assign) NSUInteger count;
+
+/**
+ The class name (i.e. type) of the `RLMObject`s contained in the collection.
+ */
+@property (nonatomic, readonly, copy) NSString *objectClassName;
+
+/**
+ The Realm which manages the collection, or `nil` for unmanaged collections.
+ */
+@property (nonatomic, readonly) RLMRealm *realm;
+
+#pragma mark - Accessing Objects from a Collection
+
+/**
+ Returns the object at the index specified.
+
+ @param index   The index to look up.
+
+ @return An `RLMObject` of the type contained in the collection.
+ */
+- (id)objectAtIndex:(NSUInteger)index;
+
+/**
+ Returns the first object in the collection.
+
+ Returns `nil` if called on an empty collection.
+
+ @return An `RLMObject` of the type contained in the collection.
+ */
+- (nullable id)firstObject;
+
+/**
+ Returns the last object in the collection.
+
+ Returns `nil` if called on an empty collection.
+
+ @return An `RLMObject` of the type contained in the collection.
+ */
+- (nullable id)lastObject;
+
+#pragma mark - Querying a Collection
+
+/**
+ Returns the index of an object in the collection.
+
+ Returns `NSNotFound` if the object is not found in the collection.
+
+ @param object  An object (of the same type as returned from the `objectClassName` selector).
+ */
+- (NSUInteger)indexOfObject:(RLMObject *)object;
+
+/**
+ Returns the index of the first object in the collection matching the predicate.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return    The index of the object, or `NSNotFound` if the object is not found in the collection.
+ */
+- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
+- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args;
+
+/**
+ Returns the index of the first object in the collection matching the predicate.
+
+ @param predicate   The predicate with which to filter the objects.
+
+ @return    The index of the object, or `NSNotFound` if the object is not found in the collection.
+ */
+- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate;
+
+/**
+ Returns all objects matching the given predicate in the collection.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return    An `RLMResults` containing objects that match the given predicate.
+ */
+- (RLMResults *)objectsWhere:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
+- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args;
+
+/**
+ Returns all objects matching the given predicate in the collection.
+
+ @param predicate   The predicate with which to filter the objects.
+
+ @return            An `RLMResults` containing objects that match the given predicate.
+ */
+- (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate;
+
+/**
+ Returns a sorted `RLMResults` from the collection.
+
+ @param keyPath     The keyPath to sort by.
+ @param ascending   The direction to sort in.
+
+ @return    An `RLMResults` sorted by the specified key path.
+ */
+- (RLMResults *)sortedResultsUsingKeyPath:(NSString *)keyPath ascending:(BOOL)ascending;
+
+/**
+ Returns a sorted `RLMResults` from the collection.
+
+ @param property    The property name to sort by.
+ @param ascending   The direction to sort in.
+
+ @return    An `RLMResults` sorted by the specified property.
+ */
+- (RLMResults *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending
+    __deprecated_msg("Use `-sortedResultsUsingKeyPath:ascending:`");
+
+/**
+ Returns a sorted `RLMResults` from the collection.
+
+ @param properties  An array of `RLMSortDescriptor`s to sort by.
+
+ @return    An `RLMResults` sorted by the specified properties.
+ */
+- (RLMResults *)sortedResultsUsingDescriptors:(NSArray<RLMSortDescriptor *> *)properties;
+
+/// :nodoc:
+- (id)objectAtIndexedSubscript:(NSUInteger)index;
+
+/**
+ Returns an `NSArray` containing the results of invoking `valueForKey:` using `key` on each of the collection's objects.
+
+ @param key The name of the property.
+
+ @return An `NSArray` containing results.
+ */
+- (nullable id)valueForKey:(NSString *)key;
+
+/**
+ Invokes `setValue:forKey:` on each of the collection's objects using the specified `value` and `key`.
+
+ @warning This method may only be called during a write transaction.
+
+ @param value The object value.
+ @param key   The name of the property.
+ */
+- (void)setValue:(nullable id)value forKey:(NSString *)key;
+
+#pragma mark - Notifications
+
+/**
+ Registers a block to be called each time the collection changes.
+
+ The block will be asynchronously called with the initial collection, and then
+ called again after each write transaction which changes either any of the
+ objects in the collection, or which objects are in the collection.
+
+ The `change` parameter will be `nil` the first time the block is called.
+ For each call after that, it will contain information about
+ which rows in the collection were added, removed or modified. If a write transaction
+ did not modify any objects in this collection, the block is not called at all.
+ See the `RLMCollectionChange` documentation for information on how the changes
+ are reported and an example of updating a `UITableView`.
+
+ If an error occurs the block will be called with `nil` for the collection
+ parameter and a non-`nil` error. Currently the only errors that can occur are
+ when opening the Realm on the background worker thread.
+
+ At the time when the block is called, the collection object will be fully
+ evaluated and up-to-date, and as long as you do not perform a write transaction
+ on the same thread or explicitly call `-[RLMRealm refresh]`, accessing it will
+ never perform blocking work.
+
+ Notifications are delivered via the standard run loop, and so can't be
+ delivered while the run loop is blocked by other activity. When
+ notifications can't be delivered instantly, multiple notifications may be
+ coalesced into a single notification. This can include the notification
+ with the initial collection. For example, the following code performs a write
+ transaction immediately after adding the notification block, so there is no
+ opportunity for the initial notification to be delivered first. As a
+ result, the initial notification will reflect the state of the Realm after
+ the write transaction.
+
+     id<RLMCollection> collection = [Dog allObjects];
+     NSLog(@"dogs.count: %zu", dogs.count); // => 0
+     self.token = [collection addNotificationBlock:^(id<RLMCollection> dogs,
+                                                  RLMCollectionChange *changes,
+                                                  NSError *error) {
+         // Only fired once for the example
+         NSLog(@"dogs.count: %zu", dogs.count); // => 1
+     }];
+     [realm transactionWithBlock:^{
+         Dog *dog = [[Dog alloc] init];
+         dog.name = @"Rex";
+         [realm addObject:dog];
+     }];
+     // end of run loop execution context
+
+ You must retain the returned token for as long as you want updates to continue
+ to be sent to the block. To stop receiving updates, call `-stop` on the token.
+
+ @warning This method cannot be called during a write transaction, or when the
+          containing Realm is read-only.
+
+ @param block The block to be called each time the collection changes.
+ @return A token which must be held for as long as you want collection notifications to be delivered.
+ */
+- (RLMNotificationToken *)addNotificationBlock:(void (^)(id<RLMCollection> __nullable collection,
+                                                         RLMCollectionChange *__nullable change,
+                                                         NSError *__nullable error))block __attribute__((warn_unused_result));
+
+#pragma mark - Aggregating Property Values
+
+/**
+ Returns the minimum (lowest) value of the given property among all the objects
+ in the collection.
+
+     NSNumber *min = [results minOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose minimum value is desired. Only properties of
+                 types `int`, `float`, `double`, and `NSDate` are supported.
+
+ @return The minimum value of the property, or `nil` if the Results are empty.
+ */
+- (nullable id)minOfProperty:(NSString *)property;
+
+/**
+ Returns the maximum (highest) value of the given property among all the objects
+ in the collection.
+
+     NSNumber *max = [results maxOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose maximum value is desired. Only properties of
+                 types `int`, `float`, `double`, and `NSDate` are supported.
+
+ @return The maximum value of the property, or `nil` if the Results are empty.
+ */
+- (nullable id)maxOfProperty:(NSString *)property;
+
+/**
+ Returns the sum of the values of a given property over all the objects in the collection.
+
+     NSNumber *sum = [results sumOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose values should be summed. Only properties of
+                 types `int`, `float`, and `double` are supported.
+
+ @return The sum of the given property.
+ */
+- (NSNumber *)sumOfProperty:(NSString *)property;
+
+/**
+ Returns the average value of a given property over the objects in the collection.
+
+     NSNumber *average = [results averageOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose average value should be calculated. Only
+                 properties of types `int`, `float`, and `double` are supported.
+
+ @return    The average value of the given property, or `nil` if the Results are empty.
+ */
+- (nullable NSNumber *)averageOfProperty:(NSString *)property;
+
+@end
+
+/**
+ An `RLMSortDescriptor` stores a property name and a sort order for use with
+ `sortedResultsUsingDescriptors:`. It is similar to `NSSortDescriptor`, but supports
+ only the subset of functionality which can be efficiently run by Realm's query
+ engine.
+ 
+ `RLMSortDescriptor` instances are immutable.
+ */
+@interface RLMSortDescriptor : NSObject
+
+#pragma mark - Properties
+
+/**
+ The key path which the sort descriptor orders results by.
+ */
+@property (nonatomic, readonly) NSString *keyPath;
+
+/**
+ Whether the descriptor sorts in ascending or descending order.
+ */
+@property (nonatomic, readonly) BOOL ascending;
+
+#pragma mark - Methods
+
+/**
+ Returns a new sort descriptor for the given key path and sort direction.
+ */
++ (instancetype)sortDescriptorWithKeyPath:(NSString *)keyPath ascending:(BOOL)ascending;
+
+/**
+ Returns a copy of the receiver with the sort direction reversed.
+ */
+- (instancetype)reversedSortDescriptor;
+
+#pragma mark - Deprecated
+
+/**
+ The name of the property which the sort descriptor orders results by.
+ */
+@property (nonatomic, readonly) NSString *property __deprecated_msg("Use `-keyPath`");
+
+/**
+ Returns a new sort descriptor for the given property name and sort direction.
+ */
++ (instancetype)sortDescriptorWithProperty:(NSString *)propertyName ascending:(BOOL)ascending
+    __deprecated_msg("Use `+sortDescriptorWithKeyPath:ascending:`");
+
+@end
+
+/**
+ A `RLMCollectionChange` object encapsulates information about changes to collections
+ that are reported by Realm notifications.
+
+ `RLMCollectionChange` is passed to the notification blocks registered with
+ `-addNotificationBlock` on `RLMArray` and `RLMResults`, and reports what rows in the
+ collection changed since the last time the notification block was called.
+
+ The change information is available in two formats: a simple array of row
+ indices in the collection for each type of change, and an array of index paths
+ in a requested section suitable for passing directly to `UITableView`'s batch
+ update methods. A complete example of updating a `UITableView` named `tv`:
+
+     [tv beginUpdates];
+     [tv deleteRowsAtIndexPaths:[changes deletionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic];
+     [tv insertRowsAtIndexPaths:[changes insertionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic];
+     [tv reloadRowsAtIndexPaths:[changes modificationsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic];
+     [tv endUpdates];
+
+ All of the arrays in an `RLMCollectionChange` are always sorted in ascending order.
+ */
+@interface RLMCollectionChange : NSObject
+/// The indices of objects in the previous version of the collection which have
+/// been removed from this one.
+@property (nonatomic, readonly) NSArray<NSNumber *> *deletions;
+
+/// The indices in the new version of the collection which were newly inserted.
+@property (nonatomic, readonly) NSArray<NSNumber *> *insertions;
+
+/**
+ The indices in the new version of the collection which were modified.
+ 
+ For `RLMResults`, this means that one or more of the properties of the object at
+ that index were modified (or an object linked to by that object was
+ modified).
+ 
+ For `RLMArray`, the array itself being modified to contain a
+ different object at that index will also be reported as a modification.
+ */
+@property (nonatomic, readonly) NSArray<NSNumber *> *modifications;
+
+/// Returns the index paths of the deletion indices in the given section.
+- (NSArray<NSIndexPath *> *)deletionsInSection:(NSUInteger)section;
+
+/// Returns the index paths of the insertion indices in the given section.
+- (NSArray<NSIndexPath *> *)insertionsInSection:(NSUInteger)section;
+
+/// Returns the index paths of the modification indices in the given section.
+- (NSArray<NSIndexPath *> *)modificationsInSection:(NSUInteger)section;
+@end
+
+NS_ASSUME_NONNULL_END

+ 204 - 0
Libraries external/Realm/Realm.framework/Headers/RLMConstants.h

@@ -0,0 +1,204 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+// For compatibility with Xcode 7, before extensible string enums were introduced,
+#ifdef NS_EXTENSIBLE_STRING_ENUM
+#define RLM_EXTENSIBLE_STRING_ENUM NS_EXTENSIBLE_STRING_ENUM
+#define RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(_, extensible_string_enum) NS_SWIFT_NAME(extensible_string_enum)
+#else
+#define RLM_EXTENSIBLE_STRING_ENUM
+#define RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(fully_qualified, _) NS_SWIFT_NAME(fully_qualified)
+#endif
+
+#if __has_attribute(ns_error_domain) && (!defined(__cplusplus) || !__cplusplus || __cplusplus >= 201103L)
+#define RLM_ERROR_ENUM(type, name, domain) \
+    _Pragma("clang diagnostic push") \
+    _Pragma("clang diagnostic ignored \"-Wignored-attributes\"") \
+    NS_ENUM(type, __attribute__((ns_error_domain(domain))) name) \
+    _Pragma("clang diagnostic pop")
+#else
+#define RLM_ERROR_ENUM(type, name, domain) NS_ENUM(type, name)
+#endif
+
+
+#pragma mark - Enums
+
+/**
+ `RLMPropertyType` is an enumeration describing all property types supported in Realm models.
+
+ For more information, see [Realm Models](https://realm.io/docs/objc/latest/#models).
+ */
+// Make sure numbers match those in <realm/data_type.hpp>
+typedef NS_ENUM(int32_t, RLMPropertyType) {
+
+#pragma mark - Primitive types
+
+    /** Integers: `NSInteger`, `int`, `long`, `Int` (Swift) */
+    RLMPropertyTypeInt    = 0,
+    /** Booleans: `BOOL`, `bool`, `Bool` (Swift) */
+    RLMPropertyTypeBool   = 1,
+    /** Floating-point numbers: `float`, `Float` (Swift) */
+    RLMPropertyTypeFloat  = 9,
+    /** Double-precision floating-point numbers: `double`, `Double` (Swift) */
+    RLMPropertyTypeDouble = 10,
+
+#pragma mark - Object types
+
+    /** Strings: `NSString`, `String` (Swift) */
+    RLMPropertyTypeString = 2,
+    /** Binary data: `NSData` */
+    RLMPropertyTypeData   = 4,
+    /** 
+     Any object: `id`.
+     
+     This property type is no longer supported for new models. However, old models with any-typed properties are still
+     supported for migration purposes.
+     */
+    RLMPropertyTypeAny    = 6,
+    /** Dates: `NSDate` */
+    RLMPropertyTypeDate   = 8,
+
+#pragma mark - Array/Linked object types
+
+    /** Realm model objects. See [Realm Models](https://realm.io/docs/objc/latest/#models) for more information. */
+    RLMPropertyTypeObject = 12,
+    /** Realm arrays. See [Realm Models](https://realm.io/docs/objc/latest/#models) for more information. */
+    RLMPropertyTypeArray  = 13,
+    /** Realm linking objects. See [Realm Models](https://realm.io/docs/objc/latest/#models) for more information. */
+    RLMPropertyTypeLinkingObjects = 14,
+};
+
+/** An error domain identifying Realm-specific errors. */
+extern NSString * const RLMErrorDomain;
+
+/** An error domain identifying non-specific system errors. */
+extern NSString * const RLMUnknownSystemErrorDomain;
+
+/**
+ `RLMError` is an enumeration representing all recoverable errors. It is associated with the
+ Realm error domain specified in `RLMErrorDomain`.
+ */
+typedef RLM_ERROR_ENUM(NSInteger, RLMError, RLMErrorDomain) {
+    /** Denotes a general error that occurred when trying to open a Realm. */
+    RLMErrorFail                  = 1,
+
+    /** Denotes a file I/O error that occurred when trying to open a Realm. */
+    RLMErrorFileAccess            = 2,
+
+    /** 
+     Denotes a file permission error that ocurred when trying to open a Realm.
+     
+     This error can occur if the user does not have permission to open or create
+     the specified file in the specified access mode when opening a Realm.
+     */
+    RLMErrorFilePermissionDenied  = 3,
+
+    /** Denotes an error where a file was to be written to disk, but another file with the same name already exists. */
+    RLMErrorFileExists            = 4,
+
+    /**
+     Denotes an error that occurs if a file could not be found.
+     
+     This error may occur if a Realm file could not be found on disk when trying to open a
+     Realm as read-only, or if the directory part of the specified path was not found when
+     trying to write a copy.
+     */
+    RLMErrorFileNotFound          = 5,
+
+    /** 
+     Denotes an error that occurs if a file format upgrade is required to open the file,
+     but upgrades were explicitly disabled.
+     */
+    RLMErrorFileFormatUpgradeRequired = 6,
+
+    /** 
+     Denotes an error that occurs if the database file is currently open in another
+     process which cannot share with the current process due to an
+     architecture mismatch.
+     
+     This error may occur if trying to share a Realm file between an i386 (32-bit) iOS
+     Simulator and the Realm Browser application. In this case, please use the 64-bit
+     version of the iOS Simulator.
+     */
+    RLMErrorIncompatibleLockFile  = 8,
+
+    /** Denotes an error that occurs when there is insufficient available address space. */
+    RLMErrorAddressSpaceExhausted = 9,
+
+    /** Denotes an error that occurs if there is a schema version mismatch, so that a migration is required. */
+    RLMErrorSchemaMismatch = 10,
+};
+
+#pragma mark - Constants
+
+#pragma mark - Notification Constants
+
+/**
+ A notification indicating that changes were made to a Realm.
+*/
+typedef NSString * RLMNotification RLM_EXTENSIBLE_STRING_ENUM;
+
+/**
+ This notification is posted by a Realm when the data in that Realm has changed.
+
+ More specifically, this notification is posted after a Realm has been refreshed to
+ reflect a write transaction. This can happen when an autorefresh occurs, when
+ `-[RLMRealm refresh]` is called, after an implicit refresh from `-[RLMRealm beginWriteTransaction]`,
+ or after a local write transaction is completed.
+ */
+extern RLMNotification const RLMRealmRefreshRequiredNotification
+RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(RLMRealmRefreshRequiredNotification, RefreshRequired);
+
+/**
+ This notification is posted by a Realm when a write transaction has been
+ committed to a Realm on a different thread for the same file.
+
+ It is not posted if `-[RLMRealm autorefresh]` is enabled, or if the Realm is
+ refreshed before the notification has a chance to run.
+
+ Realms with autorefresh disabled should normally install a handler for this
+ notification which calls `-[RLMRealm refresh]` after doing some work. Refreshing
+ the Realm is optional, but not refreshing the Realm may lead to large Realm
+ files. This is because Realm must keep an extra copy of the data for the stale
+ Realm.
+ */
+extern RLMNotification const RLMRealmDidChangeNotification
+RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(RLMRealmDidChangeNotification, DidChange);
+
+#pragma mark - Other Constants
+
+/** The schema version used for uninitialized Realms */
+extern const uint64_t RLMNotVersioned;
+
+/** The corresponding value is the name of an exception thrown by Realm. */
+extern NSString * const RLMExceptionName;
+
+/** The corresponding value is a Realm file version. */
+extern NSString * const RLMRealmVersionKey;
+
+/** The corresponding key is the version of the underlying database engine. */
+extern NSString * const RLMRealmCoreVersionKey;
+
+/** The corresponding key is the Realm invalidated property name. */
+extern NSString * const RLMInvalidatedKey;
+
+NS_ASSUME_NONNULL_END

+ 127 - 0
Libraries external/Realm/Realm.framework/Headers/RLMMigration.h

@@ -0,0 +1,127 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMSchema;
+@class RLMArray;
+@class RLMObject;
+
+/**
+ A block type which provides both the old and new versions of an object in the Realm. Object 
+ properties can only be accessed using keyed subscripting.
+ 
+ @see `-[RLMMigration enumerateObjects:block:]`
+ 
+ @param oldObject The object from the original Realm (read-only).
+ @param newObject The object from the migrated Realm (read-write).
+*/
+typedef void (^RLMObjectMigrationBlock)(RLMObject * __nullable oldObject, RLMObject * __nullable newObject);
+
+/**
+ `RLMMigration` instances encapsulate information intended to facilitate a schema migration.
+ 
+ A `RLMMigration` instance is passed into a user-defined `RLMMigrationBlock` block when updating
+ the version of a Realm. This instance provides access to the old and new database schemas, the
+ objects in the Realm, and provides functionality for modifying the Realm during the migration.
+ */
+@interface RLMMigration : NSObject
+
+#pragma mark - Properties
+
+/**
+ Returns the old `RLMSchema`. This is the schema which describes the Realm before the
+ migration is applied.
+ */
+@property (nonatomic, readonly) RLMSchema *oldSchema;
+
+/**
+ Returns the new `RLMSchema`. This is the schema which describes the Realm after the
+ migration is applied.
+ */
+@property (nonatomic, readonly) RLMSchema *newSchema;
+
+
+#pragma mark - Altering Objects during a Migration
+
+/**
+ Enumerates all the objects of a given type in the Realm, providing both the old and new versions
+ of each object. Within the block, object properties can only be accessed using keyed subscripting.
+
+ @param className   The name of the `RLMObject` class to enumerate.
+
+ @warning   All objects returned are of a type specific to the current migration and should not be cast
+            to `className`. Instead, treat them as `RLMObject`s and use keyed subscripting to access
+            properties.
+ */
+- (void)enumerateObjects:(NSString *)className block:(__attribute__((noescape)) RLMObjectMigrationBlock)block;
+
+/**
+ Creates and returns an `RLMObject` instance of type `className` in the Realm being migrated.
+ 
+ The `value` argument is used to populate the object. It can be a key-value coding compliant object, an array or 
+ dictionary returned from the methods in `NSJSONSerialization`, or an array containing one element for each managed
+ property. An exception will be thrown if any required properties are not present and those properties were not defined
+ with default values.
+
+ When passing in an `NSArray` as the `value` argument, all properties must be present, valid and in the same order as
+ the properties defined in the model.
+
+ @param className   The name of the `RLMObject` class to create.
+ @param value       The value used to populate the object.
+ */
+- (RLMObject *)createObject:(NSString *)className withValue:(id)value;
+
+/**
+ Deletes an object from a Realm during a migration.
+
+ It is permitted to call this method from within the block passed to `-[enumerateObjects:block:]`.
+
+ @param object  Object to be deleted from the Realm being migrated.
+ */
+- (void)deleteObject:(RLMObject *)object;
+
+/**
+ Deletes the data for the class with the given name.
+
+ All objects of the given class will be deleted. If the `RLMObject` subclass no longer exists in your program,
+ any remaining metadata for the class will be removed from the Realm file.
+
+ @param  name The name of the `RLMObject` class to delete.
+
+ @return A Boolean value indicating whether there was any data to delete.
+ */
+- (BOOL)deleteDataForClassName:(NSString *)name;
+
+/**
+ Renames a property of the given class from `oldName` to `newName`.
+
+ @param className The name of the class whose property should be renamed. This class must be present
+                  in both the old and new Realm schemas.
+ @param oldName   The old name for the property to be renamed. There must not be a property with this name in the
+                  class as defined by the new Realm schema.
+ @param newName   The new name for the property to be renamed. There must not be a property with this name in the
+                  class as defined by the old Realm schema.
+ */
+- (void)renamePropertyForClass:(NSString *)className oldName:(NSString *)oldName newName:(NSString *)newName;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 535 - 0
Libraries external/Realm/Realm.framework/Headers/RLMObject.h

@@ -0,0 +1,535 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import <Realm/RLMObjectBase.h>
+#import <Realm/RLMThreadSafeReference.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMNotificationToken;
+@class RLMObjectSchema;
+@class RLMPropertyChange;
+@class RLMPropertyDescriptor;
+@class RLMRealm;
+@class RLMResults;
+
+/**
+ `RLMObject` is a base class for model objects representing data stored in Realms.
+
+ Define your model classes by subclassing `RLMObject` and adding properties to be managed.
+ Then instantiate and use your custom subclasses instead of using the `RLMObject` class directly.
+
+     // Dog.h
+     @interface Dog : RLMObject
+     @property NSString *name;
+     @property BOOL      adopted;
+     @end
+
+     // Dog.m
+     @implementation Dog
+     @end //none needed
+
+ ### Supported property types
+
+ - `NSString`
+ - `NSInteger`, `int`, `long`, `float`, and `double`
+ - `BOOL` or `bool`
+ - `NSDate`
+ - `NSData`
+ - `NSNumber<X>`, where `X` is one of `RLMInt`, `RLMFloat`, `RLMDouble` or `RLMBool`, for optional number properties
+ - `RLMObject` subclasses, to model many-to-one relationships.
+ - `RLMArray<X>`, where `X` is an `RLMObject` subclass, to model many-to-many relationships.
+
+ ### Querying
+
+ You can initiate queries directly via the class methods: `allObjects`, `objectsWhere:`, and `objectsWithPredicate:`.
+ These methods allow you to easily query a custom subclass for instances of that class in the default Realm.
+
+ To search in a Realm other than the default Realm, use the `allObjectsInRealm:`, `objectsInRealm:where:`,
+ and `objectsInRealm:withPredicate:` class methods.
+
+ @see `RLMRealm`
+
+ ### Relationships
+
+ See our [Cocoa guide](https://realm.io/docs/objc/latest#relationships) for more details.
+
+ ### Key-Value Observing
+
+ All `RLMObject` properties (including properties you create in subclasses) are
+ [Key-Value Observing compliant](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html),
+ except for `realm` and `objectSchema`.
+
+ Keep the following tips in mind when observing Realm objects:
+
+ 1. Unlike `NSMutableArray` properties, `RLMArray` properties do not require
+    using the proxy object returned from `-mutableArrayValueForKey:`, or defining
+    KVC mutation methods on the containing class. You can simply call methods on
+    the `RLMArray` directly; any changes will be automatically observed by the containing
+    object.
+ 2. Unmanaged `RLMObject` instances cannot be added to a Realm while they have any
+    observed properties.
+ 3. Modifying managed `RLMObject`s within `-observeValueForKeyPath:ofObject:change:context:`
+    is not recommended. Properties may change even when the Realm is not in a write
+    transaction (for example, when `-[RLMRealm refresh]` is called after changes
+    are made on a different thread), and notifications sent prior to the change
+    being applied (when `NSKeyValueObservingOptionPrior` is used) may be sent at
+    times when you *cannot* begin a write transaction.
+ */
+
+@interface RLMObject : RLMObjectBase <RLMThreadConfined>
+
+#pragma mark - Creating & Initializing Objects
+
+/**
+ Creates an unmanaged instance of a Realm object.
+
+ Call `addObject:` on an `RLMRealm` instance to add an unmanaged object into that Realm.
+
+ @see `[RLMRealm addObject:]`
+ */
+- (instancetype)init NS_DESIGNATED_INITIALIZER;
+
+
+/**
+ Creates an unmanaged instance of a Realm object.
+
+ Pass in an `NSArray` or `NSDictionary` instance to set the values of the object's properties.
+
+ Call `addObject:` on an `RLMRealm` instance to add an unmanaged object into that Realm.
+
+ @see `[RLMRealm addObject:]`
+ */
+- (instancetype)initWithValue:(id)value NS_DESIGNATED_INITIALIZER;
+
+
+/**
+ Returns the class name for a Realm object subclass.
+
+ @warning Do not override. Realm relies on this method returning the exact class
+          name.
+
+ @return  The class name for the model class.
+ */
++ (NSString *)className;
+
+/**
+ Creates an instance of a Realm object with a given value, and adds it to the default Realm.
+
+ If nested objects are included in the argument, `createInDefaultRealmWithValue:` will be recursively called
+ on them.
+
+ The `value` argument can be a key-value coding compliant object, an array or dictionary returned from the methods in
+ `NSJSONSerialization`, or an array containing one element for each managed property. An exception will be thrown if
+ any required properties are not present and those properties were not defined with default values.
+
+ When passing in an array as the `value` argument, all properties must be present, valid and in the same order as the
+ properties defined in the model.
+
+ @param value    The value used to populate the object.
+
+ @see   `defaultPropertyValues`
+ */
++ (instancetype)createInDefaultRealmWithValue:(id)value;
+
+/**
+ Creates an instance of a Realm object with a given value, and adds it to the specified Realm.
+
+ If nested objects are included in the argument, `createInRealm:withValue:` will be recursively called
+ on them.
+
+ The `value` argument can be a key-value coding compliant object, an array or dictionary returned from the methods in
+ `NSJSONSerialization`, or an array containing one element for each managed property. An exception will be thrown if any
+ required properties are not present and those properties were not defined with default values.
+
+ When passing in an array as the `value` argument, all properties must be present, valid and in the same order as the
+ properties defined in the model.
+
+ @param realm    The Realm which should manage the newly-created object.
+ @param value    The value used to populate the object.
+
+ @see   `defaultPropertyValues`
+ */
++ (instancetype)createInRealm:(RLMRealm *)realm withValue:(id)value;
+
+/**
+ Creates or updates a Realm object within the default Realm.
+
+ This method may only be called on Realm object types with a primary key defined. If there is already
+ an object with the same primary key value in the default Realm, its values are updated and the object
+ is returned. Otherwise, this method creates and populates a new instance of the object in the default Realm.
+
+ If nested objects are included in the argument, `createOrUpdateInDefaultRealmWithValue:` will be
+ recursively called on them if they have primary keys, `createInDefaultRealmWithValue:` if they do not.
+
+ If the argument is a Realm object already managed by the default Realm, the argument's type is the same
+ as the receiver, and the objects have identical values for their managed properties, this method does nothing.
+
+ The `value` argument is used to populate the object. It can be a key-value coding compliant object, an array or
+ dictionary returned from the methods in `NSJSONSerialization`, or an array containing one element for each managed
+ property. An exception will be thrown if any required properties are not present and those properties were not defined
+ with default values.
+
+ When passing in an array as the `value` argument, all properties must be present, valid and in the same order as the
+ properties defined in the model.
+
+ @param value    The value used to populate the object.
+
+ @see   `defaultPropertyValues`, `primaryKey`
+ */
++ (instancetype)createOrUpdateInDefaultRealmWithValue:(id)value;
+
+/**
+ Creates or updates an Realm object within a specified Realm.
+
+ This method may only be called on Realm object types with a primary key defined. If there is already
+ an object with the same primary key value in the given Realm, its values are updated and the object
+ is returned. Otherwise this method creates and populates a new instance of this object in the given Realm.
+
+ If nested objects are included in the argument, `createOrUpdateInRealm:withValue:` will be
+ recursively called on them if they have primary keys, `createInRealm:withValue:` if they do not.
+
+ If the argument is a Realm object already managed by the given Realm, the argument's type is the same
+ as the receiver, and the objects have identical values for their managed properties, this method does nothing.
+
+ The `value` argument is used to populate the object. It can be a key-value coding compliant object, an array or
+ dictionary returned from the methods in `NSJSONSerialization`, or an array containing one element for each managed
+ property. An exception will be thrown if any required properties are not present and those properties were not defined
+ with default values.
+
+ When passing in an array as the `value` argument, all properties must be present, valid and in the same order as the
+ properties defined in the model.
+
+ @param realm    The Realm which should own the object.
+ @param value    The value used to populate the object.
+
+ @see   `defaultPropertyValues`, `primaryKey`
+ */
++ (instancetype)createOrUpdateInRealm:(RLMRealm *)realm withValue:(id)value;
+
+#pragma mark - Properties
+
+/**
+ The Realm which manages the object, or `nil` if the object is unmanaged.
+ */
+@property (nonatomic, readonly, nullable) RLMRealm *realm;
+
+/**
+ The object schema which lists the managed properties for the object.
+ */
+@property (nonatomic, readonly) RLMObjectSchema *objectSchema;
+
+/**
+ Indicates if the object can no longer be accessed because it is now invalid.
+
+ An object can no longer be accessed if the object has been deleted from the Realm that manages it, or
+ if `invalidate` is called on that Realm.
+ */
+@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated;
+
+
+#pragma mark - Customizing your Objects
+
+/**
+ Returns an array of property names for properties which should be indexed.
+
+ Only string, integer, boolean, and `NSDate` properties are supported.
+
+ @return    An array of property names.
+ */
++ (NSArray<NSString *> *)indexedProperties;
+
+/**
+ Override this method to specify the default values to be used for each property.
+
+ @return    A dictionary mapping property names to their default values.
+ */
++ (nullable NSDictionary *)defaultPropertyValues;
+
+/**
+ Override this method to specify the name of a property to be used as the primary key.
+
+ Only properties of types `RLMPropertyTypeString` and `RLMPropertyTypeInt` can be designated as the primary key.
+ Primary key properties enforce uniqueness for each value whenever the property is set, which incurs minor overhead.
+ Indexes are created automatically for primary key properties.
+
+ @return    The name of the property designated as the primary key.
+ */
++ (nullable NSString *)primaryKey;
+
+/**
+ Override this method to specify the names of properties to ignore. These properties will not be managed by the Realm
+ that manages the object.
+
+ @return    An array of property names to ignore.
+ */
++ (nullable NSArray<NSString *> *)ignoredProperties;
+
+/**
+ Override this method to specify the names of properties that are non-optional (i.e. cannot be assigned a `nil` value).
+
+ By default, all properties of a type whose values can be set to `nil` are considered optional properties.
+ To require that an object in a Realm always store a non-`nil` value for a property,
+ add the name of the property to the array returned from this method.
+
+ Properties of `RLMObject` type cannot be non-optional. Array and `NSNumber` properties
+ can be non-optional, but there is no reason to do so: arrays do not support storing nil, and
+ if you want a non-optional number you should instead use the primitive type.
+
+ @return    An array of property names that are required.
+ */
++ (NSArray<NSString *> *)requiredProperties;
+
+/**
+ Override this method to provide information related to properties containing linking objects.
+
+ Each property of type `RLMLinkingObjects` must have a key in the dictionary returned by this method consisting
+ of the property name. The corresponding value must be an instance of `RLMPropertyDescriptor` that describes the class
+ and property that the property is linked to.
+
+     return @{ @"owners": [RLMPropertyDescriptor descriptorWithClass:Owner.class propertyName:@"dogs"] };
+
+ @return     A dictionary mapping property names to `RLMPropertyDescriptor` instances.
+ */
++ (NSDictionary<NSString *, RLMPropertyDescriptor *> *)linkingObjectsProperties;
+
+
+#pragma mark - Getting & Querying Objects from the Default Realm
+
+/**
+ Returns all objects of this object type from the default Realm.
+
+ @return    An `RLMResults` containing all objects of this type in the default Realm.
+ */
++ (RLMResults *)allObjects;
+
+/**
+ Returns all objects of this object type matching the given predicate from the default Realm.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return    An `RLMResults` containing all objects of this type in the default Realm that match the given predicate.
+ */
++ (RLMResults *)objectsWhere:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
++ (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args;
+
+
+/**
+ Returns all objects of this object type matching the given predicate from the default Realm.
+
+ @param predicate   The predicate with which to filter the objects.
+
+ @return    An `RLMResults` containing all objects of this type in the default Realm that match the given predicate.
+ */
++ (RLMResults *)objectsWithPredicate:(nullable NSPredicate *)predicate;
+
+/**
+ Retrieves the single instance of this object type with the given primary key from the default Realm.
+
+ Returns the object from the default Realm which has the given primary key, or
+ `nil` if the object does not exist. This is slightly faster than the otherwise
+ equivalent `[[SubclassName objectsWhere:@"primaryKeyPropertyName = %@", key] firstObject]`.
+
+ This method requires that `primaryKey` be overridden on the receiving subclass.
+
+ @return    An object of this object type, or `nil` if an object with the given primary key does not exist.
+ @see       `-primaryKey`
+ */
++ (nullable instancetype)objectForPrimaryKey:(nullable id)primaryKey;
+
+
+#pragma mark - Querying Specific Realms
+
+/**
+ Returns all objects of this object type from the specified Realm.
+
+ @param realm   The Realm to query.
+
+ @return        An `RLMResults` containing all objects of this type in the specified Realm.
+ */
++ (RLMResults *)allObjectsInRealm:(RLMRealm *)realm;
+
+/**
+ Returns all objects of this object type matching the given predicate from the specified Realm.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+ @param realm           The Realm to query.
+
+ @return    An `RLMResults` containing all objects of this type in the specified Realm that match the given predicate.
+ */
++ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
++ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat args:(va_list)args;
+
+/**
+ Returns all objects of this object type matching the given predicate from the specified Realm.
+
+ @param predicate   A predicate to use to filter the elements.
+ @param realm       The Realm to query.
+
+ @return    An `RLMResults` containing all objects of this type in the specified Realm that match the given predicate.
+ */
++ (RLMResults *)objectsInRealm:(RLMRealm *)realm withPredicate:(nullable NSPredicate *)predicate;
+
+/**
+ Retrieves the single instance of this object type with the given primary key from the specified Realm.
+
+ Returns the object from the specified Realm which has the given primary key, or
+ `nil` if the object does not exist. This is slightly faster than the otherwise
+ equivalent `[[SubclassName objectsInRealm:realm where:@"primaryKeyPropertyName = %@", key] firstObject]`.
+
+ This method requires that `primaryKey` be overridden on the receiving subclass.
+
+ @return    An object of this object type, or `nil` if an object with the given primary key does not exist.
+ @see       `-primaryKey`
+ */
++ (nullable instancetype)objectInRealm:(RLMRealm *)realm forPrimaryKey:(nullable id)primaryKey;
+
+#pragma mark - Notifications
+
+/**
+ A callback block for `RLMObject` notifications.
+
+ If the object is deleted from the managing Realm, the block is called with
+ `deleted` set to `YES` and the other two arguments are `nil`. The block will
+ never be called again after this.
+
+ If the object is modified, the block will be called with `deleted` set to
+ `NO`, a `nil` error, and an array of `RLMPropertyChange` objects which
+ indicate which properties of the objects were modified.
+
+ If an error occurs, `deleted` will be `NO`, `changes` will be `nil`, and
+ `error` will include information about the error. The block will never be
+ called again after an error occurs.
+ */
+typedef void (^RLMObjectChangeBlock)(BOOL deleted,
+                                     NSArray<RLMPropertyChange *> *_Nullable changes,
+                                     NSError *_Nullable error);
+
+/**
+ Registers a block to be called each time the object changes.
+
+ The block will be asynchronously called after each write transaction which
+ deletes the object or modifies any of the managed properties of the object,
+ including self-assignments that set a property to its existing value.
+
+ For write transactions performed on different threads or in differen
+ processes, the block will be called when the managing Realm is
+ (auto)refreshed to a version including the changes, while for local write
+ transactions it will be called at some point in the future after the write
+ transaction is committed.
+
+ Notifications are delivered via the standard run loop, and so can't be
+ delivered while the run loop is blocked by other activity. When notifications
+ can't be delivered instantly, multiple notifications may be coalesced into a
+ single notification.
+
+ Unlike with `RLMArray` and `RLMResults`, there is no "initial" callback made
+ after you add a new notification block.
+
+ Only objects which are managed by a Realm can be observed in this way. You
+ must retain the returned token for as long as you want updates to be sent to
+ the block. To stop receiving updates, call `stop` on the token.
+
+ It is safe to capture a strong reference to the observed object within the
+ callback block. There is no retain cycle due to that the callback is retained
+ by the returned token and not by the object itself.
+
+ @warning This method cannot be called during a write transaction, when the
+          containing Realm is read-only, or on an unmanaged object.
+
+ @param block The block to be called whenever a change occurs.
+ @return A token which must be held for as long as you want updates to be delivered.
+ */
+- (RLMNotificationToken *)addNotificationBlock:(RLMObjectChangeBlock)block;
+
+#pragma mark - Other Instance Methods
+
+/**
+ Returns YES if another Realm object instance points to the same object as the receiver in the Realm managing
+ the receiver.
+
+ For object types with a primary, key, `isEqual:` is overridden to use this method (along with a corresponding
+ implementation for `hash`).
+
+ @param object  The object to compare the receiver to.
+
+ @return    Whether the object represents the same object as the receiver.
+ */
+- (BOOL)isEqualToObject:(RLMObject *)object;
+
+#pragma mark - Dynamic Accessors
+
+/// :nodoc:
+- (nullable id)objectForKeyedSubscript:(NSString *)key;
+
+/// :nodoc:
+- (void)setObject:(nullable id)obj forKeyedSubscript:(NSString *)key;
+
+@end
+
+/**
+ Information about a specific property which changed in an `RLMObject` change notification.
+ */
+@interface RLMPropertyChange : NSObject
+
+/**
+ The name of the property which changed.
+ */
+@property (nonatomic, readonly, strong) NSString *name;
+
+/**
+ The value of the property before the change occurred. This will always be `nil`
+ if the change happened on the same thread as the notification and for `RLMArray`
+ properties.
+
+ For object properties this will give the object which was previously linked to,
+ but that object will have its new values and not the values it had before the
+ changes. This means that `previousValue` may be a deleted object, and you will
+ need to check `invalidated` before accessing any of its properties.
+ */
+@property (nonatomic, readonly, strong, nullable) id previousValue;
+
+/**
+ The value of the property after the change occurred. This will always be `nil`
+ for `RLMArray` properties.
+ */
+@property (nonatomic, readonly, strong, nullable) id value;
+@end
+
+#pragma mark - RLMArray Property Declaration
+
+/**
+ Properties on `RLMObject`s of type `RLMArray` must have an associated type. A type is associated
+ with an `RLMArray` property by defining a protocol for the object type that the array should contain.
+ To define the protocol for an object, you can use the macro RLM_ARRAY_TYPE:
+
+     RLM_ARRAY_TYPE(ObjectType)
+     ...
+     @property RLMArray<ObjectType *><ObjectType> *arrayOfObjectTypes;
+  */
+#define RLM_ARRAY_TYPE(RLM_OBJECT_SUBCLASS)\
+@protocol RLM_OBJECT_SUBCLASS <NSObject>   \
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
Libraries external/Realm/Realm.framework/Headers/RLMObjectBase.h

@@ -0,0 +1,43 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMRealm;
+@class RLMSchema;
+@class RLMObjectSchema;
+
+/// :nodoc:
+@interface RLMObjectBase : NSObject
+
+@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated;
+
+- (instancetype)init NS_DESIGNATED_INITIALIZER;
+
++ (NSString *)className;
+
+// Returns whether the class is included in the default set of classes managed by a Realm.
++ (BOOL)shouldIncludeInDefaultSchema;
+
++ (nullable NSString *)_realmObjectName;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 82 - 0
Libraries external/Realm/Realm.framework/Headers/RLMObjectBase_Dynamic.h

@@ -0,0 +1,82 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Realm/RLMObject.h>
+
+@class RLMObjectSchema, RLMRealm;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ Returns the Realm that manages the object, if one exists.
+ 
+ @warning  This function is useful only in specialized circumstances, for example, when building components
+           that integrate with Realm. If you are simply building an app on Realm, it is
+           recommended to retrieve the Realm that manages the object via `RLMObject`.
+
+ @param object	An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`.
+ 
+ @return The Realm which manages this object. Returns `nil `for unmanaged objects.
+ */
+FOUNDATION_EXTERN RLMRealm * _Nullable RLMObjectBaseRealm(RLMObjectBase * _Nullable object);
+
+/**
+ Returns an `RLMObjectSchema` which describes the managed properties of the object.
+ 
+ @warning  This function is useful only in specialized circumstances, for example, when building components
+           that integrate with Realm. If you are simply building an app on Realm, it is
+           recommended to retrieve `objectSchema` via `RLMObject`.
+
+ @param object	An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`.
+ 
+ @return The object schema which lists the managed properties for the object.
+ */
+FOUNDATION_EXTERN RLMObjectSchema * _Nullable RLMObjectBaseObjectSchema(RLMObjectBase * _Nullable object);
+
+/**
+ Returns the object corresponding to a key value.
+
+ @warning  This function is useful only in specialized circumstances, for example, when building components
+           that integrate with Realm. If you are simply building an app on Realm, it is
+           recommended to retrieve key values via `RLMObject`.
+
+ @warning Will throw an `NSUndefinedKeyException` if `key` is not present on the object.
+ 
+ @param object	An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`.
+ @param key		The name of the property.
+ 
+ @return The object for the property requested.
+ */
+FOUNDATION_EXTERN id _Nullable RLMObjectBaseObjectForKeyedSubscript(RLMObjectBase * _Nullable object, NSString *key);
+
+/**
+ Sets a value for a key on the object.
+ 
+ @warning  This function is useful only in specialized circumstances, for example, when building components
+           that integrate with Realm. If you are simply building an app on Realm, it is
+           recommended to set key values via `RLMObject`.
+
+ @warning Will throw an `NSUndefinedKeyException` if `key` is not present on the object.
+ 
+ @param object	An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`.
+ @param key		The name of the property.
+ @param obj		The object to set as the value of the key.
+ */
+FOUNDATION_EXTERN void RLMObjectBaseSetObjectForKeyedSubscript(RLMObjectBase * _Nullable object, NSString *key, id _Nullable obj);
+
+NS_ASSUME_NONNULL_END

+ 72 - 0
Libraries external/Realm/Realm.framework/Headers/RLMObjectSchema.h

@@ -0,0 +1,72 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMProperty;
+
+/**
+ This class represents Realm model object schemas.
+
+ When using Realm, `RLMObjectSchema` instances allow performing migrations and
+ introspecting the database's schema.
+
+ Object schemas map to tables in the core database.
+ */
+@interface RLMObjectSchema : NSObject<NSCopying>
+
+#pragma mark - Properties
+
+/**
+ An array of `RLMProperty` instances representing the managed properties of a class described by the schema.
+ 
+ @see `RLMProperty`
+ */
+@property (nonatomic, readonly, copy) NSArray<RLMProperty *> *properties;
+
+/**
+ The name of the class the schema describes.
+ */
+@property (nonatomic, readonly) NSString *className;
+
+/**
+ The property which serves as the primary key for the class the schema describes, if any.
+ */
+@property (nonatomic, readonly, nullable) RLMProperty *primaryKeyProperty;
+
+#pragma mark - Methods
+
+/**
+ Retrieves an `RLMProperty` object by the property name.
+ 
+ @param propertyName The property's name.
+ 
+ @return An `RLMProperty` object, or `nil` if there is no property with the given name.
+ */
+- (nullable RLMProperty *)objectForKeyedSubscript:(NSString *)propertyName;
+
+/**
+ Returns whether two `RLMObjectSchema` instances are equal.
+ */
+- (BOOL)isEqualToObjectSchema:(RLMObjectSchema *)objectSchema;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 22 - 0
Libraries external/Realm/Realm.framework/Headers/RLMPlatform.h

@@ -0,0 +1,22 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#if !TARGET_OS_IPHONE
+#error Attempting to use Realm's iOS framework in an OSX project.
+#endif
+

+ 121 - 0
Libraries external/Realm/Realm.framework/Headers/RLMProperty.h

@@ -0,0 +1,121 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+#import <Realm/RLMConstants.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// :nodoc:
+@protocol RLMInt
+@end
+
+/// :nodoc:
+@protocol RLMBool
+@end
+
+/// :nodoc:
+@protocol RLMDouble
+@end
+
+/// :nodoc:
+@protocol RLMFloat
+@end
+
+/// :nodoc:
+@interface NSNumber ()<RLMInt, RLMBool, RLMDouble, RLMFloat>
+@end
+
+/**
+ `RLMProperty` instances represent properties managed by a Realm in the context of an object schema. Such properties may
+ be persisted to a Realm file or computed from other data from the Realm.
+ 
+ When using Realm, `RLMProperty` instances allow performing migrations and introspecting the database's schema.
+ 
+ These property instances map to columns in the core database.
+ */
+@interface RLMProperty : NSObject
+
+#pragma mark - Properties
+
+/**
+ The name of the property.
+ */
+@property (nonatomic, readonly) NSString *name;
+
+/**
+ The type of the property.
+ 
+ @see `RLMPropertyType`
+ */
+@property (nonatomic, readonly) RLMPropertyType type;
+
+/**
+ Indicates whether this property is indexed.
+ 
+ @see `RLMObject`
+ */
+@property (nonatomic, readonly) BOOL indexed;
+
+/**
+ For `RLMObject` and `RLMArray` properties, the name of the class of object stored in the property.
+ */
+@property (nonatomic, readonly, copy, nullable) NSString *objectClassName;
+
+/**
+ For linking objects properties, the property name of the property the linking objects property is linked to.
+ */
+@property (nonatomic, readonly, copy, nullable) NSString *linkOriginPropertyName;
+
+/**
+ Indicates whether this property is optional.
+ */
+@property (nonatomic, readonly) BOOL optional;
+
+#pragma mark - Methods
+
+/**
+ Returns whether a given property object is equal to the receiver.
+ */
+- (BOOL)isEqualToProperty:(RLMProperty *)property;
+
+@end
+
+
+/**
+ An `RLMPropertyDescriptor` instance represents a specific property on a given class.
+ */
+@interface RLMPropertyDescriptor : NSObject
+
+/**
+ Creates and returns a property descriptor.
+
+ @param objectClass  The class of this property descriptor.
+ @param propertyName The name of this property descriptor.
+ */
++ (instancetype)descriptorWithClass:(Class)objectClass propertyName:(NSString *)propertyName;
+
+/// The class of the property.
+@property (nonatomic, readonly) Class objectClass;
+
+/// The name of the property.
+@property (nonatomic, readonly) NSString *propertyName;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 652 - 0
Libraries external/Realm/Realm.framework/Headers/RLMRealm.h

@@ -0,0 +1,652 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+#import "RLMConstants.h"
+
+@class RLMRealmConfiguration, RLMRealm, RLMObject, RLMSchema, RLMMigration, RLMNotificationToken, RLMThreadSafeReference;
+
+/**
+ A callback block for opening Realms asynchronously.
+
+ Returns the Realm if the open was successful, or an error otherwise.
+ */
+typedef void(^RLMAsyncOpenRealmCallback)(RLMRealm * _Nullable realm, NSError * _Nullable error);
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ An `RLMRealm` instance (also referred to as "a Realm") represents a Realm
+ database.
+
+ Realms can either be stored on disk (see `+[RLMRealm realmWithURL:]`) or in
+ memory (see `RLMRealmConfiguration`).
+
+ `RLMRealm` instances are cached internally, and constructing equivalent `RLMRealm`
+ objects (for example, by using the same path or identifier) multiple times on a single thread
+ within a single iteration of the run loop will normally return the same
+ `RLMRealm` object.
+
+ If you specifically want to ensure an `RLMRealm` instance is
+ destroyed (for example, if you wish to open a Realm, check some property, and
+ then possibly delete the Realm file and re-open it), place the code which uses
+ the Realm within an `@autoreleasepool {}` and ensure you have no other
+ strong references to it.
+
+ @warning `RLMRealm` instances are not thread safe and cannot be shared across
+ threads or dispatch queues. Trying to do so will cause an exception to be thrown.
+ You must call this method on each thread you want
+ to interact with the Realm on. For dispatch queues, this means that you must
+ call it in each block which is dispatched, as a queue is not guaranteed to run
+ all of its blocks on the same thread.
+ */
+
+@interface RLMRealm : NSObject
+
+#pragma mark - Creating & Initializing a Realm
+
+/**
+ Obtains an instance of the default Realm.
+
+ The default Realm is used by the `RLMObject` class methods
+ which do not take an `RLMRealm` parameter, but is otherwise not special. The
+ default Realm is persisted as *default.realm* under the *Documents* directory of
+ your Application on iOS, and in your application's *Application Support*
+ directory on OS X.
+
+ The default Realm is created using the default `RLMRealmConfiguration`, which
+ can be changed via `+[RLMRealmConfiguration setDefaultConfiguration:]`.
+
+ @return The default `RLMRealm` instance for the current thread.
+ */
++ (instancetype)defaultRealm;
+
+/**
+ Obtains an `RLMRealm` instance with the given configuration.
+
+ @param configuration A configuration object to use when creating the Realm.
+ @param error         If an error occurs, upon return contains an `NSError` object
+                      that describes the problem. If you are not interested in
+                      possible errors, pass in `NULL`.
+
+ @return An `RLMRealm` instance.
+ */
++ (nullable instancetype)realmWithConfiguration:(RLMRealmConfiguration *)configuration error:(NSError **)error;
+
+/**
+ Obtains an `RLMRealm` instance persisted at a specified file URL.
+
+ @param fileURL The local URL of the file the Realm should be saved at.
+
+ @return An `RLMRealm` instance.
+ */
++ (instancetype)realmWithURL:(NSURL *)fileURL;
+
+/**
+ Asynchronously open a Realm and deliver it to a block on the given queue.
+
+ Opening a Realm asynchronously will perform all work needed to get the Realm to
+ a usable state (such as running potentially time-consuming migrations) on a
+ background thread before dispatching to the given queue. In addition,
+ synchronized Realms wait for all remote content available at the time the
+ operation began to be downloaded and available locally.
+
+ @param configuration A configuration object to use when opening the Realm.
+ @param callbackQueue The dispatch queue on which the callback should be run.
+ @param callback      A callback block. If the Realm was successfully opened,
+                      it will be passed in as an argument.
+                      Otherwise, an `NSError` describing what went wrong will be
+                      passed to the block instead.
+
+ @note The returned Realm is confined to the thread on which it was created.
+       Because GCD does not guarantee that queues will always use the same
+       thread, accessing the returned Realm outside the callback block (even if
+       accessed from `callbackQueue`) is unsafe.
+ */
++ (void)asyncOpenWithConfiguration:(RLMRealmConfiguration *)configuration
+                     callbackQueue:(dispatch_queue_t)callbackQueue
+                          callback:(RLMAsyncOpenRealmCallback)callback;
+
+/**
+ The `RLMSchema` used by the Realm.
+ */
+@property (nonatomic, readonly) RLMSchema *schema;
+
+/**
+ Indicates if the Realm is currently engaged in a write transaction.
+
+ @warning   Do not simply check this property and then start a write transaction whenever an object needs to be
+            created, updated, or removed. Doing so might cause a large number of write transactions to be created,
+            degrading performance. Instead, always prefer performing multiple updates during a single transaction.
+ */
+@property (nonatomic, readonly) BOOL inWriteTransaction;
+
+/**
+ The `RLMRealmConfiguration` object that was used to create this `RLMRealm` instance.
+ */
+@property (nonatomic, readonly) RLMRealmConfiguration *configuration;
+
+/**
+ Indicates if this Realm contains any objects.
+ */
+@property (nonatomic, readonly) BOOL isEmpty;
+
+#pragma mark - Notifications
+
+/**
+ The type of a block to run whenever the data within the Realm is modified.
+
+ @see `-[RLMRealm addNotificationBlock:]`
+ */
+typedef void (^RLMNotificationBlock)(RLMNotification notification, RLMRealm *realm);
+
+#pragma mark - Receiving Notification when a Realm Changes
+
+/**
+ Adds a notification handler for changes in this Realm, and returns a notification token.
+
+ Notification handlers are called after each write transaction is committed,
+ either on the current thread or other threads.
+
+ Handler blocks are called on the same thread that they were added on, and may
+ only be added on threads which are currently within a run loop. Unless you are
+ specifically creating and running a run loop on a background thread, this will
+ normally only be the main thread.
+
+ The block has the following definition:
+
+     typedef void(^RLMNotificationBlock)(RLMNotification notification, RLMRealm *realm);
+
+ It receives the following parameters:
+
+ - `NSString` \***notification**:    The name of the incoming notification. See
+                                     `RLMRealmNotification` for information on what
+                                     notifications are sent.
+ - `RLMRealm` \***realm**:           The Realm for which this notification occurred.
+
+ @param block   A block which is called to process Realm notifications.
+
+ @return A token object which must be retained as long as you wish to continue
+         receiving change notifications.
+ */
+- (RLMNotificationToken *)addNotificationBlock:(RLMNotificationBlock)block __attribute__((warn_unused_result));
+
+#pragma mark - Transactions
+
+
+#pragma mark - Writing to a Realm
+
+/**
+ Begins a write transaction on the Realm.
+
+ Only one write transaction can be open at a time for each Realm file. Write
+ transactions cannot be nested, and trying to begin a write transaction on a
+ Realm which is already in a write transaction will throw an exception. Calls to
+ `beginWriteTransaction` from `RLMRealm` instances for the same Realm file in
+ other threads or other processes will block until the current write transaction
+ completes or is cancelled.
+
+ Before beginning the write transaction, `beginWriteTransaction` updates the
+ `RLMRealm` instance to the latest Realm version, as if `refresh` had been
+ called, and generates notifications if applicable. This has no effect if the
+ Realm was already up to date.
+
+ It is rarely a good idea to have write transactions span multiple cycles of
+ the run loop, but if you do wish to do so you will need to ensure that the
+ Realm participating in the write transaction is kept alive until the write
+ transaction is committed.
+ */
+- (void)beginWriteTransaction;
+
+/**
+ Commits all write operations in the current write transaction, and ends the
+ transaction.
+
+ After saving the changes, all notification blocks registered on this specific
+ `RLMRealm` instance are invoked synchronously. Notification blocks registered
+ on other threads or on collections are invoked asynchronously. If you do not
+ want to receive a specific notification for this write tranaction, see
+ `commitWriteTransactionWithoutNotifying:error:`.
+
+ This method can fail if there is insufficient disk space available to save the
+ writes made, or due to unexpected i/o errors. This version of the method throws
+ an exception when errors occur. Use the version with a `NSError` out parameter
+ instead if you wish to handle errors.
+
+ @warning This method may only be called during a write transaction.
+ */
+- (void)commitWriteTransaction NS_SWIFT_UNAVAILABLE("");
+
+/**
+ Commits all write operations in the current write transaction, and ends the
+ transaction.
+
+ After saving the changes, all notification blocks registered on this specific
+ `RLMRealm` instance are invoked synchronously. Notification blocks registered
+ on other threads or on collections are invoked asynchronously. If you do not
+ want to receive a specific notification for this write tranaction, see
+ `commitWriteTransactionWithoutNotifying:error:`.
+
+ This method can fail if there is insufficient disk space available to save the
+ writes made, or due to unexpected i/o errors.
+
+ @warning This method may only be called during a write transaction.
+
+ @param error If an error occurs, upon return contains an `NSError` object
+              that describes the problem. If you are not interested in
+              possible errors, pass in `NULL`.
+
+ @return Whether the transaction succeeded.
+ */
+- (BOOL)commitWriteTransaction:(NSError **)error;
+
+/**
+ Commits all write operations in the current write transaction, without
+ notifying specific notification blocks of the changes.
+
+ After saving the changes, all notification blocks registered on this specific
+ `RLMRealm` instance are invoked synchronously. Notification blocks registered
+ on other threads or on collections are scheduled to be invoked asynchronously.
+
+ You can skip notifiying specific notification blocks about the changes made
+ in this write transaction by passing in their associated notification tokens.
+ This is primarily useful when the write transaction is saving changes already
+ made in the UI and you do not want to have the notification block attempt to
+ re-apply the same changes.
+
+ The tokens passed to this method must be for notifications for this specific
+ `RLMRealm` instance. Notifications for different threads cannot be skipped
+ using this method.
+
+ This method can fail if there is insufficient disk space available to save the
+ writes made, or due to unexpected i/o errors.
+
+ @warning This method may only be called during a write transaction.
+
+ @param tokens An array of notification tokens which were returned from adding
+               callbacks which you do not want to be notified for the changes
+               made in this write transaction.
+ @param error If an error occurs, upon return contains an `NSError` object
+              that describes the problem. If you are not interested in
+              possible errors, pass in `NULL`.
+
+ @return Whether the transaction succeeded.
+ */
+- (BOOL)commitWriteTransactionWithoutNotifying:(NSArray<RLMNotificationToken *> *)tokens error:(NSError **)error;
+
+/**
+ Reverts all writes made during the current write transaction and ends the transaction.
+
+ This rolls back all objects in the Realm to the state they were in at the
+ beginning of the write transaction, and then ends the transaction.
+
+ This restores the data for deleted objects, but does not revive invalidated
+ object instances. Any `RLMObject`s which were added to the Realm will be
+ invalidated rather than becoming unmanaged.
+ Given the following code:
+
+     ObjectType *oldObject = [[ObjectType objectsWhere:@"..."] firstObject];
+     ObjectType *newObject = [[ObjectType alloc] init];
+
+     [realm beginWriteTransaction];
+     [realm addObject:newObject];
+     [realm deleteObject:oldObject];
+     [realm cancelWriteTransaction];
+
+ Both `oldObject` and `newObject` will return `YES` for `isInvalidated`,
+ but re-running the query which provided `oldObject` will once again return
+ the valid object.
+
+ KVO observers on any objects which were modified during the transaction will
+ be notified about the change back to their initial values, but no other
+ notifcations are produced by a cancelled write transaction.
+
+ @warning This method may only be called during a write transaction.
+ */
+- (void)cancelWriteTransaction;
+
+/**
+ Performs actions contained within the given block inside a write transaction.
+
+ @see `[RLMRealm transactionWithBlock:error:]`
+ */
+- (void)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block NS_SWIFT_UNAVAILABLE("");
+
+/**
+ Performs actions contained within the given block inside a write transaction.
+
+ Write transactions cannot be nested, and trying to execute a write transaction
+ on a Realm which is already participating in a write transaction will throw an
+ exception. Calls to `transactionWithBlock:` from `RLMRealm` instances in other
+ threads will block until the current write transaction completes.
+
+ Before beginning the write transaction, `transactionWithBlock:` updates the
+ `RLMRealm` instance to the latest Realm version, as if `refresh` had been called, and
+ generates notifications if applicable. This has no effect if the Realm
+ was already up to date.
+
+ @param block The block containing actions to perform.
+ @param error If an error occurs, upon return contains an `NSError` object
+              that describes the problem. If you are not interested in
+              possible errors, pass in `NULL`.
+
+ @return Whether the transaction succeeded.
+ */
+- (BOOL)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block error:(NSError **)error;
+
+/**
+ Updates the Realm and outstanding objects managed by the Realm to point to the
+ most recent data.
+
+ If the version of the Realm is actually changed, Realm and collection
+ notifications will be sent to reflect the changes. This may take some time, as
+ collection notifications are prepared on a background thread. As a result,
+ calling this method on the main thread is not advisable.
+
+ @return Whether there were any updates for the Realm. Note that `YES` may be
+         returned even if no data actually changed.
+ */
+- (BOOL)refresh;
+
+/**
+ Set this property to `YES` to automatically update this Realm when changes
+ happen in other threads.
+
+ If set to `YES` (the default), changes made on other threads will be reflected
+ in this Realm on the next cycle of the run loop after the changes are
+ committed.  If set to `NO`, you must manually call `-refresh` on the Realm to
+ update it to get the latest data.
+
+ Note that by default, background threads do not have an active run loop and you
+ will need to manually call `-refresh` in order to update to the latest version,
+ even if `autorefresh` is set to `YES`.
+
+ Even with this property enabled, you can still call `-refresh` at any time to
+ update the Realm before the automatic refresh would occur.
+
+ Write transactions will still always advance a Realm to the latest version and
+ produce local notifications on commit even if autorefresh is disabled.
+
+ Disabling `autorefresh` on a Realm without any strong references to it will not
+ have any effect, and `autorefresh` will revert back to `YES` the next time the
+ Realm is created. This is normally irrelevant as it means that there is nothing
+ to refresh (as managed `RLMObject`s, `RLMArray`s, and `RLMResults` have strong
+ references to the Realm that manages them), but it means that setting
+ `RLMRealm.defaultRealm.autorefresh = NO` in
+ `application:didFinishLaunchingWithOptions:` and only later storing Realm
+ objects will not work.
+
+ Defaults to `YES`.
+ */
+@property (nonatomic) BOOL autorefresh;
+
+/**
+ Writes a compacted and optionally encrypted copy of the Realm to the given local URL.
+
+ The destination file cannot already exist.
+
+ Note that if this method is called from within a write transaction, the
+ *current* data is written, not the data from the point when the previous write
+ transaction was committed.
+
+ @param fileURL Local URL to save the Realm to.
+ @param key     Optional 64-byte encryption key to encrypt the new file with.
+ @param error   If an error occurs, upon return contains an `NSError` object
+                that describes the problem. If you are not interested in
+                possible errors, pass in `NULL`.
+
+ @return `YES` if the Realm was successfully written to disk, `NO` if an error occurred.
+*/
+- (BOOL)writeCopyToURL:(NSURL *)fileURL encryptionKey:(nullable NSData *)key error:(NSError **)error;
+
+/**
+ Invalidates all `RLMObject`s, `RLMResults`, `RLMLinkingObjects`, and `RLMArray`s managed by the Realm.
+
+ A Realm holds a read lock on the version of the data accessed by it, so
+ that changes made to the Realm on different threads do not modify or delete the
+ data seen by this Realm. Calling this method releases the read lock,
+ allowing the space used on disk to be reused by later write transactions rather
+ than growing the file. This method should be called before performing long
+ blocking operations on a background thread on which you previously read data
+ from the Realm which you no longer need.
+
+ All `RLMObject`, `RLMResults` and `RLMArray` instances obtained from this
+ `RLMRealm` instance on the current thread are invalidated. `RLMObject`s and `RLMArray`s
+ cannot be used. `RLMResults` will become empty. The Realm itself remains valid,
+ and a new read transaction is implicitly begun the next time data is read from the Realm.
+
+ Calling this method multiple times in a row without reading any data from the
+ Realm, or before ever reading any data from the Realm, is a no-op. This method
+ may not be called on a read-only Realm.
+ */
+- (void)invalidate;
+
+#pragma mark - Accessing Objects
+
+/**
+ Returns the same object as the one referenced when the `RLMThreadSafeReference` was first created,
+ but resolved for the current Realm for this thread. Returns `nil` if this object was deleted after
+ the reference was created.
+
+ @param reference The thread-safe reference to the thread-confined object to resolve in this Realm.
+
+ @warning A `RLMThreadSafeReference` object must be resolved at most once.
+          Failing to resolve a `RLMThreadSafeReference` will result in the source version of the
+          Realm being pinned until the reference is deallocated.
+          An exception will be thrown if a reference is resolved more than once.
+
+ @warning Cannot call within a write transaction.
+
+ @note Will refresh this Realm if the source Realm was at a later version than this one.
+
+ @see `+[RLMThreadSafeReference referenceWithThreadConfined:]`
+ */
+- (nullable id)resolveThreadSafeReference:(RLMThreadSafeReference *)reference
+NS_REFINED_FOR_SWIFT;
+
+#pragma mark - Adding and Removing Objects from a Realm
+
+/**
+ Adds an object to the Realm.
+
+ Once added, this object is considered to be managed by the Realm. It can be retrieved
+ using the `objectsWhere:` selectors on `RLMRealm` and on subclasses of `RLMObject`.
+
+ When added, all child relationships referenced by this object will also be added to
+ the Realm if they are not already in it.
+
+ If the object or any related objects are already being managed by a different Realm
+ an exception will be thrown. Use `-[RLMObject createInRealm:withObject:]` to insert a copy of a managed object
+ into a different Realm.
+
+ The object to be added must be valid and cannot have been previously deleted
+ from a Realm (i.e. `isInvalidated` must be `NO`).
+
+ @warning This method may only be called during a write transaction.
+
+ @param object  The object to be added to this Realm.
+ */
+- (void)addObject:(RLMObject *)object;
+
+/**
+ Adds all the objects in a collection to the Realm.
+
+ This is the equivalent of calling `addObject:` for every object in a collection.
+
+ @warning This method may only be called during a write transaction.
+
+ @param array   An enumerable object such as `NSArray` or `RLMResults` which contains objects to be added to
+                the Realm.
+
+ @see   `addObject:`
+ */
+- (void)addObjects:(id<NSFastEnumeration>)array;
+
+/**
+ Adds or updates an existing object into the Realm.
+
+ The object provided must have a designated primary key. If no objects exist in the Realm
+ with the same primary key value, the object is inserted. Otherwise, the existing object is
+ updated with any changed values.
+
+ As with `addObject:`, the object cannot already be managed by a different
+ Realm. Use `-[RLMObject createOrUpdateInRealm:withValue:]` to copy values to
+ a different Realm.
+
+ @warning This method may only be called during a write transaction.
+
+ @param object  The object to be added or updated.
+ */
+- (void)addOrUpdateObject:(RLMObject *)object;
+
+/**
+ Adds or updates all the objects in a collection into the Realm.
+
+ This is the equivalent of calling `addOrUpdateObject:` for every object in a collection.
+
+ @warning This method may only be called during a write transaction.
+
+ @param array  An `NSArray`, `RLMArray`, or `RLMResults` of `RLMObject`s (or subclasses) to be added to the Realm.
+
+ @see   `addOrUpdateObject:`
+ */
+- (void)addOrUpdateObjectsFromArray:(id)array;
+
+/**
+ Deletes an object from the Realm. Once the object is deleted it is considered invalidated.
+
+ @warning This method may only be called during a write transaction.
+
+ @param object  The object to be deleted.
+ */
+- (void)deleteObject:(RLMObject *)object;
+
+/**
+ Deletes one or more objects from the Realm.
+
+ This is the equivalent of calling `deleteObject:` for every object in a collection.
+
+ @warning This method may only be called during a write transaction.
+
+ @param array  An `RLMArray`, `NSArray`, or `RLMResults` of `RLMObject`s (or subclasses) to be deleted.
+
+ @see `deleteObject:`
+ */
+- (void)deleteObjects:(id)array;
+
+/**
+ Deletes all objects from the Realm.
+
+ @warning This method may only be called during a write transaction.
+
+ @see `deleteObject:`
+ */
+- (void)deleteAllObjects;
+
+
+#pragma mark - Migrations
+
+/**
+ The type of a migration block used to migrate a Realm.
+
+ @param migration   A `RLMMigration` object used to perform the migration. The
+                    migration object allows you to enumerate and alter any
+                    existing objects which require migration.
+
+ @param oldSchemaVersion    The schema version of the Realm being migrated.
+ */
+typedef void (^RLMMigrationBlock)(RLMMigration *migration, uint64_t oldSchemaVersion);
+
+/**
+ Returns the schema version for a Realm at a given local URL.
+
+ @param fileURL Local URL to a Realm file.
+ @param key     64-byte key used to encrypt the file, or `nil` if it is unencrypted.
+ @param error   If an error occurs, upon return contains an `NSError` object
+                that describes the problem. If you are not interested in
+                possible errors, pass in `NULL`.
+
+ @return The version of the Realm at `fileURL`, or `RLMNotVersioned` if the version cannot be read.
+ */
++ (uint64_t)schemaVersionAtURL:(NSURL *)fileURL encryptionKey:(nullable NSData *)key error:(NSError **)error
+NS_REFINED_FOR_SWIFT;
+
+/**
+ Performs the given Realm configuration's migration block on a Realm at the given path.
+
+ This method is called automatically when opening a Realm for the first time and does
+ not need to be called explicitly. You can choose to call this method to control
+ exactly when and how migrations are performed.
+
+ @param configuration The Realm configuration used to open and migrate the Realm.
+ @return              The error that occurred while applying the migration, if any.
+
+ @see                 RLMMigration
+ */
++ (nullable NSError *)migrateRealm:(RLMRealmConfiguration *)configuration
+__deprecated_msg("Use `performMigrationForConfiguration:error:`") NS_REFINED_FOR_SWIFT;
+
+/**
+ Performs the given Realm configuration's migration block on a Realm at the given path.
+
+ This method is called automatically when opening a Realm for the first time and does
+ not need to be called explicitly. You can choose to call this method to control
+ exactly when and how migrations are performed.
+
+ @param configuration The Realm configuration used to open and migrate the Realm.
+ @return              The error that occurred while applying the migration, if any.
+
+ @see                 RLMMigration
+ */
++ (BOOL)performMigrationForConfiguration:(RLMRealmConfiguration *)configuration error:(NSError **)error;
+
+#pragma mark - Unavailable Methods
+
+/**
+ RLMRealm instances are cached internally by Realm and cannot be created directly.
+
+ Use `+[RLMRealm defaultRealm]`, `+[RLMRealm realmWithConfiguration:error:]` or
+ `+[RLMRealm realmWithURL]` to obtain a reference to an RLMRealm.
+ */
+- (instancetype)init __attribute__((unavailable("Use +defaultRealm, +realmWithConfiguration: or +realmWithURL:.")));
+
+/**
+ RLMRealm instances are cached internally by Realm and cannot be created directly.
+
+ Use `+[RLMRealm defaultRealm]`, `+[RLMRealm realmWithConfiguration:error:]` or
+ `+[RLMRealm realmWithURL]` to obtain a reference to an RLMRealm.
+ */
++ (instancetype)new __attribute__((unavailable("Use +defaultRealm, +realmWithConfiguration: or +realmWithURL:.")));
+
+@end
+
+/**
+ A token which is returned from methods which subscribe to changes to a Realm.
+
+ Change subscriptions in Realm return an `RLMNotificationToken` instance,
+ which can be used to unsubscribe from the changes. You must store a strong
+ reference to the token for as long as you want to continue to receive notifications.
+ When you wish to stop, call the `-stop` method. Notifications are also stopped if
+ the token is deallocated.
+ */
+@interface RLMNotificationToken : NSObject
+/// Stops notifications for the change subscription that returned this token.
+- (void)stop;
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
Libraries external/Realm/Realm.framework/Headers/RLMRealmConfiguration+Sync.h

@@ -0,0 +1,43 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Realm/RLMRealmConfiguration.h>
+
+#import "RLMSyncUtil.h"
+
+@class RLMSyncConfiguration;
+
+/// :nodoc:
+@interface RLMRealmConfiguration (Sync)
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A configuration object representing configuration state for Realms intended
+ to sync with a Realm Object Server.
+ 
+ This property is mutually exclusive with both `inMemoryIdentifier` and `fileURL`;
+ setting any one of the three properties will automatically nil out the other two.
+ 
+ @see `RLMSyncConfiguration`
+ */
+@property (nullable, nonatomic) RLMSyncConfiguration *syncConfiguration;
+
+NS_ASSUME_NONNULL_END
+
+@end

+ 121 - 0
Libraries external/Realm/Realm.framework/Headers/RLMRealmConfiguration.h

@@ -0,0 +1,121 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2015 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+#import <Realm/RLMRealm.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A block called when opening a Realm for the first time during the life
+ of a process to determine if it should be compacted before being returned
+ to the user. It is passed the total file size (data + free space) and the total
+ bytes used by data in the file.
+
+ Return `YES` to indicate that an attempt to compact the file should be made.
+ The compaction will be skipped if another process is accessing it.
+ */
+typedef BOOL (^RLMShouldCompactOnLaunchBlock)(NSUInteger totalBytes, NSUInteger bytesUsed);
+
+/**
+ An `RLMRealmConfiguration` instance describes the different options used to
+ create an instance of a Realm.
+
+ `RLMRealmConfiguration` instances are just plain `NSObject`s. Unlike `RLMRealm`s
+ and `RLMObject`s, they can be freely shared between threads as long as you do not
+ mutate them.
+ 
+ Creating configuration objects for class subsets (by setting the
+ `objectClasses` property) can be expensive. Because of this, you will normally want to
+ cache and reuse a single configuration object for each distinct configuration rather than 
+ creating a new object each time you open a Realm.
+ */
+@interface RLMRealmConfiguration : NSObject<NSCopying>
+
+#pragma mark - Default Configuration
+
+/**
+ Returns the default configuration used to create Realms when no other
+ configuration is explicitly specified (i.e. `+[RLMRealm defaultRealm]`).
+
+ @return The default Realm configuration.
+ */
++ (instancetype)defaultConfiguration;
+
+/**
+ Sets the default configuration to the given `RLMRealmConfiguration`.
+
+ @param configuration The new default Realm configuration.
+ */
++ (void)setDefaultConfiguration:(RLMRealmConfiguration *)configuration;
+
+#pragma mark - Properties
+
+/// The local URL of the Realm file. Mutually exclusive with `inMemoryIdentifier`.
+@property (nonatomic, copy, nullable) NSURL *fileURL;
+
+/// A string used to identify a particular in-memory Realm. Mutually exclusive with `fileURL`.
+@property (nonatomic, copy, nullable) NSString *inMemoryIdentifier;
+
+/// A 64-byte key to use to encrypt the data, or `nil` if encryption is not enabled.
+@property (nonatomic, copy, nullable) NSData *encryptionKey;
+
+/// Whether to open the Realm in read-only mode.
+///
+/// This is required to be able to open Realm files which are not writeable or
+/// are in a directory which is not writeable. This should only be used on files
+/// which will not be modified by anyone while they are open, and not just to
+/// get a read-only view of a file which may be written to by another thread or
+/// process. Opening in read-only mode requires disabling Realm's reader/writer
+/// coordination, so committing a write transaction from another process will
+/// result in crashes.
+@property (nonatomic) BOOL readOnly;
+
+/// The current schema version.
+@property (nonatomic) uint64_t schemaVersion;
+
+/// The block which migrates the Realm to the current version.
+@property (nonatomic, copy, nullable) RLMMigrationBlock migrationBlock;
+
+/**
+ Whether to recreate the Realm file with the provided schema if a migration is required.
+ This is the case when the stored schema differs from the provided schema or
+ the stored schema version differs from the version on this configuration.
+ Setting this property to `YES` deletes the file if a migration would otherwise be required or executed.
+
+ @note Setting this property to `YES` doesn't disable file format migrations.
+ */
+@property (nonatomic) BOOL deleteRealmIfMigrationNeeded;
+
+/**
+ A block called when opening a Realm for the first time during the life
+ of a process to determine if it should be compacted before being returned
+ to the user. It is passed the total file size (data + free space) and the total
+ bytes used by data in the file.
+
+ Return `YES` to indicate that an attempt to compact the file should be made.
+ The compaction will be skipped if another process is accessing it.
+ */
+@property (nonatomic, copy, nullable) RLMShouldCompactOnLaunchBlock shouldCompactOnLaunch;
+
+/// The classes managed by the Realm.
+@property (nonatomic, copy, nullable) NSArray *objectClasses;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 118 - 0
Libraries external/Realm/Realm.framework/Headers/RLMRealm_Dynamic.h

@@ -0,0 +1,118 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Realm/RLMRealm.h>
+
+#import <Realm/RLMObjectSchema.h>
+#import <Realm/RLMProperty.h>
+
+@class RLMResults;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RLMRealm (Dynamic)
+
+#pragma mark - Getting Objects from a Realm
+
+/**
+ Returns all objects of a given type from the Realm.
+
+ @warning This method is useful only in specialized circumstances, for example, when building components
+          that integrate with Realm. The preferred way to get objects of a single class is to use the class
+          methods on `RLMObject`.
+
+ @param className   The name of the `RLMObject` subclass to retrieve on (e.g. `MyClass.className`).
+
+ @return    An `RLMResults` containing all objects in the Realm of the given type.
+
+ @see       `+[RLMObject allObjects]`
+ */
+- (RLMResults *)allObjects:(NSString *)className;
+
+/**
+ Returns all objects matching the given predicate from the Realm.
+
+ @warning This method is useful only in specialized circumstances, for example, when building components
+          that integrate with Realm. The preferred way to get objects of a single class is to use the class
+          methods on `RLMObject`.
+
+ @param className       The type of objects you are looking for (name of the class).
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return    An `RLMResults` containing results matching the given predicate.
+
+ @see       `+[RLMObject objectsWhere:]`
+ */
+- (RLMResults *)objects:(NSString *)className where:(NSString *)predicateFormat, ...;
+
+/**
+ Returns all objects matching the given predicate from the Realm.
+
+ @warning This method is useful only in specialized circumstances, for example, when building components
+          that integrate with Realm. The preferred way to get objects of a single class is to use the class
+          methods on `RLMObject`.
+
+ @param className   The type of objects you are looking for (name of the class).
+ @param predicate   The predicate with which to filter the objects.
+
+ @return    An `RLMResults` containing results matching the given predicate.
+
+ @see       `+[RLMObject objectsWhere:]`
+ */
+- (RLMResults *)objects:(NSString *)className withPredicate:(NSPredicate *)predicate;
+
+/**
+ Returns the object of the given type with the given primary key from the Realm.
+
+ @warning This method is useful only in specialized circumstances, for example, when building components 
+          that integrate with Realm. The preferred way to get an object of a single class is to use the class
+          methods on `RLMObject`.
+ 
+ @param className   The class name for the object you are looking for.
+ @param primaryKey  The primary key value for the object you are looking for.
+ 
+ @return    An object, or `nil` if an object with the given primary key does not exist.
+ 
+ @see       `+[RLMObject objectForPrimaryKey:]`
+ */
+- (nullable RLMObject *)objectWithClassName:(NSString *)className forPrimaryKey:(id)primaryKey;
+
+/**
+ Creates an `RLMObject` instance of type `className` in the Realm, and populates it using a given object.
+ 
+ The `value` argument is used to populate the object. It can be a key-value coding compliant object, an array or
+ dictionary returned from the methods in `NSJSONSerialization`, or an array containing one element for each managed
+ property. An exception will be thrown if any required properties are not present and those properties were not defined
+ with default values.
+
+ When passing in an array as the `value` argument, all properties must be present, valid and in the same order as the
+ properties defined in the model.
+
+ @warning This method is useful only in specialized circumstances, for example, when building components
+          that integrate with Realm. If you are simply building an app on Realm, it is recommended to
+          use `[RLMObject createInDefaultRealmWithValue:]`.
+
+ @param value    The value used to populate the object.
+
+ @return    An `RLMObject` instance of type `className`.
+ */
+-(RLMObject *)createObject:(NSString *)className withValue:(id)value;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 342 - 0
Libraries external/Realm/Realm.framework/Headers/RLMResults.h

@@ -0,0 +1,342 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+#import <Realm/RLMCollection.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMObject, RLMRealm, RLMNotificationToken;
+
+/**
+ `RLMResults` is an auto-updating container type in Realm returned from object
+ queries. It represents the results of the query in the form of a collection of objects.
+
+ `RLMResults` can be queried using the same predicates as `RLMObject` and `RLMArray`,
+ and you can chain queries to further filter results.
+
+ `RLMResults` always reflect the current state of the Realm on the current thread,
+ including during write transactions on the current thread. The one exception to
+ this is when using `for...in` fast enumeration, which will always enumerate
+ over the objects which matched the query when the enumeration is begun, even if
+ some of them are deleted or modified to be excluded by the filter during the
+ enumeration.
+
+ `RLMResults` are lazily evaluated the first time they are accessed; they only
+ run queries when the result of the query is requested. This means that 
+ chaining several temporary `RLMResults` to sort and filter your data does not 
+ perform any extra work processing the intermediate state.
+
+ Once the results have been evaluated or a notification block has been added,
+ the results are eagerly kept up-to-date, with the work done to keep them
+ up-to-date done on a background thread whenever possible.
+
+ `RLMResults` cannot be directly instantiated.
+ */
+@interface RLMResults<RLMObjectType: RLMObject *> : NSObject<RLMCollection, NSFastEnumeration>
+
+#pragma mark - Properties
+
+/**
+ The number of objects in the results collection.
+ */
+@property (nonatomic, readonly, assign) NSUInteger count;
+
+/**
+ The class name (i.e. type) of the `RLMObject`s contained in the results collection.
+ */
+@property (nonatomic, readonly, copy) NSString *objectClassName;
+
+/**
+ The Realm which manages this results collection.
+ */
+@property (nonatomic, readonly) RLMRealm *realm;
+
+/**
+ Indicates if the results collection is no longer valid.
+
+ The results collection becomes invalid if `invalidate` is called on the containing `realm`.
+ An invalidated results collection can be accessed, but will always be empty.
+ */
+@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated;
+
+#pragma mark - Accessing Objects from an RLMResults
+
+/**
+ Returns the object at the index specified.
+
+ @param index   The index to look up.
+
+ @return An `RLMObject` of the type contained in the results collection.
+ */
+- (RLMObjectType)objectAtIndex:(NSUInteger)index;
+
+/**
+ Returns the first object in the results collection.
+
+ Returns `nil` if called on an empty results collection.
+
+ @return An `RLMObject` of the type contained in the results collection.
+ */
+- (nullable RLMObjectType)firstObject;
+
+/**
+ Returns the last object in the results collection.
+
+ Returns `nil` if called on an empty results collection.
+
+ @return An `RLMObject` of the type contained in the results collection.
+ */
+- (nullable RLMObjectType)lastObject;
+
+#pragma mark - Querying Results
+
+/**
+ Returns the index of an object in the results collection.
+
+ Returns `NSNotFound` if the object is not found in the results collection.
+
+ @param object  An object (of the same type as returned from the `objectClassName` selector).
+ */
+- (NSUInteger)indexOfObject:(RLMObjectType)object;
+
+/**
+ Returns the index of the first object in the results collection matching the predicate.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return    The index of the object, or `NSNotFound` if the object is not found in the results collection.
+ */
+- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
+- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args;
+
+/**
+ Returns the index of the first object in the results collection matching the predicate.
+
+ @param predicate   The predicate with which to filter the objects.
+
+ @return    The index of the object, or `NSNotFound` if the object is not found in the results collection.
+ */
+- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate;
+
+/**
+ Returns all the objects matching the given predicate in the results collection.
+
+ @param predicateFormat A predicate format string, optionally followed by a variable number of arguments.
+
+ @return                An `RLMResults` of objects that match the given predicate.
+ */
+- (RLMResults<RLMObjectType> *)objectsWhere:(NSString *)predicateFormat, ...;
+
+/// :nodoc:
+- (RLMResults<RLMObjectType> *)objectsWhere:(NSString *)predicateFormat args:(va_list)args;
+
+/**
+ Returns all the objects matching the given predicate in the results collection.
+
+ @param predicate   The predicate with which to filter the objects.
+
+ @return            An `RLMResults` of objects that match the given predicate.
+ */
+- (RLMResults<RLMObjectType> *)objectsWithPredicate:(NSPredicate *)predicate;
+
+/**
+ Returns a sorted `RLMResults` from an existing results collection.
+
+ @param keyPath     The key path to sort by.
+ @param ascending   The direction to sort in.
+
+ @return    An `RLMResults` sorted by the specified key path.
+ */
+- (RLMResults<RLMObjectType> *)sortedResultsUsingKeyPath:(NSString *)keyPath ascending:(BOOL)ascending;
+
+/**
+ Returns a sorted `RLMResults` from an existing results collection.
+
+ @param property    The property name to sort by.
+ @param ascending   The direction to sort in.
+
+ @return    An `RLMResults` sorted by the specified property.
+ */
+- (RLMResults<RLMObjectType> *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending
+    __deprecated_msg("Use `-sortedResultsUsingKeyPath:ascending:`");
+
+/**
+ Returns a sorted `RLMResults` from an existing results collection.
+
+ @param properties  An array of `RLMSortDescriptor`s to sort by.
+
+ @return    An `RLMResults` sorted by the specified properties.
+ */
+- (RLMResults<RLMObjectType> *)sortedResultsUsingDescriptors:(NSArray<RLMSortDescriptor *> *)properties;
+
+#pragma mark - Notifications
+
+/**
+ Registers a block to be called each time the results collection changes.
+
+ The block will be asynchronously called with the initial results collection,
+ and then called again after each write transaction which changes either any
+ of the objects in the results, or which objects are in the results.
+
+ The `change` parameter will be `nil` the first time the block is called.
+ For each call after that, it will contain information about
+ which rows in the results collection were added, removed or modified. If a
+ write transaction did not modify any objects in the results collection,
+ the block is not called at all. See the `RLMCollectionChange` documentation for
+ information on how the changes are reported and an example of updating a 
+ `UITableView`.
+
+ If an error occurs the block will be called with `nil` for the results
+ parameter and a non-`nil` error. Currently the only errors that can occur are
+ when opening the Realm on the background worker thread.
+
+ At the time when the block is called, the `RLMResults` object will be fully
+ evaluated and up-to-date, and as long as you do not perform a write transaction
+ on the same thread or explicitly call `-[RLMRealm refresh]`, accessing it will
+ never perform blocking work.
+
+ Notifications are delivered via the standard run loop, and so can't be
+ delivered while the run loop is blocked by other activity. When
+ notifications can't be delivered instantly, multiple notifications may be
+ coalesced into a single notification. This can include the notification
+ with the initial results. For example, the following code performs a write
+ transaction immediately after adding the notification block, so there is no
+ opportunity for the initial notification to be delivered first. As a
+ result, the initial notification will reflect the state of the Realm after
+ the write transaction.
+
+     RLMResults<Dog *> *results = [Dog allObjects];
+     NSLog(@"dogs.count: %zu", dogs.count); // => 0
+     self.token = [results addNotificationBlock:^(RLMResults *dogs,
+                                                  RLMCollectionChange *changes,
+                                                  NSError *error) {
+         // Only fired once for the example
+         NSLog(@"dogs.count: %zu", dogs.count); // => 1
+     }];
+     [realm transactionWithBlock:^{
+         Dog *dog = [[Dog alloc] init];
+         dog.name = @"Rex";
+         [realm addObject:dog];
+     }];
+     // end of run loop execution context
+
+ You must retain the returned token for as long as you want updates to continue
+ to be sent to the block. To stop receiving updates, call `-stop` on the token.
+
+ @warning This method cannot be called during a write transaction, or when the
+          containing Realm is read-only.
+
+ @param block The block to be called whenever a change occurs.
+ @return A token which must be held for as long as you want updates to be delivered.
+ */
+- (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMResults<RLMObjectType> *__nullable results,
+                                                         RLMCollectionChange *__nullable change,
+                                                         NSError *__nullable error))block __attribute__((warn_unused_result));
+
+#pragma mark - Aggregating Property Values
+
+/**
+ Returns the minimum (lowest) value of the given property among all the objects
+ represented by the results collection.
+
+     NSNumber *min = [results minOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose minimum value is desired. Only properties of types `int`, `float`, `double`, and
+                 `NSDate` are supported.
+
+ @return The minimum value of the property, or `nil` if the Results are empty.
+ */
+- (nullable id)minOfProperty:(NSString *)property;
+
+/**
+ Returns the maximum (highest) value of the given property among all the objects represented by the results collection.
+
+     NSNumber *max = [results maxOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose maximum value is desired. Only properties of types `int`, `float`, `double`, and 
+                 `NSDate` are supported.
+
+ @return The maximum value of the property, or `nil` if the Results are empty.
+ */
+- (nullable id)maxOfProperty:(NSString *)property;
+
+/**
+ Returns the sum of the values of a given property over all the objects represented by the results collection.
+
+     NSNumber *sum = [results sumOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose values should be summed. Only properties of types `int`, `float`, and `double` are
+                 supported.
+
+ @return The sum of the given property.
+ */
+- (NSNumber *)sumOfProperty:(NSString *)property;
+
+/**
+ Returns the average value of a given property over the objects represented by the results collection.
+
+     NSNumber *average = [results averageOfProperty:@"age"];
+
+ @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties.
+
+ @param property The property whose average value should be calculated. Only properties of types `int`, `float`, and
+                 `double` are supported.
+
+ @return    The average value of the given property, or `nil` if the Results are empty.
+ */
+- (nullable NSNumber *)averageOfProperty:(NSString *)property;
+
+/// :nodoc:
+- (RLMObjectType)objectAtIndexedSubscript:(NSUInteger)index;
+
+#pragma mark - Unavailable Methods
+
+/**
+ `-[RLMResults init]` is not available because `RLMResults` cannot be created directly.
+ `RLMResults` can be obtained by querying a Realm.
+ */
+- (instancetype)init __attribute__((unavailable("RLMResults cannot be created directly")));
+
+/**
+ `+[RLMResults new]` is not available because `RLMResults` cannot be created directly.
+ `RLMResults` can be obtained by querying a Realm.
+ */
++ (instancetype)new __attribute__((unavailable("RLMResults cannot be created directly")));
+
+@end
+
+/**
+ `RLMLinkingObjects` is an auto-updating container type. It represents a collection of objects that link to its
+ parent object.
+ 
+ For more information, please see the "Inverse Relationships" section in the
+ [documentation](https://realm.io/docs/objc/latest/#relationships).
+ */
+@interface RLMLinkingObjects<RLMObjectType: RLMObject *> : RLMResults
+@end
+
+NS_ASSUME_NONNULL_END

+ 77 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSchema.h

@@ -0,0 +1,77 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class RLMObjectSchema;
+
+/**
+ `RLMSchema` instances represent collections of model object schemas managed by a Realm.
+
+ When using Realm, `RLMSchema` instances allow performing migrations and
+ introspecting the database's schema.
+
+ Schemas map to collections of tables in the core database.
+ */
+@interface RLMSchema : NSObject<NSCopying>
+
+#pragma mark - Properties
+
+/**
+ An `NSArray` containing `RLMObjectSchema`s for all object types in the Realm.
+ 
+ This property is intended to be used during migrations for dynamic introspection.
+
+ @see `RLMObjectSchema`
+ */
+@property (nonatomic, readonly, copy) NSArray<RLMObjectSchema *> *objectSchema;
+
+#pragma mark - Methods
+
+/**
+ Returns an `RLMObjectSchema` for the given class name in the schema.
+
+ @param className   The object class name.
+ @return            An `RLMObjectSchema` for the given class in the schema.
+
+ @see               `RLMObjectSchema`
+ */
+- (nullable RLMObjectSchema *)schemaForClassName:(NSString *)className;
+
+/**
+ Looks up and returns an `RLMObjectSchema` for the given class name in the Realm.
+ 
+ If there is no object of type `className` in the schema, an exception will be thrown.
+
+ @param className   The object class name.
+ @return            An `RLMObjectSchema` for the given class in this Realm.
+
+ @see               `RLMObjectSchema`
+ */
+- (RLMObjectSchema *)objectForKeyedSubscript:(NSString *)className;
+
+/**
+ Returns whether two `RLMSchema` instances are equivalent.
+ */
+- (BOOL)isEqualToSchema:(RLMSchema *)schema;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 69 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncConfiguration.h

@@ -0,0 +1,69 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+@class RLMSyncUser;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A configuration object representing configuration state for a Realm which is intended to sync with a Realm Object
+ Server.
+ */
+@interface RLMSyncConfiguration : NSObject
+
+/// The user to which the remote Realm belongs.
+@property (nonatomic, readonly) RLMSyncUser *user;
+
+/**
+ The URL of the remote Realm upon the Realm Object Server.
+ 
+ @warning The URL cannot end with `.realm`, `.realm.lock` or `.realm.management`.
+ */
+@property (nonatomic, readonly) NSURL *realmURL;
+
+
+/**
+ Whether SSL certificate validation is enabled for the connection associated
+ with this configuration value. SSL certificate validation is ON by default.
+
+ @warning NEVER disable certificate validation for clients and servers in production.
+ */
+@property (nonatomic) BOOL enableSSLValidation;
+
+/**
+ Create a sync configuration instance.
+
+ @param user    A `RLMSyncUser` that owns the Realm at the given URL.
+ @param url     The unresolved absolute URL to the Realm on the Realm Object Server, e.g.
+                `realm://example.org/~/path/to/realm`. "Unresolved" means the path should
+                contain the wildcard marker `~`, which will automatically be filled in with
+                the user identity by the Realm Object Server.
+ */
+- (instancetype)initWithUser:(RLMSyncUser *)user realmURL:(NSURL *)url;
+
+/// :nodoc:
+- (instancetype)init __attribute__((unavailable("This type cannot be created directly")));
+
+/// :nodoc:
++ (instancetype)new __attribute__((unavailable("This type cannot be created directly")));
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 106 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncCredentials.h

@@ -0,0 +1,106 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import "RLMSyncUtil.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A token representing an identity provider's credentials.
+typedef NSString *RLMSyncCredentialsToken;
+
+/// A type representing the unique identifier of a Realm Object Server identity provider.
+typedef NSString *RLMIdentityProvider RLM_EXTENSIBLE_STRING_ENUM;
+
+/// The debug identity provider, which accepts any token string and creates a user associated with that token if one
+/// does not yet exist. Not enabled for Realm Object Server configured for production.
+extern RLMIdentityProvider const RLMIdentityProviderDebug;
+
+/// The username/password identity provider. User accounts are handled by the Realm Object Server directly without the
+/// involvement of a third-party identity provider.
+extern RLMIdentityProvider const RLMIdentityProviderUsernamePassword;
+
+/// A Facebook account as an identity provider.
+extern RLMIdentityProvider const RLMIdentityProviderFacebook;
+
+/// A Google account as an identity provider.
+extern RLMIdentityProvider const RLMIdentityProviderGoogle;
+
+/// A CloudKit account as an identity provider.
+extern RLMIdentityProvider const RLMIdentityProviderCloudKit;
+
+/**
+ Opaque credentials representing a specific Realm Object Server user.
+ */
+@interface RLMSyncCredentials : NSObject
+
+/// An opaque credentials token containing information that uniquely identifies a Realm Object Server user.
+@property (nonatomic, readonly) RLMSyncCredentialsToken token;
+
+/// The name of the identity provider which generated the credentials token.
+@property (nonatomic, readonly) RLMIdentityProvider provider;
+
+/// A dictionary containing additional pertinent information. In most cases this is automatically configured.
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *userInfo;
+
+/**
+ Construct and return credentials from a Facebook account token.
+ */
++ (instancetype)credentialsWithFacebookToken:(RLMSyncCredentialsToken)token;
+
+/**
+ Construct and return credentials from a Google account token.
+ */
++ (instancetype)credentialsWithGoogleToken:(RLMSyncCredentialsToken)token;
+
+/**
+ Construct and return credentials from an CloudKit account token.
+ */
++ (instancetype)credentialsWithCloudKitToken:(RLMSyncCredentialsToken)token;
+
+/**
+ Construct and return credentials from a Realm Object Server username and password.
+ */
++ (instancetype)credentialsWithUsername:(NSString *)username
+                               password:(NSString *)password
+                               register:(BOOL)shouldRegister;
+
+/**
+ Construct and return special credentials representing a token that can be directly used to open a Realm. The identity
+ is used to uniquely identify the user across application launches.
+ */
++ (instancetype)credentialsWithAccessToken:(RLMServerToken)accessToken identity:(NSString *)identity;
+
+/**
+ Construct and return credentials with a custom token string, identity provider string, and optional user info. In most
+ cases, the convenience initializers should be used instead.
+ */
+- (instancetype)initWithCustomToken:(RLMSyncCredentialsToken)token
+                           provider:(RLMIdentityProvider)provider
+                           userInfo:(nullable NSDictionary *)userInfo NS_DESIGNATED_INITIALIZER;
+
+/// :nodoc:
+- (instancetype)init __attribute__((unavailable("RLMSyncCredentials cannot be created directly")));
+
+/// :nodoc:
++ (instancetype)new __attribute__((unavailable("RLMSyncCredentials cannot be created directly")));
+
+NS_ASSUME_NONNULL_END
+
+@end

+ 118 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncManager.h

@@ -0,0 +1,118 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import "RLMSyncUtil.h"
+
+@class RLMSyncSession;
+
+/// An enum representing different levels of sync-related logging that can be configured.
+typedef NS_ENUM(NSUInteger, RLMSyncLogLevel) {
+    /// Nothing will ever be logged.
+    RLMSyncLogLevelOff,
+    /// Only fatal errors will be logged.
+    RLMSyncLogLevelFatal,
+    /// Only errors will be logged.
+    RLMSyncLogLevelError,
+    /// Warnings and errors will be logged.
+    RLMSyncLogLevelWarn,
+    /// Information about sync events will be logged. Fewer events will be logged in order to avoid overhead.
+    RLMSyncLogLevelInfo,
+    /// Information about sync events will be logged. More events will be logged than with `RLMSyncLogLevelInfo`.
+    RLMSyncLogLevelDetail,
+    /// Log information that can aid in debugging.
+    ///
+    /// - warning: Will incur a measurable performance impact.
+    RLMSyncLogLevelDebug,
+    /// Log information that can aid in debugging. More events will be logged than with `RLMSyncLogLevelDebug`.
+    ///
+    /// - warning: Will incur a measurable performance impact.
+    RLMSyncLogLevelTrace,
+    /// Log information that can aid in debugging. More events will be logged than with `RLMSyncLogLevelTrace`.
+    ///
+    /// - warning: Will incur a measurable performance impact.
+    RLMSyncLogLevelAll
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A block type representing a block which can be used to report a sync-related error to the application. If the error
+/// pertains to a specific session, that session will also be passed into the block.
+typedef void(^RLMSyncErrorReportingBlock)(NSError *, RLMSyncSession * _Nullable);
+
+/**
+ A singleton manager which serves as a central point for sync-related configuration.
+ */
+@interface RLMSyncManager : NSObject
+
+/**
+ A block which can optionally be set to report sync-related errors to your application.
+
+ Any error reported through this block will be of the `RLMSyncError` type, and marked
+ with the `RLMSyncErrorDomain` domain.
+
+ Errors reported through this mechanism are fatal, with several exceptions. Please consult
+ `RLMSyncError` for information about the types of errors that can be reported through
+ the block, and for for suggestions on handling recoverable error codes.
+
+ @see `RLMSyncError`
+ */
+@property (nullable, nonatomic, copy) RLMSyncErrorReportingBlock errorHandler;
+
+/**
+ A reverse-DNS string uniquely identifying this application. In most cases this is automatically set by the SDK, and
+ does not have to be explicitly configured.
+ */
+@property (nonatomic, copy) NSString *appID;
+
+/**
+ Whether SSL certificate validation should be disabled.
+ 
+ Once this value is set (either way), it will be used as the default value for SSL
+ validation when initializing new sync configuration values. A given configuration's
+ SSL validation setting can still be overriden from the global default by setting it
+ explicitly.
+
+ @warning NEVER disable certificate validation for clients and servers in production.
+ */
+@property (nonatomic) BOOL disableSSLValidation __deprecated_msg("Set `enableSSLValidation` on individual configurations instead.");
+
+/**
+ The logging threshold which newly opened synced Realms will use. Defaults to
+ `RLMSyncLogLevelInfo`.
+
+ Logging strings are output to Apple System Logger.
+
+ @warning This property must be set before any synced Realms are opened. Setting it after
+          opening any synced Realm will do nothing.
+ */
+@property (nonatomic) RLMSyncLogLevel logLevel;
+
+/// The sole instance of the singleton.
++ (instancetype)sharedManager NS_REFINED_FOR_SWIFT;
+
+/// :nodoc:
+- (instancetype)init __attribute__((unavailable("RLMSyncManager cannot be created directly")));
+
+/// :nodoc:
++ (instancetype)new __attribute__((unavailable("RLMSyncManager cannot be created directly")));
+
+NS_ASSUME_NONNULL_END
+
+@end

+ 55 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncPermission.h

@@ -0,0 +1,55 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+#import <Realm/RLMObject.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ This model is used to reflect permissions.
+
+ It should be used in conjunction with a `RLMSyncUser`'s Permission Realm.
+ You can only read this Realm. Use the objects in Management Realm to
+ make request for modifications of permissions.
+
+ See https://realm.io/docs/realm-object-server/#permissions for general
+ documentation.
+ */
+__deprecated_msg("Use `RLMSyncPermissionValue`")
+@interface RLMSyncPermission : RLMObject
+
+/// The date this object was last modified.
+@property (readonly) NSDate *updatedAt;
+
+/// The identity of a user affected by this permission.
+@property (readonly) NSString *userId;
+
+/// The path to the realm.
+@property (readonly) NSString *path;
+
+/// Whether the affected user is allowed to read from the Realm.
+@property (readonly) BOOL mayRead;
+/// Whether the affected user is allowed to write to the Realm.
+@property (readonly) BOOL mayWrite;
+/// Whether the affected user is allowed to manage the access rights for others.
+@property (readonly) BOOL mayManage;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 90 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionChange.h

@@ -0,0 +1,90 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+#import <Realm/RLMObject.h>
+#import <Realm/RLMProperty.h>
+#import <Realm/RLMSyncUtil.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ This model is used for requesting changes to a Realm's permissions.
+
+ It should be used in conjunction with an `RLMSyncUser`'s Management Realm.
+
+ See https://realm.io/docs/realm-object-server/#permissions for general
+ documentation.
+ */
+__deprecated_msg("Use `-[RLMSyncUser applyPermission:callback:]` and `-[RLMSyncUser revokePermission:callback:]`")
+@interface RLMSyncPermissionChange : RLMObject
+
+/// The globally unique ID string of this permission change object.
+@property (readonly) NSString *id;
+
+/// The date this object was initially created.
+@property (readonly) NSDate *createdAt;
+
+/// The date this object was last modified.
+@property (readonly) NSDate *updatedAt;
+
+/// The status code of the object that was processed by Realm Object Server.
+@property (nullable, readonly) NSNumber<RLMInt> *statusCode;
+
+/// An error or informational message, typically written to by the Realm Object Server.
+@property (nullable, readonly) NSString *statusMessage;
+
+/// Sync management object status.
+@property (readonly) RLMSyncManagementObjectStatus status;
+
+/// The remote URL to the realm.
+@property (readonly) NSString *realmUrl;
+
+/// The identity of a user affected by this permission change.
+@property (readonly) NSString *userId;
+
+/// Define read access. Set to `YES` or `NO` to update this value. Leave unset to preserve the existing setting.
+@property (nullable, readonly) NSNumber<RLMBool> *mayRead;
+/// Define write access. Set to `YES` or `NO` to update this value. Leave unset to preserve the existing setting.
+@property (nullable, readonly) NSNumber<RLMBool> *mayWrite;
+/// Define management access. Set to `YES` or `NO` to update this value. Leave unset to preserve the existing setting.
+@property (nullable, readonly) NSNumber<RLMBool> *mayManage;
+
+/**
+ Construct a permission change object used to change the access permissions for a user on a Realm.
+
+ @param realmURL  The Realm URL whose permissions settings should be changed.
+                  Use `*` to change the permissions of all Realms managed by the Management Realm's `RLMSyncUser`.
+ @param userID    The user or users who should be granted these permission changes.
+                  Use `*` to change the permissions for all users.
+ @param mayRead   Define read access. Set to `YES` or `NO` to update this value.
+                  Leave unset to preserve the existing setting.
+ @param mayWrite  Define write access. Set to `YES` or `NO` to update this value.
+                  Leave unset to preserve the existing setting.
+ @param mayManage Define management access. Set to `YES` or `NO` to update this value.
+                  Leave unset to preserve the existing setting.
+ */
++ (instancetype)permissionChangeWithRealmURL:(NSString *)realmURL
+                                      userID:(NSString *)userID
+                                        read:(nullable NSNumber<RLMBool> *)mayRead
+                                       write:(nullable NSNumber<RLMBool> *)mayWrite
+                                      manage:(nullable NSNumber<RLMBool> *)mayManage;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 91 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionOffer.h

@@ -0,0 +1,91 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+#import <Realm/RLMObject.h>
+#import <Realm/RLMProperty.h>
+#import <Realm/RLMSyncUtil.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ This model is used for offering permission changes to other users.
+
+ It should be used in conjunction with an `RLMSyncUser`'s Management Realm.
+
+ See https://realm.io/docs/realm-object-server/#permissions for general
+ documentation.
+ */
+@interface RLMSyncPermissionOffer : RLMObject
+
+/// The globally unique ID string of this permission offer object.
+@property (readonly) NSString *id;
+
+/// The date this object was initially created.
+@property (readonly) NSDate *createdAt;
+
+/// The date this object was last modified.
+@property (readonly) NSDate *updatedAt;
+
+/// The status code of the object that was processed by Realm Object Server.
+@property (nullable, readonly) NSNumber<RLMInt> *statusCode;
+
+/// An error or informational message, typically written to by the Realm Object Server.
+@property (nullable, readonly) NSString *statusMessage;
+
+/// Sync management object status.
+@property (readonly) RLMSyncManagementObjectStatus status;
+
+/// A token which uniquely identifies this offer. Generated by the server.
+@property (nullable, readonly) NSString *token;
+
+/// The remote URL to the realm.
+@property (readonly) NSString *realmUrl;
+
+/// Whether this offer allows the receiver to read from the Realm.
+@property (readonly) BOOL mayRead;
+
+/// Whether this offer allows the receiver to write to the Realm.
+@property (readonly) BOOL mayWrite;
+
+/// Whether this offer allows the receiver to manage the access rights for others.
+@property (readonly) BOOL mayManage;
+
+/// When this token will expire and become invalid.
+@property (nullable, readonly) NSDate *expiresAt;
+
+/**
+ Construct a permission offer object used to offer permission changes to other users.
+
+ @param realmURL  The URL to the Realm on which to apply these permission changes
+                  to, once the offer is accepted.
+ @param expiresAt When this token will expire and become invalid.
+                  Pass `nil` if this offer should not expire.
+ @param mayRead   Grant or revoke read access.
+ @param mayWrite  Grant or revoked read-write access.
+ @param mayManage Grant or revoke administrative access.
+ */
++ (instancetype)permissionOfferWithRealmURL:(NSString *)realmURL
+                                  expiresAt:(nullable NSDate *)expiresAt
+                                       read:(BOOL)mayRead
+                                      write:(BOOL)mayWrite
+                                     manage:(BOOL)mayManage;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 73 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionOfferResponse.h

@@ -0,0 +1,73 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Realm/Realm.h>
+#import <Realm/RLMSyncUtil.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ This model is used to apply permission changes defined in the permission offer
+ object represented by the specified token, which was created by another user's
+ `RLMSyncPermissionOffer` object.
+
+ It should be used in conjunction with an `RLMSyncUser`'s Management Realm.
+
+ See https://realm.io/docs/realm-object-server/#permissions for general
+ documentation.
+ */
+@interface RLMSyncPermissionOfferResponse : RLMObject
+
+/// The globally unique ID string of this permission offer response object.
+@property (readonly) NSString *id;
+
+/// The date this object was initially created.
+@property (readonly) NSDate *createdAt;
+
+/// The date this object was last modified.
+@property (readonly) NSDate *updatedAt;
+
+/// The status code of the object that was processed by Realm Object Server.
+@property (nullable, readonly) NSNumber<RLMInt> *statusCode;
+
+/// An error or informational message, typically written to by the Realm Object Server.
+@property (nullable, readonly) NSString *statusMessage;
+
+/// Sync management object status.
+@property (readonly) RLMSyncManagementObjectStatus status;
+
+/// The received token which uniquely identifies another user's `RLMSyncPermissionOffer`.
+@property (readonly) NSString *token;
+
+/// The remote URL to the realm on which these permission changes were applied.
+/// Generated by the server.
+@property (nullable, readonly) NSString *realmUrl;
+
+/**
+ Construct a permission offer response object used to apply permission changes
+ defined in the permission offer object represented by the specified token,
+ which was created by another user's `RLMSyncPermissionOffer` object.
+
+ @param token The received token which uniquely identifies another user's
+              `RLMSyncPermissionOffer`.
+ */
++ (instancetype)permissionOfferResponseWithToken:(NSString *)token;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 112 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionResults.h

@@ -0,0 +1,112 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2017 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import "RLMSyncUser.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Properties which a sync permission results collection can be sorted by.
+typedef NS_ENUM(NSUInteger, RLMSyncPermissionResultsSortProperty) {
+    /// Sort by the Realm Object Server path to the Realm to which the permission applies.
+    RLMSyncPermissionResultsSortPropertyPath,
+    /// Sort by the identity of the user to whom the permission applies.
+    RLMSyncPermissionResultsSortPropertyUserID,
+    /// Sort by the date the permissions were last updated.
+    RLMSyncPermissionResultsSortDateUpdated,
+};
+
+@class RLMSyncPermissionValue, RLMNotificationToken;
+
+/**
+ A collection object representing the results of a permissions query.
+
+ This collection will automatically update its contents at the start of each runloop
+ iteration, but the objects it vends are immutable.
+
+ Permission results objects are thread-confined, and should not be shared across
+ threads.
+
+ @warning Permission results must only be fetched on threads that have an active
+          run loop. In most cases this will be the main thread.
+ */
+@interface RLMSyncPermissionResults : NSObject<NSFastEnumeration>
+
+/// The number of results contained within the object.
+@property (nonatomic, readonly) NSInteger count;
+
+/**
+ Return the first permission, or nil if the collection is empty.
+ */
+- (nullable RLMSyncPermissionValue *)firstObject NS_SWIFT_UNAVAILABLE("Use the `first` property.");
+
+/**
+ Return the last permission, or nil if the collection is empty.
+ */
+- (nullable RLMSyncPermissionValue *)lastObject NS_SWIFT_UNAVAILABLE("Use the `last` property.");
+
+/**
+ Retrieve the permission value at the given index. Throws an exception if the index
+ is out of bounds.
+ */
+- (RLMSyncPermissionValue *)objectAtIndex:(NSInteger)index;
+
+/**
+ Returns the index of the permission in the collection, or `NSNotFound` if the permission
+ is not found in the collection.
+ */
+- (NSInteger)indexOfObject:(RLMSyncPermissionValue *)object;
+
+/**
+ Register to be notified when the contents of the results object change.
+
+ This method returns a token. Hold on to the token for as long as notifications
+ are desired. Call `-stop` on the token to stop notifications, and before
+ deallocating the token.
+ */
+- (RLMNotificationToken *)addNotificationBlock:(RLMPermissionStatusBlock)block;
+
+#pragma mark - Queries
+
+/**
+ Return all permissions matching the given predicate in the collection.
+
+ @note Valid properties to filter on are `path` and `userId`, as well as
+       the boolean properties `mayRead`, `mayWrite`, and `mayManage`.
+ */
+- (RLMSyncPermissionResults *)objectsWithPredicate:(NSPredicate *)predicate;
+
+/**
+ Return a sorted `RLMSyncPermissionResults` from the collection, sorted based on
+ the given property.
+ */
+- (RLMSyncPermissionResults *)sortedResultsUsingProperty:(RLMSyncPermissionResultsSortProperty)property
+                                               ascending:(BOOL)ascending;
+
+#pragma mark - Misc
+
+/// :nodoc:
+- (instancetype)init __attribute__((unavailable("RLMSyncPermissionResults cannot be created directly")));
+
+/// :nodoc:
++ (instancetype)new __attribute__((unavailable("RLMSyncPermissionResults cannot be created directly")));
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 113 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncPermissionValue.h

@@ -0,0 +1,113 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2017 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+/**
+ Access levels which can be granted to Realm Mobile Platform users
+ for specific synchronized Realms, using the permissions APIs.
+
+ Note that each access level guarantees all allowed actions provided
+ by less permissive access levels. Specifically, users with write
+ access to a Realm can always read from that Realm, and users with
+ administrative access can always read or write from the Realm.
+ */
+typedef NS_ENUM(NSUInteger, RLMSyncAccessLevel) {
+    /// No access whatsoever.
+    RLMSyncAccessLevelNone          = 0,
+    /**
+     User can only read the contents of the Realm.
+     
+     @warning Users who have read-only access to a Realm should open the
+              Realm using `+[RLMRealm asyncOpenWithConfiguration:callbackQueue:callback:]`.
+              Attempting to directly open the Realm is an error; in this
+              case the Realm must be deleted and re-opened.
+     */
+    RLMSyncAccessLevelRead          = 1,
+    /// User can read and write the contents of the Realm.
+    RLMSyncAccessLevelWrite         = 2,
+    /// User can read, write, and administer the Realm, including
+    /// granting permissions to other users.
+    RLMSyncAccessLevelAdmin         = 3,
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A value representing a permission granted to the specified user(s) to access the specified Realm(s).
+
+ `RLMSyncPermissionValue` is immutable and can be accessed from any thread.
+ 
+ See https://realm.io/docs/realm-object-server/#permissions for general documentation.
+ */
+@interface RLMSyncPermissionValue : NSObject
+
+/**
+ The Realm Object Server path to the Realm to which this permission applies (e.g. "/path/to/realm").
+
+ Specify "*" if this permission applies to all Realms managed by the server.
+ */
+@property (nonatomic, readonly) NSString *path;
+
+/**
+ The access level described by this permission.
+ */
+@property (nonatomic, readonly) RLMSyncAccessLevel accessLevel;
+
+/// Whether the access level allows the user to read from the Realm.
+@property (nonatomic, readonly) BOOL mayRead;
+
+/// Whether the access level allows the user to write to the Realm.
+@property (nonatomic, readonly) BOOL mayWrite;
+
+/// Whether the access level allows the user to administer the Realm.
+@property (nonatomic, readonly) BOOL mayManage;
+
+/**
+ Create a new sync permission value, for use with permission APIs.
+
+ @param path        The Realm Object Server path to the Realm whose permission should be modified
+                    (e.g. "/path/to/realm"). Pass "*" to apply to all Realms managed by the server.
+ @param userID      The identity of the user who should be granted access to the Realm at `path`.
+                    Pass "*" to apply to all users managed by the server.
+ @param accessLevel The access level to grant.
+ */
+- (instancetype)initWithRealmPath:(NSString *)path
+                           userID:(NSString *)userID
+                      accessLevel:(RLMSyncAccessLevel)accessLevel;
+
+/**
+ The identity of the user to whom this permission is granted, or "*"
+ if all users are granted this permission.
+ */
+@property (nullable, nonatomic, readonly) NSString *userId;
+
+/**
+ When this permission object was last updated.
+ */
+@property (nonatomic, readonly) NSDate *updatedAt;
+
+/// :nodoc:
+- (instancetype)init __attribute__((unavailable("Use the designated initializer")));
+
+/// :nodoc:
++ (instancetype)new __attribute__((unavailable("Use the designated initializer")));
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 159 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncSession.h

@@ -0,0 +1,159 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import "RLMRealm.h"
+
+/**
+ The current state of the session represented by a session object.
+ */
+typedef NS_ENUM(NSUInteger, RLMSyncSessionState) {
+    /// The sync session is bound to the Realm Object Server and communicating with it.
+    RLMSyncSessionStateActive,
+    /// The sync session is not currently communicating with the Realm Object Server.
+    RLMSyncSessionStateInactive,
+    /// The sync session encountered a fatal error and is permanently invalid; it should be discarded.
+    RLMSyncSessionStateInvalid
+};
+
+/**
+ The transfer direction (upload or download) tracked by a given progress notification block.
+
+ Progress notification blocks can be registered on sessions if your app wishes to be informed
+ how many bytes have been uploaded or downloaded, for example to show progress indicator UIs.
+ */
+typedef NS_ENUM(NSUInteger, RLMSyncProgressDirection) {
+    /// For monitoring upload progress.
+    RLMSyncProgressDirectionUpload,
+    /// For monitoring download progress.
+    RLMSyncProgressDirectionDownload,
+};
+
+/**
+ The desired behavior of a progress notification block.
+
+ Progress notification blocks can be registered on sessions if your app wishes to be informed
+ how many bytes have been uploaded or downloaded, for example to show progress indicator UIs.
+ */
+typedef NS_ENUM(NSUInteger, RLMSyncProgress) {
+    /**
+     The block will be called indefinitely, or until it is unregistered by calling
+     `-[RLMProgressNotificationToken stop]`.
+
+     Notifications will always report the latest number of transferred bytes, and the
+     most up-to-date number of total transferrable bytes.
+     */
+    RLMSyncProgressReportIndefinitely,
+    /**
+     The block will, upon registration, store the total number of bytes
+     to be transferred. When invoked, it will always report the most up-to-date number
+     of transferrable bytes out of that original number of transferrable bytes.
+
+     When the number of transferred bytes reaches or exceeds the
+     number of transferrable bytes, the block will be unregistered.
+     */
+    RLMSyncProgressForCurrentlyOutstandingWork,
+};
+
+@class RLMSyncUser, RLMSyncConfiguration;
+
+/**
+ The type of a progress notification block intended for reporting a session's network
+ activity to the user.
+
+ `transferredBytes` refers to the number of bytes that have been uploaded or downloaded.
+ `transferrableBytes` refers to the total number of bytes transferred, and pending transfer.
+ */
+typedef void(^RLMProgressNotificationBlock)(NSUInteger transferredBytes, NSUInteger transferrableBytes);
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A token object corresponding to a progress notification block on a session object.
+
+ To stop notifications manually, call `-stop` on it. Notifications should be stopped before
+ the token goes out of scope or is destroyed.
+ */
+@interface RLMProgressNotificationToken : RLMNotificationToken
+@end
+
+/**
+ An object encapsulating a Realm Object Server "session". Sessions represent the
+ communication between the client (and a local Realm file on disk), and the server
+ (and a remote Realm at a given URL stored on a Realm Object Server).
+
+ Sessions are always created by the SDK and vended out through various APIs. The
+ lifespans of sessions associated with Realms are managed automatically. Session
+ objects can be accessed from any thread.
+ */
+@interface RLMSyncSession : NSObject
+
+/// The session's current state.
+@property (nonatomic, readonly) RLMSyncSessionState state;
+
+/// The Realm Object Server URL of the remote Realm this session corresponds to.
+@property (nullable, nonatomic, readonly) NSURL *realmURL;
+
+/// The user that owns this session.
+- (nullable RLMSyncUser *)parentUser;
+
+/**
+ If the session is valid, return a sync configuration that can be used to open the Realm
+ associated with this session.
+ */
+- (nullable RLMSyncConfiguration *)configuration;
+
+/**
+ Register a progress notification block.
+
+ Multiple blocks can be registered with the same session at once. Each block
+ will be invoked on a side queue devoted to progress notifications.
+ 
+ If the session has already received progress information from the
+ synchronization subsystem, the block will be called immediately. Otherwise, it
+ will be called as soon as progress information becomes available.
+
+ The token returned by this method must be retained as long as progress
+ notifications are desired, and the `-stop` method should be called on it
+ when notifications are no longer needed and before the token is destroyed.
+
+ If no token is returned, the notification block will never be called again.
+ There are a number of reasons this might be true. If the session has previously
+ experienced a fatal error it will not accept progress notification blocks. If
+ the block was configured in the `RLMSyncProgressForCurrentlyOutstandingWork`
+ mode but there is no additional progress to report (for example, the number
+ of transferrable bytes and transferred bytes are equal), the block will not be
+ called again.
+
+ @param direction The transfer direction (upload or download) to track in this progress notification block.
+ @param mode      The desired behavior of this progress notification block.
+ @param block     The block to invoke when notifications are available.
+
+ @return A token which must be held for as long as you want notifications to be delivered.
+
+ @see `RLMSyncProgressDirection`, `RLMSyncProgress`, `RLMProgressNotificationBlock`, `RLMProgressNotificationToken`
+ */
+- (nullable RLMProgressNotificationToken *)addProgressNotificationForDirection:(RLMSyncProgressDirection)direction
+                                                                          mode:(RLMSyncProgress)mode
+                                                                         block:(RLMProgressNotificationBlock)block
+NS_REFINED_FOR_SWIFT;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 233 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncUser.h

@@ -0,0 +1,233 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+@class RLMSyncUser, RLMSyncCredentials, RLMSyncPermissionValue, RLMSyncPermissionResults, RLMSyncSession, RLMRealm;
+
+/**
+ The state of the user object.
+ */
+typedef NS_ENUM(NSUInteger, RLMSyncUserState) {
+    /// The user is logged out. Call `logInWithCredentials:...` with valid credentials to log the user back in.
+    RLMSyncUserStateLoggedOut,
+    /// The user is logged in, and any Realms associated with it are syncing with the Realm Object Server.
+    RLMSyncUserStateActive,
+    /// The user has encountered a fatal error state, and cannot be used.
+    RLMSyncUserStateError,
+};
+
+/// A block type used for APIs which asynchronously vend an `RLMSyncUser`.
+typedef void(^RLMUserCompletionBlock)(RLMSyncUser * _Nullable, NSError * _Nullable);
+
+/// A block type used to report the status of a password change operation.
+/// If the `NSError` argument is nil, the operation succeeded.
+typedef void(^RLMPasswordChangeStatusBlock)(NSError * _Nullable);
+
+/// A block type used to report the status of a permission apply or revoke operation.
+/// If the `NSError` argument is nil, the operation succeeded.
+typedef void(^RLMPermissionStatusBlock)(NSError * _Nullable);
+
+/// A block type used to asynchronously report results of a permissions get operation.
+/// Exactly one of the two arguments will be populated.
+typedef void(^RLMPermissionResultsBlock)(RLMSyncPermissionResults * _Nullable, NSError * _Nullable);
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A `RLMSyncUser` instance represents a single Realm Object Server user account.
+
+ A user may have one or more credentials associated with it. These credentials
+ uniquely identify the user to the authentication provider, and are used to sign
+ into a Realm Object Server user account.
+
+ Note that user objects are only vended out via SDK APIs, and cannot be directly
+ initialized. User objects can be accessed from any thread.
+ */
+@interface RLMSyncUser : NSObject
+
+/**
+ A dictionary of all valid, logged-in user identities corresponding to their user objects.
+ */
++ (NSDictionary<NSString *, RLMSyncUser *> *)allUsers NS_REFINED_FOR_SWIFT;
+
+/**
+ The logged-in user. `nil` if none exists.
+
+ @warning Throws an exception if more than one logged-in user exists.
+ */
++ (nullable RLMSyncUser *)currentUser NS_REFINED_FOR_SWIFT;
+
+/**
+ The unique Realm Object Server user ID string identifying this user.
+ */
+@property (nullable, nonatomic, readonly) NSString *identity;
+
+/**
+ The URL of the authentication server this user will communicate with.
+ */
+@property (nullable, nonatomic, readonly) NSURL *authenticationServer;
+
+/**
+ Whether the user is a Realm Object Server administrator. Value reflects the
+ state at the time of the last successful login of this user.
+ */
+@property (nonatomic, readonly) BOOL isAdmin;
+
+/**
+ The current state of the user.
+ */
+@property (nonatomic, readonly) RLMSyncUserState state;
+
+#pragma mark - Lifecycle
+
+/**
+ Create, log in, and asynchronously return a new user object, specifying a custom timeout for the network request.
+ Credentials identifying the user must be passed in. The user becomes available in the completion block, at which point
+ it is ready for use.
+ */
++ (void)logInWithCredentials:(RLMSyncCredentials *)credentials
+               authServerURL:(NSURL *)authServerURL
+                     timeout:(NSTimeInterval)timeout
+                onCompletion:(RLMUserCompletionBlock)completion NS_REFINED_FOR_SWIFT;
+
+/**
+ Create, log in, and asynchronously return a new user object. Credentials identifying the user must be passed in. The
+ user becomes available in the completion block, at which point it is ready for use.
+ */
++ (void)logInWithCredentials:(RLMSyncCredentials *)credentials
+               authServerURL:(NSURL *)authServerURL
+                onCompletion:(RLMUserCompletionBlock)completion
+NS_SWIFT_UNAVAILABLE("Use the full version of this API.");
+
+/**
+ Log a user out, destroying their server state, unregistering them from the SDK,
+ and removing any synced Realms associated with them from on-disk storage on
+ next app launch. If the user is already logged out or in an error state, this
+ method does nothing.
+
+ This method should be called whenever the application is committed to not using
+ a user again unless they are recreated.
+ Failing to call this method may result in unused files and metadata needlessly
+ taking up space.
+ */
+- (void)logOut;
+
+#pragma mark - Sessions
+
+/**
+ Retrieve a valid session object belonging to this user for a given URL, or `nil` if no such object exists.
+ */
+- (nullable RLMSyncSession *)sessionForURL:(NSURL *)url;
+
+/**
+ Retrieve all the valid sessions belonging to this user.
+ */
+- (NSArray<RLMSyncSession *> *)allSessions;
+
+#pragma mark - Passwords
+
+/**
+ Change this user's password asynchronously.
+
+ @warning Changing a user's password using an authentication server that doesn't
+          use HTTPS is a major security flaw, and should only be done while
+          testing.
+
+ @param newPassword The user's new password.
+ @param completion  Completion block invoked when login has completed or failed.
+                    The callback will be invoked on a background queue provided
+                    by `NSURLSession`.
+ */
+- (void)changePassword:(NSString *)newPassword completion:(RLMPasswordChangeStatusBlock)completion;
+
+// This set of permissions APIs uses immutable `RLMSyncPermissionValue` objects to
+// retrieve and apply permissions. It is intended to replace the set of APIs which
+// directly access Realms and Realm model objects to work with permissions.
+#pragma mark - Value-based Permissions API
+
+/**
+ Asynchronously retrieve all permissions associated with the user calling this method.
+
+ The results will be returned through the callback block, or an error if the operation failed.
+ The callback block will be run on the same thread the method was called on.
+
+ @warning This method must be called from a thread with a currently active run loop. Unless
+          you have manually configured a run loop on a side thread, this will usually be the
+          main thread.
+
+ @see `RLMSyncPermissionResults`
+ */
+- (void)retrievePermissionsWithCallback:(RLMPermissionResultsBlock)callback;
+
+/**
+ Apply a given permission.
+
+ The operation will take place asynchronously, and the callback will be used to report whether
+ the permission change succeeded or failed. The user calling this method must have the right
+ to grant the given permission, or else the operation will fail.
+
+ @see `RLMSyncPermissionValue`
+ */
+- (void)applyPermission:(RLMSyncPermissionValue *)permission callback:(RLMPermissionStatusBlock)callback;
+
+/**
+ Revoke a given permission.
+
+ The operation will take place asynchronously, and the callback will be used to report whether
+ the permission change succeeded or failed. The user calling this method must have the right
+ to grant the given permission, or else the operation will fail.
+
+ @see `RLMSyncPermissionValue`
+ */
+- (void)revokePermission:(RLMSyncPermissionValue *)permission callback:(RLMPermissionStatusBlock)callback;
+
+// These permission APIs access Realms and Realm model objects representing
+// various permission states and actions, as well as standard Realm
+// affordances, to work with permissions. It is being deprecated in favor of
+// the `retrievePermissionsWithCallback:`, `applyPermission:callback:`, and
+// `revokePermission:callback:` APIs.
+#pragma mark - Realm Object-based Permissions API
+
+/**
+ Returns an instance of the Management Realm owned by the user.
+
+ This Realm can be used to control access permissions for Realms managed by the user.
+ This includes granting other users access to Realms.
+ */
+- (RLMRealm *)managementRealmWithError:(NSError **)error NS_REFINED_FOR_SWIFT;
+
+/**
+ Returns an instance of the Permission Realm owned by the user.
+
+ This read-only Realm contains `RLMSyncPermission` objects reflecting the
+ synchronized Realms and permission details this user has access to.
+ */
+- (RLMRealm *)permissionRealmWithError:(NSError **)error __deprecated_msg("Use `-retrievePermissionsWithCallback:`") NS_REFINED_FOR_SWIFT;
+
+#pragma mark - Miscellaneous
+
+/// :nodoc:
+- (instancetype)init __attribute__((unavailable("RLMSyncUser cannot be created directly")));
+
+/// :nodoc:
++ (instancetype)new __attribute__((unavailable("RLMSyncUser cannot be created directly")));
+
+NS_ASSUME_NONNULL_END
+
+@end

+ 181 - 0
Libraries external/Realm/Realm.framework/Headers/RLMSyncUtil.h

@@ -0,0 +1,181 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Realm/RLMConstants.h>
+
+/// A token originating from the Realm Object Server.
+typedef NSString* RLMServerToken;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A user info key for use with `RLMSyncErrorClientResetError`.
+extern NSString *const kRLMSyncPathOfRealmBackupCopyKey;
+
+/// A user info key for use with `RLMSyncErrorClientResetError`.
+extern NSString *const kRLMSyncInitiateClientResetBlockKey;
+
+/**
+ The error domain string for all SDK errors related to errors reported
+ by the synchronization manager error handler, as well as general sync
+ errors that don't fall into any of the other categories.
+ */
+extern NSString *const RLMSyncErrorDomain;
+
+/**
+ The error domain string for all SDK errors related to the authentication
+ endpoint.
+ */
+extern NSString *const RLMSyncAuthErrorDomain;
+
+/**
+ The error domain string for all SDK errors related to the permissions
+ system and APIs.
+ */
+extern NSString *const RLMSyncPermissionErrorDomain;
+
+/**
+ An error related to a problem that might be reported by the synchronization manager
+ error handler, or a callback on a sync-related API that performs asynchronous work.
+ */
+typedef RLM_ERROR_ENUM(NSInteger, RLMSyncError, RLMSyncErrorDomain) {
+    /**
+     An error that indicates that the response received from the
+     authentication server was malformed.
+     
+     @warning This error is deprecated, and has been replaced by
+              `RLMSyncAuthErrorBadResponse`.
+     */
+    RLMSyncErrorBadResponse __deprecated_msg("This error has been replaced by 'RLMSyncAuthErrorBadResponse'") = 1,
+
+    /// An error that indicates a problem with the session (a specific Realm opened for sync).
+    RLMSyncErrorClientSessionError      = 4,
+
+    /// An error that indicates a problem with a specific user.
+    RLMSyncErrorClientUserError         = 5,
+
+    /** 
+     An error that indicates an internal, unrecoverable problem
+     with the underlying synchronization engine.
+     */
+    RLMSyncErrorClientInternalError     = 6,
+
+    /**
+     An error that indicates the Realm needs to be reset.
+
+     A synced Realm may need to be reset because the Realm Object Server encountered an
+     error and had to be restored from a backup. If the backup copy of the remote Realm
+     is of an earlier version than the local copy of the Realm, the server will ask the
+     client to reset the Realm.
+
+     The reset process is as follows: the local copy of the Realm is copied into a recovery
+     directory for safekeeping, and then deleted from the original location. The next time
+     the Realm for that URL is opened, the Realm will automatically be re-downloaded from the
+     Realm Object Server, and can be used as normal.
+
+     Data written to the Realm after the local copy of the Realm diverged from the backup
+     remote copy will be present in the local recovery copy of the Realm file. The
+     re-downloaded Realm will initially contain only the data present at the time the Realm
+     was backed up on the server.
+
+     The client reset process can be initiated in one of two ways. The block provided in the
+     `userInfo` dictionary under `kRLMSyncInitiateClientResetBlockKey` can be called to
+     initiate the reset process. This block can be called any time after the error is
+     received, but should only be called if and when your app closes and invalidates every
+     instance of the offending Realm on all threads (note that autorelease pools may make this
+     difficult to guarantee).
+
+     If the block is not called, the client reset process will be automatically carried out
+     the next time the app is launched and the `RLMSyncManager` singleton is accessed.
+
+     The value for the `kRLMSyncPathOfRealmBackupCopyKey` key in the `userInfo` dictionary
+     describes the path of the recovered copy of the Realm. This copy will not actually be
+     created until the client reset process is initiated.
+
+     @see `-[NSError rlmSync_clientResetBlock]`, `-[NSError rlmSync_clientResetBackedUpRealmPath]`
+     */
+    RLMSyncErrorClientResetError        = 7,
+
+    /**
+     An error that indicates an authentication error occurred.
+
+     The `kRLMSyncUnderlyingErrorKey` key in the user info dictionary will contain the
+     underlying error, which is guaranteed to be under the `RLMSyncAuthErrorDomain`
+     error domain.
+     */
+    RLMSyncErrorUnderlyingAuthError     = 8,
+};
+
+/// An error which is related to authentication to a Realm Object Server.
+typedef RLM_ERROR_ENUM(NSInteger, RLMSyncAuthError, RLMSyncAuthErrorDomain) {
+    /// An error that indicates that the response received from the authentication server was malformed.
+    RLMSyncAuthErrorBadResponse         = 1,
+
+    /// An error that indicates that the supplied Realm path was invalid, or could not be resolved by the authentication
+    /// server.
+    RLMSyncAuthErrorBadRemoteRealmPath  = 2,
+
+    /// An error that indicates that the response received from the authentication server was an HTTP error code. The
+    /// `userInfo` dictionary contains the actual error code value.
+    RLMSyncAuthErrorHTTPStatusCodeError = 3,
+
+    /// An error that indicates a problem with the session (a specific Realm opened for sync).
+    RLMSyncAuthErrorClientSessionError  = 4,
+
+    /// An error that indicates that the provided credentials are invalid.
+    RLMSyncAuthErrorInvalidCredential   = 611,
+
+    /// An error that indicates that the user with provided credentials does not exist.
+    RLMSyncAuthErrorUserDoesNotExist    = 612,
+
+    /// An error that indicates that the user cannot be registered as it exists already.
+    RLMSyncAuthErrorUserAlreadyExists   = 613,
+};
+
+/**
+ An error related to the permissions subsystem.
+ */
+typedef RLM_ERROR_ENUM(NSInteger, RLMSyncPermissionError, RLMSyncPermissionErrorDomain) {
+    /**
+     An error that indicates a permission change operation failed. The `userInfo`
+     dictionary contains the underlying error code and a message (if any).
+     */
+    RLMSyncPermissionErrorChangeFailed  = 1,
+
+    /**
+     An error that indicates that attempting to retrieve permissions failed.
+     */
+    RLMSyncPermissionErrorGetFailed     = 2,
+};
+
+/// An enum representing the different states a sync management object can take.
+typedef NS_ENUM(NSUInteger, RLMSyncManagementObjectStatus) {
+    /// The management object has not yet been processed by the object server.
+    RLMSyncManagementObjectStatusNotProcessed,
+    /// The operations encoded in the management object have been successfully
+    /// performed by the object server.
+    RLMSyncManagementObjectStatusSuccess,
+    /**
+     The operations encoded in the management object were not successfully
+     performed by the object server.
+     Refer to the `statusCode` and `statusMessage` properties for more details
+     about the error.
+     */
+    RLMSyncManagementObjectStatusError,
+};
+
+NS_ASSUME_NONNULL_END

+ 106 - 0
Libraries external/Realm/Realm.framework/Headers/RLMThreadSafeReference.h

@@ -0,0 +1,106 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+@class RLMRealm;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ Objects of types which conform to `RLMThreadConfined` can be managed by a Realm, which will make
+ them bound to a thread-specific `RLMRealm` instance. Managed objects must be explicitly exported
+ and imported to be passed between threads.
+
+ Managed instances of objects conforming to this protocol can be converted to a thread-safe
+ reference for transport between threads by passing to the
+ `+[RLMThreadSafeReference referenceWithThreadConfined:]` constructor.
+
+ Note that only types defined by Realm can meaningfully conform to this protocol, and defining new
+ classes which attempt to conform to it will not make them work with `RLMThreadSafeReference`.
+ */
+@protocol RLMThreadConfined <NSObject>
+// Conformance to the `RLMThreadConfined_Private` protocol will be enforced at runtime.
+
+/**
+ The Realm which manages the object, or `nil` if the object is unmanaged.
+
+ Unmanaged objects are not confined to a thread and cannot be passed to methods expecting a
+ `RLMThreadConfined` object.
+ */
+@property (nonatomic, readonly, nullable) RLMRealm *realm;
+
+/// Indicates if the object can no longer be accessed because it is now invalid.
+@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated;
+
+@end
+
+/**
+ An object intended to be passed between threads containing a thread-safe reference to its
+ thread-confined object.
+
+ To resolve a thread-safe reference on a target Realm on a different thread, pass to
+ `-[RLMRealm resolveThreadSafeReference:]`.
+
+ @warning A `RLMThreadSafeReference` object must be resolved at most once.
+          Failing to resolve a `RLMThreadSafeReference` will result in the source version of the
+          Realm being pinned until the reference is deallocated.
+
+ @note Prefer short-lived `RLMThreadSafeReference`s as the data for the version of the source Realm
+       will be retained until all references have been resolved or deallocated.
+
+ @see `RLMThreadConfined`
+ @see `-[RLMRealm resolveThreadSafeReference:]`
+ */
+@interface RLMThreadSafeReference<__covariant Confined : id<RLMThreadConfined>> : NSObject
+
+/**
+ Create a thread-safe reference to the thread-confined object.
+
+ @param threadConfined The thread-confined object to create a thread-safe reference to.
+
+ @note You may continue to use and access the thread-confined object after passing it to this
+       constructor.
+ */
++ (instancetype)referenceWithThreadConfined:(Confined)threadConfined;
+
+/**
+ Indicates if the reference can no longer be resolved because an attempt to resolve it has already
+ occurred. References can only be resolved once.
+ */
+@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated;
+
+#pragma mark - Unavailable Methods
+
+/**
+ `-[RLMThreadSafeReference init]` is not available because `RLMThreadSafeReference` cannot be
+ created directly. `RLMThreadSafeReference` instances must be obtained by calling
+ `-[RLMRealm resolveThreadSafeReference:]`.
+ */
+- (instancetype)init __attribute__((unavailable("RLMThreadSafeReference cannot be created directly")));
+
+/**
+ `-[RLMThreadSafeReference new]` is not available because `RLMThreadSafeReference` cannot be
+ created directly. `RLMThreadSafeReference` instances must be obtained by calling
+ `-[RLMRealm resolveThreadSafeReference:]`.
+ */
++ (instancetype)new __attribute__((unavailable("RLMThreadSafeReference cannot be created directly")));
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 44 - 0
Libraries external/Realm/Realm.framework/Headers/Realm.h

@@ -0,0 +1,44 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2014 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/Foundation.h>
+
+#import <Realm/RLMArray.h>
+#import <Realm/RLMMigration.h>
+#import <Realm/RLMObject.h>
+#import <Realm/RLMObjectSchema.h>
+#import <Realm/RLMPlatform.h>
+#import <Realm/RLMProperty.h>
+#import <Realm/RLMRealm.h>
+#import <Realm/RLMRealmConfiguration.h>
+#import <Realm/RLMRealmConfiguration+Sync.h>
+#import <Realm/RLMResults.h>
+#import <Realm/RLMSchema.h>
+#import <Realm/RLMSyncConfiguration.h>
+#import <Realm/RLMSyncCredentials.h>
+#import <Realm/RLMSyncManager.h>
+#import <Realm/RLMSyncPermission.h>
+#import <Realm/RLMSyncPermissionChange.h>
+#import <Realm/RLMSyncPermissionOffer.h>
+#import <Realm/RLMSyncPermissionOfferResponse.h>
+#import <Realm/RLMSyncPermissionResults.h>
+#import <Realm/RLMSyncPermissionValue.h>
+#import <Realm/RLMSyncSession.h>
+#import <Realm/RLMSyncUser.h>
+#import <Realm/RLMSyncUtil.h>
+#import <Realm/NSError+RLMSync.h>

二進制
Libraries external/Realm/Realm.framework/Info.plist


部分文件因文件數量過多而無法顯示