marinofaggiana 4 years ago
parent
commit
3db50c065c

+ 1 - 1
Cartfile

@@ -4,7 +4,7 @@ github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "MortimerGoro/MGSwipeTableCell" "1.6.8"
 github "dzenbot/DZNEmptyDataSet" "v1.8.1"
 github "jdg/MBProgressHUD" "1.1.0"
-github "realm/realm-cocoa" "v5.3.2"
+github "realm/realm-cocoa" "v5.3.3"
 github "SVGKit/SVGKit" "3.x"
 github "WeTransfer/WeScan" "1.2.0"
 github "malcommac/SwiftRichString"

+ 3 - 3
Cartfile.resolved

@@ -1,6 +1,6 @@
 github "Alamofire/Alamofire" "5.2.2"
 github "AssistoLab/DropDown" "v2.3.13"
-github "CocoaLumberjack/CocoaLumberjack" "3.6.1"
+github "CocoaLumberjack/CocoaLumberjack" "3.6.2"
 github "FabrizioBrancati/Queuer" "2.1.1"
 github "MortimerGoro/MGSwipeTableCell" "1.6.8"
 github "SVGKit/SVGKit" "9240977515c04053f8c96c9dfdb764dc7b98b9ba"
@@ -8,7 +8,7 @@ github "SwiftyJSON/SwiftyJSON" "5.0.0"
 github "WeTransfer/WeScan" "1.2.0"
 github "WenchaoD/FSCalendar" "2.8.0"
 github "dzenbot/DZNEmptyDataSet" "v1.8.1"
-github "getsentry/sentry-cocoa" "5.1.10"
+github "getsentry/sentry-cocoa" "5.2.0"
 github "huri000/QuickLayout" "3.0.0"
 github "huri000/SwiftEntryKit" "1.2.3"
 github "ivanbruel/MarkdownKit" "1.6"
@@ -19,7 +19,7 @@ github "malcommac/SwiftRichString" "3.7.2"
 github "marinofaggiana/KTVHTTPCache" "2.0.2"
 github "marinofaggiana/TOPasscodeViewController" "0.0.7"
 github "nextcloud/ios-communication-library" "v0.75"
-github "realm/realm-cocoa" "v5.3.2"
+github "realm/realm-cocoa" "v5.3.3"
 github "rechsteiner/Parchment" "v2.4.0"
 github "scenee/FloatingPanel" "v1.7.5"
 github "tilltue/TLPhotoPicker" "2.0.12"

+ 2 - 0
Carthage/Checkouts/CocoaLumberjack/.gitignore

@@ -7,6 +7,8 @@
 /*.xcodeproj
 xcuserdata/
 
+!Lumberjack.xcodeproj
+
 # Carthage
 Carthage/Build
 

+ 17 - 0
Carthage/Checkouts/CocoaLumberjack/CHANGELOG.md

@@ -1,3 +1,20 @@
+## [3.7.0 - Xcode 12 on ???, 2020](https://github.com/CocoaLumberjack/CocoaLumberjack/releases/tag/3.7.0)
+
+### Public
+
+- _PLEASE REPLACE WITH FIRST ENTRY_
+
+## [3.6.2 - Xcode 11.6 on July 31st, 2020](https://github.com/CocoaLumberjack/CocoaLumberjack/releases/tag/3.6.2)
+
+### Public
+- Fix warnings when building with SPM bundled with Swift 5.2 / Xcode 11.4 (#1132)
+- Added Swift name for DDQualityOfServiceName constants.
+- Don't localize timestamps in `DDefaultFileLogFormatter` (#1151)
+- Allow logging arbitrary objects via Swift log functions (#1146)
+
+### Repository
+- Switch from Travis to GitHub Actions (#1135, #1140, #1150, #1152)
+
 ## [3.6.1 - Xcode 11.3.1 on Jan 25th, 2020](https://github.com/CocoaLumberjack/CocoaLumberjack/releases/tag/3.6.1)
 
 ### Public

+ 2 - 2
Carthage/Checkouts/CocoaLumberjack/CocoaLumberjack.podspec

@@ -1,7 +1,7 @@
 Pod::Spec.new do |s|
 
   s.name     = 'CocoaLumberjack'
-  s.version  = '3.6.1'
+  s.version  = '3.6.2'
   s.license  = 'BSD'
   s.summary  = 'A fast & simple, yet powerful & flexible logging framework for Mac and iOS.'
   s.homepage = 'https://github.com/CocoaLumberjack/CocoaLumberjack'
@@ -33,7 +33,7 @@ Pod::Spec.new do |s|
 
   s.subspec 'Swift' do |ss|
     ss.dependency 'CocoaLumberjack/Core'
-    ss.source_files        = 'Sources/CocoaLumberjackSwift/*.swift', 'Sources/CocoaLumberjackSwiftSupport/include/*.{h}'
+    ss.source_files        = 'Sources/CocoaLumberjackSwift/**/*.swift', 'Sources/CocoaLumberjackSwiftSupport/include/**/*.{h}'
   end
 
 end

+ 30 - 1
Carthage/Checkouts/realm-cocoa/CHANGELOG.md

@@ -1,9 +1,38 @@
+5.3.3 Release notes (2020-07-30)
+=============================================================
+
+### Enhancements
+
+* Add support for the x86_64 watchOS simulator added in Xcode 12.
+
+### Fixed
+
+* (RLM)Results objects would incorrectly pin old read transaction versions
+  until they were accessed after a Realm was refreshed, resulting in the Realm
+  file growing to large sizes if a Results was retained but not accessed after
+  every write. ([#6677](https://github.com/realm/realm-cocoa/issues/6677), since 5.0.0).
+* Fix linker errors when using SwiftUI previews with Xcode 12 when Realm was
+  installed via Swift Package Manager. ([#6625](https://github.com/realm/realm-cocoa/issues/6625))
+
+### Compatibility
+
+* File format: Generates Realms with format v10 (Reads and upgrades all previous formats)
+* Realm Object Server: 3.21.0 or later.
+* Realm Studio: 3.11 or later.
+* APIs are backwards compatible with all previous releases in the 5.x.y series.
+* Carthage release for Swift is built with Xcode 11.6.
+
+### Internal
+
+* Upgraded realm-core from v6.0.12 to v6.0.14
+* Upgraded realm-sync from v5.0.12 to v5.0.14
+
 5.3.2 Release notes (2020-07-21)
 =============================================================
 
 ### Fixed
 
-* Fix a file format upgrade bug when opening older Realm files.. Could cause
+* Fix a file format upgrade bug when opening older Realm files. Could cause
   assertions like "Assertion failed: ref != 0" during opning of a Realm.
   ([Core #6644](https://github.com/realm/realm-cocoa/issues/6644), since 5.2.0)
 * A use-after-free would occur if a Realm was compacted, opened on multiple

+ 9 - 1
Carthage/Checkouts/realm-cocoa/Configuration/Base.xcconfig

@@ -62,7 +62,15 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 WATCHOS_DEPLOYMENT_TARGET = 2.0;
 TVOS_DEPLOYMENT_TARGET = 9.0;
 
-VALID_ARCHS[sdk=watchsimulator*] = i386;
+// Xcode 11 "helpfully" "corrects" arm64 to x86_64 when you try to exclude
+// arm64 on platforms that it doesn't support building for arm64 on.
+REALM_ARM_ARCHS_1200 = arm64 arm64e;
+REALM_ARM_ARCHS = $(REALM_ARM_ARCHS_$(XCODE_VERSION_MAJOR))
+
+EXCLUDED_ARCHS[sdk=macosx*] = $(REALM_ARM_ARCHS);
+EXCLUDED_ARCHS[sdk=watchsimulator*] = $(REALM_ARM_ARCHS);
+EXCLUDED_ARCHS[sdk=iphonesimulator*] = $(REALM_ARM_ARCHS);
+EXCLUDED_ARCHS[sdk=appletvsimulator*] = $(REALM_ARM_ARCHS);
 
 SWIFT_VERSION = 5.0;
 TARGETED_DEVICE_FAMILY = 1,2,3,4;

+ 2 - 3
Carthage/Checkouts/realm-cocoa/Realm/ObjectStore/CMake/CodeCoverage.cmake

@@ -20,8 +20,7 @@ find_program(LCOV_PATH lcov)
 find_program(GENHTML_PATH genhtml)
 find_program(GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests)
 
-set(CMAKE_CXX_FLAGS_COVERAGE "-g -O0 -fprofile-arcs -ftest-coverage -DCATCH_CONFIG_FAST_COMPILE"
-    CACHE STRING "Flags used by the C++ compiler during coverage builds.")
+set(CMAKE_CXX_FLAGS_COVERAGE "-g -O0 -fprofile-arcs -ftest-coverage -DCATCH_CONFIG_FAST_COMPILE")
 mark_as_advanced(CMAKE_CXX_FLAGS_COVERAGE)
 
 if(CMAKE_BUILD_TYPE STREQUAL "Coverage")
@@ -50,7 +49,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Coverage")
 
     add_custom_target(${targetname}-cobertura
       COMMAND ${testrunner}
-      COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR}/src ./src -o coverage.xml
+      COMMAND ${GCOVR_PATH} -x -o coverage.xml -f 'src/.*' -f "${CMAKE_SOURCE_DIR}/src.*" --exclude-directories "${CMAKE_BINARY_DIR}/tests" --exclude-directories="${CMAKE_SOURCE_DIR}/\.tmp" --exclude ".*realm\-core.*" --exclude ".*realm\-sync.*"
       COMMAND echo Code coverage report written to coverage.xml
 
       WORKING_DIRECTORY ${CMAKE_BINARY_DIR}

+ 17 - 17
Carthage/Checkouts/realm-cocoa/Realm/ObjectStore/Jenkinsfile

@@ -1,4 +1,7 @@
 #!groovy
+
+@Library('realm-ci') _
+
 def getSourceArchive() {
   deleteDir()
   unstash 'source'
@@ -23,10 +26,11 @@ def buildDockerEnv(name, dockerfile='Dockerfile', extra_args='') {
   return docker.image(name)
 }
 
-def publishReport(String label) {
+def publishCoverageReport(String label) {
   // Unfortunately, we cannot add a title or tag to individual coverage reports.
   echo "Unstashing coverage-${label}"
   unstash("coverage-${label}")
+
   step([
     $class: 'CoberturaPublisher',
     autoUpdateHealth: false,
@@ -46,7 +50,7 @@ if (env.BRANCH_NAME == 'master') {
   env.DOCKER_PUSH = "1"
 }
 
-def doDockerBuild(String flavor, Boolean withCoverage, Boolean enableSync, String sanitizerFlags = "") {
+def doDockerBuild(String flavor, Boolean enableSync, String sanitizerFlags = "") {
   def sync = enableSync ? "sync" : ""
   def label = "${flavor}${enableSync ? '-sync' : ''}"
 
@@ -56,17 +60,9 @@ def doDockerBuild(String flavor, Boolean withCoverage, Boolean enableSync, Strin
       def image = buildDockerEnv("ci/realm-object-store:${flavor}")
       sshagent(['realm-ci-ssh']) {
         image.inside("-v /etc/passwd:/etc/passwd:ro -v ${env.HOME}:${env.HOME} -v ${env.SSH_AUTH_SOCK}:${env.SSH_AUTH_SOCK} -e HOME=${env.HOME}") {
-          if(withCoverage) {
-            sh "rm -rf coverage.build ${label}.build && ./workflow/test_coverage.sh ${sync} && mv coverage.build ${label}.build"
-          } else {
-            sh "./workflow/build.sh ${flavor} ${sync} ${sanitizerFlags}"
-          }
+          sh "./workflow/build.sh ${flavor} ${sync} ${sanitizerFlags}"
         }
       }
-      if(withCoverage) {
-        echo "Stashing coverage-${label}"
-        stash includes: "${label}.build/coverage.xml", name: "coverage-${label}"
-      }
     }
   }
 }
@@ -166,10 +162,10 @@ stage('prepare') {
 
 stage('unit-tests') {
   parallel(
-    linux: doDockerBuild('linux', false, false),
-    linux_sync: doDockerBuild('linux', true, true),
-    linux_asan: doDockerBuild('linux', false, true, '-DSANITIZE_ADDRESS=1'),
-    linux_tsan: doDockerBuild('linux', false, true, '-DSANITIZE_THREAD=1'),
+    linux: doDockerBuild('linux', false),
+    linux_sync: doDockerBuild('linux', true),
+    linux_asan: doDockerBuild('linux', true, '-DSANITIZE_ADDRESS=1'),
+    linux_tsan: doDockerBuild('linux', true, '-DSANITIZE_THREAD=1'),
     android: doAndroidDockerBuild(),
     macos: doBuild('osx', 'macOS', false, ''),
     macos_sync: doBuild('osx', 'macOS', true, ''),
@@ -181,7 +177,11 @@ stage('unit-tests') {
 
 stage('publish') {
   node('docker') {
-    publishReport('linux-sync')
-    publishReport('macOS-sync')
+    // we need sources to allow the coverage report to display them
+    rlmCheckout(scm)
+    // coverage reports assume sources are in the parent directory
+    dir("build") {
+      publishCoverageReport('macOS-sync')
+    }
   }
 }

+ 10 - 2
Carthage/Checkouts/realm-cocoa/Realm/ObjectStore/src/impl/results_notifier.cpp

@@ -181,13 +181,21 @@ void ResultsNotifier::do_prepare_handover(Transaction& sg)
 bool ResultsNotifier::prepare_to_deliver()
 {
     auto lock = lock_target();
-    if (!get_realm()) {
+    auto realm = get_realm();
+    if (!realm) {
         m_handover_tv.reset();
         m_delivered_tv.reset();
         return false;
     }
-    if (!m_handover_tv)
+    if (!m_handover_tv) {
+        bool transaction_is_stale = m_delivered_transaction &&
+            (!realm->is_in_read_transaction() || realm->read_transaction_version() > m_delivered_transaction->get_version_of_current_transaction());
+        if (transaction_is_stale) {
+            m_delivered_tv.reset();
+            m_delivered_transaction.reset();
+        }
         return true;
+    }
 
     m_results_were_used = !m_delivered_tv;
     m_delivered_tv.reset();

+ 10 - 0
Carthage/Checkouts/realm-cocoa/Realm/ObjectStore/tests/results.cpp

@@ -980,6 +980,7 @@ TEST_CASE("notifications: TableView delivery") {
 
     InMemoryTestFile config;
     config.automatic_change_notifications = false;
+    config.max_number_of_active_versions = 5;
 
     auto r = Realm::get_shared_realm(config);
     r->update_schema({
@@ -1092,6 +1093,15 @@ TEST_CASE("notifications: TableView delivery") {
         REQUIRE(results.size() == 11);
         r->cancel_transaction();
     }
+
+    SECTION("unused background TVs do not pin old versions forever") {
+        // This will exceed the maximum active version count (5) if any
+        // transactions are being pinned, resulting in make_remote_change() throwing
+        for (int i = 0; i < 10; ++i) {
+            REQUIRE_NOTHROW(make_remote_change());
+            advance_and_notify(*r);
+        }
+    }
 }
 
 

+ 1 - 1
Carthage/Checkouts/realm-cocoa/Realm/ObjectStore/tests/util/test_file.hpp

@@ -142,7 +142,7 @@ struct SyncTestFile : TestFile {
 };
 
 struct TestSyncManager {
-    TestSyncManager(std::string const& base_path="", realm::SyncManager::MetadataMode = realm::SyncManager::MetadataMode::NoEncryption);
+    TestSyncManager(std::string const& base_path="", realm::SyncManager::MetadataMode = realm::SyncManager::MetadataMode::NoMetadata);
     ~TestSyncManager();
     static void configure(std::string const& base_path, realm::SyncManager::MetadataMode);
 };

+ 2 - 7
Carthage/Checkouts/realm-cocoa/Realm/ObjectStore/workflow/test_coverage.sh

@@ -6,11 +6,6 @@
 sync=${1}
 deps_suffix="${2}"
 
-nprocs=1
-if [ "$(uname)" = "Linux" ]; then
-  nprocs=$(grep -c ^processor /proc/cpuinfo)
-fi
-
 : ${OPENSSL_ROOT_DIR:=/usr/local}
 
 set -e
@@ -30,7 +25,7 @@ if [ "${sync}" = "sync" ]; then
     cmake_flags="${cmake_flags} -DREALM_ENABLE_SYNC=1 -DREALM_ENABLE_SERVER=1 -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}"
 fi
 
-cmake ${cmake_flags} -DCMAKE_BUILD_TYPE=Coverage -DDEPENDENCIES_FILE="dependencies${deps_suffix}.list" ..
-make VERBOSE=1 -j${nprocs} generate-coverage-cobertura
+cmake ${cmake_flags} -G Ninja -DCMAKE_BUILD_TYPE=Coverage -DDEPENDENCIES_FILE="dependencies${deps_suffix}.list" ..
+ninja -v generate-coverage-cobertura
 
 find $TMPDIR -name 'realm*' -exec rm -rf "{}" \+ || true

+ 2 - 2
Carthage/Checkouts/realm-cocoa/Realm/Realm-Info.plist

@@ -17,11 +17,11 @@
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
-	<string>5.3.2</string>
+	<string>5.3.3</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>5.3.2</string>
+	<string>5.3.3</string>
 	<key>NSHumanReadableCopyright</key>
 	<string>Copyright © 2014 Realm. All rights reserved.</string>
 	<key>NSPrincipalClass</key>

+ 0 - 7
Carthage/Checkouts/realm-cocoa/build.sh

@@ -363,13 +363,6 @@ download_common() {
     rm -rf "${download_type}-${version}" core
     mv "${temp_dir}/${download_type}-${version}" .
     ln -s "${download_type}-${version}" core
-
-    # Xcode 12 beta 1 ships a broken version of __bit_reference which breaks
-    # ABI compatibility with older versions, so grab a fixed version of that
-    # header.
-    if (( $(xcode_version_major) > 11 )); then
-        curl --silent https://raw.githubusercontent.com/llvm/llvm-project/4198874630be5c6126d78944f8a2d89dea90c7c4/libcxx/include/__bit_reference -o core/include/__bit_reference
-    fi
 }
 
 download_core() {

+ 3 - 3
Carthage/Checkouts/realm-cocoa/dependencies.list

@@ -1,4 +1,4 @@
-VERSION=5.3.2
-REALM_CORE_VERSION=6.0.12
-REALM_SYNC_VERSION=5.0.12
+VERSION=5.3.3
+REALM_CORE_VERSION=6.0.14
+REALM_SYNC_VERSION=5.0.14
 REALM_OBJECT_SERVER_VERSION=3.28.5

+ 39 - 25
iOSClient/Networking/NCNetworkingAutoUpload.swift

@@ -31,8 +31,7 @@ class NCNetworkingAutoUpload: NSObject {
     
     override init() {
         super.init()
-
-        timerProcess = Timer.scheduledTimer(timeInterval: TimeInterval(k_timerAutoUpload), target: self, selector: #selector(process), userInfo: nil, repeats: true)
+        startTimer()
     }
     
     @objc func startProcess() {
@@ -40,50 +39,66 @@ class NCNetworkingAutoUpload: NSObject {
             process()
         }
     }
+    
+    func startTimer() {
+        timerProcess = Timer.scheduledTimer(timeInterval: TimeInterval(k_timerAutoUpload), target: self, selector: #selector(process), userInfo: nil, repeats: false)
+    }
 
     @objc private func process() {
 
-        var counterUpload = 0
+        var counterUpload: Int = 0
         var sizeUpload = 0
-        var maxConcurrentOperationUpload = k_maxConcurrentOperation
+        var maxConcurrentOperationUpload = Int(k_maxConcurrentOperation)
         
         if appDelegate.activeAccount == nil || appDelegate.activeAccount.count == 0 || appDelegate.maintenanceMode {
             return
         }
         
-        timerProcess?.invalidate()
-        
         let metadatasUpload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "status == %d OR status == %d", k_metadataStatusInUpload, k_metadataStatusUploading))
         counterUpload = metadatasUpload.count
         for metadata in metadatasUpload {
             sizeUpload = sizeUpload + Int(metadata.size)
         }
-    
+        if sizeUpload > k_maxSizeOperationUpload {
+            return
+        }
+        timerProcess?.invalidate()
+        
         debugPrint("[LOG] PROCESS-AUTO-UPLOAD \(counterUpload)")
     
         // ------------------------- <selector Upload> -------------------------
          
-        while counterUpload < maxConcurrentOperationUpload {
-            if sizeUpload > k_maxSizeOperationUpload { break }
+        if counterUpload < maxConcurrentOperationUpload {
+            let limit = maxConcurrentOperationUpload - counterUpload
             let predicate = NSPredicate(format: "sessionSelector == %@ AND status == %d", selectorUploadFile, k_metadataStatusWaitUpload)
-             
-            if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: predicate, sorted: "date", ascending: true) {
+            let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: predicate, page: 1, limit: limit, sorted: "date", ascending: true)
+            for metadata in metadatas {
                 if CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account) {
                     if UIApplication.shared.applicationState == .background { break }
                     maxConcurrentOperationUpload = 1
+                    counterUpload += 1
+                    NCNetworking.shared.upload(metadata: metadata, background: true) { (_, _) in }
+                    startTimer()
+                    return
+                } else {
+                    counterUpload += 1
+                    NCNetworking.shared.upload(metadata: metadata, background: true) { (_, _) in }
+                    sizeUpload = sizeUpload + Int(metadata.size)
+                    if sizeUpload > k_maxSizeOperationUpload {
+                        startTimer()
+                        return
+                    }
                 }
-                NCManageDatabase.sharedInstance.setMetadataSession(ocId: metadata.ocId, status: Int(k_metadataStatusInUpload))
-                
-                NCNetworking.shared.upload(metadata: metadata, background: true) { (_, _) in }
-                counterUpload += 1
-                sizeUpload = sizeUpload + Int(metadata.size)
-            } else {
-                break
             }
         }
-         
+        if counterUpload >= maxConcurrentOperationUpload {
+            startTimer()
+            return
+        }
+        
         // ------------------------- <selector Auto Upload> -------------------------
-             
+          
+        /*
         while counterUpload < maxConcurrentOperationUpload {
             if sizeUpload > k_maxSizeOperationUpload { break }
             var predicate = NSPredicate()
@@ -139,7 +154,8 @@ class NCNetworkingAutoUpload: NSObject {
                 }
             }
         }
-         
+        */
+        
         // No upload available ? --> Retry Upload in Error
         if counterUpload == 0 {
             let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "status == %d", k_metadataStatusUploadError))
@@ -151,12 +167,10 @@ class NCNetworkingAutoUpload: NSObject {
         // verify delete Asset Local Identifiers in auto upload (DELETE Photos album)
         if (counterUpload == 0 && appDelegate.passcodeViewController == nil) {
             NCUtility.sharedInstance.deleteAssetLocalIdentifiers(account: appDelegate.activeAccount, sessionSelector: selectorUploadAutoUpload) {
-                
-                self.timerProcess = Timer.scheduledTimer(timeInterval: TimeInterval(k_timerAutoUpload), target: self, selector: #selector(self.process), userInfo: nil, repeats: true)
+                self.startTimer()
             }
         } else {
-            
-            timerProcess = Timer.scheduledTimer(timeInterval: TimeInterval(k_timerAutoUpload), target: self, selector: #selector(process), userInfo: nil, repeats: true)
+            startTimer()
         }
      }
 }