diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Cartfile b/Cartfile
deleted file mode 100644
index 9b0c347..0000000
--- a/Cartfile
+++ /dev/null
@@ -1 +0,0 @@
-github "Dev1an/A-Star" ~> 3.0.0-beta-1
diff --git a/Cartfile.resolved b/Cartfile.resolved
deleted file mode 100644
index 5e610f1..0000000
--- a/Cartfile.resolved
+++ /dev/null
@@ -1 +0,0 @@
-github "Dev1an/A-Star" "3.0.0-beta-1"
diff --git a/MappaMundi.xcodeproj/project.pbxproj b/MappaMundi.xcodeproj/project.pbxproj
index 7f70a83..d9405b0 100644
--- a/MappaMundi.xcodeproj/project.pbxproj
+++ b/MappaMundi.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 48;
+ objectVersion = 52;
objects = {
/* Begin PBXBuildFile section */
@@ -19,9 +19,6 @@
1355A4A722C8A53700EB635F /* GraphRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39870717200D16710067B070 /* GraphRepresentation.swift */; };
1355A4A822C8A53700EB635F /* ScreenGraphEdge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3962F22A1FF6A75800999008 /* ScreenGraphEdge.swift */; };
1355A4A922C8A53700EB635F /* Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3962F2281FF6A6C100999008 /* Wait.swift */; };
- 1355A4AB22C8A59B00EB635F /* AStar.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1355A49722C8A2E100EB635F /* AStar.framework */; settings = {ATTRIBUTES = (Required, ); }; };
- 13E36CDB22C8DF9000AE04DB /* MappaMundi.h in Headers */ = {isa = PBXBuildFile; fileRef = 39AB5FE61FE4595000008FB3 /* MappaMundi.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 13E36D1522C8EAA600AE04DB /* AStar.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1355A49722C8A2E100EB635F /* AStar.framework */; };
39AB5FDE1FE4560D00008FB3 /* DemoMappaMundi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39AB5FDD1FE4560D00008FB3 /* DemoMappaMundi.swift */; };
39BAD55F1FE19B9E00524FB7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39BAD55E1FE19B9E00524FB7 /* AppDelegate.swift */; };
39BAD5611FE19B9E00524FB7 /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39BAD5601FE19B9E00524FB7 /* MasterViewController.swift */; };
@@ -30,6 +27,9 @@
39BAD5681FE19B9E00524FB7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 39BAD5671FE19B9E00524FB7 /* Assets.xcassets */; };
39BAD56B1FE19B9E00524FB7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 39BAD5691FE19B9E00524FB7 /* LaunchScreen.storyboard */; };
39BAD5761FE19B9E00524FB7 /* DemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39BAD5751FE19B9E00524FB7 /* DemoUITests.swift */; };
+ CEDB958625A73F5700F1F430 /* AStar in Frameworks */ = {isa = PBXBuildFile; productRef = CEDB958525A73F5700F1F430 /* AStar */; };
+ CEDB958C25A73F9700F1F430 /* AStar in Frameworks */ = {isa = PBXBuildFile; productRef = CEDB958B25A73F9700F1F430 /* AStar */; };
+ CEDB959325A7411C00F1F430 /* AStar in Frameworks */ = {isa = PBXBuildFile; productRef = CEDB959225A7411C00F1F430 /* AStar */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -72,12 +72,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 1355A47122C89CD400EB635F /* Cartfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cartfile; sourceTree = ""; };
- 1355A47222C89CD400EB635F /* Cartfile.resolved */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cartfile.resolved; sourceTree = ""; };
1355A47A22C8A25C00EB635F /* MappaMundi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MappaMundi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 1355A47C22C8A25C00EB635F /* MappaMundi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MappaMundi.h; sourceTree = ""; };
- 1355A47D22C8A25C00EB635F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 1355A49722C8A2E100EB635F /* AStar.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AStar.framework; path = Carthage/Build/iOS/AStar.framework; sourceTree = ""; };
1355A49B22C8A48C00EB635F /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
13CE0A8222ABD42F005CA5E3 /* MMNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MMNode.swift; path = Sources/MMNode.swift; sourceTree = SOURCE_ROOT; };
392FB352200E1D5D0014867E /* MMTestUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MMTestUtils.swift; sourceTree = ""; };
@@ -91,7 +86,6 @@
39870717200D16710067B070 /* GraphRepresentation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GraphRepresentation.swift; path = Sources/GraphRepresentation.swift; sourceTree = SOURCE_ROOT; };
39AB5FDB1FE455C700008FB3 /* MMScreenGraph.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MMScreenGraph.swift; path = ../Sources/MMScreenGraph.swift; sourceTree = ""; };
39AB5FDD1FE4560D00008FB3 /* DemoMappaMundi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoMappaMundi.swift; sourceTree = ""; };
- 39AB5FE61FE4595000008FB3 /* MappaMundi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MappaMundi.h; sourceTree = ""; };
39AB5FE71FE4595000008FB3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
39BAD55B1FE19B9D00524FB7 /* DemoApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
39BAD55E1FE19B9E00524FB7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
@@ -104,6 +98,7 @@
39BAD5711FE19B9E00524FB7 /* DemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
39BAD5751FE19B9E00524FB7 /* DemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoUITests.swift; sourceTree = ""; };
39BAD5771FE19B9E00524FB7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ CEDB95A025A7450100F1F430 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -111,8 +106,8 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ CEDB958C25A73F9700F1F430 /* AStar in Frameworks */,
1355A49C22C8A48C00EB635F /* XCTest.framework in Frameworks */,
- 1355A4AB22C8A59B00EB635F /* AStar.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -120,6 +115,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ CEDB958625A73F5700F1F430 /* AStar in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -127,22 +123,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 13E36D1522C8EAA600AE04DB /* AStar.framework in Frameworks */,
+ CEDB959325A7411C00F1F430 /* AStar in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 1355A47B22C8A25C00EB635F /* MappaMundi */ = {
- isa = PBXGroup;
- children = (
- 1355A47C22C8A25C00EB635F /* MappaMundi.h */,
- 1355A47D22C8A25C00EB635F /* Info.plist */,
- );
- path = MappaMundi;
- sourceTree = "";
- };
39AB5FE51FE4595000008FB3 /* MappaMundi */ = {
isa = PBXGroup;
children = (
@@ -157,7 +144,6 @@
39870717200D16710067B070 /* GraphRepresentation.swift */,
3962F22A1FF6A75800999008 /* ScreenGraphEdge.swift */,
3962F2281FF6A6C100999008 /* Wait.swift */,
- 39AB5FE61FE4595000008FB3 /* MappaMundi.h */,
39AB5FE71FE4595000008FB3 /* Info.plist */,
);
path = MappaMundi;
@@ -167,7 +153,6 @@
isa = PBXGroup;
children = (
1355A49B22C8A48C00EB635F /* XCTest.framework */,
- 1355A49722C8A2E100EB635F /* AStar.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -175,12 +160,10 @@
39BAD5521FE19B9D00524FB7 = {
isa = PBXGroup;
children = (
- 1355A47122C89CD400EB635F /* Cartfile */,
- 1355A47222C89CD400EB635F /* Cartfile.resolved */,
+ CEDB95A025A7450100F1F430 /* Package.swift */,
39BAD55D1FE19B9E00524FB7 /* DemoApp */,
39BAD5741FE19B9E00524FB7 /* UITests */,
39AB5FE51FE4595000008FB3 /* MappaMundi */,
- 1355A47B22C8A25C00EB635F /* MappaMundi */,
39BAD55C1FE19B9D00524FB7 /* Products */,
39AB5FED1FE459AD00008FB3 /* Frameworks */,
);
@@ -227,7 +210,6 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
- 13E36CDB22C8DF9000AE04DB /* MappaMundi.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -249,6 +231,9 @@
dependencies = (
);
name = MappaMundi;
+ packageProductDependencies = (
+ CEDB958B25A73F9700F1F430 /* AStar */,
+ );
productName = MappaMundi;
productReference = 1355A47A22C8A25C00EB635F /* MappaMundi.framework */;
productType = "com.apple.product-type.framework";
@@ -268,6 +253,9 @@
1355A48022C8A25C00EB635F /* PBXTargetDependency */,
);
name = DemoApp;
+ packageProductDependencies = (
+ CEDB958525A73F5700F1F430 /* AStar */,
+ );
productName = Sample;
productReference = 39BAD55B1FE19B9D00524FB7 /* DemoApp.app */;
productType = "com.apple.product-type.application";
@@ -279,7 +267,6 @@
39BAD56D1FE19B9E00524FB7 /* Sources */,
39BAD56E1FE19B9E00524FB7 /* Frameworks */,
39BAD56F1FE19B9E00524FB7 /* Resources */,
- 13E36D1422C8EA7600AE04DB /* Copy Carthage Frameworks */,
);
buildRules = (
);
@@ -287,6 +274,9 @@
39BAD5731FE19B9E00524FB7 /* PBXTargetDependency */,
);
name = DemoUITests;
+ packageProductDependencies = (
+ CEDB959225A7411C00F1F430 /* AStar */,
+ );
productName = SampleUITests;
productReference = 39BAD5711FE19B9E00524FB7 /* DemoUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
@@ -298,7 +288,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1230;
ORGANIZATIONNAME = "Mozilla Corporation";
TargetAttributes = {
1355A47922C8A25C00EB635F = {
@@ -325,6 +315,9 @@
Base,
);
mainGroup = 39BAD5521FE19B9D00524FB7;
+ packageReferences = (
+ CEDB958425A73F5700F1F430 /* XCRemoteSwiftPackageReference "A-Star" */,
+ );
productRefGroup = 39BAD55C1FE19B9D00524FB7 /* Products */;
projectDirPath = "";
projectRoot = "";
@@ -363,28 +356,6 @@
};
/* End PBXResourcesBuildPhase section */
-/* Begin PBXShellScriptBuildPhase section */
- 13E36D1422C8EA7600AE04DB /* Copy Carthage Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "$(SRCROOT)/Carthage/Build/iOS/AStar.framework",
- );
- name = "Copy Carthage Frameworks";
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "/usr/local/bin/carthage copy-frameworks\n";
- };
-/* End PBXShellScriptBuildPhase section */
-
/* Begin PBXSourcesBuildPhase section */
1355A47622C8A25C00EB635F /* Sources */ = {
isa = PBXSourcesBuildPhase;
@@ -461,7 +432,6 @@
1355A48422C8A25C00EB635F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_MODULES_AUTOLINK = YES;
@@ -473,15 +443,14 @@
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = NO;
- FRAMEWORK_SEARCH_PATHS = (
- "$(PLATFORM_DIR)/Developer/Library/Frameworks",
- "$(DEVELOPER_FRAMEWORKS_DIR)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
- );
INFOPLIST_FILE = MappaMundi/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -502,7 +471,6 @@
1355A48522C8A25C00EB635F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_MODULES_AUTOLINK = YES;
@@ -514,15 +482,14 @@
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = NO;
- FRAMEWORK_SEARCH_PATHS = (
- "$(PLATFORM_DIR)/Developer/Library/Frameworks",
- "$(DEVELOPER_FRAMEWORKS_DIR)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
- );
INFOPLIST_FILE = MappaMundi/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-weak_framework",
@@ -564,6 +531,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -626,6 +594,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -650,7 +619,8 @@
LD_RUNPATH_SEARCH_PATHS = "";
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
VALIDATE_PRODUCT = YES;
};
@@ -663,7 +633,10 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = "$(SRCROOT)/DemoApp/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.mozilla.ios.MappaMundi.Demo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
@@ -678,7 +651,10 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = "$(SRCROOT)/DemoApp/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.mozilla.ios.MappaMundi.Demo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
@@ -691,12 +667,12 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
CODE_SIGN_STYLE = Automatic;
- FRAMEWORK_SEARCH_PATHS = (
+ INFOPLIST_FILE = UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
);
- INFOPLIST_FILE = UITests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.mozilla.ios.MappMundi.UITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
@@ -710,12 +686,12 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
CODE_SIGN_STYLE = Automatic;
- FRAMEWORK_SEARCH_PATHS = (
+ INFOPLIST_FILE = UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
);
- INFOPLIST_FILE = UITests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.mozilla.ios.MappMundi.UITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
@@ -764,6 +740,35 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
+
+/* Begin XCRemoteSwiftPackageReference section */
+ CEDB958425A73F5700F1F430 /* XCRemoteSwiftPackageReference "A-Star" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/Dev1an/A-Star.git";
+ requirement = {
+ kind = exactVersion;
+ version = "3.0.0-beta-1";
+ };
+ };
+/* End XCRemoteSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+ CEDB958525A73F5700F1F430 /* AStar */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = CEDB958425A73F5700F1F430 /* XCRemoteSwiftPackageReference "A-Star" */;
+ productName = AStar;
+ };
+ CEDB958B25A73F9700F1F430 /* AStar */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = CEDB958425A73F5700F1F430 /* XCRemoteSwiftPackageReference "A-Star" */;
+ productName = AStar;
+ };
+ CEDB959225A7411C00F1F430 /* AStar */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = CEDB958425A73F5700F1F430 /* XCRemoteSwiftPackageReference "A-Star" */;
+ productName = AStar;
+ };
+/* End XCSwiftPackageProductDependency section */
};
rootObject = 39BAD5531FE19B9D00524FB7 /* Project object */;
}
diff --git a/MappaMundi.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/MappaMundi.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 45e5986..919434a 100644
--- a/MappaMundi.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/MappaMundi.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/MappaMundi.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/MappaMundi.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
new file mode 100644
index 0000000..6d35687
--- /dev/null
+++ b/MappaMundi.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -0,0 +1,16 @@
+{
+ "object": {
+ "pins": [
+ {
+ "package": "AStar",
+ "repositoryURL": "https://github.com/Dev1an/A-Star.git",
+ "state": {
+ "branch": null,
+ "revision": "036256f9a8d1dda44085a2b92fa58199446a8339",
+ "version": "3.0.0-beta-1"
+ }
+ }
+ ]
+ },
+ "version": 1
+}
diff --git a/MappaMundi.xcodeproj/xcshareddata/xcschemes/DemoApp.xcscheme b/MappaMundi.xcodeproj/xcshareddata/xcschemes/DemoApp.xcscheme
index 5ba0607..72d0323 100644
--- a/MappaMundi.xcodeproj/xcshareddata/xcschemes/DemoApp.xcscheme
+++ b/MappaMundi.xcodeproj/xcshareddata/xcschemes/DemoApp.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-//! Project version number for MappaMundi.
-FOUNDATION_EXPORT double MappaMundiVersionNumber;
-
-//! Project version string for MappaMundi.
-FOUNDATION_EXPORT const unsigned char MappaMundiVersionString[];
-
-// In this header, you should import all the public headers of your framework using statements like #import
-
-
diff --git a/Package.resolved b/Package.resolved
new file mode 100644
index 0000000..64e0cb9
--- /dev/null
+++ b/Package.resolved
@@ -0,0 +1,16 @@
+{
+ "object": {
+ "pins": [
+ {
+ "package": "AStar",
+ "repositoryURL": "https://github.com/Dev1an/A-Star",
+ "state": {
+ "branch": null,
+ "revision": "036256f9a8d1dda44085a2b92fa58199446a8339",
+ "version": "3.0.0-beta-1"
+ }
+ }
+ ]
+ },
+ "version": 1
+}
diff --git a/Package.swift b/Package.swift
new file mode 100644
index 0000000..8bef8d2
--- /dev/null
+++ b/Package.swift
@@ -0,0 +1,21 @@
+// swift-tools-version:5.3
+
+import PackageDescription
+
+let package = Package(
+ name: "MappaMundi",
+ products: [
+ .library(
+ name: "MappaMundi",
+ targets: ["MappaMundi"]),
+ ],
+ dependencies: [
+ .package(name: "AStar", url: "https://github.com/Dev1an/A-Star", from: "3.0.0-beta-1")
+ ],
+ targets: [
+ .target(
+ name: "MappaMundi",
+ dependencies: ["AStar"],
+ path: "Sources")
+ ]
+)
diff --git a/README.md b/README.md
index 539b94a..4c15c1d 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,15 @@
# MappaMundi
A declarative Don't Repeat Yourself tool for XCUITesting and screenshots.
+
+## Swift Package Manager
+You can add this package to your project using SPM
+
+### Required
+- Xcode 12
+
+
+On Xcode
+
+File → Swift Packages → Add Package Dependency...
+
+Add the url to this repository and follow the on screen instructions.
diff --git a/Sources/ScreenGraphTest.swift b/Sources/ScreenGraphTest.swift
deleted file mode 100644
index a8e370a..0000000
--- a/Sources/ScreenGraphTest.swift
+++ /dev/null
@@ -1,238 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-import XCTest
-
-class ScreenGraphTest: XCTestCase {
- var navigator: Navigator!
- var app: XCUIApplication!
-
- override func setUp() {
- app = XCUIApplication()
- navigator = createTestGraph(for: self, with: app).navigator()
- app.terminate()
- app.launchArguments = [LaunchArguments.Test, LaunchArguments.ClearProfile, LaunchArguments.SkipIntro, LaunchArguments.SkipWhatsNew]
- app.activate()
- }
-}
-
-extension ScreenGraphTest {
- func testUserStateChanges() {
- XCTAssertNil(navigator.userState.url, "Current url is empty")
-
- navigator.userState.url = "https://mozilla.org"
- navigator.performAction(TestActions.LoadURLByTyping)
- // The UserState is mutated in BrowserTab.
- navigator.goto(BrowserTab)
-
- XCTAssertTrue(navigator.userState.url?.starts(with: "www.mozilla.org") ?? false, "Current url recorded by from the url bar is \(navigator.userState.url ?? "nil")")
- }
-
- func testBackStack() {
- // We'll go through the browser tab, through the menu.
- navigator.goto(SettingsScreen)
- // Going back, there is no explicit way back to the browser tab,
- // and the menu will have dismissed. We should be detecting the existence of
- // elements as we go through each screen state, so if there are errors, they'll be
- // reported in the graph below.
- navigator.goto(BrowserTab)
- }
-
- func testSimpleToggleAction() {
- // Switch night mode on, by toggling.
- navigator.performAction(TestActions.ToggleNightMode)
- XCTAssertTrue(navigator.userState.nightMode)
- XCTAssertEqual(navigator.screenState, BrowserTab)
-
- // Nothing should happen here, because night mode is already on.
- navigator.toggleOn(navigator.userState.nightMode, withAction: TestActions.ToggleNightMode)
- XCTAssertTrue(navigator.userState.nightMode)
- XCTAssertEqual(navigator.screenState, BrowserTab)
-
- // Switch night mode off.
- navigator.toggleOff(navigator.userState.nightMode, withAction: TestActions.ToggleNightMode)
- XCTAssertFalse(navigator.userState.nightMode)
- XCTAssertEqual(navigator.screenState, BrowserTab)
- }
-
- func testChainedActionPerf1() {
- let navigator = self.navigator!
- measure {
- navigator.userState.url = defaultURL
- navigator.performAction(TestActions.LoadURLByPasting)
- XCTAssertEqual(navigator.screenState, WebPageLoading)
- }
- }
-
- func testChainedActionPerf2() {
- let navigator = self.navigator!
- measure {
- navigator.userState.url = defaultURL
- navigator.performAction(TestActions.LoadURLByTyping)
- XCTAssertEqual(navigator.screenState, WebPageLoading)
- }
-
- navigator.userState.url = defaultURL
- navigator.performAction(TestActions.LoadURL)
- XCTAssertEqual(navigator.screenState, WebPageLoading)
- }
-
- func testConditionalEdgesSimple() {
- XCTAssertTrue(navigator.can(goto: PasscodeSettingsOff))
- XCTAssertFalse(navigator.can(goto: PasscodeSettingsOn))
- navigator.goto(PasscodeSettingsOff)
- XCTAssertEqual(navigator.screenState, PasscodeSettingsOff)
- }
-
- func testConditionalEdgesRerouting() {
- // The navigator should dynamically reroute to the target screen
- // if the userState changes.
- // This test adds to the graph a passcode setting screen. In that screen,
- // there is a noop action that fatalErrors if it is taken.
- //
- let map = createTestGraph(for: self, with: app)
-
- func typePasscode(_ passCode: String) {
- passCode.forEach { char in
- app.keys["\(char)"].tap()
- }
- }
-
- map.addScreenState(SetPasscodeScreen) { screenState in
- // This is a silly way to organize things here,
- // and is an artifical way to show that the navigator is re-routing midway through
- // a goto.
- screenState.onEnter() { userState in
- typePasscode(userState.newPasscode)
- typePasscode(userState.newPasscode)
- userState.passcode = userState.newPasscode
- }
-
- screenState.noop(forAction: "FatalError", transitionTo: PasscodeSettingsOn, if: "passcode == nil") { _ in fatalError() }
- screenState.noop(forAction: "Very", "Long", "Path", "Of", "Actions", transitionTo: PasscodeSettingsOn, if: "passcode != nil") { _ in }
- }
-
- navigator = map.navigator()
-
- XCTAssertTrue(navigator.can(goto: PasscodeSettingsOn))
- XCTAssertTrue(navigator.can(goto: PasscodeSettingsOff))
- XCTAssertTrue(navigator.can(goto: "FatalError"))
- navigator.goto(PasscodeSettingsOn)
- XCTAssertTrue(navigator.can(goto: PasscodeSettingsOn))
- XCTAssertFalse(navigator.can(goto: PasscodeSettingsOff))
- XCTAssertFalse(navigator.can(goto: "FatalError"))
-
- XCTAssertEqual(navigator.screenState, PasscodeSettingsOn)
- }
-}
-
-
-private let defaultURL = "https://example.com"
-class TestUserState: UserState {
- required init() {
- super.init()
- initialScreenState = FirstRun
- }
-
- var url: String? = nil
- var nightMode = false
- var passcode: String? = nil
- var newPasscode: String = "111111"
-}
-
-let PasscodeSettingsOn = "PasscodeSettingsOn"
-let PasscodeSettingsOff = "PasscodeSettingsOff"
-let WebPageLoading = "WebPageLoading"
-
-fileprivate class TestActions {
- static let ToggleNightMode = "menu-NightMode"
- static let LoadURL = "LoadURL"
- static let LoadURLByTyping = "LoadURLByTyping"
- static let LoadURLByPasting = "LoadURLByPasting"
-}
-
-fileprivate func createTestGraph(for test: XCTestCase, with app: XCUIApplication) -> ScreenGraph {
- let map = ScreenGraph(for: test, with: TestUserState.self)
-
- map.addScreenState(FirstRun) { screenState in
- screenState.noop(to: BrowserTab)
- screenState.tap(app.textFields["url"], to: URLBarOpen)
- }
-
- map.addScreenState(WebPageLoading) { screenState in
- screenState.dismissOnUse = true
- // Would like to use app.otherElements.deviceStatusBars.networkLoadingIndicators.element
- // but this means exposing some of SnapshotHelper to another target.
- screenState.onEnterWaitFor("exists != true",
- element: app.progressIndicators.element(boundBy: 0))
- screenState.noop(to: BrowserTab)
- }
-
- map.addScreenState(BrowserTab) { screenState in
- screenState.onEnter { userState in
- userState.url = app.textFields["url"].value as? String
- }
-
- screenState.tap(app.buttons["TabToolbar.menuButton"], to: BrowserTabMenu)
- screenState.tap(app.textFields["url"], to: URLBarOpen)
-
- screenState.gesture(forAction: TestActions.LoadURLByPasting, TestActions.LoadURL) { userState in
- UIPasteboard.general.string = userState.url ?? defaultURL
- app.textFields["url"].press(forDuration: 1.0)
- app.sheets.element(boundBy: 0).buttons.element(boundBy: 0).tap()
- }
- }
-
- map.addScreenState(URLBarOpen) { screenState in
- screenState.gesture(forAction: TestActions.LoadURLByTyping, TestActions.LoadURL) { userState in
- let urlString = userState.url ?? defaultURL
- app.textFields["address"].typeText("\(urlString)\r")
- }
- }
-
- map.addScreenAction(TestActions.LoadURL, transitionTo: WebPageLoading)
-
- map.addScreenState(BrowserTabMenu) { screenState in
- screenState.dismissOnUse = true
- screenState.onEnterWaitFor(element: app.tables["Context Menu"])
- screenState.tap(app.tables.cells["Settings"], to: SettingsScreen)
-
- screenState.tap(app.cells["menu-NightMode"], forAction: TestActions.ToggleNightMode) { userState in
- userState.nightMode = !userState.nightMode
- }
-
- screenState.backAction = {
- app.buttons["PhotonMenu.cancel"].tap()
- }
- }
-
- let navigationControllerBackAction = {
- app.navigationBars.element(boundBy: 0).buttons.element(boundBy: 0).tap()
- }
-
- map.addScreenState(SettingsScreen) { screenState in
- let table = app.tables["AppSettingsTableViewController.tableView"]
- screenState.onEnterWaitFor(element: table)
-
- screenState.tap(table.cells["TouchIDPasscode"], to: PasscodeSettingsOff, if: "passcode == nil")
- screenState.tap(table.cells["TouchIDPasscode"], to: PasscodeSettingsOn, if: "passcode != nil")
-
- screenState.backAction = navigationControllerBackAction
- }
-
- map.addScreenState(PasscodeSettingsOn) { screenState in
- screenState.backAction = navigationControllerBackAction
- }
-
- map.addScreenState(PasscodeSettingsOff) { screenState in
- screenState.tap(app.staticTexts["Turn Passcode On"], to: SetPasscodeScreen)
- screenState.backAction = navigationControllerBackAction
- }
-
- map.addScreenState(SetPasscodeScreen) { screenState in
- screenState.backAction = navigationControllerBackAction
- }
-
- return map
-}