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 -}