Break the build. Continue switch to submodules. Remove local copy of RSTree.
This commit is contained in:
parent
993d584731
commit
d597631bd6
|
@ -119,8 +119,6 @@
|
|||
84B06FD01ED37F7D00F0B54B /* DB5.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84B06FCC1ED37F7200F0B54B /* DB5.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
84B06FE91ED3803A00F0B54B /* RSFeedFinder.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B06FE61ED3803200F0B54B /* RSFeedFinder.framework */; };
|
||||
84B06FEA1ED3803A00F0B54B /* RSFeedFinder.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84B06FE61ED3803200F0B54B /* RSFeedFinder.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
84B06FFD1ED3818D00F0B54B /* RSTree.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B06FFA1ED3818000F0B54B /* RSTree.framework */; };
|
||||
84B06FFE1ED3818D00F0B54B /* RSTree.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84B06FFA1ED3818000F0B54B /* RSTree.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
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 */; };
|
||||
|
@ -383,27 +381,6 @@
|
|||
remoteGlobalIDString = 84BAAE1E1C8E6B3B009F5239;
|
||||
remoteInfo = RSFeedFinder;
|
||||
};
|
||||
84B06FF91ED3818000F0B54B /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 84B06FF41ED3818000F0B54B /* RSTree.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 842A0BE11CFCB9BC00BF746C;
|
||||
remoteInfo = RSTree;
|
||||
};
|
||||
84B06FFB1ED3818000F0B54B /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 84B06FF41ED3818000F0B54B /* RSTree.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 842A0BEB1CFCB9BC00BF746C;
|
||||
remoteInfo = RSTreeTests;
|
||||
};
|
||||
84B06FFF1ED3818D00F0B54B /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 84B06FF41ED3818000F0B54B /* RSTree.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 842A0BE01CFCB9BC00BF746C;
|
||||
remoteInfo = RSTree;
|
||||
};
|
||||
84BB4B671F1174D400858766 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 84BB4B611F1174D400858766 /* Data.xcodeproj */;
|
||||
|
@ -440,7 +417,6 @@
|
|||
846E77421F6EF6A100A165E2 /* Database.framework in Embed Frameworks */,
|
||||
84B06FB31ED37DBD00F0B54B /* RSDatabase.framework in Embed Frameworks */,
|
||||
84B06FEA1ED3803A00F0B54B /* RSFeedFinder.framework in Embed Frameworks */,
|
||||
84B06FFE1ED3818D00F0B54B /* RSTree.framework in Embed Frameworks */,
|
||||
846E773E1F6EF67A00A165E2 /* Account.framework in Embed Frameworks */,
|
||||
84B06FD01ED37F7D00F0B54B /* DB5.framework in Embed Frameworks */,
|
||||
84B06FC31ED37E9600F0B54B /* RSWeb.framework in Embed Frameworks */,
|
||||
|
@ -596,7 +572,6 @@
|
|||
84B06FB61ED37E8B00F0B54B /* RSWeb.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSWeb.xcodeproj; path = Frameworks/RSWeb/RSWeb.xcodeproj; sourceTree = "<group>"; };
|
||||
84B06FC61ED37F7200F0B54B /* DB5.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = DB5.xcodeproj; path = Frameworks/DB5/DB5.xcodeproj; sourceTree = "<group>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
|
@ -698,7 +673,6 @@
|
|||
849B897C1F0349D000578A8D /* RSParser.framework in Frameworks */,
|
||||
846E77411F6EF6A100A165E2 /* Database.framework in Frameworks */,
|
||||
84B06FE91ED3803A00F0B54B /* RSFeedFinder.framework in Frameworks */,
|
||||
84B06FFD1ED3818D00F0B54B /* RSTree.framework in Frameworks */,
|
||||
84B06FCF1ED37F7D00F0B54B /* DB5.framework in Frameworks */,
|
||||
846E773D1F6EF67A00A165E2 /* Account.framework in Frameworks */,
|
||||
84FB9A2F1EDCD6C4003D53B9 /* Sparkle.framework in Frameworks */,
|
||||
|
@ -1098,7 +1072,6 @@
|
|||
84B06F961ED37DA000F0B54B /* RSDatabase.xcodeproj */,
|
||||
84B06FE01ED3803200F0B54B /* RSFeedFinder.xcodeproj */,
|
||||
849B89681F0349C100578A8D /* RSParser.xcodeproj */,
|
||||
84B06FF41ED3818000F0B54B /* RSTree.xcodeproj */,
|
||||
84B06FB61ED37E8B00F0B54B /* RSWeb.xcodeproj */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
|
@ -1182,15 +1155,6 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
84B06FF51ED3818000F0B54B /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84B06FFA1ED3818000F0B54B /* RSTree.framework */,
|
||||
84B06FFC1ED3818000F0B54B /* RSTreeTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
84BB4B621F1174D400858766 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1413,7 +1377,6 @@
|
|||
84B06FC51ED37E9600F0B54B /* PBXTargetDependency */,
|
||||
84B06FD21ED37F7D00F0B54B /* PBXTargetDependency */,
|
||||
84B06FEC1ED3803A00F0B54B /* PBXTargetDependency */,
|
||||
84B070001ED3818D00F0B54B /* PBXTargetDependency */,
|
||||
849B897F1F0349D000578A8D /* PBXTargetDependency */,
|
||||
84BB4B7A1F11753300858766 /* PBXTargetDependency */,
|
||||
846E77401F6EF67A00A165E2 /* PBXTargetDependency */,
|
||||
|
@ -1523,10 +1486,6 @@
|
|||
ProductGroup = 849B89691F0349C100578A8D /* Products */;
|
||||
ProjectRef = 849B89681F0349C100578A8D /* RSParser.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 84B06FF51ED3818000F0B54B /* Products */;
|
||||
ProjectRef = 84B06FF41ED3818000F0B54B /* RSTree.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 84B06FB71ED37E8B00F0B54B /* Products */;
|
||||
ProjectRef = 84B06FB61ED37E8B00F0B54B /* RSWeb.xcodeproj */;
|
||||
|
@ -1656,20 +1615,6 @@
|
|||
remoteRef = 84B06FE71ED3803200F0B54B /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
84B06FFA1ED3818000F0B54B /* RSTree.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = RSTree.framework;
|
||||
remoteRef = 84B06FF91ED3818000F0B54B /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
84B06FFC1ED3818000F0B54B /* RSTreeTests.xctest */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = RSTreeTests.xctest;
|
||||
remoteRef = 84B06FFB1ED3818000F0B54B /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
84BB4B681F1174D400858766 /* Data.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
|
@ -1985,11 +1930,6 @@
|
|||
name = RSFeedFinder;
|
||||
targetProxy = 84B06FEB1ED3803A00F0B54B /* PBXContainerItemProxy */;
|
||||
};
|
||||
84B070001ED3818D00F0B54B /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = RSTree;
|
||||
targetProxy = 84B06FFF1ED3818D00F0B54B /* PBXContainerItemProxy */;
|
||||
};
|
||||
84BB4B7A1F11753300858766 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = Data;
|
||||
|
|
|
@ -1,326 +0,0 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
842A0BE51CFCB9BC00BF746C /* RSTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 842A0BE41CFCB9BC00BF746C /* RSTree.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
842A0BEC1CFCB9BC00BF746C /* RSTree.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842A0BE11CFCB9BC00BF746C /* RSTree.framework */; };
|
||||
842A0BF11CFCB9BC00BF746C /* RSTreeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842A0BF01CFCB9BC00BF746C /* RSTreeTests.swift */; };
|
||||
842F4D0A1D7E027100C88094 /* NSOutlineView+RSTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842F4D091D7E027100C88094 /* NSOutlineView+RSTree.swift */; };
|
||||
84B1EF931D5BC2A7008533AE /* TopLevelRepresentedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B1EF921D5BC2A7008533AE /* TopLevelRepresentedObject.swift */; };
|
||||
84C567CA1CFCBA0E005B711B /* TreeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C567C91CFCBA0E005B711B /* TreeController.swift */; };
|
||||
84C567CC1CFCBA16005B711B /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C567CB1CFCBA16005B711B /* Node.swift */; };
|
||||
84FEB30D1D7DE284008A237C /* NodePath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FEB30C1D7DE284008A237C /* NodePath.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
842A0BED1CFCB9BC00BF746C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 842A0BD81CFCB9BC00BF746C /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 842A0BE01CFCB9BC00BF746C;
|
||||
remoteInfo = RSTree;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
842A0BE11CFCB9BC00BF746C /* RSTree.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RSTree.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
842A0BE41CFCB9BC00BF746C /* RSTree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RSTree.h; path = RSTree/RSTree.h; sourceTree = "<group>"; };
|
||||
842A0BE61CFCB9BC00BF746C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = RSTree/Info.plist; sourceTree = "<group>"; };
|
||||
842A0BEB1CFCB9BC00BF746C /* RSTreeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RSTreeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
842A0BF01CFCB9BC00BF746C /* RSTreeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RSTreeTests.swift; sourceTree = "<group>"; };
|
||||
842A0BF21CFCB9BC00BF746C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
842F4D091D7E027100C88094 /* NSOutlineView+RSTree.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "NSOutlineView+RSTree.swift"; path = "RSTree/NSOutlineView+RSTree.swift"; sourceTree = "<group>"; };
|
||||
84B1EF921D5BC2A7008533AE /* TopLevelRepresentedObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TopLevelRepresentedObject.swift; path = RSTree/TopLevelRepresentedObject.swift; sourceTree = "<group>"; };
|
||||
84C567C91CFCBA0E005B711B /* TreeController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = TreeController.swift; path = RSTree/TreeController.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||
84C567CB1CFCBA16005B711B /* Node.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = Node.swift; path = RSTree/Node.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||
84FEB30C1D7DE284008A237C /* NodePath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NodePath.swift; path = RSTree/NodePath.swift; sourceTree = "<group>"; };
|
||||
D511EF1B20242EC900712EC3 /* RSTreeTests_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = RSTreeTests_target.xcconfig; sourceTree = "<group>"; };
|
||||
D511EF1C20242EC900712EC3 /* RSTree_project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = RSTree_project.xcconfig; sourceTree = "<group>"; };
|
||||
D511EF1D20242EC900712EC3 /* RSTree_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = RSTree_target.xcconfig; sourceTree = "<group>"; };
|
||||
D511EF1E20242EC900712EC3 /* RSTree_project_debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = RSTree_project_debug.xcconfig; sourceTree = "<group>"; };
|
||||
D511EF1F20242EC900712EC3 /* RSTree_project_release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = RSTree_project_release.xcconfig; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
842A0BDD1CFCB9BC00BF746C /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
842A0BE81CFCB9BC00BF746C /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
842A0BEC1CFCB9BC00BF746C /* RSTree.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
842A0BD71CFCB9BC00BF746C = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
842A0BE41CFCB9BC00BF746C /* RSTree.h */,
|
||||
84C567C91CFCBA0E005B711B /* TreeController.swift */,
|
||||
84C567CB1CFCBA16005B711B /* Node.swift */,
|
||||
84FEB30C1D7DE284008A237C /* NodePath.swift */,
|
||||
84B1EF921D5BC2A7008533AE /* TopLevelRepresentedObject.swift */,
|
||||
842F4D091D7E027100C88094 /* NSOutlineView+RSTree.swift */,
|
||||
842A0BE61CFCB9BC00BF746C /* Info.plist */,
|
||||
842A0BEF1CFCB9BC00BF746C /* RSTreeTests */,
|
||||
842A0BE21CFCB9BC00BF746C /* Products */,
|
||||
D511EF1A20242EC900712EC3 /* xcconfig */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
842A0BE21CFCB9BC00BF746C /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
842A0BE11CFCB9BC00BF746C /* RSTree.framework */,
|
||||
842A0BEB1CFCB9BC00BF746C /* RSTreeTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
842A0BEF1CFCB9BC00BF746C /* RSTreeTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
842A0BF01CFCB9BC00BF746C /* RSTreeTests.swift */,
|
||||
842A0BF21CFCB9BC00BF746C /* Info.plist */,
|
||||
);
|
||||
path = RSTreeTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D511EF1A20242EC900712EC3 /* xcconfig */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D511EF1C20242EC900712EC3 /* RSTree_project.xcconfig */,
|
||||
D511EF1E20242EC900712EC3 /* RSTree_project_debug.xcconfig */,
|
||||
D511EF1F20242EC900712EC3 /* RSTree_project_release.xcconfig */,
|
||||
D511EF1D20242EC900712EC3 /* RSTree_target.xcconfig */,
|
||||
D511EF1B20242EC900712EC3 /* RSTreeTests_target.xcconfig */,
|
||||
);
|
||||
path = xcconfig;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
842A0BDE1CFCB9BC00BF746C /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
842A0BE51CFCB9BC00BF746C /* RSTree.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
842A0BE01CFCB9BC00BF746C /* RSTree */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 842A0BF51CFCB9BC00BF746C /* Build configuration list for PBXNativeTarget "RSTree" */;
|
||||
buildPhases = (
|
||||
842A0BDC1CFCB9BC00BF746C /* Sources */,
|
||||
842A0BDD1CFCB9BC00BF746C /* Frameworks */,
|
||||
842A0BDE1CFCB9BC00BF746C /* Headers */,
|
||||
842A0BDF1CFCB9BC00BF746C /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = RSTree;
|
||||
productName = RSTree;
|
||||
productReference = 842A0BE11CFCB9BC00BF746C /* RSTree.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
842A0BEA1CFCB9BC00BF746C /* RSTreeTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 842A0BF81CFCB9BC00BF746C /* Build configuration list for PBXNativeTarget "RSTreeTests" */;
|
||||
buildPhases = (
|
||||
842A0BE71CFCB9BC00BF746C /* Sources */,
|
||||
842A0BE81CFCB9BC00BF746C /* Frameworks */,
|
||||
842A0BE91CFCB9BC00BF746C /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
842A0BEE1CFCB9BC00BF746C /* PBXTargetDependency */,
|
||||
);
|
||||
name = RSTreeTests;
|
||||
productName = RSTreeTests;
|
||||
productReference = 842A0BEB1CFCB9BC00BF746C /* RSTreeTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
842A0BD81CFCB9BC00BF746C /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0730;
|
||||
LastUpgradeCheck = 0930;
|
||||
ORGANIZATIONNAME = "Ranchero Software, LLC";
|
||||
TargetAttributes = {
|
||||
842A0BE01CFCB9BC00BF746C = {
|
||||
CreatedOnToolsVersion = 7.3;
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
842A0BEA1CFCB9BC00BF746C = {
|
||||
CreatedOnToolsVersion = 7.3;
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 842A0BDB1CFCB9BC00BF746C /* Build configuration list for PBXProject "RSTree" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 842A0BD71CFCB9BC00BF746C;
|
||||
productRefGroup = 842A0BE21CFCB9BC00BF746C /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
842A0BE01CFCB9BC00BF746C /* RSTree */,
|
||||
842A0BEA1CFCB9BC00BF746C /* RSTreeTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
842A0BDF1CFCB9BC00BF746C /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
842A0BE91CFCB9BC00BF746C /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
842A0BDC1CFCB9BC00BF746C /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
842F4D0A1D7E027100C88094 /* NSOutlineView+RSTree.swift in Sources */,
|
||||
84FEB30D1D7DE284008A237C /* NodePath.swift in Sources */,
|
||||
84C567CA1CFCBA0E005B711B /* TreeController.swift in Sources */,
|
||||
84C567CC1CFCBA16005B711B /* Node.swift in Sources */,
|
||||
84B1EF931D5BC2A7008533AE /* TopLevelRepresentedObject.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
842A0BE71CFCB9BC00BF746C /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
842A0BF11CFCB9BC00BF746C /* RSTreeTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
842A0BEE1CFCB9BC00BF746C /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 842A0BE01CFCB9BC00BF746C /* RSTree */;
|
||||
targetProxy = 842A0BED1CFCB9BC00BF746C /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
842A0BF31CFCB9BC00BF746C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D511EF1E20242EC900712EC3 /* RSTree_project_debug.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
842A0BF41CFCB9BC00BF746C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D511EF1F20242EC900712EC3 /* RSTree_project_release.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
842A0BF61CFCB9BC00BF746C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D511EF1D20242EC900712EC3 /* RSTree_target.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
842A0BF71CFCB9BC00BF746C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D511EF1D20242EC900712EC3 /* RSTree_target.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
842A0BF91CFCB9BC00BF746C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D511EF1B20242EC900712EC3 /* RSTreeTests_target.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
842A0BFA1CFCB9BC00BF746C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D511EF1B20242EC900712EC3 /* RSTreeTests_target.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
842A0BDB1CFCB9BC00BF746C /* Build configuration list for PBXProject "RSTree" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
842A0BF31CFCB9BC00BF746C /* Debug */,
|
||||
842A0BF41CFCB9BC00BF746C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
842A0BF51CFCB9BC00BF746C /* Build configuration list for PBXNativeTarget "RSTree" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
842A0BF61CFCB9BC00BF746C /* Debug */,
|
||||
842A0BF71CFCB9BC00BF746C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
842A0BF81CFCB9BC00BF746C /* Build configuration list for PBXNativeTarget "RSTreeTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
842A0BF91CFCB9BC00BF746C /* Debug */,
|
||||
842A0BFA1CFCB9BC00BF746C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 842A0BD81CFCB9BC00BF746C /* Project object */;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:RSTree.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -1,28 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</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>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2016 Ranchero Software, LLC. All rights reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,54 +0,0 @@
|
|||
//
|
||||
// NSOutlineView+RSTree.swift
|
||||
// RSTree
|
||||
//
|
||||
// Created by Brent Simmons on 9/5/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
|
||||
public extension NSOutlineView {
|
||||
|
||||
@discardableResult
|
||||
public func revealAndSelectNodeAtPath(_ nodePath: NodePath) -> Bool {
|
||||
|
||||
// Returns true on success. Expands folders on the way. May succeed partially (returns false, in that case).
|
||||
|
||||
let numberOfNodes = nodePath.components.count
|
||||
if numberOfNodes < 2 {
|
||||
return false
|
||||
}
|
||||
|
||||
let indexOfNodeToSelect = numberOfNodes - 1
|
||||
|
||||
for i in 1...indexOfNodeToSelect { // Start at 1 to skip root node.
|
||||
|
||||
let oneNode = nodePath.components[i]
|
||||
let oneRow = row(forItem: oneNode)
|
||||
if oneRow < 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
if i == indexOfNodeToSelect {
|
||||
selectRowIndexes(NSIndexSet(index: oneRow) as IndexSet, byExtendingSelection: false)
|
||||
scrollRowToVisible(oneRow)
|
||||
return true
|
||||
}
|
||||
else {
|
||||
expandItem(oneNode)
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func revealAndSelectRepresentedObject(_ representedObject: AnyObject, _ treeController: TreeController) -> Bool {
|
||||
|
||||
guard let nodePath = NodePath(representedObject: representedObject, treeController: treeController) else {
|
||||
return false
|
||||
}
|
||||
return revealAndSelectNodeAtPath(nodePath)
|
||||
}
|
||||
}
|
|
@ -1,200 +0,0 @@
|
|||
//
|
||||
// Node.swift
|
||||
// Evergreen
|
||||
//
|
||||
// Created by Brent Simmons on 7/21/15.
|
||||
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// Main thread only.
|
||||
|
||||
public final class Node: Hashable {
|
||||
|
||||
public weak var parent: Node?
|
||||
public let representedObject: AnyObject
|
||||
public var canHaveChildNodes = false
|
||||
public var isGroupItem = false
|
||||
public var childNodes = [Node]()
|
||||
public let hashValue: Int
|
||||
private static var incrementingID = 0
|
||||
|
||||
public var isRoot: Bool {
|
||||
if let _ = parent {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
public var numberOfChildNodes: Int {
|
||||
return childNodes.count
|
||||
}
|
||||
|
||||
public var indexPath: IndexPath {
|
||||
if let parent = parent {
|
||||
let parentPath = parent.indexPath
|
||||
if let childIndex = parent.indexOfChild(self) {
|
||||
return parentPath.appending(childIndex)
|
||||
}
|
||||
preconditionFailure("A Node’s parent must contain it as a child.")
|
||||
}
|
||||
return IndexPath(index: 0) //root node
|
||||
}
|
||||
|
||||
public var level: Int {
|
||||
if let parent = parent {
|
||||
return parent.level + 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
public var isLeaf: Bool {
|
||||
return numberOfChildNodes < 1
|
||||
}
|
||||
|
||||
public init(representedObject: AnyObject, parent: Node?) {
|
||||
|
||||
precondition(Thread.isMainThread)
|
||||
|
||||
self.representedObject = representedObject
|
||||
self.parent = parent
|
||||
|
||||
self.hashValue = Node.incrementingID
|
||||
Node.incrementingID += 1
|
||||
}
|
||||
|
||||
public class func genericRootNode() -> Node {
|
||||
|
||||
let node = Node(representedObject: TopLevelRepresentedObject(), parent: nil)
|
||||
node.canHaveChildNodes = true
|
||||
return node
|
||||
}
|
||||
|
||||
public func existingOrNewChildNode(with representedObject: AnyObject) -> Node {
|
||||
|
||||
if let node = childNodeRepresentingObject(representedObject) {
|
||||
return node
|
||||
}
|
||||
return createChildNode(representedObject)
|
||||
}
|
||||
|
||||
public func createChildNode(_ representedObject: AnyObject) -> Node {
|
||||
|
||||
// Just creates — doesn’t add it.
|
||||
return Node(representedObject: representedObject, parent: self)
|
||||
}
|
||||
|
||||
public func childAtIndex(_ index: Int) -> Node? {
|
||||
|
||||
if index >= childNodes.count || index < 0 {
|
||||
return nil
|
||||
}
|
||||
return childNodes[index]
|
||||
}
|
||||
|
||||
public func indexOfChild(_ node: Node) -> Int? {
|
||||
|
||||
return childNodes.index{ (oneChildNode) -> Bool in
|
||||
oneChildNode === node
|
||||
}
|
||||
}
|
||||
|
||||
public func childNodeRepresentingObject(_ obj: AnyObject) -> Node? {
|
||||
|
||||
return findNodeRepresentingObject(obj, recursively: false)
|
||||
}
|
||||
|
||||
public func descendantNodeRepresentingObject(_ obj: AnyObject) -> Node? {
|
||||
|
||||
return findNodeRepresentingObject(obj, recursively: true)
|
||||
}
|
||||
|
||||
public func hasAncestor(in nodes: [Node]) -> Bool {
|
||||
|
||||
for node in nodes {
|
||||
if node.isAncestor(of: self) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
public func isAncestor(of node: Node) -> Bool {
|
||||
|
||||
if node == self {
|
||||
return false
|
||||
}
|
||||
|
||||
var nomad = node
|
||||
while true {
|
||||
guard let parent = nomad.parent else {
|
||||
return false
|
||||
}
|
||||
if parent == self {
|
||||
return true
|
||||
}
|
||||
nomad = parent
|
||||
}
|
||||
}
|
||||
|
||||
public class func nodesOrganizedByParent(_ nodes: [Node]) -> [Node: [Node]] {
|
||||
|
||||
let nodesWithParents = nodes.filter { $0.parent != nil }
|
||||
return Dictionary(grouping: nodesWithParents, by: { $0.parent! })
|
||||
}
|
||||
|
||||
public class func indexSetsGroupedByParent(_ nodes: [Node]) -> [Node: IndexSet] {
|
||||
|
||||
let d = nodesOrganizedByParent(nodes)
|
||||
let indexSetDictionary = d.mapValues { (nodes) -> IndexSet in
|
||||
|
||||
var indexSet = IndexSet()
|
||||
if nodes.isEmpty {
|
||||
return indexSet
|
||||
}
|
||||
|
||||
let parent = nodes.first!.parent!
|
||||
for node in nodes {
|
||||
if let index = parent.indexOfChild(node) {
|
||||
indexSet.insert(index)
|
||||
}
|
||||
}
|
||||
|
||||
return indexSet
|
||||
}
|
||||
|
||||
return indexSetDictionary
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public func ==(lhs: Node, rhs: Node) -> Bool {
|
||||
|
||||
return lhs === rhs
|
||||
}
|
||||
|
||||
public extension Array where Element == Node {
|
||||
|
||||
public func representedObjects() -> [AnyObject] {
|
||||
|
||||
return self.map{ $0.representedObject }
|
||||
}
|
||||
}
|
||||
|
||||
private extension Node {
|
||||
|
||||
func findNodeRepresentingObject(_ obj: AnyObject, recursively: Bool = false) -> Node? {
|
||||
|
||||
for childNode in childNodes {
|
||||
if childNode.representedObject === obj {
|
||||
return childNode
|
||||
}
|
||||
if recursively, let foundNode = childNode.descendantNodeRepresentingObject(obj) {
|
||||
return foundNode
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
//
|
||||
// NodePath.swift
|
||||
// RSTree
|
||||
//
|
||||
// Created by Brent Simmons on 9/5/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct NodePath {
|
||||
|
||||
let components: [Node]
|
||||
|
||||
public init(node: Node) {
|
||||
|
||||
var tempArray = [node]
|
||||
|
||||
var nomad: Node = node
|
||||
while true {
|
||||
if let parent = nomad.parent {
|
||||
tempArray.append(parent)
|
||||
nomad = parent
|
||||
}
|
||||
else {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
self.components = tempArray.reversed()
|
||||
}
|
||||
|
||||
public init?(representedObject: AnyObject, treeController: TreeController) {
|
||||
|
||||
if let node = treeController.nodeInTreeRepresentingObject(representedObject) {
|
||||
self.init(node: node)
|
||||
}
|
||||
else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
//
|
||||
// RSTree.h
|
||||
// RSTree
|
||||
//
|
||||
// Created by Brent Simmons on 5/30/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
#import <AppKit/AppKit.h>
|
||||
|
||||
//! Project version number for RSTree.
|
||||
FOUNDATION_EXPORT double RSTreeVersionNumber;
|
||||
|
||||
//! Project version string for RSTree.
|
||||
FOUNDATION_EXPORT const unsigned char RSTreeVersionString[];
|
||||
|
||||
// In this header, you should import all the public headers of your framework using statements like #import <RSTree/PublicHeader.h>
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
//
|
||||
// TopLevelRepresentedObject.swift
|
||||
// RSTree
|
||||
//
|
||||
// Created by Brent Simmons on 8/10/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// Handy to use as the represented object for a root node. Not required to use it, though.
|
||||
|
||||
final class TopLevelRepresentedObject {
|
||||
|
||||
}
|
|
@ -1,135 +0,0 @@
|
|||
//
|
||||
// TreeController.swift
|
||||
// Evergreen
|
||||
//
|
||||
// Created by Brent Simmons on 5/29/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public protocol TreeControllerDelegate: class {
|
||||
|
||||
func treeController(treeController: TreeController, childNodesFor: Node) -> [Node]?
|
||||
}
|
||||
|
||||
public typealias NodeVisitBlock = (_ : Node) -> Void
|
||||
|
||||
public final class TreeController {
|
||||
|
||||
private weak var delegate: TreeControllerDelegate?
|
||||
public let rootNode: Node
|
||||
|
||||
public init(delegate: TreeControllerDelegate, rootNode: Node) {
|
||||
|
||||
self.delegate = delegate
|
||||
self.rootNode = rootNode
|
||||
rebuild()
|
||||
}
|
||||
|
||||
public convenience init(delegate: TreeControllerDelegate) {
|
||||
|
||||
self.init(delegate: delegate, rootNode: Node.genericRootNode())
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
public func rebuild() -> Bool {
|
||||
|
||||
// Rebuild and re-sort. Return true if any changes in the entire tree.
|
||||
|
||||
return rebuildChildNodes(node: rootNode)
|
||||
}
|
||||
|
||||
public func visitNodes(_ visitBlock: NodeVisitBlock) {
|
||||
|
||||
visitNode(rootNode, visitBlock)
|
||||
}
|
||||
|
||||
public func nodeInArrayRepresentingObject(nodes: [Node], representedObject: AnyObject, recurse: Bool = false) -> Node? {
|
||||
|
||||
for oneNode in nodes {
|
||||
|
||||
if oneNode.representedObject === representedObject {
|
||||
return oneNode
|
||||
}
|
||||
|
||||
if recurse, oneNode.canHaveChildNodes {
|
||||
if let foundNode = nodeInArrayRepresentingObject(nodes: oneNode.childNodes, representedObject: representedObject, recurse: recurse) {
|
||||
return foundNode
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
public func nodeInTreeRepresentingObject(_ representedObject: AnyObject) -> Node? {
|
||||
|
||||
return nodeInArrayRepresentingObject(nodes: [rootNode], representedObject: representedObject, recurse: true)
|
||||
}
|
||||
|
||||
public func normalizedSelectedNodes(_ nodes: [Node]) -> [Node] {
|
||||
|
||||
// An array of nodes might include a leaf node and its parent. Remove the leaf node.
|
||||
|
||||
var normalizedNodes = [Node]()
|
||||
|
||||
for node in nodes {
|
||||
if !node.hasAncestor(in: nodes) {
|
||||
normalizedNodes += [node]
|
||||
}
|
||||
}
|
||||
|
||||
return normalizedNodes
|
||||
}
|
||||
}
|
||||
|
||||
private extension TreeController {
|
||||
|
||||
func visitNode(_ node: Node, _ visitBlock: NodeVisitBlock) {
|
||||
|
||||
visitBlock(node)
|
||||
node.childNodes.forEach{ (oneChildNode) in
|
||||
visitNode(oneChildNode, visitBlock)
|
||||
}
|
||||
}
|
||||
|
||||
func nodeArraysAreEqual(_ nodeArray1: [Node]?, _ nodeArray2: [Node]?) -> Bool {
|
||||
|
||||
if nodeArray1 == nil && nodeArray2 == nil {
|
||||
return true
|
||||
}
|
||||
if nodeArray1 != nil && nodeArray2 == nil {
|
||||
return false
|
||||
}
|
||||
if nodeArray1 == nil && nodeArray2 != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
return nodeArray1! == nodeArray2!
|
||||
}
|
||||
|
||||
func rebuildChildNodes(node: Node) -> Bool {
|
||||
|
||||
if !node.canHaveChildNodes {
|
||||
return false
|
||||
}
|
||||
|
||||
var childNodesDidChange = false
|
||||
|
||||
let childNodes = delegate?.treeController(treeController: self, childNodesFor: node) ?? [Node]()
|
||||
|
||||
childNodesDidChange = !nodeArraysAreEqual(childNodes, node.childNodes)
|
||||
if (childNodesDidChange) {
|
||||
node.childNodes = childNodes
|
||||
}
|
||||
|
||||
childNodes.forEach{ (oneChildNode) in
|
||||
if rebuildChildNodes(node: oneChildNode) {
|
||||
childNodesDidChange = true
|
||||
}
|
||||
}
|
||||
|
||||
return childNodesDidChange
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</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>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,36 +0,0 @@
|
|||
//
|
||||
// RSTreeTests.swift
|
||||
// RSTreeTests
|
||||
//
|
||||
// Created by Brent Simmons on 5/30/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import RSTree
|
||||
|
||||
class RSTreeTests: XCTestCase {
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
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() {
|
||||
// This is an example of a functional test case.
|
||||
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
||||
}
|
||||
|
||||
func testPerformanceExample() {
|
||||
// This is an example of a performance test case.
|
||||
self.measure {
|
||||
// Put the code you want to measure the time of here.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks
|
||||
INFOPLIST_FILE = RSTreeTests/Info.plist
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.ranchero.RSTreeTests
|
||||
PRODUCT_NAME = $(TARGET_NAME)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
CODE_SIGN_IDENTITY =
|
||||
|
||||
// See the notes in Evergreen_target.xcconfig on why the
|
||||
// DeveloperSettings.xcconfig is #included here
|
||||
|
||||
#include? "../../../SharedXcodeSettings/DeveloperSettings.xcconfig"
|
||||
|
||||
SDKROOT = macosx
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13
|
||||
CLANG_ENABLE_OBJC_WEAK = YES
|
||||
SWIFT_VERSION = 4.0
|
||||
COMBINE_HIDPI_IMAGES = YES
|
||||
|
||||
COPY_PHASE_STRIP = NO
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13
|
||||
ALWAYS_SEARCH_USER_PATHS = NO
|
||||
CURRENT_PROJECT_VERSION = 1
|
||||
VERSION_INFO_PREFIX =
|
||||
VERSIONING_SYSTEM = apple-generic
|
||||
GCC_NO_COMMON_BLOCKS = YES
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99
|
||||
CLANG_CXX_LANGUAGE_STANDARD = gnu++0x
|
||||
CLANG_CXX_LIBRARY = libc++
|
||||
CLANG_ENABLE_MODULES = YES
|
||||
CLANG_ENABLE_OBJC_ARC = YES
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES
|
||||
CLANG_WARN_EMPTY_BODY = YES
|
||||
CLANG_WARN_BOOL_CONVERSION = YES
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES
|
||||
CLANG_WARN_ENUM_CONVERSION = YES
|
||||
CLANG_WARN_INT_CONVERSION = YES
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES
|
||||
CLANG_WARN_INFINITE_RECURSION = YES
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES
|
||||
CLANG_WARN_COMMA = YES
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES
|
||||
GCC_WARN_UNUSED_FUNCTION = YES
|
||||
GCC_WARN_UNUSED_VARIABLE = YES
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
|
||||
CLANG_ANALYZER_NONNULL = YES
|
||||
SWIFT_SWIFT3_OBJC_INFERENCE = Off
|
|
@ -1,15 +0,0 @@
|
|||
#include "./RSTree_project.xcconfig"
|
||||
|
||||
DEBUG_INFORMATION_FORMAT = dwarf
|
||||
ENABLE_TESTABILITY = YES
|
||||
GCC_DYNAMIC_NO_PIC = NO
|
||||
GCC_OPTIMIZATION_LEVEL = 0
|
||||
GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited)
|
||||
|
||||
MTL_ENABLE_DEBUG_INFO = YES
|
||||
|
||||
SWIFT_COMPILATION_MODE = singlefile
|
||||
SWIFT_OPTIMIZATION_LEVEL = -Onone
|
||||
ONLY_ACTIVE_ARCH = YES
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
#include "./RSTree_project.xcconfig"
|
||||
|
||||
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
|
||||
ENABLE_NS_ASSERTIONS = NO
|
||||
|
||||
MTL_ENABLE_DEBUG_INFO = NO
|
||||
SWIFT_OPTIMIZATION_LEVEL = -O
|
||||
|
||||
SWIFT_COMPILATION_MODE = wholemodule
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks
|
||||
SKIP_INSTALL = YES
|
||||
DYLIB_COMPATIBILITY_VERSION = 1
|
||||
DYLIB_CURRENT_VERSION = 1
|
||||
DYLIB_INSTALL_NAME_BASE = @rpath
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/Frameworks
|
||||
DEFINES_MODULE = YES
|
||||
FRAMEWORK_VERSION = A
|
||||
INFOPLIST_FILE = RSTree/Info.plist
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.ranchero.RSTree
|
||||
PRODUCT_NAME = $(TARGET_NAME)
|
||||
CLANG_ENABLE_MODULES = YES
|
||||
|
Loading…
Reference in New Issue