From eb74eb79e9f89af8e86a6fa291b9a584c272fd73 Mon Sep 17 00:00:00 2001 From: fpavkovic Date: Wed, 27 Mar 2024 15:53:11 +0100 Subject: [PATCH] =?UTF-8?q?[MWI-2350]=20Integration=20Demo=20f=C3=BCr=20Pr?= =?UTF-8?q?oductCatalog=20erstellen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 0 LICENSE.txt | 0 MetaPluginDemo.xcodeproj/project.pbxproj | 754 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + MetaPluginDemo/AppDelegate.swift | 31 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++ MetaPluginDemo/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 45 ++ MetaPluginDemo/Base.lproj/Main.storyboard | 279 +++++++ .../test.webid-solutions.de_2024.02.27.cer | Bin 0 -> 1609 bytes .../test.webid-solutions.de_2025.02.22.cer | Bin 0 -> 1739 bytes .../webid-gateway.de_2023.12.01.cer | Bin 0 -> 1906 bytes .../webid-gateway.de_2024.11.02.cer | Bin 0 -> 1587 bytes MetaPluginDemo/CustomizedPluginTheme.swift | 26 + MetaPluginDemo/EWebIdEnv.swift | 64 ++ MetaPluginDemo/Info.plist | 29 + MetaPluginDemo/SceneDelegate.swift | 55 ++ MetaPluginDemo/ViewController.swift | 251 ++++++ MetaPluginDemoTests/MetaPluginDemoTests.swift | 26 + .../MetaPluginDemoUITests.swift | 30 + .../MetaPluginDemoUITestsLaunchTests.swift | 30 + README.md | 8 +- 24 files changed, 1757 insertions(+), 1 deletion(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 LICENSE.txt create mode 100755 MetaPluginDemo.xcodeproj/project.pbxproj create mode 100755 MetaPluginDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100755 MetaPluginDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100755 MetaPluginDemo/AppDelegate.swift create mode 100755 MetaPluginDemo/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100755 MetaPluginDemo/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100755 MetaPluginDemo/Assets.xcassets/Contents.json create mode 100755 MetaPluginDemo/Base.lproj/LaunchScreen.storyboard create mode 100755 MetaPluginDemo/Base.lproj/Main.storyboard create mode 100755 MetaPluginDemo/Certificates/test.webid-solutions.de_2024.02.27.cer create mode 100755 MetaPluginDemo/Certificates/test.webid-solutions.de_2025.02.22.cer create mode 100755 MetaPluginDemo/Certificates/webid-gateway.de_2023.12.01.cer create mode 100755 MetaPluginDemo/Certificates/webid-gateway.de_2024.11.02.cer create mode 100755 MetaPluginDemo/CustomizedPluginTheme.swift create mode 100755 MetaPluginDemo/EWebIdEnv.swift create mode 100755 MetaPluginDemo/Info.plist create mode 100755 MetaPluginDemo/SceneDelegate.swift create mode 100755 MetaPluginDemo/ViewController.swift create mode 100755 MetaPluginDemoTests/MetaPluginDemoTests.swift create mode 100755 MetaPluginDemoUITests/MetaPluginDemoUITests.swift create mode 100755 MetaPluginDemoUITests/MetaPluginDemoUITestsLaunchTests.swift mode change 100644 => 100755 README.md diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100644 new mode 100755 diff --git a/MetaPluginDemo.xcodeproj/project.pbxproj b/MetaPluginDemo.xcodeproj/project.pbxproj new file mode 100755 index 0000000..374988c --- /dev/null +++ b/MetaPluginDemo.xcodeproj/project.pbxproj @@ -0,0 +1,754 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 4C40CAAA291A6DE700D76323 /* EWebIdEnv.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C40CAA9291A6DE700D76323 /* EWebIdEnv.swift */; }; + 4C40CABB291A717000D76323 /* CustomizedPluginTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C40CABA291A717000D76323 /* CustomizedPluginTheme.swift */; }; + 4C40CABD291A718D00D76323 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4C40CABC291A718D00D76323 /* LICENSE.txt */; }; + 4C4DEF962BB56D5F00F28680 /* WebIdMetaPlugin in Frameworks */ = {isa = PBXBuildFile; productRef = 4C4DEF952BB56D5F00F28680 /* WebIdMetaPlugin */; }; + 4C4DEF982BB56D5F00F28680 /* WebIdPayOnServerProductPlugin in Frameworks */ = {isa = PBXBuildFile; productRef = 4C4DEF972BB56D5F00F28680 /* WebIdPayOnServerProductPlugin */; }; + 4C4DEF9A2BB56D5F00F28680 /* WebIdEIdOnServerProductPlugin in Frameworks */ = {isa = PBXBuildFile; productRef = 4C4DEF992BB56D5F00F28680 /* WebIdEIdOnServerProductPlugin */; }; + 4C4DEF9C2BB56D5F00F28680 /* WebIdAutoIdentOnServerProductPlugin in Frameworks */ = {isa = PBXBuildFile; productRef = 4C4DEF9B2BB56D5F00F28680 /* WebIdAutoIdentOnServerProductPlugin */; }; + 4C62C1D42BB577CD0070AA6F /* WebIdVideoIdentProductPlugin in Frameworks */ = {isa = PBXBuildFile; productRef = 4C62C1D32BB577CD0070AA6F /* WebIdVideoIdentProductPlugin */; }; + 4C63AACE288193F10046A02E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63AACD288193F10046A02E /* AppDelegate.swift */; }; + 4C63AAD0288193F10046A02E /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63AACF288193F10046A02E /* SceneDelegate.swift */; }; + 4C63AAD2288193F10046A02E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63AAD1288193F10046A02E /* ViewController.swift */; }; + 4C63AAD5288193F10046A02E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4C63AAD3288193F10046A02E /* Main.storyboard */; }; + 4C63AAD7288193F40046A02E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C63AAD6288193F40046A02E /* Assets.xcassets */; }; + 4C63AADA288193F40046A02E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4C63AAD8288193F40046A02E /* LaunchScreen.storyboard */; }; + 4C63AAE5288193F40046A02E /* MetaPluginDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63AAE4288193F40046A02E /* MetaPluginDemoTests.swift */; }; + 4C63AAEF288193F40046A02E /* MetaPluginDemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63AAEE288193F40046A02E /* MetaPluginDemoUITests.swift */; }; + 4C63AAF1288193F40046A02E /* MetaPluginDemoUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63AAF0288193F40046A02E /* MetaPluginDemoUITestsLaunchTests.swift */; }; + 4C63AB012881991C0046A02E /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63AB002881991C0046A02E /* Credentials.swift */; }; + 4CB10A1B2B860F1400624BC6 /* webid-gateway.de_2024.11.02.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CB10A172B860F1400624BC6 /* webid-gateway.de_2024.11.02.cer */; }; + 4CB10A1C2B860F1400624BC6 /* test.webid-solutions.de_2024.02.27.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CB10A182B860F1400624BC6 /* test.webid-solutions.de_2024.02.27.cer */; }; + 4CB10A1D2B860F1400624BC6 /* test.webid-solutions.de_2025.02.22.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CB10A192B860F1400624BC6 /* test.webid-solutions.de_2025.02.22.cer */; }; + 4CB10A1E2B860F1400624BC6 /* webid-gateway.de_2023.12.01.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CB10A1A2B860F1400624BC6 /* webid-gateway.de_2023.12.01.cer */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 4C63AAE1288193F40046A02E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4C63AAC2288193F10046A02E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4C63AAC9288193F10046A02E; + remoteInfo = MetaPluginDemo; + }; + 4C63AAEB288193F40046A02E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4C63AAC2288193F10046A02E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4C63AAC9288193F10046A02E; + remoteInfo = MetaPluginDemo; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 4C21466928B3C40300D9BC87 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + 4C40CAA9291A6DE700D76323 /* EWebIdEnv.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EWebIdEnv.swift; sourceTree = ""; }; + 4C40CABA291A717000D76323 /* CustomizedPluginTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomizedPluginTheme.swift; sourceTree = ""; }; + 4C40CABC291A718D00D76323 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; + 4C5972D92888113400912838 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 4C63AACA288193F10046A02E /* MetaPluginDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaPluginDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C63AACD288193F10046A02E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 4C63AACF288193F10046A02E /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 4C63AAD1288193F10046A02E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 4C63AAD4288193F10046A02E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 4C63AAD6288193F40046A02E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 4C63AAD9288193F40046A02E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 4C63AADB288193F40046A02E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4C63AAE0288193F40046A02E /* MetaPluginDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MetaPluginDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C63AAE4288193F40046A02E /* MetaPluginDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaPluginDemoTests.swift; sourceTree = ""; }; + 4C63AAEA288193F40046A02E /* MetaPluginDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MetaPluginDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C63AAEE288193F40046A02E /* MetaPluginDemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaPluginDemoUITests.swift; sourceTree = ""; }; + 4C63AAF0288193F40046A02E /* MetaPluginDemoUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaPluginDemoUITestsLaunchTests.swift; sourceTree = ""; }; + 4C63AB002881991C0046A02E /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; + 4CB10A172B860F1400624BC6 /* webid-gateway.de_2024.11.02.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "webid-gateway.de_2024.11.02.cer"; sourceTree = ""; }; + 4CB10A182B860F1400624BC6 /* test.webid-solutions.de_2024.02.27.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "test.webid-solutions.de_2024.02.27.cer"; sourceTree = ""; }; + 4CB10A192B860F1400624BC6 /* test.webid-solutions.de_2025.02.22.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "test.webid-solutions.de_2025.02.22.cer"; sourceTree = ""; }; + 4CB10A1A2B860F1400624BC6 /* webid-gateway.de_2023.12.01.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "webid-gateway.de_2023.12.01.cer"; sourceTree = ""; }; + C8B6F1CC2BB460890023D2BF /* init.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = init.sh; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4C63AAC7288193F10046A02E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C4DEF982BB56D5F00F28680 /* WebIdPayOnServerProductPlugin in Frameworks */, + 4C4DEF9A2BB56D5F00F28680 /* WebIdEIdOnServerProductPlugin in Frameworks */, + 4C4DEF962BB56D5F00F28680 /* WebIdMetaPlugin in Frameworks */, + 4C4DEF9C2BB56D5F00F28680 /* WebIdAutoIdentOnServerProductPlugin in Frameworks */, + 4C62C1D42BB577CD0070AA6F /* WebIdVideoIdentProductPlugin in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C63AADD288193F40046A02E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C63AAE7288193F40046A02E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4C40CAB5291A6EA000D76323 /* Certificates */ = { + isa = PBXGroup; + children = ( + 4CB10A182B860F1400624BC6 /* test.webid-solutions.de_2024.02.27.cer */, + 4CB10A192B860F1400624BC6 /* test.webid-solutions.de_2025.02.22.cer */, + 4CB10A1A2B860F1400624BC6 /* webid-gateway.de_2023.12.01.cer */, + 4CB10A172B860F1400624BC6 /* webid-gateway.de_2024.11.02.cer */, + ); + path = Certificates; + sourceTree = ""; + }; + 4C4DEF942BB56D5F00F28680 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + 4C63AAC1288193F10046A02E = { + isa = PBXGroup; + children = ( + C8B6F1CC2BB460890023D2BF /* init.sh */, + 4C40CABC291A718D00D76323 /* LICENSE.txt */, + 4C21466928B3C40300D9BC87 /* .gitignore */, + 4C5972D92888113400912838 /* README.md */, + 4C63AACC288193F10046A02E /* MetaPluginDemo */, + 4C63AAE3288193F40046A02E /* MetaPluginDemoTests */, + 4C63AAED288193F40046A02E /* MetaPluginDemoUITests */, + 4C63AACB288193F10046A02E /* Products */, + 4C4DEF942BB56D5F00F28680 /* Frameworks */, + ); + sourceTree = ""; + }; + 4C63AACB288193F10046A02E /* Products */ = { + isa = PBXGroup; + children = ( + 4C63AACA288193F10046A02E /* MetaPluginDemo.app */, + 4C63AAE0288193F40046A02E /* MetaPluginDemoTests.xctest */, + 4C63AAEA288193F40046A02E /* MetaPluginDemoUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 4C63AACC288193F10046A02E /* MetaPluginDemo */ = { + isa = PBXGroup; + children = ( + 4C40CAB5291A6EA000D76323 /* Certificates */, + 4C63AACD288193F10046A02E /* AppDelegate.swift */, + 4C63AACF288193F10046A02E /* SceneDelegate.swift */, + 4C63AAD1288193F10046A02E /* ViewController.swift */, + 4C63AAD3288193F10046A02E /* Main.storyboard */, + 4C63AAD6288193F40046A02E /* Assets.xcassets */, + 4C63AAD8288193F40046A02E /* LaunchScreen.storyboard */, + 4C63AADB288193F40046A02E /* Info.plist */, + 4C63AB002881991C0046A02E /* Credentials.swift */, + 4C40CAA9291A6DE700D76323 /* EWebIdEnv.swift */, + 4C40CABA291A717000D76323 /* CustomizedPluginTheme.swift */, + ); + path = MetaPluginDemo; + sourceTree = ""; + }; + 4C63AAE3288193F40046A02E /* MetaPluginDemoTests */ = { + isa = PBXGroup; + children = ( + 4C63AAE4288193F40046A02E /* MetaPluginDemoTests.swift */, + ); + path = MetaPluginDemoTests; + sourceTree = ""; + }; + 4C63AAED288193F40046A02E /* MetaPluginDemoUITests */ = { + isa = PBXGroup; + children = ( + 4C63AAEE288193F40046A02E /* MetaPluginDemoUITests.swift */, + 4C63AAF0288193F40046A02E /* MetaPluginDemoUITestsLaunchTests.swift */, + ); + path = MetaPluginDemoUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4C63AAC9288193F10046A02E /* MetaPluginDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4C63AAF4288193F40046A02E /* Build configuration list for PBXNativeTarget "MetaPluginDemo" */; + buildPhases = ( + 4C63AAC6288193F10046A02E /* Sources */, + 4C63AAC7288193F10046A02E /* Frameworks */, + 4C63AAC8288193F10046A02E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MetaPluginDemo; + packageProductDependencies = ( + 4C4DEF952BB56D5F00F28680 /* WebIdMetaPlugin */, + 4C4DEF972BB56D5F00F28680 /* WebIdPayOnServerProductPlugin */, + 4C4DEF992BB56D5F00F28680 /* WebIdEIdOnServerProductPlugin */, + 4C4DEF9B2BB56D5F00F28680 /* WebIdAutoIdentOnServerProductPlugin */, + 4C62C1D32BB577CD0070AA6F /* WebIdVideoIdentProductPlugin */, + ); + productName = MetaPluginDemo; + productReference = 4C63AACA288193F10046A02E /* MetaPluginDemo.app */; + productType = "com.apple.product-type.application"; + }; + 4C63AADF288193F40046A02E /* MetaPluginDemoTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4C63AAF7288193F40046A02E /* Build configuration list for PBXNativeTarget "MetaPluginDemoTests" */; + buildPhases = ( + 4C63AADC288193F40046A02E /* Sources */, + 4C63AADD288193F40046A02E /* Frameworks */, + 4C63AADE288193F40046A02E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 4C63AAE2288193F40046A02E /* PBXTargetDependency */, + ); + name = MetaPluginDemoTests; + productName = MetaPluginDemoTests; + productReference = 4C63AAE0288193F40046A02E /* MetaPluginDemoTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 4C63AAE9288193F40046A02E /* MetaPluginDemoUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4C63AAFA288193F40046A02E /* Build configuration list for PBXNativeTarget "MetaPluginDemoUITests" */; + buildPhases = ( + 4C63AAE6288193F40046A02E /* Sources */, + 4C63AAE7288193F40046A02E /* Frameworks */, + 4C63AAE8288193F40046A02E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 4C63AAEC288193F40046A02E /* PBXTargetDependency */, + ); + name = MetaPluginDemoUITests; + productName = MetaPluginDemoUITests; + productReference = 4C63AAEA288193F40046A02E /* MetaPluginDemoUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4C63AAC2288193F10046A02E /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1340; + LastUpgradeCheck = 1340; + TargetAttributes = { + 4C63AAC9288193F10046A02E = { + CreatedOnToolsVersion = 13.4.1; + }; + 4C63AADF288193F40046A02E = { + CreatedOnToolsVersion = 13.4.1; + TestTargetID = 4C63AAC9288193F10046A02E; + }; + 4C63AAE9288193F40046A02E = { + CreatedOnToolsVersion = 13.4.1; + TestTargetID = 4C63AAC9288193F10046A02E; + }; + }; + }; + buildConfigurationList = 4C63AAC5288193F10046A02E /* Build configuration list for PBXProject "MetaPluginDemo" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 4C63AAC1288193F10046A02E; + packageReferences = ( + C8B6F1CD2BB467E50023D2BF /* XCRemoteSwiftPackageReference "webid-meta-plugin-spm" */, + C8B6F1CE2BB468100023D2BF /* XCRemoteSwiftPackageReference "webid-pay-on-server-product-plugin-spm" */, + C8B6F1CF2BB4682D0023D2BF /* XCRemoteSwiftPackageReference "webid-eid-on-server-product-plugin-spm" */, + C8B6F1D02BB468600023D2BF /* XCRemoteSwiftPackageReference "webid-auto-ident-on-server-product-plugin-spm" */, + 4C62C1D22BB577B70070AA6F /* XCRemoteSwiftPackageReference "webid-video-ident-product-plugin-spm" */, + ); + productRefGroup = 4C63AACB288193F10046A02E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4C63AAC9288193F10046A02E /* MetaPluginDemo */, + 4C63AADF288193F40046A02E /* MetaPluginDemoTests */, + 4C63AAE9288193F40046A02E /* MetaPluginDemoUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4C63AAC8288193F10046A02E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4CB10A1B2B860F1400624BC6 /* webid-gateway.de_2024.11.02.cer in Resources */, + 4CB10A1D2B860F1400624BC6 /* test.webid-solutions.de_2025.02.22.cer in Resources */, + 4C40CABD291A718D00D76323 /* LICENSE.txt in Resources */, + 4C63AADA288193F40046A02E /* LaunchScreen.storyboard in Resources */, + 4CB10A1C2B860F1400624BC6 /* test.webid-solutions.de_2024.02.27.cer in Resources */, + 4C63AAD7288193F40046A02E /* Assets.xcassets in Resources */, + 4CB10A1E2B860F1400624BC6 /* webid-gateway.de_2023.12.01.cer in Resources */, + 4C63AAD5288193F10046A02E /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C63AADE288193F40046A02E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C63AAE8288193F40046A02E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4C63AAC6288193F10046A02E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C63AAD2288193F10046A02E /* ViewController.swift in Sources */, + 4C63AACE288193F10046A02E /* AppDelegate.swift in Sources */, + 4C63AB012881991C0046A02E /* Credentials.swift in Sources */, + 4C63AAD0288193F10046A02E /* SceneDelegate.swift in Sources */, + 4C40CAAA291A6DE700D76323 /* EWebIdEnv.swift in Sources */, + 4C40CABB291A717000D76323 /* CustomizedPluginTheme.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C63AADC288193F40046A02E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C63AAE5288193F40046A02E /* MetaPluginDemoTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C63AAE6288193F40046A02E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C63AAEF288193F40046A02E /* MetaPluginDemoUITests.swift in Sources */, + 4C63AAF1288193F40046A02E /* MetaPluginDemoUITestsLaunchTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 4C63AAE2288193F40046A02E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4C63AAC9288193F10046A02E /* MetaPluginDemo */; + targetProxy = 4C63AAE1288193F40046A02E /* PBXContainerItemProxy */; + }; + 4C63AAEC288193F40046A02E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4C63AAC9288193F10046A02E /* MetaPluginDemo */; + targetProxy = 4C63AAEB288193F40046A02E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 4C63AAD3288193F10046A02E /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4C63AAD4288193F10046A02E /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 4C63AAD8288193F40046A02E /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4C63AAD9288193F40046A02E /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4C63AAF2288193F40046A02E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 4C63AAF3288193F40046A02E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 4C63AAF5288193F40046A02E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 86HTHE89B5; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MetaPluginDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = de.webidsolutions.MetaPluginDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 4C63AAF6288193F40046A02E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 86HTHE89B5; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MetaPluginDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = de.webidsolutions.MetaPluginDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 4C63AAF8288193F40046A02E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 86HTHE89B5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.webidsolutions.MetaPluginDemoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaPluginDemo.app/MetaPluginDemo"; + }; + name = Debug; + }; + 4C63AAF9288193F40046A02E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 86HTHE89B5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.webidsolutions.MetaPluginDemoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaPluginDemo.app/MetaPluginDemo"; + }; + name = Release; + }; + 4C63AAFB288193F40046A02E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 86HTHE89B5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.webidsolutions.MetaPluginDemoUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MetaPluginDemo; + }; + name = Debug; + }; + 4C63AAFC288193F40046A02E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 86HTHE89B5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.webidsolutions.MetaPluginDemoUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = MetaPluginDemo; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4C63AAC5288193F10046A02E /* Build configuration list for PBXProject "MetaPluginDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C63AAF2288193F40046A02E /* Debug */, + 4C63AAF3288193F40046A02E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4C63AAF4288193F40046A02E /* Build configuration list for PBXNativeTarget "MetaPluginDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C63AAF5288193F40046A02E /* Debug */, + 4C63AAF6288193F40046A02E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4C63AAF7288193F40046A02E /* Build configuration list for PBXNativeTarget "MetaPluginDemoTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C63AAF8288193F40046A02E /* Debug */, + 4C63AAF9288193F40046A02E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4C63AAFA288193F40046A02E /* Build configuration list for PBXNativeTarget "MetaPluginDemoUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C63AAFB288193F40046A02E /* Debug */, + 4C63AAFC288193F40046A02E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 4C62C1D22BB577B70070AA6F /* XCRemoteSwiftPackageReference "webid-video-ident-product-plugin-spm" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://api.webid-solutions.de/releases/ios/spm/SwiftPackages/webid-video-ident-product-plugin-spm"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 12.0.2; + }; + }; + C8B6F1CD2BB467E50023D2BF /* XCRemoteSwiftPackageReference "webid-meta-plugin-spm" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://api.webid-solutions.de/releases/ios/spm/SwiftPackages/webid-meta-plugin-spm.git"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 12.0.2; + }; + }; + C8B6F1CE2BB468100023D2BF /* XCRemoteSwiftPackageReference "webid-pay-on-server-product-plugin-spm" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://api.webid-solutions.de/releases/ios/spm/SwiftPackages/webid-pay-on-server-product-plugin-spm.git"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 12.0.2; + }; + }; + C8B6F1CF2BB4682D0023D2BF /* XCRemoteSwiftPackageReference "webid-eid-on-server-product-plugin-spm" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://api.webid-solutions.de/releases/ios/spm/SwiftPackages/webid-eid-on-server-product-plugin-spm.git"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 12.0.2; + }; + }; + C8B6F1D02BB468600023D2BF /* XCRemoteSwiftPackageReference "webid-auto-ident-on-server-product-plugin-spm" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://api.webid-solutions.de/releases/ios/spm/SwiftPackages/webid-auto-ident-on-server-product-plugin-spm.git"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 12.0.2; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 4C4DEF952BB56D5F00F28680 /* WebIdMetaPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = C8B6F1CD2BB467E50023D2BF /* XCRemoteSwiftPackageReference "webid-meta-plugin-spm" */; + productName = WebIdMetaPlugin; + }; + 4C4DEF972BB56D5F00F28680 /* WebIdPayOnServerProductPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = C8B6F1CE2BB468100023D2BF /* XCRemoteSwiftPackageReference "webid-pay-on-server-product-plugin-spm" */; + productName = WebIdPayOnServerProductPlugin; + }; + 4C4DEF992BB56D5F00F28680 /* WebIdEIdOnServerProductPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = C8B6F1CF2BB4682D0023D2BF /* XCRemoteSwiftPackageReference "webid-eid-on-server-product-plugin-spm" */; + productName = WebIdEIdOnServerProductPlugin; + }; + 4C4DEF9B2BB56D5F00F28680 /* WebIdAutoIdentOnServerProductPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = C8B6F1D02BB468600023D2BF /* XCRemoteSwiftPackageReference "webid-auto-ident-on-server-product-plugin-spm" */; + productName = WebIdAutoIdentOnServerProductPlugin; + }; + 4C62C1D32BB577CD0070AA6F /* WebIdVideoIdentProductPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = 4C62C1D22BB577B70070AA6F /* XCRemoteSwiftPackageReference "webid-video-ident-product-plugin-spm" */; + productName = WebIdVideoIdentProductPlugin; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 4C63AAC2288193F10046A02E /* Project object */; +} diff --git a/MetaPluginDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/MetaPluginDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..919434a --- /dev/null +++ b/MetaPluginDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/MetaPluginDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/MetaPluginDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100755 index 0000000..18d9810 --- /dev/null +++ b/MetaPluginDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/MetaPluginDemo/AppDelegate.swift b/MetaPluginDemo/AppDelegate.swift new file mode 100755 index 0000000..c396197 --- /dev/null +++ b/MetaPluginDemo/AppDelegate.swift @@ -0,0 +1,31 @@ +/* + * Created by WebID Solutions GmbH | www.webid-solutions.de. + * See the file "LICENSE" for the full license governing this code. + */ + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + @available(iOS 13.0, *) + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + @available(iOS 13.0, *) + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } +} diff --git a/MetaPluginDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/MetaPluginDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100755 index 0000000..eb87897 --- /dev/null +++ b/MetaPluginDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MetaPluginDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/MetaPluginDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100755 index 0000000..9221b9b --- /dev/null +++ b/MetaPluginDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MetaPluginDemo/Assets.xcassets/Contents.json b/MetaPluginDemo/Assets.xcassets/Contents.json new file mode 100755 index 0000000..73c0059 --- /dev/null +++ b/MetaPluginDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MetaPluginDemo/Base.lproj/LaunchScreen.storyboard b/MetaPluginDemo/Base.lproj/LaunchScreen.storyboard new file mode 100755 index 0000000..76ec1dd --- /dev/null +++ b/MetaPluginDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MetaPluginDemo/Base.lproj/Main.storyboard b/MetaPluginDemo/Base.lproj/Main.storyboard new file mode 100755 index 0000000..f34c00b --- /dev/null +++ b/MetaPluginDemo/Base.lproj/Main.storyboard @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MetaPluginDemo/Certificates/test.webid-solutions.de_2024.02.27.cer b/MetaPluginDemo/Certificates/test.webid-solutions.de_2024.02.27.cer new file mode 100755 index 0000000000000000000000000000000000000000..bbdb1c5b8817f06616e507ee7e3894b405fd2815 GIT binary patch literal 1609 zcmZuxdo+}382`R+E|_r}gBdXyQr4xJcZ|zYa=&!Sx{OOMYj+xhDGX*PYQ==CvdW%X zvMy;*$qC0brAWJ{M2f7E5Q&nr9hFdPzhQ0u=sV{<-}}7J@A>`S=lg!=0TR3mkl?nK zVh|WXRFi3%ZW?0ZgJi47IeYycI#9wZ7-za?&MUz%5eI>^Tow^1;4yw!JQ;CwWN8B} zSs+hVbBpJ5#r$}>2RDWn$rqtpmMTz|CFRI+9Bx#&Fg}b$1)8!G0$GK_=ZOUoLi%n& zv_Q-cV_5+USq4L9tYv&S4s>T>G*=Kq_vc0l!nk6AFouq16XN;kD?Skwb8-M1DN1H+ zz%sK0D^Cy_ngcU4OEb2GwS{#M&}Gqp_6oJ4x-sJbf3F~Ht4J7?AY&6T!uUV}>#y$; z#z7bftOB9u1VjSE(8;(9Kl%QBSaR@>H>0N>;?GL9KL zzw?Ian*y%@uUaM{V=!Av@jle>i?lJK%VHp1l9s#B{i3p2en(_%?Lg_XQZ`+2i>Gsp zK_1VAG!$RnK0iF(opt5@*zj9wXvXKXnP5sszv8W$8t7LaeI}%Njpw{4B|5v~Q}#dG z+ALLs_WAyzFyY;MAGdk4&wQxZjW2fVZ7G?p9T+p{p-wXpMoSS})pCY-x#3ZCwvc+j zZ7RSp338&gg^!vf8BRJVcy|6?pCoCiUYedNh{07JDHvU-CNTvu0@8CF71LJouvfcJ zb&;geJf&<`#6mDI1fQ2+2tb0t16}k}(l%kyADOD2b0W0Uw>o?5z;xk4A#SW0&f$&$ znhcFupwaRf~ThL^Ee41y~KiZVD^79#*!E#8dP z1nPKs6FiK=$zkCCcL>-i1JkjNz#f?6i6{UI*RfFB%7M*b(;5zeH7Su|ajeLO$rP=+ zjKLE|Go8FRKpu~eNK=Fn7^J1I;b9ni5F`T6wHP3oPO^HmoEI-><+RKLlB%XtJOq;AS?!Q z11^Xjlt0Vo>dxm_)=05M7no{?;vXSw*Nv=U*SE~avXxKJ9;loo_IzrbUNuv1hCoULu z5Pu8necY3{K_?|UqLk$It}^PZp2yYo^8%fU=)8a-qy{1x7zIC3PCZSX*awyWnH*Th zIkKV2s_*@>0x=?4^0;q8P4)H5oXy*3`!`nI1mD)CxEh`Cp5iGG&b2SUaMzfFXBvHO z1qBy>bJygD^rXBT9j)5bygD8CG86xU#y9U!N4F#XuNmnV3KO?3o>4k7^YV#tx4^eu zD}tyghi~F1v|oe+;6at#GIyyYbyRji_wU8F?OCpqS7?4p(}M~0Z9@r7MCBq@%Jjud8@r{MV~UTp}A hwABA2+k$}g)72i?@4RhvBVZ`x-`QiUQA*)%`WMx5N#Oth literal 0 HcmV?d00001 diff --git a/MetaPluginDemo/Certificates/test.webid-solutions.de_2025.02.22.cer b/MetaPluginDemo/Certificates/test.webid-solutions.de_2025.02.22.cer new file mode 100755 index 0000000000000000000000000000000000000000..bd68fb87bd6b6ee3747a8208f74c1b63bd1dd3d0 GIT binary patch literal 1739 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 WebidAppTheme { + WebidAppTheme() + } + + /** + * Creates a ``WebidAppTheme`` to use in dark mode. + */ + internal static func getDarkVersion() -> WebidAppTheme { + WebidAppTheme() + } +} diff --git a/MetaPluginDemo/EWebIdEnv.swift b/MetaPluginDemo/EWebIdEnv.swift new file mode 100755 index 0000000..6906190 --- /dev/null +++ b/MetaPluginDemo/EWebIdEnv.swift @@ -0,0 +1,64 @@ +// +// Created by WebID Solutions GmbH | www.webid-solutions.de. +// See the file "LICENSE" for the full license governing this code. +// + +import Foundation + +class EWebIDEnv { + struct WebIDEnv: Equatable { + let uri: URLComponents + let username: String + let apiKey: String + let name: String + let pinningCerts: [SecCertificate] + + static func == (lhs: WebIDEnv, rhs: WebIDEnv) -> Bool { + return (lhs.uri == rhs.uri && lhs.name == rhs.name) + } + static func != (lhs: WebIDEnv, rhs: WebIDEnv) -> Bool { + return (!(lhs == rhs)) + } + } + + // one environment (here PRODUCTION) has to have an actionIdPrefix= nil, all other environments != nil + static let TEST = WebIDEnv( + uri: URLComponents(string: "https://test.webid-solutions.de")!, + username: Credentials.demoUsernameTest, + apiKey: Credentials.demoApiKeyTest, + name: "Test", + pinningCerts: EWebIDEnv.getPinningCerts(certResourceNames: [ + "test.webid-solutions.de_2025.02.22", + "test.webid-solutions.de_2024.02.27" + ]) + ) + + static let PRODUCTION = WebIDEnv( + uri: URLComponents(string: "https://webid-gateway.de")!, + username: Credentials.demoUsernameProduction, + apiKey: Credentials.demoApiKeyProduction, + name: "", + pinningCerts: EWebIDEnv.getPinningCerts(certResourceNames: [ + "webid-gateway.de_2024.11.02", + "webid-gateway.de_2023.12.01" + ]) + ) + + static func getPinningCerts(certResourceNames: [String]) -> [SecCertificate] { + var certificates: [SecCertificate] = [] + for certResourceName in certResourceNames { + let url = Bundle.main.url( + forResource: certResourceName, + withExtension: "cer" + )! + let localCertificate = try! Data(contentsOf: url) as CFData + if let certificate = SecCertificateCreateWithData( + nil, + localCertificate + ) { + certificates.append(certificate) + } + } + return certificates + } +} diff --git a/MetaPluginDemo/Info.plist b/MetaPluginDemo/Info.plist new file mode 100755 index 0000000..ef19f0f --- /dev/null +++ b/MetaPluginDemo/Info.plist @@ -0,0 +1,29 @@ + + + + + NSMicrophoneUsageDescription + This app needs access to your microphone to perform a video identification + NSCameraUsageDescription + This app needs access to your camera to perform a video identification + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/MetaPluginDemo/SceneDelegate.swift b/MetaPluginDemo/SceneDelegate.swift new file mode 100755 index 0000000..fc2de5f --- /dev/null +++ b/MetaPluginDemo/SceneDelegate.swift @@ -0,0 +1,55 @@ +/* + * Created by WebID Solutions GmbH | www.webid-solutions.de. + * See the file "LICENSE" for the full license governing this code. + */ + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + @available(iOS 13.0, *) + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + @available(iOS 13.0, *) + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + @available(iOS 13.0, *) + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + @available(iOS 13.0, *) + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + @available(iOS 13.0, *) + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + @available(iOS 13.0, *) + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/MetaPluginDemo/ViewController.swift b/MetaPluginDemo/ViewController.swift new file mode 100755 index 0000000..cab84f3 --- /dev/null +++ b/MetaPluginDemo/ViewController.swift @@ -0,0 +1,251 @@ +/* + * Created by WebID Solutions GmbH | www.webid-solutions.de. + * See the file "LICENSE" for the full license governing this code. + */ + +import UIKit +import WebIdIosSdk +import WebIdPluginCore +import WebIdMetaPlugin +import WebIdUiKitComponents +import WebIdVideoIdentProductPlugin +import WebIdPayOnServerProductPlugin +import WebIdEIdOnServerProductPlugin +import WebIdAutoIdentOnServerProductPlugin + +/// Demo App which starts the ``VideoIdentProductPlugin`` and handles its result +class ViewController: + UIViewController, + UIPickerViewDataSource, + UIPickerViewDelegate, + IProductPluginWebidDelegate { + + var metaPluginExecutionMode: EMetaPluginMode = .live + + @IBOutlet weak var modePicker: UIPickerView! + @IBOutlet weak var cbAutoIdOnServer: Checkbox! + @IBOutlet weak var cbPayOnServer: Checkbox! + @IBOutlet weak var cbVideoId: Checkbox! + @IBOutlet weak var cbEIdOnServer: Checkbox! + @IBOutlet weak var log: UITextView! + + override func viewDidLoad() { + super.viewDidLoad() + modePicker.delegate = self + modePicker.dataSource = self + + cbAutoIdOnServer.textView.textColor = .black + cbPayOnServer.textView.textColor = .black + cbVideoId.textView.textColor = .black + cbEIdOnServer.textView.textColor = .black + + cbAutoIdOnServer.textView.text = "AutoIdOnServer" + cbPayOnServer.textView.text = "PayOnServer" + cbVideoId.textView.text = "VideoId" + cbEIdOnServer.textView.text = "EIdOnServer" + } + + @IBAction func touchStartButton(_ sender: Any) { + clearLog() + writeLog(entry: "Starting…") + createCoreSdk() + } + + // MARK: Create MetaPlugin + + var metaPlugin: MetaPlugin! + + /// Creates the the meta-plugin instance from the existing credentials. + private func createCoreSdk() { + writeLog(entry: "Creating Meta Plugin…") + + // actual creation of the core SDK + do { + let env = EWebIDEnv.TEST + metaPlugin = MetaPlugin( + username: env.username, + apiKey: env.apiKey, + env: try WebIdSdkEnvironment( + url: env.uri, + pinningCertificates: env.pinningCerts + ), + plugins: getChosenPlugins() + ) + writeLog(entry: "Meta Plugin creation successful") + verifyActionId() + } catch { + writeLog(entry: "Meta Plugin creation failed") + } + } + + // MARK: Verify Action-ID + + /// Calls the verify action-id method asynchronously to start the process. + private func verifyActionId() { + writeLog(entry: "Verifying Action-ID…") + Task { + do { + let result = try await metaPlugin.verify(for: Credentials.actionId) + verifyActionIdCallback(result: .success(result)) + } catch { + verifyActionIdCallback(result: .failure(error)) + } + } + } + + /** + * Callback for the asynchronous verify call. + * + * - Parameters: + * - result The result, containing the VerifyActionIdResult of the call + */ + @MainActor + private func verifyActionIdCallback(result: Result) { + switch result { + case .success(let verifyActionIdResult): + writeLog(entry: "Verification successful") + startMetaPlugin(with: verifyActionIdResult) + case .failure(let error): + writeLog(entry: "Verification failed: \(error.localizedDescription)") + } + } + + // MARK: Start MetaPlugin + + /** + * Reads the given Configs and starts the plugin. + * + * - Parameters: + * - verifyActionIdResult: result of the verify action-id call + */ + private func startMetaPlugin(with verifyActionIdResult: VerifyActionIdResult) { + writeLog(entry: "Starting MetaPlugin...") + do { + try metaPlugin.startPlugin( + parentVC: self, + delegate: self, + lightTheme: CustomizedPluginTheme.getLightVersion(), + darkTheme: CustomizedPluginTheme.getDarkVersion() + ) + } catch { + writeLog(entry: "Start Failed:\n\(error.localizedDescription)") + } + } + + /** + * Successful delegate callback for the plugin. + * + * - Parameters: + * - additionalResult: extra info from the plugin + * - processFinished: irrelevant for this plugin + */ + func finishedSuccess(additionalResult: String?, processFinished: Bool) { + writeLog(entry: "Product Journey finished successfully") + } + + /** + * Failed delegate callback for the plugin with a plugin-specific error. + * + * - Parameters: + * - failreason: the reason for the failure of the plugin, handle according to documentation + * - additionalResult: extra info from the plugin + */ + func finishedFailed( + failreasonContainer: WebIdPluginCore.PluginFailReasonContainer, + additionalResult: String?, + faultOriginator: String + ) { + if let container = failreasonContainer as? AutoIdOnServerProductPluginFailReasonContainer { + writeLog(entry: "Product journey finished with failure:\n\(container.failreason)") + } + } + + /** + * Failed delegate callback for the plugin with a generic error. + * + * - Parameters: + * - failreason: the reason for the failure of the plugin, handle according to documentation + * - additionalResult: extra info from the plugin + */ + func finishedFailed( + failreason: EProductPluginErrors, + additionalResult: String?, + faultOriginator: String + ) { + writeLog(entry: "Product journey finished with failure:\n\(failreason.self)") + } + + // MARK: Plugin chooser + + private func getChosenPlugins() -> [any IProductPluginWebId] { + var plugins = [any IProductPluginWebId]() + if cbAutoIdOnServer.isChecked { + plugins.append(AutoIdentOnServerProductPlugin()) + } + if cbPayOnServer.isChecked { + plugins.append(PayOnServerProductPlugin()) + } + if cbVideoId.isChecked { + plugins.append(VideoIdentProductPlugin()) + } + if cbEIdOnServer.isChecked { + plugins.append(EidOnServerProductPlugin()) + } + return plugins + } + + // MARK: PickerView delegate + + func numberOfComponents(in pickerView: UIPickerView) -> Int { + return 1 + } + + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + return EMetaPluginMode.allCases.count + } + + // The data to return for the row and component (column) that's being passed in + func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { + return EMetaPluginMode.allCases[row].rawValue + } + + // Capture the picker view selection + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { + metaPluginExecutionMode = EMetaPluginMode.allCases[row] + } + + // MARK: logging methods + + /** + * Add an entry to the log. + * + * - Parameters: + * - entry: the new line for the log + */ + private func writeLog(entry: String) { + log.text = log.text + entry + "\n" + } + + /// Resets the text log of this activity. + private func clearLog() { + log.text = "" + } + + func infoAlert(_ message: String, go: ((UIAlertAction) -> Void)? = nil) { + let alertController = UIAlertController( + title: "Info", + message: message, + preferredStyle: UIAlertController.Style.alert + ) + alertController.addAction(UIAlertAction( + title: "OK", + style: UIAlertAction.Style.default, + handler: go + )) + self.present( + alertController, + animated: true, + completion: nil + ) + } +} diff --git a/MetaPluginDemoTests/MetaPluginDemoTests.swift b/MetaPluginDemoTests/MetaPluginDemoTests.swift new file mode 100755 index 0000000..f362734 --- /dev/null +++ b/MetaPluginDemoTests/MetaPluginDemoTests.swift @@ -0,0 +1,26 @@ +// +// Created by WebID Solutions GmbH | www.webid-solutions.de. +// See the file "LICENSE" for the full license governing this code. +// + +import XCTest +@testable import MetaPluginDemo + +class MetaPluginDemoTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } +} diff --git a/MetaPluginDemoUITests/MetaPluginDemoUITests.swift b/MetaPluginDemoUITests/MetaPluginDemoUITests.swift new file mode 100755 index 0000000..1600bd5 --- /dev/null +++ b/MetaPluginDemoUITests/MetaPluginDemoUITests.swift @@ -0,0 +1,30 @@ +// +// Created by WebID Solutions GmbH | www.webid-solutions.de. +// See the file "LICENSE" for the full license governing this code. +// + +import XCTest + +class MetaPluginDemoUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } +} diff --git a/MetaPluginDemoUITests/MetaPluginDemoUITestsLaunchTests.swift b/MetaPluginDemoUITests/MetaPluginDemoUITestsLaunchTests.swift new file mode 100755 index 0000000..f692d09 --- /dev/null +++ b/MetaPluginDemoUITests/MetaPluginDemoUITestsLaunchTests.swift @@ -0,0 +1,30 @@ +// +// Created by WebID Solutions GmbH | www.webid-solutions.de. +// See the file "LICENSE" for the full license governing this code. +// + +import XCTest + +class MetaPluginDemoUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 2767a6d..c57f9a2 --- a/README.md +++ b/README.md @@ -21,16 +21,22 @@ From the process creation request to the server, you should have received an act Insert this number in the Credentials class, by replacing the placeholder string with the action-id as a string.
After that, start the demo app on an iOS device.
+The app allows you to pick and choose which plugins to add at runtime. +Check the boxes for the plugins you wish to add.
+If necessary, the plugin's mode can be set to a given debug scenario. +We recommend the usage of the live mode instead.
Press the main button on the Main screen to start the plugin during runtime. ## Fastened Tutorial
    +
  1. Generate the Credentials.swift file
  2. Replace placeholder strings in Credentials.swift
  3. Create process via mobile api
  4. Replace placeholder string of action-id with action-id from process-creation response
  5. -
  6. Start plugin
  7. +
  8. Start App
  9. +
  10. Choose which plugins to add
  11. Click main button of the Main Screen to start the plugin