[macOS] Add lookupKeyForAsset to FlutterPluginRegistrar (flutter/engine#37421)
Fixes https://github.com/flutter/flutter/issues/47681 [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
This commit is contained in:
@@ -2464,11 +2464,14 @@ ORIGIN: ../../../flutter/shell/platform/darwin/common/command_line.mm + ../../..
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterDartProject.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterMacros.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterTexture.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterChannels.mm + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterChannelsTest.m + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.mm + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodecHelper.cc + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodecHelper.h + ../../../flutter/LICENSE
|
||||
@@ -2482,7 +2485,6 @@ ORIGIN: ../../../flutter/shell/platform/darwin/graphics/FlutterDarwinExternalTex
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/framework/Headers/Flutter.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterAppDelegate.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterCallbackCache.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterDartProject.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterEngineGroup.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterHeadlessDartRunner.h + ../../../flutter/LICENSE
|
||||
@@ -2618,7 +2620,6 @@ ORIGIN: ../../../flutter/shell/platform/darwin/ios/platform_view_ios.mm + ../../
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/rendering_api_selection.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/ios/rendering_api_selection.mm + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterAppDelegate.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterDartProject.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterMacOS.h + ../../../flutter/LICENSE
|
||||
ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterPlatformViews.h + ../../../flutter/LICENSE
|
||||
@@ -5069,11 +5070,14 @@ FILE: ../../../flutter/shell/platform/darwin/common/command_line.mm
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterDartProject.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterMacros.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Headers/FlutterTexture.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterChannels.mm
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterChannelsTest.m
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.mm
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodecHelper.cc
|
||||
FILE: ../../../flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodecHelper.h
|
||||
@@ -5087,7 +5091,6 @@ FILE: ../../../flutter/shell/platform/darwin/graphics/FlutterDarwinExternalTextu
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/Flutter.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterAppDelegate.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterCallbackCache.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterDartProject.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterEngineGroup.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/framework/Headers/FlutterHeadlessDartRunner.h
|
||||
@@ -5225,7 +5228,6 @@ FILE: ../../../flutter/shell/platform/darwin/ios/platform_view_ios.mm
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/rendering_api_selection.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/ios/rendering_api_selection.mm
|
||||
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterAppDelegate.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterDartProject.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterMacOS.h
|
||||
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Headers/FlutterPlatformViews.h
|
||||
|
||||
@@ -36,6 +36,8 @@ source_set("framework_shared") {
|
||||
sources = [
|
||||
"framework/Source/FlutterChannels.mm",
|
||||
"framework/Source/FlutterCodecs.mm",
|
||||
"framework/Source/FlutterNSBundleUtils.h",
|
||||
"framework/Source/FlutterNSBundleUtils.mm",
|
||||
"framework/Source/FlutterStandardCodec.mm",
|
||||
"framework/Source/FlutterStandardCodecHelper.cc",
|
||||
"framework/Source/FlutterStandardCodec_Internal.h",
|
||||
@@ -43,6 +45,8 @@ source_set("framework_shared") {
|
||||
|
||||
public = framework_shared_headers
|
||||
|
||||
public += [ "framework/Source/FlutterNSBundleUtils.h" ]
|
||||
|
||||
defines = [ "FLUTTER_FRAMEWORK" ]
|
||||
|
||||
public_configs = [
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#define FLUTTER_FLUTTERDARTPROJECT_H_
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <TargetConditionals.h>
|
||||
|
||||
#import "FlutterMacros.h"
|
||||
|
||||
@@ -13,25 +14,49 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* A set of Flutter and Dart assets used by a `FlutterEngine` to initialize execution.
|
||||
*
|
||||
*/
|
||||
FLUTTER_DARWIN_EXPORT
|
||||
@interface FlutterDartProject : NSObject
|
||||
|
||||
/**
|
||||
* Initializes a Flutter Dart project from a bundle.
|
||||
*
|
||||
* The bundle must either contain a flutter_assets resource directory, or set the Info.plist key
|
||||
* FLTAssetsPath to override that name (if you are doing a custom build using a different name).
|
||||
*
|
||||
* @param bundle The bundle containing the Flutter assets directory. If nil, the App framework
|
||||
* created by Flutter will be used.
|
||||
*/
|
||||
- (instancetype)initWithPrecompiledDartBundle:(nullable NSBundle*)bundle NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
/**
|
||||
* Unavailable - use `init` instead.
|
||||
*/
|
||||
- (instancetype)initFromDefaultSourceForConfiguration FLUTTER_UNAVAILABLE("Use -init instead.");
|
||||
- (instancetype)initFromDefaultSourceForConfiguration API_UNAVAILABLE(macos)
|
||||
FLUTTER_UNAVAILABLE("Use -init instead.");
|
||||
|
||||
/**
|
||||
* Returns the default identifier for the bundle where we expect to find the Flutter Dart
|
||||
* application.
|
||||
*/
|
||||
+ (NSString*)defaultBundleIdentifier;
|
||||
|
||||
/**
|
||||
* An NSArray of NSStrings to be passed as command line arguments to the Dart entrypoint.
|
||||
*
|
||||
* If this is not explicitly set, this will default to the contents of
|
||||
* [NSProcessInfo arguments], without the binary name.
|
||||
*
|
||||
* Set this to nil to pass no arguments to the Dart entrypoint.
|
||||
*/
|
||||
@property(nonatomic, nullable, copy)
|
||||
NSArray<NSString*>* dartEntrypointArguments API_UNAVAILABLE(ios);
|
||||
|
||||
/**
|
||||
* Returns the file name for the given asset. If the bundle with the identifier
|
||||
* "io.flutter.flutter.app" exists, it will try use that bundle; otherwise, it
|
||||
* will use the main bundle. To specify a different bundle, use
|
||||
* `-lookupKeyForAsset:asset:fromBundle`.
|
||||
* `+lookupKeyForAsset:fromBundle`.
|
||||
*
|
||||
* @param asset The name of the asset. The name can be hierarchical.
|
||||
* @return the file name to be used for lookup in the main bundle.
|
||||
@@ -71,12 +96,6 @@ FLUTTER_DARWIN_EXPORT
|
||||
fromPackage:(NSString*)package
|
||||
fromBundle:(nullable NSBundle*)bundle;
|
||||
|
||||
/**
|
||||
* Returns the default identifier for the bundle where we expect to find the Flutter Dart
|
||||
* application.
|
||||
*/
|
||||
+ (NSString*)defaultBundleIdentifier;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,35 @@
|
||||
// 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.
|
||||
|
||||
#ifndef SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERNSBUNDLEUTILS_H_
|
||||
#define SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERNSBUNDLEUTILS_H_
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
// Finds a bundle with the named `bundleID` within `searchURL`.
|
||||
//
|
||||
// Returns `nil` if the bundle cannot be found or if errors are encountered.
|
||||
NSBundle* FLTFrameworkBundleInternal(NSString* bundleID, NSURL* searchURL);
|
||||
|
||||
// Finds a bundle with the named `bundleID`.
|
||||
//
|
||||
// `+[NSBundle bundleWithIdentifier:]` is slow, and can take in the order of
|
||||
// tens of milliseconds in a minimal flutter app, and closer to 100 milliseconds
|
||||
// in a medium sized Flutter app on an iPhone 13. It is likely that the slowness
|
||||
// comes from having to traverse and load all bundles known to the process.
|
||||
// Using `+[NSBundle allframeworks]` and filtering also suffers from the same
|
||||
// problem.
|
||||
//
|
||||
// This implementation is an optimization to first limit the search space to
|
||||
// `+[NSBundle privateFrameworksURL]` of the main bundle, which is usually where
|
||||
// frameworks used by this file are placed. If the desired bundle cannot be
|
||||
// found here, the implementation falls back to
|
||||
// `+[NSBundle bundleWithIdentifier:]`.
|
||||
NSBundle* FLTFrameworkBundleWithIdentifier(NSString* bundleID);
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
#endif // SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERNSBUNDLEUTILS_H_
|
||||
@@ -0,0 +1,32 @@
|
||||
// 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.
|
||||
|
||||
#include <Foundation/Foundation.h>
|
||||
|
||||
NSBundle* FLTFrameworkBundleInternal(NSString* bundleID, NSURL* searchURL) {
|
||||
NSDirectoryEnumerator<NSURL*>* frameworkEnumerator = [NSFileManager.defaultManager
|
||||
enumeratorAtURL:searchURL
|
||||
includingPropertiesForKeys:nil
|
||||
options:NSDirectoryEnumerationSkipsSubdirectoryDescendants |
|
||||
NSDirectoryEnumerationSkipsHiddenFiles
|
||||
// Skip directories where errors are encountered.
|
||||
errorHandler:nil];
|
||||
|
||||
for (NSURL* candidate in frameworkEnumerator) {
|
||||
NSBundle* bundle = [NSBundle bundleWithURL:candidate];
|
||||
if ([bundle.bundleIdentifier isEqualToString:bundleID]) {
|
||||
return bundle;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSBundle* FLTFrameworkBundleWithIdentifier(NSString* bundleID) {
|
||||
NSBundle* bundle = FLTFrameworkBundleInternal(bundleID, NSBundle.mainBundle.privateFrameworksURL);
|
||||
if (bundle != nil) {
|
||||
return bundle;
|
||||
}
|
||||
// Fallback to slow implementation.
|
||||
return [NSBundle bundleWithIdentifier:bundleID];
|
||||
}
|
||||
@@ -9,5 +9,6 @@ framework_shared_headers =
|
||||
"framework/Headers/FlutterChannels.h",
|
||||
"framework/Headers/FlutterCodecs.h",
|
||||
"framework/Headers/FlutterTexture.h",
|
||||
"framework/Headers/FlutterDartProject.h",
|
||||
],
|
||||
"abspath")
|
||||
|
||||
@@ -27,7 +27,6 @@ _flutter_framework_headers = [
|
||||
"framework/Headers/Flutter.h",
|
||||
"framework/Headers/FlutterAppDelegate.h",
|
||||
"framework/Headers/FlutterCallbackCache.h",
|
||||
"framework/Headers/FlutterDartProject.h",
|
||||
"framework/Headers/FlutterEngine.h",
|
||||
"framework/Headers/FlutterEngineGroup.h",
|
||||
"framework/Headers/FlutterHeadlessDartRunner.h",
|
||||
|
||||
@@ -32,50 +32,6 @@ extern const intptr_t kPlatformStrongDillSize;
|
||||
|
||||
static const char* kApplicationKernelSnapshotFileName = "kernel_blob.bin";
|
||||
|
||||
// Finds a bundle with the named `bundleID` within `searchURL`.
|
||||
//
|
||||
// Returns `nil` if the bundle cannot be found or if errors are encountered.
|
||||
NSBundle* FLTFrameworkBundleInternal(NSString* bundleID, NSURL* searchURL) {
|
||||
NSDirectoryEnumerator<NSURL*>* frameworkEnumerator = [NSFileManager.defaultManager
|
||||
enumeratorAtURL:searchURL
|
||||
includingPropertiesForKeys:nil
|
||||
options:NSDirectoryEnumerationSkipsSubdirectoryDescendants |
|
||||
NSDirectoryEnumerationSkipsHiddenFiles
|
||||
// Skip directories where errors are encountered.
|
||||
errorHandler:nil];
|
||||
|
||||
for (NSURL* candidate in frameworkEnumerator) {
|
||||
NSBundle* bundle = [NSBundle bundleWithURL:candidate];
|
||||
if ([bundle.bundleIdentifier isEqualToString:bundleID]) {
|
||||
return bundle;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
// Finds a bundle with the named `bundleID`.
|
||||
//
|
||||
// `+[NSBundle bundleWithIdentifier:]` is slow, and can take in the order of
|
||||
// tens of milliseconds in a minimal flutter app, and closer to 100 milliseconds
|
||||
// in a medium sized Flutter app on an iPhone 13. It is likely that the slowness
|
||||
// comes from having to traverse and load all bundles known to the process.
|
||||
// Using `+[NSBundle allframeworks]` and filtering also suffers from the same
|
||||
// problem.
|
||||
//
|
||||
// This implementation is an optimization to first limit the search space to
|
||||
// `+[NSBundle privateFrameworksURL]` of the main bundle, which is usually where
|
||||
// frameworks used by this file are placed. If the desired bundle cannot be
|
||||
// found here, the implementation falls back to
|
||||
// `+[NSBundle bundleWithIdentifier:]`.
|
||||
NS_INLINE NSBundle* FLTFrameworkBundleWithIdentifier(NSString* bundleID) {
|
||||
NSBundle* bundle = FLTFrameworkBundleInternal(bundleID, NSBundle.mainBundle.privateFrameworksURL);
|
||||
if (bundle != nil) {
|
||||
return bundle;
|
||||
}
|
||||
// Fallback to slow implementation.
|
||||
return [NSBundle bundleWithIdentifier:bundleID];
|
||||
}
|
||||
|
||||
flutter::Settings FLTDefaultSettingsForBundle(NSBundle* bundle, NSProcessInfo* processInfoOrNil) {
|
||||
auto command_line = flutter::CommandLineFromNSProcessInfo(processInfoOrNil);
|
||||
|
||||
@@ -286,6 +242,11 @@ flutter::Settings FLTDefaultSettingsForBundle(NSBundle* bundle, NSProcessInfo* p
|
||||
flutter::Settings _settings;
|
||||
}
|
||||
|
||||
// This property is marked unavailable on iOS in the common header.
|
||||
// That doesn't seem to be enough to prevent this property from being synthesized.
|
||||
// Mark dynamic to avoid warnings.
|
||||
@dynamic dartEntrypointArguments;
|
||||
|
||||
#pragma mark - Override base class designated initializers
|
||||
|
||||
- (instancetype)init {
|
||||
|
||||
@@ -8,12 +8,11 @@
|
||||
#include "flutter/common/settings.h"
|
||||
#include "flutter/runtime/platform_data.h"
|
||||
#include "flutter/shell/common/engine.h"
|
||||
#import "flutter/shell/platform/darwin/ios/framework/Headers/FlutterDartProject.h"
|
||||
#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterDartProject.h"
|
||||
#import "flutter/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSBundle* FLTFrameworkBundleInternal(NSString* bundleID, NSURL* searchURL);
|
||||
|
||||
flutter::Settings FLTDefaultSettingsForBundle(NSBundle* _Nullable bundle = nil,
|
||||
NSProcessInfo* _Nullable processInfoOrNil = nil);
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@ _framework_binary_subpath = "Versions/A/$_flutter_framework_name"
|
||||
# the Flutter engine source root.
|
||||
_flutter_framework_headers = [
|
||||
"framework/Headers/FlutterAppDelegate.h",
|
||||
"framework/Headers/FlutterDartProject.h",
|
||||
"framework/Headers/FlutterEngine.h",
|
||||
"framework/Headers/FlutterMacOS.h",
|
||||
"framework/Headers/FlutterPlatformViews.h",
|
||||
|
||||
@@ -1,44 +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.
|
||||
|
||||
#ifndef FLUTTER_FLUTTERDARTPROJECT_H_
|
||||
#define FLUTTER_FLUTTERDARTPROJECT_H_
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "FlutterMacros.h"
|
||||
|
||||
/**
|
||||
* A set of Flutter and Dart assets used by a `FlutterEngine` to initialize execution.
|
||||
*
|
||||
* TODO(stuartmorgan): Align API with FlutterDartProject, and combine.
|
||||
*/
|
||||
FLUTTER_DARWIN_EXPORT
|
||||
@interface FlutterDartProject : NSObject
|
||||
|
||||
/**
|
||||
* Initializes a Flutter Dart project from a bundle.
|
||||
*
|
||||
* The bundle must either contain a flutter_assets resource directory, or set the Info.plist key
|
||||
* FLTAssetsPath to override that name (if you are doing a custom build using a different name).
|
||||
*
|
||||
* @param bundle The bundle containing the Flutter assets directory. If nil, the App framework
|
||||
* created by Flutter will be used.
|
||||
*/
|
||||
- (nonnull instancetype)initWithPrecompiledDartBundle:(nullable NSBundle*)bundle
|
||||
NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
/**
|
||||
* An NSArray of NSStrings to be passed as command line arguments to the Dart entrypoint.
|
||||
*
|
||||
* If this is not explicitly set, this will default to the contents of
|
||||
* [NSProcessInfo arguments], without the binary name.
|
||||
*
|
||||
* Set this to nil to pass no arguments to the Dart entrypoint.
|
||||
*/
|
||||
@property(nonatomic, nullable, copy) NSArray<NSString*>* dartEntrypointArguments;
|
||||
|
||||
@end
|
||||
|
||||
#endif // FLUTTER_FLUTTERDARTPROJECT_H_
|
||||
@@ -67,6 +67,27 @@ FLUTTER_DARWIN_EXPORT
|
||||
- (void)registerViewFactory:(nonnull NSObject<FlutterPlatformViewFactory>*)factory
|
||||
withId:(nonnull NSString*)factoryId;
|
||||
|
||||
/**
|
||||
* Returns the file name for the given asset.
|
||||
* The returned file name can be used to access the asset in the application's main bundle.
|
||||
*
|
||||
* @param asset The name of the asset. The name can be hierarchical.
|
||||
* @return the file name to be used for lookup in the main bundle.
|
||||
*/
|
||||
- (nonnull NSString*)lookupKeyForAsset:(nonnull NSString*)asset;
|
||||
|
||||
/**
|
||||
* Returns the file name for the given asset which originates from the specified package.
|
||||
* The returned file name can be used to access the asset in the application's main bundle.
|
||||
*
|
||||
*
|
||||
* @param asset The name of the asset. The name can be hierarchical.
|
||||
* @param package The name of the package from which the asset originates.
|
||||
* @return the file name to be used for lookup in the main bundle.
|
||||
*/
|
||||
- (nonnull NSString*)lookupKeyForAsset:(nonnull NSString*)asset
|
||||
fromPackage:(nonnull NSString*)package;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
|
||||
@@ -117,6 +117,29 @@ FLUTTER_DARWIN_EXPORT
|
||||
*/
|
||||
- (void)onPreEngineRestart;
|
||||
|
||||
/**
|
||||
* Returns the file name for the given asset.
|
||||
* The returned file name can be used to access the asset in the application's
|
||||
* main bundle.
|
||||
*
|
||||
* @param asset The name of the asset. The name can be hierarchical.
|
||||
* @return The file name to be used for lookup in the main bundle.
|
||||
*/
|
||||
- (nonnull NSString*)lookupKeyForAsset:(nonnull NSString*)asset;
|
||||
|
||||
/**
|
||||
* Returns the file name for the given asset which originates from the specified
|
||||
* package.
|
||||
* The returned file name can be used to access the asset in the application's
|
||||
* main bundle.
|
||||
*
|
||||
* @param asset The name of the asset. The name can be hierarchical.
|
||||
* @param package The name of the package from which the asset originates.
|
||||
* @return The file name to be used for lookup in the main bundle.
|
||||
*/
|
||||
- (nonnull NSString*)lookupKeyForAsset:(nonnull NSString*)asset
|
||||
fromPackage:(nonnull NSString*)package;
|
||||
|
||||
/**
|
||||
* The contentView (FlutterView)'s background color is set to black during
|
||||
* its instantiation.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterDartProject.h"
|
||||
#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterDartProject.h"
|
||||
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h"
|
||||
|
||||
#include <vector>
|
||||
@@ -12,6 +12,15 @@
|
||||
static NSString* const kICUBundlePath = @"icudtl.dat";
|
||||
static NSString* const kAppBundleIdentifier = @"io.flutter.flutter.app";
|
||||
|
||||
#pragma mark - Private interface declaration.
|
||||
@interface FlutterDartProject ()
|
||||
/**
|
||||
Get the Flutter assets name path by pass the bundle. If bundle is nil, we use the main bundle as
|
||||
default.
|
||||
*/
|
||||
+ (NSString*)flutterAssetsNameWithBundle:(NSBundle*)bundle;
|
||||
@end
|
||||
|
||||
@implementation FlutterDartProject {
|
||||
NSBundle* _dartBundle;
|
||||
NSString* _assetsPath;
|
||||
@@ -26,7 +35,7 @@ static NSString* const kAppBundleIdentifier = @"io.flutter.flutter.app";
|
||||
self = [super init];
|
||||
NSAssert(self, @"Super init cannot be nil");
|
||||
|
||||
_dartBundle = bundle ?: [NSBundle bundleWithIdentifier:kAppBundleIdentifier];
|
||||
_dartBundle = bundle ?: FLTFrameworkBundleWithIdentifier(kAppBundleIdentifier);
|
||||
if (_dartBundle == nil) {
|
||||
// The bundle isn't loaded and can't be found by bundle ID. Find it by path.
|
||||
_dartBundle = [NSBundle bundleWithURL:[NSBundle.mainBundle.privateFrameworksURL
|
||||
@@ -81,4 +90,42 @@ static NSString* const kAppBundleIdentifier = @"io.flutter.flutter.app";
|
||||
return path;
|
||||
}
|
||||
|
||||
+ (NSString*)flutterAssetsNameWithBundle:(NSBundle*)bundle {
|
||||
if (bundle == nil) {
|
||||
bundle = FLTFrameworkBundleWithIdentifier(kAppBundleIdentifier);
|
||||
}
|
||||
if (bundle == nil) {
|
||||
bundle = [NSBundle mainBundle];
|
||||
}
|
||||
NSString* flutterAssetsName = [bundle objectForInfoDictionaryKey:@"FLTAssetsPath"];
|
||||
if (flutterAssetsName == nil) {
|
||||
flutterAssetsName = @"Contents/Frameworks/App.framework/Resources/flutter_assets";
|
||||
}
|
||||
return flutterAssetsName;
|
||||
}
|
||||
|
||||
+ (NSString*)lookupKeyForAsset:(NSString*)asset {
|
||||
return [self lookupKeyForAsset:asset fromBundle:nil];
|
||||
}
|
||||
|
||||
+ (NSString*)lookupKeyForAsset:(NSString*)asset fromBundle:(nullable NSBundle*)bundle {
|
||||
NSString* flutterAssetsName = [FlutterDartProject flutterAssetsNameWithBundle:bundle];
|
||||
return [NSString stringWithFormat:@"%@/%@", flutterAssetsName, asset];
|
||||
}
|
||||
|
||||
+ (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package {
|
||||
return [self lookupKeyForAsset:asset fromPackage:package fromBundle:nil];
|
||||
}
|
||||
|
||||
+ (NSString*)lookupKeyForAsset:(NSString*)asset
|
||||
fromPackage:(NSString*)package
|
||||
fromBundle:(nullable NSBundle*)bundle {
|
||||
return [self lookupKeyForAsset:[NSString stringWithFormat:@"packages/%@/%@", package, asset]
|
||||
fromBundle:bundle];
|
||||
}
|
||||
|
||||
+ (NSString*)defaultBundleIdentifier {
|
||||
return kAppBundleIdentifier;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
#ifndef SHELL_PLATFORM_DARWIN_MACOS_FRAMEWORK_SOURCE_FLUTTERDARTPROJECT_INTERNAL_H_
|
||||
#define SHELL_PLATFORM_DARWIN_MACOS_FRAMEWORK_SOURCE_FLUTTERDARTPROJECT_INTERNAL_H_
|
||||
|
||||
#import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterDartProject.h"
|
||||
#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterDartProject.h"
|
||||
#import "flutter/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -314,6 +314,14 @@ constexpr char kTextPlainFormat[] = "text/plain";
|
||||
[[_flutterEngine platformViewController] registerViewFactory:factory withId:factoryId];
|
||||
}
|
||||
|
||||
- (NSString*)lookupKeyForAsset:(NSString*)asset {
|
||||
return [FlutterDartProject lookupKeyForAsset:asset];
|
||||
}
|
||||
|
||||
- (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package {
|
||||
return [FlutterDartProject lookupKeyForAsset:asset fromPackage:package];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
// Callbacks provided to the engine. See the called methods for documentation.
|
||||
|
||||
@@ -866,6 +866,14 @@ static void CommonInit(FlutterViewController* controller, FlutterEngine* engine)
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString*)lookupKeyForAsset:(NSString*)asset {
|
||||
return [FlutterDartProject lookupKeyForAsset:asset];
|
||||
}
|
||||
|
||||
- (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package {
|
||||
return [FlutterDartProject lookupKeyForAsset:asset fromPackage:package];
|
||||
}
|
||||
|
||||
#pragma mark - FlutterViewReshapeListener
|
||||
|
||||
/**
|
||||
|
||||
@@ -67,6 +67,8 @@
|
||||
- (bool)testModifierKeysAreSynthesizedOnMouseMove;
|
||||
- (bool)testViewWillAppearCalledMultipleTimes;
|
||||
- (bool)testFlutterViewIsConfigured;
|
||||
- (bool)testLookupKeyAssets;
|
||||
- (bool)testLookupKeyAssetsWithPackage;
|
||||
|
||||
+ (void)respondFalseForSendEvent:(const FlutterKeyEvent&)event
|
||||
callback:(nullable FlutterKeyEventCallback)callback
|
||||
@@ -241,6 +243,14 @@ TEST(FlutterViewControllerTest, testFlutterViewIsConfigured) {
|
||||
ASSERT_TRUE([[FlutterViewControllerTestObjC alloc] testFlutterViewIsConfigured]);
|
||||
}
|
||||
|
||||
TEST(FlutterViewControllerTest, testLookupKeyAssets) {
|
||||
ASSERT_TRUE([[FlutterViewControllerTestObjC alloc] testLookupKeyAssets]);
|
||||
}
|
||||
|
||||
TEST(FlutterViewControllerTest, testLookupKeyAssetsWithPackage) {
|
||||
ASSERT_TRUE([[FlutterViewControllerTestObjC alloc] testLookupKeyAssetsWithPackage]);
|
||||
}
|
||||
|
||||
} // namespace flutter::testing
|
||||
|
||||
#pragma mark - FlutterViewControllerTestObjC
|
||||
@@ -876,6 +886,24 @@ TEST(FlutterViewControllerTest, testFlutterViewIsConfigured) {
|
||||
return true;
|
||||
}
|
||||
|
||||
- (bool)testLookupKeyAssets {
|
||||
FlutterViewController* viewController = [[FlutterViewController alloc] initWithProject:nil];
|
||||
NSString* key = [viewController lookupKeyForAsset:@"test.png"];
|
||||
EXPECT_TRUE(
|
||||
[key isEqualToString:@"Contents/Frameworks/App.framework/Resources/flutter_assets/test.png"]);
|
||||
return true;
|
||||
}
|
||||
|
||||
- (bool)testLookupKeyAssetsWithPackage {
|
||||
FlutterViewController* viewController = [[FlutterViewController alloc] initWithProject:nil];
|
||||
|
||||
NSString* packageKey = [viewController lookupKeyForAsset:@"test.png" fromPackage:@"test"];
|
||||
EXPECT_TRUE([packageKey
|
||||
isEqualToString:
|
||||
@"Contents/Frameworks/App.framework/Resources/flutter_assets/packages/test/test.png"]);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void SwizzledNoop(id self, SEL _cmd) {}
|
||||
|
||||
// Verify workaround an AppKit bug where mouseDown/mouseUp are not called on the view controller if
|
||||
@@ -918,6 +946,7 @@ static void SwizzledNoop(id self, SEL _cmd) {}
|
||||
// Restore the original NSResponder mouseDown/mouseUp implementations.
|
||||
method_setImplementation(mouseDown, origMouseDown);
|
||||
method_setImplementation(mouseUp, origMouseUp);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user