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 0000000..bbdb1c5 Binary files /dev/null and b/MetaPluginDemo/Certificates/test.webid-solutions.de_2024.02.27.cer differ 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 0000000..bd68fb8 Binary files /dev/null and b/MetaPluginDemo/Certificates/test.webid-solutions.de_2025.02.22.cer differ diff --git a/MetaPluginDemo/Certificates/webid-gateway.de_2023.12.01.cer b/MetaPluginDemo/Certificates/webid-gateway.de_2023.12.01.cer new file mode 100755 index 0000000..5393eee Binary files /dev/null and b/MetaPluginDemo/Certificates/webid-gateway.de_2023.12.01.cer differ diff --git a/MetaPluginDemo/Certificates/webid-gateway.de_2024.11.02.cer b/MetaPluginDemo/Certificates/webid-gateway.de_2024.11.02.cer new file mode 100755 index 0000000..e2ca689 Binary files /dev/null and b/MetaPluginDemo/Certificates/webid-gateway.de_2024.11.02.cer differ diff --git a/MetaPluginDemo/CustomizedPluginTheme.swift b/MetaPluginDemo/CustomizedPluginTheme.swift new file mode 100755 index 0000000..6b4b7f7 --- /dev/null +++ b/MetaPluginDemo/CustomizedPluginTheme.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 WebIdUiKitComponents + +/** + * A collection of themes for customizing the product-plugin appearance. + */ +class CustomizedPluginTheme { + + /** + * Creates a ``WebidAppTheme`` to use in light mode or, if older than iOS 13.0, standard mode. + */ + internal static func getLightVersion() -> 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