diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index e140ffea0..44afd28b8 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -15,7 +15,6 @@ 340CB2241EAC155C0001CAA1 /* ContactsViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 340CB2231EAC155C0001CAA1 /* ContactsViewHelper.m */; }; 340CB2271EAC25820001CAA1 /* UpdateGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340CB2261EAC25820001CAA1 /* UpdateGroupViewController.m */; }; 341F2C0F1F2B8AE700D07D6B /* DebugUIMisc.m in Sources */ = {isa = PBXBuildFile; fileRef = 341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */; }; - 342FCE6B1EF9C375002690AD /* OWS105AttachmentFilePaths.m in Sources */ = {isa = PBXBuildFile; fileRef = 342FCE6A1EF9C375002690AD /* OWS105AttachmentFilePaths.m */; }; 3430FE181F7751D4000EC51B /* GiphyAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3430FE171F7751D4000EC51B /* GiphyAPI.swift */; }; 34330A5A1E7875FB00DF2FB9 /* fontawesome-webfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A591E7875FB00DF2FB9 /* fontawesome-webfont.ttf */; }; 34330A5C1E787A9800DF2FB9 /* dripicons-v2.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5B1E787A9800DF2FB9 /* dripicons-v2.ttf */; }; @@ -25,7 +24,7 @@ 343A65981FC4CFE7000477A1 /* ConversationScrollButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 343A65961FC4CFE6000477A1 /* ConversationScrollButton.m */; }; 343D3D9B1E9283F100165CA4 /* BlockListUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 343D3D9A1E9283F100165CA4 /* BlockListUIUtils.m */; }; 34480B361FD0929200BC14EF /* ShareAppExtensionContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B351FD0929200BC14EF /* ShareAppExtensionContext.m */; }; - 34480B491FD0A60200BC14EF /* OWSMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B481FD0A60200BC14EF /* OWSMath.h */; }; + 34480B491FD0A60200BC14EF /* OWSMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B481FD0A60200BC14EF /* OWSMath.h */; settings = {ATTRIBUTES = (Public, ); }; }; 34480B521FD0A7A400BC14EF /* OWSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B4A1FD0A7A200BC14EF /* OWSLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; 34480B531FD0A7A400BC14EF /* OWSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B4B1FD0A7A300BC14EF /* OWSLogger.m */; }; 34480B551FD0A7A400BC14EF /* DebugLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B4D1FD0A7A300BC14EF /* DebugLogger.h */; }; @@ -48,6 +47,31 @@ 346129341FD1A88700532771 /* OWSSwiftUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346129331FD1A88700532771 /* OWSSwiftUtils.swift */; }; 346129391FD1B47300532771 /* OWSPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129371FD1B47200532771 /* OWSPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3461293A1FD1B47300532771 /* OWSPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129381FD1B47200532771 /* OWSPreferences.m */; }; + 3461293C1FD1D46A00532771 /* OWSMath.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461293B1FD1D46900532771 /* OWSMath.m */; }; + 3461293E1FD1D72B00532771 /* ExperienceUpgradeFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3461293D1FD1D72B00532771 /* ExperienceUpgradeFinder.swift */; }; + 3461295A1FD1D74C00532771 /* Environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129401FD1D74B00532771 /* Environment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3461295B1FD1D74C00532771 /* Environment.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129411FD1D74B00532771 /* Environment.m */; }; + 3461296F1FD1D74C00532771 /* Release.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129561FD1D74B00532771 /* Release.h */; }; + 346129701FD1D74C00532771 /* Release.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129571FD1D74B00532771 /* Release.m */; }; + 346129711FD1D74C00532771 /* SignalKeyingStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129581FD1D74B00532771 /* SignalKeyingStorage.h */; }; + 346129721FD1D74C00532771 /* SignalKeyingStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129591FD1D74B00532771 /* SignalKeyingStorage.m */; }; + 346129731FD1E01700532771 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 451DE9F11DC1585F00810E42 /* PromiseKit.framework */; }; + 346129741FD1E02D00532771 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 451DE9F11DC1585F00810E42 /* PromiseKit.framework */; }; + 346129761FD1E0B500532771 /* WeakTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346129751FD1E0B500532771 /* WeakTimer.swift */; }; + 346129891FD1E2AB00532771 /* OWS100RemoveTSRecipientsMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129791FD1E2AB00532771 /* OWS100RemoveTSRecipientsMigration.m */; }; + 3461298A1FD1E2AB00532771 /* OWS101ExistingUsersBlockOnIdentityChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461297B1FD1E2AB00532771 /* OWS101ExistingUsersBlockOnIdentityChange.m */; }; + 3461298B1FD1E2AB00532771 /* OWS102MoveLoggingPreferenceToUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461297D1FD1E2AB00532771 /* OWS102MoveLoggingPreferenceToUserDefaults.m */; }; + 3461298C1FD1E2AB00532771 /* OWS103EnableVideoCalling.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461297F1FD1E2AB00532771 /* OWS103EnableVideoCalling.m */; }; + 3461298D1FD1E2AB00532771 /* OWS104CreateRecipientIdentities.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129811FD1E2AB00532771 /* OWS104CreateRecipientIdentities.m */; }; + 3461298E1FD1E2AB00532771 /* OWS105AttachmentFilePaths.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129831FD1E2AB00532771 /* OWS105AttachmentFilePaths.m */; }; + 3461298F1FD1E2AB00532771 /* OWS106EnsureProfileComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346129841FD1E2AB00532771 /* OWS106EnsureProfileComplete.swift */; }; + 346129911FD1E2AB00532771 /* OWSDatabaseMigrationRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129881FD1E2AB00532771 /* OWSDatabaseMigrationRunner.m */; }; + 346129951FD1E30000532771 /* OWSDatabaseMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129931FD1E30000532771 /* OWSDatabaseMigration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 346129961FD1E30000532771 /* OWSDatabaseMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129941FD1E30000532771 /* OWSDatabaseMigration.m */; }; + 346129991FD1E4DA00532771 /* SignalApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129971FD1E4D900532771 /* SignalApp.m */; }; + 3461299C1FD1EA9E00532771 /* NotificationsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461299B1FD1EA9E00532771 /* NotificationsManager.m */; }; + 3461299F1FD1EFE200532771 /* CryptoTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3461299D1FD1EFE200532771 /* CryptoTools.h */; }; + 346129A01FD1EFE200532771 /* CryptoTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461299E1FD1EFE200532771 /* CryptoTools.m */; }; 346B66311F4E29B200E5122F /* CropScaleImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346B66301F4E29B200E5122F /* CropScaleImageViewController.swift */; }; 3471B1DA1EB7C63600F6AEC8 /* NewNonContactConversationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3471B1D91EB7C63600F6AEC8 /* NewNonContactConversationViewController.m */; }; 3472229F1EB22FFE00E53955 /* AddToGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3472229E1EB22FFE00E53955 /* AddToGroupViewController.m */; }; @@ -143,18 +167,14 @@ 34FD93701E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 34FD936F1E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.m */; }; 450449391F45EE7D002D1ADA /* NSString+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 450449381F45EE7D002D1ADA /* NSString+OWS.m */; }; 4504493A1F45EE7D002D1ADA /* NSString+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 450449381F45EE7D002D1ADA /* NSString+OWS.m */; }; - 450573FE1E78A06D00615BB4 /* OWS103EnableVideoCalling.m in Sources */ = {isa = PBXBuildFile; fileRef = 450573FD1E78A06D00615BB4 /* OWS103EnableVideoCalling.m */; }; 4505C2BF1E648EA300CEBF41 /* ExperienceUpgrade.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4505C2BE1E648EA300CEBF41 /* ExperienceUpgrade.swift */; }; 4505C2C01E648EA300CEBF41 /* ExperienceUpgrade.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4505C2BE1E648EA300CEBF41 /* ExperienceUpgrade.swift */; }; - 4505C2C21E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4505C2C11E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift */; }; - 4505C2C31E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4505C2C11E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift */; }; 4509E79A1DD653700025A59F /* WebRTC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4509E7991DD653700025A59F /* WebRTC.framework */; }; 450D19131F85236600970622 /* RemoteVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 450D19121F85236600970622 /* RemoteVideoView.m */; }; 450DF2051E0D74AC003D14BE /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 450DF2041E0D74AC003D14BE /* Platform.swift */; }; 450DF2091E0DD2C6003D14BE /* UserNotificationsAdaptee.swift in Sources */ = {isa = PBXBuildFile; fileRef = 450DF2081E0DD2C6003D14BE /* UserNotificationsAdaptee.swift */; }; 451686AB1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451686AA1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift */; }; 451686AC1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451686AA1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift */; }; - 4516E3FF1DD2193B00DC4206 /* OWS101ExistingUsersBlockOnIdentityChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 4516E3FE1DD2193B00DC4206 /* OWS101ExistingUsersBlockOnIdentityChange.m */; }; 4517642A1DE939FD00EDB8B9 /* ContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 451764281DE939FD00EDB8B9 /* ContactCell.xib */; }; 4517642B1DE939FD00EDB8B9 /* ContactCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451764291DE939FD00EDB8B9 /* ContactCell.swift */; }; 451A13B11E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451A13B01E13DED2000A50FD /* CallNotificationsAdapter.swift */; }; @@ -193,7 +213,6 @@ 45360B901F9527DA00FA666C /* SearcherTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45360B8F1F9527DA00FA666C /* SearcherTest.swift */; }; 45360B911F952AA900FA666C /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */; }; 45360B921F952AB400FA666C /* OWSFlatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */; }; - 45387B041E36D650005D00B3 /* OWS102MoveLoggingPreferenceToUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 45387B031E36D650005D00B3 /* OWS102MoveLoggingPreferenceToUserDefaults.m */; }; 4539B5861F79348F007141FF /* PushRegistrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4539B5851F79348F007141FF /* PushRegistrationManager.swift */; }; 4539B5871F79348F007141FF /* PushRegistrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4539B5851F79348F007141FF /* PushRegistrationManager.swift */; }; 4542F0941EB9372700C7EE92 /* SystemContactsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4542F0931EB9372700C7EE92 /* SystemContactsFetcher.swift */; }; @@ -210,15 +229,10 @@ 455AC69E1F4F8B0300134004 /* ImageCacheTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 455AC69D1F4F8B0300134004 /* ImageCacheTest.swift */; }; 45638BDC1F3DD0D400128435 /* DebugUICalling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45638BDB1F3DD0D400128435 /* DebugUICalling.swift */; }; 45638BDF1F3DDB2200128435 /* MessageSender+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45638BDE1F3DDB2200128435 /* MessageSender+Promise.swift */; }; - 4563ADF11F22BD7100DEB8C7 /* OWS106EnsureProfileComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4563ADF01F22BD7100DEB8C7 /* OWS106EnsureProfileComplete.swift */; }; 45666EC61D99483D008FE134 /* OWSAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */; }; 45666EC91D994C0D008FE134 /* OWSGroupAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC81D994C0D008FE134 /* OWSGroupAvatarBuilder.m */; }; 45666F581D9B2880008FE134 /* OWSScrubbingLogFormatterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666F571D9B2880008FE134 /* OWSScrubbingLogFormatterTest.m */; }; - 45666F761D9BFE00008FE134 /* OWS100RemoveTSRecipientsMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666F751D9BFE00008FE134 /* OWS100RemoveTSRecipientsMigration.m */; }; - 45666F7B1D9C0533008FE134 /* OWSDatabaseMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666F7A1D9C0533008FE134 /* OWSDatabaseMigration.m */; }; - 45666F7E1D9C0814008FE134 /* OWSDatabaseMigrationRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666F7D1D9C0814008FE134 /* OWSDatabaseMigrationRunner.m */; }; 456AC8341E3A775E00A3C7FC /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170D51E315310003FC1F2 /* Weak.swift */; }; - 456AC8351E3A776300A3C7FC /* WeakTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170CB1E310E22003FC1F2 /* WeakTimer.swift */; }; 456C38961DC7B882007536A7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 451DE9F11DC1585F00810E42 /* PromiseKit.framework */; }; 456F6E201E2411A000FD2210 /* CallService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4574A5D51DD6704700C6B692 /* CallService.swift */; }; 456F6E211E2411B400FD2210 /* CallUIAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45794E851E00620000066731 /* CallUIAdapter.swift */; }; @@ -233,7 +247,6 @@ 45847E871E4283C30080EAB3 /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45847E861E4283C30080EAB3 /* Intents.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 45855F371D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */; }; 45855F381D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */; }; - 4585C4601ED4FD0400896AEA /* OWS104CreateRecipientIdentities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4585C45F1ED4FD0400896AEA /* OWS104CreateRecipientIdentities.m */; }; 4585C4681ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4585C4671ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift */; }; 458967111DC117CC00E9DD21 /* AccountManagerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458967101DC117CC00E9DD21 /* AccountManagerTest.swift */; }; 458D51481FCCD82500B5BC53 /* GSR4.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51401FCCD82400B5BC53 /* GSR4.crt */; }; @@ -281,7 +294,6 @@ 45F170AD1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */; }; 45F170BB1E2FC5D3003FC1F2 /* CallAudioService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170BA1E2FC5D3003FC1F2 /* CallAudioService.swift */; }; 45F170BC1E2FC5D3003FC1F2 /* CallAudioService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170BA1E2FC5D3003FC1F2 /* CallAudioService.swift */; }; - 45F170CC1E310E22003FC1F2 /* WeakTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170CB1E310E22003FC1F2 /* WeakTimer.swift */; }; 45F170D61E315310003FC1F2 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170D51E315310003FC1F2 /* Weak.swift */; }; 45F3AEB61DFDE7900080CE33 /* AvatarImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */; }; 45F3AEB71DFDE7900080CE33 /* AvatarImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */; }; @@ -294,13 +306,10 @@ 45FBC5D21DF8592E00E9B410 /* SignalCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45FBC5D01DF8592E00E9B410 /* SignalCall.swift */; }; 4AC4EA13C8A444455DAB351F /* Pods_SignalMessaging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 264242150E87D10A357DB07B /* Pods_SignalMessaging.framework */; }; 70377AAB1918450100CAF501 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70377AAA1918450100CAF501 /* MobileCoreServices.framework */; }; - 7038632718F70C0700D4A43F /* CryptoTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 7038632418F70C0700D4A43F /* CryptoTools.m */; }; 768A1A2B17FC9CD300E00ED8 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 768A1A2A17FC9CD300E00ED8 /* libz.dylib */; }; 76C87F19181EFCE600C4ACAB /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76C87F18181EFCE600C4ACAB /* MediaPlayer.framework */; }; 76EB054018170B33006006FC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB03C318170B33006006FC /* AppDelegate.m */; }; 76EB057A18170B33006006FC /* OWSContactsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB040918170B33006006FC /* OWSContactsManager.m */; }; - 76EB058218170B33006006FC /* Environment.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB041318170B33006006FC /* Environment.m */; }; - 76EB058A18170B33006006FC /* Release.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB041B18170B33006006FC /* Release.m */; }; 76EB063A18170B33006006FC /* FunctionalUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04EB18170B33006006FC /* FunctionalUtil.m */; }; 76EB063C18170B33006006FC /* NumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04ED18170B33006006FC /* NumberUtil.m */; }; 76EB063E18170B33006006FC /* Operation.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04EF18170B33006006FC /* Operation.m */; }; @@ -335,7 +344,6 @@ B609597C1C2C0FC6004E8797 /* iRate.m in Sources */ = {isa = PBXBuildFile; fileRef = B609597B1C2C0FC6004E8797 /* iRate.m */; }; B60C16651988999D00E97A6C /* VersionMigrations.m in Sources */ = {isa = PBXBuildFile; fileRef = B60C16641988999D00E97A6C /* VersionMigrations.m */; }; B60EDE041A05A01700D73516 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B60EDE031A05A01700D73516 /* AudioToolbox.framework */; }; - B6258B331C29E2E60014138E /* NotificationsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B6258B321C29E2E60014138E /* NotificationsManager.m */; }; B625CD561ABB589C00E8B23C /* NewMessage.aifc in Resources */ = {isa = PBXBuildFile; fileRef = B625CD551ABB589C00E8B23C /* NewMessage.aifc */; }; B633C5861A1D190B0059AC12 /* call@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5041A1D190B0059AC12 /* call@2x.png */; }; B633C58D1A1D190B0059AC12 /* contact_default_feed.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50B1A1D190B0059AC12 /* contact_default_feed.png */; }; @@ -352,10 +360,6 @@ B660F6DB1C29868000687D6E /* FunctionalUtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6AD1C29868000687D6E /* FunctionalUtilTest.m */; }; B660F6E01C29868000687D6E /* UtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6B41C29868000687D6E /* UtilTest.m */; }; B660F7171C29988E00687D6E /* OWSContactsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB040918170B33006006FC /* OWSContactsManager.m */; }; - B660F7181C29988E00687D6E /* CryptoTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 7038632418F70C0700D4A43F /* CryptoTools.m */; }; - B660F71B1C29988E00687D6E /* Environment.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB041318170B33006006FC /* Environment.m */; }; - B660F7201C29988E00687D6E /* Release.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB041B18170B33006006FC /* Release.m */; }; - B660F7211C29988E00687D6E /* SignalKeyingStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B1013B196D213F007E3930 /* SignalKeyingStorage.m */; }; B660F7221C29988E00687D6E /* VersionMigrations.m in Sources */ = {isa = PBXBuildFile; fileRef = B60C16641988999D00E97A6C /* VersionMigrations.m */; }; B660F7561C29988E00687D6E /* PushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9ECFB198B31BA00C620D3 /* PushManager.m */; }; B660F7721C29988E00687D6E /* AppStoreRating.m in Sources */ = {isa = PBXBuildFile; fileRef = B6DA6B061B8A2F9A00CA6F98 /* AppStoreRating.m */; }; @@ -370,7 +374,6 @@ B67EBF5D19194AC60084CCFD /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B67EBF5C19194AC60084CCFD /* Settings.bundle */; }; B68112EA1A4D9EC400BA82FF /* UIImage+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = B68112E91A4D9EC400BA82FF /* UIImage+OWS.m */; }; B69CD25119773E79005CE69A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B69CD25019773E79005CE69A /* XCTest.framework */; }; - B6B1013C196D213F007E3930 /* SignalKeyingStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B1013B196D213F007E3930 /* SignalKeyingStorage.m */; }; B6B226971BE4B7D200860F4D /* ContactsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6B226961BE4B7D200860F4D /* ContactsUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; B6B9ECFC198B31BA00C620D3 /* PushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9ECFB198B31BA00C620D3 /* PushManager.m */; }; B6DA6B071B8A2F9A00CA6F98 /* AppStoreRating.m in Sources */ = {isa = PBXBuildFile; fileRef = B6DA6B061B8A2F9A00CA6F98 /* AppStoreRating.m */; }; @@ -486,8 +489,6 @@ 341458471FBE11C4005ABCF9 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = translations/fa.lproj/Localizable.strings; sourceTree = ""; }; 341F2C0D1F2B8AE700D07D6B /* DebugUIMisc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUIMisc.h; sourceTree = ""; }; 341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUIMisc.m; sourceTree = ""; }; - 342FCE691EF9C375002690AD /* OWS105AttachmentFilePaths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWS105AttachmentFilePaths.h; path = Migrations/OWS105AttachmentFilePaths.h; sourceTree = ""; }; - 342FCE6A1EF9C375002690AD /* OWS105AttachmentFilePaths.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWS105AttachmentFilePaths.m; path = Migrations/OWS105AttachmentFilePaths.m; sourceTree = ""; }; 3430FE171F7751D4000EC51B /* GiphyAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GiphyAPI.swift; sourceTree = ""; }; 34330A591E7875FB00DF2FB9 /* fontawesome-webfont.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "fontawesome-webfont.ttf"; sourceTree = ""; }; 34330A5B1E787A9800DF2FB9 /* dripicons-v2.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "dripicons-v2.ttf"; sourceTree = ""; }; @@ -574,6 +575,38 @@ 346129331FD1A88700532771 /* OWSSwiftUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWSSwiftUtils.swift; sourceTree = ""; }; 346129371FD1B47200532771 /* OWSPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSPreferences.h; sourceTree = ""; }; 346129381FD1B47200532771 /* OWSPreferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSPreferences.m; sourceTree = ""; }; + 3461293B1FD1D46900532771 /* OWSMath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSMath.m; sourceTree = ""; }; + 3461293D1FD1D72B00532771 /* ExperienceUpgradeFinder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ExperienceUpgradeFinder.swift; path = ExperienceUpgrades/ExperienceUpgradeFinder.swift; sourceTree = ""; }; + 346129401FD1D74B00532771 /* Environment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Environment.h; sourceTree = ""; }; + 346129411FD1D74B00532771 /* Environment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Environment.m; sourceTree = ""; }; + 346129561FD1D74B00532771 /* Release.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Release.h; sourceTree = ""; }; + 346129571FD1D74B00532771 /* Release.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Release.m; sourceTree = ""; }; + 346129581FD1D74B00532771 /* SignalKeyingStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalKeyingStorage.h; sourceTree = ""; }; + 346129591FD1D74B00532771 /* SignalKeyingStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalKeyingStorage.m; sourceTree = ""; }; + 346129751FD1E0B500532771 /* WeakTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeakTimer.swift; sourceTree = ""; }; + 346129781FD1E2AB00532771 /* OWS100RemoveTSRecipientsMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWS100RemoveTSRecipientsMigration.h; sourceTree = ""; }; + 346129791FD1E2AB00532771 /* OWS100RemoveTSRecipientsMigration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWS100RemoveTSRecipientsMigration.m; sourceTree = ""; }; + 3461297A1FD1E2AB00532771 /* OWS101ExistingUsersBlockOnIdentityChange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWS101ExistingUsersBlockOnIdentityChange.h; sourceTree = ""; }; + 3461297B1FD1E2AB00532771 /* OWS101ExistingUsersBlockOnIdentityChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWS101ExistingUsersBlockOnIdentityChange.m; sourceTree = ""; }; + 3461297C1FD1E2AB00532771 /* OWS102MoveLoggingPreferenceToUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWS102MoveLoggingPreferenceToUserDefaults.h; sourceTree = ""; }; + 3461297D1FD1E2AB00532771 /* OWS102MoveLoggingPreferenceToUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWS102MoveLoggingPreferenceToUserDefaults.m; sourceTree = ""; }; + 3461297E1FD1E2AB00532771 /* OWS103EnableVideoCalling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWS103EnableVideoCalling.h; sourceTree = ""; }; + 3461297F1FD1E2AB00532771 /* OWS103EnableVideoCalling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWS103EnableVideoCalling.m; sourceTree = ""; }; + 346129801FD1E2AB00532771 /* OWS104CreateRecipientIdentities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWS104CreateRecipientIdentities.h; sourceTree = ""; }; + 346129811FD1E2AB00532771 /* OWS104CreateRecipientIdentities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWS104CreateRecipientIdentities.m; sourceTree = ""; }; + 346129821FD1E2AB00532771 /* OWS105AttachmentFilePaths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWS105AttachmentFilePaths.h; sourceTree = ""; }; + 346129831FD1E2AB00532771 /* OWS105AttachmentFilePaths.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWS105AttachmentFilePaths.m; sourceTree = ""; }; + 346129841FD1E2AB00532771 /* OWS106EnsureProfileComplete.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWS106EnsureProfileComplete.swift; sourceTree = ""; }; + 346129871FD1E2AB00532771 /* OWSDatabaseMigrationRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSDatabaseMigrationRunner.h; sourceTree = ""; }; + 346129881FD1E2AB00532771 /* OWSDatabaseMigrationRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSDatabaseMigrationRunner.m; sourceTree = ""; }; + 346129931FD1E30000532771 /* OWSDatabaseMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSDatabaseMigration.h; sourceTree = ""; }; + 346129941FD1E30000532771 /* OWSDatabaseMigration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSDatabaseMigration.m; sourceTree = ""; }; + 346129971FD1E4D900532771 /* SignalApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalApp.m; sourceTree = ""; }; + 346129981FD1E4DA00532771 /* SignalApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalApp.h; sourceTree = ""; }; + 3461299A1FD1EA9E00532771 /* NotificationsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationsManager.h; sourceTree = ""; }; + 3461299B1FD1EA9E00532771 /* NotificationsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotificationsManager.m; sourceTree = ""; }; + 3461299D1FD1EFE200532771 /* CryptoTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoTools.h; sourceTree = ""; }; + 3461299E1FD1EFE200532771 /* CryptoTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CryptoTools.m; sourceTree = ""; }; 346B66301F4E29B200E5122F /* CropScaleImageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CropScaleImageViewController.swift; sourceTree = ""; }; 3471B1D81EB7C63600F6AEC8 /* NewNonContactConversationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewNonContactConversationViewController.h; sourceTree = ""; }; 3471B1D91EB7C63600F6AEC8 /* NewNonContactConversationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewNonContactConversationViewController.m; sourceTree = ""; }; @@ -743,18 +776,13 @@ 435EAC2E5E22D3F087EB3192 /* Pods-SignalShareExtension.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SignalShareExtension.app store release.xcconfig"; path = "Pods/Target Support Files/Pods-SignalShareExtension/Pods-SignalShareExtension.app store release.xcconfig"; sourceTree = ""; }; 450449371F45EE7D002D1ADA /* NSString+OWS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+OWS.h"; path = "util/NSString+OWS.h"; sourceTree = ""; }; 450449381F45EE7D002D1ADA /* NSString+OWS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+OWS.m"; path = "util/NSString+OWS.m"; sourceTree = ""; }; - 450573FC1E78A06D00615BB4 /* OWS103EnableVideoCalling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWS103EnableVideoCalling.h; path = Migrations/OWS103EnableVideoCalling.h; sourceTree = ""; }; - 450573FD1E78A06D00615BB4 /* OWS103EnableVideoCalling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWS103EnableVideoCalling.m; path = Migrations/OWS103EnableVideoCalling.m; sourceTree = ""; }; 4505C2BE1E648EA300CEBF41 /* ExperienceUpgrade.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ExperienceUpgrade.swift; path = ExperienceUpgrades/ExperienceUpgrade.swift; sourceTree = ""; }; - 4505C2C11E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExperienceUpgradeFinder.swift; sourceTree = ""; }; 4509E7991DD653700025A59F /* WebRTC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebRTC.framework; path = Carthage/Build/iOS/WebRTC.framework; sourceTree = ""; }; 450D19111F85236600970622 /* RemoteVideoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteVideoView.h; sourceTree = ""; }; 450D19121F85236600970622 /* RemoteVideoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RemoteVideoView.m; sourceTree = ""; }; 450DF2041E0D74AC003D14BE /* Platform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Platform.swift; sourceTree = ""; }; 450DF2081E0DD2C6003D14BE /* UserNotificationsAdaptee.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = UserNotificationsAdaptee.swift; path = UserInterface/Notifications/UserNotificationsAdaptee.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 451686AA1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiDeviceProfileKeyUpdateJob.swift; sourceTree = ""; }; - 4516E3FD1DD2193B00DC4206 /* OWS101ExistingUsersBlockOnIdentityChange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWS101ExistingUsersBlockOnIdentityChange.h; path = Migrations/OWS101ExistingUsersBlockOnIdentityChange.h; sourceTree = ""; }; - 4516E3FE1DD2193B00DC4206 /* OWS101ExistingUsersBlockOnIdentityChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWS101ExistingUsersBlockOnIdentityChange.m; path = Migrations/OWS101ExistingUsersBlockOnIdentityChange.m; sourceTree = ""; }; 451764281DE939FD00EDB8B9 /* ContactCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactCell.xib; sourceTree = ""; }; 451764291DE939FD00EDB8B9 /* ContactCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactCell.swift; sourceTree = ""; }; 451A13B01E13DED2000A50FD /* CallNotificationsAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = CallNotificationsAdapter.swift; path = ../UserInterface/Notifications/CallNotificationsAdapter.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; @@ -781,8 +809,6 @@ 453518A01FC63DD500210559 /* StorageCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageCoordinator.swift; sourceTree = ""; }; 45360B8C1F9521F800FA666C /* Searcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Searcher.swift; sourceTree = ""; }; 45360B8F1F9527DA00FA666C /* SearcherTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearcherTest.swift; sourceTree = ""; }; - 45387B021E36D650005D00B3 /* OWS102MoveLoggingPreferenceToUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWS102MoveLoggingPreferenceToUserDefaults.h; path = Migrations/OWS102MoveLoggingPreferenceToUserDefaults.h; sourceTree = ""; }; - 45387B031E36D650005D00B3 /* OWS102MoveLoggingPreferenceToUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWS102MoveLoggingPreferenceToUserDefaults.m; path = Migrations/OWS102MoveLoggingPreferenceToUserDefaults.m; sourceTree = ""; }; 4539B5851F79348F007141FF /* PushRegistrationManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PushRegistrationManager.swift; sourceTree = ""; }; 453CC0361D08E1A60040EBA3 /* sn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sn; path = translations/sn.lproj/Localizable.strings; sourceTree = ""; }; 4542F0931EB9372700C7EE92 /* SystemContactsFetcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SystemContactsFetcher.swift; sourceTree = ""; }; @@ -796,18 +822,11 @@ 455AC69D1F4F8B0300134004 /* ImageCacheTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCacheTest.swift; sourceTree = ""; }; 45638BDB1F3DD0D400128435 /* DebugUICalling.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugUICalling.swift; sourceTree = ""; }; 45638BDE1F3DDB2200128435 /* MessageSender+Promise.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "MessageSender+Promise.swift"; sourceTree = ""; }; - 4563ADF01F22BD7100DEB8C7 /* OWS106EnsureProfileComplete.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWS106EnsureProfileComplete.swift; sourceTree = ""; }; 45666EC41D99483D008FE134 /* OWSAvatarBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSAvatarBuilder.h; sourceTree = ""; }; 45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSAvatarBuilder.m; sourceTree = ""; }; 45666EC71D994C0D008FE134 /* OWSGroupAvatarBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSGroupAvatarBuilder.h; sourceTree = ""; }; 45666EC81D994C0D008FE134 /* OWSGroupAvatarBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSGroupAvatarBuilder.m; sourceTree = ""; }; 45666F571D9B2880008FE134 /* OWSScrubbingLogFormatterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSScrubbingLogFormatterTest.m; sourceTree = ""; }; - 45666F741D9BFE00008FE134 /* OWS100RemoveTSRecipientsMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWS100RemoveTSRecipientsMigration.h; path = Migrations/OWS100RemoveTSRecipientsMigration.h; sourceTree = ""; }; - 45666F751D9BFE00008FE134 /* OWS100RemoveTSRecipientsMigration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWS100RemoveTSRecipientsMigration.m; path = Migrations/OWS100RemoveTSRecipientsMigration.m; sourceTree = ""; }; - 45666F791D9C0533008FE134 /* OWSDatabaseMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWSDatabaseMigration.h; path = Migrations/OWSDatabaseMigration.h; sourceTree = ""; }; - 45666F7A1D9C0533008FE134 /* OWSDatabaseMigration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSDatabaseMigration.m; path = Migrations/OWSDatabaseMigration.m; sourceTree = ""; }; - 45666F7C1D9C0814008FE134 /* OWSDatabaseMigrationRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWSDatabaseMigrationRunner.h; path = Migrations/OWSDatabaseMigrationRunner.h; sourceTree = ""; }; - 45666F7D1D9C0814008FE134 /* OWSDatabaseMigrationRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSDatabaseMigrationRunner.m; path = Migrations/OWSDatabaseMigrationRunner.m; sourceTree = ""; }; 456D0FD51F63094D008499CD /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = translations/km.lproj/Localizable.strings; sourceTree = ""; }; 456D0FD81F631F4E008499CD /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = translations/lt.lproj/Localizable.strings; sourceTree = ""; }; 456F6E2E1E261D1000FD2210 /* PeerConnectionClientTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerConnectionClientTest.swift; sourceTree = ""; }; @@ -818,8 +837,6 @@ 45847E861E4283C30080EAB3 /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; 45855F351D9498A40084F340 /* OWSContactAvatarBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSContactAvatarBuilder.h; sourceTree = ""; }; 45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSContactAvatarBuilder.m; sourceTree = ""; }; - 4585C45E1ED4FD0400896AEA /* OWS104CreateRecipientIdentities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWS104CreateRecipientIdentities.h; path = Migrations/OWS104CreateRecipientIdentities.h; sourceTree = ""; }; - 4585C45F1ED4FD0400896AEA /* OWS104CreateRecipientIdentities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWS104CreateRecipientIdentities.m; path = Migrations/OWS104CreateRecipientIdentities.m; sourceTree = ""; }; 4585C4651ED5DF7A00896AEA /* ProfileFetcherJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileFetcherJob.swift; sourceTree = ""; }; 4585C4671ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafetyNumberConfirmationAlert.swift; sourceTree = ""; }; 4589670F1DC117CC00E9DD21 /* SignalTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SignalTests-Bridging-Header.h"; sourceTree = ""; }; @@ -866,7 +883,6 @@ 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallAudioSession.swift; sourceTree = ""; }; 45F170B31E2F0A6A003FC1F2 /* RTCAudioSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCAudioSession.h; sourceTree = ""; }; 45F170BA1E2FC5D3003FC1F2 /* CallAudioService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallAudioService.swift; sourceTree = ""; }; - 45F170CB1E310E22003FC1F2 /* WeakTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeakTimer.swift; sourceTree = ""; }; 45F170D51E315310003FC1F2 /* Weak.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Weak.swift; sourceTree = ""; }; 45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvatarImageView.swift; sourceTree = ""; }; 45F659721E1BD99C00444429 /* CallKitCallUIAdaptee.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallKitCallUIAdaptee.swift; sourceTree = ""; }; @@ -875,8 +891,6 @@ 45FBC5D01DF8592E00E9B410 /* SignalCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignalCall.swift; sourceTree = ""; }; 69349DE607F5BA6036C9AC60 /* Pods-SignalShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SignalShareExtension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SignalShareExtension/Pods-SignalShareExtension.debug.xcconfig"; sourceTree = ""; }; 70377AAA1918450100CAF501 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - 7038632318F70C0700D4A43F /* CryptoTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoTools.h; sourceTree = ""; }; - 7038632418F70C0700D4A43F /* CryptoTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CryptoTools.m; sourceTree = ""; }; 748A5CAEDD7C919FC64C6807 /* Pods_SignalTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SignalTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 768A1A2A17FC9CD300E00ED8 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; 76C87F18181EFCE600C4ACAB /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; @@ -884,10 +898,6 @@ 76EB03C318170B33006006FC /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 76EB040818170B33006006FC /* OWSContactsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSContactsManager.h; sourceTree = ""; }; 76EB040918170B33006006FC /* OWSContactsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSContactsManager.m; sourceTree = ""; }; - 76EB041218170B33006006FC /* Environment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Environment.h; sourceTree = ""; }; - 76EB041318170B33006006FC /* Environment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Environment.m; sourceTree = ""; }; - 76EB041A18170B33006006FC /* Release.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Release.h; sourceTree = ""; }; - 76EB041B18170B33006006FC /* Release.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Release.m; sourceTree = ""; }; 76EB04EA18170B33006006FC /* FunctionalUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FunctionalUtil.h; sourceTree = ""; }; 76EB04EB18170B33006006FC /* FunctionalUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FunctionalUtil.m; sourceTree = ""; }; 76EB04EC18170B33006006FC /* NumberUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NumberUtil.h; sourceTree = ""; }; @@ -931,8 +941,6 @@ B60C16631988999D00E97A6C /* VersionMigrations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VersionMigrations.h; sourceTree = ""; }; B60C16641988999D00E97A6C /* VersionMigrations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VersionMigrations.m; sourceTree = ""; }; B60EDE031A05A01700D73516 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - B6258B311C29E2E60014138E /* NotificationsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationsManager.h; sourceTree = ""; }; - B6258B321C29E2E60014138E /* NotificationsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = NotificationsManager.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; B625CD551ABB589C00E8B23C /* NewMessage.aifc */ = {isa = PBXFileReference; lastKnownFileType = file; path = NewMessage.aifc; sourceTree = ""; }; B633C5041A1D190B0059AC12 /* call@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "call@2x.png"; sourceTree = ""; }; B633C50B1A1D190B0059AC12 /* contact_default_feed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = contact_default_feed.png; sourceTree = ""; }; @@ -987,8 +995,6 @@ B69C2D1A1AA5447600A640C2 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = translations/ca.lproj/Localizable.strings; sourceTree = ""; }; B69C2D1B1AA5448300A640C2 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = translations/cs.lproj/Localizable.strings; sourceTree = ""; }; B69CD25019773E79005CE69A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - B6B1013A196D213F007E3930 /* SignalKeyingStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalKeyingStorage.h; sourceTree = ""; }; - B6B1013B196D213F007E3930 /* SignalKeyingStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalKeyingStorage.m; sourceTree = ""; }; B6B226961BE4B7D200860F4D /* ContactsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ContactsUI.framework; path = System/Library/Frameworks/ContactsUI.framework; sourceTree = SDKROOT; }; B6B9ECFA198B31BA00C620D3 /* PushManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = PushManager.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; B6B9ECFB198B31BA00C620D3 /* PushManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = PushManager.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; @@ -1043,6 +1049,7 @@ files = ( 453518A21FC63E2900210559 /* SignalMessaging.framework in Frameworks */, 2AE2882E4C2B96BFFF9EE27C /* Pods_SignalShareExtension.framework in Frameworks */, + 346129731FD1E01700532771 /* PromiseKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1051,6 +1058,7 @@ buildActionMask = 2147483647; files = ( 4AC4EA13C8A444455DAB351F /* Pods_SignalMessaging.framework in Frameworks */, + 346129741FD1E02D00532771 /* PromiseKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1137,16 +1145,20 @@ 34480B471FD0A60200BC14EF /* utils */ = { isa = PBXGroup; children = ( + 3461299D1FD1EFE200532771 /* CryptoTools.h */, + 3461299E1FD1EFE200532771 /* CryptoTools.m */, 34480B4D1FD0A7A300BC14EF /* DebugLogger.h */, 34480B4E1FD0A7A300BC14EF /* DebugLogger.m */, 34480B4A1FD0A7A200BC14EF /* OWSLogger.h */, 34480B4B1FD0A7A300BC14EF /* OWSLogger.m */, 34480B481FD0A60200BC14EF /* OWSMath.h */, + 3461293B1FD1D46900532771 /* OWSMath.m */, 346129371FD1B47200532771 /* OWSPreferences.h */, 346129381FD1B47200532771 /* OWSPreferences.m */, 34480B4F1FD0A7A300BC14EF /* OWSScrubbingLogFormatter.h */, 34480B511FD0A7A400BC14EF /* OWSScrubbingLogFormatter.m */, 346129331FD1A88700532771 /* OWSSwiftUtils.swift */, + 346129751FD1E0B500532771 /* WeakTimer.swift */, ); path = utils; sourceTree = ""; @@ -1188,6 +1200,51 @@ path = ConversationView; sourceTree = ""; }; + 3461293F1FD1D74B00532771 /* environment */ = { + isa = PBXGroup; + children = ( + 346129401FD1D74B00532771 /* Environment.h */, + 346129411FD1D74B00532771 /* Environment.m */, + 346129921FD1E30000532771 /* migrations */, + 346129561FD1D74B00532771 /* Release.h */, + 346129571FD1D74B00532771 /* Release.m */, + 346129581FD1D74B00532771 /* SignalKeyingStorage.h */, + 346129591FD1D74B00532771 /* SignalKeyingStorage.m */, + ); + path = environment; + sourceTree = ""; + }; + 346129771FD1E2AB00532771 /* Migrations */ = { + isa = PBXGroup; + children = ( + 346129781FD1E2AB00532771 /* OWS100RemoveTSRecipientsMigration.h */, + 346129791FD1E2AB00532771 /* OWS100RemoveTSRecipientsMigration.m */, + 3461297A1FD1E2AB00532771 /* OWS101ExistingUsersBlockOnIdentityChange.h */, + 3461297B1FD1E2AB00532771 /* OWS101ExistingUsersBlockOnIdentityChange.m */, + 3461297C1FD1E2AB00532771 /* OWS102MoveLoggingPreferenceToUserDefaults.h */, + 3461297D1FD1E2AB00532771 /* OWS102MoveLoggingPreferenceToUserDefaults.m */, + 3461297E1FD1E2AB00532771 /* OWS103EnableVideoCalling.h */, + 3461297F1FD1E2AB00532771 /* OWS103EnableVideoCalling.m */, + 346129801FD1E2AB00532771 /* OWS104CreateRecipientIdentities.h */, + 346129811FD1E2AB00532771 /* OWS104CreateRecipientIdentities.m */, + 346129821FD1E2AB00532771 /* OWS105AttachmentFilePaths.h */, + 346129831FD1E2AB00532771 /* OWS105AttachmentFilePaths.m */, + 346129841FD1E2AB00532771 /* OWS106EnsureProfileComplete.swift */, + 346129871FD1E2AB00532771 /* OWSDatabaseMigrationRunner.h */, + 346129881FD1E2AB00532771 /* OWSDatabaseMigrationRunner.m */, + ); + path = Migrations; + sourceTree = ""; + }; + 346129921FD1E30000532771 /* migrations */ = { + isa = PBXGroup; + children = ( + 346129931FD1E30000532771 /* OWSDatabaseMigration.h */, + 346129941FD1E30000532771 /* OWSDatabaseMigration.m */, + ); + path = migrations; + sourceTree = ""; + }; 34B3F8331E8DF1700035BE1A /* ViewControllers */ = { isa = PBXGroup; children = ( @@ -1404,7 +1461,7 @@ isa = PBXGroup; children = ( 4505C2BE1E648EA300CEBF41 /* ExperienceUpgrade.swift */, - 4505C2C11E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift */, + 3461293D1FD1D72B00532771 /* ExperienceUpgradeFinder.swift */, ); name = ExperienceUpgrades; sourceTree = ""; @@ -1452,6 +1509,7 @@ isa = PBXGroup; children = ( 34480B5C1FD0A98800BC14EF /* categories */, + 3461293F1FD1D74B00532771 /* environment */, 453518951FC63DBF00210559 /* Info.plist */, 34480B5A1FD0A7E300BC14EF /* SignalMessaging-Prefix.pch */, 453518941FC63DBF00210559 /* SignalMessaging.h */, @@ -1473,30 +1531,6 @@ name = Signaling; sourceTree = ""; }; - 45666F731D9BFDB9008FE134 /* Migrations */ = { - isa = PBXGroup; - children = ( - 45666F741D9BFE00008FE134 /* OWS100RemoveTSRecipientsMigration.h */, - 45666F751D9BFE00008FE134 /* OWS100RemoveTSRecipientsMigration.m */, - 4516E3FD1DD2193B00DC4206 /* OWS101ExistingUsersBlockOnIdentityChange.h */, - 4516E3FE1DD2193B00DC4206 /* OWS101ExistingUsersBlockOnIdentityChange.m */, - 45387B021E36D650005D00B3 /* OWS102MoveLoggingPreferenceToUserDefaults.h */, - 45387B031E36D650005D00B3 /* OWS102MoveLoggingPreferenceToUserDefaults.m */, - 450573FC1E78A06D00615BB4 /* OWS103EnableVideoCalling.h */, - 450573FD1E78A06D00615BB4 /* OWS103EnableVideoCalling.m */, - 4585C45E1ED4FD0400896AEA /* OWS104CreateRecipientIdentities.h */, - 4585C45F1ED4FD0400896AEA /* OWS104CreateRecipientIdentities.m */, - 342FCE691EF9C375002690AD /* OWS105AttachmentFilePaths.h */, - 342FCE6A1EF9C375002690AD /* OWS105AttachmentFilePaths.m */, - 45666F791D9C0533008FE134 /* OWSDatabaseMigration.h */, - 45666F7A1D9C0533008FE134 /* OWSDatabaseMigration.m */, - 45666F7C1D9C0814008FE134 /* OWSDatabaseMigrationRunner.h */, - 45666F7D1D9C0814008FE134 /* OWSDatabaseMigrationRunner.m */, - 4563ADF01F22BD7100DEB8C7 /* OWS106EnsureProfileComplete.swift */, - ); - name = Migrations; - sourceTree = ""; - }; 45794E841E0061CF00066731 /* UserInterface */ = { isa = PBXGroup; children = ( @@ -1590,15 +1624,6 @@ path = Speakerbox; sourceTree = ""; }; - 70DBA29918CFE98500771DAD /* crypto */ = { - isa = PBXGroup; - children = ( - 7038632318F70C0700D4A43F /* CryptoTools.h */, - 7038632418F70C0700D4A43F /* CryptoTools.m */, - ); - path = crypto; - sourceTree = ""; - }; 76EB03C118170B33006006FC /* src */ = { isa = PBXGroup; children = ( @@ -1606,7 +1631,6 @@ 76EB03C318170B33006006FC /* AppDelegate.m */, 76EB03FE18170B33006006FC /* call */, 76EB040318170B33006006FC /* contact */, - 70DBA29918CFE98500771DAD /* crypto */, 76EB041118170B33006006FC /* environment */, 45D231751DC7E8C50034FA89 /* Jobs */, 457F3AC01D14A0F700C51351 /* Models */, @@ -1649,19 +1673,15 @@ 76EB041118170B33006006FC /* environment */ = { isa = PBXGroup; children = ( - 76EB041218170B33006006FC /* Environment.h */, - 76EB041318170B33006006FC /* Environment.m */, 4505C2BD1E648E6E00CEBF41 /* ExperienceUpgrades */, - 45666F731D9BFDB9008FE134 /* Migrations */, - B6258B311C29E2E60014138E /* NotificationsManager.h */, - B6258B321C29E2E60014138E /* NotificationsManager.m */, - 76EB041A18170B33006006FC /* Release.h */, - 76EB041B18170B33006006FC /* Release.m */, - B6B1013A196D213F007E3930 /* SignalKeyingStorage.h */, - B6B1013B196D213F007E3930 /* SignalKeyingStorage.m */, + 346129771FD1E2AB00532771 /* Migrations */, + 3461299A1FD1EA9E00532771 /* NotificationsManager.h */, + 3461299B1FD1EA9E00532771 /* NotificationsManager.m */, + 4539B5851F79348F007141FF /* PushRegistrationManager.swift */, + 346129981FD1E4DA00532771 /* SignalApp.h */, + 346129971FD1E4D900532771 /* SignalApp.m */, B60C16631988999D00E97A6C /* VersionMigrations.h */, B60C16641988999D00E97A6C /* VersionMigrations.m */, - 4539B5851F79348F007141FF /* PushRegistrationManager.swift */, ); path = environment; sourceTree = ""; @@ -1719,7 +1739,6 @@ B97940261832BD2400BD66CB /* UIUtil.m */, 76EB04FB18170B33006006FC /* Util.h */, 45F170D51E315310003FC1F2 /* Weak.swift */, - 45F170CB1E310E22003FC1F2 /* WeakTimer.swift */, 45B72DD91FD5E70600151AF6 /* ConversationSearcher.swift */, ); path = util; @@ -2043,13 +2062,18 @@ 34480B491FD0A60200BC14EF /* OWSMath.h in Headers */, 34480B521FD0A7A400BC14EF /* OWSLogger.h in Headers */, 34480B551FD0A7A400BC14EF /* DebugLogger.h in Headers */, + 346129711FD1D74C00532771 /* SignalKeyingStorage.h in Headers */, + 3461296F1FD1D74C00532771 /* Release.h in Headers */, 34480B571FD0A7A400BC14EF /* OWSScrubbingLogFormatter.h in Headers */, + 346129951FD1E30000532771 /* OWSDatabaseMigration.h in Headers */, 34480B611FD0A98800BC14EF /* UIColor+OWS.h in Headers */, 453518961FC63DBF00210559 /* SignalMessaging.h in Headers */, + 3461295A1FD1D74C00532771 /* Environment.h in Headers */, 34480B631FD0A98800BC14EF /* UIView+OWS.h in Headers */, 346129391FD1B47300532771 /* OWSPreferences.h in Headers */, 34480B5B1FD0A7E300BC14EF /* SignalMessaging-Prefix.pch in Headers */, 34480B681FD0AA9400BC14EF /* UIFont+OWS.h in Headers */, + 3461299F1FD1EFE200532771 /* CryptoTools.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2677,14 +2701,21 @@ buildActionMask = 2147483647; files = ( 453518A11FC63DD500210559 /* StorageCoordinator.swift in Sources */, + 346129761FD1E0B500532771 /* WeakTimer.swift in Sources */, + 346129701FD1D74C00532771 /* Release.m in Sources */, 34480B621FD0A98800BC14EF /* UIColor+OWS.m in Sources */, 34480B531FD0A7A400BC14EF /* OWSLogger.m in Sources */, 34480B641FD0A98800BC14EF /* UIView+OWS.m in Sources */, 3461293A1FD1B47300532771 /* OWSPreferences.m in Sources */, 34480B671FD0AA9400BC14EF /* UIFont+OWS.m in Sources */, + 346129961FD1E30000532771 /* OWSDatabaseMigration.m in Sources */, 346129341FD1A88700532771 /* OWSSwiftUtils.swift in Sources */, + 346129A01FD1EFE200532771 /* CryptoTools.m in Sources */, + 3461295B1FD1D74C00532771 /* Environment.m in Sources */, 34480B591FD0A7A400BC14EF /* OWSScrubbingLogFormatter.m in Sources */, + 346129721FD1D74C00532771 /* SignalKeyingStorage.m in Sources */, 34480B561FD0A7A400BC14EF /* DebugLogger.m in Sources */, + 3461293C1FD1D46A00532771 /* OWSMath.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2694,6 +2725,7 @@ files = ( 34B3F8761E8DF1700035BE1A /* CodeVerificationViewController.m in Sources */, 76EB063E18170B33006006FC /* Operation.m in Sources */, + 3461293E1FD1D72B00532771 /* ExperienceUpgradeFinder.swift in Sources */, 34D1F0BD1F8D108C0066283D /* AttachmentUploadView.m in Sources */, 34D1F0BA1F8800D90066283D /* OWSAudioMessageView.m in Sources */, 34B3F8741E8DF1700035BE1A /* AttachmentSharing.m in Sources */, @@ -2703,7 +2735,6 @@ 34D99C931F2937CC00D284D6 /* OWSAnalytics.swift in Sources */, 34D9134B1F62D4A500722898 /* SignalAttachment.swift in Sources */, 34B3F88E1E8DF1700035BE1A /* PrivacySettingsTableViewController.m in Sources */, - 4505C2C21E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift in Sources */, 341F2C0F1F2B8AE700D07D6B /* DebugUIMisc.m in Sources */, 34E3EF0D1EFC235B007F6822 /* DebugUIDiskUsage.m in Sources */, 34D1F0871F8678AA0066283D /* ConversationViewItem.m in Sources */, @@ -2713,6 +2744,7 @@ 451A13B11E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */, 450DF2091E0DD2C6003D14BE /* UserNotificationsAdaptee.swift in Sources */, 34D1F0821F8678AA0066283D /* ConversationHeaderView.m in Sources */, + 346129911FD1E2AB00532771 /* OWSDatabaseMigrationRunner.m in Sources */, 340CB2241EAC155C0001CAA1 /* ContactsViewHelper.m in Sources */, 45B72DDA1FD5E70600151AF6 /* ConversationSearcher.swift in Sources */, 34D1F0AB1F867BFC0066283D /* OWSContactOffersCell.m in Sources */, @@ -2726,10 +2758,9 @@ 34D1F0A91F867BFC0066283D /* ConversationViewCell.m in Sources */, 34CA1C251F706B5400E51C51 /* NSAttributedString+OWS.m in Sources */, 4542F0961EBB9E9A00C7EE92 /* Promise+retainUntilComplete.swift in Sources */, - 4516E3FF1DD2193B00DC4206 /* OWS101ExistingUsersBlockOnIdentityChange.m in Sources */, + 3461298B1FD1E2AB00532771 /* OWS102MoveLoggingPreferenceToUserDefaults.m in Sources */, 4505C2BF1E648EA300CEBF41 /* ExperienceUpgrade.swift in Sources */, 34CCAF381F0C0599004084F4 /* AppUpdateNag.m in Sources */, - 45387B041E36D650005D00B3 /* OWS102MoveLoggingPreferenceToUserDefaults.m in Sources */, EF764C351DB67CC5000D9A87 /* UIViewController+Permissions.m in Sources */, 45CD81EF1DC030E7004C9430 /* AccountManager.swift in Sources */, 45794E861E00620000066731 /* CallUIAdapter.swift in Sources */, @@ -2740,6 +2771,7 @@ 34C04D801F6195E6004308B3 /* OWSFlatButton.swift in Sources */, 458DE9D91DEE7B360071BB03 /* OWSWebRTCDataProtos.pb.m in Sources */, 76EB063C18170B33006006FC /* NumberUtil.m in Sources */, + 346129891FD1E2AB00532771 /* OWS100RemoveTSRecipientsMigration.m in Sources */, 34CA1C291F7164F700E51C51 /* MediaMessageView.swift in Sources */, 3400C7961EAF99F4008A8584 /* SelectThreadViewController.m in Sources */, 34D5CCB11EAE7E7F005515DB /* SelectRecipientViewController.m in Sources */, @@ -2758,18 +2790,13 @@ 34E3EF101EFC2684007F6822 /* DebugUIPage.m in Sources */, 34D1F0AE1F867BFC0066283D /* OWSMessageCell.m in Sources */, 451686AB1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift in Sources */, - 76EB058A18170B33006006FC /* Release.m in Sources */, 45D231771DC7E8F10034FA89 /* SessionResetJob.swift in Sources */, 34D9134D1F66DB7C00722898 /* ModalActivityIndicatorViewController.swift in Sources */, - 4563ADF11F22BD7100DEB8C7 /* OWS106EnsureProfileComplete.swift in Sources */, 76EB057A18170B33006006FC /* OWSContactsManager.m in Sources */, 76EB064218170B33006006FC /* StringUtil.m in Sources */, 452037D11EE84975004E4CDF /* DebugUISessionState.m in Sources */, - 342FCE6B1EF9C375002690AD /* OWS105AttachmentFilePaths.m in Sources */, D221A09A169C9E5E00537ABF /* main.m in Sources */, 345671011E89A5F1006EE662 /* ThreadUtil.m in Sources */, - 4585C4601ED4FD0400896AEA /* OWS104CreateRecipientIdentities.m in Sources */, - B6258B331C29E2E60014138E /* NotificationsManager.m in Sources */, 34B3F87B1E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift in Sources */, 34533F181EA8D2070006114F /* OWSAudioAttachmentPlayer.m in Sources */, 452EA09E1EA7ABE00078744B /* AttachmentPointerView.swift in Sources */, @@ -2778,12 +2805,12 @@ 34B3F87C1E8DF1700035BE1A /* FingerprintViewController.m in Sources */, 4523149C1F7D7F81003A428C /* OWSMessagesBubbleImageFactory.swift in Sources */, 45638BDC1F3DD0D400128435 /* DebugUICalling.swift in Sources */, - 76EB058218170B33006006FC /* Environment.m in Sources */, 450449391F45EE7D002D1ADA /* NSString+OWS.m in Sources */, 45464DBC1DFA041F001D3FD6 /* DataChannelMessage.swift in Sources */, 34E3E5681EC4B19400495BAC /* AudioProgressView.swift in Sources */, 34D1F0521F7E8EA30066283D /* GiphyDownloader.swift in Sources */, 450DF2051E0D74AC003D14BE /* Platform.swift in Sources */, + 346129991FD1E4DA00532771 /* SignalApp.m in Sources */, 34BECE301F7ABCF800D7438D /* GifPickerLayout.swift in Sources */, 3472229F1EB22FFE00E53955 /* AddToGroupViewController.m in Sources */, 343A65951FC47D5E000477A1 /* DebugUISyncMessages.m in Sources */, @@ -2808,11 +2835,9 @@ 45F170AC1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */, 34D1F0B71F87F8850066283D /* OWSGenericAttachmentView.m in Sources */, 34B3F8801E8DF1700035BE1A /* InviteFlow.swift in Sources */, - 45F170CC1E310E22003FC1F2 /* WeakTimer.swift in Sources */, 34B3F8871E8DF1700035BE1A /* NotificationSettingsViewController.m in Sources */, 458E38371D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m in Sources */, 4517642B1DE939FD00EDB8B9 /* ContactCell.swift in Sources */, - 450573FE1E78A06D00615BB4 /* OWS103EnableVideoCalling.m in Sources */, 34B3F8751E8DF1700035BE1A /* CallViewController.swift in Sources */, 34D8C0281ED3673300188D7C /* DebugUITableViewController.m in Sources */, 3497DBEC1ECE257500DB2605 /* OWSCountryMetadata.m in Sources */, @@ -2827,7 +2852,7 @@ 45C0DC1B1E68FE9000E04C47 /* UIApplication+OWS.swift in Sources */, 45638BDF1F3DDB2200128435 /* MessageSender+Promise.swift in Sources */, 45F3AEB61DFDE7900080CE33 /* AvatarImageView.swift in Sources */, - 7038632718F70C0700D4A43F /* CryptoTools.m in Sources */, + 3461298A1FD1E2AB00532771 /* OWS101ExistingUsersBlockOnIdentityChange.m in Sources */, 45FBC5C81DF8575700E9B410 /* CallKitCallManager.swift in Sources */, 34B3F8911E8DF1710035BE1A /* ShowGroupMembersViewController.m in Sources */, 4539B5861F79348F007141FF /* PushRegistrationManager.swift in Sources */, @@ -2848,10 +2873,11 @@ 451DE9FD1DC1A28200810E42 /* SyncPushTokensJob.swift in Sources */, 34D99C8C1F27B13B00D284D6 /* OWSViewController.m in Sources */, 34D1F0841F8678AA0066283D /* ConversationInputToolbar.m in Sources */, - 45666F761D9BFE00008FE134 /* OWS100RemoveTSRecipientsMigration.m in Sources */, 340CB2271EAC25820001CAA1 /* UpdateGroupViewController.m in Sources */, + 3461298C1FD1E2AB00532771 /* OWS103EnableVideoCalling.m in Sources */, 34B3F89F1E8DF5490035BE1A /* OWSTableViewController.m in Sources */, 3400C7931EAF89CD008A8584 /* SendExternalFileViewController.m in Sources */, + 3461298E1FD1E2AB00532771 /* OWS105AttachmentFilePaths.m in Sources */, FCC81A981A44558300DFEC7D /* UIDevice+TSHardwareVersion.m in Sources */, 3400C7991EAFB772008A8584 /* ThreadViewHelper.m in Sources */, 76EB054018170B33006006FC /* AppDelegate.m in Sources */, @@ -2864,26 +2890,26 @@ B609597C1C2C0FC6004E8797 /* iRate.m in Sources */, 4574A5D61DD6704700C6B692 /* CallService.swift in Sources */, 34B3F8721E8DF1700035BE1A /* AdvancedSettingsTableViewController.m in Sources */, + 3461299C1FD1EA9E00532771 /* NotificationsManager.m in Sources */, 45F170D61E315310003FC1F2 /* Weak.swift in Sources */, 4521C3C01F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */, 34B3F8891E8DF1700035BE1A /* OWSConversationSettingsViewController.m in Sources */, 34C42D671F4734ED0072EC04 /* TSUnreadIndicatorInteraction.m in Sources */, 34B3F87E1E8DF1700035BE1A /* InboxTableViewCell.m in Sources */, - B6B1013C196D213F007E3930 /* SignalKeyingStorage.m in Sources */, 34D5CC961EA6AFAD005515DB /* OWSContactsSyncing.m in Sources */, 45E2E9201E153B3D00457AA0 /* Strings.swift in Sources */, 34B3F88B1E8DF1700035BE1A /* OWSLinkedDevicesTableViewController.m in Sources */, - 45666F7E1D9C0814008FE134 /* OWSDatabaseMigrationRunner.m in Sources */, 4579431E1E7C8CE9008ED0C0 /* Pastelog.m in Sources */, 34C42D661F4734ED0072EC04 /* OWSContactOffersInteraction.m in Sources */, 34B3F8941E8DF1710035BE1A /* HomeViewController.m in Sources */, 34E8BF381EE9E2FD00F5F4CA /* FingerprintViewScanController.m in Sources */, 346B66311F4E29B200E5122F /* CropScaleImageViewController.swift in Sources */, 45E5A6991F61E6DE001E4A8A /* MarqueeLabel.swift in Sources */, + 3461298D1FD1E2AB00532771 /* OWS104CreateRecipientIdentities.m in Sources */, 34D1F0B01F867BFC0066283D /* OWSSystemMessageCell.m in Sources */, 45A663C51F92EC760027B59E /* GroupTableViewCell.swift in Sources */, 34B3F87D1E8DF1700035BE1A /* FullImageViewController.m in Sources */, - 45666F7B1D9C0533008FE134 /* OWSDatabaseMigration.m in Sources */, + 3461298F1FD1E2AB00532771 /* OWS106EnsureProfileComplete.swift in Sources */, 34D1F0861F8678AA0066283D /* ConversationViewController.m in Sources */, B90418E6183E9DD40038554A /* DateUtil.m in Sources */, 459311FC1D75C948008DD4F0 /* OWSDeviceTableViewCell.m in Sources */, @@ -2894,7 +2920,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4505C2C31E648F7A00CEBF41 /* ExperienceUpgradeFinder.swift in Sources */, 456F6E241E24133E00FD2210 /* CallKitCallUIAdaptee.swift in Sources */, 451DA3C81F14898E008E2423 /* Strings.swift in Sources */, 456F6E251E24216100FD2210 /* DataChannelMessage.swift in Sources */, @@ -2907,18 +2932,13 @@ 452C46901E427E200087B011 /* OutboundCallInitiator.swift in Sources */, 451DE9F81DC18C9500810E42 /* AccountManager.swift in Sources */, B660F7171C29988E00687D6E /* OWSContactsManager.m in Sources */, - B660F7181C29988E00687D6E /* CryptoTools.m in Sources */, - B660F71B1C29988E00687D6E /* Environment.m in Sources */, 451DA3CA1F148A9F008E2423 /* DeviceSleepManager.swift in Sources */, - B660F7201C29988E00687D6E /* Release.m in Sources */, 45BB93391E688E14001E3939 /* UIDevice+featureSupport.swift in Sources */, - B660F7211C29988E00687D6E /* SignalKeyingStorage.m in Sources */, B660F7221C29988E00687D6E /* VersionMigrations.m in Sources */, 4521C3C11F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */, 45D231781DC7E8F10034FA89 /* SessionResetJob.swift in Sources */, 458967111DC117CC00E9DD21 /* AccountManagerTest.swift in Sources */, 45F659831E1BE77000444429 /* NonCallKitCallUIAdaptee.swift in Sources */, - 456AC8351E3A776300A3C7FC /* WeakTimer.swift in Sources */, 340B02BA1FA0D6C700F9CFEC /* ConversationViewItemTest.m in Sources */, 458E383A1D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m in Sources */, 452D1EE81DCA90D100A57EC4 /* MesssagesBubblesSizeCalculatorTest.swift in Sources */, @@ -3331,6 +3351,10 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = U68MSDN6DR; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -3392,6 +3416,10 @@ DEVELOPMENT_TEAM = U68MSDN6DR; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -3457,6 +3485,10 @@ DEVELOPMENT_TEAM = U68MSDN6DR; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -3511,6 +3543,10 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -3580,6 +3616,10 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -3653,6 +3693,10 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index eb0e2cafd..86fb79edf 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -25,6 +25,7 @@ #import "VersionMigrations.h" #import "ViewControllerUtils.h" #import +#import #import #import #import @@ -126,15 +127,10 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; [self startupLogging]; - // Set the seed the generator for rand(). - // - // We should always use arc4random() instead of rand(), but we - // still want to ensure that any third-party code that uses rand() - // gets random values. - srand((unsigned int)time(NULL)); + SetRandFunctionSeed(); // XXX - careful when moving this. It must happen before we initialize TSStorageManager. - [self verifyDBKeysAvailableBeforeBackgroundLaunch]; + [TSStorageManager verifyDBKeysAvailableBeforeBackgroundLaunch]; // Prevent the device from sleeping during database view async registration // (e.g. long database upgrades). @@ -858,23 +854,6 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; completionHandler:completionHandler]; } -/** - * The user must unlock the device once after reboot before the database encryption key can be accessed. - */ -- (void)verifyDBKeysAvailableBeforeBackgroundLaunch -{ - if (UIApplication.sharedApplication.applicationState != UIApplicationStateBackground) { - return; - } - - if (![TSStorageManager isDatabasePasswordAccessible]) { - DDLogInfo( - @"%@ exiting because we are in the background and the database password is not accessible.", self.logTag); - [DDLog flushLog]; - exit(0); - } -} - - (void)databaseViewRegistrationComplete { DDLogInfo(@"%@ databaseViewRegistrationComplete", self.logTag); diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIStress.m b/Signal/src/ViewControllers/DebugUI/DebugUIStress.m index bf318a8cf..3e7f40549 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIStress.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIStress.m @@ -6,6 +6,7 @@ #import "Environment.h" #import "OWSMessageSender.h" #import "OWSTableViewController.h" +#import "SignalApp.h" #import "ThreadUtil.h" #import #import @@ -484,8 +485,8 @@ NS_ASSUME_NONNULL_BEGIN thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction]; }]; OWSAssert(thread); - - [Environment presentConversationForThread:thread]; + + [SignalApp.sharedApp presentConversationForThread:thread]; } @end diff --git a/Signal/src/ViewControllers/NewContactThreadViewController.m b/Signal/src/ViewControllers/NewContactThreadViewController.m index b02aa5977..1b176dde5 100644 --- a/Signal/src/ViewControllers/NewContactThreadViewController.m +++ b/Signal/src/ViewControllers/NewContactThreadViewController.m @@ -10,6 +10,7 @@ #import "NewNonContactConversationViewController.h" #import "OWSTableViewController.h" #import "Signal-Swift.h" +#import "SignalApp.h" #import "UIColor+OWS.h" #import "UIUtil.h" #import "UIView+OWS.h" @@ -813,7 +814,7 @@ NS_ASSUME_NONNULL_BEGIN OWSAssert(thread != nil); [self dismissViewControllerAnimated:YES completion:^() { - [Environment presentConversationForThread:thread withCompose:YES]; + [SignalApp.sharedApp presentConversationForThread:thread withCompose:YES]; }]; } diff --git a/Signal/src/ViewControllers/NewGroupViewController.m b/Signal/src/ViewControllers/NewGroupViewController.m index a7b27ce58..66a445b28 100644 --- a/Signal/src/ViewControllers/NewGroupViewController.m +++ b/Signal/src/ViewControllers/NewGroupViewController.m @@ -14,6 +14,7 @@ #import "OWSNavigationController.h" #import "OWSTableViewController.h" #import "Signal-Swift.h" +#import "SignalApp.h" #import "SignalKeyingStorage.h" #import "TSOutgoingMessage.h" #import "UIUtil.h" @@ -460,7 +461,7 @@ const NSUInteger kNewGroupViewControllerAvatarWidth = 68; [self dismissViewControllerAnimated:YES completion:^{ // Pop to new group thread. - [Environment presentConversationForThread:thread]; + [SignalApp.sharedApp presentConversationForThread:thread]; }]; }); @@ -479,7 +480,7 @@ const NSUInteger kNewGroupViewControllerAvatarWidth = 68; failedMessageType:TSErrorMessageGroupCreationFailed] save]; - [Environment presentConversationForThread:thread]; + [SignalApp.sharedApp presentConversationForThread:thread]; }]; }); }; diff --git a/Signal/src/ViewControllers/SendExternalFileViewController.m b/Signal/src/ViewControllers/SendExternalFileViewController.m index 264a18539..b6b152fd2 100644 --- a/Signal/src/ViewControllers/SendExternalFileViewController.m +++ b/Signal/src/ViewControllers/SendExternalFileViewController.m @@ -6,6 +6,7 @@ #import "Environment.h" #import "NSString+OWS.h" #import "Signal-Swift.h" +#import "SignalApp.h" #import "ThreadUtil.h" #import "UIColor+OWS.h" #import "UIFont+OWS.h" @@ -67,7 +68,7 @@ NS_ASSUME_NONNULL_BEGIN [ThreadUtil addThreadToProfileWhitelistIfEmptyContactThread:thread]; [ThreadUtil sendMessageWithAttachment:self.attachment inThread:thread messageSender:self.messageSender]; - [Environment presentConversationForThread:thread]; + [SignalApp.sharedApp presentConversationForThread:thread]; } - (BOOL)canSelectBlockedContact diff --git a/Signal/src/ViewControllers/ShowGroupMembersViewController.m b/Signal/src/ViewControllers/ShowGroupMembersViewController.m index de7d43f30..f43b142f4 100644 --- a/Signal/src/ViewControllers/ShowGroupMembersViewController.m +++ b/Signal/src/ViewControllers/ShowGroupMembersViewController.m @@ -10,6 +10,7 @@ #import "HomeViewController.h" #import "OWSContactsManager.h" #import "Signal-Swift.h" +#import "SignalApp.h" #import "UIUtil.h" #import "ViewControllerUtils.h" #import @@ -408,12 +409,12 @@ NS_ASSUME_NONNULL_BEGIN { OWSAssert(recipientId.length > 0); - [Environment presentConversationForRecipientId:recipientId withCompose:YES]; + [SignalApp.sharedApp presentConversationForRecipientId:recipientId withCompose:YES]; } - (void)callMember:(NSString *)recipientId { - [Environment callRecipientId:recipientId]; + [SignalApp.sharedApp callRecipientId:recipientId]; } - (void)showSafetyNumberView:(NSString *)recipientId diff --git a/Signal/src/environment/ExperienceUpgradeFinder.swift b/Signal/src/environment/ExperienceUpgrades/ExperienceUpgradeFinder.swift similarity index 100% rename from Signal/src/environment/ExperienceUpgradeFinder.swift rename to Signal/src/environment/ExperienceUpgrades/ExperienceUpgradeFinder.swift diff --git a/Signal/src/environment/OWS106EnsureProfileComplete.swift b/Signal/src/environment/Migrations/OWS106EnsureProfileComplete.swift similarity index 100% rename from Signal/src/environment/OWS106EnsureProfileComplete.swift rename to Signal/src/environment/Migrations/OWS106EnsureProfileComplete.swift diff --git a/Signal/src/environment/Migrations/OWSDatabaseMigrationRunner.m b/Signal/src/environment/Migrations/OWSDatabaseMigrationRunner.m index d607dd8c7..8dc01a374 100644 --- a/Signal/src/environment/Migrations/OWSDatabaseMigrationRunner.m +++ b/Signal/src/environment/Migrations/OWSDatabaseMigrationRunner.m @@ -3,12 +3,9 @@ // #import "OWSDatabaseMigrationRunner.h" -#import "OWS100RemoveTSRecipientsMigration.h" -#import "OWS102MoveLoggingPreferenceToUserDefaults.h" -#import "OWS103EnableVideoCalling.h" -#import "OWS104CreateRecipientIdentities.h" -#import "OWS105AttachmentFilePaths.h" +#import "OWSDatabaseMigration.h" #import "Signal-Swift.h" +#import NS_ASSUME_NONNULL_BEGIN @@ -28,14 +25,7 @@ NS_ASSUME_NONNULL_BEGIN - (NSArray *)allMigrations { - return @[ - [[OWS100RemoveTSRecipientsMigration alloc] initWithStorageManager:self.storageManager], - [[OWS102MoveLoggingPreferenceToUserDefaults alloc] initWithStorageManager:self.storageManager], - [[OWS103EnableVideoCalling alloc] initWithStorageManager:self.storageManager], - // OWS104CreateRecipientIdentities is run separately. See runSafeBlockingMigrations. - [[OWS105AttachmentFilePaths alloc] initWithStorageManager:self.storageManager], - [[OWS106EnsureProfileComplete alloc] initWithStorageManager:self.storageManager] - ]; + return CurrentAppContext().allMigrations; } - (void)assumeAllExistingMigrationsRun diff --git a/Signal/src/environment/SignalApp.h b/Signal/src/environment/SignalApp.h new file mode 100644 index 000000000..1ed86e9a9 --- /dev/null +++ b/Signal/src/environment/SignalApp.h @@ -0,0 +1,43 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +@class AccountManager; +@class CallService; +@class CallUIAdapter; +@class HomeViewController; +@class NotificationsManager; +@class OWSMessageFetcherJob; +@class OWSWebRTCCallMessageHandler; +@class OutboundCallInitiator; +@class TSThread; + +@interface SignalApp : NSObject + +@property (nonatomic) HomeViewController *homeViewController; +@property (nonatomic, readonly) OWSWebRTCCallMessageHandler *callMessageHandler; +@property (nonatomic, readonly) CallService *callService; +@property (nonatomic, readonly) CallUIAdapter *callUIAdapter; +@property (nonatomic, readonly) OutboundCallInitiator *outboundCallInitiator; +@property (nonatomic, readonly) OWSMessageFetcherJob *messageFetcherJob; +@property (nonatomic, readonly) NotificationsManager *notificationsManager; +@property (nonatomic, readonly) AccountManager *accountManager; + +- (instancetype)init NS_UNAVAILABLE; + ++ (instancetype)sharedApp; + +#pragma mark - View Convenience Methods + +- (void)presentConversationForRecipientId:(NSString *)recipientId; +- (void)presentConversationForRecipientId:(NSString *)recipientId withCompose:(BOOL)compose; +- (void)callRecipientId:(NSString *)recipientId; +- (void)presentConversationForThreadId:(NSString *)threadId; +- (void)presentConversationForThread:(TSThread *)thread; +- (void)presentConversationForThread:(TSThread *)thread withCompose:(BOOL)compose; + +#pragma mark - Methods + ++ (void)resetAppData; + +@end diff --git a/Signal/src/environment/Environment.m b/Signal/src/environment/SignalApp.m similarity index 62% rename from Signal/src/environment/Environment.m rename to Signal/src/environment/SignalApp.m index 323bbc3cf..1f583c8b2 100644 --- a/Signal/src/environment/Environment.m +++ b/Signal/src/environment/SignalApp.m @@ -2,79 +2,59 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // -#import "Environment.h" +#import "SignalApp.h" #import "ConversationViewController.h" -#import "DebugLogger.h" #import "HomeViewController.h" #import "Signal-Swift.h" -#import "SignalKeyingStorage.h" -#import "TSContactThread.h" -#import "TSGroupThread.h" -#import -#import -#import +#import +#import +#import #import -static Environment *environment = nil; +@interface SignalApp () -@implementation Environment +@property (nonatomic) OWSWebRTCCallMessageHandler *callMessageHandler; +@property (nonatomic) CallService *callService; +@property (nonatomic) OutboundCallInitiator *outboundCallInitiator; +@property (nonatomic) OWSMessageFetcherJob *messageFetcherJob; +@property (nonatomic) NotificationsManager *notificationsManager; +@property (nonatomic) AccountManager *accountManager; -@synthesize accountManager = _accountManager, - callMessageHandler = _callMessageHandler, - callService = _callService, - contactsManager = _contactsManager, - contactsUpdater = _contactsUpdater, - messageFetcherJob = _messageFetcherJob, - messageSender = _messageSender, - networkManager = _networkManager, - notificationsManager = _notificationsManager, - preferences = _preferences, - outboundCallInitiator = _outboundCallInitiator; +@end -+ (Environment *)getCurrent { - NSAssert((environment != nil), @"Environment is not defined."); - return environment; +#pragma mark - + +@implementation SignalApp + ++ (instancetype)sharedApp +{ + static SignalApp *sharedApp = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedApp = [[self alloc] initDefault]; + }); + return sharedApp; } -+ (void)setCurrent:(Environment *)curEnvironment { - environment = curEnvironment; -} - -- (instancetype)initWithContactsManager:(OWSContactsManager *)contactsManager - contactsUpdater:(ContactsUpdater *)contactsUpdater - networkManager:(TSNetworkManager *)networkManager - messageSender:(OWSMessageSender *)messageSender +- (instancetype)initDefault { self = [super init]; + if (!self) { return self; } - _contactsManager = contactsManager; - _contactsUpdater = contactsUpdater; - _networkManager = networkManager; - _messageSender = messageSender; - OWSSingletonAssert(); return self; } -- (AccountManager *)accountManager -{ - @synchronized (self) { - if (!_accountManager) { - _accountManager = [[AccountManager alloc] initWithTextSecureAccountManager:[TSAccountManager sharedInstance] - preferences:self.preferences]; - } - } - - return _accountManager; -} +#pragma mark - Singletons - (OWSWebRTCCallMessageHandler *)callMessageHandler { - @synchronized (self) { + @synchronized(self) + { if (!_callMessageHandler) { _callMessageHandler = [[OWSWebRTCCallMessageHandler alloc] initWithAccountManager:self.accountManager callService:self.callService @@ -87,7 +67,8 @@ static Environment *environment = nil; - (CallService *)callService { - @synchronized (self) { + @synchronized(self) + { if (!_callService) { OWSAssert(self.accountManager); OWSAssert(self.contactsManager); @@ -109,7 +90,8 @@ static Environment *environment = nil; - (OutboundCallInitiator *)outboundCallInitiator { - @synchronized (self) { + @synchronized(self) + { if (!_outboundCallInitiator) { OWSAssert(self.contactsManager); OWSAssert(self.contactsUpdater); @@ -121,24 +103,6 @@ static Environment *environment = nil; return _outboundCallInitiator; } -- (OWSContactsManager *)contactsManager -{ - OWSAssert(_contactsManager != nil); - return _contactsManager; -} - -- (ContactsUpdater *)contactsUpdater -{ - OWSAssert(_contactsUpdater != nil); - return _contactsUpdater; -} - -- (TSNetworkManager *)networkManager -{ - OWSAssert(_networkManager != nil); - return _networkManager; -} - - (OWSMessageFetcherJob *)messageFetcherJob { @synchronized(self) @@ -153,15 +117,10 @@ static Environment *environment = nil; return _messageFetcherJob; } -- (OWSMessageSender *)messageSender -{ - OWSAssert(_messageSender != nil); - return _messageSender; -} - - (NotificationsManager *)notificationsManager { - @synchronized (self) { + @synchronized(self) + { if (!_notificationsManager) { _notificationsManager = [NotificationsManager new]; } @@ -170,49 +129,37 @@ static Environment *environment = nil; return _notificationsManager; } -+ (OWSPreferences *)preferences +- (AccountManager *)accountManager { - OWSAssert([Environment getCurrent] != nil); - OWSAssert([Environment getCurrent].preferences != nil); - return [Environment getCurrent].preferences; -} - -- (OWSPreferences *)preferences -{ - @synchronized (self) { - if (!_preferences) { - _preferences = [OWSPreferences new]; + @synchronized(self) + { + if (!_accountManager) { + _accountManager = [[AccountManager alloc] initWithTextSecureAccountManager:[TSAccountManager sharedInstance] + preferences:self.preferences]; } } - return _preferences; + return _accountManager; } -- (void)setHomeViewController:(HomeViewController *)homeViewController -{ - _homeViewController = homeViewController; -} +#pragma mark - View Convenience Methods -- (void)setSignUpFlowNavigationController:(UINavigationController *)navigationController { - _signUpFlowNavigationController = navigationController; -} - -+ (void)presentConversationForRecipientId:(NSString *)recipientId +- (void)presentConversationForRecipientId:(NSString *)recipientId { [self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:YES callOnViewAppearing:NO]; } -+ (void)presentConversationForRecipientId:(NSString *)recipientId withCompose:(BOOL)compose +- (void)presentConversationForRecipientId:(NSString *)recipientId withCompose:(BOOL)compose { [self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:compose callOnViewAppearing:NO]; } -+ (void)callRecipientId:(NSString *)recipientId +- (void)callRecipientId:(NSString *)recipientId { [self presentConversationForRecipientId:recipientId keyboardOnViewAppearing:NO callOnViewAppearing:YES]; } -+ (void)presentConversationForRecipientId:(NSString *)recipientId +- (void)presentConversationForRecipientId:(NSString *)recipientId keyboardOnViewAppearing:(BOOL)keyboardOnViewAppearing callOnViewAppearing:(BOOL)callOnViewAppearing { @@ -231,7 +178,7 @@ static Environment *environment = nil; }); } -+ (void)presentConversationForThreadId:(NSString *)threadId +- (void)presentConversationForThreadId:(NSString *)threadId { OWSAssert(threadId.length > 0); @@ -244,17 +191,17 @@ static Environment *environment = nil; [self presentConversationForThread:thread]; } -+ (void)presentConversationForThread:(TSThread *)thread +- (void)presentConversationForThread:(TSThread *)thread { [self presentConversationForThread:thread withCompose:YES]; } -+ (void)presentConversationForThread:(TSThread *)thread withCompose:(BOOL)compose +- (void)presentConversationForThread:(TSThread *)thread withCompose:(BOOL)compose { [self presentConversationForThread:thread keyboardOnViewAppearing:compose callOnViewAppearing:NO]; } -+ (void)presentConversationForThread:(TSThread *)thread +- (void)presentConversationForThread:(TSThread *)thread keyboardOnViewAppearing:(BOOL)keyboardOnViewAppearing callOnViewAppearing:(BOOL)callOnViewAppearing { @@ -277,14 +224,16 @@ static Environment *environment = nil; } } - Environment *env = [self getCurrent]; - [env.homeViewController presentThread:thread - keyboardOnViewAppearing:keyboardOnViewAppearing - callOnViewAppearing:callOnViewAppearing]; + [self.homeViewController presentThread:thread + keyboardOnViewAppearing:keyboardOnViewAppearing + callOnViewAppearing:callOnViewAppearing]; }); } -+ (void)resetAppData { +#pragma mark - Methods + ++ (void)resetAppData +{ // This _should_ be wiped out below. DDLogError(@"%@ %s", self.logTag, __PRETTY_FUNCTION__); [DDLog flushLog]; diff --git a/Signal/src/network/PushManager.m b/Signal/src/network/PushManager.m index a4d7a8243..a259d1d5a 100644 --- a/Signal/src/network/PushManager.m +++ b/Signal/src/network/PushManager.m @@ -7,6 +7,7 @@ #import "NotificationsManager.h" #import "OWSContactsManager.h" #import "Signal-Swift.h" +#import "SignalApp.h" #import "ThreadUtil.h" #import #import @@ -141,7 +142,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe NSString *_Nullable threadId = notification.userInfo[Signal_Thread_UserInfo_Key]; if (threadId) { - [Environment presentConversationForThreadId:threadId]; + [SignalApp.sharedApp presentConversationForThreadId:threadId]; } else { OWSFail(@"%@ threadId was unexpectedly nil in %s", self.logTag, __PRETTY_FUNCTION__); } @@ -246,7 +247,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe NSString *threadId = notification.userInfo[Signal_Thread_UserInfo_Key]; if (threadId) { - [Environment presentConversationForThreadId:threadId]; + [SignalApp.sharedApp presentConversationForThreadId:threadId]; } else { OWSFail(@"%@ threadId was unexpectedly nil in action with identifier: %@", self.logTag, identifier); } @@ -255,7 +256,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe OWSFail(@"%@ Unhandled action with identifier: %@", self.logTag, identifier); NSString *threadId = notification.userInfo[Signal_Thread_UserInfo_Key]; if (threadId) { - [Environment presentConversationForThreadId:threadId]; + [SignalApp.sharedApp presentConversationForThreadId:threadId]; } else { OWSFail(@"%@ threadId was unexpectedly nil in action with identifier: %@", self.logTag, identifier); } diff --git a/Signal/src/util/MainAppContext.m b/Signal/src/util/MainAppContext.m index 0a677cc45..cdc093801 100644 --- a/Signal/src/util/MainAppContext.m +++ b/Signal/src/util/MainAppContext.m @@ -3,6 +3,11 @@ // #import "MainAppContext.h" +#import "OWS100RemoveTSRecipientsMigration.h" +#import "OWS102MoveLoggingPreferenceToUserDefaults.h" +#import "OWS103EnableVideoCalling.h" +#import "OWS104CreateRecipientIdentities.h" +#import "OWS105AttachmentFilePaths.h" NS_ASSUME_NONNULL_BEGIN @@ -45,6 +50,18 @@ NS_ASSUME_NONNULL_BEGIN [[UIApplication sharedApplication] setApplicationIconBadgeNumber:value]; } +- (NSArray *)allMigrations +{ + return @[ + [[OWS100RemoveTSRecipientsMigration alloc] initWithStorageManager:self.storageManager], + [[OWS102MoveLoggingPreferenceToUserDefaults alloc] initWithStorageManager:self.storageManager], + [[OWS103EnableVideoCalling alloc] initWithStorageManager:self.storageManager], + // OWS104CreateRecipientIdentities is run separately. See runSafeBlockingMigrations. + [[OWS105AttachmentFilePaths alloc] initWithStorageManager:self.storageManager], + [[OWS106EnsureProfileComplete alloc] initWithStorageManager:self.storageManager] + ]; +} + @end NS_ASSUME_NONNULL_END diff --git a/SignalMessaging/SignalMessaging.h b/SignalMessaging/SignalMessaging.h index e26acc379..e9e48efff 100644 --- a/SignalMessaging/SignalMessaging.h +++ b/SignalMessaging/SignalMessaging.h @@ -11,4 +11,6 @@ FOUNDATION_EXPORT double SignalMessagingVersionNumber; FOUNDATION_EXPORT const unsigned char SignalMessagingVersionString[]; // The public headers of the framework +#import +#import #import diff --git a/Signal/src/environment/Environment.h b/SignalMessaging/environment/Environment.h similarity index 54% rename from Signal/src/environment/Environment.h rename to SignalMessaging/environment/Environment.h index be3187d7d..c29daaf93 100644 --- a/Signal/src/environment/Environment.h +++ b/SignalMessaging/environment/Environment.h @@ -13,21 +13,13 @@ * **/ +@class ContactsUpdater; +@class OWSContactsManager; +@class OWSMessageSender; +@class TSGroupThread; +@class TSNetworkManager; @class TSThread; @class UINavigationController; -@class OWSContactsManager; -@class OutboundCallInitiator; -@class HomeViewController; -@class TSGroupThread; -@class ContactsUpdater; -@class TSNetworkManager; -@class AccountManager; -@class OWSWebRTCCallMessageHandler; -@class CallUIAdapter; -@class CallService; -@class OWSMessageSender; -@class NotificationsManager; -@class OWSMessageFetcherJob; @interface Environment : NSObject @@ -36,20 +28,12 @@ networkManager:(TSNetworkManager *)networkManager messageSender:(OWSMessageSender *)messageSender; -@property (nonatomic, readonly) AccountManager *accountManager; -@property (nonatomic, readonly) OWSWebRTCCallMessageHandler *callMessageHandler; -@property (nonatomic, readonly) CallUIAdapter *callUIAdapter; -@property (nonatomic, readonly) CallService *callService; @property (nonatomic, readonly) OWSContactsManager *contactsManager; -@property (nonatomic, readonly) OutboundCallInitiator *outboundCallInitiator; @property (nonatomic, readonly) ContactsUpdater *contactsUpdater; @property (nonatomic, readonly) TSNetworkManager *networkManager; -@property (nonatomic, readonly) NotificationsManager *notificationsManager; @property (nonatomic, readonly) OWSMessageSender *messageSender; @property (nonatomic, readonly) OWSPreferences *preferences; -@property (nonatomic, readonly) OWSMessageFetcherJob *messageFetcherJob; -@property (nonatomic, readonly) HomeViewController *homeViewController; @property (nonatomic, readonly, weak) UINavigationController *signUpFlowNavigationController; + (Environment *)getCurrent; @@ -57,16 +41,6 @@ + (OWSPreferences *)preferences; -+ (void)resetAppData; - -- (void)setHomeViewController:(HomeViewController *)homeViewController; - (void)setSignUpFlowNavigationController:(UINavigationController *)signUpFlowNavigationController; -+ (void)presentConversationForRecipientId:(NSString *)recipientId; -+ (void)presentConversationForRecipientId:(NSString *)recipientId withCompose:(BOOL)compose; -+ (void)callRecipientId:(NSString *)recipientId; -+ (void)presentConversationForThreadId:(NSString *)threadId; -+ (void)presentConversationForThread:(TSThread *)thread; -+ (void)presentConversationForThread:(TSThread *)thread withCompose:(BOOL)compose; - @end diff --git a/SignalMessaging/environment/Environment.m b/SignalMessaging/environment/Environment.m new file mode 100644 index 000000000..5e030103a --- /dev/null +++ b/SignalMessaging/environment/Environment.m @@ -0,0 +1,117 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "Environment.h" +#import "DebugLogger.h" +#import "SignalKeyingStorage.h" +#import +#import +#import +#import +#import +#import + +static Environment *environment = nil; + +@interface Environment () + +@property (nonatomic) OWSContactsManager *contactsManager; +@property (nonatomic) ContactsUpdater *contactsUpdater; +@property (nonatomic) TSNetworkManager *networkManager; +@property (nonatomic) OWSMessageSender *messageSender; +@property (nonatomic) OWSPreferences *preferences; + +@property (nonatomic, weak) UINavigationController *signUpFlowNavigationController; + +@end + +#pragma mark - + +@implementation Environment + ++ (Environment *)getCurrent +{ + NSAssert((environment != nil), @"Environment is not defined."); + return environment; +} + ++ (void)setCurrent:(Environment *)curEnvironment +{ + environment = curEnvironment; +} + +- (instancetype)initWithContactsManager:(OWSContactsManager *)contactsManager + contactsUpdater:(ContactsUpdater *)contactsUpdater + networkManager:(TSNetworkManager *)networkManager + messageSender:(OWSMessageSender *)messageSender +{ + self = [super init]; + if (!self) { + return self; + } + + _contactsManager = contactsManager; + _contactsUpdater = contactsUpdater; + _networkManager = networkManager; + _messageSender = messageSender; + + OWSSingletonAssert(); + + return self; +} + +- (OWSContactsManager *)contactsManager +{ + OWSAssert(_contactsManager); + + return _contactsManager; +} + +- (ContactsUpdater *)contactsUpdater +{ + OWSAssert(_contactsUpdater); + + return _contactsUpdater; +} + +- (TSNetworkManager *)networkManager +{ + OWSAssert(_networkManager); + + return _networkManager; +} + +- (OWSMessageSender *)messageSender +{ + OWSAssert(_messageSender); + + return _messageSender; +} + ++ (OWSPreferences *)preferences +{ + OWSAssert([Environment getCurrent]); + OWSAssert([Environment getCurrent].preferences); + + return [Environment getCurrent].preferences; +} + +- (OWSPreferences *)preferences +{ + @synchronized(self) + { + if (!_preferences) { + _preferences = [OWSPreferences new]; + } + } + + return _preferences; +} + +- (void)setSignUpFlowNavigationController:(UINavigationController *)navigationController +{ + _signUpFlowNavigationController = navigationController; +} + +@end diff --git a/Signal/src/environment/Release.h b/SignalMessaging/environment/Release.h similarity index 100% rename from Signal/src/environment/Release.h rename to SignalMessaging/environment/Release.h diff --git a/Signal/src/environment/Release.m b/SignalMessaging/environment/Release.m similarity index 99% rename from Signal/src/environment/Release.m rename to SignalMessaging/environment/Release.m index 3c59337de..f0beab21f 100644 --- a/Signal/src/environment/Release.m +++ b/SignalMessaging/environment/Release.m @@ -45,7 +45,8 @@ } // TODELETE -+ (Environment *)unitTestEnvironment:(NSArray *)testingAndLegacyOptions { ++ (Environment *)unitTestEnvironment:(NSArray *)testingAndLegacyOptions +{ TSNetworkManager *networkManager = [TSNetworkManager sharedManager]; OWSContactsManager *contactsManager = [OWSContactsManager new]; ContactsUpdater *contactsUpdater = [ContactsUpdater sharedUpdater]; diff --git a/Signal/src/environment/SignalKeyingStorage.h b/SignalMessaging/environment/SignalKeyingStorage.h similarity index 100% rename from Signal/src/environment/SignalKeyingStorage.h rename to SignalMessaging/environment/SignalKeyingStorage.h diff --git a/Signal/src/environment/SignalKeyingStorage.m b/SignalMessaging/environment/SignalKeyingStorage.m similarity index 80% rename from Signal/src/environment/SignalKeyingStorage.m rename to SignalMessaging/environment/SignalKeyingStorage.m index f0efe59e5..1d380087e 100644 --- a/Signal/src/environment/SignalKeyingStorage.m +++ b/SignalMessaging/environment/SignalKeyingStorage.m @@ -2,8 +2,8 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // -#import "CryptoTools.h" #import "SignalKeyingStorage.h" +#import "CryptoTools.h" #import "TSStorageManager.h" #import "Util.h" @@ -15,39 +15,46 @@ @implementation SignalKeyingStorage -+ (void)generateSignaling { ++ (void)generateSignaling +{ [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_MAC_KEY_LENGTH] forKey:SIGNALING_MAC_KEY]; [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_CIPHER_KEY_LENGTH] forKey:SIGNALING_CIPHER_KEY]; [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_EXTRA_KEY_LENGTH] forKey:SIGNALING_EXTRA_KEY]; } -+ (int64_t)getAndIncrementOneTimeCounter { ++ (int64_t)getAndIncrementOneTimeCounter +{ __block int64_t oldCounter; - oldCounter = [[self stringForKey:PASSWORD_COUNTER_KEY] longLongValue]; + oldCounter = [[self stringForKey:PASSWORD_COUNTER_KEY] longLongValue]; int64_t newCounter = (oldCounter == INT64_MAX) ? INT64_MIN : (oldCounter + 1); [self storeString:[@(newCounter) stringValue] forKey:PASSWORD_COUNTER_KEY]; return newCounter; } -+ (NSData *)signalingCipherKey { ++ (NSData *)signalingCipherKey +{ return [self dataForKey:SIGNALING_CIPHER_KEY andVerifyLength:SIGNALING_CIPHER_KEY_LENGTH]; } -+ (NSData *)signalingMacKey { ++ (NSData *)signalingMacKey +{ return [self dataForKey:SIGNALING_MAC_KEY andVerifyLength:SIGNALING_MAC_KEY_LENGTH]; } -+ (NSData *)signalingExtraKey { ++ (NSData *)signalingExtraKey +{ return [self dataForKey:SIGNALING_EXTRA_KEY andVerifyLength:SIGNALING_EXTRA_KEY_LENGTH]; } #pragma mark Keychain wrapper methods -+ (void)storeData:(NSData *)data forKey:(NSString *)key { ++ (void)storeData:(NSData *)data forKey:(NSString *)key +{ [TSStorageManager.sharedManager setObject:data forKey:key inCollection:SignalKeyingCollection]; } -+ (NSData *)dataForKey:(NSString *)key andVerifyLength:(uint)length { ++ (NSData *)dataForKey:(NSString *)key andVerifyLength:(uint)length +{ NSData *data = [self dataForKey:key]; if (data.length != length) { @@ -57,15 +64,18 @@ return data; } -+ (NSData *)dataForKey:(NSString *)key { ++ (NSData *)dataForKey:(NSString *)key +{ return [TSStorageManager.sharedManager dataForKey:key inCollection:SignalKeyingCollection]; } -+ (NSString *)stringForKey:(NSString *)key { ++ (NSString *)stringForKey:(NSString *)key +{ return [TSStorageManager.sharedManager stringForKey:key inCollection:SignalKeyingCollection]; } -+ (void)storeString:(NSString *)string forKey:(NSString *)key { ++ (void)storeString:(NSString *)string forKey:(NSString *)key +{ [TSStorageManager.sharedManager setObject:string forKey:key inCollection:SignalKeyingCollection]; } diff --git a/Signal/src/environment/Migrations/OWSDatabaseMigration.h b/SignalMessaging/environment/migrations/OWSDatabaseMigration.h similarity index 92% rename from Signal/src/environment/Migrations/OWSDatabaseMigration.h rename to SignalMessaging/environment/migrations/OWSDatabaseMigration.h index c4ffe42d5..22e5835f1 100644 --- a/Signal/src/environment/Migrations/OWSDatabaseMigration.h +++ b/SignalMessaging/environment/migrations/OWSDatabaseMigration.h @@ -2,7 +2,7 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // -#include +#import NS_ASSUME_NONNULL_BEGIN diff --git a/Signal/src/environment/Migrations/OWSDatabaseMigration.m b/SignalMessaging/environment/migrations/OWSDatabaseMigration.m similarity index 100% rename from Signal/src/environment/Migrations/OWSDatabaseMigration.m rename to SignalMessaging/environment/migrations/OWSDatabaseMigration.m diff --git a/Signal/src/crypto/CryptoTools.h b/SignalMessaging/utils/CryptoTools.h similarity index 86% rename from Signal/src/crypto/CryptoTools.h rename to SignalMessaging/utils/CryptoTools.h index 42d156b1c..0459b7f9d 100644 --- a/Signal/src/crypto/CryptoTools.h +++ b/SignalMessaging/utils/CryptoTools.h @@ -8,6 +8,8 @@ @interface CryptoTools : NSObject /// Returns data composed of 'length' cryptographically unpredictable bytes sampled uniformly from [0, 256). +// +// TODO: Is this redundant with: [SecurityUtils generateRandomBytes]? + (NSData *)generateSecureRandomData:(NSUInteger)length; @end diff --git a/Signal/src/crypto/CryptoTools.m b/SignalMessaging/utils/CryptoTools.m similarity index 68% rename from Signal/src/crypto/CryptoTools.m rename to SignalMessaging/utils/CryptoTools.m index f6d424e2e..ff3b495dd 100644 --- a/Signal/src/crypto/CryptoTools.m +++ b/SignalMessaging/utils/CryptoTools.m @@ -6,9 +6,10 @@ @implementation CryptoTools -+ (NSData *)generateSecureRandomData:(NSUInteger)length { ++ (NSData *)generateSecureRandomData:(NSUInteger)length +{ NSMutableData *d = [NSMutableData dataWithLength:length]; - OSStatus status = SecRandomCopyBytes(kSecRandomDefault, length, [d mutableBytes]); + OSStatus status = SecRandomCopyBytes(kSecRandomDefault, length, [d mutableBytes]); if (status != noErr) { [SecurityFailure raise:@"SecRandomCopyBytes failed"]; } diff --git a/SignalMessaging/utils/OWSMath.h b/SignalMessaging/utils/OWSMath.h index ef8b503df..82d82968e 100644 --- a/SignalMessaging/utils/OWSMath.h +++ b/SignalMessaging/utils/OWSMath.h @@ -27,4 +27,6 @@ static inline CGFloat CGFloatInverseLerp(CGFloat value, CGFloat minValue, CGFloa return (value - minValue) / (maxValue - minValue); } +void SetRandFunctionSeed(void); + NS_ASSUME_NONNULL_END diff --git a/SignalMessaging/utils/OWSMath.m b/SignalMessaging/utils/OWSMath.m new file mode 100644 index 000000000..375a726af --- /dev/null +++ b/SignalMessaging/utils/OWSMath.m @@ -0,0 +1,19 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "OWSMath.h" + +NS_ASSUME_NONNULL_BEGIN + +void SetRandFunctionSeed(void) +{ + // Set the seed the generator for rand(). + // + // We should always use arc4random() instead of rand(), but we + // still want to ensure that any third-party code that uses rand() + // gets random values. + srand((unsigned int)time(NULL)); +} + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/util/WeakTimer.swift b/SignalMessaging/utils/WeakTimer.swift similarity index 100% rename from Signal/src/util/WeakTimer.swift rename to SignalMessaging/utils/WeakTimer.swift diff --git a/SignalServiceKit/src/Storage/TSStorageManager.h b/SignalServiceKit/src/Storage/TSStorageManager.h index 753408f8e..dd2cb30a4 100644 --- a/SignalServiceKit/src/Storage/TSStorageManager.h +++ b/SignalServiceKit/src/Storage/TSStorageManager.h @@ -65,6 +65,8 @@ NS_ASSUME_NONNULL_BEGIN + (void)migrateToSharedData; ++ (void)verifyDBKeysAvailableBeforeBackgroundLaunch; + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Storage/TSStorageManager.m b/SignalServiceKit/src/Storage/TSStorageManager.m index 503226efd..891f55dfb 100644 --- a/SignalServiceKit/src/Storage/TSStorageManager.m +++ b/SignalServiceKit/src/Storage/TSStorageManager.m @@ -718,6 +718,23 @@ void setDatabaseInitialized() [TSAttachmentStream deleteAttachments]; } +/** + * The user must unlock the device once after reboot before the database encryption key can be accessed. + */ ++ (void)verifyDBKeysAvailableBeforeBackgroundLaunch +{ + if (CurrentAppContext().isMainApp && CurrentAppContext().mainApplicationState != UIApplicationStateBackground) { + return; + } + + if (![TSStorageManager isDatabasePasswordAccessible]) { + DDLogInfo( + @"%@ exiting because we are in the background and the database password is not accessible.", self.logTag); + [DDLog flushLog]; + exit(0); + } +} + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Util/AppContext.h b/SignalServiceKit/src/Util/AppContext.h index 578cf9ec7..82ad4601c 100755 --- a/SignalServiceKit/src/Util/AppContext.h +++ b/SignalServiceKit/src/Util/AppContext.h @@ -6,6 +6,8 @@ NS_ASSUME_NONNULL_BEGIN typedef void (^BackgroundTaskExpirationHandler)(void); +@class OWSDatabaseMigration; + @protocol AppContext - (BOOL)isMainApp; @@ -28,6 +30,8 @@ typedef void (^BackgroundTaskExpirationHandler)(void); - (BOOL)isRTL; +- (NSArray *)allMigrations; + @end id CurrentAppContext(void); diff --git a/SignalShareExtension/ShareViewController.swift b/SignalShareExtension/ShareViewController.swift index 047ff75f0..59d1ed2c3 100644 --- a/SignalShareExtension/ShareViewController.swift +++ b/SignalShareExtension/ShareViewController.swift @@ -26,7 +26,66 @@ class ShareViewController: UINavigationController, SAELoadViewDelegate { _ = AppVersion() - //[self startupLogging]; + startupLogging() + + SetRandFunctionSeed() + + // XXX - careful when moving this. It must happen before we initialize TSStorageManager. + TSStorageManager.verifyDBKeysAvailableBeforeBackgroundLaunch() + +// // Prevent the device from sleeping during database view async registration +// // (e.g. long database upgrades). +// // +// // This block will be cleared in databaseViewRegistrationComplete. +// [DeviceSleepManager.sharedInstance addBlockWithBlockObject:self]; +// +// [self setupEnvironment]; +// +// [UIUtil applySignalAppearence]; +// +// if (getenv("runningTests_dontStartApp")) { +// return YES; +// } +// +// self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; +// +// // Show the launch screen until the async database view registrations are complete. +// self.window.rootViewController = [self loadingRootViewController]; +// +// [self.window makeKeyAndVisible]; +// +// // performUpdateCheck must be invoked after Environment has been initialized because +// // upgrade process may depend on Environment. +// [VersionMigrations performUpdateCheck]; +// +// // Accept push notification when app is not open +// NSDictionary *remoteNotif = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; +// if (remoteNotif) { +// DDLogInfo(@"Application was launched by tapping a push notification."); +// [self application:application didReceiveRemoteNotification:remoteNotif]; +// } +// +// [self prepareScreenProtection]; +// +// self.contactsSyncing = [[OWSContactsSyncing alloc] initWithContactsManager:[Environment getCurrent].contactsManager +// identityManager:[OWSIdentityManager sharedManager] +// messageSender:[Environment getCurrent].messageSender +// profileManager:[OWSProfileManager sharedManager]]; +// +// [[NSNotificationCenter defaultCenter] addObserver:self +// selector:@selector(databaseViewRegistrationComplete) +// name:kNSNotificationName_DatabaseViewRegistrationComplete +// object:nil]; +// [[NSNotificationCenter defaultCenter] addObserver:self +// selector:@selector(registrationStateDidChange) +// name:kNSNotificationName_RegistrationStateDidChange +// object:nil]; +// +// DDLogInfo(@"%@ application: didFinishLaunchingWithOptions completed.", self.logTag); +// +// [OWSAnalytics appLaunchDidBegin]; +// +// return YES; Logger.debug("\(self.logTag()) \(#function)") @@ -35,6 +94,52 @@ class ShareViewController: UINavigationController, SAELoadViewDelegate { self.isNavigationBarHidden = false } + func startupLogging() { + Logger.info("iOS Version: \(UIDevice.current.systemVersion)}") + + let locale = NSLocale.current as NSLocale + if let localeIdentifier = locale.object(forKey:NSLocale.Key.identifier) as? String, + localeIdentifier.count > 0 { + Logger.info("Locale Identifier: \(localeIdentifier)") + } else { + owsFail("Locale Identifier: Unknown") + } + if let countryCode = locale.object(forKey:NSLocale.Key.countryCode) as? String, + countryCode.count > 0 { + Logger.info("Country Code: \(countryCode)") + } else { + owsFail("Country Code: Unknown") + } + if let languageCode = locale.object(forKey:NSLocale.Key.languageCode) as? String, + languageCode.count > 0 { + Logger.info("Language Code: \(languageCode)") + } else { + owsFail("Language Code: Unknown") + } + } + + func setupEnvironment() { + [Environment setCurrent:[Release releaseEnvironment]] + +// // Encryption/Descryption mutates session state and must be synchronized on a serial queue. +// [SessionCipher setSessionCipherDispatchQueue:[OWSDispatch sessionStoreQueue]]; +// +// TextSecureKitEnv *sharedEnv = +// [[TextSecureKitEnv alloc] initWithCallMessageHandler:[Environment getCurrent].callMessageHandler +// contactsManager:[Environment getCurrent].contactsManager +// messageSender:[Environment getCurrent].messageSender +// notificationsManager:[Environment getCurrent].notificationsManager +// profileManager:OWSProfileManager.sharedManager]; +// [TextSecureKitEnv setSharedEnv:sharedEnv]; +// +// [[TSStorageManager sharedManager] setupDatabaseWithSafeBlockingMigrations:^{ +// [VersionMigrations runSafeBlockingMigrations]; +// }]; +// [[Environment getCurrent].contactsManager startObserving]; + } + + // MARK: View Lifecycle + override func viewDidLoad() { super.viewDidLoad() diff --git a/SignalShareExtension/SignalShareExtension-Bridging-Header.h b/SignalShareExtension/SignalShareExtension-Bridging-Header.h index 07a0c7ed6..a37721728 100644 --- a/SignalShareExtension/SignalShareExtension-Bridging-Header.h +++ b/SignalShareExtension/SignalShareExtension-Bridging-Header.h @@ -9,6 +9,7 @@ #import "UIFont+OWS.h" #import "UIView+OWS.h" #import +#import #import #import #import diff --git a/SignalShareExtension/utils/ShareAppExtensionContext.m b/SignalShareExtension/utils/ShareAppExtensionContext.m index b430e1dfa..0060385cd 100644 --- a/SignalShareExtension/utils/ShareAppExtensionContext.m +++ b/SignalShareExtension/utils/ShareAppExtensionContext.m @@ -49,6 +49,11 @@ NS_ASSUME_NONNULL_BEGIN OWSFail(@"%@ called %s.", self.logTag, __PRETTY_FUNCTION__); } +- (NSArray *)allMigrations +{ + return @[]; +} + @end NS_ASSUME_NONNULL_END