Merge remote-tracking branch 'brentsimmons/master'

This commit is contained in:
Olof Hellman 2018-02-06 18:08:57 -08:00
commit 2e4217236b
29 changed files with 1101 additions and 557 deletions

View File

@ -6,6 +6,28 @@
<description>Most recent Evergreen changes with links to updates.</description>
<language>en</language>
<item>
<title>Evergreen 1.0d35</title>
<description><![CDATA[
<h4>Sidebar Gear Menu</h4>
<p>You can rename, mark as read, and copy URLs.</p>
<p>(Delete isnt there yet, but its planned for 1.0.)</p>
<h4>Misc.</h4>
<p>You can sort the timeline by newest on top or oldest on top. See the View > Sort By menu.</p>
<p>Share menu now supports EagleFiler Impot and Add to Reading List. (Thanks to a contribution by Michael Tsai.)</p>
<p>Go > Today, Unread, Starred commands work, including keyboard shortcuts. (Nothing appears yet, though. Thats a separate bug.)</p>
<p>Fixed a bug where the add-feed command wouldnt disable when a sheet was already displaying.</p>
<p>Removed Debug menu when running a Release build.</p>
<p>Punted multiple window support till after 1.0.</p>
]]></description>
<pubDate>Sun, 04 Feb 2018 12:00:00 -0800</pubDate>
<enclosure url="https://ranchero.com/downloads/Evergreen1.0d35.zip" sparkle:version="920" sparkle:shortVersionString="1.0d35" length="7331028" type="application/zip" />
<sparkle:minimumSystemVersion>10.13</sparkle:minimumSystemVersion>
</item>
<item>
<title>Evergreen 1.0d34</title>
<description><![CDATA[

View File

@ -2,8 +2,8 @@
// AppDelegate.swift
// Evergreen-iOS
//
// Created by Brent Simmons on 2/2/18.
// Copyright © 2018 Ranchero Software, LLC. All rights reserved.
// Created by Brent Simmons on 2/5/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import UIKit

View File

@ -0,0 +1,98 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "83.5x83.5",
"scale" : "2x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -2,8 +2,8 @@
// DetailViewController.swift
// Evergreen-iOS
//
// Created by Brent Simmons on 2/2/18.
// Copyright © 2018 Ranchero Software, LLC. All rights reserved.
// Created by Brent Simmons on 2/5/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import UIKit

View File

@ -1,453 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 48;
objects = {
/* Begin PBXBuildFile section */
84E3B1622025877000E03C2F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3B1612025877000E03C2F /* AppDelegate.swift */; };
84E3B1642025877000E03C2F /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3B1632025877000E03C2F /* MasterViewController.swift */; };
84E3B1662025877000E03C2F /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3B1652025877000E03C2F /* DetailViewController.swift */; };
84E3B1692025877000E03C2F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 84E3B1672025877000E03C2F /* Main.storyboard */; };
84E3B16B2025877000E03C2F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 84E3B16A2025877000E03C2F /* Assets.xcassets */; };
84E3B16E2025877000E03C2F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 84E3B16C2025877000E03C2F /* LaunchScreen.storyboard */; };
84E3B1792025877000E03C2F /* Evergreen_iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3B1782025877000E03C2F /* Evergreen_iOSTests.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
84E3B1752025877000E03C2F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 84E3B1562025877000E03C2F /* Project object */;
proxyType = 1;
remoteGlobalIDString = 84E3B15D2025877000E03C2F;
remoteInfo = "Evergreen-iOS";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
84E3B15E2025877000E03C2F /* Evergreen-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Evergreen-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
84E3B1612025877000E03C2F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
84E3B1632025877000E03C2F /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = "<group>"; };
84E3B1652025877000E03C2F /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = "<group>"; };
84E3B1682025877000E03C2F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
84E3B16A2025877000E03C2F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
84E3B16D2025877000E03C2F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
84E3B16F2025877000E03C2F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
84E3B1742025877000E03C2F /* Evergreen-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Evergreen-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
84E3B1782025877000E03C2F /* Evergreen_iOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Evergreen_iOSTests.swift; sourceTree = "<group>"; };
84E3B17A2025877000E03C2F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
84E3B15B2025877000E03C2F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
84E3B1712025877000E03C2F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
84E3B1552025877000E03C2F = {
isa = PBXGroup;
children = (
84E3B1602025877000E03C2F /* Evergreen-iOS */,
84E3B1772025877000E03C2F /* Evergreen-iOSTests */,
84E3B15F2025877000E03C2F /* Products */,
);
sourceTree = "<group>";
};
84E3B15F2025877000E03C2F /* Products */ = {
isa = PBXGroup;
children = (
84E3B15E2025877000E03C2F /* Evergreen-iOS.app */,
84E3B1742025877000E03C2F /* Evergreen-iOSTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
84E3B1602025877000E03C2F /* Evergreen-iOS */ = {
isa = PBXGroup;
children = (
84E3B1612025877000E03C2F /* AppDelegate.swift */,
84E3B1632025877000E03C2F /* MasterViewController.swift */,
84E3B1652025877000E03C2F /* DetailViewController.swift */,
84E3B1672025877000E03C2F /* Main.storyboard */,
84E3B16A2025877000E03C2F /* Assets.xcassets */,
84E3B16C2025877000E03C2F /* LaunchScreen.storyboard */,
84E3B16F2025877000E03C2F /* Info.plist */,
);
path = "Evergreen-iOS";
sourceTree = "<group>";
};
84E3B1772025877000E03C2F /* Evergreen-iOSTests */ = {
isa = PBXGroup;
children = (
84E3B1782025877000E03C2F /* Evergreen_iOSTests.swift */,
84E3B17A2025877000E03C2F /* Info.plist */,
);
path = "Evergreen-iOSTests";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
84E3B15D2025877000E03C2F /* Evergreen-iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 84E3B17D2025877000E03C2F /* Build configuration list for PBXNativeTarget "Evergreen-iOS" */;
buildPhases = (
84E3B15A2025877000E03C2F /* Sources */,
84E3B15B2025877000E03C2F /* Frameworks */,
84E3B15C2025877000E03C2F /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "Evergreen-iOS";
productName = "Evergreen-iOS";
productReference = 84E3B15E2025877000E03C2F /* Evergreen-iOS.app */;
productType = "com.apple.product-type.application";
};
84E3B1732025877000E03C2F /* Evergreen-iOSTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 84E3B1802025877000E03C2F /* Build configuration list for PBXNativeTarget "Evergreen-iOSTests" */;
buildPhases = (
84E3B1702025877000E03C2F /* Sources */,
84E3B1712025877000E03C2F /* Frameworks */,
84E3B1722025877000E03C2F /* Resources */,
);
buildRules = (
);
dependencies = (
84E3B1762025877000E03C2F /* PBXTargetDependency */,
);
name = "Evergreen-iOSTests";
productName = "Evergreen-iOSTests";
productReference = 84E3B1742025877000E03C2F /* Evergreen-iOSTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
84E3B1562025877000E03C2F /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
LastUpgradeCheck = 0920;
ORGANIZATIONNAME = "Ranchero Software, LLC";
TargetAttributes = {
84E3B15D2025877000E03C2F = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Automatic;
};
84E3B1732025877000E03C2F = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Automatic;
TestTargetID = 84E3B15D2025877000E03C2F;
};
};
};
buildConfigurationList = 84E3B1592025877000E03C2F /* Build configuration list for PBXProject "Evergreen-iOS" */;
compatibilityVersion = "Xcode 8.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 84E3B1552025877000E03C2F;
productRefGroup = 84E3B15F2025877000E03C2F /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
84E3B15D2025877000E03C2F /* Evergreen-iOS */,
84E3B1732025877000E03C2F /* Evergreen-iOSTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
84E3B15C2025877000E03C2F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
84E3B16E2025877000E03C2F /* LaunchScreen.storyboard in Resources */,
84E3B16B2025877000E03C2F /* Assets.xcassets in Resources */,
84E3B1692025877000E03C2F /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
84E3B1722025877000E03C2F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
84E3B15A2025877000E03C2F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
84E3B1662025877000E03C2F /* DetailViewController.swift in Sources */,
84E3B1642025877000E03C2F /* MasterViewController.swift in Sources */,
84E3B1622025877000E03C2F /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
84E3B1702025877000E03C2F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
84E3B1792025877000E03C2F /* Evergreen_iOSTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
84E3B1762025877000E03C2F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 84E3B15D2025877000E03C2F /* Evergreen-iOS */;
targetProxy = 84E3B1752025877000E03C2F /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
84E3B1672025877000E03C2F /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
84E3B1682025877000E03C2F /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
84E3B16C2025877000E03C2F /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
84E3B16D2025877000E03C2F /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
84E3B17B2025877000E03C2F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.2;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
84E3B17C2025877000E03C2F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.2;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
84E3B17E2025877000E03C2F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = M8L2WTLA8W;
INFOPLIST_FILE = "Evergreen-iOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
84E3B17F2025877000E03C2F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = M8L2WTLA8W;
INFOPLIST_FILE = "Evergreen-iOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
84E3B1812025877000E03C2F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = M8L2WTLA8W;
INFOPLIST_FILE = "Evergreen-iOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Evergreen-iOS.app/Evergreen-iOS";
};
name = Debug;
};
84E3B1822025877000E03C2F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = M8L2WTLA8W;
INFOPLIST_FILE = "Evergreen-iOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Evergreen-iOS.app/Evergreen-iOS";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
84E3B1592025877000E03C2F /* Build configuration list for PBXProject "Evergreen-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
84E3B17B2025877000E03C2F /* Debug */,
84E3B17C2025877000E03C2F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
84E3B17D2025877000E03C2F /* Build configuration list for PBXNativeTarget "Evergreen-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
84E3B17E2025877000E03C2F /* Debug */,
84E3B17F2025877000E03C2F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
84E3B1802025877000E03C2F /* Build configuration list for PBXNativeTarget "Evergreen-iOSTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
84E3B1812025877000E03C2F /* Debug */,
84E3B1822025877000E03C2F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 84E3B1562025877000E03C2F /* Project object */;
}

View File

@ -26,7 +26,7 @@
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
<string>arm64</string>
</array>
<key>UIStatusBarTintParameters</key>
<dict>

View File

@ -2,8 +2,8 @@
// MasterViewController.swift
// Evergreen-iOS
//
// Created by Brent Simmons on 2/2/18.
// Copyright © 2018 Ranchero Software, LLC. All rights reserved.
// Created by Brent Simmons on 2/5/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import UIKit

View File

@ -2,8 +2,8 @@
// Evergreen_iOSTests.swift
// Evergreen-iOSTests
//
// Created by Brent Simmons on 2/2/18.
// Copyright © 2018 Ranchero Software, LLC. All rights reserved.
// Created by Brent Simmons on 2/5/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import XCTest

View File

@ -0,0 +1,36 @@
//
// Evergreen_iOSUITests.swift
// Evergreen-iOSUITests
//
// Created by Brent Simmons on 2/5/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import XCTest
class Evergreen_iOSUITests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
XCUIApplication().launch()
// In UI tests its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// Use recording to get started writing UI tests.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
}

View File

@ -0,0 +1,22 @@
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View File

@ -8,6 +8,14 @@
/* Begin PBXBuildFile section */
8403E75B201C4A79007F7246 /* FeedListKeyboardDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8403E75A201C4A79007F7246 /* FeedListKeyboardDelegate.swift */; };
840D617F2029031C009BC708 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D617E2029031C009BC708 /* AppDelegate.swift */; };
840D61812029031C009BC708 /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D61802029031C009BC708 /* MasterViewController.swift */; };
840D61832029031C009BC708 /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D61822029031C009BC708 /* DetailViewController.swift */; };
840D61862029031C009BC708 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 840D61842029031C009BC708 /* Main.storyboard */; };
840D61882029031D009BC708 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 840D61872029031D009BC708 /* Assets.xcassets */; };
840D618B2029031D009BC708 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 840D61892029031D009BC708 /* LaunchScreen.storyboard */; };
840D61962029031D009BC708 /* Evergreen_iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D61952029031D009BC708 /* Evergreen_iOSTests.swift */; };
840D61A12029031E009BC708 /* Evergreen_iOSUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D61A02029031E009BC708 /* Evergreen_iOSUITests.swift */; };
8414AD251FCF5A1E00955102 /* TimelineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8414AD241FCF5A1E00955102 /* TimelineHeaderView.swift */; };
841ABA4E20145E7300980E11 /* NothingInspectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841ABA4D20145E7300980E11 /* NothingInspectorViewController.swift */; };
841ABA5E20145E9200980E11 /* FolderInspectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841ABA5D20145E9200980E11 /* FolderInspectorViewController.swift */; };
@ -108,7 +116,7 @@
84B06FFE1ED3818D00F0B54B /* RSTree.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84B06FFA1ED3818000F0B54B /* RSTree.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
84B0700A1ED3822600F0B54B /* RSTextDrawing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B070071ED3821900F0B54B /* RSTextDrawing.framework */; };
84B0700B1ED3822600F0B54B /* RSTextDrawing.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84B070071ED3821900F0B54B /* RSTextDrawing.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
84B7178C201E66580091657D /* MainWindowController+ContextualMenus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B7178B201E66580091657D /* MainWindowController+ContextualMenus.swift */; };
84B7178C201E66580091657D /* SidebarViewController+ContextualMenus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B7178B201E66580091657D /* SidebarViewController+ContextualMenus.swift */; };
84B99C671FAE35E600ECDEDB /* FeedListTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C661FAE35E600ECDEDB /* FeedListTreeControllerDelegate.swift */; };
84B99C691FAE36B800ECDEDB /* FeedListFolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C681FAE36B800ECDEDB /* FeedListFolder.swift */; };
84B99C6B1FAE370B00ECDEDB /* FeedListFeed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C6A1FAE370B00ECDEDB /* FeedListFeed.swift */; };
@ -167,19 +175,19 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
84659B8920259341008DB8F8 /* PBXContainerItemProxy */ = {
840D61922029031D009BC708 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 84659B8020259341008DB8F8 /* Evergreen-iOS.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 84E3B15E2025877000E03C2F;
containerPortal = 849C64581ED37A5D003D8FC0 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 840D617B2029031C009BC708;
remoteInfo = "Evergreen-iOS";
};
84659B8B20259341008DB8F8 /* PBXContainerItemProxy */ = {
840D619D2029031E009BC708 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 84659B8020259341008DB8F8 /* Evergreen-iOS.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 84E3B1742025877000E03C2F;
remoteInfo = "Evergreen-iOSTests";
containerPortal = 849C64581ED37A5D003D8FC0 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 840D617B2029031C009BC708;
remoteInfo = "Evergreen-iOS";
};
846E77201F6EF5D100A165E2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
@ -485,6 +493,20 @@
/* Begin PBXFileReference section */
8403E75A201C4A79007F7246 /* FeedListKeyboardDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedListKeyboardDelegate.swift; sourceTree = "<group>"; };
840D617C2029031C009BC708 /* Evergreen.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Evergreen.app; sourceTree = BUILT_PRODUCTS_DIR; };
840D617E2029031C009BC708 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
840D61802029031C009BC708 /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = "<group>"; };
840D61822029031C009BC708 /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = "<group>"; };
840D61852029031C009BC708 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
840D61872029031D009BC708 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
840D618A2029031D009BC708 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
840D618C2029031D009BC708 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
840D61912029031D009BC708 /* Evergreen-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Evergreen-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
840D61952029031D009BC708 /* Evergreen_iOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Evergreen_iOSTests.swift; sourceTree = "<group>"; };
840D61972029031D009BC708 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
840D619C2029031D009BC708 /* Evergreen-iOSUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Evergreen-iOSUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
840D61A02029031E009BC708 /* Evergreen_iOSUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Evergreen_iOSUITests.swift; sourceTree = "<group>"; };
840D61A22029031E009BC708 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8414AD241FCF5A1E00955102 /* TimelineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineHeaderView.swift; sourceTree = "<group>"; };
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>"; };
@ -515,7 +537,6 @@
845EE7B01FC2366500854A1F /* StarredFeedDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StarredFeedDelegate.swift; sourceTree = "<group>"; };
845EE7C01FC2488C00854A1F /* SmartFeed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartFeed.swift; sourceTree = "<group>"; };
845F52EC1FB2B9FC00C10BF0 /* FeedPasteboardWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedPasteboardWriter.swift; sourceTree = "<group>"; };
84659B8020259341008DB8F8 /* Evergreen-iOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "Evergreen-iOS.xcodeproj"; path = "Evergreen-iOS/Evergreen-iOS.xcodeproj"; sourceTree = "<group>"; };
846E77161F6EF5D000A165E2 /* Database.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Database.xcodeproj; path = Frameworks/Database/Database.xcodeproj; sourceTree = "<group>"; };
846E77301F6EF5D600A165E2 /* Account.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Account.xcodeproj; path = Frameworks/Account/Account.xcodeproj; sourceTree = "<group>"; };
84702AA31FA27AC0006B8943 /* MarkReadOrUnreadCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkReadOrUnreadCommand.swift; sourceTree = "<group>"; };
@ -584,7 +605,7 @@
84B06FE01ED3803200F0B54B /* RSFeedFinder.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSFeedFinder.xcodeproj; path = Frameworks/RSFeedFinder/RSFeedFinder.xcodeproj; sourceTree = "<group>"; };
84B06FF41ED3818000F0B54B /* RSTree.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSTree.xcodeproj; path = Frameworks/RSTree/RSTree.xcodeproj; sourceTree = "<group>"; };
84B070011ED3821800F0B54B /* RSTextDrawing.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSTextDrawing.xcodeproj; path = Frameworks/RSTextDrawing/RSTextDrawing.xcodeproj; sourceTree = "<group>"; };
84B7178B201E66580091657D /* MainWindowController+ContextualMenus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "MainWindowController+ContextualMenus.swift"; sourceTree = "<group>"; };
84B7178B201E66580091657D /* SidebarViewController+ContextualMenus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SidebarViewController+ContextualMenus.swift"; sourceTree = "<group>"; };
84B99C661FAE35E600ECDEDB /* FeedListTreeControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedListTreeControllerDelegate.swift; sourceTree = "<group>"; };
84B99C681FAE36B800ECDEDB /* FeedListFolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedListFolder.swift; sourceTree = "<group>"; };
84B99C6A1FAE370B00ECDEDB /* FeedListFeed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedListFeed.swift; sourceTree = "<group>"; };
@ -639,6 +660,27 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
840D61792029031C009BC708 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
840D618E2029031D009BC708 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
840D61992029031D009BC708 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
849C645D1ED37A5D003D8FC0 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@ -668,6 +710,38 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
840D617D2029031C009BC708 /* Evergreen-iOS */ = {
isa = PBXGroup;
children = (
840D617E2029031C009BC708 /* AppDelegate.swift */,
840D61802029031C009BC708 /* MasterViewController.swift */,
840D61822029031C009BC708 /* DetailViewController.swift */,
840D61842029031C009BC708 /* Main.storyboard */,
840D61872029031D009BC708 /* Assets.xcassets */,
840D61892029031D009BC708 /* LaunchScreen.storyboard */,
840D618C2029031D009BC708 /* Info.plist */,
);
path = "Evergreen-iOS";
sourceTree = "<group>";
};
840D61942029031D009BC708 /* Evergreen-iOSTests */ = {
isa = PBXGroup;
children = (
840D61952029031D009BC708 /* Evergreen_iOSTests.swift */,
840D61972029031D009BC708 /* Info.plist */,
);
path = "Evergreen-iOSTests";
sourceTree = "<group>";
};
840D619F2029031E009BC708 /* Evergreen-iOSUITests */ = {
isa = PBXGroup;
children = (
840D61A02029031E009BC708 /* Evergreen_iOSUITests.swift */,
840D61A22029031E009BC708 /* Info.plist */,
);
path = "Evergreen-iOSUITests";
sourceTree = "<group>";
};
8426119C1FCB6ED40086A189 /* HTMLMetadata */ = {
isa = PBXGroup;
children = (
@ -699,7 +773,6 @@
849A977C1ED9EC42007D329B /* Detail */,
849A97551ED9EAC3007D329B /* Add Feed */,
849A97411ED9EAA9007D329B /* Add Folder */,
84B7178A201E66580091657D /* ContextualMenus */,
);
name = MainWindow;
path = Evergreen/MainWindow;
@ -763,15 +836,6 @@
path = Cell;
sourceTree = "<group>";
};
84659B8120259341008DB8F8 /* Products */ = {
isa = PBXGroup;
children = (
84659B8A20259341008DB8F8 /* Evergreen-iOS.app */,
84659B8C20259341008DB8F8 /* Evergreen-iOSTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
846E77171F6EF5D000A165E2 /* Products */ = {
isa = PBXGroup;
children = (
@ -849,6 +913,7 @@
isa = PBXGroup;
children = (
849A97621ED9EB96007D329B /* SidebarViewController.swift */,
84B7178B201E66580091657D /* SidebarViewController+ContextualMenus.swift */,
849A97601ED9EB96007D329B /* SidebarOutlineView.swift */,
849A97611ED9EB96007D329B /* SidebarTreeControllerDelegate.swift */,
849A97631ED9EB96007D329B /* UnreadCountView.swift */,
@ -1001,11 +1066,13 @@
D5907D6F2004AB67005947E5 /* Scriptability */,
D5558FD6200227E60066386B /* AppleEvents */,
849A97991ED9EFB6007D329B /* Resources */,
840D617D2029031C009BC708 /* Evergreen-iOS */,
840D61942029031D009BC708 /* Evergreen-iOSTests */,
840D619F2029031E009BC708 /* Evergreen-iOSUITests */,
84FB9A2C1EDCD6A4003D53B9 /* Frameworks */,
849C64741ED37A5D003D8FC0 /* EvergreenTests */,
D5907CDA2002F084005947E5 /* xcconfig */,
849C64611ED37A5D003D8FC0 /* Products */,
84659B8020259341008DB8F8 /* Evergreen-iOS.xcodeproj */,
846E77301F6EF5D600A165E2 /* Account.xcodeproj */,
846E77161F6EF5D000A165E2 /* Database.xcodeproj */,
84BB4B611F1174D400858766 /* Data.xcodeproj */,
@ -1025,6 +1092,9 @@
children = (
849C64601ED37A5D003D8FC0 /* Evergreen.app */,
849C64711ED37A5D003D8FC0 /* EvergreenTests.xctest */,
840D617C2029031C009BC708 /* Evergreen.app */,
840D61912029031D009BC708 /* Evergreen-iOSTests.xctest */,
840D619C2029031D009BC708 /* Evergreen-iOSUITests.xctest */,
);
name = Products;
sourceTree = "<group>";
@ -1124,14 +1194,6 @@
name = Products;
sourceTree = "<group>";
};
84B7178A201E66580091657D /* ContextualMenus */ = {
isa = PBXGroup;
children = (
84B7178B201E66580091657D /* MainWindowController+ContextualMenus.swift */,
);
path = ContextualMenus;
sourceTree = "<group>";
};
84BB4B621F1174D400858766 /* Products */ = {
isa = PBXGroup;
children = (
@ -1261,6 +1323,59 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
840D617B2029031C009BC708 /* Evergreen-iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 840D61A32029031E009BC708 /* Build configuration list for PBXNativeTarget "Evergreen-iOS" */;
buildPhases = (
840D61782029031C009BC708 /* Sources */,
840D61792029031C009BC708 /* Frameworks */,
840D617A2029031C009BC708 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "Evergreen-iOS";
productName = "Evergreen-iOS";
productReference = 840D617C2029031C009BC708 /* Evergreen.app */;
productType = "com.apple.product-type.application";
};
840D61902029031D009BC708 /* Evergreen-iOSTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 840D61A62029031E009BC708 /* Build configuration list for PBXNativeTarget "Evergreen-iOSTests" */;
buildPhases = (
840D618D2029031D009BC708 /* Sources */,
840D618E2029031D009BC708 /* Frameworks */,
840D618F2029031D009BC708 /* Resources */,
);
buildRules = (
);
dependencies = (
840D61932029031D009BC708 /* PBXTargetDependency */,
);
name = "Evergreen-iOSTests";
productName = "Evergreen-iOSTests";
productReference = 840D61912029031D009BC708 /* Evergreen-iOSTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
840D619B2029031D009BC708 /* Evergreen-iOSUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 840D61A92029031E009BC708 /* Build configuration list for PBXNativeTarget "Evergreen-iOSUITests" */;
buildPhases = (
840D61982029031D009BC708 /* Sources */,
840D61992029031D009BC708 /* Frameworks */,
840D619A2029031D009BC708 /* Resources */,
);
buildRules = (
);
dependencies = (
840D619E2029031E009BC708 /* PBXTargetDependency */,
);
name = "Evergreen-iOSUITests";
productName = "Evergreen-iOSUITests";
productReference = 840D619C2029031D009BC708 /* Evergreen-iOSUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
849C645F1ED37A5D003D8FC0 /* Evergreen */ = {
isa = PBXNativeTarget;
buildConfigurationList = 849C647A1ED37A5D003D8FC0 /* Build configuration list for PBXNativeTarget "Evergreen" */;
@ -1316,10 +1431,27 @@
849C64581ED37A5D003D8FC0 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0820;
LastSwiftUpdateCheck = 0930;
LastUpgradeCheck = 0930;
ORGANIZATIONNAME = "Ranchero Software";
TargetAttributes = {
840D617B2029031C009BC708 = {
CreatedOnToolsVersion = 9.3;
DevelopmentTeam = 9C84TZ7Q6Z;
ProvisioningStyle = Automatic;
};
840D61902029031D009BC708 = {
CreatedOnToolsVersion = 9.3;
DevelopmentTeam = 9C84TZ7Q6Z;
ProvisioningStyle = Automatic;
TestTargetID = 840D617B2029031C009BC708;
};
840D619B2029031D009BC708 = {
CreatedOnToolsVersion = 9.3;
DevelopmentTeam = 9C84TZ7Q6Z;
ProvisioningStyle = Automatic;
TestTargetID = 840D617B2029031C009BC708;
};
849C645F1ED37A5D003D8FC0 = {
CreatedOnToolsVersion = 8.2.1;
DevelopmentTeam = M8L2WTLA8W;
@ -1361,10 +1493,6 @@
ProductGroup = 84B06FC71ED37F7200F0B54B /* Products */;
ProjectRef = 84B06FC61ED37F7200F0B54B /* DB5.xcodeproj */;
},
{
ProductGroup = 84659B8120259341008DB8F8 /* Products */;
ProjectRef = 84659B8020259341008DB8F8 /* Evergreen-iOS.xcodeproj */;
},
{
ProductGroup = 84B06FA31ED37DAC00F0B54B /* Products */;
ProjectRef = 84B06FA21ED37DAC00F0B54B /* RSCore.xcodeproj */;
@ -1398,25 +1526,14 @@
targets = (
849C645F1ED37A5D003D8FC0 /* Evergreen */,
849C64701ED37A5D003D8FC0 /* EvergreenTests */,
840D617B2029031C009BC708 /* Evergreen-iOS */,
840D61902029031D009BC708 /* Evergreen-iOSTests */,
840D619B2029031D009BC708 /* Evergreen-iOSUITests */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
84659B8A20259341008DB8F8 /* Evergreen-iOS.app */ = {
isa = PBXReferenceProxy;
fileType = wrapper.application;
path = "Evergreen-iOS.app";
remoteRef = 84659B8920259341008DB8F8 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
84659B8C20259341008DB8F8 /* Evergreen-iOSTests.xctest */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = "Evergreen-iOSTests.xctest";
remoteRef = 84659B8B20259341008DB8F8 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
846E77211F6EF5D100A165E2 /* Database.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
@ -1595,6 +1712,30 @@
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
840D617A2029031C009BC708 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
840D618B2029031D009BC708 /* LaunchScreen.storyboard in Resources */,
840D61882029031D009BC708 /* Assets.xcassets in Resources */,
840D61862029031C009BC708 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
840D618F2029031D009BC708 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
840D619A2029031D009BC708 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
849C645E1ED37A5D003D8FC0 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@ -1648,6 +1789,32 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
840D61782029031C009BC708 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
840D61832029031C009BC708 /* DetailViewController.swift in Sources */,
840D61812029031C009BC708 /* MasterViewController.swift in Sources */,
840D617F2029031C009BC708 /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
840D618D2029031D009BC708 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
840D61962029031D009BC708 /* Evergreen_iOSTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
840D61982029031D009BC708 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
840D61A12029031E009BC708 /* Evergreen_iOSUITests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
849C645C1ED37A5D003D8FC0 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@ -1693,7 +1860,7 @@
84A14FF320048CA70046AD9A /* SendToMicroBlogCommand.swift in Sources */,
849A97891ED9ECEF007D329B /* ArticleStyle.swift in Sources */,
84FF69B11FC3793300DC198E /* FaviconURLFinder.swift in Sources */,
84B7178C201E66580091657D /* MainWindowController+ContextualMenus.swift in Sources */,
84B7178C201E66580091657D /* SidebarViewController+ContextualMenus.swift in Sources */,
842611A21FCB769D0086A189 /* RSHTMLMetadata+Extension.swift in Sources */,
84A1500520048DDF0046AD9A /* SendToMarsEditCommand.swift in Sources */,
D5907DB22004BB37005947E5 /* ScriptingObjectContainer.swift in Sources */,
@ -1771,6 +1938,16 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
840D61932029031D009BC708 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 840D617B2029031C009BC708 /* Evergreen-iOS */;
targetProxy = 840D61922029031D009BC708 /* PBXContainerItemProxy */;
};
840D619E2029031E009BC708 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 840D617B2029031C009BC708 /* Evergreen-iOS */;
targetProxy = 840D619D2029031E009BC708 /* PBXContainerItemProxy */;
};
846E77401F6EF67A00A165E2 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = Account;
@ -1834,6 +2011,22 @@
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
840D61842029031C009BC708 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
840D61852029031C009BC708 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
840D61892029031D009BC708 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
840D618A2029031D009BC708 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
849A97931ED9EF7A007D329B /* IndeterminateProgressWindow.xib */ = {
isa = PBXVariantGroup;
children = (
@ -1894,6 +2087,405 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
840D61A42029031E009BC708 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 9C84TZ7Q6Z;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Evergreen-iOS/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOS";
PRODUCT_NAME = Evergreen;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
840D61A52029031E009BC708 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 9C84TZ7Q6Z;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Evergreen-iOS/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOS";
PRODUCT_NAME = Evergreen;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
840D61A72029031E009BC708 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ALWAYS_SEARCH_USER_PATHS = NO;
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 9C84TZ7Q6Z;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Evergreen-iOSTests/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Evergreen-iOS.app/Evergreen-iOS";
};
name = Debug;
};
840D61A82029031E009BC708 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ALWAYS_SEARCH_USER_PATHS = NO;
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 9C84TZ7Q6Z;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Evergreen-iOSTests/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Evergreen-iOS.app/Evergreen-iOS";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
840D61AA2029031E009BC708 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 9C84TZ7Q6Z;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Evergreen-iOSUITests/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOSUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = "Evergreen-iOS";
};
name = Debug;
};
840D61AB2029031E009BC708 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 9C84TZ7Q6Z;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Evergreen-iOSUITests/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 11.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "com.ranchero.Evergreen-iOSUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = "Evergreen-iOS";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
849C64781ED37A5D003D8FC0 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = D5907CDD2002F0BE005947E5 /* Evergreen_project_debug.xcconfig */;
@ -1941,6 +2533,33 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
840D61A32029031E009BC708 /* Build configuration list for PBXNativeTarget "Evergreen-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
840D61A42029031E009BC708 /* Debug */,
840D61A52029031E009BC708 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
840D61A62029031E009BC708 /* Build configuration list for PBXNativeTarget "Evergreen-iOSTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
840D61A72029031E009BC708 /* Debug */,
840D61A82029031E009BC708 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
840D61A92029031E009BC708 /* Build configuration list for PBXNativeTarget "Evergreen-iOSUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
840D61AA2029031E009BC708 /* Debug */,
840D61AB2029031E009BC708 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
849C645B1ED37A5D003D8FC0 /* Build configuration list for PBXProject "Evergreen" */ = {
isa = XCConfigurationList;
buildConfigurations = (

View File

@ -101,6 +101,12 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations,
addFolderWindowController!.runSheetOnWindow(window)
}
func showAddFeedSheetOnWindow(_ window: NSWindow, urlString: String?, name: String?) {
addFeedController = AddFeedController(hostWindow: window)
addFeedController?.showAddFeedSheet(urlString, name)
}
// MARK: - NSApplicationDelegate
func applicationDidFinishLaunching(_ note: Notification) {
@ -249,15 +255,20 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations,
func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool {
let isDisplayingSheet = mainWindowController?.isDisplayingSheet ?? false
if item.action == #selector(refreshAll(_:)) {
return !AccountManager.shared.refreshInProgress
}
if item.action == #selector(addAppNews(_:)) {
return !AccountManager.shared.anyAccountHasFeedWithURL(appNewsURLString)
return !isDisplayingSheet && !AccountManager.shared.anyAccountHasFeedWithURL(appNewsURLString)
}
if item.action == #selector(sortByNewestArticleOnTop(_:)) || item.action == #selector(sortByOldestArticleOnTop(_:)) {
return mainWindowController?.isOpen ?? false
}
if item.action == #selector(showAddFeedWindow(_:)) || item.action == #selector(showAddFolderWindow(_:)) {
return !isDisplayingSheet
}
return true
}
@ -266,9 +277,11 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations,
func addFeed(_ urlString: String?, _ name: String? = nil) {
createAndShowMainWindow()
if mainWindowController!.isDisplayingSheet {
return
}
addFeedController = AddFeedController(hostWindow: mainWindowController!.window!)
addFeedController?.showAddFeedSheet(urlString, name)
showAddFeedSheetOnWindow(mainWindowController!.window!, urlString: urlString, name: name)
}
// MARK: - Actions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="14087.3" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14087.3"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>

View File

@ -10,11 +10,12 @@
<outlet property="newTitleTextField" destination="OYZ-cW-H2x" id="QBo-lj-NGi"/>
<outlet property="renameButton" destination="RI3-Rg-htY" id="PMM-jS-psV"/>
<outlet property="renamePrompt" destination="Sh3-Yd-lqa" id="wd5-4I-pYl"/>
<outlet property="window" destination="QvC-M9-y7g" id="eYQ-Qy-Z2g"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Rename" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
<window title="Rename" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="424" height="116"/>
@ -41,13 +42,22 @@
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="delegate" destination="-2" id="5Oi-0v-kuj"/>
</connections>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RI3-Rg-htY">
<rect key="frame" x="321" y="13" width="89" height="32"/>
<buttonCell key="cell" type="push" title="Rename" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="gcS-uM-zjx">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
</buttonCell>
<connections>
<action selector="rename:" target="-1" id="ba5-O4-rNJ"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vuB-kU-1EJ">
<rect key="frame" x="232" y="13" width="89" height="32"/>
@ -58,6 +68,9 @@
Gw
</string>
</buttonCell>
<connections>
<action selector="cancel:" target="-1" id="4sS-Ja-Gev"/>
</connections>
</button>
</subviews>
<constraints>

View File

@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0d34</string>
<string>1.0d35</string>
<key>CFBundleVersion</key>
<string>522</string>
<key>LSMinimumSystemVersion</key>

View File

@ -18,6 +18,13 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
return isWindowLoaded && window!.isVisible
}
var isDisplayingSheet: Bool {
if let _ = window?.attachedSheet {
return true
}
return false
}
// MARK: NSWindowController
private let windowAutosaveName = NSWindow.FrameAutosaveName(rawValue: kWindowFrameKey)
@ -169,6 +176,11 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
appDelegate.showAddFolderSheetOnWindow(window!)
}
@IBAction func showAddFeedWindow(_ sender: Any) {
appDelegate.showAddFeedSheetOnWindow(window!, urlString: nil, name: nil)
}
@IBAction func openArticleInBrowser(_ sender: Any?) {
if let link = currentLink {

View File

@ -26,7 +26,7 @@ import Data
func writableTypes(for pasteboard: NSPasteboard) -> [NSPasteboard.PasteboardType] {
return [.string, .URL, FeedPasteboardWriter.feedUTIType, FeedPasteboardWriter.feedUTIInternalType]
return [FeedPasteboardWriter.feedUTIType, .URL, .string, FeedPasteboardWriter.feedUTIInternalType]
}
func pasteboardPropertyList(forType type: NSPasteboard.PasteboardType) -> Any? {

View File

@ -8,17 +8,71 @@
import AppKit
protocol RenameWindowControllerDelegate {
func renameWindowController(_ windowController: RenameWindowController, didRenameObject: Any, withNewName: String)
}
final class RenameWindowController: NSWindowController {
@IBOutlet var renamePrompt: NSTextField!
@IBOutlet var newTitleTextField: NSTextField!
@IBOutlet var renameButton: NSButton!
private var originalTitle: String!
private var originalTitle: String?
private var representedObject: Any?
private var delegate: RenameWindowControllerDelegate?
public convenience init(originalTitle: String) {
convenience init(originalTitle: String, representedObject: Any, delegate: RenameWindowControllerDelegate) {
self.init(windowNibName: NSNib.Name(rawValue: "RenameSheet"))
self.originalTitle = originalTitle
self.representedObject = representedObject
self.delegate = delegate
}
override func windowDidLoad() {
newTitleTextField.stringValue = originalTitle!
let prompt = NSLocalizedString("Rename %@ to:", comment: "Rename sheet")
let localizedPrompt = NSString.localizedStringWithFormat(prompt as NSString, originalTitle!)
renamePrompt.stringValue = localizedPrompt as String
updateUI()
}
// MARK: Actions
@IBAction func cancel(_ sender: AnyObject) {
window?.sheetParent?.endSheet(window!, returnCode: .cancel)
}
@IBAction func rename(_ sender: AnyObject) {
guard let representedObject = representedObject else {
return
}
delegate?.renameWindowController(self, didRenameObject: representedObject, withNewName: newTitleTextField.stringValue)
window?.sheetParent?.endSheet(window!, returnCode: .OK)
}
}
extension RenameWindowController: NSTextFieldDelegate {
override func controlTextDidChange(_ obj: Notification) {
updateUI()
}
}
private extension RenameWindowController {
func updateUI() {
let newTitle = newTitleTextField.stringValue
renameButton.isEnabled = !newTitle.isEmpty && newTitle != originalTitle
}
}

View File

@ -1,5 +1,5 @@
//
// MainWindowController+ContextualMenus.swift
// SidebarViewController+ContextualMenus.swift
// Evergreen
//
// Created by Brent Simmons on 1/28/18.
@ -11,12 +11,12 @@ import Data
import Account
import RSCore
extension MainWindowController {
extension SidebarViewController {
func menu(for objects: [Any]?) -> NSMenu? {
guard let objects = objects, objects.count > 0 else {
return nil
return menuForNoSelection()
}
if objects.count == 1 {
@ -35,7 +35,7 @@ extension MainWindowController {
// MARK: Contextual Menu Actions
extension MainWindowController {
extension SidebarViewController {
@objc func openHomePageFromContextualMenu(_ sender: Any?) {
@ -55,6 +55,19 @@ extension MainWindowController {
@objc func markObjectsReadFromContextualMenu(_ sender: Any?) {
guard let menuItem = sender as? NSMenuItem, let objects = menuItem.representedObject as? [Any] else {
return
}
let articles = unreadArticles(for: objects)
if articles.isEmpty {
return
}
guard let undoManager = undoManager, let markReadCommand = MarkReadOrUnreadCommand(initialArticles: Array(articles), markingRead: true, undoManager: undoManager) else {
return
}
runCommand(markReadCommand)
}
@objc func deleteFromContextualMenu(_ sender: Any?) {
@ -63,12 +76,44 @@ extension MainWindowController {
@objc func renameFromContextualMenu(_ sender: Any?) {
guard let window = view.window, let menuItem = sender as? NSMenuItem, let object = menuItem.representedObject as? DisplayNameProvider, object is Feed || object is Folder else {
return
}
renameWindowController = RenameWindowController(originalTitle: object.nameForDisplay, representedObject: object, delegate: self)
guard let renameSheet = renameWindowController?.window else {
return
}
window.beginSheet(renameSheet)
}
}
extension SidebarViewController: RenameWindowControllerDelegate {
func renameWindowController(_ windowController: RenameWindowController, didRenameObject object: Any, withNewName name: String) {
if let feed = object as? Feed {
feed.editedName = name
}
else if let folder = object as? Folder {
folder.name = name
}
}
}
// MARK: Build Contextual Menus
private extension MainWindowController {
private extension SidebarViewController {
func menuForNoSelection() -> NSMenu {
let menu = NSMenu(title: "")
menu.addItem(withTitle: NSLocalizedString("New Feed", comment: "Command"), action: #selector(MainWindowController.showAddFeedWindow(_:)), keyEquivalent: "")
menu.addItem(withTitle: NSLocalizedString("New Folder", comment: "Command"), action: #selector(MainWindowController.showAddFolderWindow(_:)), keyEquivalent: "")
return menu
}
func menuForFeed(_ feed: Feed) -> NSMenu? {
@ -95,7 +140,7 @@ private extension MainWindowController {
menu.addItem(NSMenuItem.separator())
menu.addItem(renameMenuItem(feed))
menu.addItem(deleteMenuItem([feed]))
// menu.addItem(deleteMenuItem([feed]))
return menu
}
@ -110,7 +155,7 @@ private extension MainWindowController {
}
menu.addItem(renameMenuItem(folder))
menu.addItem(deleteMenuItem([folder]))
// menu.addItem(deleteMenuItem([folder]))
return menu.numberOfItems > 0 ? menu : nil
}
@ -125,10 +170,10 @@ private extension MainWindowController {
if anyObjectInArrayHasNonZeroUnreadCount(objects) {
menu.addItem(markAllReadMenuItem(objects))
menu.addItem(NSMenuItem.separator())
// menu.addItem(NSMenuItem.separator())
}
menu.addItem(deleteMenuItem(objects))
// menu.addItem(deleteMenuItem(objects))
return menu.numberOfItems > 0 ? menu : nil
}
@ -182,5 +227,16 @@ private extension MainWindowController {
item.target = self
return item
}
func unreadArticles(for objects: [Any]) -> Set<Article> {
var articles = Set<Article>()
for object in objects {
if let articleFetcher = object as? ArticleFetcher {
articles.formUnion(articleFetcher.fetchUnreadArticles())
}
}
return articles
}
}

View File

@ -25,6 +25,8 @@ import RSCore
private var animatingChanges = false
private var sidebarCellAppearance: SidebarCellAppearance!
var renameWindowController: RenameWindowController?
var selectedObjects: [AnyObject] {
return selectedNodes.representedObjects()
}
@ -195,10 +197,7 @@ import RSCore
func contextualMenuForSelectedObjects() -> NSMenu? {
guard let mainWindowController = view.window?.windowController as? MainWindowController else {
return nil
}
return mainWindowController.menu(for: selectedObjects)
return menu(for: selectedObjects)
}
// MARK: NSOutlineViewDelegate

View File

@ -334,6 +334,13 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
return articles
}
public func fetchUnreadArticles(for feed: Feed) -> Set<Article> {
let articles = database.fetchUnreadArticles(for: Set([feed]))
validateUnreadCount(feed, articles)
return articles
}
public func fetchArticles(folder: Folder) -> Set<Article> {
let feeds = folder.flattenedFeeds()

View File

@ -28,6 +28,7 @@
84C3654A1F899F3B001EC85C /* CombinedRefreshProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C365491F899F3B001EC85C /* CombinedRefreshProgress.swift */; };
84C8B3F41F89DE430053CCA6 /* DataExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C8B3F31F89DE430053CCA6 /* DataExtensions.swift */; };
84CAD7161FDF2E22000F0755 /* FeedbinArticle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CAD7151FDF2E22000F0755 /* FeedbinArticle.swift */; };
84F73CF1202788D90000BCEF /* ArticleFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F73CF0202788D80000BCEF /* ArticleFetcher.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -128,6 +129,7 @@
84C365491F899F3B001EC85C /* CombinedRefreshProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombinedRefreshProgress.swift; sourceTree = "<group>"; };
84C8B3F31F89DE430053CCA6 /* DataExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataExtensions.swift; sourceTree = "<group>"; };
84CAD7151FDF2E22000F0755 /* FeedbinArticle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbinArticle.swift; sourceTree = "<group>"; };
84F73CF0202788D80000BCEF /* ArticleFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleFetcher.swift; sourceTree = "<group>"; };
D511EEB5202422BB00712EC3 /* Account_project_debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Account_project_debug.xcconfig; sourceTree = "<group>"; };
D511EEB6202422BB00712EC3 /* Account_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Account_target.xcconfig; sourceTree = "<group>"; };
D511EEB7202422BB00712EC3 /* Account_project_release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Account_project_release.xcconfig; sourceTree = "<group>"; };
@ -237,6 +239,7 @@
84B99C9E1FAE8D3200ECDEDB /* ContainerPath.swift */,
84C365491F899F3B001EC85C /* CombinedRefreshProgress.swift */,
84C8B3F31F89DE430053CCA6 /* DataExtensions.swift */,
84F73CF0202788D80000BCEF /* ArticleFetcher.swift */,
8419740D1F6DD25F006346C4 /* Container.swift */,
8419742B1F6DDE84006346C4 /* LocalAccount */,
84245C7D1FDDD2580074AFBB /* Feedbin */,
@ -476,6 +479,7 @@
84C3654A1F899F3B001EC85C /* CombinedRefreshProgress.swift in Sources */,
8469F81C1F6DD15E0084783E /* Account.swift in Sources */,
846E77451F6EF9B900A165E2 /* Container.swift in Sources */,
84F73CF1202788D90000BCEF /* ArticleFetcher.swift in Sources */,
84245C7F1FDDD2580074AFBB /* FeedbinAccountDelegate.swift in Sources */,
841974251F6DDCE4006346C4 /* AccountDelegate.swift in Sources */,
846E77541F6F00E300A165E2 /* AccountManager.swift in Sources */,

View File

@ -0,0 +1,55 @@
//
// ArticleFetcher.swift
// Account
//
// Created by Brent Simmons on 2/4/18.
// Copyright © 2018 Ranchero Software, LLC. All rights reserved.
//
import Foundation
import Data
public protocol ArticleFetcher {
func fetchArticles() -> Set<Article>
func fetchUnreadArticles() -> Set<Article>
}
extension Feed: ArticleFetcher {
public func fetchArticles() -> Set<Article> {
guard let account = account else {
assertionFailure("Expected feed.account, but got nil.")
return Set<Article>()
}
return account.fetchArticles(for: self)
}
public func fetchUnreadArticles() -> Set<Article> {
guard let account = account else {
assertionFailure("Expected feed.account, but got nil.")
return Set<Article>()
}
return account.fetchUnreadArticles(for: self)
}
}
extension Folder: ArticleFetcher {
public func fetchArticles() -> Set<Article> {
return fetchUnreadArticles()
}
public func fetchUnreadArticles() -> Set<Article> {
guard let account = account else {
assertionFailure("Expected folder.account, but got nil.")
return Set<Article>()
}
return account.fetchArticles(folder: self)
}
}

View File

@ -23,15 +23,6 @@ public extension Feed {
}
}
public func fetchArticles() -> Set<Article> {
guard let account = account else {
assertionFailure("Expected feed.account.")
return Set<Article>()
}
return account.fetchArticles(for: self)
}
public func takeSettings(from parsedFeed: ParsedFeed) {
var didChangeAtLeastOneSetting = false

View File

@ -26,16 +26,6 @@ public final class Folder: DisplayNameProvider, Container, UnreadCountProvider,
static var incrementingID = 0
public let hashValue: Int
// MARK: - Fetching Articles
public func fetchArticles() -> Set<Article> {
guard let account = account else {
return Set<Article>()
}
return account.fetchArticles(folder: self)
}
// MARK: - DisplayNameProvider
public var nameForDisplay: String {