From f8376b807a08b3d729d70c698172136c9dc34090 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Thu, 24 Oct 2019 21:12:58 -0700 Subject: [PATCH] Restore two-step process for OPML exporting. --- Mac/AppDelegate.swift | 4 +- .../OPML/ExportOPMLAccessoryView.xib | 83 -------------- .../ExportOPMLAccessoryViewController.swift | 62 ---------- .../OPML/ExportOPMLController.swift | 77 ------------- Mac/MainWindow/OPML/ExportOPMLSheet.xib | 104 +++++++++++++++++ .../OPML/ExportOPMLWindowController.swift | 106 ++++++++++++++++++ NetNewsWire.xcodeproj/project.pbxproj | 32 +++--- 7 files changed, 226 insertions(+), 242 deletions(-) delete mode 100644 Mac/MainWindow/OPML/ExportOPMLAccessoryView.xib delete mode 100644 Mac/MainWindow/OPML/ExportOPMLAccessoryViewController.swift delete mode 100644 Mac/MainWindow/OPML/ExportOPMLController.swift create mode 100644 Mac/MainWindow/OPML/ExportOPMLSheet.xib create mode 100644 Mac/MainWindow/OPML/ExportOPMLWindowController.swift diff --git a/Mac/AppDelegate.swift b/Mac/AppDelegate.swift index f971da1ed..73519e152 100644 --- a/Mac/AppDelegate.swift +++ b/Mac/AppDelegate.swift @@ -57,7 +57,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, private var addFeedController: AddFeedController? private var addFolderWindowController: AddFolderWindowController? private var importOPMLController: ImportOPMLWindowController? - private var exportOPMLController: ExportOPMLController? + private var exportOPMLController: ExportOPMLWindowController? private var keyboardShortcutsWindowController: WebViewWindowController? private var inspectorWindowController: InspectorWindowController? private var crashReportWindowController: CrashReportWindowController? // For testing only @@ -438,7 +438,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, return } - exportOPMLController = ExportOPMLController() + exportOPMLController = ExportOPMLWindowController() exportOPMLController?.runSheetOnWindow(mainWindowController!.window!) } diff --git a/Mac/MainWindow/OPML/ExportOPMLAccessoryView.xib b/Mac/MainWindow/OPML/ExportOPMLAccessoryView.xib deleted file mode 100644 index 49376a471..000000000 --- a/Mac/MainWindow/OPML/ExportOPMLAccessoryView.xib +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Choose the account with the subscriptions you’d like to export. Subscriptions are exported in the standard OPML format, which most RSS readers can import. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Mac/MainWindow/OPML/ExportOPMLAccessoryViewController.swift b/Mac/MainWindow/OPML/ExportOPMLAccessoryViewController.swift deleted file mode 100644 index d558d7da0..000000000 --- a/Mac/MainWindow/OPML/ExportOPMLAccessoryViewController.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// ExportOPMLAccessoryViewController.swift -// NetNewsWire -// -// Created by Nate Weaver on 2019-10-20. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import AppKit -import Account - -protocol ExportOPMLAccessoryViewControllerDelegate: class { - func selectedAccountDidChange(_ accessoryViewController: ExportOPMLAccessoryViewController) -} - -class ExportOPMLAccessoryViewController: NSViewController { - - @IBOutlet weak var accountPopUpButton: NSPopUpButton! - weak var delegate: ExportOPMLAccessoryViewControllerDelegate? - - var selectedAccount: Account? { - accountPopUpButton.selectedItem?.representedObject as? Account - } - - init(delegate: ExportOPMLAccessoryViewControllerDelegate) { - super.init(nibName: "ExportOPMLAccessoryView", bundle: nil) - self.delegate = delegate - } - - init() { - preconditionFailure("init() without delegate not implemented by design.") - } - - required init?(coder: NSCoder) { - preconditionFailure("ExportOPMLAccessoryView.init(coder) not implemented by design.") - } - - override func viewDidLoad() { - accountPopUpButton.removeAllItems() - - let menu = NSMenu() - accountPopUpButton.menu = menu - - for oneAccount in AccountManager.shared.sortedAccounts { - - let oneMenuItem = NSMenuItem() - oneMenuItem.title = oneAccount.nameForDisplay - oneMenuItem.representedObject = oneAccount - menu.addItem(oneMenuItem) - - if oneAccount.accountID == AppDefaults.exportOPMLAccountID { - accountPopUpButton.select(oneMenuItem) - } - - } - } - - @IBAction func accountSelected(_ popUpButton: NSPopUpButton) { - delegate!.selectedAccountDidChange(self) - } -} - diff --git a/Mac/MainWindow/OPML/ExportOPMLController.swift b/Mac/MainWindow/OPML/ExportOPMLController.swift deleted file mode 100644 index eb3fae3b0..000000000 --- a/Mac/MainWindow/OPML/ExportOPMLController.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// ExportOPMLController.swift -// NetNewsWire -// -// Created by Maurice Parker on 5/1/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import AppKit -import Account - -class ExportOPMLController { - - weak var savePanel: NSSavePanel? - - func runSheetOnWindow(_ hostWindow: NSWindow) { - - let accessoryViewController = ExportOPMLAccessoryViewController(delegate: self) - let panel = NSSavePanel() - panel.allowedFileTypes = ["opml"] - panel.allowsOtherFileTypes = false - panel.prompt = NSLocalizedString("Export OPML", comment: "Export OPML") - panel.title = NSLocalizedString("Export OPML", comment: "Export OPML") - panel.nameFieldLabel = NSLocalizedString("Export to:", comment: "Export OPML") - panel.message = NSLocalizedString("Choose a location for the exported OPML file.", comment: "Export OPML") - panel.isExtensionHidden = false - panel.accessoryView = accessoryViewController.view - - updateNameFieldStringValueIfAppropriate(savePanel: panel, from: accessoryViewController, force: true) - - savePanel = panel - - panel.beginSheetModal(for: hostWindow) { result in - if result == NSApplication.ModalResponse.OK, let url = panel.url { - DispatchQueue.main.async { - guard let account = accessoryViewController.selectedAccount else { - return - } - let filename = url.lastPathComponent - let opmlString = OPMLExporter.OPMLString(with: account, title: filename) - do { - try opmlString.write(to: url, atomically: true, encoding: .utf8) - } - catch let error as NSError { - NSApplication.shared.presentError(error) - } - } - } - } - } -} - -extension ExportOPMLController: ExportOPMLAccessoryViewControllerDelegate { - - func selectedAccountDidChange(_ accessoryViewController: ExportOPMLAccessoryViewController) { - if let savePanel = savePanel { - self.updateNameFieldStringValueIfAppropriate(savePanel: savePanel, from: accessoryViewController) - } - } -} - -private extension ExportOPMLController { - - func updateNameFieldStringValueIfAppropriate(savePanel panel: NSSavePanel, from accessoryViewController: ExportOPMLAccessoryViewController, force: Bool = false) { - - if !force && !panel.nameFieldStringValue.hasPrefix("Subscriptions-") { - return - } - - guard let account = accessoryViewController.selectedAccount else { - return - } - let accountName = account.nameForDisplay.replacingOccurrences(of: " ", with: "").trimmingCharacters(in: .whitespaces) - panel.nameFieldStringValue = "Subscriptions-\(accountName).opml" - - } -} diff --git a/Mac/MainWindow/OPML/ExportOPMLSheet.xib b/Mac/MainWindow/OPML/ExportOPMLSheet.xib new file mode 100644 index 000000000..e6bc9f85b --- /dev/null +++ b/Mac/MainWindow/OPML/ExportOPMLSheet.xib @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Choose the account with the subscriptions you’d like to export. Subscriptions are exported in the standard OPML format, which most RSS readers can import. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mac/MainWindow/OPML/ExportOPMLWindowController.swift b/Mac/MainWindow/OPML/ExportOPMLWindowController.swift new file mode 100644 index 000000000..cdbda991c --- /dev/null +++ b/Mac/MainWindow/OPML/ExportOPMLWindowController.swift @@ -0,0 +1,106 @@ +// +// ExportOPMLWindowController.swift +// NetNewsWire +// +// Created by Maurice Parker on 5/1/19. +// Copyright © 2019 Ranchero Software. All rights reserved. +// + +import AppKit +import Account + +class ExportOPMLWindowController: NSWindowController { + + @IBOutlet weak var accountPopUpButton: NSPopUpButton! + private weak var hostWindow: NSWindow? + + convenience init() { + self.init(windowNibName: NSNib.Name("ExportOPMLSheet")) + } + + override func windowDidLoad() { + accountPopUpButton.removeAllItems() + + let menu = NSMenu() + accountPopUpButton.menu = menu + + for oneAccount in AccountManager.shared.sortedAccounts { + + let oneMenuItem = NSMenuItem() + oneMenuItem.title = oneAccount.nameForDisplay + oneMenuItem.representedObject = oneAccount + menu.addItem(oneMenuItem) + + if oneAccount.accountID == AppDefaults.exportOPMLAccountID { + accountPopUpButton.select(oneMenuItem) + } + + } + } + + // MARK: API + + func runSheetOnWindow(_ hostWindow: NSWindow) { + + self.hostWindow = hostWindow + + if AccountManager.shared.accounts.count == 1 { + let account = AccountManager.shared.accounts.first! + exportOPML(account: account) + } else { + hostWindow.beginSheet(window!) + } + + } + + // MARK: Actions + + @IBAction func cancel(_ sender: Any) { + hostWindow!.endSheet(window!, returnCode: NSApplication.ModalResponse.cancel) + } + + @IBAction func exportOPML(_ sender: Any) { + + guard let menuItem = accountPopUpButton.selectedItem else { + return + } + + let account = menuItem.representedObject as! Account + AppDefaults.exportOPMLAccountID = account.accountID + hostWindow!.endSheet(window!, returnCode: NSApplication.ModalResponse.OK) + exportOPML(account: account) + + } + + func exportOPML(account: Account) { + + let panel = NSSavePanel() + panel.allowedFileTypes = ["opml"] + panel.allowsOtherFileTypes = false + panel.prompt = NSLocalizedString("Export OPML", comment: "Export OPML") + panel.title = NSLocalizedString("Export OPML", comment: "Export OPML") + panel.nameFieldLabel = NSLocalizedString("Export to:", comment: "Export OPML") + panel.message = NSLocalizedString("Choose a location for the exported OPML file.", comment: "Export OPML") + panel.isExtensionHidden = false + + let accountName = account.nameForDisplay.replacingOccurrences(of: " ", with: "").trimmingCharacters(in: .whitespaces) + panel.nameFieldStringValue = "Subscriptions-\(accountName).opml" + + panel.beginSheetModal(for: hostWindow!) { result in + if result == NSApplication.ModalResponse.OK, let url = panel.url { + DispatchQueue.main.async { + let filename = url.lastPathComponent + let opmlString = OPMLExporter.OPMLString(with: account, title: filename) + do { + try opmlString.write(to: url, atomically: true, encoding: String.Encoding.utf8) + } + catch let error as NSError { + NSApplication.shared.presentError(error) + } + } + } + } + + } + +} diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 1a9fa9f4e..571fbf842 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -23,7 +23,6 @@ 5144EA382279FC6200D19003 /* AccountsAddLocalWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA372279FC6200D19003 /* AccountsAddLocalWindowController.swift */; }; 5144EA3B227A379E00D19003 /* ImportOPMLSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5144EA3A227A379E00D19003 /* ImportOPMLSheet.xib */; }; 5144EA40227A37EC00D19003 /* ImportOPMLWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA3E227A37EC00D19003 /* ImportOPMLWindowController.swift */; }; - 5144EA43227A380F00D19003 /* ExportOPMLController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA42227A380F00D19003 /* ExportOPMLController.swift */; }; 5144EA51227B8E4500D19003 /* AccountsFeedbinWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA4F227B8E4500D19003 /* AccountsFeedbinWindowController.swift */; }; 5144EA52227B8E4500D19003 /* AccountsFeedbin.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5144EA50227B8E4500D19003 /* AccountsFeedbin.xib */; }; 51543685228F6753005E1CDF /* DetailAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51543684228F6753005E1CDF /* DetailAccountViewController.swift */; }; @@ -231,6 +230,8 @@ 849A979F1ED9F130007D329B /* SidebarCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A979E1ED9F130007D329B /* SidebarCell.swift */; }; 849A97A31ED9F180007D329B /* FolderTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97A11ED9F180007D329B /* FolderTreeControllerDelegate.swift */; }; 849C64681ED37A5D003D8FC0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 849C64671ED37A5D003D8FC0 /* Assets.xcassets */; }; + 849C78902362AAFC009A71E4 /* ExportOPMLSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = 849C78872362AAFB009A71E4 /* ExportOPMLSheet.xib */; }; + 849C78922362AB04009A71E4 /* ExportOPMLWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849C78912362AB04009A71E4 /* ExportOPMLWindowController.swift */; }; 849EE70F203919360082A1EA /* AppAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849EE70E203919360082A1EA /* AppAssets.swift */; }; 849EE72120391F560082A1EA /* SharingServicePickerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849EE72020391F560082A1EA /* SharingServicePickerDelegate.swift */; }; 84A14FF320048CA70046AD9A /* SendToMicroBlogCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A14FF220048CA70046AD9A /* SendToMicroBlogCommand.swift */; }; @@ -312,8 +313,6 @@ 84FB9A2F1EDCD6C4003D53B9 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FB9A2D1EDCD6B8003D53B9 /* Sparkle.framework */; }; 84FB9A301EDCD6C4003D53B9 /* Sparkle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84FB9A2D1EDCD6B8003D53B9 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 84FF69B11FC3793300DC198E /* FaviconURLFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */; }; - B24C4F7B235D39D40000B924 /* ExportOPMLAccessoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B24C4F7A235D39D40000B924 /* ExportOPMLAccessoryViewController.swift */; }; - B24C4F85235D39F30000B924 /* ExportOPMLAccessoryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B24C4F84235D39F30000B924 /* ExportOPMLAccessoryView.xib */; }; D553738B20186C20006D8857 /* Article+Scriptability.swift in Sources */ = {isa = PBXBuildFile; fileRef = D553737C20186C1F006D8857 /* Article+Scriptability.swift */; }; D57BE6E0204CD35F00D11AAC /* NSScriptCommand+NetNewsWire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D57BE6DF204CD35F00D11AAC /* NSScriptCommand+NetNewsWire.swift */; }; D5907D7F2004AC00005947E5 /* NSApplication+Scriptability.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5907D7E2004AC00005947E5 /* NSApplication+Scriptability.swift */; }; @@ -687,7 +686,6 @@ 5144EA372279FC6200D19003 /* AccountsAddLocalWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsAddLocalWindowController.swift; sourceTree = ""; }; 5144EA3A227A379E00D19003 /* ImportOPMLSheet.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ImportOPMLSheet.xib; sourceTree = ""; }; 5144EA3E227A37EC00D19003 /* ImportOPMLWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportOPMLWindowController.swift; sourceTree = ""; }; - 5144EA42227A380F00D19003 /* ExportOPMLController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportOPMLController.swift; sourceTree = ""; }; 5144EA4F227B8E4500D19003 /* AccountsFeedbinWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsFeedbinWindowController.swift; sourceTree = ""; }; 5144EA50227B8E4500D19003 /* AccountsFeedbin.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AccountsFeedbin.xib; sourceTree = ""; }; 51543684228F6753005E1CDF /* DetailAccountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailAccountViewController.swift; sourceTree = ""; }; @@ -850,6 +848,8 @@ 849C64601ED37A5D003D8FC0 /* NetNewsWire.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NetNewsWire.app; sourceTree = BUILT_PRODUCTS_DIR; }; 849C64671ED37A5D003D8FC0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 849C64711ED37A5D003D8FC0 /* NetNewsWireTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NetNewsWireTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 849C78872362AAFB009A71E4 /* ExportOPMLSheet.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ExportOPMLSheet.xib; sourceTree = ""; }; + 849C78912362AB04009A71E4 /* ExportOPMLWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportOPMLWindowController.swift; sourceTree = ""; }; 849EE70E203919360082A1EA /* AppAssets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAssets.swift; sourceTree = ""; }; 849EE72020391F560082A1EA /* SharingServicePickerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingServicePickerDelegate.swift; sourceTree = ""; }; 84A14FF220048CA70046AD9A /* SendToMicroBlogCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendToMicroBlogCommand.swift; sourceTree = ""; }; @@ -925,8 +925,6 @@ 84F9EAE4213660A100CF2DE4 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 84FB9A2D1EDCD6B8003D53B9 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Frameworks/Vendor/Sparkle.framework; sourceTree = SOURCE_ROOT; }; 84FF69B01FC3793300DC198E /* FaviconURLFinder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconURLFinder.swift; sourceTree = ""; }; - B24C4F7A235D39D40000B924 /* ExportOPMLAccessoryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportOPMLAccessoryViewController.swift; sourceTree = ""; }; - B24C4F84235D39F30000B924 /* ExportOPMLAccessoryView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ExportOPMLAccessoryView.xib; sourceTree = ""; }; B24EFD482330FF99006C6242 /* NetNewsWire-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NetNewsWire-Bridging-Header.h"; sourceTree = ""; }; B24EFD5923310109006C6242 /* WKPreferencesPrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKPreferencesPrivate.h; sourceTree = ""; }; D553737C20186C1F006D8857 /* Article+Scriptability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Article+Scriptability.swift"; sourceTree = ""; }; @@ -1037,9 +1035,8 @@ children = ( 5144EA3A227A379E00D19003 /* ImportOPMLSheet.xib */, 5144EA3E227A37EC00D19003 /* ImportOPMLWindowController.swift */, - 5144EA42227A380F00D19003 /* ExportOPMLController.swift */, - B24C4F7A235D39D40000B924 /* ExportOPMLAccessoryViewController.swift */, - B24C4F84235D39F30000B924 /* ExportOPMLAccessoryView.xib */, + 849C78872362AAFB009A71E4 /* ExportOPMLSheet.xib */, + 849C78912362AB04009A71E4 /* ExportOPMLWindowController.swift */, ); path = OPML; sourceTree = ""; @@ -1992,12 +1989,12 @@ ORGANIZATIONNAME = "Ranchero Software"; TargetAttributes = { 6581C73220CED60000F4AD34 = { - DevelopmentTeam = M72QZ9W58G; - ProvisioningStyle = Automatic; + DevelopmentTeam = M8L2WTLA8W; + ProvisioningStyle = Manual; }; 840D617B2029031C009BC708 = { CreatedOnToolsVersion = 9.3; - DevelopmentTeam = M72QZ9W58G; + DevelopmentTeam = M8L2WTLA8W; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.BackgroundModes = { @@ -2013,8 +2010,8 @@ }; 849C645F1ED37A5D003D8FC0 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = M72QZ9W58G; - ProvisioningStyle = Automatic; + DevelopmentTeam = M8L2WTLA8W; + ProvisioningStyle = Manual; SystemCapabilities = { com.apple.HardenedRuntime = { enabled = 1; @@ -2023,7 +2020,7 @@ }; 849C64701ED37A5D003D8FC0 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = M72QZ9W58G; + DevelopmentTeam = 9C84TZ7Q6Z; ProvisioningStyle = Automatic; TestTargetID = 849C645F1ED37A5D003D8FC0; }; @@ -2289,8 +2286,8 @@ 5144EA3B227A379E00D19003 /* ImportOPMLSheet.xib in Resources */, 844B5B691FEA20DF00C7C76A /* SidebarKeyboardShortcuts.plist in Resources */, 84A3EE5F223B667F00557320 /* DefaultFeeds.opml in Resources */, - B24C4F85235D39F30000B924 /* ExportOPMLAccessoryView.xib in Resources */, 8459D0F92355794C0050076F /* NNW3OpenPanelAccessoryView.xib in Resources */, + 849C78902362AAFC009A71E4 /* ExportOPMLSheet.xib in Resources */, 84C9FC8222629E4800D921D6 /* Preferences.storyboard in Resources */, 849C64681ED37A5D003D8FC0 /* Assets.xcassets in Resources */, 848362FD2262A30800DA1D35 /* styleSheet.css in Resources */, @@ -2479,6 +2476,7 @@ 84F2D53A1FC2308B00998D64 /* UnreadFeed.swift in Sources */, 845A29221FC9251E007B49E3 /* SidebarCellLayout.swift in Sources */, 84AD1EBA2031649C00BC20B7 /* SmartFeedPasteboardWriter.swift in Sources */, + 849C78922362AB04009A71E4 /* ExportOPMLWindowController.swift in Sources */, 84CC88181FE59CBF00644329 /* SmartFeedsController.swift in Sources */, 849A97661ED9EB96007D329B /* SidebarViewController.swift in Sources */, 849A97641ED9EB96007D329B /* SidebarOutlineView.swift in Sources */, @@ -2500,7 +2498,6 @@ 849A97671ED9EB96007D329B /* UnreadCountView.swift in Sources */, 840BEE4121D70E64009BBAFA /* CrashReportWindowController.swift in Sources */, 8426118A1FCB67AA0086A189 /* FeedIconDownloader.swift in Sources */, - B24C4F7B235D39D40000B924 /* ExportOPMLAccessoryViewController.swift in Sources */, 84C9FC7B22629E1200D921D6 /* AccountsControlsBackgroundView.swift in Sources */, 84162A152038C12C00035290 /* MarkCommandValidationStatus.swift in Sources */, 84E95D241FB1087500552D99 /* ArticlePasteboardWriter.swift in Sources */, @@ -2511,7 +2508,6 @@ 849A97891ED9ECEF007D329B /* ArticleStyle.swift in Sources */, 84FF69B11FC3793300DC198E /* FaviconURLFinder.swift in Sources */, 84B7178C201E66580091657D /* SidebarViewController+ContextualMenus.swift in Sources */, - 5144EA43227A380F00D19003 /* ExportOPMLController.swift in Sources */, 842611A21FCB769D0086A189 /* RSHTMLMetadata+Extension.swift in Sources */, 84A1500520048DDF0046AD9A /* SendToMarsEditCommand.swift in Sources */, D5907DB22004BB37005947E5 /* ScriptingObjectContainer.swift in Sources */,