From fbfdbb04c71f185141ea416be09bcc4c58e19861 Mon Sep 17 00:00:00 2001
From: Maurice Parker <mo@vincode.io>
Date: Thu, 30 Jul 2020 04:54:21 -0500
Subject: [PATCH] Convert Articles, ArticlesDatabase, and SyncDatabase to Swift
 Packages

---
 Articles/.gitignore                           |   5 +
 Articles/Package.swift                        |  19 +
 Articles/README.md                            |   3 +
 .../Sources}/Articles/Article.swift           |   0
 .../Sources}/Articles/ArticleStatus.swift     |   0
 .../Sources}/Articles/Author.swift            |   0
 .../Sources}/Articles/DatabaseID.swift        |   0
 ArticlesDatabase/.gitignore                   |   5 +
 ArticlesDatabase/Package.swift                |  23 +
 ArticlesDatabase/README.md                    |   3 +
 .../ArticlesDatabase/ArticlesDatabase.swift   |   0
 .../ArticlesDatabase/ArticlesTable.swift      |   0
 .../ArticlesDatabase/AuthorsTable.swift       |   0
 .../Sources}/ArticlesDatabase/Constants.swift |   0
 .../Extensions/Article+Database.swift         |   0
 .../Extensions/ArticleStatus+Database.swift   |   0
 .../Extensions/Author+Database.swift          |   0
 .../Extensions}/DatabaseObject+Database.swift |   0
 .../Extensions/ParsedArticle+Database.swift   |   0
 .../RelatedObjectsMap+Database.swift          |   0
 .../FetchAllUnreadCountsOperation.swift       |   0
 .../FetchFeedUnreadCountOperation.swift       |   0
 .../FetchUnreadCountsForFeedsOperation.swift  |   0
 .../ArticlesDatabase/SearchTable.swift        |   0
 .../ArticlesDatabase/StatusesTable.swift      |   0
 .../Articles.xcodeproj/project.pbxproj        | 463 -----------
 .../contents.xcworkspacedata                  |   7 -
 .../xcshareddata/IDEWorkspaceChecks.plist     |   8 -
 .../xcshareddata/xcschemes/Articles.xcscheme  |  76 --
 .../project.pbxproj                           | 717 ------------------
 .../contents.xcworkspacedata                  |   7 -
 .../xcshareddata/IDEWorkspaceChecks.plist     |   8 -
 .../xcschemes/ArticlesDatabase.xcscheme       |  67 --
 .../SyncDatabase.xcodeproj/project.pbxproj    | 298 --------
 .../contents.xcworkspacedata                  |   7 -
 .../xcshareddata/IDEWorkspaceChecks.plist     |   8 -
 NetNewsWire.xcodeproj/project.pbxproj         | 268 +------
 SyncDatabase/.gitignore                       |   5 +
 SyncDatabase/Package.swift                    |  19 +
 SyncDatabase/README.md                        |   3 +
 .../Sources}/SyncDatabase/Constants.swift     |   0
 .../Sources}/SyncDatabase/SyncDatabase.swift  |   0
 .../Sources}/SyncDatabase/SyncStatus.swift    |   0
 .../SyncDatabase/SyncStatusTable.swift        |   0
 44 files changed, 91 insertions(+), 1928 deletions(-)
 create mode 100644 Articles/.gitignore
 create mode 100644 Articles/Package.swift
 create mode 100644 Articles/README.md
 rename {Frameworks => Articles/Sources}/Articles/Article.swift (100%)
 rename {Frameworks => Articles/Sources}/Articles/ArticleStatus.swift (100%)
 rename {Frameworks => Articles/Sources}/Articles/Author.swift (100%)
 rename {Frameworks => Articles/Sources}/Articles/DatabaseID.swift (100%)
 create mode 100644 ArticlesDatabase/.gitignore
 create mode 100644 ArticlesDatabase/Package.swift
 create mode 100644 ArticlesDatabase/README.md
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/ArticlesDatabase.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/ArticlesTable.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/AuthorsTable.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Constants.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Extensions/Article+Database.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Extensions/ArticleStatus+Database.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Extensions/Author+Database.swift (100%)
 rename {Frameworks/ArticlesDatabase => ArticlesDatabase/Sources/ArticlesDatabase/Extensions}/DatabaseObject+Database.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Extensions/ParsedArticle+Database.swift (100%)
 rename {Frameworks/ArticlesDatabase => ArticlesDatabase/Sources/ArticlesDatabase/Extensions}/RelatedObjectsMap+Database.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Operations/FetchAllUnreadCountsOperation.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Operations/FetchFeedUnreadCountOperation.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/Operations/FetchUnreadCountsForFeedsOperation.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/SearchTable.swift (100%)
 rename {Frameworks => ArticlesDatabase/Sources}/ArticlesDatabase/StatusesTable.swift (100%)
 delete mode 100644 Frameworks/Articles/Articles.xcodeproj/project.pbxproj
 delete mode 100644 Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/contents.xcworkspacedata
 delete mode 100644 Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
 delete mode 100644 Frameworks/Articles/Articles.xcodeproj/xcshareddata/xcschemes/Articles.xcscheme
 delete mode 100644 Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.pbxproj
 delete mode 100644 Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
 delete mode 100644 Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
 delete mode 100644 Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/xcshareddata/xcschemes/ArticlesDatabase.xcscheme
 delete mode 100644 Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.pbxproj
 delete mode 100644 Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
 delete mode 100644 Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
 create mode 100644 SyncDatabase/.gitignore
 create mode 100644 SyncDatabase/Package.swift
 create mode 100644 SyncDatabase/README.md
 rename {Frameworks => SyncDatabase/Sources}/SyncDatabase/Constants.swift (100%)
 rename {Frameworks => SyncDatabase/Sources}/SyncDatabase/SyncDatabase.swift (100%)
 rename {Frameworks => SyncDatabase/Sources}/SyncDatabase/SyncStatus.swift (100%)
 rename {Frameworks => SyncDatabase/Sources}/SyncDatabase/SyncStatusTable.swift (100%)

diff --git a/Articles/.gitignore b/Articles/.gitignore
new file mode 100644
index 000000000..95c432091
--- /dev/null
+++ b/Articles/.gitignore
@@ -0,0 +1,5 @@
+.DS_Store
+/.build
+/Packages
+/*.xcodeproj
+xcuserdata/
diff --git a/Articles/Package.swift b/Articles/Package.swift
new file mode 100644
index 000000000..980a6ada3
--- /dev/null
+++ b/Articles/Package.swift
@@ -0,0 +1,19 @@
+// swift-tools-version:5.3
+import PackageDescription
+
+let package = Package(
+    name: "Articles",
+    products: [
+        .library(
+            name: "Articles",
+            targets: ["Articles"]),
+    ],
+    dependencies: [
+		.package(url: "https://github.com/Ranchero-Software/RSCore.git", .upToNextMajor(from: "1.0.0-beta1")),
+    ],
+    targets: [
+        .target(
+            name: "Articles",
+            dependencies: []),
+    ]
+)
diff --git a/Articles/README.md b/Articles/README.md
new file mode 100644
index 000000000..47ce387aa
--- /dev/null
+++ b/Articles/README.md
@@ -0,0 +1,3 @@
+# Articles
+
+A description of this package.
diff --git a/Frameworks/Articles/Article.swift b/Articles/Sources/Articles/Article.swift
similarity index 100%
rename from Frameworks/Articles/Article.swift
rename to Articles/Sources/Articles/Article.swift
diff --git a/Frameworks/Articles/ArticleStatus.swift b/Articles/Sources/Articles/ArticleStatus.swift
similarity index 100%
rename from Frameworks/Articles/ArticleStatus.swift
rename to Articles/Sources/Articles/ArticleStatus.swift
diff --git a/Frameworks/Articles/Author.swift b/Articles/Sources/Articles/Author.swift
similarity index 100%
rename from Frameworks/Articles/Author.swift
rename to Articles/Sources/Articles/Author.swift
diff --git a/Frameworks/Articles/DatabaseID.swift b/Articles/Sources/Articles/DatabaseID.swift
similarity index 100%
rename from Frameworks/Articles/DatabaseID.swift
rename to Articles/Sources/Articles/DatabaseID.swift
diff --git a/ArticlesDatabase/.gitignore b/ArticlesDatabase/.gitignore
new file mode 100644
index 000000000..95c432091
--- /dev/null
+++ b/ArticlesDatabase/.gitignore
@@ -0,0 +1,5 @@
+.DS_Store
+/.build
+/Packages
+/*.xcodeproj
+xcuserdata/
diff --git a/ArticlesDatabase/Package.swift b/ArticlesDatabase/Package.swift
new file mode 100644
index 000000000..856927d37
--- /dev/null
+++ b/ArticlesDatabase/Package.swift
@@ -0,0 +1,23 @@
+// swift-tools-version:5.3
+// The swift-tools-version declares the minimum version of Swift required to build this package.
+
+import PackageDescription
+
+let package = Package(
+    name: "ArticlesDatabase",
+    products: [
+        .library(
+            name: "ArticlesDatabase",
+            targets: ["ArticlesDatabase"]),
+    ],
+    dependencies: [
+		.package(url: "https://github.com/Ranchero-Software/RSCore.git", .upToNextMajor(from: "1.0.0-beta1")),
+		.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0-beta1")),
+		.package(url: "https://github.com/Ranchero-Software/RSParser.git", .upToNextMajor(from: "2.0.0-beta1")),
+    ],
+    targets: [
+        .target(
+            name: "ArticlesDatabase",
+            dependencies: []),
+    ]
+)
diff --git a/ArticlesDatabase/README.md b/ArticlesDatabase/README.md
new file mode 100644
index 000000000..aa8761526
--- /dev/null
+++ b/ArticlesDatabase/README.md
@@ -0,0 +1,3 @@
+# ArticlesDatabase
+
+A description of this package.
diff --git a/Frameworks/ArticlesDatabase/ArticlesDatabase.swift b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/ArticlesDatabase.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift
diff --git a/Frameworks/ArticlesDatabase/ArticlesTable.swift b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/ArticlesTable.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift
diff --git a/Frameworks/ArticlesDatabase/AuthorsTable.swift b/ArticlesDatabase/Sources/ArticlesDatabase/AuthorsTable.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/AuthorsTable.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/AuthorsTable.swift
diff --git a/Frameworks/ArticlesDatabase/Constants.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Constants.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Constants.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Constants.swift
diff --git a/Frameworks/ArticlesDatabase/Extensions/Article+Database.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Article+Database.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Extensions/Article+Database.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Article+Database.swift
diff --git a/Frameworks/ArticlesDatabase/Extensions/ArticleStatus+Database.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/ArticleStatus+Database.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Extensions/ArticleStatus+Database.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Extensions/ArticleStatus+Database.swift
diff --git a/Frameworks/ArticlesDatabase/Extensions/Author+Database.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Author+Database.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Extensions/Author+Database.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Author+Database.swift
diff --git a/Frameworks/ArticlesDatabase/DatabaseObject+Database.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/DatabaseObject+Database.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/DatabaseObject+Database.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Extensions/DatabaseObject+Database.swift
diff --git a/Frameworks/ArticlesDatabase/Extensions/ParsedArticle+Database.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/ParsedArticle+Database.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Extensions/ParsedArticle+Database.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Extensions/ParsedArticle+Database.swift
diff --git a/Frameworks/ArticlesDatabase/RelatedObjectsMap+Database.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/RelatedObjectsMap+Database.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/RelatedObjectsMap+Database.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Extensions/RelatedObjectsMap+Database.swift
diff --git a/Frameworks/ArticlesDatabase/Operations/FetchAllUnreadCountsOperation.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Operations/FetchAllUnreadCountsOperation.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Operations/FetchAllUnreadCountsOperation.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Operations/FetchAllUnreadCountsOperation.swift
diff --git a/Frameworks/ArticlesDatabase/Operations/FetchFeedUnreadCountOperation.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Operations/FetchFeedUnreadCountOperation.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Operations/FetchFeedUnreadCountOperation.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Operations/FetchFeedUnreadCountOperation.swift
diff --git a/Frameworks/ArticlesDatabase/Operations/FetchUnreadCountsForFeedsOperation.swift b/ArticlesDatabase/Sources/ArticlesDatabase/Operations/FetchUnreadCountsForFeedsOperation.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/Operations/FetchUnreadCountsForFeedsOperation.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/Operations/FetchUnreadCountsForFeedsOperation.swift
diff --git a/Frameworks/ArticlesDatabase/SearchTable.swift b/ArticlesDatabase/Sources/ArticlesDatabase/SearchTable.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/SearchTable.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/SearchTable.swift
diff --git a/Frameworks/ArticlesDatabase/StatusesTable.swift b/ArticlesDatabase/Sources/ArticlesDatabase/StatusesTable.swift
similarity index 100%
rename from Frameworks/ArticlesDatabase/StatusesTable.swift
rename to ArticlesDatabase/Sources/ArticlesDatabase/StatusesTable.swift
diff --git a/Frameworks/Articles/Articles.xcodeproj/project.pbxproj b/Frameworks/Articles/Articles.xcodeproj/project.pbxproj
deleted file mode 100644
index 143c682bb..000000000
--- a/Frameworks/Articles/Articles.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,463 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 52;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		5102AE8724D180E50050839C /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 5102AE8624D180E50050839C /* RSCore */; };
-		5102AE8824D180E50050839C /* RSCore in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 5102AE8624D180E50050839C /* RSCore */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		840405CA1F1A8E4300DF0296 /* DatabaseID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840405C91F1A8E4300DF0296 /* DatabaseID.swift */; };
-		844BEE651F0AB3C9004AB7CD /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 844BEE5B1F0AB3C8004AB7CD /* Articles.framework */; };
-		844BEE6A1F0AB3C9004AB7CD /* DataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844BEE691F0AB3C9004AB7CD /* DataTests.swift */; };
-		844BEE7F1F0AB4CA004AB7CD /* Article.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844BEE7E1F0AB4CA004AB7CD /* Article.swift */; };
-		844BEE811F0AB4D0004AB7CD /* Author.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844BEE801F0AB4D0004AB7CD /* Author.swift */; };
-		844BEE851F0AB4DB004AB7CD /* ArticleStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844BEE841F0AB4DB004AB7CD /* ArticleStatus.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		844BEE661F0AB3C9004AB7CD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 844BEE521F0AB3C8004AB7CD /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 844BEE5A1F0AB3C8004AB7CD;
-			remoteInfo = Data;
-		};
-		844BEEA21F0AB512004AB7CD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 844BEE9C1F0AB512004AB7CD /* RSCore.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84CFF4F41AC3C69700CEA6C8;
-			remoteInfo = RSCore;
-		};
-		844BEEA41F0AB512004AB7CD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 844BEE9C1F0AB512004AB7CD /* RSCore.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84CFF4FF1AC3C69700CEA6C8;
-			remoteInfo = RSCoreTests;
-		};
-		844BEEA61F0AB512004AB7CD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 844BEE9C1F0AB512004AB7CD /* RSCore.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 842DD7BC1E14993900E061EB;
-			remoteInfo = RSCoreiOS;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		5102AE8924D180E60050839C /* Embed Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				5102AE8824D180E50050839C /* RSCore in Embed Frameworks */,
-			);
-			name = "Embed Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		840405C91F1A8E4300DF0296 /* DatabaseID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseID.swift; sourceTree = "<group>"; };
-		844BEE5B1F0AB3C8004AB7CD /* Articles.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Articles.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		844BEE641F0AB3C9004AB7CD /* ArticlesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ArticlesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		844BEE691F0AB3C9004AB7CD /* DataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTests.swift; sourceTree = "<group>"; };
-		844BEE6B1F0AB3C9004AB7CD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		844BEE761F0AB444004AB7CD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		844BEE7E1F0AB4CA004AB7CD /* Article.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Article.swift; sourceTree = "<group>"; };
-		844BEE801F0AB4D0004AB7CD /* Author.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Author.swift; sourceTree = "<group>"; };
-		844BEE841F0AB4DB004AB7CD /* ArticleStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArticleStatus.swift; sourceTree = "<group>"; };
-		844BEE9C1F0AB512004AB7CD /* RSCore.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSCore.xcodeproj; path = ../RSCore/RSCore.xcodeproj; sourceTree = "<group>"; };
-		848E3EB320FBCFAE0004B7ED /* RSCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		84C490F51F705D5F003131D2 /* RSWeb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSWeb.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		D511EEE020242DFB00712EC3 /* ArticlesDataTests_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ArticlesDataTests_target.xcconfig; sourceTree = "<group>"; };
-		D511EEE120242DFB00712EC3 /* Articles_project_debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Articles_project_debug.xcconfig; sourceTree = "<group>"; };
-		D511EEE220242DFB00712EC3 /* Articles_project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Articles_project.xcconfig; sourceTree = "<group>"; };
-		D511EEE320242DFB00712EC3 /* Articles_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Articles_target.xcconfig; sourceTree = "<group>"; };
-		D511EEE420242DFB00712EC3 /* Articles_project_release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Articles_project_release.xcconfig; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		844BEE571F0AB3C8004AB7CD /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5102AE8724D180E50050839C /* RSCore in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		844BEE611F0AB3C9004AB7CD /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				844BEE651F0AB3C9004AB7CD /* Articles.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		844BEE511F0AB3C8004AB7CD = {
-			isa = PBXGroup;
-			children = (
-				844BEE7E1F0AB4CA004AB7CD /* Article.swift */,
-				844BEE801F0AB4D0004AB7CD /* Author.swift */,
-				844BEE841F0AB4DB004AB7CD /* ArticleStatus.swift */,
-				840405C91F1A8E4300DF0296 /* DatabaseID.swift */,
-				844BEE761F0AB444004AB7CD /* Info.plist */,
-				844BEE681F0AB3C9004AB7CD /* DataTests */,
-				844BEE5C1F0AB3C8004AB7CD /* Products */,
-				844BEEA81F0AB520004AB7CD /* Frameworks */,
-				D511EEE520242DFB00712EC3 /* xcconfig */,
-			);
-			sourceTree = "<group>";
-			usesTabs = 1;
-		};
-		844BEE5C1F0AB3C8004AB7CD /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				844BEE5B1F0AB3C8004AB7CD /* Articles.framework */,
-				844BEE641F0AB3C9004AB7CD /* ArticlesTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		844BEE681F0AB3C9004AB7CD /* DataTests */ = {
-			isa = PBXGroup;
-			children = (
-				844BEE691F0AB3C9004AB7CD /* DataTests.swift */,
-				844BEE6B1F0AB3C9004AB7CD /* Info.plist */,
-			);
-			path = DataTests;
-			sourceTree = "<group>";
-		};
-		844BEE9D1F0AB512004AB7CD /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				844BEEA31F0AB512004AB7CD /* RSCore.framework */,
-				844BEEA51F0AB512004AB7CD /* RSCoreTests.xctest */,
-				844BEEA71F0AB512004AB7CD /* RSCore.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		844BEEA81F0AB520004AB7CD /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				848E3EB320FBCFAE0004B7ED /* RSCore.framework */,
-				84C490F51F705D5F003131D2 /* RSWeb.framework */,
-				844BEE9C1F0AB512004AB7CD /* RSCore.xcodeproj */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		D511EEE520242DFB00712EC3 /* xcconfig */ = {
-			isa = PBXGroup;
-			children = (
-				D511EEE220242DFB00712EC3 /* Articles_project.xcconfig */,
-				D511EEE120242DFB00712EC3 /* Articles_project_debug.xcconfig */,
-				D511EEE420242DFB00712EC3 /* Articles_project_release.xcconfig */,
-				D511EEE320242DFB00712EC3 /* Articles_target.xcconfig */,
-				D511EEE020242DFB00712EC3 /* ArticlesDataTests_target.xcconfig */,
-			);
-			path = xcconfig;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		844BEE581F0AB3C8004AB7CD /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		844BEE5A1F0AB3C8004AB7CD /* Articles */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 844BEE6F1F0AB3C9004AB7CD /* Build configuration list for PBXNativeTarget "Articles" */;
-			buildPhases = (
-				844BEE561F0AB3C8004AB7CD /* Sources */,
-				844BEE571F0AB3C8004AB7CD /* Frameworks */,
-				844BEE581F0AB3C8004AB7CD /* Headers */,
-				844BEE591F0AB3C8004AB7CD /* Resources */,
-				51C8F34B234FB11A0048ED95 /* Run Script: Verify No Build Settings */,
-				5102AE8924D180E60050839C /* Embed Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = Articles;
-			packageProductDependencies = (
-				5102AE8624D180E50050839C /* RSCore */,
-			);
-			productName = Data;
-			productReference = 844BEE5B1F0AB3C8004AB7CD /* Articles.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		844BEE631F0AB3C9004AB7CD /* ArticlesTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 844BEE721F0AB3C9004AB7CD /* Build configuration list for PBXNativeTarget "ArticlesTests" */;
-			buildPhases = (
-				844BEE601F0AB3C9004AB7CD /* Sources */,
-				844BEE611F0AB3C9004AB7CD /* Frameworks */,
-				844BEE621F0AB3C9004AB7CD /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				844BEE671F0AB3C9004AB7CD /* PBXTargetDependency */,
-			);
-			name = ArticlesTests;
-			productName = DataTests;
-			productReference = 844BEE641F0AB3C9004AB7CD /* ArticlesTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		844BEE521F0AB3C8004AB7CD /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastSwiftUpdateCheck = 0830;
-				LastUpgradeCheck = 0930;
-				ORGANIZATIONNAME = "Ranchero Software";
-				TargetAttributes = {
-					844BEE5A1F0AB3C8004AB7CD = {
-						CreatedOnToolsVersion = 8.3.2;
-						DevelopmentTeam = SHJK2V3AJG;
-						LastSwiftMigration = 0830;
-						ProvisioningStyle = Automatic;
-					};
-					844BEE631F0AB3C9004AB7CD = {
-						CreatedOnToolsVersion = 8.3.2;
-						DevelopmentTeam = SHJK2V3AJG;
-						ProvisioningStyle = Automatic;
-					};
-				};
-			};
-			buildConfigurationList = 844BEE551F0AB3C8004AB7CD /* Build configuration list for PBXProject "Articles" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				English,
-				en,
-			);
-			mainGroup = 844BEE511F0AB3C8004AB7CD;
-			packageReferences = (
-				5102AE8524D180E50050839C /* XCRemoteSwiftPackageReference "RSCore" */,
-			);
-			productRefGroup = 844BEE5C1F0AB3C8004AB7CD /* Products */;
-			projectDirPath = "";
-			projectReferences = (
-				{
-					ProductGroup = 844BEE9D1F0AB512004AB7CD /* Products */;
-					ProjectRef = 844BEE9C1F0AB512004AB7CD /* RSCore.xcodeproj */;
-				},
-			);
-			projectRoot = "";
-			targets = (
-				844BEE5A1F0AB3C8004AB7CD /* Articles */,
-				844BEE631F0AB3C9004AB7CD /* ArticlesTests */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXReferenceProxy section */
-		844BEEA31F0AB512004AB7CD /* RSCore.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = RSCore.framework;
-			remoteRef = 844BEEA21F0AB512004AB7CD /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		844BEEA51F0AB512004AB7CD /* RSCoreTests.xctest */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.cfbundle;
-			path = RSCoreTests.xctest;
-			remoteRef = 844BEEA41F0AB512004AB7CD /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		844BEEA71F0AB512004AB7CD /* RSCore.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = RSCore.framework;
-			remoteRef = 844BEEA61F0AB512004AB7CD /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-/* End PBXReferenceProxy section */
-
-/* Begin PBXResourcesBuildPhase section */
-		844BEE591F0AB3C8004AB7CD /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		844BEE621F0AB3C9004AB7CD /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		51C8F34B234FB11A0048ED95 /* Run Script: Verify No Build Settings */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputFileListPaths = (
-			);
-			inputPaths = (
-			);
-			name = "Run Script: Verify No Build Settings";
-			outputFileListPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "if [ \"$ENABLE_PREVIEWS\" = \"YES\" ]; then exit 0; fi\n\nxcrun -sdk macosx swiftc -target x86_64-macosx10.11  ../../buildscripts/VerifyNoBuildSettings.swift -o $CONFIGURATION_TEMP_DIR/VerifyNoBS\n$CONFIGURATION_TEMP_DIR/VerifyNoBS ${PROJECT_NAME}.xcodeproj/project.pbxproj\n\nif [ $? -ne 0 ]\nthen\n   echo \"error: Build Setting were found in the project.pbxproj file.  Most likely you didn't intend to change this file and should revert it.\"\n   exit 1\nfi\n";
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		844BEE561F0AB3C8004AB7CD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				844BEE7F1F0AB4CA004AB7CD /* Article.swift in Sources */,
-				844BEE811F0AB4D0004AB7CD /* Author.swift in Sources */,
-				840405CA1F1A8E4300DF0296 /* DatabaseID.swift in Sources */,
-				844BEE851F0AB4DB004AB7CD /* ArticleStatus.swift in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		844BEE601F0AB3C9004AB7CD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				844BEE6A1F0AB3C9004AB7CD /* DataTests.swift in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		844BEE671F0AB3C9004AB7CD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 844BEE5A1F0AB3C8004AB7CD /* Articles */;
-			targetProxy = 844BEE661F0AB3C9004AB7CD /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
-		844BEE6D1F0AB3C9004AB7CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE120242DFB00712EC3 /* Articles_project_debug.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		844BEE6E1F0AB3C9004AB7CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE420242DFB00712EC3 /* Articles_project_release.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-		844BEE701F0AB3C9004AB7CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE320242DFB00712EC3 /* Articles_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		844BEE711F0AB3C9004AB7CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE320242DFB00712EC3 /* Articles_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-		844BEE731F0AB3C9004AB7CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE020242DFB00712EC3 /* ArticlesDataTests_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		844BEE741F0AB3C9004AB7CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE020242DFB00712EC3 /* ArticlesDataTests_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		844BEE551F0AB3C8004AB7CD /* Build configuration list for PBXProject "Articles" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				844BEE6D1F0AB3C9004AB7CD /* Debug */,
-				844BEE6E1F0AB3C9004AB7CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		844BEE6F1F0AB3C9004AB7CD /* Build configuration list for PBXNativeTarget "Articles" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				844BEE701F0AB3C9004AB7CD /* Debug */,
-				844BEE711F0AB3C9004AB7CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		844BEE721F0AB3C9004AB7CD /* Build configuration list for PBXNativeTarget "ArticlesTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				844BEE731F0AB3C9004AB7CD /* Debug */,
-				844BEE741F0AB3C9004AB7CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
-		5102AE8524D180E50050839C /* XCRemoteSwiftPackageReference "RSCore" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/Ranchero-Software/RSCore.git";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = "1.0.0-beta1";
-			};
-		};
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
-		5102AE8624D180E50050839C /* RSCore */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = 5102AE8524D180E50050839C /* XCRemoteSwiftPackageReference "RSCore" */;
-			productName = RSCore;
-		};
-/* End XCSwiftPackageProductDependency section */
-	};
-	rootObject = 844BEE521F0AB3C8004AB7CD /* Project object */;
-}
diff --git a/Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 958714b4f..000000000
--- a/Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "self:Data.xcodeproj">
-   </FileRef>
-</Workspace>
diff --git a/Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/Frameworks/Articles/Articles.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>
diff --git a/Frameworks/Articles/Articles.xcodeproj/xcshareddata/xcschemes/Articles.xcscheme b/Frameworks/Articles/Articles.xcodeproj/xcshareddata/xcschemes/Articles.xcscheme
deleted file mode 100644
index dcb6315cd..000000000
--- a/Frameworks/Articles/Articles.xcodeproj/xcshareddata/xcschemes/Articles.xcscheme
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1000"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "844BEE5A1F0AB3C8004AB7CD"
-               BuildableName = "Articles.framework"
-               BlueprintName = "Articles"
-               ReferencedContainer = "container:Articles.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Test"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "844BEE5A1F0AB3C8004AB7CD"
-            BuildableName = "Articles.framework"
-            BlueprintName = "Articles"
-            ReferencedContainer = "container:Articles.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "844BEE5A1F0AB3C8004AB7CD"
-            BuildableName = "Articles.framework"
-            BlueprintName = "Articles"
-            ReferencedContainer = "container:Articles.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.pbxproj b/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.pbxproj
deleted file mode 100644
index d71bf9c7f..000000000
--- a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,717 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 52;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		5102AE8C24D181080050839C /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 5102AE8B24D181080050839C /* RSCore */; };
-		5102AE8D24D181080050839C /* RSCore in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 5102AE8B24D181080050839C /* RSCore */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		51B0DF1724D24EC4000AD99E /* RSDatabase in Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DF1624D24EC4000AD99E /* RSDatabase */; };
-		51B0DF1824D24EC4000AD99E /* RSDatabase in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DF1624D24EC4000AD99E /* RSDatabase */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		51B0DF2924D2C837000AD99E /* RSParser in Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DF2824D2C837000AD99E /* RSParser */; };
-		51B0DF2A24D2C837000AD99E /* RSParser in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DF2824D2C837000AD99E /* RSParser */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		84116B8923E01E86000B2E98 /* FetchFeedUnreadCountOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84116B8823E01E86000B2E98 /* FetchFeedUnreadCountOperation.swift */; };
-		841D4D742106B59F00DD04E6 /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841D4D732106B59F00DD04E6 /* Articles.framework */; };
-		84288A001F6A3C4400395871 /* DatabaseObject+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842889FF1F6A3C4400395871 /* DatabaseObject+Database.swift */; };
-		84288A021F6A3D8000395871 /* RelatedObjectsMap+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84288A011F6A3D8000395871 /* RelatedObjectsMap+Database.swift */; };
-		843577221F749C6200F460AE /* ArticleChangesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843577211F749C6200F460AE /* ArticleChangesTests.swift */; };
-		843702C31F70D15D00B18807 /* ParsedArticle+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843702C21F70D15D00B18807 /* ParsedArticle+Database.swift */; };
-		843CB9961F34174100EE6581 /* Author+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F20F901F1810DD00D8E682 /* Author+Database.swift */; };
-		844BEE411F0AB3AB004AB7CD /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 844BEE371F0AB3AA004AB7CD /* ArticlesDatabase.framework */; };
-		844BEE461F0AB3AB004AB7CD /* DatabaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844BEE451F0AB3AB004AB7CD /* DatabaseTests.swift */; };
-		845580671F0AEBCD003CCFA1 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845580661F0AEBCD003CCFA1 /* Constants.swift */; };
-		845580761F0AF670003CCFA1 /* Article+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845580751F0AF670003CCFA1 /* Article+Database.swift */; };
-		8455807A1F0AF67D003CCFA1 /* ArticleStatus+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845580791F0AF67D003CCFA1 /* ArticleStatus+Database.swift */; };
-		84611DCC23E62FE200BC630C /* FetchUnreadCountsForFeedsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84611DCB23E62FE200BC630C /* FetchUnreadCountsForFeedsOperation.swift */; };
-		8477ACBC2221E76F00DF7F37 /* SearchTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8477ACBB2221E76F00DF7F37 /* SearchTable.swift */; };
-		84C242C923DEB45C00C50516 /* FetchAllUnreadCountsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C242C823DEB45C00C50516 /* FetchAllUnreadCountsOperation.swift */; };
-		84E156EA1F0AB80500F8CC05 /* ArticlesDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E156E91F0AB80500F8CC05 /* ArticlesDatabase.swift */; };
-		84E156EC1F0AB80E00F8CC05 /* ArticlesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E156EB1F0AB80E00F8CC05 /* ArticlesTable.swift */; };
-		84E156EE1F0AB81400F8CC05 /* StatusesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E156ED1F0AB81400F8CC05 /* StatusesTable.swift */; };
-		84F20F8F1F180D8700D8E682 /* AuthorsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F20F8E1F180D8700D8E682 /* AuthorsTable.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		844BEE421F0AB3AB004AB7CD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 844BEE2E1F0AB3AA004AB7CD /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 844BEE361F0AB3AA004AB7CD;
-			remoteInfo = Database;
-		};
-		846146231F0ABC7400870CB3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 8461461E1F0ABC7300870CB3 /* RSParser.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84FF5F841EFA285800C15A01;
-			remoteInfo = RSParser;
-		};
-		846146251F0ABC7400870CB3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 8461461E1F0ABC7300870CB3 /* RSParser.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84FF5F8D1EFA285800C15A01;
-			remoteInfo = RSParserTests;
-		};
-		84BB4B971F119C4900858766 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84BB4B8F1F119C4900858766 /* RSCore.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84CFF4F41AC3C69700CEA6C8;
-			remoteInfo = RSCore;
-		};
-		84BB4B991F119C4900858766 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84BB4B8F1F119C4900858766 /* RSCore.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84CFF4FF1AC3C69700CEA6C8;
-			remoteInfo = RSCoreTests;
-		};
-		84BB4B9B1F119C4900858766 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84BB4B8F1F119C4900858766 /* RSCore.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 842DD7BC1E14993900E061EB;
-			remoteInfo = RSCoreiOS;
-		};
-		84E156F71F0AB83600F8CC05 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84E156F11F0AB83600F8CC05 /* Data.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 844BEE5B1F0AB3C8004AB7CD;
-			remoteInfo = Data;
-		};
-		84E156F91F0AB83600F8CC05 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84E156F11F0AB83600F8CC05 /* Data.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 844BEE641F0AB3C9004AB7CD;
-			remoteInfo = DataTests;
-		};
-		84E157061F0AB89B00F8CC05 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84E157001F0AB89B00F8CC05 /* RSDatabase.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84F22C551B52E0D9000060CE;
-			remoteInfo = RSDatabase;
-		};
-		84E157081F0AB89B00F8CC05 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84E157001F0AB89B00F8CC05 /* RSDatabase.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 84F22C5F1B52E0D9000060CE;
-			remoteInfo = RSDatabaseTests;
-		};
-		84E1570A1F0AB89B00F8CC05 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 84E157001F0AB89B00F8CC05 /* RSDatabase.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 8400ABF71E0CFBD800AA7C57;
-			remoteInfo = RSDatabaseiOS;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		5102AE8E24D181090050839C /* Embed Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				51B0DF2A24D2C837000AD99E /* RSParser in Embed Frameworks */,
-				51B0DF1824D24EC4000AD99E /* RSDatabase in Embed Frameworks */,
-				5102AE8D24D181080050839C /* RSCore in Embed Frameworks */,
-			);
-			name = "Embed Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		51C451FE2264CF2100C03939 /* RSParser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSParser.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		84116B8823E01E86000B2E98 /* FetchFeedUnreadCountOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchFeedUnreadCountOperation.swift; sourceTree = "<group>"; };
-		841D4D732106B59F00DD04E6 /* Articles.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Articles.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		842889FF1F6A3C4400395871 /* DatabaseObject+Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DatabaseObject+Database.swift"; sourceTree = "<group>"; };
-		84288A011F6A3D8000395871 /* RelatedObjectsMap+Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RelatedObjectsMap+Database.swift"; sourceTree = "<group>"; };
-		843577211F749C6200F460AE /* ArticleChangesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleChangesTests.swift; sourceTree = "<group>"; };
-		843702C21F70D15D00B18807 /* ParsedArticle+Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "ParsedArticle+Database.swift"; path = "Extensions/ParsedArticle+Database.swift"; sourceTree = "<group>"; };
-		844BEE371F0AB3AA004AB7CD /* ArticlesDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ArticlesDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		844BEE401F0AB3AB004AB7CD /* ArticlesDatabaseTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ArticlesDatabaseTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		844BEE451F0AB3AB004AB7CD /* DatabaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseTests.swift; sourceTree = "<group>"; };
-		844BEE471F0AB3AB004AB7CD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		845580661F0AEBCD003CCFA1 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
-		845580751F0AF670003CCFA1 /* Article+Database.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Article+Database.swift"; path = "Extensions/Article+Database.swift"; sourceTree = "<group>"; };
-		845580791F0AF67D003CCFA1 /* ArticleStatus+Database.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "ArticleStatus+Database.swift"; path = "Extensions/ArticleStatus+Database.swift"; sourceTree = "<group>"; };
-		84611DCB23E62FE200BC630C /* FetchUnreadCountsForFeedsOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchUnreadCountsForFeedsOperation.swift; sourceTree = "<group>"; };
-		8461461E1F0ABC7300870CB3 /* RSParser.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSParser.xcodeproj; path = ../RSParser/RSParser.xcodeproj; sourceTree = "<group>"; };
-		8477ACBB2221E76F00DF7F37 /* SearchTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTable.swift; sourceTree = "<group>"; };
-		848E3EB820FBCFD20004B7ED /* RSCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		848E3EBA20FBCFD80004B7ED /* RSParser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSParser.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		848E3EBC20FBCFDE0004B7ED /* RSDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		84BB4B8F1F119C4900858766 /* RSCore.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSCore.xcodeproj; path = ../RSCore/RSCore.xcodeproj; sourceTree = "<group>"; };
-		84C242C823DEB45C00C50516 /* FetchAllUnreadCountsOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchAllUnreadCountsOperation.swift; sourceTree = "<group>"; };
-		84E156E81F0AB75600F8CC05 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		84E156E91F0AB80500F8CC05 /* ArticlesDatabase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArticlesDatabase.swift; sourceTree = "<group>"; };
-		84E156EB1F0AB80E00F8CC05 /* ArticlesTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArticlesTable.swift; sourceTree = "<group>"; };
-		84E156ED1F0AB81400F8CC05 /* StatusesTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusesTable.swift; sourceTree = "<group>"; };
-		84E156F11F0AB83600F8CC05 /* Data.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Data.xcodeproj; path = ../Data/Data.xcodeproj; sourceTree = "<group>"; };
-		84E157001F0AB89B00F8CC05 /* RSDatabase.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSDatabase.xcodeproj; path = ../RSDatabase/RSDatabase.xcodeproj; sourceTree = "<group>"; };
-		84F20F8E1F180D8700D8E682 /* AuthorsTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorsTable.swift; sourceTree = "<group>"; };
-		84F20F901F1810DD00D8E682 /* Author+Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "Author+Database.swift"; path = "Extensions/Author+Database.swift"; sourceTree = "<group>"; };
-		D511EEE720242E0800712EC3 /* ArticlesDatabaseTests_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ArticlesDatabaseTests_target.xcconfig; sourceTree = "<group>"; };
-		D511EEE820242E0800712EC3 /* ArticlesDatabase_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ArticlesDatabase_target.xcconfig; sourceTree = "<group>"; };
-		D511EEE920242E0800712EC3 /* ArticlesDatabase_project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ArticlesDatabase_project.xcconfig; sourceTree = "<group>"; };
-		D511EEEA20242E0800712EC3 /* ArticlesDatabase_project_debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ArticlesDatabase_project_debug.xcconfig; sourceTree = "<group>"; };
-		D511EEEB20242E0800712EC3 /* ArticlesDatabase_project_release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ArticlesDatabase_project_release.xcconfig; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		844BEE331F0AB3AA004AB7CD /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				51B0DF2924D2C837000AD99E /* RSParser in Frameworks */,
-				51B0DF1724D24EC4000AD99E /* RSDatabase in Frameworks */,
-				5102AE8C24D181080050839C /* RSCore in Frameworks */,
-				841D4D742106B59F00DD04E6 /* Articles.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		844BEE3D1F0AB3AB004AB7CD /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				844BEE411F0AB3AB004AB7CD /* ArticlesDatabase.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		844BEE2D1F0AB3AA004AB7CD = {
-			isa = PBXGroup;
-			children = (
-				84E156E91F0AB80500F8CC05 /* ArticlesDatabase.swift */,
-				845580661F0AEBCD003CCFA1 /* Constants.swift */,
-				84E156EB1F0AB80E00F8CC05 /* ArticlesTable.swift */,
-				8477ACBB2221E76F00DF7F37 /* SearchTable.swift */,
-				84E156ED1F0AB81400F8CC05 /* StatusesTable.swift */,
-				84F20F8E1F180D8700D8E682 /* AuthorsTable.swift */,
-				84C242C723DEB42700C50516 /* Operations */,
-				8461462A1F0AC44100870CB3 /* Extensions */,
-				84E156E81F0AB75600F8CC05 /* Info.plist */,
-				844BEE441F0AB3AB004AB7CD /* DatabaseTests */,
-				844BEE381F0AB3AA004AB7CD /* Products */,
-				84E156FB1F0AB83A00F8CC05 /* Frameworks */,
-				D511EEE620242E0800712EC3 /* xcconfig */,
-			);
-			sourceTree = "<group>";
-			usesTabs = 1;
-		};
-		844BEE381F0AB3AA004AB7CD /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				844BEE371F0AB3AA004AB7CD /* ArticlesDatabase.framework */,
-				844BEE401F0AB3AB004AB7CD /* ArticlesDatabaseTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		844BEE441F0AB3AB004AB7CD /* DatabaseTests */ = {
-			isa = PBXGroup;
-			children = (
-				844BEE451F0AB3AB004AB7CD /* DatabaseTests.swift */,
-				843577211F749C6200F460AE /* ArticleChangesTests.swift */,
-				844BEE471F0AB3AB004AB7CD /* Info.plist */,
-			);
-			path = DatabaseTests;
-			sourceTree = "<group>";
-		};
-		8461461F1F0ABC7300870CB3 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				846146241F0ABC7400870CB3 /* RSParser.framework */,
-				846146261F0ABC7400870CB3 /* RSParserTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		8461462A1F0AC44100870CB3 /* Extensions */ = {
-			isa = PBXGroup;
-			children = (
-				845580751F0AF670003CCFA1 /* Article+Database.swift */,
-				843702C21F70D15D00B18807 /* ParsedArticle+Database.swift */,
-				845580791F0AF67D003CCFA1 /* ArticleStatus+Database.swift */,
-				84F20F901F1810DD00D8E682 /* Author+Database.swift */,
-				842889FF1F6A3C4400395871 /* DatabaseObject+Database.swift */,
-				84288A011F6A3D8000395871 /* RelatedObjectsMap+Database.swift */,
-			);
-			name = Extensions;
-			sourceTree = "<group>";
-		};
-		84BB4B901F119C4900858766 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				84BB4B981F119C4900858766 /* RSCore.framework */,
-				84BB4B9A1F119C4900858766 /* RSCoreTests.xctest */,
-				84BB4B9C1F119C4900858766 /* RSCore.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		84C242C723DEB42700C50516 /* Operations */ = {
-			isa = PBXGroup;
-			children = (
-				84116B8823E01E86000B2E98 /* FetchFeedUnreadCountOperation.swift */,
-				84611DCB23E62FE200BC630C /* FetchUnreadCountsForFeedsOperation.swift */,
-				84C242C823DEB45C00C50516 /* FetchAllUnreadCountsOperation.swift */,
-			);
-			path = Operations;
-			sourceTree = "<group>";
-		};
-		84E156F21F0AB83600F8CC05 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				84E156F81F0AB83600F8CC05 /* Data.framework */,
-				84E156FA1F0AB83600F8CC05 /* DataTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		84E156FB1F0AB83A00F8CC05 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				51C451FE2264CF2100C03939 /* RSParser.framework */,
-				841D4D732106B59F00DD04E6 /* Articles.framework */,
-				848E3EBC20FBCFDE0004B7ED /* RSDatabase.framework */,
-				848E3EBA20FBCFD80004B7ED /* RSParser.framework */,
-				848E3EB820FBCFD20004B7ED /* RSCore.framework */,
-				84E156F11F0AB83600F8CC05 /* Data.xcodeproj */,
-				84E157001F0AB89B00F8CC05 /* RSDatabase.xcodeproj */,
-				84BB4B8F1F119C4900858766 /* RSCore.xcodeproj */,
-				8461461E1F0ABC7300870CB3 /* RSParser.xcodeproj */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		84E157011F0AB89B00F8CC05 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				84E157071F0AB89B00F8CC05 /* RSDatabase.framework */,
-				84E157091F0AB89B00F8CC05 /* RSDatabaseTests.xctest */,
-				84E1570B1F0AB89B00F8CC05 /* RSDatabase.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		D511EEE620242E0800712EC3 /* xcconfig */ = {
-			isa = PBXGroup;
-			children = (
-				D511EEE720242E0800712EC3 /* ArticlesDatabaseTests_target.xcconfig */,
-				D511EEE820242E0800712EC3 /* ArticlesDatabase_target.xcconfig */,
-				D511EEE920242E0800712EC3 /* ArticlesDatabase_project.xcconfig */,
-				D511EEEA20242E0800712EC3 /* ArticlesDatabase_project_debug.xcconfig */,
-				D511EEEB20242E0800712EC3 /* ArticlesDatabase_project_release.xcconfig */,
-			);
-			path = xcconfig;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		844BEE341F0AB3AA004AB7CD /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		844BEE361F0AB3AA004AB7CD /* ArticlesDatabase */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 844BEE4B1F0AB3AB004AB7CD /* Build configuration list for PBXNativeTarget "ArticlesDatabase" */;
-			buildPhases = (
-				844BEE321F0AB3AA004AB7CD /* Sources */,
-				844BEE331F0AB3AA004AB7CD /* Frameworks */,
-				844BEE341F0AB3AA004AB7CD /* Headers */,
-				844BEE351F0AB3AA004AB7CD /* Resources */,
-				51C8F34A234FB0F50048ED95 /* Run Script: Verify No Build Settings */,
-				5102AE8E24D181090050839C /* Embed Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = ArticlesDatabase;
-			packageProductDependencies = (
-				5102AE8B24D181080050839C /* RSCore */,
-				51B0DF1624D24EC4000AD99E /* RSDatabase */,
-				51B0DF2824D2C837000AD99E /* RSParser */,
-			);
-			productName = Database;
-			productReference = 844BEE371F0AB3AA004AB7CD /* ArticlesDatabase.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		844BEE3F1F0AB3AB004AB7CD /* ArticlesDatabaseTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 844BEE4E1F0AB3AB004AB7CD /* Build configuration list for PBXNativeTarget "ArticlesDatabaseTests" */;
-			buildPhases = (
-				844BEE3C1F0AB3AB004AB7CD /* Sources */,
-				844BEE3D1F0AB3AB004AB7CD /* Frameworks */,
-				844BEE3E1F0AB3AB004AB7CD /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				844BEE431F0AB3AB004AB7CD /* PBXTargetDependency */,
-			);
-			name = ArticlesDatabaseTests;
-			productName = DatabaseTests;
-			productReference = 844BEE401F0AB3AB004AB7CD /* ArticlesDatabaseTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		844BEE2E1F0AB3AA004AB7CD /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastSwiftUpdateCheck = 0830;
-				LastUpgradeCheck = 0930;
-				ORGANIZATIONNAME = "Ranchero Software";
-				TargetAttributes = {
-					844BEE361F0AB3AA004AB7CD = {
-						CreatedOnToolsVersion = 8.3.2;
-						DevelopmentTeam = SHJK2V3AJG;
-						LastSwiftMigration = 0830;
-						ProvisioningStyle = Automatic;
-					};
-					844BEE3F1F0AB3AB004AB7CD = {
-						CreatedOnToolsVersion = 8.3.2;
-						DevelopmentTeam = SHJK2V3AJG;
-						ProvisioningStyle = Automatic;
-					};
-				};
-			};
-			buildConfigurationList = 844BEE311F0AB3AA004AB7CD /* Build configuration list for PBXProject "ArticlesDatabase" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				English,
-				en,
-			);
-			mainGroup = 844BEE2D1F0AB3AA004AB7CD;
-			packageReferences = (
-				5102AE8A24D181080050839C /* XCRemoteSwiftPackageReference "RSCore" */,
-				51B0DF1524D24EC4000AD99E /* XCRemoteSwiftPackageReference "RSDatabase" */,
-				51B0DF2724D2C837000AD99E /* XCRemoteSwiftPackageReference "RSParser" */,
-			);
-			productRefGroup = 844BEE381F0AB3AA004AB7CD /* Products */;
-			projectDirPath = "";
-			projectReferences = (
-				{
-					ProductGroup = 84E156F21F0AB83600F8CC05 /* Products */;
-					ProjectRef = 84E156F11F0AB83600F8CC05 /* Data.xcodeproj */;
-				},
-				{
-					ProductGroup = 84BB4B901F119C4900858766 /* Products */;
-					ProjectRef = 84BB4B8F1F119C4900858766 /* RSCore.xcodeproj */;
-				},
-				{
-					ProductGroup = 84E157011F0AB89B00F8CC05 /* Products */;
-					ProjectRef = 84E157001F0AB89B00F8CC05 /* RSDatabase.xcodeproj */;
-				},
-				{
-					ProductGroup = 8461461F1F0ABC7300870CB3 /* Products */;
-					ProjectRef = 8461461E1F0ABC7300870CB3 /* RSParser.xcodeproj */;
-				},
-			);
-			projectRoot = "";
-			targets = (
-				844BEE361F0AB3AA004AB7CD /* ArticlesDatabase */,
-				844BEE3F1F0AB3AB004AB7CD /* ArticlesDatabaseTests */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXReferenceProxy section */
-		846146241F0ABC7400870CB3 /* RSParser.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = RSParser.framework;
-			remoteRef = 846146231F0ABC7400870CB3 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		846146261F0ABC7400870CB3 /* RSParserTests.xctest */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.cfbundle;
-			path = RSParserTests.xctest;
-			remoteRef = 846146251F0ABC7400870CB3 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84BB4B981F119C4900858766 /* RSCore.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = RSCore.framework;
-			remoteRef = 84BB4B971F119C4900858766 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84BB4B9A1F119C4900858766 /* RSCoreTests.xctest */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.cfbundle;
-			path = RSCoreTests.xctest;
-			remoteRef = 84BB4B991F119C4900858766 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84BB4B9C1F119C4900858766 /* RSCore.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = RSCore.framework;
-			remoteRef = 84BB4B9B1F119C4900858766 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84E156F81F0AB83600F8CC05 /* Data.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = Data.framework;
-			remoteRef = 84E156F71F0AB83600F8CC05 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84E156FA1F0AB83600F8CC05 /* DataTests.xctest */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.cfbundle;
-			path = DataTests.xctest;
-			remoteRef = 84E156F91F0AB83600F8CC05 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84E157071F0AB89B00F8CC05 /* RSDatabase.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = RSDatabase.framework;
-			remoteRef = 84E157061F0AB89B00F8CC05 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84E157091F0AB89B00F8CC05 /* RSDatabaseTests.xctest */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.cfbundle;
-			path = RSDatabaseTests.xctest;
-			remoteRef = 84E157081F0AB89B00F8CC05 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		84E1570B1F0AB89B00F8CC05 /* RSDatabase.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = RSDatabase.framework;
-			remoteRef = 84E1570A1F0AB89B00F8CC05 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-/* End PBXReferenceProxy section */
-
-/* Begin PBXResourcesBuildPhase section */
-		844BEE351F0AB3AA004AB7CD /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		844BEE3E1F0AB3AB004AB7CD /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		51C8F34A234FB0F50048ED95 /* Run Script: Verify No Build Settings */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputFileListPaths = (
-			);
-			inputPaths = (
-			);
-			name = "Run Script: Verify No Build Settings";
-			outputFileListPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "if [ \"$ENABLE_PREVIEWS\" = \"YES\" ]; then exit 0; fi\n\nxcrun -sdk macosx swiftc -target x86_64-macosx10.11  ../../buildscripts/VerifyNoBuildSettings.swift -o $CONFIGURATION_TEMP_DIR/VerifyNoBS\n$CONFIGURATION_TEMP_DIR/VerifyNoBS ${PROJECT_NAME}.xcodeproj/project.pbxproj\n\nif [ $? -ne 0 ]\nthen\n   echo \"error: Build Setting were found in the project.pbxproj file.  Most likely you didn't intend to change this file and should revert it.\"\n   exit 1\nfi\n";
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		844BEE321F0AB3AA004AB7CD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				845580671F0AEBCD003CCFA1 /* Constants.swift in Sources */,
-				843CB9961F34174100EE6581 /* Author+Database.swift in Sources */,
-				845580761F0AF670003CCFA1 /* Article+Database.swift in Sources */,
-				84116B8923E01E86000B2E98 /* FetchFeedUnreadCountOperation.swift in Sources */,
-				8455807A1F0AF67D003CCFA1 /* ArticleStatus+Database.swift in Sources */,
-				84288A021F6A3D8000395871 /* RelatedObjectsMap+Database.swift in Sources */,
-				84C242C923DEB45C00C50516 /* FetchAllUnreadCountsOperation.swift in Sources */,
-				84F20F8F1F180D8700D8E682 /* AuthorsTable.swift in Sources */,
-				84288A001F6A3C4400395871 /* DatabaseObject+Database.swift in Sources */,
-				8477ACBC2221E76F00DF7F37 /* SearchTable.swift in Sources */,
-				84611DCC23E62FE200BC630C /* FetchUnreadCountsForFeedsOperation.swift in Sources */,
-				843702C31F70D15D00B18807 /* ParsedArticle+Database.swift in Sources */,
-				84E156EC1F0AB80E00F8CC05 /* ArticlesTable.swift in Sources */,
-				84E156EE1F0AB81400F8CC05 /* StatusesTable.swift in Sources */,
-				84E156EA1F0AB80500F8CC05 /* ArticlesDatabase.swift in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		844BEE3C1F0AB3AB004AB7CD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				843577221F749C6200F460AE /* ArticleChangesTests.swift in Sources */,
-				844BEE461F0AB3AB004AB7CD /* DatabaseTests.swift in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		844BEE431F0AB3AB004AB7CD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 844BEE361F0AB3AA004AB7CD /* ArticlesDatabase */;
-			targetProxy = 844BEE421F0AB3AB004AB7CD /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
-		844BEE491F0AB3AB004AB7CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEEA20242E0800712EC3 /* ArticlesDatabase_project_debug.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		844BEE4A1F0AB3AB004AB7CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEEB20242E0800712EC3 /* ArticlesDatabase_project_release.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-		844BEE4C1F0AB3AB004AB7CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE820242E0800712EC3 /* ArticlesDatabase_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		844BEE4D1F0AB3AB004AB7CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE820242E0800712EC3 /* ArticlesDatabase_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-		844BEE4F1F0AB3AB004AB7CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE720242E0800712EC3 /* ArticlesDatabaseTests_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		844BEE501F0AB3AB004AB7CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D511EEE720242E0800712EC3 /* ArticlesDatabaseTests_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		844BEE311F0AB3AA004AB7CD /* Build configuration list for PBXProject "ArticlesDatabase" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				844BEE491F0AB3AB004AB7CD /* Debug */,
-				844BEE4A1F0AB3AB004AB7CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		844BEE4B1F0AB3AB004AB7CD /* Build configuration list for PBXNativeTarget "ArticlesDatabase" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				844BEE4C1F0AB3AB004AB7CD /* Debug */,
-				844BEE4D1F0AB3AB004AB7CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		844BEE4E1F0AB3AB004AB7CD /* Build configuration list for PBXNativeTarget "ArticlesDatabaseTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				844BEE4F1F0AB3AB004AB7CD /* Debug */,
-				844BEE501F0AB3AB004AB7CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
-		5102AE8A24D181080050839C /* XCRemoteSwiftPackageReference "RSCore" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/Ranchero-Software/RSCore.git";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = "1.0.0-beta1";
-			};
-		};
-		51B0DF1524D24EC4000AD99E /* XCRemoteSwiftPackageReference "RSDatabase" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/Ranchero-Software/RSDatabase.git";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = "1.0.0-beta1";
-			};
-		};
-		51B0DF2724D2C837000AD99E /* XCRemoteSwiftPackageReference "RSParser" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/Ranchero-Software/RSParser.git";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = "2.0.0-beta1";
-			};
-		};
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
-		5102AE8B24D181080050839C /* RSCore */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = 5102AE8A24D181080050839C /* XCRemoteSwiftPackageReference "RSCore" */;
-			productName = RSCore;
-		};
-		51B0DF1624D24EC4000AD99E /* RSDatabase */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = 51B0DF1524D24EC4000AD99E /* XCRemoteSwiftPackageReference "RSDatabase" */;
-			productName = RSDatabase;
-		};
-		51B0DF2824D2C837000AD99E /* RSParser */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = 51B0DF2724D2C837000AD99E /* XCRemoteSwiftPackageReference "RSParser" */;
-			productName = RSParser;
-		};
-/* End XCSwiftPackageProductDependency section */
-	};
-	rootObject = 844BEE2E1F0AB3AA004AB7CD /* Project object */;
-}
diff --git a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 54e5cff2d..000000000
--- a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "self:Database.xcodeproj">
-   </FileRef>
-</Workspace>
diff --git a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>
diff --git a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/xcshareddata/xcschemes/ArticlesDatabase.xcscheme b/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/xcshareddata/xcschemes/ArticlesDatabase.xcscheme
deleted file mode 100644
index 8fba16c50..000000000
--- a/Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj/xcshareddata/xcschemes/ArticlesDatabase.xcscheme
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1120"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "844BEE361F0AB3AA004AB7CD"
-               BuildableName = "ArticlesDatabase.framework"
-               BlueprintName = "ArticlesDatabase"
-               ReferencedContainer = "container:ArticlesDatabase.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Test"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "844BEE361F0AB3AA004AB7CD"
-            BuildableName = "ArticlesDatabase.framework"
-            BlueprintName = "ArticlesDatabase"
-            ReferencedContainer = "container:ArticlesDatabase.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.pbxproj b/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.pbxproj
deleted file mode 100644
index cdc6be2b2..000000000
--- a/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,298 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 52;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		51554C15228B6F0D0055115A /* SyncStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51554C12228B6F0D0055115A /* SyncStatus.swift */; };
-		51554C16228B6F0D0055115A /* SyncStatusTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51554C13228B6F0D0055115A /* SyncStatusTable.swift */; };
-		51554C17228B6F0D0055115A /* SyncDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51554C14228B6F0D0055115A /* SyncDatabase.swift */; };
-		51554C1E228B701F0055115A /* SyncDatabase_project.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 51554C19228B701F0055115A /* SyncDatabase_project.xcconfig */; };
-		51554C1F228B701F0055115A /* SyncDatabase_project_debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 51554C1A228B701F0055115A /* SyncDatabase_project_debug.xcconfig */; };
-		51554C21228B701F0055115A /* SyncDatabase_project_release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 51554C1C228B701F0055115A /* SyncDatabase_project_release.xcconfig */; };
-		51554C22228B701F0055115A /* SyncDatabase_target.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 51554C1D228B701F0055115A /* SyncDatabase_target.xcconfig */; };
-		51554C38228B7DAC0055115A /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51554C37228B7DAC0055115A /* Constants.swift */; };
-		51554C3A228B83380055115A /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C39228B83380055115A /* Articles.framework */; };
-		51B0DF1324D24EA6000AD99E /* RSDatabase in Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DF1224D24EA6000AD99E /* RSDatabase */; };
-		51B0DF1424D24EA6000AD99E /* RSDatabase in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DF1224D24EA6000AD99E /* RSDatabase */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-/* End PBXBuildFile section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		51B0DEC524D245A2000AD99E /* Embed Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				51B0DF1424D24EA6000AD99E /* RSDatabase in Embed Frameworks */,
-			);
-			name = "Embed Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		51554BEB228B6E8F0055115A /* SyncDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SyncDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		51554BEF228B6E8F0055115A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		51554C12228B6F0D0055115A /* SyncStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SyncStatus.swift; sourceTree = "<group>"; };
-		51554C13228B6F0D0055115A /* SyncStatusTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SyncStatusTable.swift; sourceTree = "<group>"; };
-		51554C14228B6F0D0055115A /* SyncDatabase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SyncDatabase.swift; sourceTree = "<group>"; };
-		51554C19228B701F0055115A /* SyncDatabase_project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = SyncDatabase_project.xcconfig; sourceTree = "<group>"; };
-		51554C1A228B701F0055115A /* SyncDatabase_project_debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = SyncDatabase_project_debug.xcconfig; sourceTree = "<group>"; };
-		51554C1C228B701F0055115A /* SyncDatabase_project_release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = SyncDatabase_project_release.xcconfig; sourceTree = "<group>"; };
-		51554C1D228B701F0055115A /* SyncDatabase_target.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = SyncDatabase_target.xcconfig; sourceTree = "<group>"; };
-		51554C35228B72F40055115A /* RSDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		51554C37228B7DAC0055115A /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
-		51554C39228B83380055115A /* Articles.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Articles.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		51554BE8228B6E8F0055115A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				51B0DF1324D24EA6000AD99E /* RSDatabase in Frameworks */,
-				51554C3A228B83380055115A /* Articles.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		51554BE1228B6E8F0055115A = {
-			isa = PBXGroup;
-			children = (
-				51554C37228B7DAC0055115A /* Constants.swift */,
-				51554C14228B6F0D0055115A /* SyncDatabase.swift */,
-				51554C12228B6F0D0055115A /* SyncStatus.swift */,
-				51554C13228B6F0D0055115A /* SyncStatusTable.swift */,
-				51554BEF228B6E8F0055115A /* Info.plist */,
-				51554BEC228B6E8F0055115A /* Products */,
-				51554C18228B6FBE0055115A /* xcconfig */,
-				51554C34228B72F40055115A /* Frameworks */,
-			);
-			sourceTree = "<group>";
-		};
-		51554BEC228B6E8F0055115A /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				51554BEB228B6E8F0055115A /* SyncDatabase.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		51554C18228B6FBE0055115A /* xcconfig */ = {
-			isa = PBXGroup;
-			children = (
-				51554C1A228B701F0055115A /* SyncDatabase_project_debug.xcconfig */,
-				51554C1C228B701F0055115A /* SyncDatabase_project_release.xcconfig */,
-				51554C19228B701F0055115A /* SyncDatabase_project.xcconfig */,
-				51554C1D228B701F0055115A /* SyncDatabase_target.xcconfig */,
-			);
-			path = xcconfig;
-			sourceTree = "<group>";
-		};
-		51554C34228B72F40055115A /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				51554C39228B83380055115A /* Articles.framework */,
-				51554C35228B72F40055115A /* RSDatabase.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		51554BE6228B6E8F0055115A /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		51554BEA228B6E8F0055115A /* SyncDatabase */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 51554BF3228B6E8F0055115A /* Build configuration list for PBXNativeTarget "SyncDatabase" */;
-			buildPhases = (
-				51554BE6228B6E8F0055115A /* Headers */,
-				51554BE7228B6E8F0055115A /* Sources */,
-				51554BE8228B6E8F0055115A /* Frameworks */,
-				51554BE9228B6E8F0055115A /* Resources */,
-				51C8F349234FB0C40048ED95 /* Run Script: Verfiy No Build Settings */,
-				51B0DEC524D245A2000AD99E /* Embed Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = SyncDatabase;
-			packageProductDependencies = (
-				51B0DF1224D24EA6000AD99E /* RSDatabase */,
-			);
-			productName = SyncDatabase;
-			productReference = 51554BEB228B6E8F0055115A /* SyncDatabase.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		51554BE2228B6E8F0055115A /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 1020;
-				ORGANIZATIONNAME = "Ranchero Software";
-				TargetAttributes = {
-					51554BEA228B6E8F0055115A = {
-						CreatedOnToolsVersion = 10.2.1;
-					};
-				};
-			};
-			buildConfigurationList = 51554BE5228B6E8F0055115A /* Build configuration list for PBXProject "SyncDatabase" */;
-			compatibilityVersion = "Xcode 9.3";
-			developmentRegion = en;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 51554BE1228B6E8F0055115A;
-			packageReferences = (
-				51B0DF1124D24EA6000AD99E /* XCRemoteSwiftPackageReference "RSDatabase" */,
-			);
-			productRefGroup = 51554BEC228B6E8F0055115A /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				51554BEA228B6E8F0055115A /* SyncDatabase */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		51554BE9228B6E8F0055115A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				51554C21228B701F0055115A /* SyncDatabase_project_release.xcconfig in Resources */,
-				51554C22228B701F0055115A /* SyncDatabase_target.xcconfig in Resources */,
-				51554C1F228B701F0055115A /* SyncDatabase_project_debug.xcconfig in Resources */,
-				51554C1E228B701F0055115A /* SyncDatabase_project.xcconfig in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		51C8F349234FB0C40048ED95 /* Run Script: Verfiy No Build Settings */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputFileListPaths = (
-			);
-			inputPaths = (
-			);
-			name = "Run Script: Verfiy No Build Settings";
-			outputFileListPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "if [ \"$ENABLE_PREVIEWS\" = \"YES\" ]; then exit 0; fi\n\nxcrun -sdk macosx swiftc -target x86_64-macosx10.11  ../../buildscripts/VerifyNoBuildSettings.swift -o $CONFIGURATION_TEMP_DIR/VerifyNoBS\n$CONFIGURATION_TEMP_DIR/VerifyNoBS ${PROJECT_NAME}.xcodeproj/project.pbxproj\n\nif [ $? -ne 0 ]\nthen\n   echo \"error: Build Setting were found in the project.pbxproj file.  Most likely you didn't intend to change this file and should revert it.\"\n   exit 1\nfi\n\n";
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		51554BE7228B6E8F0055115A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				51554C15228B6F0D0055115A /* SyncStatus.swift in Sources */,
-				51554C16228B6F0D0055115A /* SyncStatusTable.swift in Sources */,
-				51554C17228B6F0D0055115A /* SyncDatabase.swift in Sources */,
-				51554C38228B7DAC0055115A /* Constants.swift in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		51554BF1228B6E8F0055115A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 51554C1A228B701F0055115A /* SyncDatabase_project_debug.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		51554BF2228B6E8F0055115A /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 51554C1C228B701F0055115A /* SyncDatabase_project_release.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-		51554BF4228B6E8F0055115A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 51554C1D228B701F0055115A /* SyncDatabase_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Debug;
-		};
-		51554BF5228B6E8F0055115A /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 51554C1D228B701F0055115A /* SyncDatabase_target.xcconfig */;
-			buildSettings = {
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		51554BE5228B6E8F0055115A /* Build configuration list for PBXProject "SyncDatabase" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				51554BF1228B6E8F0055115A /* Debug */,
-				51554BF2228B6E8F0055115A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		51554BF3228B6E8F0055115A /* Build configuration list for PBXNativeTarget "SyncDatabase" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				51554BF4228B6E8F0055115A /* Debug */,
-				51554BF5228B6E8F0055115A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
-		51B0DF1124D24EA6000AD99E /* XCRemoteSwiftPackageReference "RSDatabase" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/Ranchero-Software/RSDatabase.git";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = "1.0.0-beta1";
-			};
-		};
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
-		51B0DF1224D24EA6000AD99E /* RSDatabase */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = 51B0DF1124D24EA6000AD99E /* XCRemoteSwiftPackageReference "RSDatabase" */;
-			productName = RSDatabase;
-		};
-/* End XCSwiftPackageProductDependency section */
-	};
-	rootObject = 51554BE2228B6E8F0055115A /* Project object */;
-}
diff --git a/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index f93b01eb8..000000000
--- a/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "self:SyncDatabase.xcodeproj">
-   </FileRef>
-</Workspace>
diff --git a/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/Frameworks/SyncDatabase/SyncDatabase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>
diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj
index 9b5869503..575aa9569 100644
--- a/NetNewsWire.xcodeproj/project.pbxproj
+++ b/NetNewsWire.xcodeproj/project.pbxproj
@@ -139,9 +139,6 @@
 		513146B2235A81A400387FDC /* AddWebFeedIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513146B1235A81A400387FDC /* AddWebFeedIntentHandler.swift */; };
 		513146B3235A81A400387FDC /* AddWebFeedIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513146B1235A81A400387FDC /* AddWebFeedIntentHandler.swift */; };
 		513146BF235A8FDB00387FDC /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; };
-		513146C1235A8FDB00387FDC /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; };
-		513146C3235A8FDB00387FDC /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; };
-		513146C5235A8FDB00387FDC /* SyncDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; };
 		51314704235C41FC00387FDC /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 51314707235C41FC00387FDC /* Intents.intentdefinition */; };
 		51314705235C41FC00387FDC /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 51314707235C41FC00387FDC /* Intents.intentdefinition */; };
 		513228FB233037630033D4ED /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513228F2233037620033D4ED /* Reachability.swift */; };
@@ -197,10 +194,6 @@
 		514E6C0924AD39AD00AC6F6E /* ArticleIconImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514E6C0824AD39AD00AC6F6E /* ArticleIconImageLoader.swift */; };
 		514E6C0A24AD39AD00AC6F6E /* ArticleIconImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514E6C0824AD39AD00AC6F6E /* ArticleIconImageLoader.swift */; };
 		5154368B229404D1005E1CDF /* FaviconGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51EF0F76227716200050506E /* FaviconGenerator.swift */; };
-		51554C24228B71910055115A /* SyncDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; };
-		51554C25228B71910055115A /* SyncDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51554C30228B71A10055115A /* SyncDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; };
-		51554C31228B71A10055115A /* SyncDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		515A50E6243D07A90089E588 /* ExtensionPointManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515A50E5243D07A90089E588 /* ExtensionPointManager.swift */; };
 		515A50E7243D07A90089E588 /* ExtensionPointManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515A50E5243D07A90089E588 /* ExtensionPointManager.swift */; };
 		515A5107243D0CCD0089E588 /* TwitterFeedProvider-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515A5106243D0CCD0089E588 /* TwitterFeedProvider-Extensions.swift */; };
@@ -363,8 +356,6 @@
 		51AB8AB323B7F4C6008F147D /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51AB8AB223B7F4C6008F147D /* WebViewController.swift */; };
 		51B0DEF224D24A19000AD99E /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DEF124D24A19000AD99E /* RSCore */; };
 		51B0DEF324D24A19000AD99E /* RSCore in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DEF124D24A19000AD99E /* RSCore */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		51B0DEF424D24A2E000AD99E /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; };
-		51B0DEF524D24A2E000AD99E /* Articles.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51B0DEF624D24A9D000AD99E /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; };
 		51B0DEF724D24A9D000AD99E /* Account.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51B0DF0F24D24E3B000AD99E /* RSDatabase in Frameworks */ = {isa = PBXBuildFile; productRef = 51B0DF0E24D24E3B000AD99E /* RSDatabase */; };
@@ -428,16 +419,8 @@
 		51C0516224A77DF800194D5E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 51C0513824A77DF800194D5E /* Assets.xcassets */; };
 		51C0516324A77DF800194D5E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 51C0513824A77DF800194D5E /* Assets.xcassets */; };
 		51C266EA238C334800F53014 /* ContextMenuPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C266E9238C334800F53014 /* ContextMenuPreviewViewController.swift */; };
-		51C451A9226377C200C03939 /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; };
-		51C451AA226377C200C03939 /* ArticlesDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51C451B9226377C900C03939 /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; };
-		51C451BA226377C900C03939 /* Articles.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51C451BD226377D000C03939 /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; };
 		51C451BE226377D000C03939 /* Account.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51C451F02264C83100C03939 /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; };
-		51C451F12264C83100C03939 /* ArticlesDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51C451F42264C83900C03939 /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; };
-		51C451F52264C83900C03939 /* Articles.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51C451F82264C83E00C03939 /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; };
 		51C451F92264C83E00C03939 /* Account.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51C45258226508CF00C03939 /* AppAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45254226507D200C03939 /* AppAssets.swift */; };
@@ -508,26 +491,14 @@
 		51E4398023805EBC00015C31 /* AddComboTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E4397F23805EBC00015C31 /* AddComboTableViewCell.swift */; };
 		51E4987F24A8061400B667CB /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; };
 		51E4988024A8061400B667CB /* Account.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51E4988124A8061400B667CB /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; };
-		51E4988224A8061400B667CB /* Articles.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51E4988324A8061400B667CB /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; };
-		51E4988424A8061400B667CB /* ArticlesDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51E4989124A8061400B667CB /* Secrets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5102FD7B244008A700534F17 /* Secrets.framework */; };
 		51E4989224A8061400B667CB /* Secrets.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5102FD7B244008A700534F17 /* Secrets.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51E4989324A8061400B667CB /* SyncDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; };
-		51E4989424A8061400B667CB /* SyncDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51E4989724A8065700B667CB /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51E4989624A8065700B667CB /* CloudKit.framework */; };
 		51E4989924A8067000B667CB /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51E4989824A8067000B667CB /* WebKit.framework */; };
 		51E4989A24A8069300B667CB /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; };
 		51E4989B24A8069300B667CB /* Account.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51E4989C24A8069300B667CB /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; };
-		51E4989D24A8069300B667CB /* Articles.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51E4989E24A8069300B667CB /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; };
-		51E4989F24A8069300B667CB /* ArticlesDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51E498AC24A8069300B667CB /* Secrets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5102FD7B244008A700534F17 /* Secrets.framework */; };
 		51E498AD24A8069300B667CB /* Secrets.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5102FD7B244008A700534F17 /* Secrets.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		51E498AE24A8069300B667CB /* SyncDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; };
-		51E498AF24A8069300B667CB /* SyncDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		51E498B124A806A400B667CB /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51E4DAEC2425F6940091EB5B /* CloudKit.framework */; };
 		51E498B324A806AA00B667CB /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51E498B224A806AA00B667CB /* WebKit.framework */; };
 		51E498C724A8085D00B667CB /* StarredFeedDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845EE7B01FC2366500854A1F /* StarredFeedDelegate.swift */; };
@@ -863,10 +834,7 @@
 		65ED403E235DEF6C0081F399 /* TimelineCellAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97701ED9EC04007D329B /* TimelineCellAppearance.swift */; };
 		65ED403F235DEF6C0081F399 /* ArticleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A977D1ED9EC42007D329B /* ArticleRenderer.swift */; };
 		65ED4040235DEF6C0081F399 /* GeneralPrefencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C9FC6D22629E1200D921D6 /* GeneralPrefencesViewController.swift */; };
-		65ED4046235DEF6C0081F399 /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; };
 		65ED4048235DEF6C0081F399 /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; };
-		65ED4049235DEF6C0081F399 /* Articles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; };
-		65ED404B235DEF6C0081F399 /* SyncDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; };
 		65ED404E235DEF6C0081F399 /* NNW3OpenPanelAccessoryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 849ADEE523598189000E1B81 /* NNW3OpenPanelAccessoryView.xib */; };
 		65ED404F235DEF6C0081F399 /* GlobalKeyboardShortcuts.plist in Resources */ = {isa = PBXBuildFile; fileRef = 844B5B641FEA11F200C7C76A /* GlobalKeyboardShortcuts.plist */; };
 		65ED4050235DEF6C0081F399 /* DetailKeyboardShortcuts.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5127B237222B4849006D641D /* DetailKeyboardShortcuts.plist */; };
@@ -898,10 +866,7 @@
 		65ED406C235DEF6C0081F399 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 84C9FC8922629E8F00D921D6 /* Credits.rtf */; };
 		65ED406D235DEF6C0081F399 /* Inspector.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 84BBB12B20142A4700F054F5 /* Inspector.storyboard */; };
 		65ED406E235DEF6C0081F399 /* AddWebFeedSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = 848363002262A3BC00DA1D35 /* AddWebFeedSheet.xib */; };
-		65ED4074235DEF6C0081F399 /* ArticlesDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		65ED4076235DEF6C0081F399 /* Account.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407166A2262A60D00344432 /* Account.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		65ED4077235DEF6C0081F399 /* Articles.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 840716732262A60F00344432 /* Articles.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		65ED4079235DEF6C0081F399 /* SyncDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		65ED407C235DEF6C0081F399 /* Subscribe to Feed.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6581C73320CED60000F4AD34 /* Subscribe to Feed.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		65ED4092235DEF770081F399 /* SafariExtensionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6581C73920CED60100F4AD34 /* SafariExtensionViewController.swift */; };
 		65ED4093235DEF770081F399 /* SafariExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6581C73720CED60100F4AD34 /* SafariExtensionHandler.swift */; };
@@ -1119,20 +1084,6 @@
 			remoteGlobalIDString = 51314636235A7BBE00387FDC;
 			remoteInfo = "NetNewsWire iOS Intents Extension";
 		};
-		51554C00228B6EB50055115A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 51554BFC228B6EB50055115A /* SyncDatabase.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 51554BEB228B6E8F0055115A;
-			remoteInfo = SyncDatabase;
-		};
-		51554C26228B71910055115A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 51554BFC228B6EB50055115A /* SyncDatabase.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = 51554BEA228B6E8F0055115A;
-			remoteInfo = SyncDatabase;
-		};
 		518B2ED72351B3DD00400001 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 849C64581ED37A5D003D8FC0 /* Project object */;
@@ -1140,20 +1091,6 @@
 			remoteGlobalIDString = 840D617B2029031C009BC708;
 			remoteInfo = "NetNewsWire-iOS";
 		};
-		51C451AB226377C300C03939 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = 844BEE361F0AB3AA004AB7CD;
-			remoteInfo = ArticlesDatabase;
-		};
-		51C451BB226377C900C03939 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D542106B3D500DD04E6 /* Articles.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = 844BEE5A1F0AB3C8004AB7CD;
-			remoteInfo = Articles;
-		};
 		51C451BF226377D000C03939 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 846E77301F6EF5D600A165E2 /* Account.xcodeproj */;
@@ -1161,20 +1098,6 @@
 			remoteGlobalIDString = 848934F51F62484F00CEBD24;
 			remoteInfo = Account;
 		};
-		65ED3FAE235DEF6C0081F399 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = 844BEE361F0AB3AA004AB7CD;
-			remoteInfo = ArticlesDatabase;
-		};
-		65ED3FB0235DEF6C0081F399 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D542106B3D500DD04E6 /* Articles.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = 844BEE5A1F0AB3C8004AB7CD;
-			remoteInfo = Articles;
-		};
 		65ED3FB2235DEF6C0081F399 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 846E77301F6EF5D600A165E2 /* Account.xcodeproj */;
@@ -1182,13 +1105,6 @@
 			remoteGlobalIDString = 848934F51F62484F00CEBD24;
 			remoteInfo = Account;
 		};
-		65ED3FB4235DEF6C0081F399 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 51554BFC228B6EB50055115A /* SyncDatabase.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = 51554BEA228B6E8F0055115A;
-			remoteInfo = SyncDatabase;
-		};
 		65ED41C4235E61550081F399 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 849C64581ED37A5D003D8FC0 /* Project object */;
@@ -1364,34 +1280,6 @@
 			remoteGlobalIDString = 848934FF1F62484F00CEBD24;
 			remoteInfo = AccountTests;
 		};
-		840716722262A60F00344432 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D542106B3D500DD04E6 /* Articles.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 844BEE5B1F0AB3C8004AB7CD;
-			remoteInfo = Articles;
-		};
-		840716742262A60F00344432 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D542106B3D500DD04E6 /* Articles.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 844BEE641F0AB3C9004AB7CD;
-			remoteInfo = ArticlesTests;
-		};
-		8407167E2262A61100344432 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 844BEE371F0AB3AA004AB7CD;
-			remoteInfo = ArticlesDatabase;
-		};
-		840716802262A61100344432 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 844BEE401F0AB3AB004AB7CD;
-			remoteInfo = ArticlesDatabaseTests;
-		};
 		849C64721ED37A5D003D8FC0 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 849C64581ED37A5D003D8FC0 /* Project object */;
@@ -1409,7 +1297,6 @@
 			dstSubfolderSpec = 10;
 			files = (
 				51B0DEF324D24A19000AD99E /* RSCore in Embed Frameworks */,
-				51B0DEF524D24A2E000AD99E /* Articles.framework in Embed Frameworks */,
 				51B0DEF724D24A9D000AD99E /* Account.framework in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
@@ -1446,9 +1333,6 @@
 				51C451F92264C83E00C03939 /* Account.framework in Embed Frameworks */,
 				510ECA4624D1E010001C31A6 /* RSTree in Embed Frameworks */,
 				51383A3624D1F91F0027E272 /* RSWeb in Embed Frameworks */,
-				51C451F12264C83100C03939 /* ArticlesDatabase.framework in Embed Frameworks */,
-				51C451F52264C83900C03939 /* Articles.framework in Embed Frameworks */,
-				51554C31228B71A10055115A /* SyncDatabase.framework in Embed Frameworks */,
 				5102AE6F24D17F9C0050839C /* RSCore in Embed Frameworks */,
 				5102FD9E24400A0500534F17 /* Secrets.framework in Embed Frameworks */,
 			);
@@ -1463,12 +1347,9 @@
 			files = (
 				51B0DF3424D2C903000AD99E /* RSParser in Embed Frameworks */,
 				51E4988024A8061400B667CB /* Account.framework in Embed Frameworks */,
-				51E4988224A8061400B667CB /* Articles.framework in Embed Frameworks */,
 				51383A3924D1F9470027E272 /* RSWeb in Embed Frameworks */,
-				51E4989424A8061400B667CB /* SyncDatabase.framework in Embed Frameworks */,
 				5102AE7A24D17FF20050839C /* RSCore in Embed Frameworks */,
 				51E4989224A8061400B667CB /* Secrets.framework in Embed Frameworks */,
-				51E4988424A8061400B667CB /* ArticlesDatabase.framework in Embed Frameworks */,
 				51B0DF1F24D24F53000AD99E /* RSDatabase in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
@@ -1485,11 +1366,8 @@
 				51E4989B24A8069300B667CB /* Account.framework in Embed Frameworks */,
 				51383A3C24D1F9510027E272 /* RSWeb in Embed Frameworks */,
 				5102AE7D24D17FFB0050839C /* RSCore in Embed Frameworks */,
-				51E4989D24A8069300B667CB /* Articles.framework in Embed Frameworks */,
-				51E498AF24A8069300B667CB /* SyncDatabase.framework in Embed Frameworks */,
 				51E4997724A87FFC00B667CB /* Sparkle.framework in Embed Frameworks */,
 				51E498AD24A8069300B667CB /* Secrets.framework in Embed Frameworks */,
-				51E4989F24A8069300B667CB /* ArticlesDatabase.framework in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1525,11 +1403,8 @@
 			dstPath = "";
 			dstSubfolderSpec = 10;
 			files = (
-				65ED4074235DEF6C0081F399 /* ArticlesDatabase.framework in Embed Frameworks */,
 				65ED4076235DEF6C0081F399 /* Account.framework in Embed Frameworks */,
-				65ED4077235DEF6C0081F399 /* Articles.framework in Embed Frameworks */,
 				5102AE6A24D17F7C0050839C /* RSCore in Embed Frameworks */,
-				65ED4079235DEF6C0081F399 /* SyncDatabase.framework in Embed Frameworks */,
 				5102FD9C244009FA00534F17 /* Secrets.framework in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
@@ -1571,11 +1446,8 @@
 				51383A3324D1F90E0027E272 /* RSWeb in Embed Frameworks */,
 				5102FD84244009F000534F17 /* Secrets.framework in Embed Frameworks */,
 				5102AE6524D17F640050839C /* RSCore in Embed Frameworks */,
-				51C451AA226377C200C03939 /* ArticlesDatabase.framework in Embed Frameworks */,
 				51C451BE226377D000C03939 /* Account.framework in Embed Frameworks */,
-				51C451BA226377C900C03939 /* Articles.framework in Embed Frameworks */,
 				65ED42DF235E74230081F399 /* Sparkle.framework in Embed Frameworks */,
-				51554C25228B71910055115A /* SyncDatabase.framework in Embed Frameworks */,
 				510ECA4324D1DCD0001C31A6 /* RSTree in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
@@ -1706,7 +1578,6 @@
 		514E6C0124AD29A300AC6F6E /* TimelineItemStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemStatusView.swift; sourceTree = "<group>"; };
 		514E6C0524AD2B5F00AC6F6E /* Image-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Image-Extensions.swift"; sourceTree = "<group>"; };
 		514E6C0824AD39AD00AC6F6E /* ArticleIconImageLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleIconImageLoader.swift; sourceTree = "<group>"; };
-		51554BFC228B6EB50055115A /* SyncDatabase.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SyncDatabase.xcodeproj; path = Frameworks/SyncDatabase/SyncDatabase.xcodeproj; sourceTree = SOURCE_ROOT; };
 		515A50E5243D07A90089E588 /* ExtensionPointManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionPointManager.swift; sourceTree = "<group>"; };
 		515A5106243D0CCD0089E588 /* TwitterFeedProvider-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TwitterFeedProvider-Extensions.swift"; sourceTree = "<group>"; };
 		515A5147243E64BA0089E588 /* ExtensionPointEnableWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionPointEnableWindowController.swift; sourceTree = "<group>"; };
@@ -1878,6 +1749,9 @@
 		51C452B72265178500C03939 /* styleSheet.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = styleSheet.css; sourceTree = "<group>"; };
 		51C65AFB24CCB2C9008EB3BD /* TimelineItems.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItems.swift; sourceTree = "<group>"; };
 		51C9DE5723EA2EF4003D5A6D /* WrapperScriptMessageHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WrapperScriptMessageHandler.swift; sourceTree = "<group>"; };
+		51CD32A824D2CB25009ABAEF /* SyncDatabase */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SyncDatabase; sourceTree = "<group>"; };
+		51CD32C324D2CD57009ABAEF /* ArticlesDatabase */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ArticlesDatabase; sourceTree = "<group>"; };
+		51CD32C424D2CF1D009ABAEF /* Articles */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Articles; sourceTree = "<group>"; };
 		51CE1C0823621EDA005548FC /* RefreshProgressView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RefreshProgressView.xib; sourceTree = "<group>"; };
 		51CE1C0A23622006005548FC /* RefreshProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshProgressView.swift; sourceTree = "<group>"; };
 		51D6A5BB23199C85001C27D8 /* MasterTimelineDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineDataSource.swift; sourceTree = "<group>"; };
@@ -1981,8 +1855,6 @@
 		841ABA4D20145E7300980E11 /* NothingInspectorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NothingInspectorViewController.swift; sourceTree = "<group>"; };
 		841ABA5D20145E9200980E11 /* FolderInspectorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderInspectorViewController.swift; sourceTree = "<group>"; };
 		841ABA5F20145EC100980E11 /* BuiltinSmartFeedInspectorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuiltinSmartFeedInspectorViewController.swift; sourceTree = "<group>"; };
-		841D4D542106B3D500DD04E6 /* Articles.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Articles.xcodeproj; path = ../Frameworks/Articles/Articles.xcodeproj; sourceTree = "<group>"; };
-		841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ArticlesDatabase.xcodeproj; path = ../Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj; sourceTree = "<group>"; };
 		84216D0222128B9D0049B9B9 /* DetailWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailWebViewController.swift; sourceTree = "<group>"; };
 		842611891FCB67AA0086A189 /* WebFeedIconDownloader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebFeedIconDownloader.swift; sourceTree = "<group>"; };
 		8426119D1FCB6ED40086A189 /* HTMLMetadataDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTMLMetadataDownloader.swift; sourceTree = "<group>"; };
@@ -2169,10 +2041,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				513146C3235A8FDB00387FDC /* ArticlesDatabase.framework in Frameworks */,
 				513146BF235A8FDB00387FDC /* Account.framework in Frameworks */,
-				513146C1235A8FDB00387FDC /* Articles.framework in Frameworks */,
-				513146C5235A8FDB00387FDC /* SyncDatabase.framework in Frameworks */,
 				5102FDA224400A2000534F17 /* Secrets.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -2182,7 +2051,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				51B0DEF224D24A19000AD99E /* RSCore in Frameworks */,
-				51B0DEF424D24A2E000AD99E /* Articles.framework in Frameworks */,
 				51B0DEF624D24A9D000AD99E /* Account.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -2203,12 +2071,9 @@
 				51383A3824D1F9470027E272 /* RSWeb in Frameworks */,
 				5102AE7924D17FF20050839C /* RSCore in Frameworks */,
 				51E4987F24A8061400B667CB /* Account.framework in Frameworks */,
-				51E4988124A8061400B667CB /* Articles.framework in Frameworks */,
-				51E4989324A8061400B667CB /* SyncDatabase.framework in Frameworks */,
 				51E4989724A8065700B667CB /* CloudKit.framework in Frameworks */,
 				51E4989124A8061400B667CB /* Secrets.framework in Frameworks */,
 				51E4989924A8067000B667CB /* WebKit.framework in Frameworks */,
-				51E4988324A8061400B667CB /* ArticlesDatabase.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2220,15 +2085,12 @@
 				51E4997624A87FFC00B667CB /* Sparkle.framework in Frameworks */,
 				51B0DF3024D2C8F6000AD99E /* RSParser in Frameworks */,
 				51E4989A24A8069300B667CB /* Account.framework in Frameworks */,
-				51E4989C24A8069300B667CB /* Articles.framework in Frameworks */,
-				51E498AE24A8069300B667CB /* SyncDatabase.framework in Frameworks */,
 				51383A3B24D1F9510027E272 /* RSWeb in Frameworks */,
 				51E498B124A806A400B667CB /* CloudKit.framework in Frameworks */,
 				5102AE7C24D17FFB0050839C /* RSCore in Frameworks */,
 				51B0DF2124D24F66000AD99E /* RSDatabase in Frameworks */,
 				51E498AC24A8069300B667CB /* Secrets.framework in Frameworks */,
 				51E498B324A806AA00B667CB /* WebKit.framework in Frameworks */,
-				51E4989E24A8069300B667CB /* ArticlesDatabase.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2244,12 +2106,9 @@
 			buildActionMask = 2147483647;
 			files = (
 				5102AE6C24D17F7C0050839C /* RSCoreResources in Frameworks */,
-				65ED4046235DEF6C0081F399 /* ArticlesDatabase.framework in Frameworks */,
 				65ED4048235DEF6C0081F399 /* Account.framework in Frameworks */,
-				65ED4049235DEF6C0081F399 /* Articles.framework in Frameworks */,
 				5102AE6924D17F7C0050839C /* RSCore in Frameworks */,
 				5102FD9B244009FA00534F17 /* Secrets.framework in Frameworks */,
-				65ED404B235DEF6C0081F399 /* SyncDatabase.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2270,10 +2129,7 @@
 				51C452B42265141B00C03939 /* WebKit.framework in Frameworks */,
 				5102FD9D24400A0500534F17 /* Secrets.framework in Frameworks */,
 				51C451F82264C83E00C03939 /* Account.framework in Frameworks */,
-				51C451F02264C83100C03939 /* ArticlesDatabase.framework in Frameworks */,
-				51C451F42264C83900C03939 /* Articles.framework in Frameworks */,
 				51E4DB082425F9EB0091EB5B /* CloudKit.framework in Frameworks */,
-				51554C30228B71A10055115A /* SyncDatabase.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2286,15 +2142,12 @@
 				65ED42D9235E740D0081F399 /* Sparkle.framework in Frameworks */,
 				510ECA4224D1DCD0001C31A6 /* RSTree in Frameworks */,
 				51B0DF0F24D24E3B000AD99E /* RSDatabase in Frameworks */,
-				51C451A9226377C200C03939 /* ArticlesDatabase.framework in Frameworks */,
 				51C451BD226377D000C03939 /* Account.framework in Frameworks */,
-				51C451B9226377C900C03939 /* Articles.framework in Frameworks */,
 				51E4DAED2425F6940091EB5B /* CloudKit.framework in Frameworks */,
 				51383A3224D1F90E0027E272 /* RSWeb in Frameworks */,
 				5102AE6424D17F640050839C /* RSCore in Frameworks */,
 				5102FD83244009F000534F17 /* Secrets.framework in Frameworks */,
 				51B0DF2524D2C7FA000AD99E /* RSParser in Frameworks */,
-				51554C24228B71910055115A /* SyncDatabase.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2599,14 +2452,6 @@
 			path = "SwiftUI Extensions";
 			sourceTree = "<group>";
 		};
-		51554BFD228B6EB50055115A /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				51554C01228B6EB50055115A /* SyncDatabase.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
 		516A093E236123A800EAE89B /* Account */ = {
 			isa = PBXGroup;
 			children = (
@@ -3128,24 +2973,6 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
-		8407166E2262A60F00344432 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				840716732262A60F00344432 /* Articles.framework */,
-				840716752262A60F00344432 /* ArticlesTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		8407167A2262A61100344432 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8407167F2262A61100344432 /* ArticlesDatabase.framework */,
-				840716812262A61100344432 /* ArticlesDatabaseTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
 		840D61942029031D009BC708 /* NetNewsWire-iOSTests */ = {
 			isa = PBXGroup;
 			children = (
@@ -3395,6 +3222,9 @@
 		849C64571ED37A5D003D8FC0 = {
 			isa = PBXGroup;
 			children = (
+				51CD32C424D2CF1D009ABAEF /* Articles */,
+				51CD32C324D2CD57009ABAEF /* ArticlesDatabase */,
+				51CD32A824D2CB25009ABAEF /* SyncDatabase */,
 				845B14A51FC2299E0013CF92 /* README.md */,
 				84D2200922B0BC4B0019E085 /* CONTRIBUTING.md */,
 				84CBDDAE1FD3674C005A61AA /* Technotes */,
@@ -3478,9 +3308,6 @@
 			children = (
 				846E77301F6EF5D600A165E2 /* Account.xcodeproj */,
 				5102FD72244008A700534F17 /* Secrets.xcodeproj */,
-				841D4D542106B3D500DD04E6 /* Articles.xcodeproj */,
-				841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */,
-				51554BFC228B6EB50055115A /* SyncDatabase.xcodeproj */,
 				842E45CD1ED8C308000A8B52 /* AppNotifications.swift */,
 				511B9805237DCAC90028BCAA /* UserInfoKey.swift */,
 				51C452AD2265102800C03939 /* Timeline */,
@@ -3912,10 +3739,7 @@
 			);
 			dependencies = (
 				65ED41C7235E615E0081F399 /* PBXTargetDependency */,
-				65ED3FAD235DEF6C0081F399 /* PBXTargetDependency */,
-				65ED3FAF235DEF6C0081F399 /* PBXTargetDependency */,
 				65ED3FB1235DEF6C0081F399 /* PBXTargetDependency */,
-				65ED3FB3235DEF6C0081F399 /* PBXTargetDependency */,
 			);
 			name = "NetNewsWire MAS";
 			packageProductDependencies = (
@@ -3987,10 +3811,7 @@
 			);
 			dependencies = (
 				65ED41C5235E61550081F399 /* PBXTargetDependency */,
-				51C451AC226377C300C03939 /* PBXTargetDependency */,
-				51C451BC226377C900C03939 /* PBXTargetDependency */,
 				51C451C0226377D000C03939 /* PBXTargetDependency */,
-				51554C27228B71910055115A /* PBXTargetDependency */,
 				65ED42D0235E71F60081F399 /* PBXTargetDependency */,
 				65ED42D2235E72000081F399 /* PBXTargetDependency */,
 				65ED42D4235E72000081F399 /* PBXTargetDependency */,
@@ -4130,14 +3951,6 @@
 					ProductGroup = 840716652262A60D00344432 /* Products */;
 					ProjectRef = 846E77301F6EF5D600A165E2 /* Account.xcodeproj */;
 				},
-				{
-					ProductGroup = 8407166E2262A60F00344432 /* Products */;
-					ProjectRef = 841D4D542106B3D500DD04E6 /* Articles.xcodeproj */;
-				},
-				{
-					ProductGroup = 8407167A2262A61100344432 /* Products */;
-					ProjectRef = 841D4D5E2106B3E100DD04E6 /* ArticlesDatabase.xcodeproj */;
-				},
 				{
 					ProductGroup = 5102FD73244008A700534F17 /* Products */;
 					ProjectRef = 5102FD72244008A700534F17 /* Secrets.xcodeproj */;
@@ -4146,10 +3959,6 @@
 					ProductGroup = 65ED429A235E71B40081F399 /* Products */;
 					ProjectRef = 65ED4299235E71B40081F399 /* Sparkle.xcodeproj */;
 				},
-				{
-					ProductGroup = 51554BFD228B6EB50055115A /* Products */;
-					ProjectRef = 51554BFC228B6EB50055115A /* SyncDatabase.xcodeproj */;
-				},
 			);
 			projectRoot = "";
 			targets = (
@@ -4176,13 +3985,6 @@
 			remoteRef = 5102FD7A244008A700534F17 /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
-		51554C01228B6EB50055115A /* SyncDatabase.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = SyncDatabase.framework;
-			remoteRef = 51554C00228B6EB50055115A /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
 		65ED42B0235E71B40081F399 /* Sparkle.framework */ = {
 			isa = PBXReferenceProxy;
 			fileType = wrapper.framework;
@@ -4309,34 +4111,6 @@
 			remoteRef = 8407166B2262A60D00344432 /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
-		840716732262A60F00344432 /* Articles.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = Articles.framework;
-			remoteRef = 840716722262A60F00344432 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		840716752262A60F00344432 /* ArticlesTests.xctest */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.cfbundle;
-			path = ArticlesTests.xctest;
-			remoteRef = 840716742262A60F00344432 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		8407167F2262A61100344432 /* ArticlesDatabase.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = ArticlesDatabase.framework;
-			remoteRef = 8407167E2262A61100344432 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-		840716812262A61100344432 /* ArticlesDatabaseTests.xctest */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.cfbundle;
-			path = ArticlesDatabaseTests.xctest;
-			remoteRef = 840716802262A61100344432 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -5582,51 +5356,21 @@
 			target = 51314636235A7BBE00387FDC /* NetNewsWire iOS Intents Extension */;
 			targetProxy = 5131463C235A7BBE00387FDC /* PBXContainerItemProxy */;
 		};
-		51554C27228B71910055115A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = SyncDatabase;
-			targetProxy = 51554C26228B71910055115A /* PBXContainerItemProxy */;
-		};
 		518B2ED82351B3DD00400001 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = 840D617B2029031C009BC708 /* NetNewsWire-iOS */;
 			targetProxy = 518B2ED72351B3DD00400001 /* PBXContainerItemProxy */;
 		};
-		51C451AC226377C300C03939 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = ArticlesDatabase;
-			targetProxy = 51C451AB226377C300C03939 /* PBXContainerItemProxy */;
-		};
-		51C451BC226377C900C03939 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = Articles;
-			targetProxy = 51C451BB226377C900C03939 /* PBXContainerItemProxy */;
-		};
 		51C451C0226377D000C03939 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			name = Account;
 			targetProxy = 51C451BF226377D000C03939 /* PBXContainerItemProxy */;
 		};
-		65ED3FAD235DEF6C0081F399 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = ArticlesDatabase;
-			targetProxy = 65ED3FAE235DEF6C0081F399 /* PBXContainerItemProxy */;
-		};
-		65ED3FAF235DEF6C0081F399 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = Articles;
-			targetProxy = 65ED3FB0235DEF6C0081F399 /* PBXContainerItemProxy */;
-		};
 		65ED3FB1235DEF6C0081F399 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			name = Account;
 			targetProxy = 65ED3FB2235DEF6C0081F399 /* PBXContainerItemProxy */;
 		};
-		65ED3FB3235DEF6C0081F399 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = SyncDatabase;
-			targetProxy = 65ED3FB4235DEF6C0081F399 /* PBXContainerItemProxy */;
-		};
 		65ED41C5235E61550081F399 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = 6581C73220CED60000F4AD34 /* Subscribe to Feed */;
diff --git a/SyncDatabase/.gitignore b/SyncDatabase/.gitignore
new file mode 100644
index 000000000..95c432091
--- /dev/null
+++ b/SyncDatabase/.gitignore
@@ -0,0 +1,5 @@
+.DS_Store
+/.build
+/Packages
+/*.xcodeproj
+xcuserdata/
diff --git a/SyncDatabase/Package.swift b/SyncDatabase/Package.swift
new file mode 100644
index 000000000..6c7c3528e
--- /dev/null
+++ b/SyncDatabase/Package.swift
@@ -0,0 +1,19 @@
+// swift-tools-version:5.3
+import PackageDescription
+
+let package = Package(
+    name: "SyncDatabase",
+    products: [
+        .library(
+            name: "SyncDatabase",
+            targets: ["SyncDatabase"]),
+    ],
+    dependencies: [
+		.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0-beta1")),
+    ],
+    targets: [
+        .target(
+            name: "SyncDatabase",
+            dependencies: []),
+    ]
+)
diff --git a/SyncDatabase/README.md b/SyncDatabase/README.md
new file mode 100644
index 000000000..f5d5dcfd3
--- /dev/null
+++ b/SyncDatabase/README.md
@@ -0,0 +1,3 @@
+# SyncDatabase
+
+A description of this package.
diff --git a/Frameworks/SyncDatabase/Constants.swift b/SyncDatabase/Sources/SyncDatabase/Constants.swift
similarity index 100%
rename from Frameworks/SyncDatabase/Constants.swift
rename to SyncDatabase/Sources/SyncDatabase/Constants.swift
diff --git a/Frameworks/SyncDatabase/SyncDatabase.swift b/SyncDatabase/Sources/SyncDatabase/SyncDatabase.swift
similarity index 100%
rename from Frameworks/SyncDatabase/SyncDatabase.swift
rename to SyncDatabase/Sources/SyncDatabase/SyncDatabase.swift
diff --git a/Frameworks/SyncDatabase/SyncStatus.swift b/SyncDatabase/Sources/SyncDatabase/SyncStatus.swift
similarity index 100%
rename from Frameworks/SyncDatabase/SyncStatus.swift
rename to SyncDatabase/Sources/SyncDatabase/SyncStatus.swift
diff --git a/Frameworks/SyncDatabase/SyncStatusTable.swift b/SyncDatabase/Sources/SyncDatabase/SyncStatusTable.swift
similarity index 100%
rename from Frameworks/SyncDatabase/SyncStatusTable.swift
rename to SyncDatabase/Sources/SyncDatabase/SyncStatusTable.swift