├── .gitignore ├── LICENSE ├── MessagesHistoryBrowser.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── MessagesHistoryBrowser.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── MessagesHistoryBrowser ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon_128x128.png │ │ ├── Icon_128x128@2x.png │ │ ├── Icon_16x16.png │ │ ├── Icon_16x16@2x.png │ │ ├── Icon_256x256.png │ │ ├── Icon_256x256@2x.png │ │ ├── Icon_32x32.png │ │ ├── Icon_32x32@2x.png │ │ ├── Icon_512x512.png │ │ └── Icon_512x512@2x.png │ ├── Contents.json │ ├── icloud icon 2.imageset │ │ ├── Contents.json │ │ └── icloud icon 2.png │ ├── icloud icon.imageset │ │ ├── Contents.json │ │ └── icloud icon.png │ ├── icloud_images_download.imageset │ │ ├── Contents.json │ │ └── icloud_images_download.jpeg │ └── security_setup.imageset │ │ ├── Contents.json │ │ └── security_setup.jpg ├── AttachmentsCollectionView.swift ├── AttachmentsCollectionViewDelegate.swift ├── AttachmentsCollectionViewItem.swift ├── AttachmentsCollectionViewItem.xib ├── Base.lproj │ └── Main.storyboard ├── Chat.swift ├── ChatAttachment.swift ├── ChatContact.swift ├── ChatItem.swift ├── ChatItemsFetcher.swift ├── ChatListViewController.swift ├── ChatMessage.swift ├── ChatsDatabase.swift ├── ContactTableCellView.swift ├── ContactsMap.swift ├── HTMLExport.swift ├── ImageAttachmentCell.swift ├── Info.plist ├── MOCController.swift ├── MessageFormatter.swift ├── MessagesHistoryBrowser.entitlements ├── MessagesHistoryBrowser.xcdatamodeld │ ├── .xccurrentversion │ └── MessagesHistoryBrowser.xcdatamodel │ │ └── contents ├── RoundImage.swift ├── ViewController.swift ├── ViewControllers │ ├── AboutViewController.swift │ ├── ChatTableViewController.swift │ ├── ImageAttachmentDisplayViewController.swift │ ├── MessagesListViewController.swift │ ├── ShowAppPrivilegesSetupViewController.swift │ └── ShowImagesDownloadViewController.swift ├── dsa_pub.pem ├── messagesStyle.css └── phone country codes.json ├── MessagesHistoryBrowserTests ├── Info.plist └── MessagesHistoryBrowserTests.swift ├── MessagesHistoryBrowserUITests ├── Info.plist └── MessagesHistoryBrowserUITests.swift ├── Podfile ├── Podfile.lock ├── Pods ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj ├── SQLite.swift │ ├── LICENSE.txt │ ├── README.md │ └── Sources │ │ ├── SQLite │ │ ├── Core │ │ │ ├── Blob.swift │ │ │ ├── Connection.swift │ │ │ ├── Errors.swift │ │ │ ├── Statement.swift │ │ │ └── Value.swift │ │ ├── Extensions │ │ │ ├── FTS4.swift │ │ │ ├── FTS5.swift │ │ │ └── RTree.swift │ │ ├── Foundation.swift │ │ ├── Helpers.swift │ │ ├── SQLite.h │ │ └── Typed │ │ │ ├── AggregateFunctions.swift │ │ │ ├── Coding.swift │ │ │ ├── Collation.swift │ │ │ ├── CoreFunctions.swift │ │ │ ├── CustomFunctions.swift │ │ │ ├── DateAndTimeFunctions.swift │ │ │ ├── Expression.swift │ │ │ ├── Operators.swift │ │ │ ├── Query.swift │ │ │ ├── Schema.swift │ │ │ └── Setter.swift │ │ └── SQLiteObjc │ │ ├── SQLiteObjc.m │ │ ├── fts3_tokenizer.h │ │ └── include │ │ └── SQLiteObjc.h ├── Sparkle │ ├── LICENSE │ ├── Sparkle.framework │ │ ├── Headers │ │ ├── Modules │ │ ├── PrivateHeaders │ │ ├── Resources │ │ ├── Sparkle │ │ └── Versions │ │ │ ├── A │ │ │ ├── Headers │ │ │ │ ├── SPUDownloadData.h │ │ │ │ ├── SPUDownloader.h │ │ │ │ ├── SPUDownloaderDelegate.h │ │ │ │ ├── SPUDownloaderProtocol.h │ │ │ │ ├── SPUDownloaderSession.h │ │ │ │ ├── SPUURLRequest.h │ │ │ │ ├── SUAppcast.h │ │ │ │ ├── SUAppcastItem.h │ │ │ │ ├── SUCodeSigningVerifier.h │ │ │ │ ├── SUErrors.h │ │ │ │ ├── SUExport.h │ │ │ │ ├── SUStandardVersionComparator.h │ │ │ │ ├── SUUpdater.h │ │ │ │ ├── SUUpdaterDelegate.h │ │ │ │ ├── SUVersionComparisonProtocol.h │ │ │ │ ├── SUVersionDisplayProtocol.h │ │ │ │ └── Sparkle.h │ │ │ ├── Modules │ │ │ │ └── module.modulemap │ │ │ ├── PrivateHeaders │ │ │ │ └── SUUnarchiver.h │ │ │ ├── Resources │ │ │ │ ├── Autoupdate.app │ │ │ │ │ └── Contents │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ ├── MacOS │ │ │ │ │ │ ├── Autoupdate │ │ │ │ │ │ └── fileop │ │ │ │ │ │ ├── PkgInfo │ │ │ │ │ │ ├── Resources │ │ │ │ │ │ ├── AppIcon.icns │ │ │ │ │ │ ├── Base.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── SUStatus.nib │ │ │ │ │ │ ├── ar.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ca.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── cs.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── da.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── de.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── el.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── es.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── fi.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── fr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── he.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── hr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── hu.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── is.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── it.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ja.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ko.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── nb.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── nl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ro.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ru.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sk.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sv.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── th.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── tr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── uk.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ └── zh_TW.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ └── _CodeSignature │ │ │ │ │ │ └── CodeResources │ │ │ │ ├── Base.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ │ │ ├── keyedobjects-110000.nib │ │ │ │ │ │ └── keyedobjects.nib │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── Info.plist │ │ │ │ ├── ReleaseNotesColorStyle.css │ │ │ │ ├── SUModelTranslation.plist │ │ │ │ ├── SUStatus.nib │ │ │ │ ├── ar.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ca.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── cs.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── da.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── de.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── el.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── en.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── es.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── fi.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── fr.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── he.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── hr.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── hu.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── is.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── it.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ja.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ko.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── nb.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── nl.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pl.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ro.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ru.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sk.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sl.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sv.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── th.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── tr.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── uk.lproj │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ │ └── zh_TW.lproj │ │ │ │ │ ├── SUAutomaticUpdateAlert.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ ├── SUUpdatePermissionPrompt.strings │ │ │ │ │ └── Sparkle.strings │ │ │ ├── Sparkle │ │ │ └── _CodeSignature │ │ │ │ └── CodeResources │ │ │ └── Current │ └── bin │ │ ├── BinaryDelta │ │ ├── generate_appcast │ │ ├── generate_keys │ │ ├── old_dsa_scripts │ │ ├── generate_dsa_keys_macos_10.12_only │ │ └── sign_update │ │ └── sign_update └── Target Support Files │ ├── Pods-MessagesHistoryBrowser │ ├── Pods-MessagesHistoryBrowser-Info.plist │ ├── Pods-MessagesHistoryBrowser-acknowledgements.markdown │ ├── Pods-MessagesHistoryBrowser-acknowledgements.plist │ ├── Pods-MessagesHistoryBrowser-dummy.m │ ├── Pods-MessagesHistoryBrowser-frameworks.sh │ ├── Pods-MessagesHistoryBrowser-umbrella.h │ ├── Pods-MessagesHistoryBrowser.debug.xcconfig │ ├── Pods-MessagesHistoryBrowser.modulemap │ └── Pods-MessagesHistoryBrowser.release.xcconfig │ ├── SQLite.swift │ ├── SQLite.swift-Info.plist │ ├── SQLite.swift-dummy.m │ ├── SQLite.swift-prefix.pch │ ├── SQLite.swift-umbrella.h │ ├── SQLite.swift.debug.xcconfig │ ├── SQLite.swift.modulemap │ └── SQLite.swift.release.xcconfig │ └── Sparkle │ ├── Sparkle-copy-dsyms.sh │ ├── Sparkle.debug.xcconfig │ └── Sparkle.release.xcconfig └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | Cartfile.resolved 2 | Carthage 3 | MessagesHistoryBrowser.xcodeproj/xcuserdata 4 | MessagesHistoryBrowser.xcodeproj/project.xcworkspace/xcuserdata 5 | xcuserdata 6 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "Icon_16x16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "Icon_16x16@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "Icon_32x32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "Icon_32x32@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "Icon_128x128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "Icon_128x128@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "Icon_256x256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "Icon_256x256@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "Icon_512x512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "Icon_512x512@2x.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_128x128.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_128x128@2x.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_16x16.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_16x16@2x.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_256x256.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_256x256@2x.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_32x32.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_32x32@2x.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_512x512.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/AppIcon.appiconset/Icon_512x512@2x.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/icloud icon 2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icloud icon 2.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/icloud icon 2.imageset/icloud icon 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/icloud icon 2.imageset/icloud icon 2.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/icloud icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icloud icon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/icloud icon.imageset/icloud icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/icloud icon.imageset/icloud icon.png -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/icloud_images_download.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icloud_images_download.jpeg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/icloud_images_download.imageset/icloud_images_download.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/icloud_images_download.imageset/icloud_images_download.jpeg -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/security_setup.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "security_setup.jpg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Assets.xcassets/security_setup.imageset/security_setup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/MessagesHistoryBrowser/Assets.xcassets/security_setup.imageset/security_setup.jpg -------------------------------------------------------------------------------- /MessagesHistoryBrowser/AttachmentsCollectionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AttachmentsCollectionView.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 17/12/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class AttachmentsCollectionView: NSCollectionView { 12 | 13 | // display the selected image on spacebar 14 | // 15 | override func keyDown(with theEvent: NSEvent) { 16 | if theEvent.characters == " " { 17 | if selectionIndexPaths.count == 1 { 18 | if let attachmentsViewDelegate = delegate as? AttachmentsCollectionViewDelegate { 19 | attachmentsViewDelegate.displayAttachmentAtIndexPath(selectionIndexPaths.first!) 20 | } 21 | } 22 | } else { 23 | super.keyDown(with: theEvent) 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/AttachmentsCollectionViewDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AttachmentsCollectionViewDelegate.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 17/12/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | protocol AttachmentsCollectionViewDelegate: NSCollectionViewDelegate { 12 | 13 | func displayAttachmentAtIndexPath(_ indexPath:IndexPath) -> Void 14 | func showAttachmentInFinderAtIndexPath(_ indexPath:IndexPath) -> Void 15 | 16 | } 17 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/AttachmentsCollectionViewItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AttachmentsCollectionViewItem.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 11/10/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class AttachmentsCollectionViewItem: NSCollectionViewItem { 12 | 13 | override var isSelected:Bool { 14 | didSet { 15 | if isSelected { 16 | view.layer?.borderColor = NSColor.selectedMenuItemColor.cgColor 17 | view.layer?.borderWidth = 4.0 18 | } else { 19 | view.layer?.borderColor = NSColor.clear.cgColor 20 | view.layer?.borderWidth = 0.0 21 | } 22 | } 23 | } 24 | 25 | override func viewDidLoad() { 26 | super.viewDidLoad() 27 | // Do view setup here. 28 | 29 | view.layer?.cornerRadius = 5.0 30 | } 31 | 32 | override func prepareForReuse() { 33 | imageView?.image = NSImage(named: "icloud icon") 34 | textField?.stringValue = "" 35 | } 36 | 37 | @IBAction func showInFinder(_ sender:AnyObject) 38 | { 39 | if let delegate = collectionView?.delegate as? AttachmentsCollectionViewDelegate { 40 | NSLog("showInFinder") 41 | if let thisItemIndexPath = collectionView?.indexPath(for: self) { 42 | delegate.showAttachmentInFinderAtIndexPath(thisItemIndexPath) 43 | } 44 | } 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/AttachmentsCollectionViewItem.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Chat.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Chat.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 27/09/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import CoreData 11 | 12 | class Chat : NSManagedObject { 13 | 14 | @NSManaged var contact:ChatContact 15 | 16 | @NSManaged var serviceName:String 17 | 18 | @NSManaged var guid:String 19 | 20 | @NSManaged var rowID:NSNumber 21 | 22 | @NSManaged var messages:NSSet 23 | 24 | @NSManaged var attachments:NSSet 25 | 26 | 27 | convenience init(managedObjectContext:NSManagedObjectContext, withContact aContact:ChatContact, withServiceName aServiceName:String, withGUID aGuid:String, andRowID aRowID:Int) { 28 | 29 | let entityDescription = NSEntityDescription.entity(forEntityName: "Chat", in: managedObjectContext) 30 | self.init(entity: entityDescription!, insertInto: managedObjectContext) 31 | 32 | contact = aContact 33 | serviceName = aServiceName 34 | guid = aGuid 35 | rowID = NSNumber(value:aRowID) 36 | } 37 | 38 | class func numberOfChatsInContext(_ managedObjectContext:NSManagedObjectContext) -> Int { 39 | let fetchRequest = NSFetchRequest(entityName: "Chat") 40 | 41 | var res:Int = 0 42 | 43 | managedObjectContext.performAndWait { () -> Void in 44 | res = try! managedObjectContext.count(for: fetchRequest) 45 | } 46 | 47 | return res 48 | 49 | } 50 | 51 | class func allChatsInContext(_ managedObjectContext:NSManagedObjectContext) -> [Chat] { 52 | let fetchRequest = NSFetchRequest(entityName: "Chat") 53 | 54 | var allChats = [Chat]() 55 | 56 | managedObjectContext.performAndWait { () -> Void in 57 | do { 58 | let results = try managedObjectContext.fetch(fetchRequest) 59 | allChats = results as! [Chat] 60 | } catch let error as NSError { 61 | print("\(#function) : Could not fetch \(error), \(error.userInfo)") 62 | } 63 | } 64 | 65 | return allChats 66 | } 67 | 68 | 69 | func toJSON() -> Data { 70 | 71 | let sortDescriptor = NSSortDescriptor(key: "index", ascending: true) { (anyA, anyB) -> ComparisonResult in 72 | let indexA = anyA as! Int64 73 | let indexB = anyB as! Int64 74 | 75 | if indexA < indexB { 76 | return ComparisonResult.orderedAscending 77 | } 78 | if indexA == indexB { 79 | return ComparisonResult.orderedSame 80 | } 81 | 82 | return ComparisonResult.orderedDescending 83 | } 84 | 85 | let sortedMessages = messages.sortedArray(using: [sortDescriptor]) 86 | 87 | let chatAsDict:[String:Any] = ["contact" : contact.name, 88 | "messages" : sortedMessages] 89 | 90 | return try! JSONSerialization.data(withJSONObject: chatAsDict, options: .prettyPrinted) 91 | 92 | } 93 | 94 | } 95 | 96 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ChatAttachment.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatAttachment.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 10/10/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import CoreData 11 | 12 | class ChatAttachment: ChatItem { 13 | 14 | @NSManaged var fileName:String? 15 | @NSManaged var chat:Chat 16 | @NSManaged var contact:ChatContact 17 | 18 | var standardizedFileName:String? { 19 | return fileName?.standardizingPath() 20 | } 21 | 22 | var associatedRange:NSRange? 23 | 24 | convenience init(managedObjectContext:NSManagedObjectContext, withFileName aFileName:String, withDate aDate:Date, inChat aChat:Chat) { 25 | 26 | let entityDescription = NSEntityDescription.entity(forEntityName: "Attachment", in: managedObjectContext) 27 | self.init(entityDescription: entityDescription!, managedObjectContext: managedObjectContext, withDate: aDate) 28 | 29 | fileName = aFileName 30 | chat = aChat 31 | contact = aChat.contact 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ChatContact.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatContact.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 10/10/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ChatContact: NSManagedObject { 12 | 13 | @NSManaged var identifier:String 14 | @NSManaged var name:String 15 | @NSManaged var known:Bool 16 | 17 | @NSManaged var chats:NSSet 18 | @NSManaged var messages:NSSet 19 | @NSManaged var attachments:NSSet 20 | 21 | static let sortDescriptor = NSSortDescriptor(key: "name", ascending: true) 22 | 23 | 24 | convenience init(managedObjectContext:NSManagedObjectContext, withName aName:String, withIdentifier anIdentifier:String) { 25 | 26 | let entityDescription = NSEntityDescription.entity(forEntityName: "Contact", in: managedObjectContext) 27 | self.init(entity: entityDescription!, insertInto: managedObjectContext) 28 | 29 | name = aName 30 | identifier = anIdentifier 31 | } 32 | 33 | // class func allContactsInContext(managedObjectContext:NSManagedObjectContext) -> [ChatContact] { 34 | // 35 | // var allContacts = [ChatContact]() 36 | // 37 | // do { 38 | // let results = try managedObjectContext.executeFetchRequest(fetchRequest) 39 | // allContacts = results as! [ChatContact] 40 | // } catch let error as NSError { 41 | // print("\(__FUNCTION__) : Could not fetch \(error), \(error.userInfo)") 42 | // } 43 | // 44 | // return allContacts 45 | // } 46 | 47 | class func allKnownContacts(_ managedObjectContext:NSManagedObjectContext) -> [ChatContact] { 48 | 49 | return allContactsWithPredicate(managedObjectContext, predicate:NSPredicate(format: "known == YES && messages.@count > 0")) 50 | } 51 | 52 | class func allUnknownContacts(_ managedObjectContext:NSManagedObjectContext) -> [ChatContact] { 53 | 54 | return allContactsWithPredicate(managedObjectContext, predicate:NSPredicate(format: "known == NO && messages.@count > 0")) 55 | } 56 | 57 | class func allContactsWithPredicate(_ managedObjectContext:NSManagedObjectContext, predicate:NSPredicate? = nil) -> [ChatContact] { 58 | 59 | var allContacts = [ChatContact]() 60 | 61 | managedObjectContext.performAndWait { () -> Void in 62 | 63 | do { 64 | let contactFetchRequest = ChatContact.fetchRequest() // NSFetchRequest(entityName: "Contact") 65 | contactFetchRequest.predicate = predicate 66 | contactFetchRequest.sortDescriptors = [ChatContact.sortDescriptor] 67 | 68 | let results = try managedObjectContext.fetch(contactFetchRequest) 69 | allContacts = results as! [ChatContact] 70 | } catch let error as NSError { 71 | print("\(#function) : Could not fetch \(error), \(error.userInfo)") 72 | } 73 | } 74 | 75 | return allContacts 76 | } 77 | 78 | class func allContacts(_ managedObjectContext:NSManagedObjectContext) -> [ChatContact] { 79 | return allContactsWithPredicate(managedObjectContext) 80 | } 81 | 82 | class func contactIn(_ managedObjectContext:NSManagedObjectContext, named name:String, withIdentifier identifier:String) -> ChatContact { 83 | let contactNamedFetchRequest = ChatContact.fetchRequest() // NSFetchRequest(entityName: "Contact") 84 | let namePredicate = NSPredicate(format: "name == %@", name) 85 | contactNamedFetchRequest.predicate = namePredicate 86 | 87 | var res:ChatContact? 88 | 89 | managedObjectContext.performAndWait { () -> Void in 90 | 91 | do { 92 | let r = try managedObjectContext.fetch(contactNamedFetchRequest) 93 | let foundContacts = r as! [ChatContact] 94 | 95 | if foundContacts.count > 0 { 96 | res = foundContacts[0] 97 | } else { 98 | res = ChatContact(managedObjectContext: managedObjectContext, withName: name, withIdentifier: identifier) 99 | } 100 | } catch let error as NSError { 101 | print("\(#function) : Could not fetch \(error), \(error.userInfo)") 102 | 103 | res = ChatContact(managedObjectContext: managedObjectContext, withName: name, withIdentifier: identifier) 104 | } 105 | } 106 | 107 | return res! 108 | } 109 | 110 | } 111 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ChatItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatItem.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 02/11/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import CoreData 10 | 11 | class ChatItem: NSManagedObject { 12 | 13 | @NSManaged var date:Date 14 | @NSManaged var index:Int64 // used when searching a term in chats, to fetch surrounding messages for a message matching the search term 15 | @NSManaged var isFromMe:Bool 16 | 17 | convenience init(entityDescription:NSEntityDescription, managedObjectContext:NSManagedObjectContext, withDate aDate:Date) { 18 | 19 | self.init(entity: entityDescription, insertInto: managedObjectContext) 20 | 21 | date = aDate 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ChatMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatMessage.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 04/10/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import CoreData 11 | 12 | class ChatMessage : ChatItem { 13 | 14 | static let EntityName = "Message" 15 | 16 | static var dateFormatter:DateFormatter = { 17 | let RFC3339DateFormatter = DateFormatter() 18 | 19 | RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX") 20 | RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 21 | RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0) 22 | return RFC3339DateFormatter 23 | }() 24 | 25 | enum Attributes:String { 26 | case content = "content" 27 | case date = "date" 28 | case chat = "chat" 29 | case isFromMe = "isFromMe" 30 | } 31 | 32 | @NSManaged var content:String? 33 | 34 | @NSManaged var chat:Chat 35 | @NSManaged var contact:ChatContact 36 | 37 | convenience init(managedObjectContext:NSManagedObjectContext, withMessage aMessage:String, withDate aDate:Date, inChat aChat:Chat) { 38 | 39 | let entityDescription = NSEntityDescription.entity(forEntityName: ChatMessage.EntityName, in: managedObjectContext) 40 | self.init(entityDescription: entityDescription!, managedObjectContext: managedObjectContext, withDate:aDate) 41 | 42 | content = aMessage 43 | chat = aChat 44 | contact = aChat.contact 45 | } 46 | 47 | func toJSON() -> Data { 48 | let objAsDict = toJSONConvertibleDict() 49 | 50 | return try! JSONSerialization.data(withJSONObject: objAsDict, options: .prettyPrinted) 51 | } 52 | 53 | func toJSONConvertibleDict() -> [String:Any] { 54 | 55 | return [ "date" : ChatMessage.dateFormatter.string(from: date), 56 | "me" : isFromMe, 57 | "content" : content ?? ""] as [String : Any] 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ContactTableCellView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContactTableCellView.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 14/12/2018. 6 | // Copyright © 2018 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ContactTableCellView: NSTableCellView { 12 | 13 | @IBOutlet weak var contactInitialsLabel: NSTextField! 14 | 15 | var circleLayer:CAShapeLayer! 16 | 17 | override func awakeFromNib() { 18 | wantsLayer = true 19 | // layer?.backgroundColor = NSColor.blue.cgColor 20 | circleLayer = CAShapeLayer() 21 | layer?.addSublayer(circleLayer) 22 | } 23 | 24 | override func resizeSubviews(withOldSize oldSize: NSSize) { 25 | super.resizeSubviews(withOldSize: oldSize) 26 | updateCircleLayer() 27 | } 28 | 29 | func updateCircleLayer() { 30 | 31 | // let squareSize = max(contactInitialsLabel.bounds.size.width, contactInitialsLabel.bounds.size.height) 32 | 33 | // create a circle around the imageView 34 | // 35 | let squareSize = max(imageView!.bounds.size.width, imageView!.bounds.size.height) 36 | let squareBounds = NSRect(origin: CGPoint.zero, size: CGSize(width: squareSize, height: squareSize)) 37 | 38 | circleLayer.path = CGPath(ellipseIn: squareBounds, transform: nil) 39 | circleLayer.position = CGPoint(x:imageView!.frame.origin.x, y:(frame.size.height - squareSize) / 2.0) 40 | circleLayer.lineWidth = 2.0 41 | circleLayer.strokeColor = NSColor.secondaryLabelColor.cgColor 42 | circleLayer.fillColor = CGColor.clear 43 | circleLayer.zPosition = 10.0 44 | } 45 | 46 | func showLabel() { 47 | contactInitialsLabel.isHidden = false 48 | circleLayer.isHidden = false 49 | imageView?.isHidden = true 50 | } 51 | 52 | func showImage() { 53 | contactInitialsLabel.isHidden = true 54 | circleLayer.isHidden = true 55 | imageView?.isHidden = false 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/HTMLExport.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HTMLExport.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 22/01/2019. 6 | // Copyright © 2019 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Cocoa 11 | 12 | protocol HTMLExportable { 13 | func htmlString() -> String 14 | } 15 | 16 | struct HTMLDateFormatter { 17 | var dateFormatter = DateFormatter() 18 | 19 | static var shared:HTMLDateFormatter = HTMLDateFormatter() 20 | 21 | init() { 22 | dateFormatter.dateStyle = .medium 23 | dateFormatter.timeStyle = .medium 24 | } 25 | } 26 | 27 | extension ChatMessage : HTMLExportable { 28 | 29 | func htmlString() -> String { 30 | 31 | let nonEmptyContent = content ?? "" 32 | 33 | let messageSpanClass = isFromMe ? "messageTextFromMe" : "messageText" 34 | 35 | let dateSpanClass = isFromMe ? "dateFromMe" : "date" 36 | 37 | let res = "
\(HTMLDateFormatter.shared.dateFormatter.string(from: date)) : \(nonEmptyContent)
\n" 38 | 39 | return res 40 | } 41 | } 42 | 43 | extension ChatAttachment : HTMLExportable { 44 | 45 | // name of folder in which attachments will be stored in HTML export 46 | // 47 | static let attachmentsFolderName = "attachments" 48 | 49 | func htmlString() -> String { 50 | 51 | let res:String 52 | 53 | let dateSpanClass = isFromMe ? "dateFromMe" : "date" 54 | 55 | if let fileName = standardizedFileName { 56 | 57 | let attachmentFileURL = URL(fileURLWithPath: fileName) 58 | 59 | let exportedAttachmentPath = ChatAttachment.attachmentsFolderName + "/" + attachmentFileURL.lastPathComponent 60 | 61 | if isImage() { 62 | res = "
\(HTMLDateFormatter.shared.dateFormatter.string(from: date))
\n" 63 | } else { 64 | res = "
\(HTMLDateFormatter.shared.dateFormatter.string(from: date))\(exportedAttachmentPath)
\n" 65 | } 66 | 67 | } else { 68 | 69 | res = "
\(HTMLDateFormatter.shared.dateFormatter.string(from: date)) : empty attachment
\n" 70 | 71 | } 72 | 73 | return res 74 | } 75 | 76 | func isImage() -> Bool { 77 | guard let fileName = standardizedFileName else { return false } 78 | 79 | do { 80 | let type = try NSWorkspace.shared.type(ofFile: fileName) 81 | let res = NSWorkspace.shared.type(type, conformsToType: String(kUTTypeImage)) 82 | NSLog("isImage : \(fileName) - \(res)") 83 | return res 84 | } catch let error { 85 | NSLog("isImage : error \(error.localizedDescription)") 86 | return false 87 | } 88 | 89 | } 90 | 91 | } 92 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ImageAttachmentCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageAttachmentCell.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 11/11/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | // taken from http://ossh.com.au/design-and-technology/software-development/implementing-rich-text-with-images-on-os-x-and-ios/ 12 | // 13 | 14 | class ImageAttachmentCell: NSTextAttachmentCell { 15 | 16 | override func cellFrame(for textContainer: NSTextContainer, proposedLineFragment lineFrag: NSRect, glyphPosition position: NSPoint, characterIndex charIndex: Int) -> NSRect 17 | { 18 | let width = lineFrag.size.width 19 | 20 | let imageRect = scaleImageToWidth(width) 21 | 22 | return imageRect 23 | } 24 | 25 | func scaleImageToWidth(_ width:CGFloat) -> NSRect 26 | { 27 | guard let image = self.image else { return NSZeroRect } 28 | 29 | var scalingFactor:CGFloat = 1.0 30 | 31 | let imageSize = image.size 32 | 33 | if (width < imageSize.width) { 34 | scalingFactor = (width * 0.9) / imageSize.width 35 | } 36 | 37 | let rect = NSRect(x:0, y:0, width:imageSize.width * scalingFactor, height:imageSize.height * scalingFactor) 38 | 39 | return rect; 40 | 41 | } 42 | 43 | override func draw(withFrame cellFrame: NSRect, in controlView: NSView?) 44 | { 45 | image?.draw(in: cellFrame, from: NSZeroRect, operation: .sourceOver, fraction: 1.0, respectFlipped: true, hints: nil) 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.9 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.9 25 | LSApplicationCategoryType 26 | public.app-category.utilities 27 | LSMinimumSystemVersion 28 | $(MACOSX_DEPLOYMENT_TARGET) 29 | NSContactsUsageDescription 30 | This lets the app display contact names instead of phone numbers for chats with your contacts 31 | NSHumanReadableCopyright 32 | Copyright © 2015 Guillaume Laurent. All rights reserved. 33 | NSMainStoryboardFile 34 | Main 35 | NSPrincipalClass 36 | NSApplication 37 | SUFeedURL 38 | https://telegraph-road.org/MessagesHistoryBrowser/appcast.xml 39 | SUPublicDSAKeyFile 40 | dsa_pub.pem 41 | 42 | 43 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/MOCController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MOCController.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 26/12/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class MOCController: NSObject { 12 | 13 | public static let sharedInstance = MOCController() 14 | 15 | var managedObjectContext:NSManagedObjectContext { 16 | let appDelegate = NSApp.delegate as! AppDelegate 17 | return appDelegate.persistentContainer.viewContext 18 | } 19 | 20 | override init() { 21 | } 22 | 23 | func save() 24 | { 25 | let appDelegate = NSApp.delegate as! AppDelegate 26 | appDelegate.saveAction(self) 27 | } 28 | 29 | func clearAllCoreData() 30 | { 31 | // let allContacts = ChatContact.allContacts() 32 | // 33 | // for contact in allContacts { 34 | // managedObjectContext.delete(contact) 35 | // } 36 | 37 | let contactsFetchRequest = ChatContact.fetchRequest() // NSFetchRequest(entityName: "Contact") 38 | 39 | let deleteContactsRequest = NSBatchDeleteRequest(fetchRequest: contactsFetchRequest) 40 | 41 | do { 42 | let context = workerContext() 43 | try context.execute(deleteContactsRequest) 44 | try context.save() 45 | } catch let error { 46 | NSLog("ERROR when deleting contacts : \(error)") 47 | } 48 | 49 | } 50 | 51 | func workerContext() -> NSManagedObjectContext 52 | { 53 | let appDelegate = NSApp.delegate as! AppDelegate 54 | 55 | let worker = appDelegate.persistentContainer.newBackgroundContext() 56 | 57 | return worker 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/MessagesHistoryBrowser.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.bookmarks.app-scope 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | com.apple.security.network.client 12 | 13 | com.apple.security.personal-information.addressbook 14 | 15 | com.apple.security.print 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/MessagesHistoryBrowser.xcdatamodeld/.xccurrentversion: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | _XCCurrentVersionName 6 | MessagesHistoryBrowser.xcdatamodel 7 | 8 | 9 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/MessagesHistoryBrowser.xcdatamodeld/MessagesHistoryBrowser.xcdatamodel/contents: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/RoundImage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoundImage.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 16/01/16. 6 | // Copyright © 2016 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | 12 | // Copied from http://stackoverflow.com/a/27157566/1081361 13 | 14 | func roundCorners(_ image: NSImage) -> NSImage 15 | { 16 | let existing = image 17 | let esize = existing.size 18 | 19 | let sideLength = min(esize.width, esize.height) // make sure the resulting image is an actual circle - doesn't always look good if original image isn't properly centered 20 | 21 | let newSize = NSSize(width:sideLength, height:sideLength) 22 | let composedImage = NSImage(size: newSize) 23 | 24 | composedImage.lockFocus() 25 | let ctx = NSGraphicsContext.current 26 | ctx?.imageInterpolation = NSImageInterpolation.high 27 | 28 | let imageFrame = NSRect(x: 0, y: 0, width: sideLength, height: sideLength) 29 | let clipPath = NSBezierPath(ovalIn: imageFrame) 30 | clipPath.windingRule = NSBezierPath.WindingRule.evenOdd 31 | clipPath.addClip() 32 | 33 | let rect = NSRect(x: 0, y: 0, width: newSize.width, height: newSize.height) 34 | image.draw(at: NSZeroPoint, from: rect, operation: NSCompositingOperation.sourceOver, fraction: 1) 35 | composedImage.unlockFocus() 36 | 37 | return composedImage 38 | } 39 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 27/09/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ViewController: NSViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override var representedObject: Any? { 20 | didSet { 21 | // Update the view, if already loaded. 22 | } 23 | } 24 | 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ViewControllers/AboutViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AboutViewController.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 03/12/2018. 6 | // Copyright © 2018 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class AboutViewController: NSViewController { 12 | 13 | @IBOutlet weak var versionNumberTextField: NSTextField! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | // Do view setup here. 18 | 19 | if let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String { 20 | 21 | versionNumberTextField.stringValue = versionNumber 22 | } 23 | 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ViewControllers/ImageAttachmentDisplayViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageAttachmentDisplayViewController.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 20/12/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ImageAttachmentDisplayViewController: NSViewController { 12 | 13 | @IBOutlet weak var imageView: NSImageView! 14 | 15 | var halfScreenSize:NSSize! 16 | 17 | let windowTopBarHeight:CGFloat = 22.0 18 | 19 | let maxSizeScreenRatio:CGFloat = 4.0 // images won't be displayed larger than (screen size) * ratio 20 | 21 | var image:NSImage? { 22 | set { 23 | 24 | if let newImage = newValue { 25 | let newImageSize = newImage.size 26 | let mainScreenSize = NSScreen.main!.frame.size 27 | 28 | var newSize:NSSize 29 | 30 | if newImageSize.height > (mainScreenSize.height / maxSizeScreenRatio) || newImageSize.width > (mainScreenSize.width / maxSizeScreenRatio) { 31 | 32 | newSize = size(newImageSize, inBounds:halfScreenSize) 33 | // NSLog("initial size : \(newImage.size) - scaled down newSize : \(newSize)") 34 | 35 | // newSize = NSSize(width: mainScreenSize.width / 2.0, height: mainScreenSize.height / 2.0) 36 | } else { 37 | newSize = NSSize(width: newImageSize.width, height: newImageSize.height + windowTopBarHeight) // window top bar 38 | } 39 | 40 | var windowFrame = view.window!.frame 41 | windowFrame.size = newSize 42 | // NSLog("initial size : \(newImage.size) - scaled down newSize : \(newSize)") 43 | 44 | view.window?.setFrame(windowFrame, display: true, animate: true) 45 | 46 | view.needsLayout = true 47 | 48 | imageView.image = newImage 49 | } 50 | } 51 | 52 | get { 53 | return imageView.image 54 | } 55 | } 56 | 57 | override func viewDidLoad() { 58 | super.viewDidLoad() 59 | // Do view setup here. 60 | 61 | let mainScreenSize = NSScreen.main!.frame.size 62 | 63 | halfScreenSize = NSSize(width: mainScreenSize.width / maxSizeScreenRatio, height: mainScreenSize.height / maxSizeScreenRatio) 64 | 65 | view.window?.maxSize = NSSize(width: mainScreenSize.width / maxSizeScreenRatio, height: mainScreenSize.height / maxSizeScreenRatio) 66 | } 67 | 68 | func size(_ aSize:NSSize, inBounds bounds:NSSize) -> NSSize 69 | { 70 | let ratio = aSize.width / aSize.height 71 | 72 | let newWidthCandidate = bounds.height * ratio 73 | let newHeightCandidate = bounds.width / ratio 74 | 75 | let newHeight = newWidthCandidate / ratio 76 | 77 | if newHeight < bounds.height { 78 | return NSSize(width: newWidthCandidate, height: newHeight + windowTopBarHeight) 79 | } else { 80 | return NSSize(width: newHeightCandidate * ratio, height: newHeightCandidate + windowTopBarHeight) 81 | } 82 | } 83 | 84 | } 85 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ViewControllers/ShowAppPrivilegesSetupViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShowAppPrivilegesSetupViewController.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 04/09/2018. 6 | // Copyright © 2018 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ShowAppPrivilegesSetupViewController: NSViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do view setup here. 16 | } 17 | 18 | @IBAction func quitButtonClicked(_ sender: Any) { 19 | view.window?.sheetParent?.endSheet(view.window!) 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/ViewControllers/ShowImagesDownloadViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShowImagesDownloadViewController.swift 3 | // MessagesHistoryBrowser 4 | // 5 | // Created by Guillaume Laurent on 05/09/2018. 6 | // Copyright © 2018 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ShowImagesDownloadViewController: NSViewController { 12 | 13 | static let ShowImagesDownloadUserDefaultsKey = "ShowImagesDownloadUserDefaultsKey" 14 | 15 | @IBOutlet weak var dontShowAgainCheckBox: NSButton! 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | // Do view setup here. 20 | } 21 | 22 | @IBAction func okButtonClicked(_ sender: Any) { 23 | 24 | if dontShowAgainCheckBox.state == .on { 25 | UserDefaults.standard.set(true, forKey: ShowImagesDownloadViewController.ShowImagesDownloadUserDefaultsKey) 26 | } 27 | 28 | view.window?.sheetParent?.endSheet(view.window!) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/dsa_pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIGPDCCBC4GByqGSM44BAEwggQhAoICAQDCdXxyLsquIEldCYKzQJrMho+Q6aCx 3 | 9l1k0pFMNI+YNBnuyj9kuSo9n4mtJSR84TF/5+rpKqEZdNlr1eOzFYLUao5lTArk 4 | e522No9aba/XfnDWfuh2YeAHUNYipkd5F/ZNmnZVHkc4tZ6O+LeTM332mLuDPoUI 5 | wwwtq1iir2WjhuaG6C/HdfsZQNgkjQ+RYSY2ky4cpdoxJT8BbyAzeV8owN4/18PD 6 | T1aPrMp3m8PqsuHNSGElnJAg2DPljvDq0R5J7ktz+2hXDfw5xPCQWnS0YM5sb9Sg 7 | 5EBKuBw+Nu9JQjMCBbRaIvghEpU4vaYZIB4dT2owyRTX2FsEsoZit4EkhV/gtePB 8 | aNg483u8sATIRE5bSW0bPkYK/oY7I1tP1wVh3Nll7vNUor1r8Z/DGJpOBkg/b36J 9 | OLXKxBwD2ujlJ6cPpREtNxVnSvftGaGdwGyT/w/B1iqP0AkcY2Q6E09+Td1CSfKH 10 | 0EG3wp6GI8UXlEED4wacFqi3jmwefukwP5fgI7JmFsR/PnV+LOm0KOYcmXniYImh 11 | bSyfm1XkR+qQl9c1hPXuAgDwu27uXVQlkU7YNEdCZsESnW5/0YcSaMsnrzWgN2Gm 12 | gCI3bzLy/iKB4opSUsB3Nq4DagpGmFT0PW6zIGtJTy5/gOYTFF0OCi2sIenbPzj/ 13 | ksauTB35KhI8EwIVAJPzpzRoplJT6p7SGPYiEnYKMppRAoICAQCWDnNBs7x+McpI 14 | 6vKOviFupioPbzstPFK033oyWKJPjkHDAQvdOZ+nxEvjLD+/CWrF+U4tkW5U/i9X 15 | NhGJTIq34qazgn3iOL2BnmOY8XVJrZdAU9FoOYe/uW5NiixpQUfcvolB7Eofepv+ 16 | 0EahHnVlFqmKXA+BAqvTWzoRFv+DjaEZd64iQAx3sSzi+OJgfe0UneLPJNMrm1SB 17 | +7V9By1fVEqxll2kvxIx/vBGleba2yR2xBM3pLHxa5r5lgMH+jftJo9JIksnjTIH 18 | kW0Y39lyddJxZmRoqIZfuaPy1sVxIcupWIJg+vLnwzCpUFBYqLkRgjbqvU2QDV1+ 19 | NZjXCqBmjCreA/w3D01ZuqmjLSTW/vmc2PHrKeg42JhgS5nln/JB56FjgU1r4PNt 20 | 6yaN3R05nwFCjg49jwU44cgyKaN7cg2Q8CYv2PZo+uj/75tLxow/Rv/RkQxzMiQa 21 | RqjJy6EHVYZDMATy2s4ERpCx741HXL/IONleW9N4BxcTB2JfCpFQrjWAkr2AMH2e 22 | 9JkvyYq/gzecs+lF2TLtDEU5lJ2zgVrEQwoTomOL1lByQyhBMM+TNIF3wBWBqQhM 23 | o/kGVJO77hieJdkANt+bDBHYBNtBVBS/dbIX6r6ON4Vw6PE+yw/52jLjJEflfmKN 24 | uS9Sy77jghWZiHf/8eHAP7mO2q+oUgOCAgYAAoICAQCH7OTADedC6H9nsAqlOR2G 25 | CrgHSERU7R5nDkTBYVhm3qhCA9CR5QG8kvOow6JutdbaQCc/xAWwwWGfT/+5lQ6R 26 | fuLyrKUCJd69U7iKQMVJhPi/p6PNOJObbK8bsPPXv8rgscscnUqXaPb9IXK6HmlJ 27 | Ovc3flyj7bb6tcW6gL903IVh1GmiX/tgU+5jvPhvP/NJLHXrv5rZ5/Ax/+yAx/vt 28 | yUJ43QL7YBYil++japMq4nKajX4Qb3yM0eFDnWDnOYzppsj5oEcbx7Ue/vsUHihg 29 | JNLquPY7kTfby5JKFY/rBhFSE35lPPTNNJkWR+EGx7nt7RgWoBHhK8JPqmDACLOB 30 | mBIglwGq+JzbJX2Krni+jMeAm9Qh+VYZTKNEkuxYXglA9QVah/wvyZnL/yHFElpj 31 | AAbaJnS698G+WOamobJEi5DkEzXFmSL7SoXhOVrzgu9x9jhPgKyDdPQGIWXDw+ow 32 | ydYurV3l4LkfjN2k3fGY35t+Y25RECjc72omzVlxKhkNG8wmTwIRnqj3Y8gs+f6S 33 | Zs208xuAKkgpkrmImRedOyzHwRMOU2psM7IGdrT2sYptvG/y7ORDpxHQdnWpGu7T 34 | lckZ5CoV2QLLHp4jKx6uiBtIi25GSblon2H/GUajO8WF7jJ8x5Kav3qcPXjqD2rj 35 | QPtgAqgAKOlDvE9z6yw5XQ== 36 | -----END PUBLIC KEY----- 37 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/messagesStyle.css: -------------------------------------------------------------------------------- 1 | body { 2 | font: "Arial", sans-serif; 3 | } 4 | 5 | .message { 6 | text-align: left; 7 | } 8 | 9 | .date, .dateFromMe { 10 | color: grey; 11 | } 12 | 13 | .messageText { 14 | color: black; 15 | } 16 | 17 | .messageTextFromMe { 18 | color: darkgrey; 19 | } 20 | 21 | .image { 22 | 23 | } 24 | 25 | .attachment { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /MessagesHistoryBrowser/phone country codes.json: -------------------------------------------------------------------------------- 1 | {"BD": "880", "BE": "32", "BF": "226", "BG": "359", "BA": "387", "BB": "+1-246", "WF": "681", "BL": "590", "BM": "+1-441", "BN": "673", "BO": "591", "BH": "973", "BI": "257", "BJ": "229", "BT": "975", "JM": "+1-876", "BV": "", "BW": "267", "WS": "685", "BQ": "599", "BR": "55", "BS": "+1-242", "JE": "+44-1534", "BY": "375", "BZ": "501", "RU": "7", "RW": "250", "RS": "381", "TL": "670", "RE": "262", "TM": "993", "TJ": "992", "RO": "40", "TK": "690", "GW": "245", "GU": "+1-671", "GT": "502", "GS": "", "GR": "30", "GQ": "240", "GP": "590", "JP": "81", "GY": "592", "GG": "+44-1481", "GF": "594", "GE": "995", "GD": "+1-473", "GB": "44", "GA": "241", "SV": "503", "GN": "224", "GM": "220", "GL": "299", "GI": "350", "GH": "233", "OM": "968", "TN": "216", "JO": "962", "HR": "385", "HT": "509", "HU": "36", "HK": "852", "HN": "504", "HM": " ", "VE": "58", "PR": "+1-787 and 1-939", "PS": "970", "PW": "680", "PT": "351", "SJ": "47", "PY": "595", "IQ": "964", "PA": "507", "PF": "689", "PG": "675", "PE": "51", "PK": "92", "PH": "63", "PN": "870", "PL": "48", "PM": "508", "ZM": "260", "EH": "212", "EE": "372", "EG": "20", "ZA": "27", "EC": "593", "IT": "39", "VN": "84", "SB": "677", "ET": "251", "SO": "252", "ZW": "263", "SA": "966", "ES": "34", "ER": "291", "ME": "382", "MD": "373", "MG": "261", "MF": "590", "MA": "212", "MC": "377", "UZ": "998", "MM": "95", "ML": "223", "MO": "853", "MN": "976", "MH": "692", "MK": "389", "MU": "230", "MT": "356", "MW": "265", "MV": "960", "MQ": "596", "MP": "+1-670", "MS": "+1-664", "MR": "222", "IM": "+44-1624", "UG": "256", "TZ": "255", "MY": "60", "MX": "52", "IL": "972", "FR": "33", "IO": "246", "SH": "290", "FI": "358", "FJ": "679", "FK": "500", "FM": "691", "FO": "298", "NI": "505", "NL": "31", "NO": "47", "NA": "264", "VU": "678", "NC": "687", "NE": "227", "NF": "672", "NG": "234", "NZ": "64", "NP": "977", "NR": "674", "NU": "683", "CK": "682", "XK": "", "CI": "225", "CH": "41", "CO": "57", "CN": "86", "CM": "237", "CL": "56", "CC": "61", "CA": "1", "CG": "242", "CF": "236", "CD": "243", "CZ": "420", "CY": "357", "CX": "61", "CR": "506", "CW": "599", "CV": "238", "CU": "53", "SZ": "268", "SY": "963", "SX": "599", "KG": "996", "KE": "254", "SS": "211", "SR": "597", "KI": "686", "KH": "855", "KN": "+1-869", "KM": "269", "ST": "239", "SK": "421", "KR": "82", "SI": "386", "KP": "850", "KW": "965", "SN": "221", "SM": "378", "SL": "232", "SC": "248", "KZ": "7", "KY": "+1-345", "SG": "65", "SE": "46", "SD": "249", "DO": "+1-809 and 1-829", "DM": "+1-767", "DJ": "253", "DK": "45", "VG": "+1-284", "DE": "49", "YE": "967", "DZ": "213", "US": "1", "UY": "598", "YT": "262", "UM": "1", "LB": "961", "LC": "+1-758", "LA": "856", "TV": "688", "TW": "886", "TT": "+1-868", "TR": "90", "LK": "94", "LI": "423", "LV": "371", "TO": "676", "LT": "370", "LU": "352", "LR": "231", "LS": "266", "TH": "66", "TF": "", "TG": "228", "TD": "235", "TC": "+1-649", "LY": "218", "VA": "379", "VC": "+1-784", "AE": "971", "AD": "376", "AG": "+1-268", "AF": "93", "AI": "+1-264", "VI": "+1-340", "IS": "354", "IR": "98", "AM": "374", "AL": "355", "AO": "244", "AQ": "", "AS": "+1-684", "AR": "54", "AU": "61", "AT": "43", "AW": "297", "IN": "91", "AX": "+358-18", "AZ": "994", "IE": "353", "ID": "62", "UA": "380", "QA": "974", "MZ": "258"} -------------------------------------------------------------------------------- /MessagesHistoryBrowserTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /MessagesHistoryBrowserTests/MessagesHistoryBrowserTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesHistoryBrowserTests.swift 3 | // MessagesHistoryBrowserTests 4 | // 5 | // Created by Guillaume Laurent on 27/09/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import MessagesHistoryBrowser 11 | 12 | class MessagesHistoryBrowserTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /MessagesHistoryBrowserUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /MessagesHistoryBrowserUITests/MessagesHistoryBrowserUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesHistoryBrowserUITests.swift 3 | // MessagesHistoryBrowserUITests 4 | // 5 | // Created by Guillaume Laurent on 27/09/15. 6 | // Copyright © 2015 Guillaume Laurent. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class MessagesHistoryBrowserUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'MessagesHistoryBrowser' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for MessagesHistoryBrowser 9 | pod 'SQLite.swift' 10 | pod 'Sparkle' 11 | 12 | end 13 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Sparkle (1.26.0) 3 | - SQLite.swift (0.12.2): 4 | - SQLite.swift/standard (= 0.12.2) 5 | - SQLite.swift/standard (0.12.2) 6 | 7 | DEPENDENCIES: 8 | - Sparkle 9 | - SQLite.swift 10 | 11 | SPEC REPOS: 12 | trunk: 13 | - Sparkle 14 | - SQLite.swift 15 | 16 | SPEC CHECKSUMS: 17 | Sparkle: d56d028f4b0c123577825f5d1004f6140d77f90e 18 | SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3 19 | 20 | PODFILE CHECKSUM: 25618fe46d4c7ace8a7bb7291c22aad2e38409b9 21 | 22 | COCOAPODS: 1.10.1 23 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Sparkle (1.26.0) 3 | - SQLite.swift (0.12.2): 4 | - SQLite.swift/standard (= 0.12.2) 5 | - SQLite.swift/standard (0.12.2) 6 | 7 | DEPENDENCIES: 8 | - Sparkle 9 | - SQLite.swift 10 | 11 | SPEC REPOS: 12 | trunk: 13 | - Sparkle 14 | - SQLite.swift 15 | 16 | SPEC CHECKSUMS: 17 | Sparkle: d56d028f4b0c123577825f5d1004f6140d77f90e 18 | SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3 19 | 20 | PODFILE CHECKSUM: 25618fe46d4c7ace8a7bb7291c22aad2e38409b9 21 | 22 | COCOAPODS: 1.10.1 23 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/LICENSE.txt: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2015 Stephen Celis () 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Core/Blob.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | public struct Blob { 26 | 27 | public let bytes: [UInt8] 28 | 29 | public init(bytes: [UInt8]) { 30 | self.bytes = bytes 31 | } 32 | 33 | public init(bytes: UnsafeRawPointer, length: Int) { 34 | let i8bufptr = UnsafeBufferPointer(start: bytes.assumingMemoryBound(to: UInt8.self), count: length) 35 | self.init(bytes: [UInt8](i8bufptr)) 36 | } 37 | 38 | public func toHex() -> String { 39 | return bytes.map { 40 | ($0 < 16 ? "0" : "") + String($0, radix: 16, uppercase: false) 41 | }.joined(separator: "") 42 | } 43 | 44 | } 45 | 46 | extension Blob : CustomStringConvertible { 47 | 48 | public var description: String { 49 | return "x'\(toHex())'" 50 | } 51 | 52 | } 53 | 54 | extension Blob : Equatable { 55 | 56 | } 57 | 58 | public func ==(lhs: Blob, rhs: Blob) -> Bool { 59 | return lhs.bytes == rhs.bytes 60 | } 61 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public enum QueryError: Error, CustomStringConvertible { 4 | case noSuchTable(name: String) 5 | case noSuchColumn(name: String, columns: [String]) 6 | case ambiguousColumn(name: String, similar: [String]) 7 | case unexpectedNullValue(name: String) 8 | 9 | public var description: String { 10 | switch self { 11 | case .noSuchTable(let name): 12 | return "No such table: \(name)" 13 | case .noSuchColumn(let name, let columns): 14 | return "No such column `\(name)` in columns \(columns)" 15 | case .ambiguousColumn(let name, let similar): 16 | return "Ambiguous column `\(name)` (please disambiguate: \(similar))" 17 | case .unexpectedNullValue(let name): 18 | return "Unexpected null value for column `\(name)`" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Core/Value.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | /// - Warning: `Binding` is a protocol that SQLite.swift uses internally to 26 | /// directly map SQLite types to Swift types. 27 | /// 28 | /// Do not conform custom types to the Binding protocol. See the `Value` 29 | /// protocol, instead. 30 | public protocol Binding {} 31 | 32 | public protocol Number : Binding {} 33 | 34 | public protocol Value : Expressible { // extensions cannot have inheritance clauses 35 | 36 | associatedtype ValueType = Self 37 | 38 | associatedtype Datatype : Binding 39 | 40 | static var declaredDatatype: String { get } 41 | 42 | static func fromDatatypeValue(_ datatypeValue: Datatype) -> ValueType 43 | 44 | var datatypeValue: Datatype { get } 45 | 46 | } 47 | 48 | extension Double : Number, Value { 49 | 50 | public static let declaredDatatype = "REAL" 51 | 52 | public static func fromDatatypeValue(_ datatypeValue: Double) -> Double { 53 | return datatypeValue 54 | } 55 | 56 | public var datatypeValue: Double { 57 | return self 58 | } 59 | 60 | } 61 | 62 | extension Int64 : Number, Value { 63 | 64 | public static let declaredDatatype = "INTEGER" 65 | 66 | public static func fromDatatypeValue(_ datatypeValue: Int64) -> Int64 { 67 | return datatypeValue 68 | } 69 | 70 | public var datatypeValue: Int64 { 71 | return self 72 | } 73 | 74 | } 75 | 76 | extension String : Binding, Value { 77 | 78 | public static let declaredDatatype = "TEXT" 79 | 80 | public static func fromDatatypeValue(_ datatypeValue: String) -> String { 81 | return datatypeValue 82 | } 83 | 84 | public var datatypeValue: String { 85 | return self 86 | } 87 | 88 | } 89 | 90 | extension Blob : Binding, Value { 91 | 92 | public static let declaredDatatype = "BLOB" 93 | 94 | public static func fromDatatypeValue(_ datatypeValue: Blob) -> Blob { 95 | return datatypeValue 96 | } 97 | 98 | public var datatypeValue: Blob { 99 | return self 100 | } 101 | 102 | } 103 | 104 | // MARK: - 105 | 106 | extension Bool : Binding, Value { 107 | 108 | public static var declaredDatatype = Int64.declaredDatatype 109 | 110 | public static func fromDatatypeValue(_ datatypeValue: Int64) -> Bool { 111 | return datatypeValue != 0 112 | } 113 | 114 | public var datatypeValue: Int64 { 115 | return self ? 1 : 0 116 | } 117 | 118 | } 119 | 120 | extension Int : Number, Value { 121 | 122 | public static var declaredDatatype = Int64.declaredDatatype 123 | 124 | public static func fromDatatypeValue(_ datatypeValue: Int64) -> Int { 125 | return Int(datatypeValue) 126 | } 127 | 128 | public var datatypeValue: Int64 { 129 | return Int64(self) 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Extensions/FTS5.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | extension Module { 26 | public static func FTS5(_ config: FTS5Config) -> Module { 27 | return Module(name: "fts5", arguments: config.arguments()) 28 | } 29 | } 30 | 31 | /// Configuration for the [FTS5](https://www.sqlite.org/fts5.html) extension. 32 | /// 33 | /// **Note:** this is currently only applicable when using SQLite.swift together with a FTS5-enabled version 34 | /// of SQLite. 35 | open class FTS5Config : FTSConfig { 36 | public enum Detail : CustomStringConvertible { 37 | /// store rowid, column number, term offset 38 | case full 39 | /// store rowid, column number 40 | case column 41 | /// store rowid 42 | case none 43 | 44 | public var description: String { 45 | switch self { 46 | case .full: return "full" 47 | case .column: return "column" 48 | case .none: return "none" 49 | } 50 | } 51 | } 52 | 53 | var detail: Detail? 54 | var contentRowId: Expressible? 55 | var columnSize: Int? 56 | 57 | override public init() { 58 | } 59 | 60 | /// [External Content Tables](https://www.sqlite.org/fts5.html#section_4_4_2) 61 | open func contentRowId(_ column: Expressible) -> Self { 62 | self.contentRowId = column 63 | return self 64 | } 65 | 66 | /// [The Columnsize Option](https://www.sqlite.org/fts5.html#section_4_5) 67 | open func columnSize(_ size: Int) -> Self { 68 | self.columnSize = size 69 | return self 70 | } 71 | 72 | /// [The Detail Option](https://www.sqlite.org/fts5.html#section_4_6) 73 | open func detail(_ detail: Detail) -> Self { 74 | self.detail = detail 75 | return self 76 | } 77 | 78 | override func options() -> Options { 79 | var options = super.options() 80 | options.append("content_rowid", value: contentRowId) 81 | if let columnSize = columnSize { 82 | options.append("columnsize", value: Expression(value: columnSize)) 83 | } 84 | options.append("detail", value: detail) 85 | return options 86 | } 87 | 88 | override func formatColumnDefinitions() -> [Expressible] { 89 | return columnDefinitions.map { definition in 90 | if definition.options.contains(.unindexed) { 91 | return " ".join([definition.0, Expression(literal: "UNINDEXED")]) 92 | } else { 93 | return definition.0 94 | } 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Extensions/RTree.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | extension Module { 26 | 27 | public static func RTree(_ primaryKey: Expression, _ pairs: (Expression, Expression)...) -> Module where T.Datatype == Int64, U.Datatype == Double { 28 | var arguments: [Expressible] = [primaryKey] 29 | 30 | for pair in pairs { 31 | arguments.append(contentsOf: [pair.0, pair.1] as [Expressible]) 32 | } 33 | 34 | return Module(name: "rtree", arguments: arguments) 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Foundation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | extension Data : Value { 28 | 29 | public static var declaredDatatype: String { 30 | return Blob.declaredDatatype 31 | } 32 | 33 | public static func fromDatatypeValue(_ dataValue: Blob) -> Data { 34 | return Data(dataValue.bytes) 35 | } 36 | 37 | public var datatypeValue: Blob { 38 | return withUnsafeBytes { (pointer: UnsafeRawBufferPointer) -> Blob in 39 | return Blob(bytes: pointer.baseAddress!, length: count) 40 | } 41 | } 42 | 43 | } 44 | 45 | extension Date : Value { 46 | 47 | public static var declaredDatatype: String { 48 | return String.declaredDatatype 49 | } 50 | 51 | public static func fromDatatypeValue(_ stringValue: String) -> Date { 52 | return dateFormatter.date(from: stringValue)! 53 | } 54 | 55 | public var datatypeValue: String { 56 | return dateFormatter.string(from: self) 57 | } 58 | 59 | } 60 | 61 | /// A global date formatter used to serialize and deserialize `NSDate` objects. 62 | /// If multiple date formats are used in an application’s database(s), use a 63 | /// custom `Value` type per additional format. 64 | public var dateFormatter: DateFormatter = { 65 | let formatter = DateFormatter() 66 | formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS" 67 | formatter.locale = Locale(identifier: "en_US_POSIX") 68 | formatter.timeZone = TimeZone(secondsFromGMT: 0) 69 | return formatter 70 | }() 71 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Helpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if SQLITE_SWIFT_STANDALONE 26 | import sqlite3 27 | #elseif SQLITE_SWIFT_SQLCIPHER 28 | import SQLCipher 29 | #elseif os(Linux) 30 | import CSQLite 31 | #else 32 | import SQLite3 33 | #endif 34 | 35 | public typealias Star = (Expression?, Expression?) -> Expression 36 | 37 | public func *(_: Expression?, _: Expression?) -> Expression { 38 | return Expression(literal: "*") 39 | } 40 | 41 | public protocol _OptionalType { 42 | 43 | associatedtype WrappedType 44 | 45 | } 46 | 47 | extension Optional : _OptionalType { 48 | 49 | public typealias WrappedType = Wrapped 50 | 51 | } 52 | 53 | // let SQLITE_STATIC = unsafeBitCast(0, sqlite3_destructor_type.self) 54 | let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) 55 | 56 | extension String { 57 | 58 | func quote(_ mark: Character = "\"") -> String { 59 | let escaped = reduce("") { string, character in 60 | string + (character == mark ? "\(mark)\(mark)" : "\(character)") 61 | } 62 | return "\(mark)\(escaped)\(mark)" 63 | } 64 | 65 | func join(_ expressions: [Expressible]) -> Expressible { 66 | var (template, bindings) = ([String](), [Binding?]()) 67 | for expressible in expressions { 68 | let expression = expressible.expression 69 | template.append(expression.template) 70 | bindings.append(contentsOf: expression.bindings) 71 | } 72 | return Expression(template.joined(separator: self), bindings) 73 | } 74 | 75 | func infix(_ lhs: Expressible, _ rhs: Expressible, wrap: Bool = true) -> Expression { 76 | let expression = Expression(" \(self) ".join([lhs, rhs]).expression) 77 | guard wrap else { 78 | return expression 79 | } 80 | return "".wrap(expression) 81 | } 82 | 83 | func prefix(_ expressions: Expressible) -> Expressible { 84 | return "\(self) ".wrap(expressions) as Expression 85 | } 86 | 87 | func prefix(_ expressions: [Expressible]) -> Expressible { 88 | return "\(self) ".wrap(expressions) as Expression 89 | } 90 | 91 | func wrap(_ expression: Expressible) -> Expression { 92 | return Expression("\(self)(\(expression.expression.template))", expression.expression.bindings) 93 | } 94 | 95 | func wrap(_ expressions: [Expressible]) -> Expression { 96 | return wrap(", ".join(expressions)) 97 | } 98 | 99 | } 100 | 101 | func transcode(_ literal: Binding?) -> String { 102 | guard let literal = literal else { return "NULL" } 103 | 104 | switch literal { 105 | case let blob as Blob: 106 | return blob.description 107 | case let string as String: 108 | return string.quote("'") 109 | case let binding: 110 | return "\(binding)" 111 | } 112 | } 113 | 114 | func value(_ v: Binding) -> A { 115 | return A.fromDatatypeValue(v as! A.Datatype) as! A 116 | } 117 | 118 | func value(_ v: Binding?) -> A { 119 | return value(v!) 120 | } 121 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/SQLite.h: -------------------------------------------------------------------------------- 1 | @import Foundation; 2 | 3 | FOUNDATION_EXPORT double SQLiteVersionNumber; 4 | FOUNDATION_EXPORT const unsigned char SQLiteVersionString[]; 5 | 6 | #import "SQLiteObjc.h" 7 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Typed/Collation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | /// A collating function used to compare to strings. 26 | /// 27 | /// - SeeAlso: 28 | public enum Collation { 29 | 30 | /// Compares string by raw data. 31 | case binary 32 | 33 | /// Like binary, but folds uppercase ASCII letters into their lowercase 34 | /// equivalents. 35 | case nocase 36 | 37 | /// Like binary, but strips trailing space. 38 | case rtrim 39 | 40 | /// A custom collating sequence identified by the given string, registered 41 | /// using `Database.create(collation:…)` 42 | case custom(String) 43 | 44 | } 45 | 46 | extension Collation : Expressible { 47 | 48 | public var expression: Expression { 49 | return Expression(literal: description) 50 | } 51 | 52 | } 53 | 54 | extension Collation : CustomStringConvertible { 55 | 56 | public var description : String { 57 | switch self { 58 | case .binary: 59 | return "BINARY" 60 | case .nocase: 61 | return "NOCASE" 62 | case .rtrim: 63 | return "RTRIM" 64 | case .custom(let collation): 65 | return collation.quote() 66 | } 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | public protocol ExpressionType : Expressible { // extensions cannot have inheritance clauses 26 | 27 | associatedtype UnderlyingType = Void 28 | 29 | var template: String { get } 30 | var bindings: [Binding?] { get } 31 | 32 | init(_ template: String, _ bindings: [Binding?]) 33 | 34 | } 35 | 36 | extension ExpressionType { 37 | 38 | public init(literal: String) { 39 | self.init(literal, []) 40 | } 41 | 42 | public init(_ identifier: String) { 43 | self.init(literal: identifier.quote()) 44 | } 45 | 46 | public init(_ expression: U) { 47 | self.init(expression.template, expression.bindings) 48 | } 49 | 50 | } 51 | 52 | /// An `Expression` represents a raw SQL fragment and any associated bindings. 53 | public struct Expression : ExpressionType { 54 | 55 | public typealias UnderlyingType = Datatype 56 | 57 | public var template: String 58 | public var bindings: [Binding?] 59 | 60 | public init(_ template: String, _ bindings: [Binding?]) { 61 | self.template = template 62 | self.bindings = bindings 63 | } 64 | 65 | } 66 | 67 | public protocol Expressible { 68 | 69 | var expression: Expression { get } 70 | 71 | } 72 | 73 | extension Expressible { 74 | 75 | // naïve compiler for statements that can’t be bound, e.g., CREATE TABLE 76 | // FIXME: make internal (0.13.0) 77 | public func asSQL() -> String { 78 | let expressed = expression 79 | var idx = 0 80 | return expressed.template.reduce("") { template, character in 81 | let transcoded: String 82 | 83 | if character == "?" { 84 | transcoded = transcode(expressed.bindings[idx]) 85 | idx += 1 86 | } else { 87 | transcoded = String(character) 88 | } 89 | return template + transcoded 90 | } 91 | } 92 | 93 | } 94 | 95 | extension ExpressionType { 96 | 97 | public var expression: Expression { 98 | return Expression(template, bindings) 99 | } 100 | 101 | public var asc: Expressible { 102 | return " ".join([self, Expression(literal: "ASC")]) 103 | } 104 | 105 | public var desc: Expressible { 106 | return " ".join([self, Expression(literal: "DESC")]) 107 | } 108 | 109 | } 110 | 111 | extension ExpressionType where UnderlyingType : Value { 112 | 113 | public init(value: UnderlyingType) { 114 | self.init("?", [value.datatypeValue]) 115 | } 116 | 117 | } 118 | 119 | extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value { 120 | 121 | public static var null: Self { 122 | return self.init(value: nil) 123 | } 124 | 125 | public init(value: UnderlyingType.WrappedType?) { 126 | self.init("?", [value?.datatypeValue]) 127 | } 128 | 129 | } 130 | 131 | extension Value { 132 | 133 | public var expression: Expression { 134 | return Expression(value: self).expression 135 | } 136 | 137 | } 138 | 139 | public let rowid = Expression("ROWID") 140 | 141 | public func cast(_ expression: Expression) -> Expression { 142 | return Expression("CAST (\(expression.template) AS \(U.declaredDatatype))", expression.bindings) 143 | } 144 | 145 | public func cast(_ expression: Expression) -> Expression { 146 | return Expression("CAST (\(expression.template) AS \(U.declaredDatatype))", expression.bindings) 147 | } 148 | -------------------------------------------------------------------------------- /Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLiteObjc.h: -------------------------------------------------------------------------------- 1 | // 2 | // SQLite.swift 3 | // https://github.com/stephencelis/SQLite.swift 4 | // Copyright © 2014-2015 Stephen Celis. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | @import Foundation; 26 | @import SQLite3; 27 | 28 | NS_ASSUME_NONNULL_BEGIN 29 | typedef NSString * _Nullable (^_SQLiteTokenizerNextCallback)(const char *input, int *inputOffset, int *inputLength); 30 | int _SQLiteRegisterTokenizer(sqlite3 *db, const char *module, const char *tokenizer, _Nullable _SQLiteTokenizerNextCallback callback); 31 | NS_ASSUME_NONNULL_END 32 | 33 | -------------------------------------------------------------------------------- /Pods/Sparkle/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006-2013 Andy Matuschak. 2 | Copyright (c) 2009-2013 Elgato Systems GmbH. 3 | Copyright (c) 2011-2014 Kornel Lesiński. 4 | Copyright (c) 2015-2017 Mayur Pawashe. 5 | Copyright (c) 2014 C.W. Betts. 6 | Copyright (c) 2014 Petroules Corporation. 7 | Copyright (c) 2014 Big Nerd Ranch. 8 | All rights reserved. 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy of 11 | this software and associated documentation files (the "Software"), to deal in 12 | the Software without restriction, including without limitation the rights to 13 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 14 | the Software, and to permit persons to whom the Software is furnished to do so, 15 | subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 22 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 23 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 24 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 25 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 | 27 | ================= 28 | EXTERNAL LICENSES 29 | ================= 30 | 31 | bspatch.c and bsdiff.c, from bsdiff 4.3 : 32 | Copyright (c) 2003-2005 Colin Percival. 33 | 34 | sais.c and sais.c, from sais-lite (2010/08/07) : 35 | Copyright (c) 2008-2010 Yuta Mori. 36 | 37 | SUDSAVerifier.m: 38 | Copyright (c) 2011 Mark Hamlin. 39 | 40 | All rights reserved. 41 | 42 | Redistribution and use in source and binary forms, with or without 43 | modification, are permitted providing that the following conditions 44 | are met: 45 | 1. Redistributions of source code must retain the above copyright 46 | notice, this list of conditions and the following disclaimer. 47 | 2. Redistributions in binary form must reproduce the above copyright 48 | notice, this list of conditions and the following disclaimer in the 49 | documentation and/or other materials provided with the distribution. 50 | 51 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 52 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 53 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 54 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 55 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 56 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 57 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 58 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 59 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 60 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 61 | POSSIBILITY OF SUCH DAMAGE. 62 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/PrivateHeaders: -------------------------------------------------------------------------------- 1 | Versions/Current/PrivateHeaders -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SPUDownloadData.h: -------------------------------------------------------------------------------- 1 | // 2 | // SPUDownloadData.h 3 | // Sparkle 4 | // 5 | // Created by Mayur Pawashe on 8/10/16. 6 | // Copyright © 2016 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | 15 | #import "SUExport.h" 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | 19 | /*! 20 | * A class for containing downloaded data along with some information about it. 21 | */ 22 | SU_EXPORT @interface SPUDownloadData : NSObject 23 | 24 | - (instancetype)initWithData:(NSData *)data textEncodingName:(NSString * _Nullable)textEncodingName MIMEType:(NSString * _Nullable)MIMEType; 25 | 26 | /*! 27 | * The raw data that was downloaded. 28 | */ 29 | @property (nonatomic, readonly) NSData *data; 30 | 31 | /*! 32 | * The IANA charset encoding name if available. Eg: "utf-8" 33 | */ 34 | @property (nonatomic, readonly, nullable, copy) NSString *textEncodingName; 35 | 36 | /*! 37 | * The MIME type if available. Eg: "text/plain" 38 | */ 39 | @property (nonatomic, readonly, nullable, copy) NSString *MIMEType; 40 | 41 | @end 42 | 43 | NS_ASSUME_NONNULL_END 44 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SPUDownloader.h: -------------------------------------------------------------------------------- 1 | // 2 | // SPUDownloader.h 3 | // Downloader 4 | // 5 | // Created by Mayur Pawashe on 4/1/16. 6 | // Copyright © 2016 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | #import "SPUDownloaderProtocol.h" 15 | 16 | @protocol SPUDownloaderDelegate; 17 | 18 | // This object implements the protocol which we have defined. It provides the actual behavior for the service. It is 'exported' by the service to make it available to the process hosting the service over an NSXPCConnection. 19 | @interface SPUDownloader : NSObject 20 | 21 | // Due to XPC remote object reasons, this delegate is strongly referenced 22 | // Invoke cleanup when done with this instance 23 | - (instancetype)initWithDelegate:(id )delegate; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SPUDownloaderDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SPUDownloaderDelegate.h 3 | // Sparkle 4 | // 5 | // Created by Mayur Pawashe on 4/1/16. 6 | // Copyright © 2016 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @class SPUDownloadData; 18 | 19 | @protocol SPUDownloaderDelegate 20 | 21 | // This is only invoked for persistent downloads 22 | - (void)downloaderDidSetDestinationName:(NSString *)destinationName temporaryDirectory:(NSString *)temporaryDirectory; 23 | 24 | // Under rare cases, this may be called more than once, in which case the current progress should be reset back to 0 25 | // This is only invoked for persistent downloads 26 | - (void)downloaderDidReceiveExpectedContentLength:(int64_t)expectedContentLength; 27 | 28 | // This is only invoked for persistent downloads 29 | - (void)downloaderDidReceiveDataOfLength:(uint64_t)length; 30 | 31 | // downloadData is nil if this is a persisent download, otherwise it's non-nil if it's a temporary download 32 | - (void)downloaderDidFinishWithTemporaryDownloadData:(SPUDownloadData * _Nullable)downloadData; 33 | 34 | - (void)downloaderDidFailWithError:(NSError *)error; 35 | 36 | @end 37 | 38 | NS_ASSUME_NONNULL_END 39 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SPUDownloaderProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SPUDownloaderProtocol.h 3 | // PersistentDownloader 4 | // 5 | // Created by Mayur Pawashe on 4/1/16. 6 | // Copyright © 2016 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @class SPUURLRequest; 18 | 19 | // The protocol that this service will vend as its API. This header file will also need to be visible to the process hosting the service. 20 | @protocol SPUDownloaderProtocol 21 | 22 | - (void)startPersistentDownloadWithRequest:(SPUURLRequest *)request bundleIdentifier:(NSString *)bundleIdentifier desiredFilename:(NSString *)desiredFilename; 23 | 24 | - (void)startTemporaryDownloadWithRequest:(SPUURLRequest *)request; 25 | 26 | - (void)downloadDidFinish; 27 | 28 | - (void)cleanup; 29 | 30 | - (void)cancel; 31 | 32 | @end 33 | 34 | NS_ASSUME_NONNULL_END 35 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SPUDownloaderSession.h: -------------------------------------------------------------------------------- 1 | // 2 | // SPUDownloaderSession.h 3 | // Sparkle 4 | // 5 | // Created by Deadpikle on 12/20/17. 6 | // Copyright © 2017 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | #import "SPUDownloader.h" 15 | #import "SPUDownloaderProtocol.h" 16 | 17 | NS_CLASS_AVAILABLE(NSURLSESSION_AVAILABLE, 7_0) 18 | @interface SPUDownloaderSession : SPUDownloader 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SPUURLRequest.h: -------------------------------------------------------------------------------- 1 | // 2 | // SPUURLRequest.h 3 | // Sparkle 4 | // 5 | // Created by Mayur Pawashe on 5/19/16. 6 | // Copyright © 2016 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | // A class that wraps NSURLRequest and implements NSSecureCoding 18 | // This class exists because NSURLRequest did not support NSSecureCoding in macOS 10.8 19 | // I have not verified if NSURLRequest in 10.9 implements NSSecureCoding or not 20 | @interface SPUURLRequest : NSObject 21 | 22 | // Creates a new URL request 23 | // Only these properties are currently tracked: 24 | // * URL 25 | // * Cache policy 26 | // * Timeout interval 27 | // * HTTP header fields 28 | // * networkServiceType 29 | + (instancetype)URLRequestWithRequest:(NSURLRequest *)request; 30 | 31 | @property (nonatomic, readonly) NSURLRequest *request; 32 | 33 | @end 34 | 35 | NS_ASSUME_NONNULL_END 36 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUAppcast.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcast.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCAST_H 10 | #define SUAPPCAST_H 11 | 12 | #import 13 | #import "SUExport.h" 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @class SUAppcastItem; 18 | SU_EXPORT @interface SUAppcast : NSObject 19 | 20 | @property (copy, nullable) NSString *userAgentString; 21 | @property (copy, nullable) NSDictionary *httpHeaders; 22 | 23 | - (void)fetchAppcastFromURL:(NSURL *)url inBackground:(BOOL)bg completionBlock:(void (^)(NSError *_Nullable))err; 24 | - (SUAppcast *)copyWithoutDeltaUpdates; 25 | 26 | @property (readonly, copy, nullable) NSArray *items; 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcastItem.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCASTITEM_H 10 | #define SUAPPCASTITEM_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | @class SUSignatures; 19 | 20 | SU_EXPORT @interface SUAppcastItem : NSObject 21 | @property (copy, readonly) NSString *title; 22 | @property (copy, readonly) NSString *dateString; 23 | @property (copy, readonly) NSDate *date; 24 | @property (copy, readonly) NSString *itemDescription; 25 | @property (strong, readonly) NSURL *releaseNotesURL; 26 | @property (strong, readonly) SUSignatures *signatures; 27 | @property (copy, readonly) NSString *minimumSystemVersion; 28 | @property (copy, readonly) NSString *maximumSystemVersion; 29 | @property (strong, readonly) NSURL *fileURL; 30 | @property (nonatomic, readonly) uint64_t contentLength; 31 | @property (copy, readonly) NSString *versionString; 32 | @property (copy, readonly) NSString *osString; 33 | @property (copy, readonly) NSString *displayVersionString; 34 | @property (copy, readonly) NSDictionary *deltaUpdates; 35 | @property (strong, readonly) NSURL *infoURL; 36 | @property (copy, readonly) NSNumber* phasedRolloutInterval; 37 | @property (copy, readonly) NSString *minimumAutoupdateVersion; 38 | 39 | // Initializes with data from a dictionary provided by the RSS class. 40 | - (instancetype)initWithDictionary:(NSDictionary *)dict; 41 | - (instancetype)initWithDictionary:(NSDictionary *)dict failureReason:(NSString **)error; 42 | 43 | @property (getter=isDeltaUpdate, readonly) BOOL deltaUpdate; 44 | @property (getter=isCriticalUpdate, readonly) BOOL criticalUpdate; 45 | @property (getter=isMacOsUpdate, readonly) BOOL macOsUpdate; 46 | @property (getter=isInformationOnlyUpdate, readonly) BOOL informationOnlyUpdate; 47 | 48 | // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. 49 | @property (readonly, copy) NSDictionary *propertiesDictionary; 50 | 51 | - (NSURL *)infoURL; 52 | 53 | @end 54 | 55 | #endif 56 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUCodeSigningVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUCodeSigningVerifier.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 7/5/12. 6 | // 7 | // 8 | 9 | #ifndef SUCODESIGNINGVERIFIER_H 10 | #define SUCODESIGNINGVERIFIER_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | SU_EXPORT @interface SUCodeSigningVerifier : NSObject 20 | + (BOOL)codeSignatureAtBundleURL:(NSURL *)oldBundlePath matchesSignatureAtBundleURL:(NSURL *)newBundlePath error:(NSError **)error; 21 | + (BOOL)codeSignatureIsValidAtBundleURL:(NSURL *)bundlePath error:(NSError **)error; 22 | + (BOOL)bundleAtURLIsCodeSigned:(NSURL *)bundlePath; 23 | + (NSDictionary *)codeSignatureInfoAtBundleURL:(NSURL *)bundlePath; 24 | @end 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUErrors.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUErrors.h 3 | // Sparkle 4 | // 5 | // Created by C.W. Betts on 10/13/14. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUERRORS_H 10 | #define SUERRORS_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | /** 20 | * Error domain used by Sparkle 21 | */ 22 | SU_EXPORT extern NSString *const SUSparkleErrorDomain; 23 | 24 | #pragma clang diagnostic push 25 | #pragma clang diagnostic ignored "-Wc++98-compat" 26 | typedef NS_ENUM(OSStatus, SUError) { 27 | // Appcast phase errors. 28 | SUAppcastParseError = 1000, 29 | SUNoUpdateError = 1001, 30 | SUAppcastError = 1002, 31 | SURunningFromDiskImageError = 1003, 32 | SURunningTranslocated = 1004, 33 | SUWebKitTerminationError = 1005, 34 | 35 | // Download phase errors. 36 | SUTemporaryDirectoryError = 2000, 37 | SUDownloadError = 2001, 38 | 39 | // Extraction phase errors. 40 | SUUnarchivingError = 3000, 41 | SUSignatureError = 3001, 42 | 43 | // Installation phase errors. 44 | SUFileCopyFailure = 4000, 45 | SUAuthenticationFailure = 4001, 46 | SUMissingUpdateError = 4002, 47 | SUMissingInstallerToolError = 4003, 48 | SURelaunchError = 4004, 49 | SUInstallationError = 4005, 50 | SUDowngradeError = 4006, 51 | SUInstallationCancelledError = 4007, 52 | 53 | // System phase errors 54 | SUSystemPowerOffError = 5000 55 | }; 56 | #pragma clang diagnostic pop 57 | 58 | #endif 59 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUExport.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUExport.h 3 | // Sparkle 4 | // 5 | // Created by Jake Petroules on 2014-08-23. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUEXPORT_H 10 | #define SUEXPORT_H 11 | 12 | #ifdef BUILDING_SPARKLE 13 | #define SU_EXPORT __attribute__((visibility("default"))) 14 | #else 15 | #define SU_EXPORT 16 | #endif 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUStandardVersionComparator.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUSTANDARDVERSIONCOMPARATOR_H 10 | #define SUSTANDARDVERSIONCOMPARATOR_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | #import "SUVersionComparisonProtocol.h" 19 | 20 | NS_ASSUME_NONNULL_BEGIN 21 | 22 | /*! 23 | Sparkle's default version comparator. 24 | 25 | This comparator is adapted from MacPAD, by Kevin Ballard. 26 | It's "dumb" in that it does essentially string comparison, 27 | in components split by character type. 28 | */ 29 | SU_EXPORT @interface SUStandardVersionComparator : NSObject 30 | 31 | /*! 32 | Initializes a new instance of the standard version comparator. 33 | */ 34 | - (instancetype)init; 35 | 36 | /*! 37 | Returns a singleton instance of the comparator. 38 | 39 | It is usually preferred to alloc/init new a comparator instead. 40 | */ 41 | + (SUStandardVersionComparator *)defaultComparator; 42 | 43 | /*! 44 | Compares version strings through textual analysis. 45 | 46 | See the implementation for more details. 47 | */ 48 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; 49 | @end 50 | 51 | NS_ASSUME_NONNULL_END 52 | #endif 53 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonProtocol.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUVERSIONCOMPARISONPROTOCOL_H 10 | #define SUVERSIONCOMPARISONPROTOCOL_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | NS_ASSUME_NONNULL_BEGIN 20 | 21 | /*! 22 | Provides version comparison facilities for Sparkle. 23 | */ 24 | @protocol SUVersionComparison 25 | 26 | /*! 27 | An abstract method to compare two version strings. 28 | 29 | Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, 30 | and NSOrderedSame if they are equivalent. 31 | */ 32 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! 33 | 34 | @end 35 | 36 | NS_ASSUME_NONNULL_END 37 | #endif 38 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionDisplayProtocol.h 3 | // EyeTV 4 | // 5 | // Created by Uli Kusterer on 08.12.09. 6 | // Copyright 2009 Elgato Systems GmbH. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | #import "SUExport.h" 15 | 16 | /*! 17 | Applies special display formatting to version numbers. 18 | */ 19 | @protocol SUVersionDisplay 20 | 21 | /*! 22 | Formats two version strings. 23 | 24 | Both versions are provided so that important distinguishing information 25 | can be displayed while also leaving out unnecessary/confusing parts. 26 | */ 27 | - (void)formatVersion:(NSString *_Nonnull*_Nonnull)inOutVersionA andVersion:(NSString *_Nonnull*_Nonnull)inOutVersionB; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Headers/Sparkle.h: -------------------------------------------------------------------------------- 1 | // 2 | // Sparkle.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SPARKLE_H 10 | #define SPARKLE_H 11 | 12 | // This list should include the shared headers. It doesn't matter if some of them aren't shared (unless 13 | // there are name-space collisions) so we can list all of them to start with: 14 | 15 | #pragma clang diagnostic push 16 | // Do not use <> style includes since 2.x has two frameworks that need to work: Sparkle and SparkleCore 17 | #pragma clang diagnostic ignored "-Wquoted-include-in-framework-header" 18 | 19 | #import "SUAppcast.h" 20 | #import "SUAppcastItem.h" 21 | #import "SUStandardVersionComparator.h" 22 | #import "SUUpdater.h" 23 | #import "SUUpdaterDelegate.h" 24 | #import "SUVersionComparisonProtocol.h" 25 | #import "SUVersionDisplayProtocol.h" 26 | #import "SUErrors.h" 27 | 28 | #import "SPUDownloader.h" 29 | #import "SPUDownloaderDelegate.h" 30 | #import "SPUDownloadData.h" 31 | #import "SPUDownloaderProtocol.h" 32 | #import "SPUDownloaderSession.h" 33 | #import "SPUURLRequest.h" 34 | #import "SUCodeSigningVerifier.h" 35 | 36 | #pragma clang diagnostic pop 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Sparkle { 2 | umbrella header "Sparkle.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/PrivateHeaders/SUUnarchiver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUnarchiver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @protocol SUUnarchiverProtocol; 14 | 15 | @interface SUUnarchiver : NSObject 16 | 17 | + (nullable id )unarchiverForPath:(NSString *)path updatingHostBundlePath:(nullable NSString *)hostPath decryptionPassword:(nullable NSString *)decryptionPassword; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 20E5186d 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | Autoupdate 11 | CFBundleIconFile 12 | AppIcon.icns 13 | CFBundleIdentifier 14 | org.sparkle-project.Sparkle.Autoupdate 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.26.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 1.26.0 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 12C5020f 33 | DTPlatformName 34 | macosx 35 | DTPlatformVersion 36 | 11.1 37 | DTSDKBuild 38 | 20C5048g 39 | DTSDKName 40 | macosx11.1 41 | DTXcode 42 | 1230 43 | DTXcodeBuild 44 | 12C5020f 45 | LSBackgroundOnly 46 | 1 47 | LSMinimumSystemVersion 48 | 10.9 49 | LSUIElement 50 | 1 51 | NSMainNibFile 52 | MainMenu 53 | NSPrincipalClass 54 | NSApplication 55 | 56 | 57 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/Base.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/Base.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hu.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hu.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdatePermissionPrompt.nib/keyedobjects-110000.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdatePermissionPrompt.nib/keyedobjects-110000.nib -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Base.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 20E5186d 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Sparkle 11 | CFBundleIdentifier 12 | org.sparkle-project.Sparkle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Sparkle 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 1.26.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 1.26.0 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 12C5020f 33 | DTPlatformName 34 | macosx 35 | DTPlatformVersion 36 | 11.1 37 | DTSDKBuild 38 | 20C5048g 39 | DTSDKName 40 | macosx11.1 41 | DTXcode 42 | 1230 43 | DTXcodeBuild 44 | 12C5020f 45 | LSMinimumSystemVersion 46 | 10.9 47 | 48 | 49 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ReleaseNotesColorStyle.css: -------------------------------------------------------------------------------- 1 | @media (prefers-color-scheme: dark) { 2 | html { 3 | color: white; 4 | background: transparent; 5 | } 6 | :link { 7 | color: #419CFF; 8 | } 9 | :link:active { 10 | color: #FF1919; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSButtonCell"; title = "Install and Relaunch"; ObjectID = "41"; */ 2 | "41.title" = "Reinicia el programa ara"; 3 | 4 | /* Class = "NSButtonCell"; title = "Install on Quit"; ObjectID = "42"; */ 5 | "42.title" = "Reinicia el programa més tard"; 6 | 7 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "43"; */ 8 | "43.title" = "Baixa i instal·la les actualitzacions automàticament en el futur"; 9 | 10 | /* Class = "NSButtonCell"; title = "Don't Install"; ObjectID = "44"; */ 11 | "44.title" = "Don't Install"; 12 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 2 | "5.title" = "Actualització del programari"; 3 | 4 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 5 | "170.title" = "Notes d'aquesta versió:"; 6 | 7 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 8 | "171.title" = "Recorda-m'ho més tard"; 9 | 10 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 11 | "172.title" = "Omet aquesta versió"; 12 | 13 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 14 | "173.title" = "Instal·la l'actualització"; 15 | 16 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 17 | "175.title" = "Descarrega i instal·la les actualitzacions automàticament en el futur"; 18 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSButtonCell"; title = "Install and Relaunch"; ObjectID = "41"; */ 2 | "41.title" = "Instalovat a znovu spustit"; 3 | 4 | /* Class = "NSButtonCell"; title = "Install on Quit"; ObjectID = "42"; */ 5 | "42.title" = "Instalovat a ukončit"; 6 | 7 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "43"; */ 8 | "43.title" = "V budoucnu stahovat a instalovat aktualizace automaticky"; 9 | 10 | /* Class = "NSButtonCell"; title = "Don't Install"; ObjectID = "44"; */ 11 | "44.title" = "Neinstalovat"; 12 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 2 | "5.title" = "Aktualizace aplikace"; 3 | 4 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 5 | "170.title" = "Poznámky k vydání:"; 6 | 7 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 8 | "171.title" = "Připomenout později"; 9 | 10 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 11 | "172.title" = "Přeskočit tuto verzi"; 12 | 13 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 14 | "173.title" = "Instalovat aktualizaci"; 15 | 16 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 17 | "175.title" = "V budoucnu stahovat a instalovat aktualizace automaticky"; 18 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "43"; */ 2 | "43.title" = "Text Cell"; 3 | 4 | /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "45"; */ 5 | "45.title" = "Text Cell"; 6 | 7 | /* Class = "NSButtonCell"; title = "Check Automatically"; ObjectID = "176"; */ 8 | "176.title" = "Automaticky vyhledávat"; 9 | 10 | /* Class = "NSButtonCell"; title = "Don’t Check"; ObjectID = "177"; */ 11 | "177.title" = "Nevyhledávat"; 12 | 13 | /* Class = "NSTextFieldCell"; title = "Check for updates automatically?"; ObjectID = "178"; */ 14 | "178.title" = "Vyhledávat aktualizace automaticky?"; 15 | 16 | /* Class = "NSTextFieldCell"; title = "DO NOT LOCALIZE"; ObjectID = "179"; */ 17 | "179.title" = "DO NOT LOCALIZE"; 18 | 19 | /* Class = "NSButtonCell"; title = "Include anonymous system profile"; ObjectID = "180"; */ 20 | "180.title" = "Odeslat anonymní systémový profil"; 21 | 22 | /* Class = "NSTextFieldCell"; title = "Anonymous system profile information is used to help us plan future development work.\nPlease contact us if you have any questions about this.\n\nThis is the information that would be sent:"; ObjectID = "183"; */ 23 | "183.title" = "Informace z anonymního systémového profilu pomáhají vývojářům lépe plánovat budoucí vývoj aplikace.\nBudete-li mít nějaký dotaz, obraťte se na nás.\n\nTyto informace by měly být odeslány:"; 24 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Install and Relaunch"; ObjectID = "41"; */ 3 | "41.title" = "Install and Relaunch"; 4 | 5 | /* Class = "NSButtonCell"; title = "Install on Quit"; ObjectID = "42"; */ 6 | "42.title" = "Install on Quit"; 7 | 8 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "43"; */ 9 | "43.title" = "Automatically download and install updates in the future"; 10 | 11 | /* Class = "NSButtonCell"; title = "Don't Install"; ObjectID = "44"; */ 12 | "44.title" = "Don't Install"; 13 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 3 | "5.title" = "Software Update"; 4 | 5 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 6 | "170.title" = "Release Notes:"; 7 | 8 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 9 | "171.title" = "Remind Me Later"; 10 | 11 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 12 | "172.title" = "Skip This Version"; 13 | 14 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 15 | "173.title" = "Install Update"; 16 | 17 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 18 | "175.title" = "Automatically download and install updates in the future"; 19 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "43"; */ 3 | "43.title" = "Text Cell"; 4 | 5 | /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "45"; */ 6 | "45.title" = "Text Cell"; 7 | 8 | /* Class = "NSButtonCell"; title = "Check Automatically"; ObjectID = "176"; */ 9 | "176.title" = "Check Automatically"; 10 | 11 | /* Class = "NSButtonCell"; title = "Don’t Check"; ObjectID = "177"; */ 12 | "177.title" = "Don’t Check"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "Check for updates automatically?"; ObjectID = "178"; */ 15 | "178.title" = "Check for updates automatically?"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "DO NOT LOCALIZE"; ObjectID = "179"; */ 18 | "179.title" = "DO NOT LOCALIZE"; 19 | 20 | /* Class = "NSButtonCell"; title = "Include anonymous system profile"; ObjectID = "180"; */ 21 | "180.title" = "Include anonymous system profile"; 22 | 23 | /* Class = "NSTextFieldCell"; title = "Anonymous system profile information is used to help us plan future development work. Please contact us if you have any questions about this.\n\nThis is the information that would be sent:"; ObjectID = "183"; */ 24 | "183.title" = "Anonymous system profile information is used to help us plan future development work. Please contact us if you have any questions about this.\n\nThis is the information that would be sent:"; 25 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSButtonCell"; title = "Install and Relaunch"; ObjectID = "41"; */ 2 | "41.title" = "אתחל עכשיו"; 3 | 4 | /* Class = "NSButtonCell"; title = "Install on Quit"; ObjectID = "42"; */ 5 | "42.title" = "אתחל מאוחר יותר"; 6 | 7 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "43"; */ 8 | "43.title" = "הורד והתקן עדכונים אוטומטית גם בעתיד"; 9 | 10 | /* Class = "NSButtonCell"; title = "Don't Install"; ObjectID = "44"; */ 11 | "44.title" = "Don't Install"; 12 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 3 | "5.title" = "עדכון תכנה"; 4 | 5 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 6 | "170.title" = "פרטי גרסה:"; 7 | 8 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 9 | "171.title" = "הזכר לי מאוחר יותר"; 10 | 11 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 12 | "172.title" = "דלג על גרסה זו"; 13 | 14 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 15 | "173.title" = "התקן עדכון"; 16 | 17 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 18 | "175.title" = "הורד והתקן עדכונים אוטומטית גם בעתיד"; 19 | -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Pods/Sparkle/Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /Pods/Sparkle/bin/BinaryDelta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/bin/BinaryDelta -------------------------------------------------------------------------------- /Pods/Sparkle/bin/generate_appcast: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/bin/generate_appcast -------------------------------------------------------------------------------- /Pods/Sparkle/bin/generate_keys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/bin/generate_keys -------------------------------------------------------------------------------- /Pods/Sparkle/bin/old_dsa_scripts/generate_dsa_keys_macos_10.12_only: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | for file in "dsaparam.pem" "dsa_priv.pem" "dsa_pub.pem"; do 4 | if [ -e "$file" ]; then 5 | echo "There's already a $file here! Move it aside or be more careful!" 6 | exit 1 7 | fi 8 | done 9 | 10 | openssl="/usr/bin/openssl" 11 | $openssl gendsa <($openssl dsaparam 2047) -out dsa_priv.pem 12 | chmod 0400 dsa_priv.pem 13 | $openssl dsa -in dsa_priv.pem -pubout -out dsa_pub.pem 14 | 15 | echo " 16 | Generated two files: 17 | dsa_priv.pem: your private key. Keep it secret and don't share it! 18 | dsa_pub.pem: public counterpart to include in the app bundle. 19 | 20 | BACK UP YOUR PRIVATE KEY AND KEEP IT SAFE! 21 | If you lose it, your users will be unable to upgrade! 22 | " 23 | 24 | open -R dsa_priv.pem 25 | -------------------------------------------------------------------------------- /Pods/Sparkle/bin/old_dsa_scripts/sign_update: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | if [ "$#" -ne 2 ]; then 5 | echo "Usage: $0 update_archive_file dsa_priv.pem" 6 | echo "This is an old DSA signing script for deprecated DSA keys." 7 | echo "Do not use this for new applications." 8 | exit 1 9 | fi 10 | openssl=/usr/bin/openssl 11 | version=`$openssl version` 12 | if [[ $version =~ "OpenSSL 0.9" ]]; then 13 | # pre-10.13 system: Fall back to OpenSSL DSS1 digest because it does not like the -sha1 option 14 | $openssl dgst -sha1 -binary < "$1" | $openssl dgst -dss1 -sign "$2" | $openssl enc -base64 15 | else 16 | # 10.13 and later: Use LibreSSL SHA1 digest 17 | $openssl dgst -sha1 -binary < "$1" | $openssl dgst -sha1 -sign "$2" | $openssl enc -base64 18 | fi 19 | -------------------------------------------------------------------------------- /Pods/Sparkle/bin/sign_update: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glaurent/MessagesHistoryBrowser/c61c54677ffcae7bd8d4880e59ce4fdf2a62e0fd/Pods/Sparkle/bin/sign_update -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MessagesHistoryBrowser/Pods-MessagesHistoryBrowser-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MessagesHistoryBrowser/Pods-MessagesHistoryBrowser-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## SQLite.swift 5 | 6 | (The MIT License) 7 | 8 | Copyright (c) 2014-2015 Stephen Celis () 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | 29 | ## Sparkle 30 | 31 | Copyright (c) 2006-2013 Andy Matuschak. 32 | Copyright (c) 2009-2013 Elgato Systems GmbH. 33 | Copyright (c) 2011-2014 Kornel Lesiński. 34 | Copyright (c) 2015-2017 Mayur Pawashe. 35 | Copyright (c) 2014 C.W. Betts. 36 | Copyright (c) 2014 Petroules Corporation. 37 | Copyright (c) 2014 Big Nerd Ranch. 38 | All rights reserved. 39 | 40 | Permission is hereby granted, free of charge, to any person obtaining a copy of 41 | this software and associated documentation files (the "Software"), to deal in 42 | the Software without restriction, including without limitation the rights to 43 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 44 | the Software, and to permit persons to whom the Software is furnished to do so, 45 | subject to the following conditions: 46 | 47 | The above copyright notice and this permission notice shall be included in all 48 | copies or substantial portions of the Software. 49 | 50 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 51 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 52 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 53 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 54 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 55 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 56 | 57 | ================= 58 | EXTERNAL LICENSES 59 | ================= 60 | 61 | bspatch.c and bsdiff.c, from bsdiff 4.3 : 62 | Copyright (c) 2003-2005 Colin Percival. 63 | 64 | sais.c and sais.c, from sais-lite (2010/08/07) : 65 | Copyright (c) 2008-2010 Yuta Mori. 66 | 67 | SUDSAVerifier.m: 68 | Copyright (c) 2011 Mark Hamlin. 69 | 70 | All rights reserved. 71 | 72 | Redistribution and use in source and binary forms, with or without 73 | modification, are permitted providing that the following conditions 74 | are met: 75 | 1. Redistributions of source code must retain the above copyright 76 | notice, this list of conditions and the following disclaimer. 77 | 2. Redistributions in binary form must reproduce the above copyright 78 | notice, this list of conditions and the following disclaimer in the 79 | documentation and/or other materials provided with the distribution. 80 | 81 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 82 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 83 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 84 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 85 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 86 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 87 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 88 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 89 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 90 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 91 | POSSIBILITY OF SUCH DAMAGE. 92 | 93 | Generated by CocoaPods - https://cocoapods.org 94 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MessagesHistoryBrowser/Pods-MessagesHistoryBrowser-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_MessagesHistoryBrowser : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_MessagesHistoryBrowser 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MessagesHistoryBrowser/Pods-MessagesHistoryBrowser-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_MessagesHistoryBrowserVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_MessagesHistoryBrowserVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MessagesHistoryBrowser/Pods-MessagesHistoryBrowser.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_ROOT}/Sparkle" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' @loader_path/../Frameworks 7 | OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "SQLite" -framework "Sparkle" 8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MessagesHistoryBrowser/Pods-MessagesHistoryBrowser.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_MessagesHistoryBrowser { 2 | umbrella header "Pods-MessagesHistoryBrowser-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MessagesHistoryBrowser/Pods-MessagesHistoryBrowser.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_ROOT}/Sparkle" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' @loader_path/../Frameworks 7 | OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "SQLite" -framework "Sparkle" 8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SQLite.swift/SQLite.swift-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.12.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SQLite.swift/SQLite.swift-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SQLite_swift : NSObject 3 | @end 4 | @implementation PodsDummy_SQLite_swift 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SQLite.swift/SQLite.swift-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "SQLite.h" 14 | #import "SQLiteObjc.h" 15 | 16 | FOUNDATION_EXPORT double SQLiteVersionNumber; 17 | FOUNDATION_EXPORT const unsigned char SQLiteVersionString[]; 18 | 19 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SQLite.swift/SQLite.swift.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CODE_SIGN_IDENTITY = 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | OTHER_LDFLAGS = $(inherited) -l"sqlite3" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SQLite.swift 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap: -------------------------------------------------------------------------------- 1 | framework module SQLite { 2 | umbrella header "SQLite.swift-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SQLite.swift/SQLite.swift.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CODE_SIGN_IDENTITY = 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | OTHER_LDFLAGS = $(inherited) -l"sqlite3" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SQLite.swift 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Sparkle/Sparkle-copy-dsyms.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | # Used as a return value for each invocation of `strip_invalid_archs` function. 12 | STRIP_BINARY_RETVAL=0 13 | 14 | # Strip invalid architectures 15 | strip_invalid_archs() { 16 | binary="$1" 17 | warn_missing_arch=${2:-true} 18 | # Get architectures for current target binary 19 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 20 | # Intersect them with the architectures we are building for 21 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 22 | # If there are no archs supported by this binary then warn the user 23 | if [[ -z "$intersected_archs" ]]; then 24 | if [[ "$warn_missing_arch" == "true" ]]; then 25 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 26 | fi 27 | STRIP_BINARY_RETVAL=1 28 | return 29 | fi 30 | stripped="" 31 | for arch in $binary_archs; do 32 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 33 | # Strip non-valid architectures in-place 34 | lipo -remove "$arch" -output "$binary" "$binary" 35 | stripped="$stripped $arch" 36 | fi 37 | done 38 | if [[ "$stripped" ]]; then 39 | echo "Stripped $binary of architectures:$stripped" 40 | fi 41 | STRIP_BINARY_RETVAL=0 42 | } 43 | 44 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 45 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 46 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 47 | 48 | # Copies and strips a vendored dSYM 49 | install_dsym() { 50 | local source="$1" 51 | warn_missing_arch=${2:-true} 52 | if [ -r "$source" ]; then 53 | # Copy the dSYM into the targets temp dir. 54 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 55 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 56 | 57 | local basename 58 | basename="$(basename -s .dSYM "$source")" 59 | binary_name="$(ls "$source/Contents/Resources/DWARF")" 60 | binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" 61 | 62 | # Strip invalid architectures from the dSYM. 63 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then 64 | strip_invalid_archs "$binary" "$warn_missing_arch" 65 | fi 66 | if [[ $STRIP_BINARY_RETVAL == 0 ]]; then 67 | # Move the stripped file into its final destination. 68 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 69 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 70 | else 71 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 72 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" 73 | fi 74 | fi 75 | } 76 | 77 | # Copies the bcsymbolmap files of a vendored framework 78 | install_bcsymbolmap() { 79 | local bcsymbolmap_path="$1" 80 | local destination="${BUILT_PRODUCTS_DIR}" 81 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" 82 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" 83 | } 84 | 85 | install_dsym "${PODS_ROOT}/Sparkle/Sparkle.framework.dSYM" 86 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Sparkle/Sparkle.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CODE_SIGN_IDENTITY = 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Sparkle 4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Sparkle" 5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) @loader_path/../Frameworks 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Sparkle 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Sparkle/Sparkle.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CODE_SIGN_IDENTITY = 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Sparkle 4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Sparkle" 5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) @loader_path/../Frameworks 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Sparkle 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MessagesHistoryBrowser 2 | a macOS/OSX app to comfortably browse and search through your Messages.app history. 3 | 4 | More info on the [app's page](http://telegraph-road.org/MessagesHistoryBrowser/) 5 | --------------------------------------------------------------------------------