From 619709fb36a789287c153d7628673a126ea968bc Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Thu, 11 Aug 2022 11:19:35 -0700 Subject: [PATCH 01/10] [quick_actions]remove custom module map and private header files --- packages/quick_actions/quick_actions_ios/CHANGELOG.md | 5 +++++ .../ios/RunnerTests/FLTQuickActionsPluginTests.m | 1 - .../ios/RunnerTests/FLTShortcutStateManagerTests.m | 1 - .../{PrivateHeaders => }/FLTQuickActionsPlugin_Test.h | 0 .../{PrivateHeaders => }/FLTShortcutStateManager.h | 0 .../ios/Classes/QuickActionsPlugin.modulemap | 11 ----------- .../ios/Classes/quick_actions_ios-umbrella.h | 10 ---------- .../quick_actions_ios/ios/quick_actions_ios.podspec | 4 +--- packages/quick_actions/quick_actions_ios/pubspec.yaml | 2 +- 9 files changed, 7 insertions(+), 27 deletions(-) rename packages/quick_actions/quick_actions_ios/ios/Classes/{PrivateHeaders => }/FLTQuickActionsPlugin_Test.h (100%) rename packages/quick_actions/quick_actions_ios/ios/Classes/{PrivateHeaders => }/FLTShortcutStateManager.h (100%) delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index 7334bbd6a632..3ae30ed0be9b 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.0+1 + +* Removes custom modulemap file with "Test" submodule and private headers for Swift migration. +* Migrated `FLTQuickActionsPlugin` class to Swift. + ## 1.0.0 * Updates version to 1.0 to reflect current status. diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m index b47f89848bbc..82a664a65b4b 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m @@ -4,7 +4,6 @@ @import Flutter; @import quick_actions_ios; -@import quick_actions_ios.Test; @import XCTest; #import diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m index f5b8b3405fc8..96fbf229e566 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import quick_actions_ios; -@import quick_actions_ios.Test; @import XCTest; #import diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTQuickActionsPlugin_Test.h b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin_Test.h similarity index 100% rename from packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTQuickActionsPlugin_Test.h rename to packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin_Test.h diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTShortcutStateManager.h b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTShortcutStateManager.h similarity index 100% rename from packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTShortcutStateManager.h rename to packages/quick_actions/quick_actions_ios/ios/Classes/FLTShortcutStateManager.h diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap deleted file mode 100644 index 3f7d7ce08203..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap +++ /dev/null @@ -1,11 +0,0 @@ -framework module quick_actions_ios { - umbrella header "quick_actions_ios-umbrella.h" - - export * - module * { export * } - - explicit module Test { - header "FLTQuickActionsPlugin_Test.h" - header "FLTShortcutStateManager.h" - } -} diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h b/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h deleted file mode 100644 index d099a0411cf0..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import - -FOUNDATION_EXPORT double quickActionsIOSVersionNumber; -FOUNDATION_EXPORT const unsigned char quickActionsIOSVersionString[]; - -#import diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec index 68eaa6ff7dc9..c0af00ed105e 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec @@ -15,10 +15,8 @@ Downloaded by pub (not CocoaPods). s.source = { :http => 'https://github.com/flutter/plugins/tree/main/packages/quick_actions' } s.documentation_url = 'https://pub.dev/packages/quick_actions' s.source_files = 'Classes/**/*.{h,m}' - s.public_header_files = 'Classes/*.h' - s.private_header_files = 'Classes/PrivateHeaders/*.h' + s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' s.platform = :ios, '9.0' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } - s.module_map = 'Classes/QuickActionsPlugin.modulemap' end diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index 82fd25f06b2c..2067fb0fc1f0 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: quick_actions_ios description: An implementation for the iOS platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/plugins/tree/main/packages/quick_actions/quick_actions_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.0.0 +version: 1.0.0+1 environment: sdk: ">=2.15.0 <3.0.0" From ff695570d973f5fb16c73b626f41598cb65cc74b Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 6 Sep 2022 16:38:16 -0700 Subject: [PATCH 02/10] migrated quick actions plugin class --- .../ios/Classes/FLTQuickActionsPlugin.h | 14 --- .../ios/Classes/FLTQuickActionsPlugin.m | 99 ------------------- .../ios/Classes/FLTQuickActionsPlugin_Test.h | 23 ----- .../ios/Classes/QuickActionsPlugin.swift | 72 ++++++++++++++ 4 files changed, 72 insertions(+), 136 deletions(-) delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin_Test.h create mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h deleted file mode 100644 index 63f615440dea..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -@import Flutter; - -@interface FLTQuickActionsPlugin : NSObject - -/// Unavailable. -- (instancetype)init NS_UNAVAILABLE; - -/// Unavailable. -+ (instancetype)new NS_UNAVAILABLE; -@end diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m deleted file mode 100644 index fb8994322a9b..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "FLTQuickActionsPlugin.h" -#import "FLTQuickActionsPlugin_Test.h" -#import "FLTShortcutStateManager.h" - -static NSString *const kChannelName = @"plugins.flutter.io/quick_actions_ios"; - -@interface FLTQuickActionsPlugin () -@property(nonatomic, strong) FlutterMethodChannel *channel; -/// The type of the shortcut item selected when launching the app. -@property(nonatomic, strong, nullable) NSString *launchingShortcutType; -@property(nonatomic, strong) FLTShortcutStateManager *shortcutStateManager; -@end - -@implementation FLTQuickActionsPlugin - -+ (void)registerWithRegistrar:(NSObject *)registrar { - FlutterMethodChannel *channel = - [FlutterMethodChannel methodChannelWithName:kChannelName - binaryMessenger:[registrar messenger]]; - FLTQuickActionsPlugin *instance = - [[FLTQuickActionsPlugin alloc] initWithChannel:channel - shortcutStateManager:[[FLTShortcutStateManager alloc] init]]; - [registrar addMethodCallDelegate:instance channel:channel]; - [registrar addApplicationDelegate:instance]; -} - -- (instancetype)initWithChannel:(FlutterMethodChannel *)channel - shortcutStateManager:(FLTShortcutStateManager *)shortcutStateManager { - if ((self = [super init])) { - _channel = channel; - _shortcutStateManager = shortcutStateManager; - } - return self; -} - -- (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result { - if ([call.method isEqualToString:@"setShortcutItems"]) { - [self.shortcutStateManager setShortcutItems:call.arguments]; - result(nil); - } else if ([call.method isEqualToString:@"clearShortcutItems"]) { - [self.shortcutStateManager setShortcutItems:@[]]; - result(nil); - } else if ([call.method isEqualToString:@"getLaunchAction"]) { - result(nil); - } else { - result(FlutterMethodNotImplemented); - } -} - -- (void)dealloc { - [_channel setMethodCallHandler:nil]; - _channel = nil; -} - -- (BOOL)application:(UIApplication *)application - performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem - completionHandler:(void (^)(BOOL succeeded))completionHandler - API_AVAILABLE(ios(9.0)) { - [self handleShortcut:shortcutItem.type]; - return YES; -} - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - UIApplicationShortcutItem *shortcutItem = - launchOptions[UIApplicationLaunchOptionsShortcutItemKey]; - if (shortcutItem) { - // Keep hold of the shortcut type and handle it in the - // `applicationDidBecomeActure:` method once the Dart MethodChannel - // is initialized. - self.launchingShortcutType = shortcutItem.type; - - // Return NO to indicate we handled the quick action to ensure - // the `application:performActionFor:` method is not called (as - // per Apple's documentation: - // https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application?language=objc). - return NO; - } - return YES; -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - if (self.launchingShortcutType) { - [self handleShortcut:self.launchingShortcutType]; - self.launchingShortcutType = nil; - } -} - -#pragma mark Private functions - -- (void)handleShortcut:(NSString *)shortcut { - [self.channel invokeMethod:@"launch" arguments:shortcut]; -} - -@end diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin_Test.h b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin_Test.h deleted file mode 100644 index 514d0633f198..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin_Test.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -@import Flutter; -#import "FLTShortcutStateManager.h" - -NS_ASSUME_NONNULL_BEGIN - -/// APIs exposed for unit tests. -@interface FLTQuickActionsPlugin () - -/// Initializes a FLTQuickActionsPlugin with the given method channel. -/// API exposed for unit tests. -/// @param channel A method channel. -/// @param shortcutStateManager An FLTShortcutStateManager that manages shortcut related states. -/// @return The initialized FLTQuickActionsPlugin. -- (instancetype)initWithChannel:(FlutterMethodChannel *)channel - shortcutStateManager:(FLTShortcutStateManager *)shortcutStateManager; - -@end - -NS_ASSUME_NONNULL_END diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift new file mode 100644 index 000000000000..8487e92e5f05 --- /dev/null +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -0,0 +1,72 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Flutter + +public final class QuickActionsPlugin: NSObject, FlutterPlugin { + + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel( + name: "plugins.flutter.io/quick_actions_ios", + binaryMessenger: registrar.messenger()) + let instance = QuickActionsPlugin(channel: channel) + registrar.addMethodCallDelegate(instance, channel: channel) + registrar.addApplicationDelegate(instance) + } + + private let channel: FlutterMethodChannel + private let shortcutService: FLTShortcutStateManager + + @objc + public init( + channel: FlutterMethodChannel, + shortcutService: FLTShortcutStateManager = FLTShortcutStateManager()) + { + self.channel = channel + self.shortcutService = shortcutService + } + + @objc + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + switch call.method { + case "setShortcutItems": + let items = call.arguments as? [[String:Any]] ?? [] + shortcutService.setShortcutItems(items) + result(nil) + case "clearShortcutItems": + shortcutService.setShortcutItems([]) + result(nil) + case "getLaunchAction": + result(nil) + case _: + result(FlutterMethodNotImplemented) + } + } + + public func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) -> Bool { + handleShortcut(shortcutItem.type) + return true + } + + public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [AnyHashable : Any] = [:]) -> Bool { + let shortcutItem = launchOptions[UIApplication.LaunchOptionsKey.shortcutItem] + if let shortcutItem = shortcutItem as? UIApplicationShortcutItem { + self.shortcutService.launchingShortcutType = shortcutItem.type + return false + } + return true + } + + public func applicationDidBecomeActive(_ application: UIApplication) { + if let shortcutType = shortcutService.launchingShortcutType { + handleShortcut(shortcutType) + shortcutService.launchingShortcutType = nil + } + } + + private func handleShortcut(_ shortcut: String) { + channel.invokeMethod("launch", arguments: shortcut) + } + +} From e6955ae933589854d6cc41feed6b76a244f200dc Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 6 Sep 2022 16:40:23 -0700 Subject: [PATCH 03/10] update podspec to include swift --- .../ios/Classes/QuickActionsPlugin.swift | 35 +++++++++++++------ .../ios/quick_actions_ios.podspec | 7 +++- .../quick_actions_ios/pubspec.yaml | 2 +- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift index 8487e92e5f05..3eaa898737ca 100644 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -16,26 +16,30 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { } private let channel: FlutterMethodChannel - private let shortcutService: FLTShortcutStateManager + private let shortcutStateManager: FLTShortcutStateManager + /// The type of the shortcut item selected when launching the app. + private var launchingShortcutType: String? = nil @objc public init( channel: FlutterMethodChannel, - shortcutService: FLTShortcutStateManager = FLTShortcutStateManager()) + shortcutStateManager: FLTShortcutStateManager = FLTShortcutStateManager()) { self.channel = channel - self.shortcutService = shortcutService + self.shortcutStateManager = shortcutStateManager } @objc public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "setShortcutItems": - let items = call.arguments as? [[String:Any]] ?? [] - shortcutService.setShortcutItems(items) + guard let items = call.arguments as? [[String:Any]] else { + preconditionFailure("The argument must be a list of dictionaries") + } + shortcutStateManager.setShortcutItems(items) result(nil) case "clearShortcutItems": - shortcutService.setShortcutItems([]) + shortcutStateManager.setShortcutItems([]) result(nil) case "getLaunchAction": result(nil) @@ -44,24 +48,33 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { } } + @objc public func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) -> Bool { handleShortcut(shortcutItem.type) return true } + @objc public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [AnyHashable : Any] = [:]) -> Bool { - let shortcutItem = launchOptions[UIApplication.LaunchOptionsKey.shortcutItem] - if let shortcutItem = shortcutItem as? UIApplicationShortcutItem { - self.shortcutService.launchingShortcutType = shortcutItem.type + if let shortcutItem = launchOptions[UIApplication.LaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem { + // Keep hold of the shortcut type and handle it in the + // `applicationDidBecomeActure:` method once the Dart MethodChannel + // is initialized. + launchingShortcutType = shortcutItem.type + + // Return false to indicate we handled the quick action to ensure + // the `application:performActionFor:` method is not called (as + // per Apple's documentation: + // https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application?language=objc). return false } return true } public func applicationDidBecomeActive(_ application: UIApplication) { - if let shortcutType = shortcutService.launchingShortcutType { + if let shortcutType = launchingShortcutType { handleShortcut(shortcutType) - shortcutService.launchingShortcutType = nil + launchingShortcutType = nil } } diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec index c0af00ed105e..d8090caa8ef6 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec @@ -14,7 +14,12 @@ Downloaded by pub (not CocoaPods). s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } s.source = { :http => 'https://github.com/flutter/plugins/tree/main/packages/quick_actions' } s.documentation_url = 'https://pub.dev/packages/quick_actions' - s.source_files = 'Classes/**/*.{h,m}' + s.swift_version = '5.0' + s.source_files = 'Classes/**/*.{h,m,swift}' + s.xcconfig = { + 'LIBRARY_SEARCH_PATHS' => '$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)/ $(SDKROOT)/usr/lib/swift', + 'LD_RUNPATH_SEARCH_PATHS' => '/usr/lib/swift', + } s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' s.platform = :ios, '9.0' diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index 2067fb0fc1f0..6eca8e89db40 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -13,7 +13,7 @@ flutter: implements: quick_actions platforms: ios: - pluginClass: FLTQuickActionsPlugin + pluginClass: QuickActionsPlugin dartPluginClass: QuickActionsIos dependencies: From 6d63647191e3af12bdbd757425e8fe9b5627577b Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 6 Sep 2022 16:56:16 -0700 Subject: [PATCH 04/10] fix unit test class name and add back umbrella header since we don't support custom modumemaps anymore --- .../RunnerTests/FLTQuickActionsPluginTests.m | 40 +++++++++---------- .../ios/Classes/QuickActionsPlugin.swift | 4 +- .../ios/Classes/quick_actions_ios-umbrella.h | 11 +++++ 3 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m index 82a664a65b4b..fdff95b4b255 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m @@ -25,9 +25,7 @@ - (void)testHandleMethodCall_setShortcutItems { FLTShortcutStateManager *mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) shortcutStateManager:mockShortcutStateManager]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; [plugin handleMethodCall:call @@ -44,8 +42,8 @@ - (void)testHandleMethodCall_clearShortcutItems { FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"clearShortcutItems" arguments:nil]; FLTShortcutStateManager *mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) shortcutStateManager:mockShortcutStateManager]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; @@ -62,8 +60,8 @@ - (void)testHandleMethodCall_getLaunchAction { FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getLaunchAction" arguments:nil]; - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; @@ -78,8 +76,8 @@ - (void)testHandleMethodCall_getLaunchAction { - (void)testHandleMethodCall_nonExistMethods { FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"nonExist" arguments:nil]; - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result must be called."]; @@ -96,8 +94,8 @@ - (void)testHandleMethodCall_nonExistMethods { - (void)testApplicationPerformActionForShortcutItem { id mockChannel = OCMClassMock([FlutterMethodChannel class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] @@ -117,8 +115,8 @@ - (void)testApplicationPerformActionForShortcutItem { - (void)testApplicationDidFinishLaunchingWithOptions_launchWithShortcut { id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] @@ -137,8 +135,8 @@ - (void)testApplicationDidFinishLaunchingWithOptions_launchWithShortcut { } - (void)testApplicationDidFinishLaunchingWithOptions_launchWithoutShortcut { - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; BOOL launchResult = [plugin application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:@{}]; @@ -149,8 +147,8 @@ - (void)testApplicationDidFinishLaunchingWithOptions_launchWithoutShortcut { - (void)testApplicationDidBecomeActive_launchWithoutShortcut { id mockChannel = OCMClassMock([FlutterMethodChannel class]); id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel shortcutStateManager:mockShortcutStateManager]; [plugin application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:@{}]; @@ -161,8 +159,8 @@ - (void)testApplicationDidBecomeActive_launchWithoutShortcut { - (void)testApplicationDidBecomeActive_launchWithShortcut { id mockChannel = OCMClassMock([FlutterMethodChannel class]); id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] @@ -182,8 +180,8 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut { - (void)testApplicationDidBecomeActive_launchWithShortcut_becomeActiveTwice { id mockChannel = OCMClassMock([FlutterMethodChannel class]); id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift index 3eaa898737ca..aef9c077928c 100644 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -20,6 +20,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { /// The type of the shortcut item selected when launching the app. private var launchingShortcutType: String? = nil + // TODO: (hellohuanlin) remove `@objc` attribute after migrating tests to Swift. @objc public init( channel: FlutterMethodChannel, @@ -29,7 +30,6 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { self.shortcutStateManager = shortcutStateManager } - @objc public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "setShortcutItems": @@ -48,13 +48,11 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { } } - @objc public func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) -> Bool { handleShortcut(shortcutItem.type) return true } - @objc public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [AnyHashable : Any] = [:]) -> Bool { if let shortcutItem = launchOptions[UIApplication.LaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem { // Keep hold of the shortcut type and handle it in the diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h b/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h new file mode 100644 index 000000000000..a268222ff37a --- /dev/null +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h @@ -0,0 +1,11 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +FOUNDATION_EXPORT double quickActionsIOSVersionNumber; +FOUNDATION_EXPORT const unsigned char quickActionsIOSVersionString[]; + +#import + From 569eb63c488667b1ace218976304ed11b699e777 Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 6 Sep 2022 17:49:11 -0700 Subject: [PATCH 05/10] format --- .../RunnerTests/FLTQuickActionsPluginTests.m | 22 ++++++++++--------- .../ios/Classes/quick_actions_ios-umbrella.h | 1 - 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m index fdff95b4b255..fe87bc6bf2a4 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m @@ -25,7 +25,9 @@ - (void)testHandleMethodCall_setShortcutItems { FLTShortcutStateManager *mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + shortcutStateManager:mockShortcutStateManager]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; [plugin handleMethodCall:call @@ -44,7 +46,7 @@ - (void)testHandleMethodCall_clearShortcutItems { FLTShortcutStateManager *mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:mockShortcutStateManager]; + shortcutStateManager:mockShortcutStateManager]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; [plugin handleMethodCall:call @@ -62,7 +64,7 @@ - (void)testHandleMethodCall_getLaunchAction { QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; [plugin handleMethodCall:call @@ -78,7 +80,7 @@ - (void)testHandleMethodCall_nonExistMethods { QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result must be called."]; [plugin @@ -96,7 +98,7 @@ - (void)testApplicationPerformActionForShortcutItem { id mockChannel = OCMClassMock([FlutterMethodChannel class]); QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" @@ -117,7 +119,7 @@ - (void)testApplicationDidFinishLaunchingWithOptions_launchWithShortcut { id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:mockShortcutStateManager]; + shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" @@ -137,7 +139,7 @@ - (void)testApplicationDidFinishLaunchingWithOptions_launchWithShortcut { - (void)testApplicationDidFinishLaunchingWithOptions_launchWithoutShortcut { QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; BOOL launchResult = [plugin application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:@{}]; XCTAssertTrue(launchResult, @@ -149,7 +151,7 @@ - (void)testApplicationDidBecomeActive_launchWithoutShortcut { id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:mockShortcutStateManager]; + shortcutStateManager:mockShortcutStateManager]; [plugin application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:@{}]; [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; @@ -161,7 +163,7 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut { id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:mockShortcutStateManager]; + shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" @@ -182,7 +184,7 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut_becomeActiveTwice { id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); QuickActionsPlugin *plugin = [[QuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:mockShortcutStateManager]; + shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h b/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h index a268222ff37a..f20fbfb0435b 100644 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h @@ -8,4 +8,3 @@ FOUNDATION_EXPORT double quickActionsIOSVersionNumber; FOUNDATION_EXPORT const unsigned char quickActionsIOSVersionString[]; #import - From a548386bba9e53cd6797721540293e853b5c9d7e Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 6 Sep 2022 18:13:29 -0700 Subject: [PATCH 06/10] nit --- packages/quick_actions/quick_actions_ios/CHANGELOG.md | 2 +- .../quick_actions_ios/ios/Classes/QuickActionsPlugin.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index 3ae30ed0be9b..1182bd2d3282 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,7 +1,7 @@ ## 1.0.0+1 * Removes custom modulemap file with "Test" submodule and private headers for Swift migration. -* Migrated `FLTQuickActionsPlugin` class to Swift. +* Migrates `FLTQuickActionsPlugin` class to Swift. ## 1.0.0 diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift index aef9c077928c..84c9eb78dbe0 100644 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -20,7 +20,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { /// The type of the shortcut item selected when launching the app. private var launchingShortcutType: String? = nil - // TODO: (hellohuanlin) remove `@objc` attribute after migrating tests to Swift. + // TODO: (hellohuanlin) remove `@objc` attribute and make it non-public after migrating tests to Swift. @objc public init( channel: FlutterMethodChannel, From f5b80bc8cdc5b7cb5c2c9ba11b247f243f06f1f1 Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 6 Sep 2022 18:32:33 -0700 Subject: [PATCH 07/10] swift format --- .../ios/Classes/QuickActionsPlugin.swift | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift index 84c9eb78dbe0..a87de13a0608 100644 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -24,8 +24,8 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { @objc public init( channel: FlutterMethodChannel, - shortcutStateManager: FLTShortcutStateManager = FLTShortcutStateManager()) - { + shortcutStateManager: FLTShortcutStateManager = FLTShortcutStateManager() + ) { self.channel = channel self.shortcutStateManager = shortcutStateManager } @@ -33,9 +33,8 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "setShortcutItems": - guard let items = call.arguments as? [[String:Any]] else { - preconditionFailure("The argument must be a list of dictionaries") - } + // `arguments` must be a list of dictionaries + let items = call.arguments as! [[String: Any]] shortcutStateManager.setShortcutItems(items) result(nil) case "clearShortcutItems": @@ -48,13 +47,21 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { } } - public func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) -> Bool { + public func application( + _ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, + completionHandler: @escaping (Bool) -> Void + ) -> Bool { handleShortcut(shortcutItem.type) return true } - public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [AnyHashable : Any] = [:]) -> Bool { - if let shortcutItem = launchOptions[UIApplication.LaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem { + public func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [AnyHashable: Any] = [:] + ) -> Bool { + if let shortcutItem = launchOptions[UIApplication.LaunchOptionsKey.shortcutItem] + as? UIApplicationShortcutItem + { // Keep hold of the shortcut type and handle it in the // `applicationDidBecomeActure:` method once the Dart MethodChannel // is initialized. @@ -63,7 +70,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { // Return false to indicate we handled the quick action to ensure // the `application:performActionFor:` method is not called (as // per Apple's documentation: - // https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application?language=objc). + // https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application). return false } return true From e1e5835503451838073540981ad62f51fc10441e Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Tue, 6 Sep 2022 20:54:22 -0700 Subject: [PATCH 08/10] remove umbrella header since it's automatically generated --- .../ios/Classes/quick_actions_ios-umbrella.h | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h b/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h deleted file mode 100644 index f20fbfb0435b..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import - -FOUNDATION_EXPORT double quickActionsIOSVersionNumber; -FOUNDATION_EXPORT const unsigned char quickActionsIOSVersionString[]; - -#import From ef032a41074a628582adc57b064a866a2452c114 Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Wed, 7 Sep 2022 11:24:07 -0700 Subject: [PATCH 09/10] bump patch version fix unused variable warnings nit --- .../quick_actions_ios/CHANGELOG.md | 2 +- .../RunnerTests/FLTQuickActionsPluginTests.m | 19 ++++++++++++------- .../ios/Classes/QuickActionsPlugin.swift | 2 +- .../quick_actions_ios/pubspec.yaml | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index 1182bd2d3282..e002bd70ac09 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.0.0+1 +## 1.0.1 * Removes custom modulemap file with "Test" submodule and private headers for Swift migration. * Migrates `FLTQuickActionsPlugin` class to Swift. diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m index fe87bc6bf2a4..89651b573822 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m @@ -153,7 +153,10 @@ - (void)testApplicationDidBecomeActive_launchWithoutShortcut { [[QuickActionsPlugin alloc] initWithChannel:mockChannel shortcutStateManager:mockShortcutStateManager]; - [plugin application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:@{}]; + BOOL launchResult = [plugin application:[UIApplication sharedApplication] + didFinishLaunchingWithOptions:@{}]; + XCTAssertTrue(launchResult, + @"didFinishLaunchingWithOptions must return true if not launched from shortcut."); [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; OCMVerify(never(), [mockChannel invokeMethod:OCMOCK_ANY arguments:OCMOCK_ANY]); } @@ -172,9 +175,10 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut { icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"search_the_thing.png"] userInfo:nil]; - [plugin application:[UIApplication sharedApplication] - didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; - + BOOL launchResult = [plugin application:[UIApplication sharedApplication] + didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; + XCTAssertFalse(launchResult, + @"didFinishLaunchingWithOptions must return false if launched from shortcut."); [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; OCMVerify([mockChannel invokeMethod:@"launch" arguments:item.type]); } @@ -193,9 +197,10 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut_becomeActiveTwice { icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"search_the_thing.png"] userInfo:nil]; - [plugin application:[UIApplication sharedApplication] - didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; - + BOOL launchResult = [plugin application:[UIApplication sharedApplication] + didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; + XCTAssertFalse(launchResult, + @"didFinishLaunchingWithOptions must return false if launched from shortcut."); [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; // shortcut should only be handled once per launch. diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift index a87de13a0608..2828987f5707 100644 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -33,7 +33,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "setShortcutItems": - // `arguments` must be a list of dictionaries + // `arguments` must be an array of dictionaries let items = call.arguments as! [[String: Any]] shortcutStateManager.setShortcutItems(items) result(nil) diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index 6eca8e89db40..f01ae4aed9c3 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: quick_actions_ios description: An implementation for the iOS platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/plugins/tree/main/packages/quick_actions/quick_actions_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.0.0+1 +version: 1.0.1 environment: sdk: ">=2.15.0 <3.0.0" From 8cf61096b374ef14a2f933c403f6786213e68cc5 Mon Sep 17 00:00:00 2001 From: Huan Lin Date: Thu, 8 Sep 2022 11:57:49 -0700 Subject: [PATCH 10/10] fix typo --- .../quick_actions_ios/ios/Classes/QuickActionsPlugin.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift index 2828987f5707..26d6d20f8c02 100644 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -63,7 +63,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin { as? UIApplicationShortcutItem { // Keep hold of the shortcut type and handle it in the - // `applicationDidBecomeActure:` method once the Dart MethodChannel + // `applicationDidBecomeActive:` method once the Dart MethodChannel // is initialized. launchingShortcutType = shortcutItem.type