diff --git a/Signal/src/ViewControllers/ConversationView/ConversationMessageMapping.swift b/Signal/src/ViewControllers/ConversationView/ConversationMessageMapping.swift index 497b60d418..c77885a7e6 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationMessageMapping.swift +++ b/Signal/src/ViewControllers/ConversationView/ConversationMessageMapping.swift @@ -200,7 +200,7 @@ public class ConversationMessageMapping: NSObject { throw assertionError("could not find interaction") } - let threadInteractionCount = try interactionFinder.count(transaction: transaction) + let threadInteractionCount = interactionFinder.count(transaction: transaction) guard index < threadInteractionCount else { throw assertionError("invalid index") } diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages+OWS.swift b/Signal/src/ViewControllers/DebugUI/DebugUIMessages+OWS.swift index 88e624ed00..443a92da4a 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages+OWS.swift +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages+OWS.swift @@ -12,7 +12,7 @@ public extension DebugUIMessages { let interactionFinder = InteractionFinder(threadUniqueId: thread.uniqueId!) - let messageCount = try! interactionFinder.count(transaction: transaction) + let messageCount = interactionFinder.count(transaction: transaction) var messageIndices: [UInt] = Array((0.. Bool { @@ -616,7 +616,7 @@ private struct MediaLibraryAttachment: Hashable, Equatable { let attachmentApprovalItemPromise: Promise func hash(into hasher: inout Hasher) { - asset.hash(into: &hasher) + hasher.combine(asset) } static func ==(lhs: MediaLibraryAttachment, rhs: MediaLibraryAttachment) -> Bool { diff --git a/Signal/src/call/CallAudioService.swift b/Signal/src/call/CallAudioService.swift index 488ccaf3fc..844ec5f997 100644 --- a/Signal/src/call/CallAudioService.swift +++ b/Signal/src/call/CallAudioService.swift @@ -77,12 +77,14 @@ struct AudioSource: Hashable { return lhsPortDescription.uid == rhsPortDescription.uid } - var hashValue: Int { + public func hash(into hasher: inout Hasher) { guard let portDescription = self.portDescription else { assert(self.isBuiltInSpeaker) - return "Built In Speaker".hashValue + hasher.combine("Built In Speaker") + return } - return portDescription.uid.hash + + hasher.combine(portDescription.uid) } } diff --git a/Signal/src/util/UI Categories/AVAudioSession+OWS.h b/Signal/src/util/UI Categories/AVAudioSession+OWS.h index 1e8f7483b5..a1db570e50 100644 --- a/Signal/src/util/UI Categories/AVAudioSession+OWS.h +++ b/Signal/src/util/UI Categories/AVAudioSession+OWS.h @@ -2,7 +2,7 @@ // Copyright (c) 2019 Open Whisper Systems. All rights reserved. // -#import +#import NS_ASSUME_NONNULL_BEGIN diff --git a/Signal/src/views/MarqueeLabel.swift b/Signal/src/views/MarqueeLabel.swift index d892299f27..a78766a796 100644 --- a/Signal/src/views/MarqueeLabel.swift +++ b/Signal/src/views/MarqueeLabel.swift @@ -240,7 +240,7 @@ open class MarqueeLabel: UILabel, CAAnimationDelegate { } } - @available(*, deprecated : 2.6, message : "Use speed property instead") + @available(iOS, deprecated: 2.6, message : "Use speed property instead") @IBInspectable open var scrollDuration: CGFloat { get { switch speed { @@ -253,7 +253,7 @@ open class MarqueeLabel: UILabel, CAAnimationDelegate { } } - @available(*, deprecated : 2.6, message : "Use speed property instead") + @available(iOS, deprecated: 2.6, message : "Use speed property instead") @IBInspectable open var scrollRate: CGFloat { get { switch speed { diff --git a/Signal/test/mocks/MockEnvironment.h b/Signal/test/mocks/MockEnvironment.h index 5406613f7f..db330cf4a5 100644 --- a/Signal/test/mocks/MockEnvironment.h +++ b/Signal/test/mocks/MockEnvironment.h @@ -12,11 +12,6 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init; -@property (nonatomic) OWSContactsManager *contactsManager; -@property (nonatomic) OWSPreferences *preferences; -@property (nonatomic) OWSSounds *sounds; -@property (nonatomic) OWSWindowManager *windowManager; - @end NS_ASSUME_NONNULL_END diff --git a/Signal/test/util/ByteParserTest.swift b/Signal/test/util/ByteParserTest.swift index dac0b9136f..0f8ef2ee00 100644 --- a/Signal/test/util/ByteParserTest.swift +++ b/Signal/test/util/ByteParserTest.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import XCTest @@ -26,7 +26,7 @@ class ByteParserTest: SignalBaseTest { } func testGetShort_littleEndian() { - let data = Data(bytes: [0x01, 0x00, 0x00, 0x01, 0x01, 0x01 ]) + let data = Data([0x01, 0x00, 0x00, 0x01, 0x01, 0x01]) let parser = ByteParser(data: data, littleEndian: true) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) @@ -45,7 +45,7 @@ class ByteParserTest: SignalBaseTest { } func testGetShort_bigEndian() { - let data = Data(bytes: [0x01, 0x00, 0x00, 0x01, 0x01, 0x01 ]) + let data = Data([0x01, 0x00, 0x00, 0x01, 0x01, 0x01]) let parser = ByteParser(data: data, littleEndian: false) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) @@ -73,7 +73,7 @@ class ByteParserTest: SignalBaseTest { } func testGetInt_littleEndian() { - let data = Data(bytes: [0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00 ]) + let data = Data([0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00]) let parser = ByteParser(data: data, littleEndian: true) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) @@ -92,7 +92,7 @@ class ByteParserTest: SignalBaseTest { } func testGetInt_bigEndian() { - let data = Data(bytes: [0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01 ]) + let data = Data([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01]) let parser = ByteParser(data: data, littleEndian: false) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) @@ -120,7 +120,7 @@ class ByteParserTest: SignalBaseTest { } func testGetLong_littleEndian() { - let data = Data(bytes: [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]) + let data = Data([0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) let parser = ByteParser(data: data, littleEndian: true) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) @@ -139,7 +139,7 @@ class ByteParserTest: SignalBaseTest { } func testGetLong_bigEndian() { - let data = Data(bytes: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 ]) + let data = Data([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01]) let parser = ByteParser(data: data, littleEndian: false) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) @@ -167,7 +167,7 @@ class ByteParserTest: SignalBaseTest { } func testReadZero() { - let data = Data(bytes: [0x00, 0x01, 0x00, 0x00, 0x01, 0x00]) + let data = Data([0x00, 0x01, 0x00, 0x00, 0x01, 0x00]) let parser = ByteParser(data: data, littleEndian: true) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) @@ -198,21 +198,21 @@ class ByteParserTest: SignalBaseTest { } func testReadBytes() { - let data = Data(bytes: [0x00, 0x01, 0x02, 0x03, 0x04, 0x05]) + let data = Data([0x00, 0x01, 0x02, 0x03, 0x04, 0x05]) let parser = ByteParser(data: data, littleEndian: true) XCTAssertNotNil(parser) XCTAssertFalse(parser.hasError) - XCTAssertEqual(Data(bytes: [0x00 ]), parser.readBytes(1)) + XCTAssertEqual(Data([0x00]), parser.readBytes(1)) XCTAssertFalse(parser.hasError) - XCTAssertEqual(Data(bytes: [0x01 ]), parser.readBytes(1)) + XCTAssertEqual(Data([0x01]), parser.readBytes(1)) XCTAssertFalse(parser.hasError) - XCTAssertEqual(Data(bytes: [0x02, 0x03]), parser.readBytes(2)) + XCTAssertEqual(Data([0x02, 0x03]), parser.readBytes(2)) XCTAssertFalse(parser.hasError) - XCTAssertEqual(Data(bytes: [0x04, 0x05]), parser.readBytes(2)) + XCTAssertEqual(Data([0x04, 0x05]), parser.readBytes(2)) XCTAssertFalse(parser.hasError) XCTAssertNil(parser.readBytes(1)) diff --git a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentItemCollection.swift b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentItemCollection.swift index 2dd54afe38..1b03c9fe01 100644 --- a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentItemCollection.swift +++ b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentItemCollection.swift @@ -61,7 +61,7 @@ public class AttachmentApprovalItem: Hashable { // MARK: Hashable public func hash(into hasher: inout Hasher) { - return attachment.hash(into: &hasher) + return hasher.combine(attachment) } // MARK: Equatable diff --git a/SignalMessaging/ViewControllers/Stickers/ManageStickersViewController.swift b/SignalMessaging/ViewControllers/Stickers/ManageStickersViewController.swift index 6390b1b200..b3e2d3e1ca 100644 --- a/SignalMessaging/ViewControllers/Stickers/ManageStickersViewController.swift +++ b/SignalMessaging/ViewControllers/Stickers/ManageStickersViewController.swift @@ -217,7 +217,7 @@ public class ManageStickersViewController: OWSTableViewController { } private func buildTableCell(installedStickerPack stickerPack: StickerPack) -> UITableViewCell { - var actionIconName = CurrentAppContext().isRTL ? "reply-filled-24" : "reply-filled-reversed-24" + let actionIconName = CurrentAppContext().isRTL ? "reply-filled-24" : "reply-filled-reversed-24" return buildTableCell(stickerPack: stickerPack, stickerInfo: stickerPack.coverInfo, title: stickerPack.title, diff --git a/SignalMessaging/categories/UIFont+OWS.m b/SignalMessaging/categories/UIFont+OWS.m index 904e4371e6..d818882160 100644 --- a/SignalMessaging/categories/UIFont+OWS.m +++ b/SignalMessaging/categories/UIFont+OWS.m @@ -123,7 +123,7 @@ NS_ASSUME_NONNULL_BEGIN UIFontTextStyleCaption1 : @(18.0), UIFontTextStyleCaption2 : @(17.0), } mutableCopy]; - if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(11, 0)) { + if (@available(iOS 11.0, *)) { map[UIFontTextStyleLargeTitle] = @(40.0); } maxPointSizeMap = map; @@ -144,7 +144,7 @@ NS_ASSUME_NONNULL_BEGIN + (UIFont *)ows_dynamicTypeLargeTitle1ClampedFont { - if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(11, 0)) { + if (@available(iOS 11.0, *)) { return [UIFont preferredFontForTextStyleClamped:UIFontTextStyleLargeTitle]; } else { return [UIFont preferredFontForTextStyleClamped:UIFontTextStyleTitle1]; diff --git a/SignalMessaging/contacts/SystemContactsFetcher.swift b/SignalMessaging/contacts/SystemContactsFetcher.swift index 10049983cf..3c9f595a5e 100644 --- a/SignalMessaging/contacts/SystemContactsFetcher.swift +++ b/SignalMessaging/contacts/SystemContactsFetcher.swift @@ -357,7 +357,8 @@ public class SystemContactsFetcher: NSObject { } Logger.info("fetched \(contacts.count) contacts.") - let contactsHash = HashableArray(contacts).hashValue + + let contactsHash = contacts.hashValue DispatchQueue.main.async { var shouldNotifyDelegate = false @@ -414,25 +415,3 @@ public class SystemContactsFetcher: NSObject { return contactStoreAdapter.fetchCNContact(contactId: contactId) } } - -struct HashableArray: Hashable { - var elements: [Element] - init(_ elements: [Element]) { - self.elements = elements - } - - var hashValue: Int { - // random generated 32bit number - let base = 224712574 - var position = 0 - return elements.reduce(base) { (result, element) -> Int in - // Make sure change in sort order invalidates hash - position += 1 - return result ^ element.hashValue + position - } - } - - static func == (lhs: HashableArray, rhs: HashableArray) -> Bool { - return lhs.hashValue == rhs.hashValue - } -} diff --git a/SignalServiceKit/src/Contacts/OWSContactDiscoveryOperation.swift b/SignalServiceKit/src/Contacts/OWSContactDiscoveryOperation.swift index 30b3440d76..d206128614 100644 --- a/SignalServiceKit/src/Contacts/OWSContactDiscoveryOperation.swift +++ b/SignalServiceKit/src/Contacts/OWSContactDiscoveryOperation.swift @@ -462,6 +462,8 @@ class CDSFeedbackOperation: OWSOperation { self.makeRequest(result: .unexpectedError(reason: "CDS assertionError: \(reason ?? "unknown")")) case .attestationFailed: self.makeRequest(result: .attestationError(reason: "CDS attestationFailed: \(reason ?? "unknown")")) + @unknown default: + self.makeRequest(result: .unexpectedError(reason: "CDS assertionError: unknown cdsError.code")) } case ContactDiscoveryError.assertionError(let assertionDescription): self.makeRequest(result: .unexpectedError(reason: "assertionError: \(assertionDescription)")) diff --git a/SignalServiceKit/src/Messages/TSCall.h b/SignalServiceKit/src/Messages/TSCall.h index 3f2b9da646..94cc73648a 100644 --- a/SignalServiceKit/src/Messages/TSCall.h +++ b/SignalServiceKit/src/Messages/TSCall.h @@ -34,15 +34,6 @@ NSString *NSStringFromCallType(RPRecentCallType callType); callType:(RPRecentCallType)callType inThread:(TSContactThread *)thread NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithUniqueId:(NSString *)uniqueId - receivedAtTimestamp:(uint64_t)receivedAtTimestamp - sortId:(uint64_t)sortId - timestamp:(uint64_t)timestamp - uniqueThreadId:(NSString *)uniqueThreadId - callSchemaVersion:(NSUInteger)callSchemaVersion - callType:(RPRecentCallType)callType - read:(BOOL)read NS_DESIGNATED_INITIALIZER; - // --- CODE GENERATION MARKER // This snippet is generated by /Scripts/sds_codegen/sds_generate.py. Do not manually edit it, instead run `sds_codegen.sh`. diff --git a/SignalServiceKit/src/Storage/Jobs/SSKJobRecord.h b/SignalServiceKit/src/Storage/Jobs/SSKJobRecord.h index 2e02ede71d..27f351c55a 100644 --- a/SignalServiceKit/src/Storage/Jobs/SSKJobRecord.h +++ b/SignalServiceKit/src/Storage/Jobs/SSKJobRecord.h @@ -15,7 +15,7 @@ typedef NS_ERROR_ENUM(SSKJobRecordErrorDomain, JobRecordError){ JobRecordError_IllegalStateTransition, }; -typedef NS_ENUM(NSUInteger, SSKJobRecordStatus) { +typedef NS_CLOSED_ENUM(NSUInteger, SSKJobRecordStatus){ SSKJobRecordStatus_Unknown, SSKJobRecordStatus_Ready, SSKJobRecordStatus_Running, diff --git a/SignalServiceKit/src/Util/JobQueue.swift b/SignalServiceKit/src/Util/JobQueue.swift index 7e7a4d4d58..ea80f5f208 100644 --- a/SignalServiceKit/src/Util/JobQueue.swift +++ b/SignalServiceKit/src/Util/JobQueue.swift @@ -205,11 +205,7 @@ public extension JobQueue { databaseStorage.write { transaction in let runningRecords = self.finder.allRecords(label: self.jobRecordLabel, status: .running, transaction: transaction) Logger.info("marking old `running` JobRecords as ready: \(runningRecords.count)") - for record in runningRecords { - guard let jobRecord = record as? JobRecordType else { - owsFailDebug("unexpected jobRecord: \(record)") - continue - } + for jobRecord in runningRecords { do { try jobRecord.saveRunningAsReady(transaction: transaction) self.didMarkAsReady(oldJobRecord: jobRecord, transaction: transaction) diff --git a/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m b/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m index 359259a76f..ea08d82e4d 100644 --- a/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m +++ b/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // #import "SSKBaseTestObjC.h" @@ -77,10 +77,15 @@ NSKeyedArchiver *archiver = [NSKeyedArchiver new]; [archiver encodeBytes:publicKeyBytes length:ECCKeyLength forKey:@"TSECKeyPairPublicKey"]; [archiver encodeBytes:privateKeyBytes length:ECCKeyLength forKey:@"TSECKeyPairPrivateKey"]; - NSData *serialized = [archiver encodedData]; - - NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:serialized]; - return [[ECKeyPair alloc] initWithCoder:unarchiver]; + + if (@available(iOS 10.0, *)) { + NSData *serialized = [archiver encodedData]; + NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:serialized]; + return [[ECKeyPair alloc] initWithCoder:unarchiver]; + } else { + XCTFail(@"This test is only supported on iOS10+"); + return [ECKeyPair new]; + } } - (NSData *)knownData diff --git a/SignalShareExtension/ShareViewController.swift b/SignalShareExtension/ShareViewController.swift index 9d717217b9..9def7f1d27 100644 --- a/SignalShareExtension/ShareViewController.swift +++ b/SignalShareExtension/ShareViewController.swift @@ -691,15 +691,11 @@ public class ShareViewController: UIViewController, ShareViewDelegate, SAEFailed } return isUrlItem(itemProvider: itemProvider) }) { - if let itemProvider = preferredAttachment as? NSItemProvider { - return [itemProvider] - } else { - owsFailDebug("Unexpected attachment type: \(String(describing: preferredAttachment))") - } + return [preferredAttachment] } // else return whatever is available - if let itemProvider = inputItem.attachments?.first as? NSItemProvider { + if let itemProvider = inputItem.attachments?.first { return [itemProvider] } else { owsFailDebug("Missing attachment.")