From bef2d71b5631257310dcc469d3044155056140f9 Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 16 Oct 2023 18:36:42 +0200 Subject: [PATCH 1/5] 1029: update to cocoapods 1.13.0 and update gems to fix issues with xcode 15. Add longer timeout for maps screenshot --- frontend/ios/Gemfile.lock | 116 ++++++++++-------- frontend/ios/Podfile.lock | 28 +++-- .../ios/ScreenshotTests/ScreenshotTests.swift | 2 +- 3 files changed, 80 insertions(+), 66 deletions(-) diff --git a/frontend/ios/Gemfile.lock b/frontend/ios/Gemfile.lock index f3a724e67..8e93fb2fe 100644 --- a/frontend/ios/Gemfile.lock +++ b/frontend/ios/Gemfile.lock @@ -1,15 +1,19 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.5) + CFPropertyList (3.0.6) rexml - activesupport (6.1.7.6) + activesupport (7.1.1) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.1) + addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) @@ -17,32 +21,34 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.698.0) - aws-sdk-core (3.169.0) + aws-partitions (1.835.0) + aws-sdk-core (3.185.1) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.5) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.62.0) - aws-sdk-core (~> 3, >= 3.165.0) + aws-sdk-kms (1.72.0) + aws-sdk-core (~> 3, >= 3.184.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.118.0) - aws-sdk-core (~> 3, >= 3.165.0) + aws-sdk-s3 (1.136.0) + aws-sdk-core (~> 3, >= 3.181.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.4) - aws-sigv4 (1.5.2) + aws-sigv4 (~> 1.6) + aws-sigv4 (1.6.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) + base64 (0.1.1) + bigdecimal (3.1.4) claide (1.1.0) - cocoapods (1.11.3) + cocoapods (1.13.0) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.11.3) + cocoapods-core (= 1.13.0) cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-downloader (>= 1.6.0, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) colored2 (~> 3.1) escape (~> 0.0.4) @@ -50,10 +56,10 @@ GEM gh_inspector (~> 1.0) molinillo (~> 0.8.0) nap (~> 1.0) - ruby-macho (>= 1.0, < 3.0) - xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.11.3) - activesupport (>= 5.0, < 7) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.13.0) + activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) concurrent-ruby (~> 1.1) @@ -76,17 +82,20 @@ GEM commander (4.6.0) highline (~> 2.0.0) concurrent-ruby (1.2.2) + connection_pool (2.4.1) declarative (0.0.20) - digest-crc (0.6.4) + digest-crc (0.6.5) rake (>= 12.0.0, < 14.0.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) dotenv (2.8.1) + drb (2.1.1) + ruby2_keywords emoji_regex (3.2.3) escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - excon (0.97.2) + excon (0.104.0) faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -115,8 +124,8 @@ GEM faraday-retry (1.0.3) faraday_middleware (1.2.0) faraday (~> 1.0) - fastimage (2.2.6) - fastlane (2.211.0) + fastimage (2.2.7) + fastlane (2.216.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -137,10 +146,11 @@ GEM google-apis-playcustomapp_v1 (~> 0.1) google-cloud-storage (~> 1.31) highline (~> 2.0) + http-cookie (~> 1.0.5) json (< 3.0.0) jwt (>= 2.1.0, < 3) mini_magick (>= 4.9.4, < 5.0.0) - multipart-post (~> 2.0.0) + multipart-post (>= 2.0.0, < 3.0.0) naturally (~> 2.2) optparse (~> 0.1.1) plist (>= 3.1.0, < 4.0.0) @@ -148,20 +158,20 @@ GEM security (= 0.1.3) simctl (~> 1.6.3) terminal-notifier (>= 2.0.0, < 3.0.0) - terminal-table (>= 1.4.5, < 2.0.0) + terminal-table (~> 3) tty-screen (>= 0.6.3, < 1.0.0) tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) - ffi (1.15.5) + ffi (1.16.3) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.32.0) - google-apis-core (>= 0.9.1, < 2.a) - google-apis-core (0.9.5) + google-apis-androidpublisher_v3 (0.51.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.1) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -170,10 +180,10 @@ GEM retriable (>= 2.0, < 4.a) rexml webrick - google-apis-iamcredentials_v1 (0.16.0) - google-apis-core (>= 0.9.1, < 2.a) - google-apis-playcustomapp_v1 (0.12.0) - google-apis-core (>= 0.9.1, < 2.a) + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.19.0) google-apis-core (>= 0.9.0, < 2.a) google-cloud-core (1.6.0) @@ -181,7 +191,7 @@ GEM google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.3.0) + google-cloud-errors (1.3.1) google-cloud-storage (1.44.0) addressable (~> 2.8) digest-crc (~> 0.4) @@ -190,10 +200,9 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.3.0) + googleauth (1.8.1) faraday (>= 0.17.3, < 3.a) jwt (>= 1.4, < 3.0) - memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) @@ -205,21 +214,21 @@ GEM concurrent-ruby (~> 1.0) jmespath (1.6.2) json (2.6.3) - jwt (2.6.0) - memoist (0.16.2) + jwt (2.7.1) mini_magick (4.12.0) - mini_mime (1.1.2) - minitest (5.19.0) + mini_mime (1.1.5) + minitest (5.20.0) molinillo (0.8.0) multi_json (1.15.0) - multipart-post (2.0.0) + multipart-post (2.3.0) + mutex_m (0.1.2) nanaimo (0.3.0) nap (1.1.0) naturally (2.2.1) netrc (0.11.0) optparse (0.1.1) os (1.1.4) - plist (3.6.0) + plist (3.7.0) public_suffix (4.0.7) rake (13.0.6) representable (3.2.0) @@ -227,23 +236,23 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.2.5) + rexml (3.2.6) rouge (2.0.7) ruby-macho (2.5.1) ruby2_keywords (0.0.5) rubyzip (2.3.2) security (0.1.3) - signet (0.17.0) + signet (0.18.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simctl (1.6.8) + simctl (1.6.10) CFPropertyList naturally terminal-notifier (2.0.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) trailblazer-option (0.1.2) tty-cursor (0.7.1) tty-screen (0.8.1) @@ -257,10 +266,10 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) - unicode-display_width (1.8.0) - webrick (1.7.0) + unicode-display_width (2.5.0) + webrick (1.8.1) word_wrap (1.0.0) - xcodeproj (1.22.0) + xcodeproj (1.23.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -271,14 +280,13 @@ GEM rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) - zeitwerk (2.6.11) PLATFORMS - ruby + arm64-darwin-22 DEPENDENCIES cocoapods fastlane BUNDLED WITH - 1.17.2 + 2.4.10 diff --git a/frontend/ios/Podfile.lock b/frontend/ios/Podfile.lock index 142217a26..c27cb3233 100644 --- a/frontend/ios/Podfile.lock +++ b/frontend/ios/Podfile.lock @@ -2,12 +2,14 @@ PODS: - connectivity_plus (0.0.1): - Flutter - ReachabilitySwift + - fk_user_agent (2.0.0): + - Flutter - Flutter (1.0.0) - flutter_secure_storage (6.0.0): - Flutter - geolocator_apple (1.2.0): - Flutter - - GoogleDataTransport (9.2.0): + - GoogleDataTransport (9.2.5): - GoogleUtilities/Environment (~> 7.7) - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) @@ -28,11 +30,11 @@ PODS: - GoogleToolboxForMac/Defines (= 2.3.2) - "GoogleToolboxForMac/NSString+URLArguments (= 2.3.2)" - "GoogleToolboxForMac/NSString+URLArguments (2.3.2)" - - GoogleUtilities/Environment (7.7.0): + - GoogleUtilities/Environment (7.11.5): - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.7.0): + - GoogleUtilities/Logger (7.11.5): - GoogleUtilities/Environment - - GoogleUtilities/UserDefaults (7.7.0): + - GoogleUtilities/UserDefaults (7.11.5): - GoogleUtilities/Logger - GoogleUtilitiesComponents (1.1.0): - GoogleUtilities/Logger @@ -79,8 +81,8 @@ PODS: - FlutterMacOS - permission_handler_apple (9.0.4): - Flutter - - PromisesObjC (2.1.1) - - Protobuf (3.21.12) + - PromisesObjC (2.3.1) + - Protobuf (3.24.2) - ReachabilitySwift (5.0.0) - Sentry/HybridSDK (8.9.1): - SentryPrivate (= 8.9.1) @@ -97,6 +99,7 @@ PODS: DEPENDENCIES: - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) + - fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`) - Flutter (from `Flutter`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`) @@ -136,6 +139,8 @@ SPEC REPOS: EXTERNAL SOURCES: connectivity_plus: :path: ".symlinks/plugins/connectivity_plus/ios" + fk_user_agent: + :path: ".symlinks/plugins/fk_user_agent/ios" Flutter: :path: Flutter flutter_secure_storage: @@ -161,13 +166,14 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e + fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be geolocator_apple: cc556e6844d508c95df1e87e3ea6fa4e58c50401 - GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f + GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 GoogleMLKit: 0017a6a8372e1a182139b9def4d89be5d87ca5a7 GoogleToolboxForMac: 8bef7c7c5cf7291c687cf5354f39f9db6399ad34 - GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 + GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084 GoogleUtilitiesComponents: 679b2c881db3b615a2777504623df6122dd20afe GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba MapLibre: 5aa820115d91293a4d09e681e7470f88bd34b672 @@ -182,8 +188,8 @@ SPEC CHECKSUMS: package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7 path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce - PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb - Protobuf: 120350fc38646e2dedc26f49ecba778184ea1de2 + PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 + Protobuf: de0b7ad27d01105fc191b77b003e74af6dbd2c2c ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 Sentry: e3203780941722a1fcfee99e351de14244c7f806 sentry_flutter: 8f0ffd53088e6a4d50c095852c5cad9e4405025c @@ -193,4 +199,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: b1bf66f8804a3c89a999c4d9cd086240d4ea0498 -COCOAPODS: 1.11.3 +COCOAPODS: 1.13.0 diff --git a/frontend/ios/ScreenshotTests/ScreenshotTests.swift b/frontend/ios/ScreenshotTests/ScreenshotTests.swift index 3e594c5d9..8d1ef4edf 100644 --- a/frontend/ios/ScreenshotTests/ScreenshotTests.swift +++ b/frontend/ios/ScreenshotTests/ScreenshotTests.swift @@ -39,7 +39,7 @@ class ScreenshotTests: XCTestCase { let element = app.staticTexts["Suche\nTab 2 von 4"] self.waitForElementToAppear(element: element) - sleep(10) + sleep(20) snapshot("01Map") } From 35ebecb66eca530bc73ac868b6e8db923cacd6a8 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 18 Oct 2023 13:27:44 +0200 Subject: [PATCH 2/5] =?UTF-8?q?1029:=20update=20detail=20test=20f=C3=BCr?= =?UTF-8?q?=20nuernberg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/ios/Runner.xcodeproj/project.pbxproj | 130 +++++++++++++++--- .../ios/ScreenshotTests/ScreenshotTests.swift | 36 +++-- 2 files changed, 136 insertions(+), 30 deletions(-) diff --git a/frontend/ios/Runner.xcodeproj/project.pbxproj b/frontend/ios/Runner.xcodeproj/project.pbxproj index a27c948f0..1cb04b872 100644 --- a/frontend/ios/Runner.xcodeproj/project.pbxproj +++ b/frontend/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -61,6 +61,55 @@ remoteGlobalIDString = 502E20F09A7CAFBD1DE1AA882DCC550C; remoteInfo = geolocator_apple; }; + 2E44B0FE2ADED161006E42CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BC7FD3A4F7868A76CB9EB9F8F0753493; + remoteInfo = fk_user_agent; + }; + 2E44B1002ADED161006E42CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = AE157A33FEF959A214796BFF348717F6; + remoteInfo = path_provider_foundation; + }; + 2E44B1022ADED161006E42CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = C7AD28D5FB25A8DEDF61F78996932FA6; + remoteInfo = permission_handler_apple; + }; + 2E44B1042ADED161006E42CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 0115C3C00C175D77422084DD0542CE6F; + remoteInfo = Sentry; + }; + 2E44B1062ADED161006E42CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 69E79B6352F5EEE6319DD35575B44D3F; + remoteInfo = sentry_flutter; + }; + 2E44B1082ADED161006E42CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B467DD492938EF656F5C454AC944394E; + remoteInfo = SentryPrivate; + }; + 2E44B10A2ADED161006E42CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 93C6A45C6E4792269BE9BE0073839BF0; + remoteInfo = shared_preferences_foundation; + }; 502F2F2429803DDE00B6F8ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; @@ -145,13 +194,6 @@ remoteGlobalIDString = C39BE06027F24EB0328A76E7507FA463; remoteInfo = package_info_plus; }; - 5093F3E728D8D252009A9A33 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BEDB77D7DFDD5C9008E7D3FC4206FEC9; - remoteInfo = path_provider_ios; - }; 5093F3E928D8D252009A9A33 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; @@ -159,13 +201,6 @@ remoteGlobalIDString = 21B03CA622E690725A6626C088E1D09F; remoteInfo = ReachabilitySwift; }; - 5093F3EB28D8D252009A9A33 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 9DE2C5FB92889028E9DAEBC81231108D; - remoteInfo = shared_preferences_ios; - }; 5093F3ED28D8D252009A9A33 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0B1FA7F026DBD06400D4AEA7 /* Pods.xcodeproj */; @@ -245,6 +280,7 @@ isa = PBXGroup; children = ( 0BE935D1274FD4CA004AF690 /* connectivity_plus */, + 2E44B0FF2ADED161006E42CD /* fk_user_agent */, 0B1FA80826DBD06400D4AEA7 /* flutter_secure_storage */, 0BE935D3274FD4CA004AF690 /* geolocator_apple */, 502F2F2529803DDE00B6F8ED /* GoogleDataTransport */, @@ -258,12 +294,16 @@ 502F2F2F29803DDE00B6F8ED /* mobile_scanner */, 502F2F3129803DDE00B6F8ED /* nanopb */, 5093F3E628D8D252009A9A33 /* package_info_plus */, - 5093F3E828D8D252009A9A33 /* path_provider_ios */, + 2E44B1012ADED161006E42CD /* path_provider_foundation */, + 2E44B1032ADED161006E42CD /* permission_handler_apple */, 0B1FA81C26DBD06400D4AEA7 /* Pods-Runner */, 502F2F3329803DDE00B6F8ED /* PromisesObjC */, 502F2F3529803DDE00B6F8ED /* Protobuf */, 5093F3EA28D8D252009A9A33 /* ReachabilitySwift */, - 5093F3EC28D8D252009A9A33 /* shared_preferences_ios */, + 2E44B1052ADED161006E42CD /* Sentry */, + 2E44B1072ADED161006E42CD /* sentry_flutter */, + 2E44B1092ADED161006E42CD /* SentryPrivate */, + 2E44B10B2ADED161006E42CD /* shared_preferences_foundation */, 5093F3EE28D8D252009A9A33 /* url_launcher_ios */, ); name = Products; @@ -482,6 +522,62 @@ remoteRef = 0BE935D2274FD4CA004AF690 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 2E44B0FF2ADED161006E42CD /* fk_user_agent */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + name = fk_user_agent; + path = fk_user_agent.framework; + remoteRef = 2E44B0FE2ADED161006E42CD /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2E44B1012ADED161006E42CD /* path_provider_foundation */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + name = path_provider_foundation; + path = path_provider_foundation.framework; + remoteRef = 2E44B1002ADED161006E42CD /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2E44B1032ADED161006E42CD /* permission_handler_apple */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + name = permission_handler_apple; + path = permission_handler_apple.framework; + remoteRef = 2E44B1022ADED161006E42CD /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2E44B1052ADED161006E42CD /* Sentry */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + name = Sentry; + path = Sentry.framework; + remoteRef = 2E44B1042ADED161006E42CD /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2E44B1072ADED161006E42CD /* sentry_flutter */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + name = sentry_flutter; + path = sentry_flutter.framework; + remoteRef = 2E44B1062ADED161006E42CD /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2E44B1092ADED161006E42CD /* SentryPrivate */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + name = SentryPrivate; + path = SentryPrivate.framework; + remoteRef = 2E44B1082ADED161006E42CD /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2E44B10B2ADED161006E42CD /* shared_preferences_foundation */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + name = shared_preferences_foundation; + path = shared_preferences_foundation.framework; + remoteRef = 2E44B10A2ADED161006E42CD /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 502F2F2529803DDE00B6F8ED /* GoogleDataTransport */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; diff --git a/frontend/ios/ScreenshotTests/ScreenshotTests.swift b/frontend/ios/ScreenshotTests/ScreenshotTests.swift index 8d1ef4edf..5bbf91fa5 100644 --- a/frontend/ios/ScreenshotTests/ScreenshotTests.swift +++ b/frontend/ios/ScreenshotTests/ScreenshotTests.swift @@ -50,11 +50,11 @@ class ScreenshotTests: XCTestCase { app.launchArguments += ["UI-Testing"] app.launch() - let element = app.staticTexts["Suche\nTab 2 von 4"] - self.waitForElementToAppear(element: element) + let tabItem = app.staticTexts["Suche\nTab 2 von 4"] + self.waitForElementToAppear(element: tabItem) sleep(5) - XCUIApplication().staticTexts["Suche\nTab 2 von 4"].tap() + tabItem.tap() snapshot("01Search") } @@ -65,27 +65,37 @@ class ScreenshotTests: XCTestCase { app.launchArguments += ["UI-Testing"] app.launch() - let element = app.staticTexts["Suche\nTab 2 von 4"] - self.waitForElementToAppear(element: element) + let tabItem = app.staticTexts["Suche\nTab 2 von 4"] + self.waitForElementToAppear(element: tabItem) sleep(5) - app.staticTexts["Suche\nTab 2 von 4"].tap() + tabItem.tap() let search = app.textFields["Tippen, um zu suchen …"] + self.waitForElementToAppear(element: search) search.tap() + + // Default Bayern + var searchText = "Eiscafe" + var category = "Essen/Trinken/Gastronomie" + var expectedMatch = "Dolomiti" + if(app.launchArguments.contains("app.sozialpass.nuernberg")){ + searchText = "Ahorn" + category = "Apotheken/Gesundheit" + expectedMatch = "Apotheke" + } - search.tap() - search.typeText("Eiscafe") + search.typeText(searchText) search.typeText("\n") // Close keyboard for more space - app.images.matching(identifier: "Essen/Trinken/Gastronomie").element(boundBy: 0).tap() + app.images.matching(identifier: category).element(boundBy: 0).tap() // on ipads the list element is a "otherElements" element, on iphones it is a "staticTexts" - var result = app.descendants(matching: .any).element(matching: NSPredicate(format: "label CONTAINS[c] %@", "Dolomiti")) + var result = app.descendants(matching: .any).element(matching: NSPredicate(format: "label CONTAINS[c] %@", expectedMatch)) - //if (!result.exists || !result.isHittable) { - // result = app.otherElements.element(matching: NSPredicate(format: "label CONTAINS[c] %@", "Alpha")) - //} + if (!result.exists || !result.isHittable) { + result = app.otherElements.element(matching: NSPredicate(format: "label CONTAINS[c] %@", expectedMatch)) + } result.tap() sleep(2) From 341c01bf11bb5e1c87398eb9dd488164f39ab758 Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 19 Oct 2023 11:33:22 +0200 Subject: [PATCH 3/5] 1029: increase sleep for map for ios16, fix special char issue for text input, add test parameters for nuernberg, update docs --- docs/production-setup.md | 11 ++++++++--- frontend/ios/.gitignore | 2 +- .../ios/ScreenshotTests/ScreenshotTests.swift | 17 +++++++++-------- frontend/ios/fastlane/Snapfile | 4 ++-- frontend/lib/widgets/app_bars.dart | 2 +- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/docs/production-setup.md b/docs/production-setup.md index 659af2ab3..498e716f3 100644 --- a/docs/production-setup.md +++ b/docs/production-setup.md @@ -100,6 +100,11 @@ fvm flutter build ipa --flavor Bayern --release --dart-define=environment=produc ## Snapshots -The Snapshots are created by executing a bunch of e2e tests locally. Check out `frontend/ios/ScreenshotTest` . - -iOS snapshots can be created via `bundle exec fastlane snapshot` in the `frontend/ios` directory. For that you’ll have to install a bunch of simulators in XCode (see `frontend/ios/fastlane/Snapfile`) +The snapshots are created by executing a bunch of e2e tests locally. Check out `frontend/ios/ScreenshotTest` . + +- ensure local backend is running. +- check for the required simulators in XCode (see `frontend/ios/fastlane/Snapfile`) +- set the build config for the particular project. +- switch to: `frontend/ios` +- run: `bundle exec fastlane snapshot --launch-arguments "" --scheme "ScreenshotTests" --app-identifier "" --output-directory "./fastlane/screenshots-" ` +- Example: `bundle exec fastlane snapshot --launch-arguments "app.sozialpass.nuernberg" --scheme "ScreenshotTests" --app-identifier "app.sozialpass.nuernberg" --output-directory "./fastlane/screenshots-nuernberg" ` diff --git a/frontend/ios/.gitignore b/frontend/ios/.gitignore index d24d122bd..6bbaab158 100644 --- a/frontend/ios/.gitignore +++ b/frontend/ios/.gitignore @@ -36,6 +36,6 @@ build vendor fastlane/report.xml -fastlane/screenshots +fastlane/screenshots* buildConfig.tmp.xcconfig diff --git a/frontend/ios/ScreenshotTests/ScreenshotTests.swift b/frontend/ios/ScreenshotTests/ScreenshotTests.swift index 5bbf91fa5..7cdfe993d 100644 --- a/frontend/ios/ScreenshotTests/ScreenshotTests.swift +++ b/frontend/ios/ScreenshotTests/ScreenshotTests.swift @@ -39,7 +39,7 @@ class ScreenshotTests: XCTestCase { let element = app.staticTexts["Suche\nTab 2 von 4"] self.waitForElementToAppear(element: element) - sleep(20) + sleep(60) snapshot("01Map") } @@ -70,7 +70,7 @@ class ScreenshotTests: XCTestCase { sleep(5) tabItem.tap() - let search = app.textFields["Tippen, um zu suchen …"] + let search = app.textFields["Tippen, um zu suchen..."] self.waitForElementToAppear(element: search) search.tap() @@ -79,23 +79,24 @@ class ScreenshotTests: XCTestCase { var category = "Essen/Trinken/Gastronomie" var expectedMatch = "Dolomiti" - if(app.launchArguments.contains("app.sozialpass.nuernberg")){ - searchText = "Ahorn" - category = "Apotheken/Gesundheit" - expectedMatch = "Apotheke" - } + if(app.launchArguments.contains("app.sozialpass.nuernberg")){ + searchText = "Ahorn" + category = "Apotheken/Gesundheit" + expectedMatch = "Ahorn Apotheke" + } search.typeText(searchText) search.typeText("\n") // Close keyboard for more space + sleep(10) app.images.matching(identifier: category).element(boundBy: 0).tap() - // on ipads the list element is a "otherElements" element, on iphones it is a "staticTexts" var result = app.descendants(matching: .any).element(matching: NSPredicate(format: "label CONTAINS[c] %@", expectedMatch)) if (!result.exists || !result.isHittable) { result = app.otherElements.element(matching: NSPredicate(format: "label CONTAINS[c] %@", expectedMatch)) } + sleep(10) result.tap() sleep(2) diff --git a/frontend/ios/fastlane/Snapfile b/frontend/ios/fastlane/Snapfile index b7da7dfc4..db9dffd8c 100644 --- a/frontend/ios/fastlane/Snapfile +++ b/frontend/ios/fastlane/Snapfile @@ -2,8 +2,8 @@ devices([ # https://stackoverflow.com/a/52311326 "iPhone 8 Plus", # 5.5" "iPhone 11 Pro Max", # 6.5" -"iPhone 14 Pro Max", # 6.7" -"iPad Pro (12.9-inch) (6th generation)", +"iPhone 14 Pro Max", # 6.7 iOS 16.4" +"iPad Pro (12.9-inch) (6th generation)", #iOS 16.4 "iPad Pro (12.9-inch) (2nd generation)" ]) diff --git a/frontend/lib/widgets/app_bars.dart b/frontend/lib/widgets/app_bars.dart index 90bb09ac3..ad4825f17 100644 --- a/frontend/lib/widgets/app_bars.dart +++ b/frontend/lib/widgets/app_bars.dart @@ -91,7 +91,7 @@ class SearchSliverAppBarState extends State { controller: textEditingController, focusNode: focusNode, decoration: InputDecoration.collapsed( - hintText: 'Tippen, um zu suchen …', + hintText: 'Tippen, um zu suchen...', hintStyle: TextStyle(color: foregroundColor?.withOpacity(0.8)), ), cursorColor: foregroundColor, From 92b1b9b7bfa6bc4cb20a257fe2cae40d8c53634c Mon Sep 17 00:00:00 2001 From: Sarah Date: Thu, 26 Oct 2023 15:01:28 +0200 Subject: [PATCH 4/5] 1029: move commands into fastfile --- docs/production-setup.md | 3 +- .../xcshareddata/xcschemes/Nuernberg.xcscheme | 17 ++++++++- frontend/ios/fastlane/Fastfile | 22 ++++++++++-- frontend/ios/fastlane/README.md | 35 ++++++++++++------- 4 files changed, 60 insertions(+), 17 deletions(-) diff --git a/docs/production-setup.md b/docs/production-setup.md index 498e716f3..64745bb86 100644 --- a/docs/production-setup.md +++ b/docs/production-setup.md @@ -106,5 +106,4 @@ The snapshots are created by executing a bunch of e2e tests locally. Check out ` - check for the required simulators in XCode (see `frontend/ios/fastlane/Snapfile`) - set the build config for the particular project. - switch to: `frontend/ios` -- run: `bundle exec fastlane snapshot --launch-arguments "" --scheme "ScreenshotTests" --app-identifier "" --output-directory "./fastlane/screenshots-" ` -- Example: `bundle exec fastlane snapshot --launch-arguments "app.sozialpass.nuernberg" --scheme "ScreenshotTests" --app-identifier "app.sozialpass.nuernberg" --output-directory "./fastlane/screenshots-nuernberg" ` +- run: `bundle exec fastlane ios ` where `snapshot_lane` is either `snap_bayern` or `snap_nuernberg` diff --git a/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme b/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme index f9844d2b1..5798d1d71 100644 --- a/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme +++ b/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme @@ -45,7 +45,22 @@ buildConfiguration = "Debug-Nuernberg" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + + + + + diff --git a/frontend/ios/fastlane/Fastfile b/frontend/ios/fastlane/Fastfile index cc89a5a00..df3623a83 100644 --- a/frontend/ios/fastlane/Fastfile +++ b/frontend/ios/fastlane/Fastfile @@ -17,7 +17,25 @@ default_platform(:ios) platform :ios do desc "Generate new localized screenshots" - lane :screenshots do - capture_screenshots(workspace: "Runner.xcworkspace", scheme: "ScreenshotTests") + lane :snap_bayern do + sh "fvm flutter pub run build_runner build --define df_build_config=name=bayern" + capture_screenshots( + workspace: "Runner.xcworkspace", + scheme: "ScreenshotTests", + app_identifier: "de.nrw.it.ehrensachebayern", + launch_arguments: ["de.nrw.it.ehrensachebayern"], + output_directory: "./fastlane/screenshots/bayern", + ) + end + + lane :snap_nuernberg do + sh "fvm flutter pub run build_runner build --define df_build_config=name=nuernberg" + capture_screenshots( + workspace: "Runner.xcworkspace", + scheme: "ScreenshotTests", + app_identifier: "app.sozialpass.nuernberg", + launch_arguments: ["app.sozialpass.nuernberg"], + output_directory: "./fastlane/screenshots/nuernberg", + ) end end diff --git a/frontend/ios/fastlane/README.md b/frontend/ios/fastlane/README.md index 7b00f9d1b..f0b1e190d 100644 --- a/frontend/ios/fastlane/README.md +++ b/frontend/ios/fastlane/README.md @@ -1,29 +1,40 @@ fastlane documentation -================ +---- + # Installation Make sure you have the latest version of the Xcode command line tools installed: -``` +```sh xcode-select --install ``` -Install _fastlane_ using -``` -[sudo] gem install fastlane -NV -``` -or alternatively using `brew install fastlane` +For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) # Available Actions + ## iOS -### ios screenshots -``` -fastlane ios screenshots + +### ios snap_bayern + +```sh +[bundle exec] fastlane ios snap_bayern ``` + Generate new localized screenshots +### ios snap_nuernberg + +```sh +[bundle exec] fastlane ios snap_nuernberg +``` + + + ---- This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. -More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). -The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). + +More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). + +The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). From 7bf22c23323b46c4d8e2ab46951e397da41fe7de Mon Sep 17 00:00:00 2001 From: Sarah Date: Fri, 27 Oct 2023 10:38:15 +0200 Subject: [PATCH 5/5] 1029: correctly pass bundleId --- .../xcshareddata/xcschemes/Nuernberg.xcscheme | 11 ++++++----- .../ios/ScreenshotTests/ScreenshotTests.swift | 16 +++++++++++----- frontend/ios/fastlane/Fastfile | 16 +++++++++------- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme b/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme index 5798d1d71..32a26aff1 100644 --- a/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme +++ b/frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Nuernberg.xcscheme @@ -55,12 +55,13 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - + - - + + diff --git a/frontend/ios/ScreenshotTests/ScreenshotTests.swift b/frontend/ios/ScreenshotTests/ScreenshotTests.swift index 7cdfe993d..78c70f6e1 100644 --- a/frontend/ios/ScreenshotTests/ScreenshotTests.swift +++ b/frontend/ios/ScreenshotTests/ScreenshotTests.swift @@ -8,7 +8,6 @@ import XCTest class ScreenshotTests: XCTestCase { - override func setUpWithError() throws { continueAfterFailure = true } @@ -17,7 +16,14 @@ class ScreenshotTests: XCTestCase { } - func waitForElementToAppear(element: XCUIElement, timeout: TimeInterval = 20, file: String = #file, line: UInt = #line) { + func getBundleId(from app: XCUIApplication) -> String { + guard let bundleID = app.launchEnvironment.first(where: { $0.key == "BUNDLE_IDENTIFIER" })?.value else { + return ProcessInfo().environment.first { $0.key == "BUNDLE_IDENTIFIER" }?.value ?? ""; + } + return bundleID + } + + func waitForElementToAppear(element: XCUIElement, timeout: TimeInterval = 20) { let existsPredicate = NSPredicate(format: "exists == true") expectation(for: existsPredicate, @@ -26,7 +32,8 @@ class ScreenshotTests: XCTestCase { waitForExpectations(timeout: timeout) { (error) -> Void in if (error != nil) { let message = "Failed to find \(element) after \(timeout) seconds." - self.recordFailure(withDescription: message, inFile: file, atLine: Int(line), expected: true) + self.record(XCTIssue(type: XCTIssue.IssueType.assertionFailure, compactDescription: message) +) } } } @@ -78,8 +85,7 @@ class ScreenshotTests: XCTestCase { var searchText = "Eiscafe" var category = "Essen/Trinken/Gastronomie" var expectedMatch = "Dolomiti" - - if(app.launchArguments.contains("app.sozialpass.nuernberg")){ + if (self.getBundleId(from: app) == "app.sozialpass.nuernberg"){ searchText = "Ahorn" category = "Apotheken/Gesundheit" expectedMatch = "Ahorn Apotheke" diff --git a/frontend/ios/fastlane/Fastfile b/frontend/ios/fastlane/Fastfile index df3623a83..ed5ff2d30 100644 --- a/frontend/ios/fastlane/Fastfile +++ b/frontend/ios/fastlane/Fastfile @@ -15,27 +15,29 @@ default_platform(:ios) -platform :ios do +platform :ios do desc "Generate new localized screenshots" lane :snap_bayern do sh "fvm flutter pub run build_runner build --define df_build_config=name=bayern" + bundle_identifier = "de.nrw.it.ehrensachebayern" capture_screenshots( workspace: "Runner.xcworkspace", - scheme: "ScreenshotTests", - app_identifier: "de.nrw.it.ehrensachebayern", - launch_arguments: ["de.nrw.it.ehrensachebayern"], + scheme: "Bayern", + app_identifier: bundle_identifier, output_directory: "./fastlane/screenshots/bayern", + launch_arguments: [bundle_identifier] ) end lane :snap_nuernberg do sh "fvm flutter pub run build_runner build --define df_build_config=name=nuernberg" + bundle_identifier = "app.sozialpass.nuernberg" capture_screenshots( workspace: "Runner.xcworkspace", - scheme: "ScreenshotTests", - app_identifier: "app.sozialpass.nuernberg", - launch_arguments: ["app.sozialpass.nuernberg"], + scheme: "Nuernberg", + app_identifier: bundle_identifier, output_directory: "./fastlane/screenshots/nuernberg", + launch_arguments: [bundle_identifier] ) end end