diff --git a/Multiplatform/Shared/Assets.xcassets/AccentColor.colorset/Contents.json b/Multiplatform/Shared/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 000000000..eb8789700
--- /dev/null
+++ b/Multiplatform/Shared/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 000000000..1d691a600
--- /dev/null
+++ b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,176 @@
+{
+ "images" : [
+ {
+ "filename" : "icon-40.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "icon-60.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "icon-58.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "icon-87.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "icon-80.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "icon-120.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "icon-121.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "filename" : "icon-180.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "filename" : "icon-20.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "icon-41.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "icon-29.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "icon-59.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "icon-42.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "icon-81.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "icon-76.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "icon-152.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "icon-167.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "83.5x83.5"
+ },
+ {
+ "filename" : "icon-1024.png",
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "icon_16x16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "icon_32x32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "icon_32x32-1.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "icon_32x32@2x.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "icon_128x128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "icon_256x256@2x.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "icon_256x256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "icon_256x256@2x-1.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "icon_512x512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "icon_512x512@2x.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-1024.png
new file mode 100644
index 000000000..c2bb5d540
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-120.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-120.png
new file mode 100644
index 000000000..6d1a94fd9
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-120.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-121.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-121.png
new file mode 100644
index 000000000..6d1a94fd9
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-121.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-152.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-152.png
new file mode 100644
index 000000000..b217d09c4
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-152.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-167.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-167.png
new file mode 100644
index 000000000..4cd8fa6c0
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-167.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-180.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-180.png
new file mode 100644
index 000000000..8c5c93b8c
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-180.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-20.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-20.png
new file mode 100644
index 000000000..6be295367
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-20.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-29.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-29.png
new file mode 100644
index 000000000..c9c8ffb32
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-29.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-40.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-40.png
new file mode 100644
index 000000000..180a98b25
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-40.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-41.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-41.png
new file mode 100644
index 000000000..180a98b25
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-41.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-42.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-42.png
new file mode 100644
index 000000000..180a98b25
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-42.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-58.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-58.png
new file mode 100644
index 000000000..a53d44864
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-58.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-59.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-59.png
new file mode 100644
index 000000000..a53d44864
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-59.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-60.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-60.png
new file mode 100644
index 000000000..7a01bc978
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-60.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-76.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-76.png
new file mode 100644
index 000000000..4aea101ae
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-76.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-80.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-80.png
new file mode 100644
index 000000000..85289428d
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-80.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-81.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-81.png
new file mode 100644
index 000000000..85289428d
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-81.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-87.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-87.png
new file mode 100644
index 000000000..dd27b3ca3
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon-87.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_128x128.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_128x128.png
new file mode 100644
index 000000000..9b8e86460
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_128x128.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_16x16.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_16x16.png
new file mode 100644
index 000000000..c8fc3ef69
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_16x16.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256.png
new file mode 100644
index 000000000..9a57c5df3
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x-1.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x-1.png
new file mode 100644
index 000000000..9a0005029
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x-1.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png
new file mode 100644
index 000000000..9a0005029
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32-1.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32-1.png
new file mode 100644
index 000000000..d93b02e85
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32-1.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32.png
new file mode 100644
index 000000000..d93b02e85
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png
new file mode 100644
index 000000000..c5debdda8
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_512x512.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_512x512.png
new file mode 100644
index 000000000..9a0005029
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_512x512.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png
new file mode 100644
index 000000000..eb5fe64e1
Binary files /dev/null and b/Multiplatform/Shared/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png differ
diff --git a/Multiplatform/Shared/Assets.xcassets/Contents.json b/Multiplatform/Shared/Assets.xcassets/Contents.json
new file mode 100644
index 000000000..73c00596a
--- /dev/null
+++ b/Multiplatform/Shared/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Multiplatform/Shared/ContentView.swift b/Multiplatform/Shared/ContentView.swift
new file mode 100644
index 000000000..e3d440b3b
--- /dev/null
+++ b/Multiplatform/Shared/ContentView.swift
@@ -0,0 +1,21 @@
+//
+// ContentView.swift
+// Shared
+//
+// Created by Maurice Parker on 6/27/20.
+// Copyright © 2020 Ranchero Software. All rights reserved.
+//
+
+import SwiftUI
+
+struct ContentView: View {
+ var body: some View {
+ Text("Hello, world!").padding()
+ }
+}
+
+struct ContentView_Previews: PreviewProvider {
+ static var previews: some View {
+ ContentView()
+ }
+}
diff --git a/Multiplatform/Shared/NetNewsWire_MultiplatformApp.swift b/Multiplatform/Shared/NetNewsWire_MultiplatformApp.swift
new file mode 100644
index 000000000..4173d0887
--- /dev/null
+++ b/Multiplatform/Shared/NetNewsWire_MultiplatformApp.swift
@@ -0,0 +1,18 @@
+//
+// NetNewsWire_MultiplatformApp.swift
+// Shared
+//
+// Created by Maurice Parker on 6/27/20.
+// Copyright © 2020 Ranchero Software. All rights reserved.
+//
+
+import SwiftUI
+
+@main
+struct NetNewsWire_MultiplatformApp: App {
+ var body: some Scene {
+ WindowGroup {
+ ContentView()
+ }
+ }
+}
diff --git a/Multiplatform/iOS/Info.plist b/Multiplatform/iOS/Info.plist
new file mode 100644
index 000000000..efc211a0c
--- /dev/null
+++ b/Multiplatform/iOS/Info.plist
@@ -0,0 +1,50 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+
+ UIApplicationSupportsIndirectInputEvents
+
+ UILaunchScreen
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/Multiplatform/iOS/iOS-dev.entitlements b/Multiplatform/iOS/iOS-dev.entitlements
new file mode 100644
index 000000000..05d04e805
--- /dev/null
+++ b/Multiplatform/iOS/iOS-dev.entitlements
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.application-groups
+
+ group.$(ORGANIZATION_IDENTIFIER).NetNewsWire.iOS
+
+ keychain-access-groups
+
+ $(AppIdentifierPrefix)$(ORGANIZATION_IDENTIFIER).NetNewsWire.iOS
+
+
+
diff --git a/Multiplatform/iOS/iOS.entitlements b/Multiplatform/iOS/iOS.entitlements
new file mode 100644
index 000000000..028d33157
--- /dev/null
+++ b/Multiplatform/iOS/iOS.entitlements
@@ -0,0 +1,24 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.icloud-container-identifiers
+
+ iCloud.$(ORGANIZATION_IDENTIFIER).NetNewsWire
+
+ com.apple.developer.icloud-services
+
+ CloudKit
+
+ com.apple.security.application-groups
+
+ group.$(ORGANIZATION_IDENTIFIER).NetNewsWire.iOS
+
+ keychain-access-groups
+
+ $(AppIdentifierPrefix)$(ORGANIZATION_IDENTIFIER).NetNewsWire.iOS
+
+
+
diff --git a/Multiplatform/macOS/Info.plist b/Multiplatform/macOS/Info.plist
new file mode 100644
index 000000000..705980986
--- /dev/null
+++ b/Multiplatform/macOS/Info.plist
@@ -0,0 +1,28 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ NSHumanReadableCopyright
+ Copyright © 2020 Ranchero Software. All rights reserved.
+
+
diff --git a/Multiplatform/macOS/macOS-dev.entitlements b/Multiplatform/macOS/macOS-dev.entitlements
new file mode 100644
index 000000000..f6af14e2f
--- /dev/null
+++ b/Multiplatform/macOS/macOS-dev.entitlements
@@ -0,0 +1,18 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.automation.apple-events
+
+ com.apple.security.files.user-selected.read-write
+
+ com.apple.security.network.client
+
+ com.apple.security.temporary-exception.apple-events
+
+ com.red-sweater.marsedit4
+
+
+
diff --git a/Multiplatform/macOS/macOS.entitlements b/Multiplatform/macOS/macOS.entitlements
new file mode 100644
index 000000000..7b1d03115
--- /dev/null
+++ b/Multiplatform/macOS/macOS.entitlements
@@ -0,0 +1,28 @@
+
+
+
+
+ com.apple.developer.aps-environment
+ development
+ com.apple.developer.icloud-container-identifiers
+
+ iCloud.$(ORGANIZATION_IDENTIFIER).NetNewsWire
+
+ com.apple.developer.icloud-services
+
+ CloudKit
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.automation.apple-events
+
+ com.apple.security.files.user-selected.read-write
+
+ com.apple.security.network.client
+
+ com.apple.security.temporary-exception.apple-events
+
+ com.red-sweater.marsedit4
+
+
+
diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj
index 09ccdf60e..bd14b6619 100644
--- a/NetNewsWire.xcodeproj/project.pbxproj
+++ b/NetNewsWire.xcodeproj/project.pbxproj
@@ -251,6 +251,12 @@
51BC4B00247277E0000A6ED8 /* URL-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BC4ADD247277DF000A6ED8 /* URL-Extensions.swift */; };
51BC4B01247277E0000A6ED8 /* URL-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BC4ADD247277DF000A6ED8 /* URL-Extensions.swift */; };
51BEB22D2451E8340066DEDD /* TwitterEnterDetailTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BEB22C2451E8340066DEDD /* TwitterEnterDetailTableViewController.swift */; };
+ 51C0515E24A77DF800194D5E /* NetNewsWire_MultiplatformApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C0513624A77DF700194D5E /* NetNewsWire_MultiplatformApp.swift */; };
+ 51C0515F24A77DF800194D5E /* NetNewsWire_MultiplatformApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C0513624A77DF700194D5E /* NetNewsWire_MultiplatformApp.swift */; };
+ 51C0516024A77DF800194D5E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C0513724A77DF700194D5E /* ContentView.swift */; };
+ 51C0516124A77DF800194D5E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C0513724A77DF700194D5E /* ContentView.swift */; };
+ 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, ); }; };
@@ -1559,6 +1565,19 @@
51BB7C302335ACDE008E8144 /* page.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = page.html; sourceTree = ""; };
51BC4ADD247277DF000A6ED8 /* URL-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "URL-Extensions.swift"; sourceTree = ""; };
51BEB22C2451E8340066DEDD /* TwitterEnterDetailTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwitterEnterDetailTableViewController.swift; sourceTree = ""; };
+ 51C0513624A77DF700194D5E /* NetNewsWire_MultiplatformApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetNewsWire_MultiplatformApp.swift; sourceTree = ""; };
+ 51C0513724A77DF700194D5E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
+ 51C0513824A77DF800194D5E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 51C0513D24A77DF800194D5E /* NetNewsWire.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NetNewsWire.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 51C0513F24A77DF800194D5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 51C0514424A77DF800194D5E /* NetNewsWire.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NetNewsWire.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 51C0514624A77DF800194D5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 51C0514724A77DF800194D5E /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = ""; };
+ 51C0519724A7808F00194D5E /* NetNewsWire_multiplatform_iOSapp_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = NetNewsWire_multiplatform_iOSapp_target.xcconfig; sourceTree = ""; };
+ 51C0519824A7808F00194D5E /* NetNewsWire_multiplatform_macOSapp_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = NetNewsWire_multiplatform_macOSapp_target.xcconfig; sourceTree = ""; };
+ 51C051CD24A7A6DB00194D5E /* macOS-dev.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "macOS-dev.entitlements"; sourceTree = ""; };
+ 51C051CE24A7A72100194D5E /* iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOS.entitlements; sourceTree = ""; };
+ 51C051CF24A7A72100194D5E /* iOS-dev.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "iOS-dev.entitlements"; sourceTree = ""; };
51C266E9238C334800F53014 /* ContextMenuPreviewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextMenuPreviewViewController.swift; sourceTree = ""; };
51C4524E226506F400C03939 /* UIStoryboard-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIStoryboard-Extensions.swift"; sourceTree = ""; };
51C45250226506F400C03939 /* String-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String-Extensions.swift"; sourceTree = ""; };
@@ -1887,6 +1906,20 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 51C0513A24A77DF800194D5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 51C0514124A77DF800194D5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
6581C73020CED60000F4AD34 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -2220,6 +2253,46 @@
path = CommonExtension;
sourceTree = "";
};
+ 51C0519224A77E3500194D5E /* Multiplatform */ = {
+ isa = PBXGroup;
+ children = (
+ 51C0519524A77E8B00194D5E /* Shared */,
+ 51C0519424A77E6D00194D5E /* macOS */,
+ 51C0519324A77E6600194D5E /* iOS */,
+ );
+ path = Multiplatform;
+ sourceTree = "";
+ };
+ 51C0519324A77E6600194D5E /* iOS */ = {
+ isa = PBXGroup;
+ children = (
+ 51C0513F24A77DF800194D5E /* Info.plist */,
+ 51C051CE24A7A72100194D5E /* iOS.entitlements */,
+ 51C051CF24A7A72100194D5E /* iOS-dev.entitlements */,
+ );
+ path = iOS;
+ sourceTree = "";
+ };
+ 51C0519424A77E6D00194D5E /* macOS */ = {
+ isa = PBXGroup;
+ children = (
+ 51C0514624A77DF800194D5E /* Info.plist */,
+ 51C0514724A77DF800194D5E /* macOS.entitlements */,
+ 51C051CD24A7A6DB00194D5E /* macOS-dev.entitlements */,
+ );
+ path = macOS;
+ sourceTree = "";
+ };
+ 51C0519524A77E8B00194D5E /* Shared */ = {
+ isa = PBXGroup;
+ children = (
+ 51C0513624A77DF700194D5E /* NetNewsWire_MultiplatformApp.swift */,
+ 51C0513724A77DF700194D5E /* ContentView.swift */,
+ 51C0513824A77DF800194D5E /* Assets.xcassets */,
+ );
+ path = Shared;
+ sourceTree = "";
+ };
51C45245226506C800C03939 /* UIKit Extensions */ = {
isa = PBXGroup;
children = (
@@ -2720,6 +2793,7 @@
84CBDDAE1FD3674C005A61AA /* Technotes */,
84C9FC6522629B3900D921D6 /* Mac */,
84C9FC922262A0E600D921D6 /* iOS */,
+ 51C0519224A77E3500194D5E /* Multiplatform */,
84C9FC6822629C9A00D921D6 /* Shared */,
84C9FCA52262A1E600D921D6 /* Tests */,
D5907CDA2002F084005947E5 /* xcconfig */,
@@ -2747,6 +2821,8 @@
51314637235A7BBE00387FDC /* NetNewsWire iOS Intents Extension.appex */,
65ED4083235DEF6C0081F399 /* NetNewsWire.app */,
65ED409D235DEF770081F399 /* Subscribe to Feed.appex */,
+ 51C0513D24A77DF800194D5E /* NetNewsWire.app */,
+ 51C0514424A77DF800194D5E /* NetNewsWire.app */,
);
name = Products;
sourceTree = "";
@@ -3101,19 +3177,21 @@
D5907CDA2002F084005947E5 /* xcconfig */ = {
isa = PBXGroup;
children = (
- D5907CDD2002F0BE005947E5 /* NetNewsWire_project_debug.xcconfig */,
- D5907CDC2002F0BE005947E5 /* NetNewsWire_project_release.xcconfig */,
- D5907CDE2002F0BE005947E5 /* NetNewsWire_project.xcconfig */,
- D5907CE02002F0FA005947E5 /* NetNewsWire_macapp_target.xcconfig */,
- 65ED40F2235DF5E00081F399 /* NetNewsWire_macapp_target_macappstore.xcconfig */,
- D5907CDF2002F0F9005947E5 /* NetNewsWireTests_target.xcconfig */,
- D519E74722EE553300923F27 /* NetNewsWire_safariextension_target.xcconfig */,
- 65ED4186235E045B0081F399 /* NetNewsWire_safariextension_target_macappstore.xcconfig */,
+ 6543108B2322D90900658221 /* common */,
51121AA12265430A00BC0EC1 /* NetNewsWire_iOSapp_target.xcconfig */,
51314617235A797400387FDC /* NetNewsWire_iOSintentextension_target.xcconfig */,
515D4FCE2325B3D000EE1167 /* NetNewsWire_iOSshareextension_target.xcconfig */,
518B2EE92351B4C200400001 /* NetNewsWire_iOSTests_target.xcconfig */,
- 6543108B2322D90900658221 /* common */,
+ 65ED40F2235DF5E00081F399 /* NetNewsWire_macapp_target_macappstore.xcconfig */,
+ D5907CE02002F0FA005947E5 /* NetNewsWire_macapp_target.xcconfig */,
+ 51C0519724A7808F00194D5E /* NetNewsWire_multiplatform_iOSapp_target.xcconfig */,
+ 51C0519824A7808F00194D5E /* NetNewsWire_multiplatform_macOSapp_target.xcconfig */,
+ D5907CDD2002F0BE005947E5 /* NetNewsWire_project_debug.xcconfig */,
+ D5907CDC2002F0BE005947E5 /* NetNewsWire_project_release.xcconfig */,
+ D5907CDE2002F0BE005947E5 /* NetNewsWire_project.xcconfig */,
+ 65ED4186235E045B0081F399 /* NetNewsWire_safariextension_target_macappstore.xcconfig */,
+ D519E74722EE553300923F27 /* NetNewsWire_safariextension_target.xcconfig */,
+ D5907CDF2002F0F9005947E5 /* NetNewsWireTests_target.xcconfig */,
);
path = xcconfig;
sourceTree = "";
@@ -3191,6 +3269,40 @@
productReference = 518B2ED22351B3DD00400001 /* NetNewsWire-iOSTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
+ 51C0513C24A77DF800194D5E /* Multiplatform iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 51C0518D24A77DF800194D5E /* Build configuration list for PBXNativeTarget "Multiplatform iOS" */;
+ buildPhases = (
+ 51C0513924A77DF800194D5E /* Sources */,
+ 51C0513A24A77DF800194D5E /* Frameworks */,
+ 51C0513B24A77DF800194D5E /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Multiplatform iOS";
+ productName = iOS;
+ productReference = 51C0513D24A77DF800194D5E /* NetNewsWire.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 51C0514324A77DF800194D5E /* Multiplatform macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 51C0518E24A77DF800194D5E /* Build configuration list for PBXNativeTarget "Multiplatform macOS" */;
+ buildPhases = (
+ 51C0514024A77DF800194D5E /* Sources */,
+ 51C0514124A77DF800194D5E /* Frameworks */,
+ 51C0514224A77DF800194D5E /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Multiplatform macOS";
+ productName = macOS;
+ productReference = 51C0514424A77DF800194D5E /* NetNewsWire.app */;
+ productType = "com.apple.product-type.application";
+ };
6581C73220CED60000F4AD34 /* Subscribe to Feed */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6581C75620CED60100F4AD34 /* Build configuration list for PBXNativeTarget "Subscribe to Feed" */;
@@ -3340,7 +3452,7 @@
849C64581ED37A5D003D8FC0 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastSwiftUpdateCheck = 1120;
+ LastSwiftUpdateCheck = 1200;
LastUpgradeCheck = 0930;
ORGANIZATIONNAME = "Ranchero Software";
TargetAttributes = {
@@ -3361,6 +3473,16 @@
ProvisioningStyle = Automatic;
TestTargetID = 840D617B2029031C009BC708;
};
+ 51C0513C24A77DF800194D5E = {
+ CreatedOnToolsVersion = 12.0;
+ DevelopmentTeam = SHJK2V3AJG;
+ ProvisioningStyle = Automatic;
+ };
+ 51C0514324A77DF800194D5E = {
+ CreatedOnToolsVersion = 12.0;
+ DevelopmentTeam = SHJK2V3AJG;
+ ProvisioningStyle = Automatic;
+ };
6581C73220CED60000F4AD34 = {
DevelopmentTeam = SHJK2V3AJG;
ProvisioningStyle = Automatic;
@@ -3474,6 +3596,8 @@
513C5CE5232571C2003D4054 /* NetNewsWire iOS Share Extension */,
51314636235A7BBE00387FDC /* NetNewsWire iOS Intents Extension */,
518B2ED12351B3DD00400001 /* NetNewsWire-iOSTests */,
+ 51C0513C24A77DF800194D5E /* Multiplatform iOS */,
+ 51C0514324A77DF800194D5E /* Multiplatform macOS */,
);
};
/* End PBXProject section */
@@ -3816,6 +3940,22 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 51C0513B24A77DF800194D5E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 51C0516224A77DF800194D5E /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 51C0514224A77DF800194D5E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 51C0516324A77DF800194D5E /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
6581C73120CED60000F4AD34 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -4129,6 +4269,24 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 51C0513924A77DF800194D5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 51C0516024A77DF800194D5E /* ContentView.swift in Sources */,
+ 51C0515E24A77DF800194D5E /* NetNewsWire_MultiplatformApp.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 51C0514024A77DF800194D5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 51C0516124A77DF800194D5E /* ContentView.swift in Sources */,
+ 51C0515F24A77DF800194D5E /* NetNewsWire_MultiplatformApp.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
6581C72F20CED60000F4AD34 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -4990,6 +5148,32 @@
};
name = Release;
};
+ 51C0516424A77DF800194D5E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 51C0519724A7808F00194D5E /* NetNewsWire_multiplatform_iOSapp_target.xcconfig */;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ 51C0516524A77DF800194D5E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Release;
+ };
+ 51C0516624A77DF800194D5E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 51C0519824A7808F00194D5E /* NetNewsWire_multiplatform_macOSapp_target.xcconfig */;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ 51C0516724A77DF800194D5E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Release;
+ };
6581C74720CED60100F4AD34 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = D519E74722EE553300923F27 /* NetNewsWire_safariextension_target.xcconfig */;
@@ -5124,6 +5308,24 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 51C0518D24A77DF800194D5E /* Build configuration list for PBXNativeTarget "Multiplatform iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 51C0516424A77DF800194D5E /* Debug */,
+ 51C0516524A77DF800194D5E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 51C0518E24A77DF800194D5E /* Build configuration list for PBXNativeTarget "Multiplatform macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 51C0516624A77DF800194D5E /* Debug */,
+ 51C0516724A77DF800194D5E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
6581C75620CED60100F4AD34 /* Build configuration list for PBXNativeTarget "Subscribe to Feed" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/NetNewsWire.xcodeproj/xcshareddata/xcschemes/Multiplatform iOS.xcscheme b/NetNewsWire.xcodeproj/xcshareddata/xcschemes/Multiplatform iOS.xcscheme
new file mode 100644
index 000000000..fb13f1bad
--- /dev/null
+++ b/NetNewsWire.xcodeproj/xcshareddata/xcschemes/Multiplatform iOS.xcscheme
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetNewsWire.xcodeproj/xcshareddata/xcschemes/NetNewsWire.xcscheme b/NetNewsWire.xcodeproj/xcshareddata/xcschemes/NetNewsWire.xcscheme
index 5a6644028..558eacef4 100644
--- a/NetNewsWire.xcodeproj/xcshareddata/xcschemes/NetNewsWire.xcscheme
+++ b/NetNewsWire.xcodeproj/xcshareddata/xcschemes/NetNewsWire.xcscheme
@@ -96,6 +96,16 @@
ReferencedContainer = "container:Frameworks/ArticlesDatabase/ArticlesDatabase.xcodeproj">
+
+
+
+
+// ORGANIZATION_IDENTIFIER =
+// CODE_SIGN_STYLE = Automatic
+// DEVELOPER_ENTITLEMENTS = -dev
+// PROVISIONING_PROFILE_SPECIFIER =
+//
+// And you should be able to build without code signing errors and without modifying
+// the NetNewsWire Xcode project.
+//
+// Example: if your NetNewsWire Xcode project file is at
+// /Users/Shared/git/NetNewsWire/NetNewsWire.xcodeproj
+// create your DeveloperSettings.xcconfig file at
+// /Users/Shared/git/SharedXcodeSettings/DeveloperSettings.xcconfig
+//
+
+#include? "../../SharedXcodeSettings/ProjectSettings.xcconfig"
+#include? "../../SharedXcodeSettings/DeveloperSettings.xcconfig"
+#include "./common/NetNewsWire_ios_target_common.xcconfig"
+
+LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks
+INFOPLIST_FILE = Multiplatform/iOS/Info.plist
+CODE_SIGN_ENTITLEMENTS = Multiplatform/iOS/iOS$(DEVELOPER_ENTITLEMENTS).entitlements
+PRODUCT_BUNDLE_IDENTIFIER = $(ORGANIZATION_IDENTIFIER).NetNewsWire.Multiplatform.iOS
+PRODUCT_NAME = NetNewsWire
+
+// Override NetNewsWire_project.xcconfig until we are ready to only target 10.16
+IPHONEOS_DEPLOYMENT_TARGET = 14.0
+SWIFT_SWIFT3_OBJC_INFERENCE = Off
+SWIFT_VERSION = 5.3
+
diff --git a/xcconfig/NetNewsWire_multiplatform_macOSapp_target.xcconfig b/xcconfig/NetNewsWire_multiplatform_macOSapp_target.xcconfig
new file mode 100644
index 000000000..faa0a0f0a
--- /dev/null
+++ b/xcconfig/NetNewsWire_multiplatform_macOSapp_target.xcconfig
@@ -0,0 +1,46 @@
+CODE_SIGN_IDENTITY = Developer ID Application
+DEVELOPMENT_TEAM = M8L2WTLA8W
+CODE_SIGN_STYLE = Manual
+ORGANIZATION_IDENTIFIER = com.ranchero
+PROVISIONING_PROFILE_SPECIFIER = NetNewsWire
+DEVELOPER_ENTITLEMENTS =
+
+// developers can locally override the Xcode settings for code signing
+// by creating a DeveloperSettings.xcconfig file locally at the appropriate path
+// This allows a pristine project to have code signing set up with the appropriate
+// developer ID and certificates, and for dev to be able to have local settings
+// without needing to check in anything into source control
+//
+// As an example, make a ../../SharedXcodeSettings/DeveloperSettings.xcconfig file and
+// give it the contents
+//
+// CODE_SIGN_IDENTITY[sdk=macosx*] = Mac Developer
+// CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer
+// CODE_SIGN_IDENTITY[sdk=iphonesimulator*] = iPhone Developer
+// DEVELOPMENT_TEAM =
+// ORGANIZATION_IDENTIFIER =
+// CODE_SIGN_STYLE = Automatic
+// DEVELOPER_ENTITLEMENTS = -dev
+// PROVISIONING_PROFILE_SPECIFIER =
+//
+// And you should be able to build without code signing errors and without modifying
+// the NetNewsWire Xcode project.
+//
+// Example: if your NetNewsWire Xcode project file is at
+// /Users/Shared/git/NetNewsWire/NetNewsWire.xcodeproj
+// create your DeveloperSettings.xcconfig file at
+// /Users/Shared/git/SharedXcodeSettings/DeveloperSettings.xcconfig
+//
+
+#include? "../../SharedXcodeSettings/DeveloperSettings.xcconfig"
+#include "./common/NetNewsWire_macapp_target_common.xcconfig"
+
+INFOPLIST_FILE = Multiplatform/macOS/Info.plist
+CODE_SIGN_ENTITLEMENTS = Multiplatform/macOS/macOS$(DEVELOPER_ENTITLEMENTS).entitlements
+PRODUCT_BUNDLE_IDENTIFIER = $(ORGANIZATION_IDENTIFIER).NetNewsWire.Multiplatform.macOS
+PRODUCT_NAME = NetNewsWire
+
+// Override NetNewsWire_project.xcconfig until we are ready to only target 10.16
+MACOSX_DEPLOYMENT_TARGET = 10.16
+SWIFT_SWIFT3_OBJC_INFERENCE = Off
+SWIFT_VERSION = 5.3