| Flutter macOS Embedder |

FlutterNSBundleUtils.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef FLUTTER_SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERNSBUNDLEUTILS_H_
6 #define FLUTTER_SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERNSBUNDLEUTILS_H_
7
8 #import <Foundation/Foundation.h>
9
10 NS_ASSUME_NONNULL_BEGIN
11
12 extern NSString* const kDefaultAssetPath;
13
14 // Finds a bundle with the named `flutterFrameworkBundleID` within `searchURL`.
15 //
16 // Returns `nil` if the bundle cannot be found or if errors are encountered.
17 NSBundle* FLTFrameworkBundleInternal(NSString* flutterFrameworkBundleID, NSURL* searchURL);
18
19 // Finds a bundle with the named `flutterFrameworkBundleID`.
20 //
21 // `+[NSBundle bundleWithIdentifier:]` is slow, and can take in the order of
22 // tens of milliseconds in a minimal flutter app, and closer to 100 milliseconds
23 // in a medium sized Flutter app on an iPhone 13. It is likely that the slowness
24 // comes from having to traverse and load all bundles known to the process.
25 // Using `+[NSBundle allframeworks]` and filtering also suffers from the same
26 // problem.
27 //
28 // This implementation is an optimization to first limit the search space to
29 // `+[NSBundle privateFrameworksURL]` of the main bundle, which is usually where
30 // frameworks used by this file are placed. If the desired bundle cannot be
31 // found here, the implementation falls back to
32 // `+[NSBundle bundleWithIdentifier:]`.
33 NSBundle* FLTFrameworkBundleWithIdentifier(NSString* flutterFrameworkBundleID);
34
35 // Finds the bundle of the application.
36 //
37 // Returns [NSBundle mainBundle] if the current running process is the application.
38 NSBundle* FLTGetApplicationBundle();
39
40 // Gets the flutter assets path directory from `bundle`.
41 //
42 // Returns `kDefaultAssetPath` if unable to find asset path from info.plist in `bundle`.
43 NSString* FLTAssetPath(NSBundle* bundle);
44
45 // Finds the Flutter asset directory from `bundle`.
46 //
47 // The raw path can be set by the application via info.plist's `FLTAssetsPath` key.
48 // If the key is not set, `flutter_assets` is used as the raw path value.
49 //
50 // If no valid asset is found under the raw path, returns nil.
51 NSString* FLTAssetsPathFromBundle(NSBundle* bundle);
52
53 NS_ASSUME_NONNULL_END
54
55 #endif // FLUTTER_SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERNSBUNDLEUTILS_H_
FLTFrameworkBundleInternal
NSBundle * FLTFrameworkBundleInternal(NSString *flutterFrameworkBundleID, NSURL *searchURL)
Definition: FlutterNSBundleUtils.mm:17
kDefaultAssetPath
NS_ASSUME_NONNULL_BEGIN NSString *const kDefaultAssetPath
Definition: FlutterNSBundleUtils.mm:13
NS_ASSUME_NONNULL_END
#define NS_ASSUME_NONNULL_END
Definition: FlutterMacros.h:20
NS_ASSUME_NONNULL_BEGIN
#define NS_ASSUME_NONNULL_BEGIN
Definition: FlutterMacros.h:19
FLTAssetPath
NSString * FLTAssetPath(NSBundle *bundle)
Definition: FlutterNSBundleUtils.mm:60
FLTGetApplicationBundle
NSBundle * FLTGetApplicationBundle()
Definition: FlutterNSBundleUtils.mm:35
FLTFrameworkBundleWithIdentifier
NSBundle * FLTFrameworkBundleWithIdentifier(NSString *flutterFrameworkBundleID)
Definition: FlutterNSBundleUtils.mm:46
FLTAssetsPathFromBundle
NSString * FLTAssetsPathFromBundle(NSBundle *bundle)
Definition: FlutterNSBundleUtils.mm:64