├── .gitignore ├── LICENSE ├── README.md ├── add_flutter_to_ios.md ├── assets ├── 20210706122057.jpg ├── 20210706122355.jpg ├── 20210706123759.jpg ├── 20210706145922.jpg ├── 20210708120329.png ├── 20210712172151.jpg ├── 20210723121210.jpg ├── ezgif-com-gif-make.webp ├── ezgif.com-gif-maker.webp ├── flutter_build_script.png └── flutter_page_container.png ├── depend_flutter_module_remotely.md ├── depend_flutter_remotely_upgrades.md ├── flutter_boost_dark_mode.md ├── flutter_boost_memory_leak.md ├── flutter_build └── Frameworks │ ├── Debug │ └── Flutter.podspec │ └── Profile │ └── Flutter.podspec ├── flutter_build_script.md ├── flutter_build_script.sh ├── flutter_module ├── .gitignore ├── .metadata ├── README.md ├── flutter_01.log ├── flutter_module.iml ├── flutter_module_android.iml ├── lib │ ├── app │ │ └── flutter_app.dart │ ├── main.dart │ ├── pages │ │ ├── app_root_page.dart │ │ └── search_page.dart │ ├── routes │ │ └── routes.dart │ ├── utils │ │ ├── color_util.dart │ │ ├── native_messenger.dart │ │ ├── observers_holder.dart │ │ └── theme_mode_dispatcher.dart │ └── views │ │ ├── navigation_bar.dart │ │ ├── search_field.dart │ │ └── search_navigation_bar.dart ├── pubspec.lock ├── pubspec.yaml └── test │ └── widget_test.dart ├── ios_module ├── Flutter.podspec ├── FlutterBoostPro.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ ├── FlutterBoostPro.xcscheme │ │ ├── FlutterBoostProRelease.xcscheme │ │ └── FlutterBoostProTest.xcscheme ├── FlutterBoostPro.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── FlutterBoostPro │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── AppIconDebug.appiconset │ │ │ └── Contents.json │ │ ├── AppIconTest.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── BasicNavigationController.h │ ├── BasicNavigationController.m │ ├── BasicViewController.h │ ├── BasicViewController.m │ ├── FlutterModule │ │ ├── FlutterModuleAgent.h │ │ ├── FlutterModuleAgent.m │ │ ├── FlutterModuleChannel.h │ │ ├── FlutterModuleChannel.m │ │ ├── FlutterModuleConstants.h │ │ ├── FlutterModuleHelper.h │ │ ├── FlutterModuleHelper.m │ │ ├── FlutterModuleNavigator.h │ │ ├── FlutterModuleNavigator.m │ │ ├── FlutterModuleViewController.h │ │ └── FlutterModuleViewController.m │ ├── Func.h │ ├── Info-Debug.plist │ ├── Info-Release.plist │ ├── Info-Test.plist │ ├── NSObject+Extension.h │ ├── NSObject+Extension.m │ ├── NativeViewController.h │ ├── NativeViewController.m │ ├── UIButton+Extension.h │ ├── UIButton+Extension.m │ ├── UIView+Extension.h │ ├── UIView+Extension.m │ ├── ViewController.h │ ├── ViewController.m │ └── main.m ├── Podfile ├── Podfile.lock └── Pods │ ├── AppleDevices │ ├── LICENSE │ ├── README.md │ └── src │ │ ├── AppleDevice.h │ │ └── AppleDevice.m │ ├── FDFullscreenPopGesture │ ├── FDFullscreenPopGesture │ │ ├── UINavigationController+FDFullscreenPopGesture.h │ │ └── UINavigationController+FDFullscreenPopGesture.m │ ├── LICENSE │ └── README.md │ ├── FlutterAppSDK │ └── README.md │ ├── FlutterPluginSDK │ └── README.md │ ├── JKRetractableGCDDelay │ ├── LICENSE │ ├── README.md │ └── src │ │ ├── NSObject+GCDDelayTask.h │ │ └── NSObject+GCDDelayTask.m │ ├── Local Podspecs │ ├── App.podspec.json │ ├── Flutter.podspec.json │ ├── FlutterAppSDK.podspec.json │ ├── FlutterPluginRegistrant.podspec.json │ ├── FlutterPluginSDK.podspec.json │ ├── PodSpecs.podspec.json │ ├── flutter_boost.podspec.json │ ├── flutter_module.podspec.json │ ├── package_info_plus.podspec.json │ └── sentry_flutter.podspec.json │ ├── Manifest.lock │ ├── Masonry │ ├── LICENSE │ ├── Masonry │ │ ├── MASCompositeConstraint.h │ │ ├── MASCompositeConstraint.m │ │ ├── MASConstraint+Private.h │ │ ├── MASConstraint.h │ │ ├── MASConstraint.m │ │ ├── MASConstraintMaker.h │ │ ├── MASConstraintMaker.m │ │ ├── MASLayoutConstraint.h │ │ ├── MASLayoutConstraint.m │ │ ├── MASUtilities.h │ │ ├── MASViewAttribute.h │ │ ├── MASViewAttribute.m │ │ ├── MASViewConstraint.h │ │ ├── MASViewConstraint.m │ │ ├── Masonry.h │ │ ├── NSArray+MASAdditions.h │ │ ├── NSArray+MASAdditions.m │ │ ├── NSArray+MASShorthandAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.m │ │ ├── View+MASAdditions.h │ │ ├── View+MASAdditions.m │ │ ├── View+MASShorthandAdditions.h │ │ ├── ViewController+MASAdditions.h │ │ └── ViewController+MASAdditions.m │ └── README.md │ ├── PodSpecs │ ├── Flutter.podspec │ ├── LICENSE │ ├── PodSpecs.podspec │ └── README.md │ ├── Pods.xcodeproj │ └── project.pbxproj │ └── Target Support Files │ ├── AppleDevices │ ├── AppleDevices-Info.plist │ ├── AppleDevices-dummy.m │ ├── AppleDevices-prefix.pch │ ├── AppleDevices-umbrella.h │ ├── AppleDevices.debug.xcconfig │ ├── AppleDevices.modulemap │ └── AppleDevices.release.xcconfig │ ├── FDFullscreenPopGesture │ ├── FDFullscreenPopGesture-Info.plist │ ├── FDFullscreenPopGesture-dummy.m │ ├── FDFullscreenPopGesture-prefix.pch │ ├── FDFullscreenPopGesture-umbrella.h │ ├── FDFullscreenPopGesture.debug.xcconfig │ ├── FDFullscreenPopGesture.modulemap │ └── FDFullscreenPopGesture.release.xcconfig │ ├── Flutter │ ├── Flutter-xcframeworks-input-files.xcfilelist │ ├── Flutter-xcframeworks-output-files.xcfilelist │ ├── Flutter-xcframeworks.sh │ ├── Flutter.debug.xcconfig │ └── Flutter.release.xcconfig │ ├── FlutterAppSDK │ ├── FlutterAppSDK-xcframeworks-input-files.xcfilelist │ ├── FlutterAppSDK-xcframeworks-output-files.xcfilelist │ ├── FlutterAppSDK-xcframeworks.sh │ ├── FlutterAppSDK.debug.xcconfig │ └── FlutterAppSDK.release.xcconfig │ ├── FlutterPluginSDK │ ├── FlutterPluginSDK-xcframeworks-input-files.xcfilelist │ ├── FlutterPluginSDK-xcframeworks-output-files.xcfilelist │ ├── FlutterPluginSDK-xcframeworks.sh │ ├── FlutterPluginSDK.debug.xcconfig │ └── FlutterPluginSDK.release.xcconfig │ ├── JKRetractableGCDDelay │ ├── JKRetractableGCDDelay-Info.plist │ ├── JKRetractableGCDDelay-dummy.m │ ├── JKRetractableGCDDelay-prefix.pch │ ├── JKRetractableGCDDelay-umbrella.h │ ├── JKRetractableGCDDelay.debug.xcconfig │ ├── JKRetractableGCDDelay.modulemap │ └── JKRetractableGCDDelay.release.xcconfig │ ├── Masonry │ ├── Masonry-Info.plist │ ├── Masonry-dummy.m │ ├── Masonry-prefix.pch │ ├── Masonry-umbrella.h │ ├── Masonry.debug.xcconfig │ ├── Masonry.modulemap │ └── Masonry.release.xcconfig │ └── Pods-FlutterBoostPro │ ├── Pods-FlutterBoostPro-Info.plist │ ├── Pods-FlutterBoostPro-acknowledgements.markdown │ ├── Pods-FlutterBoostPro-acknowledgements.plist │ ├── Pods-FlutterBoostPro-dummy.m │ ├── Pods-FlutterBoostPro-frameworks-Debug-input-files.xcfilelist │ ├── Pods-FlutterBoostPro-frameworks-Debug-output-files.xcfilelist │ ├── Pods-FlutterBoostPro-frameworks-Release-input-files.xcfilelist │ ├── Pods-FlutterBoostPro-frameworks-Release-output-files.xcfilelist │ ├── Pods-FlutterBoostPro-frameworks-Test-input-files.xcfilelist │ ├── Pods-FlutterBoostPro-frameworks-Test-output-files.xcfilelist │ ├── Pods-FlutterBoostPro-frameworks.sh │ ├── Pods-FlutterBoostPro-umbrella.h │ ├── Pods-FlutterBoostPro.debug.xcconfig │ ├── Pods-FlutterBoostPro.modulemap │ ├── Pods-FlutterBoostPro.release.xcconfig │ └── Pods-FlutterBoostPro.test.xcconfig ├── multiple_commands_produce_framework.md ├── podhelper.rb └── xcode_backend.sh /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Flutter编译产物 3 | ios_module/FlutterFrameworks/Debug/*.xcframework 4 | ios_module/FlutterFrameworks/Profile/*.xcframework 5 | ios_module/FlutterFrameworks/Release/*.xcframework 6 | 7 | 8 | 9 | 10 | flutter_build/Frameworks/Debug/*.xcframework 11 | flutter_build/Frameworks/Profile/*.xcframework 12 | flutter_build/Frameworks/Release/*.xcframework 13 | 14 | 15 | ios_module/Pods/Flutter/*.xcframework 16 | ios_module/Pods/FlutterAppSDK/*.xcframework 17 | ios_module/Pods/FlutterModuleSDK/*.xcframework 18 | ios_module/Pods/FlutterPluginSDK/*.xcframework 19 | 20 | 21 | flutter_module/.ios/Flutter/ 22 | flutter_module/.android/Flutter/ 23 | flutter_module/build/ios 24 | flutter_module/build/*.dill 25 | 26 | 27 | 28 | 29 | # Xcode 30 | # 31 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 32 | 33 | ## User settings 34 | xcuserdata/ 35 | 36 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 37 | *.xcscmblueprint 38 | *.xccheckout 39 | 40 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 41 | build/ 42 | DerivedData/ 43 | *.moved-aside 44 | *.pbxuser 45 | !default.pbxuser 46 | *.mode1v3 47 | !default.mode1v3 48 | *.mode2v3 49 | !default.mode2v3 50 | *.perspectivev3 51 | !default.perspectivev3 52 | 53 | ## Obj-C/Swift specific 54 | *.hmap 55 | 56 | ## App packaging 57 | *.ipa 58 | *.dSYM.zip 59 | *.dSYM 60 | 61 | # CocoaPods 62 | # 63 | # We recommend against adding the Pods directory to your .gitignore. However 64 | # you should judge for yourself, the pros and cons are mentioned at: 65 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 66 | # 67 | # Pods/ 68 | # 69 | # Add this line if you want to avoid checking in source code from the Xcode workspace 70 | # *.xcworkspace 71 | 72 | # Carthage 73 | # 74 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 75 | # Carthage/Checkouts 76 | 77 | Carthage/Build/ 78 | 79 | # fastlane 80 | # 81 | # It is recommended to not store the screenshots in the git repo. 82 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 83 | # For more information about the recommended setup visit: 84 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 85 | 86 | fastlane/report.xml 87 | fastlane/Preview.html 88 | fastlane/screenshots/**/*.png 89 | fastlane/test_output 90 | 91 | # Code Injection 92 | # 93 | # After new code Injection tools there's a generated folder /iOSInjectionProject 94 | # https://github.com/johnno1962/injectionforxcode 95 | 96 | iOSInjectionProject/ 97 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 溪枫狼 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/20210706122057.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/20210706122057.jpg -------------------------------------------------------------------------------- /assets/20210706122355.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/20210706122355.jpg -------------------------------------------------------------------------------- /assets/20210706123759.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/20210706123759.jpg -------------------------------------------------------------------------------- /assets/20210706145922.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/20210706145922.jpg -------------------------------------------------------------------------------- /assets/20210708120329.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/20210708120329.png -------------------------------------------------------------------------------- /assets/20210712172151.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/20210712172151.jpg -------------------------------------------------------------------------------- /assets/20210723121210.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/20210723121210.jpg -------------------------------------------------------------------------------- /assets/ezgif-com-gif-make.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/ezgif-com-gif-make.webp -------------------------------------------------------------------------------- /assets/ezgif.com-gif-maker.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/ezgif.com-gif-maker.webp -------------------------------------------------------------------------------- /assets/flutter_build_script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/flutter_build_script.png -------------------------------------------------------------------------------- /assets/flutter_page_container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiFengLang/flutter_notes/2411bcc43ac56811ed0f648f528784079827ee40/assets/flutter_page_container.png -------------------------------------------------------------------------------- /flutter_boost_dark_mode.md: -------------------------------------------------------------------------------- 1 | 我们的项目使用`flutter_boost`来实现iOS & Flutter混合项目开发,目前也已经适配到`flutter_boost v3.0.0`。`FlutterBoost`在`3.0.0`新增一个Flutter控制器容器,但我们项目有统一的控制器基类,为了统一控制器页面的某些特性和接口功能, 我在`FlutterBoost`的容器上又封装了一层控制器容器,也就是这层封装导致我在开发过程遇到了深浅色适配和内存泄漏的问题。 2 | 3 | 4 | ```C 5 | FlutterModuleViewController.m 6 | 7 | self.flutterContainer.view.frame = self.view.bounds; 8 | [self.view insertSubview:self.flutterContainer.view atIndex:0]; 9 | [self addChildViewController:self.flutterContainer]; 10 | ``` 11 | 12 | Flutter控制器容器
13 | 14 | 15 | ------ 16 | 17 | 深浅色适配和`Push/Present`进入Flutter页面是我在项目开发中真实用到的场景,在Demo中我还原了这2个场景,给原生页面和Flutter页面都适配了深浅色,其中的搜索页`SearchPage`就是Flutter页面,而APP的主页就是原生页面(可以切换深浅色),另外进入`SearchPage`采用了`Push、Present` 2种转场方式,以对比效果。 18 | 19 | 20 | 下面的动图就是实现后的初始效果,仔细观察,就可以发现下面列出的前2个问题。 21 | 22 |

1.首次进入Flutter页面出现短暂空白

23 | 24 | 由于缺少缓存,安装APP后首次进入Flutter页面会出现短暂的空白,然后再渲染出Flutter的UI,之后重启APP基本不会出现这个问题。 25 | 26 |

2.在原生页面切换深浅色后进入Flutter页面会先渲染上一次的配色模式

27 | 28 | 在APP内的原生页面切换深浅色后进入Flutter页面,会先渲染上一次的深浅色样式,再切换当前的配色,先白后黑或者先黑后白; 29 | 30 | 31 | 问题图
32 | 33 | 对于这2个问题,我的解决思路是一样的,就是提前预加载一个Flutter页面,让Flutter提前完成渲染和缓存。 34 | 35 | * 首先是在初始化`FlutterBoost`后预加载一个Flutter页面,再立刻(延迟0.6秒)关掉这个页面。 36 | * 切换深浅色之后同样也预加载一个Flutter页面,然后又立刻关掉这个页面,完成Flutter侧的深浅色渲染。 37 | 38 | 具体的代码参考`[FlutterModuleAgent preloadFlutterModuleAfterDelay:]`和`@"root_page"`空白页的处理逻辑。需要注意的是为了不让用户体察到这个动作,需要用`addChildViewController:flutterVC`的方式把这个页面放在屏幕外面,即设置`flutterVC.view.frame`,而不是采用`push/present`带转场方式。`push/present`会有转场动效,即使无动效也可能干扰到正常的控制器栈,而`addChildViewController: flutterVC `和`addSubview:flutterVC.view`则简单粗暴的多,几乎不会影响到现有的控制器栈。 39 | 40 | 这是启用预加载之后的效果,无论是首次进入Flutter页面,还是切换深浅色后进入Flutter页面,~~都不会有闪白卡顿的现象~~,流畅了很多,只有第一次启动APP进入Flutter页面才会出现短暂的闪白,原因还未找到,不过影响不大。 41 | 42 | 优化后
-------------------------------------------------------------------------------- /flutter_boost_memory_leak.md: -------------------------------------------------------------------------------- 1 | 我们的项目使用`flutter_boost`来实现iOS & Flutter混合项目开发,目前也已经适配到`flutter_boost v3.0.0`。`FlutterBoost`在`3.0.0`新增一个Flutter控制器容器,但我们项目有统一的控制器基类,为了统一控制器页面的某些特性和接口功能, 我在`FlutterBoost`的容器上又封装了一层控制器容器,导致在开发过程遇到了深浅色适配和内存泄漏的问题。 2 | 3 |

自定义Flutter(Boost)容器后,Flutter页面退出后没有调用dispose,出现内存泄漏

4 | 5 | 效果图展示的搜索页`SearchPage`就是Flutter页面,而APP的主页就是原生页面(可以切换深浅色),另外进入`SearchPage`采用了`Push、Present` 2种转场方式,以对比效果。 6 | 7 | 效果图
8 | 9 | 在`search_page.dart`文件`_SearchPageState`中重写`dispose()`方法,监听页面内存释放。`search_page`是Push进入的,Pop页面后原生控制器被释放,但是Flutter侧页面并没有释放,没有打印页面已释放,检查2端代码后发现问题出在原生侧自定义的Flutter控制器容器上。 10 | 11 | ```C 12 | class _SearchPageState extends State { 13 | TextEditingController controller = TextEditingController(); 14 | FocusNode focusNode = FocusNode(); 15 | 16 | ... 17 | 18 | @override 19 | void dispose() { 20 | print('搜索页已释放'); 21 | 22 | focusNode.dispose(); 23 | controller.dispose(); 24 | super.dispose(); 25 | } 26 | 27 | ... 28 | } 29 | ``` 30 | 31 | 我使用的页面结构如下图所示,之所以这么做是为了统一控制器页面的某些特性和接口功能。选择在`FBFlutterViewContainer `基础上自定义一个Flutter控制器容器,最后所有的Flutter页面都由`FlutterModuleViewController`承载,而`FBFlutterViewContainer`则添加在容器`FlutterModuleViewController`上,但是2者不是继承关系,而是父子控制器的关系。 32 | 33 | ```C 34 | FlutterModuleViewController.m 35 | 36 | self.flutterContainer.view.frame = self.view.bounds; 37 | [self.view insertSubview:self.flutterContainer.view atIndex:0]; 38 | [self addChildViewController:self.flutterContainer]; 39 | ``` 40 | 41 | Flutter控制器容器
42 | 43 | 由于我漏掉了`[self.flutterContainer removeFromParentViewController]`,导致了`FBFlutterViewContainer`的`notifyWillDealloc`逻辑没有执行,Flutter侧没有移除掉对应的页面Widget,也就不会调用`dispose()`。于是重写了`didMoveToParentViewController:`方法,退出控制器时调用`[self.flutterContainer removeFromParentViewController]`,以触发`notifyWillDealloc`逻辑,完成Flutter侧的内存释放。 44 | 45 | ```C 46 | FlutterModuleViewController.m 47 | 48 | - (void)didMoveToParentViewController:(UIViewController *)parent { 49 | /// MARK: 下面这行代码在这儿会触发2次notifyWillDealloc,会导致FlutterBoost出现异常 50 | /// 比如 NoSuchMethodError: The getter 'topPage' was called on null. 51 | /// [self.flutterContainer didMoveToParentViewController:parent]; 52 | 53 | /// 下面只会触发一次notifyWillDealloc,正常 54 | if (parent == nil && self.flutterContainer.parentViewController) { 55 | [self.flutterContainer removeFromParentViewController]; 56 | } 57 | [super didMoveToParentViewController:parent]; 58 | } 59 | ``` 60 | 61 | 但是随后发现`Present`进入`search_page`时同样也会出现内存泄漏,Flutter页面没有被释放。调试发现 'dismissViewControllerAnimated:completion:' 并没有触发'didMoveToParentViewController:'方法,😓怪自己基础不扎实。于是又加了下面的代码,解决了嵌套`FBFlutterViewContainer`页面出现的内存泄漏问题。 62 | 63 | ```C 64 | - (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion { 65 | [super dismissViewControllerAnimated:flag completion:^{ 66 | /// MARK: 解决NavigationController嵌套CustomFlutterVC导致Flutter页面不释放的问题 67 | /// 原因是 'dismissViewControllerAnimated:completion:' 并不会触发 'didMoveToParentViewController:'方法 68 | /// FBFlutterViewContainer 有重写 'dismissViewControllerAnimated:completion:' 方法来移除Flutter页面 69 | /// 但如果FBFlutterVC又被嵌套在自定义的CustomFlutterVC里面,CustomFlutterVC就需要实现移除Flutter页面的逻辑,主动触发Flutter侧内存释放 70 | 71 | [self didMoveToParentViewController:nil]; 72 | }]; 73 | } 74 | `` -------------------------------------------------------------------------------- /flutter_build/Frameworks/Debug/Flutter.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Flutter' 3 | s.version = '2.0.300' # 2.0.3 4 | s.summary = 'Flutter Engine Framework' 5 | s.description = <<-DESC 6 | Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. 7 | This pod vends the iOS Flutter engine framework. It is compatible with application frameworks created with this version of the engine and tools. 8 | The pod version matches Flutter version major.minor.(patch * 100) + hotfix. 9 | DESC 10 | s.homepage = 'https://flutter.dev' 11 | s.license = { :type => 'MIT', :text => <<-LICENSE 12 | Copyright 2014 The Flutter Authors. All rights reserved. 13 | 14 | Redistribution and use in source and binary forms, with or without modification, 15 | are permitted provided that the following conditions are met: 16 | 17 | * Redistributions of source code must retain the above copyright 18 | notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above 20 | copyright notice, this list of conditions and the following 21 | disclaimer in the documentation and/or other materials provided 22 | with the distribution. 23 | * Neither the name of Google Inc. nor the names of its 24 | contributors may be used to endorse or promote products derived 25 | from this software without specific prior written permission. 26 | 27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 28 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 29 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 30 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 31 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 32 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 33 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 34 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 | 38 | LICENSE 39 | } 40 | s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } 41 | s.source = { :http => 'https://storage.flutter-io.cn/flutter_infra/flutter/3459eb24361807fb186953a864cf890fa8e9d26a/ios/artifacts.zip' } 42 | s.documentation_url = 'https://flutter.dev/docs' 43 | s.platform = :ios, '8.0' 44 | s.vendored_frameworks = 'Flutter.xcframework' 45 | end 46 | -------------------------------------------------------------------------------- /flutter_build/Frameworks/Profile/Flutter.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Flutter' 3 | s.version = '2.0.300' # 2.0.3 4 | s.summary = 'Flutter Engine Framework' 5 | s.description = <<-DESC 6 | Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. 7 | This pod vends the iOS Flutter engine framework. It is compatible with application frameworks created with this version of the engine and tools. 8 | The pod version matches Flutter version major.minor.(patch * 100) + hotfix. 9 | DESC 10 | s.homepage = 'https://flutter.dev' 11 | s.license = { :type => 'MIT', :text => <<-LICENSE 12 | Copyright 2014 The Flutter Authors. All rights reserved. 13 | 14 | Redistribution and use in source and binary forms, with or without modification, 15 | are permitted provided that the following conditions are met: 16 | 17 | * Redistributions of source code must retain the above copyright 18 | notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above 20 | copyright notice, this list of conditions and the following 21 | disclaimer in the documentation and/or other materials provided 22 | with the distribution. 23 | * Neither the name of Google Inc. nor the names of its 24 | contributors may be used to endorse or promote products derived 25 | from this software without specific prior written permission. 26 | 27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 28 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 29 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 30 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 31 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 32 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 33 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 34 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 | 38 | LICENSE 39 | } 40 | s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } 41 | s.source = { :http => 'https://storage.flutter-io.cn/flutter_infra/flutter/3459eb24361807fb186953a864cf890fa8e9d26a/ios-profile/artifacts.zip' } 42 | s.documentation_url = 'https://flutter.dev/docs' 43 | s.platform = :ios, '8.0' 44 | s.vendored_frameworks = 'Flutter.xcframework' 45 | end 46 | -------------------------------------------------------------------------------- /flutter_build_script.md: -------------------------------------------------------------------------------- 1 | # iOS远程依赖flutter module构建脚本 2 | 3 | 构建脚本是基于[远程依赖Flutter Module组件库编译产物 方案0x05](https://github.com/XiFengLang/flutter_notes/blob/main/depend_flutter_module_remotely.md#id-h3-05)实现的,但同样适用于[远程依赖Flutter Module组件库编译产物(升级版 )](https://github.com/XiFengLang/flutter_notes/blob/main/depend_flutter_remotely_upgrades.md)。 4 | 5 | 脚本内容详见[`flutter_build_script.sh 文件`](https://github.com/XiFengLang/flutter_notes/blob/main/flutter_build_script.sh),脚本的大致流程如图所示。 6 | 7 | ![](https://github.com/XiFengLang/flutter_notes/blob/main/assets/flutter_build_script.png) 8 | 9 | ## 实现功能 10 | 11 | - [x] 校验git是否有未提交的更新 12 | - [x] git commit, git tag ,git push等一系列git操作 13 | - [x] 校验.ios/Runner.xcworkspace 14 | - [x] 编译Flutter module,导出framework 15 | - [ ] 选择debug / profile / release 编译模式 16 | - [x] 版本号自增 或 手动输入 17 | - [x] 修改podspec版本号 18 | - [x] 钉钉通知 19 | - [x] 杂七杂八的结果校验 20 | - [x] xcframework黑名单,过滤掉重复依赖的framwork,用来解决问题[内嵌依赖的xcframework和pod依赖的第三方库重复冲突,新版Xcode编译失败](https://github.com/XiFengLang/flutter_notes/blob/main/multiple_commands_produce_framework.md) 21 | 22 | 23 | ## 使用 24 | 25 | 1.修改这几个本地仓库的路径 26 | 27 | ```C 28 | readonly workspace_root_path="$HOME/Desktop/workspace" 29 | readonly flutter_module_path="${workspace_root_path}/flutter_notes/flutter_module" 30 | readonly flutter_build_output_path="${workspace_root_path}/futter_build_tmp" 31 | readonly flutter_module_sdk_podspec_path="${workspace_root_path}/flutter_module_sdk_podspec" 32 | readonly flutter_app_sdk_path="${workspace_root_path}/flutter_app_sdk" 33 | readonly flutter_plugin_sdk_path="${workspace_root_path}/flutter_plugin_sdk" 34 | 35 | readonly app_sdk_podspec_path="$flutter_module_sdk_podspec_path/FlutterAppSDK.podspec" 36 | readonly plugin_sdk_podspec_path="$flutter_module_sdk_podspec_path/FlutterPluginSDK.podspec" 37 | ``` 38 | 39 | 2.修改黑名单,不需要黑名单就清空 40 | 41 | ```C 42 | blacklist=( 43 | "FMDB.xcframework" 44 | "MMKV.xcframework" 45 | "MMKVCore.xcframework" 46 | "Sentry.xcframework" 47 | ) 48 | ``` 49 | 50 | 3.执行脚本,按提示输入即可 51 | 52 | 53 | ## 参考 54 | 55 | > * [linux shell 实现自增版本号](https://github.com/zedxpp/PPPrivatePodPushScript/blob/master/README.md) 56 | > * [PPPrivatePodPushScript iOS私有库发布脚本](https://github.com/zedxpp/PPPrivatePodPushScript) 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /flutter_module/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | 4 | .packages 5 | .pub/ 6 | 7 | .idea/ 8 | .vagrant/ 9 | .sconsign.dblite 10 | .svn/ 11 | 12 | *.swp 13 | profile 14 | 15 | DerivedData/ 16 | 17 | .generated/ 18 | 19 | *.pbxuser 20 | *.mode1v3 21 | *.mode2v3 22 | *.perspectivev3 23 | 24 | !default.pbxuser 25 | !default.mode1v3 26 | !default.mode2v3 27 | !default.perspectivev3 28 | 29 | xcuserdata 30 | 31 | *.moved-aside 32 | 33 | *.pyc 34 | *sync/ 35 | Icon? 36 | .tags* 37 | 38 | build/ 39 | .android/ 40 | .ios/ 41 | .flutter-plugins 42 | .flutter-plugins-dependencies 43 | 44 | # Symbolication related 45 | app.*.symbols 46 | 47 | # Obfuscation related 48 | app.*.map.json 49 | -------------------------------------------------------------------------------- /flutter_module/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 02c026b03cd31dd3f867e5faeb7e104cce174c5f 8 | channel: stable 9 | 10 | project_type: module 11 | -------------------------------------------------------------------------------- /flutter_module/README.md: -------------------------------------------------------------------------------- 1 | # flutter_module 2 | 3 | A new flutter module project. 4 | 5 | ## Getting Started 6 | 7 | For help getting started with Flutter, view our online 8 | [documentation](https://flutter.dev/). 9 | 10 | For instructions integrating Flutter modules to your existing applications, 11 | see the [add-to-app documentation](https://flutter.dev/docs/development/add-to-app). 12 | -------------------------------------------------------------------------------- /flutter_module/flutter_module.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /flutter_module/flutter_module_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /flutter_module/lib/app/flutter_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | // ignore: import_of_legacy_library_into_null_safe 4 | import 'package:flutter_boost/flutter_boost.dart'; 5 | 6 | import '../routes/routes.dart'; 7 | 8 | class FlutterApp extends StatefulWidget { 9 | const FlutterApp({Key key}) : super(key: key); 10 | 11 | @override 12 | _FlutterAppState createState() => _FlutterAppState(); 13 | } 14 | 15 | class _FlutterAppState extends State { 16 | @override 17 | void initState() { 18 | /// init 19 | super.initState(); 20 | } 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return FlutterBoostApp( 25 | AppRouter.routeFactory, 26 | initialRoute: '/', 27 | appBuilder: (Widget home) { 28 | return MaterialApp( 29 | home: home, 30 | title: 'flutter_boost采坑', 31 | themeMode: ThemeMode.system, 32 | theme: ThemeData( 33 | brightness: Brightness.light, 34 | scaffoldBackgroundColor: Colors.yellow,//Color(0xFFFFFFFF), 35 | ), 36 | darkTheme: ThemeData( 37 | brightness: Brightness.dark, 38 | scaffoldBackgroundColor: Color(0xFF000000), 39 | ), 40 | ); 41 | }, 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /flutter_module/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:io'; 3 | 4 | import 'package:flutter/services.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | import 'app/flutter_app.dart'; 8 | import 'utils/native_messenger.dart'; 9 | 10 | void main() { 11 | runZonedGuarded(() { 12 | runApp(FlutterApp()); 13 | 14 | /// App.native通信员初始化 15 | NativeMessenger.shared(); 16 | 17 | configureSystemUIOverlayStyle(); 18 | }, (Object error, StackTrace stack) { 19 | /// 处理所有未处理的异常 20 | print("catch error in main() func. $error"); 21 | // reportErrorLog(makeErrorDetails(error, stack)); 22 | }, zoneSpecification: ZoneSpecification( 23 | print: (Zone self, ZoneDelegate parent, Zone zone, String line) { 24 | parent.print(zone, "JK Log: $line"); 25 | // collectLog(line); 26 | })); 27 | } 28 | 29 | /// 状态栏 30 | configureSystemUIOverlayStyle() { 31 | if (Platform.isAndroid) { 32 | /// 沉侵式状态栏 33 | SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( 34 | statusBarColor: Colors.transparent, 35 | // statusBarBrightness: Brightness.dark, 36 | )); 37 | } 38 | // else if (Platform.isIOS) { 39 | // SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark); 40 | // } 41 | 42 | /// 单页面沉侵式导航栏 AnnotatedRegion 43 | // AnnotatedRegion( 44 | // value: SystemUiOverlayStyle.dark, 45 | // child: Scaffold, 46 | // ); 47 | } 48 | -------------------------------------------------------------------------------- /flutter_module/lib/pages/app_root_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_module/utils/color_util.dart'; 3 | import '../views/navigation_bar.dart'; 4 | 5 | class AppRootPage extends StatelessWidget { 6 | const AppRootPage({Key key}) : super(key: key); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return Scaffold( 11 | body: Stack( 12 | children: [ 13 | ControllerView( 14 | child: Container( 15 | color: Colors.transparent, 16 | alignment: Alignment.center, 17 | child: Text( 18 | "flutter_boost", 19 | style: TextStyle( 20 | fontSize: 15, 21 | color: ColorUtil.dynamicColor( 22 | context: context, 23 | light: Colors.black45, 24 | dark: Colors.white, 25 | ), 26 | fontWeight: FontWeight.normal, 27 | ), 28 | ), 29 | ), 30 | ), 31 | NavigationBar( 32 | title: "", 33 | ), 34 | ], 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /flutter_module/lib/pages/search_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_boost/flutter_boost.dart'; 3 | import 'package:flutter_boost/messages.dart'; 4 | import 'package:flutter_boost/boost_navigator.dart'; 5 | 6 | import '../views/navigation_bar.dart'; 7 | import '../views/navigation_bar.dart'; 8 | import '../views/navigation_bar.dart'; 9 | import '../views/search_navigation_bar.dart'; 10 | import '../views/navigation_bar.dart'; 11 | import '../views/search_navigation_bar.dart'; 12 | 13 | class SearchPage extends StatefulWidget { 14 | const SearchPage({Key key}) : super(key: key); 15 | 16 | @override 17 | _SearchPageState createState() => _SearchPageState(); 18 | } 19 | 20 | class _SearchPageState extends State { 21 | TextEditingController controller = TextEditingController(); 22 | FocusNode focusNode = FocusNode(); 23 | 24 | @override 25 | void initState() { 26 | /// 延迟弹出键盘,不然会导致Flutter渲染异常抖动 27 | Future.delayed(Duration(milliseconds: 800), (){ 28 | if (mounted) { 29 | focusNode.requestFocus(); 30 | } 31 | }); 32 | super.initState(); 33 | } 34 | 35 | @override 36 | void dispose() { 37 | print('搜索页已释放'); 38 | 39 | focusNode.dispose(); 40 | controller.dispose(); 41 | super.dispose(); 42 | } 43 | 44 | @override 45 | Widget build(BuildContext context) { 46 | return Scaffold( 47 | backgroundColor: Colors.black, 48 | body: Stack( 49 | children: [ 50 | ControllerView( 51 | child: Container( 52 | color: Colors.transparent, 53 | child: GestureDetector( 54 | onTap: (){ 55 | CommonParams params = CommonParams()..pageName = "a"..arguments = {"a":"a", 56 | "b":"a"}..uniqueId = "asadadas"; 57 | NativeRouterApi().pushNativeRoute(params); 58 | BoostNavigator.instance.push("name"); 59 | }, 60 | child: SizedBox( 61 | width: 100, 62 | height: 40, 63 | child: Container( 64 | color: Colors.purple, 65 | ), 66 | ), 67 | ), 68 | ), 69 | ), 70 | SearchNavigationBar( 71 | focusNode: focusNode, 72 | controller: controller, 73 | placeholder: "输入你想搜索的东东或者西西", 74 | onSubmitted: (query) { 75 | print('搜索 :${query.trim()}'); 76 | }, 77 | onChanged: (text) { 78 | print('输入文字 :$text'); 79 | }, 80 | ), 81 | ], 82 | ), 83 | ); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /flutter_module/lib/routes/routes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | 5 | import 'package:flutter_boost/boost_navigator.dart'; 6 | 7 | import '../pages/app_root_page.dart'; 8 | import '../pages/search_page.dart'; 9 | 10 | class AppRouter { 11 | static Map routerMap = { 12 | '/': (settings, uniqueId) { 13 | return PageRouteBuilder( 14 | settings: settings, 15 | pageBuilder: (_, __, ___) => AppRootPage(), 16 | ); 17 | }, 18 | 19 | 'root_page': (settings, uniqueId) { 20 | return PageRouteBuilder( 21 | settings: settings, 22 | pageBuilder: (_, __, ___) => AppRootPage(), 23 | ); 24 | }, 25 | 26 | 27 | 'search_page': (settings, uniqueId) { 28 | return PageRouteBuilder( 29 | settings: settings, 30 | pageBuilder: (_, __, ___) => SearchPage(), 31 | ); 32 | }, 33 | 34 | }; 35 | 36 | static Route routeFactory(RouteSettings setting, String uniqueId) { 37 | FlutterBoostRouteFactory factory = routerMap[setting.name]; 38 | if (factory == null) { 39 | return null; 40 | } 41 | return factory(setting, uniqueId); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /flutter_module/lib/utils/color_util.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ColorUtil { 4 | /// 动态选择深浅色 5 | static Color dynamicColor({ 6 | @required BuildContext context, 7 | @required Color light, 8 | @required Color dark, 9 | }) { 10 | final brightness = Theme.of(context).brightness; 11 | return brightness == Brightness.dark ? dark : light; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /flutter_module/lib/utils/native_messenger.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | 3 | import 'package:flutter_boost/boost_navigator.dart'; 4 | // import 'theme_mode_dispatcher.dart'; 5 | 6 | class NativeMessenger { 7 | static final NativeMessenger _shared = NativeMessenger._init(); 8 | 9 | static NativeMessenger shared() => _shared; 10 | 11 | NativeMessenger._init() { 12 | _initMessageChannel(); 13 | } 14 | 15 | final _methodChannel = const MethodChannel('app_global_channel'); 16 | 17 | MethodChannel get channel => _methodChannel; 18 | 19 | /// 跟Native通信交互 20 | void _initMessageChannel() { 21 | _methodChannel.setMethodCallHandler((MethodCall call) { 22 | print( 23 | 'NativeMessenger收到native消息: method:${call.method} arguments:${call.arguments}'); 24 | 25 | if (call.method == 'set_theme_mode') { 26 | // final Brightness brightness = call.arguments['mode'] as String == 'dark' 27 | // ? Brightness.dark 28 | // : Brightness.light; 29 | // ThemeModeDispatcher.shared() 30 | // .handlePlatformBrightnessChanged(brightness); 31 | } else if (call.method == 'exit_current_page') { 32 | BoostNavigator.instance.pop(); 33 | } 34 | return Future.value(); 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /flutter_module/lib/utils/observers_holder.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | /// 仿写了FlutterBoost的ObserversHolder类,都是监听者容器 4 | class ObserversHolder { 5 | final Map> _observers = >{}; 6 | 7 | VoidCallback addObserver(T observer) { 8 | final Set set = _observers[T.toString()] as Set ?? {}; 9 | 10 | set.add(observer); 11 | _observers[T.toString()] = set; 12 | 13 | return () => set.remove(observer); 14 | } 15 | 16 | void removeObserver(T observer) => 17 | _observers[T.toString()]?.remove(observer); 18 | 19 | void cleanObservers() => _observers[T.toString()]?.clear(); 20 | 21 | Set observersOf() => _observers[T.toString()] as Set ?? {}; 22 | } -------------------------------------------------------------------------------- /flutter_module/lib/utils/theme_mode_dispatcher.dart: -------------------------------------------------------------------------------- 1 | // import 'dart:ui'; 2 | // import 'package:flutter/material.dart' show Brightness; 3 | // import 'observers_holder.dart'; 4 | // 5 | // typedef ThemeModeObserver = void Function(Brightness brightness); 6 | // 7 | // 8 | // class ThemeModeDispatcher { 9 | // static final ThemeModeDispatcher _shared = ThemeModeDispatcher._init(); 10 | // 11 | // ThemeModeDispatcher._init(); 12 | // 13 | // static ThemeModeDispatcher shared() => _shared; 14 | // 15 | // final ObserversHolder _observers = ObserversHolder(); 16 | // 17 | // 18 | // VoidCallback addObserver(ThemeModeObserver observer) => 19 | // _observers.addObserver(observer); 20 | // 21 | // void removeObserver(ThemeModeObserver observer) => 22 | // _observers.removeObserver(observer); 23 | // 24 | // void handlePlatformBrightnessChanged(Brightness brightness) { 25 | // for (final ThemeModeObserver observer 26 | // in _observers.observersOf()) { 27 | // observer(brightness); 28 | // } 29 | // } 30 | // } -------------------------------------------------------------------------------- /flutter_module/lib/views/search_navigation_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_boost/boost_navigator.dart'; 3 | 4 | import 'navigation_bar.dart'; 5 | import 'search_field.dart'; 6 | 7 | class SearchNavigationBar extends StatelessWidget { 8 | final FocusNode focusNode; 9 | final String placeholder; 10 | final TextEditingController controller; 11 | final Function(String query) onSubmitted; 12 | final Function(String text) onChanged; 13 | 14 | SearchNavigationBar({ 15 | Key key, 16 | this.focusNode, 17 | this.placeholder, 18 | this.controller, 19 | this.onSubmitted, 20 | this.onChanged, 21 | }) : super(key: key); 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return NavigationBarContainer( 26 | child: Flex( 27 | direction: Axis.horizontal, 28 | children: [ 29 | Expanded( 30 | flex: 1, 31 | child: Padding( 32 | padding: EdgeInsets.only(left: 15), 33 | child: SearchField( 34 | focusNode: focusNode, 35 | placeholder: placeholder, 36 | controller: controller, 37 | onChanged: onChanged, 38 | onSubmitted: onSubmitted, 39 | ), 40 | ), 41 | ), 42 | Expanded( 43 | flex: 0, 44 | child: GestureDetector( 45 | onTap: () { 46 | focusNode.unfocus(); 47 | BoostNavigator.instance.pop(); 48 | }, 49 | child: Container( 50 | padding: EdgeInsets.symmetric(horizontal: 15), 51 | color: Colors.transparent, 52 | height: 30, 53 | alignment: Alignment.center, 54 | child: Text( 55 | '取消', 56 | style: TextStyle( 57 | fontSize: 15, 58 | color: Colors.blue, 59 | ), 60 | ), 61 | ), 62 | ), 63 | ), 64 | ], 65 | ), 66 | ); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /flutter_module/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | url: "http://localhost:8086" 9 | source: hosted 10 | version: "2.5.0" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "http://localhost:8086" 16 | source: hosted 17 | version: "2.1.0" 18 | characters: 19 | dependency: transitive 20 | description: 21 | name: characters 22 | url: "http://localhost:8086" 23 | source: hosted 24 | version: "1.1.0" 25 | charcode: 26 | dependency: transitive 27 | description: 28 | name: charcode 29 | url: "http://localhost:8086" 30 | source: hosted 31 | version: "1.2.0" 32 | clock: 33 | dependency: transitive 34 | description: 35 | name: clock 36 | url: "http://localhost:8086" 37 | source: hosted 38 | version: "1.1.0" 39 | collection: 40 | dependency: transitive 41 | description: 42 | name: collection 43 | url: "http://localhost:8086" 44 | source: hosted 45 | version: "1.15.0" 46 | cupertino_icons: 47 | dependency: "direct main" 48 | description: 49 | name: cupertino_icons 50 | url: "http://localhost:8086" 51 | source: hosted 52 | version: "1.0.3" 53 | fake_async: 54 | dependency: transitive 55 | description: 56 | name: fake_async 57 | url: "http://localhost:8086" 58 | source: hosted 59 | version: "1.2.0" 60 | flutter: 61 | dependency: "direct main" 62 | description: flutter 63 | source: sdk 64 | version: "0.0.0" 65 | flutter_boost: 66 | dependency: "direct main" 67 | description: 68 | path: "." 69 | ref: "v3.0-beta.11" 70 | resolved-ref: a3938eff699cfa9bd6e922ba736339db4f976314 71 | url: "https://github.com/alibaba/flutter_boost.git" 72 | source: git 73 | version: "3.0.0" 74 | flutter_test: 75 | dependency: "direct dev" 76 | description: flutter 77 | source: sdk 78 | version: "0.0.0" 79 | matcher: 80 | dependency: transitive 81 | description: 82 | name: matcher 83 | url: "http://localhost:8086" 84 | source: hosted 85 | version: "0.12.10" 86 | meta: 87 | dependency: transitive 88 | description: 89 | name: meta 90 | url: "http://localhost:8086" 91 | source: hosted 92 | version: "1.3.0" 93 | path: 94 | dependency: transitive 95 | description: 96 | name: path 97 | url: "http://localhost:8086" 98 | source: hosted 99 | version: "1.8.0" 100 | sky_engine: 101 | dependency: transitive 102 | description: flutter 103 | source: sdk 104 | version: "0.0.99" 105 | source_span: 106 | dependency: transitive 107 | description: 108 | name: source_span 109 | url: "http://localhost:8086" 110 | source: hosted 111 | version: "1.8.0" 112 | stack_trace: 113 | dependency: transitive 114 | description: 115 | name: stack_trace 116 | url: "http://localhost:8086" 117 | source: hosted 118 | version: "1.10.0" 119 | stream_channel: 120 | dependency: transitive 121 | description: 122 | name: stream_channel 123 | url: "http://localhost:8086" 124 | source: hosted 125 | version: "2.1.0" 126 | string_scanner: 127 | dependency: transitive 128 | description: 129 | name: string_scanner 130 | url: "http://localhost:8086" 131 | source: hosted 132 | version: "1.1.0" 133 | term_glyph: 134 | dependency: transitive 135 | description: 136 | name: term_glyph 137 | url: "http://localhost:8086" 138 | source: hosted 139 | version: "1.2.0" 140 | test_api: 141 | dependency: transitive 142 | description: 143 | name: test_api 144 | url: "http://localhost:8086" 145 | source: hosted 146 | version: "0.2.19" 147 | typed_data: 148 | dependency: transitive 149 | description: 150 | name: typed_data 151 | url: "http://localhost:8086" 152 | source: hosted 153 | version: "1.3.0" 154 | vector_math: 155 | dependency: transitive 156 | description: 157 | name: vector_math 158 | url: "http://localhost:8086" 159 | source: hosted 160 | version: "2.1.0" 161 | sdks: 162 | dart: ">=2.12.0 <3.0.0" 163 | -------------------------------------------------------------------------------- /flutter_module/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_module 2 | description: flutter_boost采坑 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # In Android, build-name is used as versionName while build-number used as versionCode. 10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 12 | # Read more about iOS versioning at 13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 14 | # 15 | # This version is used _only_ for the Runner app, which is used if you just do 16 | # a `flutter run` or a `flutter make-host-app-editable`. It has no impact 17 | # on any other native host app that you embed your Flutter project into. 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.7.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | 27 | flutter_boost: 28 | git: 29 | url: 'https://github.com/alibaba/flutter_boost.git' 30 | ref: 'v3.0-beta.11' 31 | 32 | 33 | # The following adds the Cupertino Icons font to your application. 34 | # Use with the CupertinoIcons class for iOS style icons. 35 | cupertino_icons: ^1.0.2 36 | 37 | dev_dependencies: 38 | flutter_test: 39 | sdk: flutter 40 | 41 | # For information on the generic Dart part of this file, see the 42 | # following page: https://dart.dev/tools/pub/pubspec 43 | 44 | flutter: 45 | # The following line ensures that the Material Icons font is 46 | # included with your application, so that you can use the icons in 47 | # the material Icons class. 48 | uses-material-design: true 49 | 50 | # To add Flutter specific assets to your application, add an assets section, 51 | # like this: 52 | # assets: 53 | # - images/a_dot_burr.jpeg 54 | # - images/a_dot_ham.jpeg 55 | 56 | # An image asset can refer to one or more resolution-specific "variants", see 57 | # https://flutter.dev/assets-and-images/#resolution-aware. 58 | 59 | # For details regarding adding assets from package dependencies, see 60 | # https://flutter.dev/assets-and-images/#from-packages 61 | 62 | # To add Flutter specific custom fonts to your application, add a fonts 63 | # section here, in this "flutter" section. Each entry in this list should 64 | # have a "family" key with the font family name, and a "fonts" key with a 65 | # list giving the asset and other descriptors for the font. For 66 | # example: 67 | # fonts: 68 | # - family: Schyler 69 | # fonts: 70 | # - asset: fonts/Schyler-Regular.ttf 71 | # - asset: fonts/Schyler-Italic.ttf 72 | # style: italic 73 | # - family: Trajan Pro 74 | # fonts: 75 | # - asset: fonts/TrajanPro.ttf 76 | # - asset: fonts/TrajanPro_Bold.ttf 77 | # weight: 700 78 | # 79 | # For details regarding fonts from package dependencies, 80 | # see https://flutter.dev/custom-fonts/#from-packages 81 | 82 | 83 | # This section identifies your Flutter project as a module meant for 84 | # embedding in a native host app. These identifiers should _not_ ordinarily 85 | # be changed after generation - they are used to ensure that the tooling can 86 | # maintain consistency when adding or modifying assets and plugins. 87 | # They also do not have any bearing on your native host application's 88 | # identifiers, which may be completely independent or the same as these. 89 | module: 90 | androidX: true 91 | androidPackage: com.example.flutter_module 92 | iosBundleIdentifier: com.example.flutterModule 93 | -------------------------------------------------------------------------------- /flutter_module/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:flutter_module/app/flutter_app.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(FlutterApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /ios_module/Flutter.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Flutter' 3 | s.version = '2.0.300' # 2.0.3 4 | s.summary = 'Flutter Engine Framework' 5 | s.description = <<-DESC 6 | Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. 7 | This pod vends the iOS Flutter engine framework. It is compatible with application frameworks created with this version of the engine and tools. 8 | The pod version matches Flutter version major.minor.(patch * 100) + hotfix. 9 | DESC 10 | s.homepage = 'https://flutter.dev' 11 | s.license = { :type => 'MIT', :text => <<-LICENSE 12 | Copyright 2014 The Flutter Authors. All rights reserved. 13 | 14 | Redistribution and use in source and binary forms, with or without modification, 15 | are permitted provided that the following conditions are met: 16 | 17 | * Redistributions of source code must retain the above copyright 18 | notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above 20 | copyright notice, this list of conditions and the following 21 | disclaimer in the documentation and/or other materials provided 22 | with the distribution. 23 | * Neither the name of Google Inc. nor the names of its 24 | contributors may be used to endorse or promote products derived 25 | from this software without specific prior written permission. 26 | 27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 28 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 29 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 30 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 31 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 32 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 33 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 34 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 | 38 | LICENSE 39 | } 40 | s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } 41 | # s.source = { :http => 'https://storage.flutter-io.cn/flutter_infra/flutter/3459eb24361807fb186953a864cf890fa8e9d26a/ios-release/artifacts.zip' } 42 | # s.source = { :git => 'http://gitlab.private.com/flutter/flutter_sdk.git', :tag => "#{s.version}" } 43 | s.source = { :http => 'https://storage.flutter-io.cn/flutter_infra/flutter/3459eb24361807fb186953a864cf890fa8e9d26a/ios-release/artifacts.zip' } 44 | s.documentation_url = 'https://flutter.dev/docs' 45 | s.platform = :ios, '8.0' 46 | s.vendored_frameworks = 'Flutter.xcframework' 47 | end 48 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro.xcodeproj/xcshareddata/xcschemes/FlutterBoostPro.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro.xcodeproj/xcshareddata/xcschemes/FlutterBoostProRelease.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro.xcodeproj/xcshareddata/xcschemes/FlutterBoostProTest.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | 10 | @interface AppDelegate : UIResponder 11 | 12 | @property (nonatomic, strong) UIWindow * window; 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "AppDelegate.h" 9 | #import "ViewController.h" 10 | #import "FlutterModuleAgent.h" 11 | 12 | 13 | @interface AppDelegate () 14 | 15 | 16 | 17 | @end 18 | 19 | @implementation AppDelegate 20 | 21 | 22 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 23 | // Override point for customization after application launch. 24 | 25 | self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 26 | self.window.backgroundColor = UIColor.blackColor; 27 | self.window.rootViewController = [[BasicNavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; 28 | 29 | [self.window makeKeyAndVisible]; 30 | 31 | 32 | 33 | 34 | #if TEST 35 | [FlutterModuleAgent.shared startFlutterInApp:application callback:^(FlutterEngine * _Nonnull engine, FlutterModuleAgent * _Nonnull agent) { 36 | /// 尽量在启动APP后就进行FlutterModule预加载,提前渲染一个Flutter页面 37 | /// 以解决首次进入Flutter页面闪白的问题 38 | [agent preloadFlutterModuleAfterDelay:0.6]; 39 | }]; 40 | #endif 41 | #if DEV 42 | [FlutterModuleAgent.shared startFlutterInApp:application callback:^(FlutterEngine * _Nonnull engine, FlutterModuleAgent * _Nonnull agent) { 43 | /// 尽量在启动APP后就进行FlutterModule预加载,提前渲染一个Flutter页面 44 | /// 以解决首次进入Flutter页面闪白的问题 45 | [agent preloadFlutterModuleAfterDelay:0.6]; 46 | }]; 47 | #endif 48 | 49 | return YES; 50 | } 51 | 52 | 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Assets.xcassets/AppIconDebug.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Assets.xcassets/AppIconTest.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/BasicNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BasicNavigationController.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface BasicNavigationController : UINavigationController 13 | 14 | 15 | 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/BasicNavigationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BasicNavigationController.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "BasicNavigationController.h" 9 | 10 | @interface BasicNavigationController () 11 | 12 | @end 13 | 14 | @implementation BasicNavigationController 15 | 16 | - (void)viewDidLoad { 17 | [super viewDidLoad]; 18 | self.view.backgroundColor = UIColor.whiteColor; 19 | 20 | } 21 | 22 | #pragma mark - 如果返回visibleViewController,则可能导致UIAlertViewControler闪退,全部用topViewController就好 23 | 24 | -(BOOL)shouldAutorotate{ 25 | return self.topViewController.shouldAutorotate; 26 | } 27 | 28 | -(UIInterfaceOrientationMask)supportedInterfaceOrientations{ 29 | return self.topViewController.supportedInterfaceOrientations; 30 | } 31 | 32 | //一开始的方向 33 | -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ 34 | return self.topViewController.preferredInterfaceOrientationForPresentation; 35 | } 36 | 37 | 38 | - (UIViewController *)childViewControllerForStatusBarStyle { 39 | return self.topViewController; 40 | } 41 | 42 | - (UIViewController *)childViewControllerForStatusBarHidden { 43 | return self.topViewController; 44 | } 45 | 46 | - (UIViewController *)childViewControllerForHomeIndicatorAutoHidden { 47 | return self.topViewController; 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/BasicViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BasicViewController.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | #import "Func.h" 10 | #import 11 | #import "BasicNavigationController.h" 12 | #import "UIButton+Extension.h" 13 | #import 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @interface BasicViewController : UIViewController 18 | 19 | 20 | /** 状态栏样式,默认UIStatusBarStyleDefault,不要在info.plist文件添加全局配置 21 | */ 22 | @property (nonatomic, assign) UIStatusBarStyle statusBarStyle; 23 | 24 | 25 | /** 隐藏状态栏,默认false,不要在info.plist文件添加全局配置 26 | */ 27 | @property (nonatomic, assign) BOOL statusBarHidden; 28 | 29 | 30 | /** 退出页面的回调,在`viewControllerWillDismissFromStack`中调用 31 | */ 32 | @property (nonatomic, copy) void (^__nullable exitCallBack)(void); 33 | 34 | 35 | 36 | /** 一些初始化配置 */ 37 | - (void)didInit NS_REQUIRES_SUPER; 38 | 39 | 40 | /** 即将退出viewController,子类可重写此方法监听页面退出事件,可实现一些内存管理的事情,移除定时器之类的。 41 | * 调用popViewController / dismissViewController / removeFromParentViewController 后触发此方法 42 | * 注意: 作为UISearchController.searchResultController时会被多次调用 43 | */ 44 | - (void)viewControllerWillDismissFromStack NS_REQUIRES_SUPER; 45 | 46 | 47 | - (void)exitViewControllerAnimated:(BOOL)animated; 48 | 49 | 50 | - (void)resetStatusBarStyle:(UIStatusBarStyle)statusBarStyle; 51 | @end 52 | 53 | NS_ASSUME_NONNULL_END 54 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleAgent.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleAgent.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | #import "FlutterModuleConstants.h" 10 | 11 | #import 12 | 13 | #import "FlutterModuleNavigator.h" 14 | #import "FlutterModuleChannel.h" 15 | #import "FlutterModuleHelper.h" 16 | #import "FlutterModuleViewController.h" 17 | 18 | 19 | NS_ASSUME_NONNULL_BEGIN 20 | 21 | /// flutter boost页面路由的代理, 差不多就是flutter端的navigator的代理 22 | /// 实现页面的入栈出栈 23 | @interface FlutterModuleAgent : NSObject 24 | 25 | /// 单例 26 | @property (nonatomic, strong, readonly, class) FlutterModuleAgent * shared; 27 | 28 | @property (nonatomic, strong, readonly) FlutterModuleChannel * globalChannel; 29 | 30 | 31 | /// 初始化flutter,会触发flutter的main(),同时Agent内部会实现一个全局的FlutterModuleChannel,用于2端交互 32 | /// 33 | /// 在FLBFlutterApplication文件中,初始化引擎后便调用了 34 | /// Class clazz = NSClassFromString(@"GeneratedPluginRegistrant"); 35 | /// [clazz performSelector:NSSelectorFromString(@"registerWithRegistry:") withObject:myengine]; 36 | /// 所以不需要再手动注册插件,即下面一行代码 37 | /// [GeneratedPluginRegistrant registerWithRegistry:self]; 38 | /// 39 | - (void)startFlutterInApp:(UIApplication *)application 40 | callback:(void (^)(FlutterEngine * engine, FlutterModuleAgent * agent))callback ; 41 | 42 | 43 | 44 | /// 尽量在启动APP后就进行FlutterModule预加载,提前渲染一个Flutter页面 45 | /// 以解决首次进入Flutter页面闪白的问题 46 | /// @param delay 秒 47 | - (void)preloadFlutterModuleAfterDelay:(CGFloat)delay; 48 | 49 | 50 | 51 | @end 52 | 53 | NS_ASSUME_NONNULL_END 54 | 55 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleChannel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleChannel.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | #import 10 | #import "Func.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface FlutterModuleChannel : NSObject 15 | @property (class, nonatomic, strong, readonly) FlutterModuleChannel * global; 16 | 17 | @property (nonatomic, strong, readonly) FlutterMethodChannel* channel; 18 | 19 | 20 | - (void)initMessageChannelWithEngine:(FlutterEngine * _Nonnull)engine; 21 | 22 | - (void)addInterceptorForMethod:(NSString *)method received:(FlutterMethodCallHandler _Nullable)received; 23 | 24 | - (void)removeInterceptorForMethod:(NSString *)method; 25 | 26 | 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | 31 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleChannel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleChannel.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "FlutterModuleChannel.h" 9 | 10 | @interface FlutterModuleChannel () 11 | 12 | @property (nonatomic, strong) NSMutableDictionary * interceptors; 13 | 14 | @end 15 | 16 | 17 | @implementation FlutterModuleChannel 18 | 19 | - (NSMutableDictionary *)interceptors{ 20 | if (!_interceptors) { 21 | _interceptors = [[NSMutableDictionary alloc]init]; 22 | }return _interceptors; 23 | } 24 | 25 | 26 | + (FlutterModuleChannel *)global { 27 | static FlutterModuleChannel * channel; 28 | static dispatch_once_t onceToken; 29 | dispatch_once(&onceToken, ^{ 30 | channel = [[FlutterModuleChannel alloc] init]; 31 | }); 32 | return channel; 33 | } 34 | 35 | 36 | 37 | - (void)initMessageChannelWithEngine:(FlutterEngine *)engine { 38 | _channel = [FlutterMethodChannel methodChannelWithName:@"app_global_channel" binaryMessenger:engine.binaryMessenger]; 39 | __weak typeof(self) weakSelf = self; 40 | [_channel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) { 41 | __strong typeof(weakSelf) self = weakSelf; 42 | 43 | /// 业务层注册的一些拦截器 44 | FlutterMethodCallHandler handler = [self.interceptors objectForKey:call.method]; 45 | if (handler) { 46 | handler(call, result); 47 | return; 48 | } 49 | 50 | 51 | /// MARK: 实现一些通用的响应 52 | 53 | /// 磁盘总容量 54 | if ([call.method isEqualToString:@"total_disk_size"]) { 55 | var totalSpace = [self totalDiskSize]; 56 | result([NSNumber numberWithUnsignedLongLong:totalSpace]); 57 | } 58 | /// 磁盘可用容量 59 | else if ([call.method isEqualToString:@"free_disk_size"]) { 60 | var freeSpace = [self freeDiskSize]; 61 | result([NSNumber numberWithUnsignedLongLong:freeSpace]); 62 | } else { 63 | result(FlutterMethodNotImplemented); 64 | } 65 | }]; 66 | } 67 | 68 | 69 | - (void)addInterceptorForMethod:(NSString *)method received:(FlutterMethodCallHandler)received { 70 | if (method && received) { 71 | NSAssert(!self.interceptors[method], @"请勿重复注册"); 72 | [self.interceptors setObject:received forKey:method]; 73 | } else { 74 | NSAssert(false, @"搞啥呢"); 75 | } 76 | } 77 | 78 | - (void)removeInterceptorForMethod:(NSString *)method { 79 | if (method) { 80 | [self.interceptors removeObjectForKey:method]; 81 | } 82 | } 83 | 84 | 85 | 86 | 87 | 88 | 89 | - (unsigned long long)totalDiskSize { 90 | unsigned long long totalSpace = 0; 91 | if (@available(iOS 11.0, *)) { 92 | NSDictionary * resource = [[NSURL fileURLWithPath:NSHomeDirectory()] resourceValuesForKeys:@[NSURLVolumeTotalCapacityKey] error:nil]; 93 | totalSpace = [[resource objectForKey:NSURLVolumeTotalCapacityKey] unsignedLongLongValue]; 94 | } else { 95 | totalSpace = [[[[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil] objectForKey:NSFileSystemSize] unsignedLongLongValue]; 96 | } 97 | return totalSpace/(1024*1024); 98 | } 99 | 100 | - (unsigned long long)freeDiskSize { 101 | unsigned long long freeSpace = 0; 102 | if (@available(iOS 11.0, *)) { 103 | /// NSURLVolumeAvailableCapacityKey, NSURLVolumeAvailableCapacityForImportantUsageKey, NSURLVolumeAvailableCapacityForOpportunisticUsageKey 104 | NSDictionary * resource = [[NSURL fileURLWithPath:NSHomeDirectory()] resourceValuesForKeys:@[NSURLVolumeAvailableCapacityKey] error:nil]; 105 | freeSpace = [[resource objectForKey:NSURLVolumeAvailableCapacityKey] unsignedLongLongValue]; 106 | } else { 107 | freeSpace = [[[[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil] objectForKey:NSFileSystemFreeSize] unsignedLongLongValue]; 108 | } 109 | return freeSpace/(1024*1024); 110 | } 111 | 112 | 113 | @end 114 | 115 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleConstants.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleConstants.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #ifndef FlutterModuleConstants_h 9 | #define FlutterModuleConstants_h 10 | #import 11 | 12 | /// Flutter开关 13 | static const NSInteger kFlutterEnable = 1; 14 | 15 | 16 | /// 禁用侧滑返回 17 | static NSString * const kDisableFullscreenPopGesture = @"disable_fullscreen_pop_gesture"; 18 | 19 | /// 指定状态栏样式 20 | static NSString * const kStatusBarStyle = @"statusBarStyle"; 21 | 22 | /// 通过FlutterBoost打开native页面时传的url 23 | static NSString * const kNativePage = @"native_page"; 24 | 25 | 26 | /// 通过FlutterBoost打开native页面时携带的参数:指定native的路由 27 | static NSString * const kNativeRouteUrl = @"route_url"; 28 | 29 | 30 | /// 通过FlutterBoost打开native页面时携带的参数:指定native的路由参数 31 | static NSString * const kNativeRouteParams = @"route_params"; 32 | 33 | 34 | #endif /* FlutterModuleConstants_h */ 35 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleHelper.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface FlutterModuleHelper : NSObject 13 | 14 | /// 获取当前展示的window 15 | + (UIWindow * _Nullable)visibleWindow; 16 | 17 | /// 获取当前显示的控制器 18 | + (UIViewController * _Nullable)visibleViewController; 19 | 20 | /// 获取当前控制器的NaviagtionController 21 | + (UINavigationController * _Nullable)visibleNaviagtionController; 22 | 23 | /// 退出控制器 24 | + (void)exitViewController:(UIViewController *)vc animated:(BOOL)animated; 25 | 26 | @end 27 | 28 | NS_ASSUME_NONNULL_END 29 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleNavigator.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleNavigator.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | #import "FlutterModuleConstants.h" 10 | 11 | #import 12 | #import "FlutterModuleViewController.h" 13 | 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | /// 相当于页面navigator 18 | @interface FlutterModuleNavigator : NSObject 19 | 20 | 21 | /// 关闭页面 22 | + (void)close:(NSString *)uniqueId; 23 | 24 | /// 打开Flutter页面 25 | + (void)push:(NSString *)url 26 | arguments:(NSDictionary * _Nullable)arguments; 27 | 28 | /// 打开Flutter页面 29 | + (void)push:(NSString *)url; 30 | 31 | /// 打开Flutter页面 32 | + (void)present:(NSString *)url 33 | arguments:(NSDictionary * _Nullable)arguments; 34 | 35 | /// 打开Flutter页面 36 | + (void)present:(NSString *)url; 37 | 38 | 39 | @end 40 | 41 | NS_ASSUME_NONNULL_END 42 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleNavigator.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleNavigator.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "FlutterModuleNavigator.h" 9 | 10 | @implementation FlutterModuleNavigator 11 | 12 | + (void)close:(NSString *)uniqueId { 13 | [FlutterBoost.instance close:uniqueId]; 14 | } 15 | 16 | + (void)push:(NSString *)url 17 | arguments:(NSDictionary *)arguments { 18 | [FlutterBoost.instance open:url arguments:arguments completion:^(BOOL finished) { 19 | 20 | }]; 21 | } 22 | 23 | + (void)push:(NSString *)url { 24 | [self push:url arguments:@{}]; 25 | } 26 | 27 | + (void)present:(NSString *)url 28 | arguments:(NSDictionary *)arguments { 29 | NSMutableDictionary * parameters = SafeMutDictionary(arguments); 30 | parameters[@"present"] = @(true); 31 | [FlutterBoost.instance open:url arguments:parameters completion:^(BOOL finished) { 32 | 33 | }]; 34 | } 35 | 36 | 37 | + (void)present:(NSString *)url { 38 | [self present:url arguments:@{}]; 39 | } 40 | 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleViewController.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "BasicViewController.h" 9 | #import "FlutterModuleConstants.h" 10 | 11 | 12 | #import 13 | #import 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @interface FlutterModuleViewController : BasicViewController 18 | 19 | /// flutter定义的路由 20 | @property (nonatomic, copy) NSString * route; 21 | 22 | 23 | /// 用Flutter测的路由和参数来初始化,不需要子类重写 `willMountFlutterContainer` 调用 `setName:(NSString *)name params:(NSDictionary *)params;` 24 | /// 2个特殊参数: 25 | /// params.disableFullscreenPopGesture 禁用FDFullscreenPopGesture的全屏侧滑返回效果 26 | /// params.statusBarStyle 控制状态栏的颜色 27 | - (instancetype)initWithRoute:(NSString *)route params:(NSDictionary *)params; 28 | 29 | 30 | /// 此时设置setInitialRoute没有用,main()拿到的defaultRouteName是'/' 31 | @property(nonatomic, strong, readonly)FBFlutterViewContainer * flutterContainer; 32 | 33 | 34 | /// Flutter容器刚初始化,还未添加到view上,子类可重写设置路由 35 | - (void)willMountFlutterContainer; 36 | 37 | /// 布局,子类可重写 38 | - (void)willLayoutFlutterContainer; 39 | 40 | 41 | @end 42 | 43 | NS_ASSUME_NONNULL_END 44 | 45 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/FlutterModule/FlutterModuleViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlutterModuleViewController.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "FlutterModuleViewController.h" 9 | 10 | 11 | @interface FlutterModuleViewController () 12 | 13 | @property (nonatomic, strong) NSMutableDictionary * params; 14 | 15 | @end 16 | 17 | @implementation FlutterModuleViewController 18 | 19 | 20 | - (instancetype)initWithRoute:(NSString *)route params:(NSDictionary *)params { 21 | if (self = [super init]) { 22 | self.route = SafeString(route); 23 | self.params = SafeMutDictionary(params); 24 | }return self; 25 | } 26 | 27 | - (void)didInit { 28 | [super didInit]; 29 | /// 因为继承BasicViewController,导致Flutter控制不了native的statusBarStyle 30 | /// 所以这里由初始参数控制,不随默认的 31 | if (self.params[kStatusBarStyle]) { 32 | [self resetStatusBarStyle:[self.params[kStatusBarStyle] integerValue]]; 33 | [self.params removeObjectForKey:kStatusBarStyle]; 34 | } 35 | 36 | _flutterContainer = [[FBFlutterViewContainer alloc] init]; 37 | } 38 | 39 | - (void)viewDidLoad { 40 | [super viewDidLoad]; 41 | 42 | /// 隐藏系统自带的导航栏,由Flutter侧实现 43 | self.fd_prefersNavigationBarHidden = true; 44 | 45 | /// FDFullscreenPopGesture的全屏侧滑手势优先于Flutter页面的手势 46 | /// 如果Flutter页面是类似PageView的结构,就会导致Flutter页面的右向滑动失效,并触发FDFullscreenPopGesture的侧滑返回 47 | if (self.params[kDisableFullscreenPopGesture]) { 48 | self.fd_interactivePopDisabled = [self.params[kDisableFullscreenPopGesture] boolValue]; 49 | [self.params removeObjectForKey:kDisableFullscreenPopGesture]; 50 | } 51 | 52 | /// 供子类重写 调用 `setName:(NSString *)name params:(NSDictionary *)params;` 53 | [self willMountFlutterContainer]; 54 | 55 | self.flutterContainer.view.frame = self.view.bounds; 56 | [self.view insertSubview:self.flutterContainer.view atIndex:0]; 57 | [self addChildViewController:self.flutterContainer]; 58 | 59 | [self willLayoutFlutterContainer]; 60 | } 61 | 62 | - (void)didMoveToParentViewController:(UIViewController *)parent { 63 | /// MARK: 下面这行代码在这儿会触发2次notifyWillDealloc,会导致FlutterBoost出现异常 64 | /// 比如 NoSuchMethodError: The getter 'topPage' was called on null. 65 | /// [self.flutterContainer didMoveToParentViewController:parent]; 66 | 67 | /// 下面只会触发一次notifyWillDealloc,正常 68 | if (parent == nil && self.flutterContainer.parentViewController) { 69 | [self.flutterContainer removeFromParentViewController]; 70 | } 71 | [super didMoveToParentViewController:parent]; 72 | } 73 | 74 | - (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion { 75 | [super dismissViewControllerAnimated:flag completion:^{ 76 | /// MARK: 解决NavigationController嵌套CustomFlutterVC导致Flutter页面不释放的问题 77 | /// 原因是 'dismissViewControllerAnimated:completion:' 并不会触发 'didMoveToParentViewController:'方法 78 | /// FBFlutterViewContainer 由重写 'dismissViewControllerAnimated:completion:' 方法来移除Flutter页面 79 | /// 但如果FBFlutterVC又被嵌套在自定义的CustomFlutterVC里面,CustomFlutterVC就需要实现移除Flutter页面的逻辑 80 | /// 比如下面的嵌套层级,NavigationController是present出来的 81 | /// NavigationController ---root vc---> CustomFlutterVC --- add sub vc ---> FBFlutterVC --- add sub vc ---> FlutterVC 82 | 83 | [self didMoveToParentViewController:nil]; 84 | }]; 85 | } 86 | 87 | 88 | #pragma mark - Override 89 | 90 | - (void)willMountFlutterContainer { 91 | if (IsNonempty(self.route)) { 92 | [self.flutterContainer setName:self.route uniqueId:nil params:self.params opaque:false]; 93 | } else { 94 | NSAssert(false, @"参数异常"); 95 | } 96 | } 97 | 98 | - (void)willLayoutFlutterContainer { 99 | [self.flutterContainer.view mas_makeConstraints:^(MASConstraintMaker *make) { 100 | make.edges.mas_offset(0); 101 | }]; 102 | } 103 | 104 | 105 | @end 106 | 107 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Info-Debug.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSBonjourServices 6 | 7 | _dartobservatory._tcp 8 | 9 | UIViewControllerBasedStatusBarAppearance 10 | 11 | CFBundleDevelopmentRegion 12 | $(DEVELOPMENT_LANGUAGE) 13 | CFBundleExecutable 14 | $(EXECUTABLE_NAME) 15 | CFBundleIdentifier 16 | $(CustomAppBundleld) 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | $(CustomProductName) 21 | CFBundlePackageType 22 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 23 | CFBundleShortVersionString 24 | 1.0 25 | CFBundleVersion 26 | 1 27 | LSRequiresIPhoneOS 28 | 29 | UIApplicationSupportsIndirectInputEvents 30 | 31 | UILaunchStoryboardName 32 | LaunchScreen 33 | UIMainStoryboardFile 34 | Main 35 | UIRequiredDeviceCapabilities 36 | 37 | armv7 38 | 39 | UISupportedInterfaceOrientations 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationLandscapeLeft 43 | UIInterfaceOrientationLandscapeRight 44 | 45 | UISupportedInterfaceOrientations~ipad 46 | 47 | UIInterfaceOrientationPortrait 48 | UIInterfaceOrientationPortraitUpsideDown 49 | UIInterfaceOrientationLandscapeLeft 50 | UIInterfaceOrientationLandscapeRight 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Info-Release.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIViewControllerBasedStatusBarAppearance 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(CustomAppBundleld) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(CustomProductName) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIApplicationSupportsIndirectInputEvents 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/Info-Test.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSBonjourServices 6 | 7 | _dartobservatory._tcp 8 | 9 | UIViewControllerBasedStatusBarAppearance 10 | 11 | CFBundleDevelopmentRegion 12 | $(DEVELOPMENT_LANGUAGE) 13 | CFBundleExecutable 14 | $(EXECUTABLE_NAME) 15 | CFBundleIdentifier 16 | $(CustomAppBundleld) 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | $(CustomProductName) 21 | CFBundlePackageType 22 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 23 | CFBundleShortVersionString 24 | 1.0 25 | CFBundleVersion 26 | 1 27 | LSRequiresIPhoneOS 28 | 29 | UIApplicationSupportsIndirectInputEvents 30 | 31 | UILaunchStoryboardName 32 | LaunchScreen 33 | UIMainStoryboardFile 34 | Main 35 | UIRequiredDeviceCapabilities 36 | 37 | armv7 38 | 39 | UISupportedInterfaceOrientations 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationLandscapeLeft 43 | UIInterfaceOrientationLandscapeRight 44 | 45 | UISupportedInterfaceOrientations~ipad 46 | 47 | UIInterfaceOrientationPortrait 48 | UIInterfaceOrientationPortraitUpsideDown 49 | UIInterfaceOrientationLandscapeLeft 50 | UIInterfaceOrientationLandscapeRight 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/NSObject+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+Extension.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface NSObject (Extension) 13 | 14 | 15 | /** 16 | * 作为链式调用的保护层,可以这么写,能有效避免野指针 17 | * [obj jk_chained:^{ 18 | * obj.jk_backgroundColor(UIColor.clearColor); 19 | * }]; 20 | */ 21 | - (void)jk_chained:(dispatch_block_t)chained; 22 | 23 | 24 | /** 25 | * 作为链式调用的保护层,能有效避免野指针,并且会在主线程安全回调 26 | * [obj jk_chainedInMainQueue:^{ 27 | * obj.jk_backgroundColor(UIColor.clearColor); 28 | * }]; 29 | */ 30 | - (void)jk_chainedInMainQueue:(dispatch_block_t)chained; 31 | 32 | 33 | @end 34 | 35 | NS_ASSUME_NONNULL_END 36 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/NSObject+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+Extension.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "NSObject+Extension.h" 9 | 10 | @implementation NSObject (Extension) 11 | 12 | - (void)jk_chained:(dispatch_block_t)chained { 13 | chained ? chained() : NULL; 14 | } 15 | 16 | 17 | - (void)jk_chainedInMainQueue:(dispatch_block_t)chained { 18 | if (NSThread.isMainThread) { 19 | chained ? chained() : NULL; 20 | } else { 21 | __weak __typeof(self)weakSelf = self; 22 | dispatch_async(dispatch_get_main_queue(), ^{ 23 | __strong __typeof(weakSelf)self = weakSelf; 24 | [self jk_chained:chained]; 25 | }); 26 | } 27 | } 28 | 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/NativeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // NativeViewController.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "BasicViewController.h" 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface NativeViewController : BasicViewController 13 | 14 | @end 15 | 16 | NS_ASSUME_NONNULL_END 17 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/NativeViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // NativeViewController.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "NativeViewController.h" 9 | 10 | @interface NativeViewController () 11 | 12 | @end 13 | 14 | @implementation NativeViewController 15 | 16 | - (void)viewDidLoad { 17 | [super viewDidLoad]; 18 | self.navigationItem.title = @"native page"; 19 | 20 | var nativeButton = [UIButton jk_buttonWithFrame:CGRectMake(0, 0, 150, 40) titleColor:UIColor.whiteColor title:@"Push Native Page"]; 21 | nativeButton.center = self.view.center; 22 | nativeButton.jk_font(PingFangMediumFont(15)).jk_backgroundColor(UIColor.purpleColor).jk_cornrRadius(4); 23 | [self.view addSubview:nativeButton]; 24 | [nativeButton addTarget:self action:@selector(pushNativePage) forControlEvents:(UIControlEventTouchUpInside)]; 25 | } 26 | 27 | 28 | - (void)pushNativePage { 29 | var vc = [[NativeViewController alloc] init]; 30 | [self.navigationController pushViewController:vc animated:true]; 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/UIButton+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+Extension.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | #import "UIView+Extension.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIButton (Extension) 14 | 15 | /** 设置按钮的标题字体 */ 16 | @property (nonatomic, copy, readonly) UIButton * (^jk_font)(UIFont * titleFont); 17 | 18 | 19 | /** runtime标记当前为normal状态,并不会改变按钮实际状态 */ 20 | @property (nonatomic, copy, readonly) UIButton * jk_normal; 21 | 22 | /** runtime标记当前为highlighted状态,并不会改变按钮实际状态 */ 23 | @property (nonatomic, copy, readonly) UIButton * jk_highlighted; 24 | 25 | /** runtime标记当前为selected状态,并不会改变按钮实际状态 */ 26 | @property (nonatomic, copy, readonly) UIButton * jk_selected; 27 | 28 | /** runtime标记当前为disabled状态,并不会改变按钮实际状态 */ 29 | @property (nonatomic, copy, readonly) UIButton * jk_disabled; 30 | 31 | /** runtime标记通用状态, highlighted + normal + selected + disabled,并不会改变按钮实际状态 */ 32 | @property (nonatomic, copy, readonly) UIButton * jk_general; 33 | 34 | /** 设置title,默认是.jk_normal,需要配合.jk_normal .jk_highlighted .jk_selected .jk_disabled .jk_general一起使用 35 | */ 36 | @property (nonatomic, copy, readonly) UIButton * (^jk_title)(NSString * __nullable title); 37 | 38 | /** 设置titleColor,默认是.jk_normal,需要配合.jk_normal .jk_highlighted .jk_selected .jk_disabled .jk_general一起使用 39 | */ 40 | @property (nonatomic, copy, readonly) UIButton * (^jk_titleColor)(UIColor * __nullable titleColor); 41 | 42 | /** 设置image,默认是.jk_normal,需要配合.jk_normal .jk_highlighted .jk_selected .jk_disabled .jk_general一起使用 43 | */ 44 | @property (nonatomic, copy, readonly) UIButton * (^jk_image)(UIImage * __nullable image); 45 | 46 | /** 设置backgroundImage,默认是.jk_normal,需要配合.jk_normal .jk_highlighted .jk_selected .jk_disabled .jk_general一起使用 47 | */ 48 | @property (nonatomic, copy, readonly) UIButton * (^jk_backgroundImage)(UIImage * __nullable backgroundImage); 49 | 50 | 51 | /** 按钮的标题字体 */ 52 | @property (nonatomic, strong) UIFont * titleFont; 53 | 54 | 55 | - (void)jk_setTitle:(NSString * __nullable)title titleColor:(UIColor * __nullable)titleColor forState:(UIControlState)state; 56 | 57 | 58 | /** 高亮button便利构造方法 */ 59 | + (instancetype)jk_buttonWithFrame:(CGRect)frame; 60 | 61 | 62 | /** 63 | 普通的文字按钮 64 | 65 | @param frame frame 66 | @param color titleColor 67 | @param title title 68 | @return 普通 69 | */ 70 | + (instancetype)jk_buttonWithFrame:(CGRect)frame titleColor:(UIColor * __nullable)color title:(NSString * __nullable)title; 71 | 72 | 73 | 74 | @end 75 | 76 | NS_ASSUME_NONNULL_END 77 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/UIView+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | #import "NSObject+Extension.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIView (Extension) 14 | 15 | /** 16 | 不安全的属性,可能会出现野指针错误,请在[UIView jk_chained:]里面调用 17 | */ 18 | @property (nonatomic, copy, readonly) UIView * (^jk_backgroundColor)(UIColor * __nullable color); 19 | 20 | 21 | @property (nonatomic, copy, readonly) UIView * (^jk_cornrRadius)(CGFloat cornrRadius); 22 | 23 | @property (nonatomic, copy, readonly) UIView * (^jk_borderWidth)(CGFloat borderWidth); 24 | 25 | @property (nonatomic, copy, readonly) UIView * (^jk_borderColor)(UIColor * __nullable borderColor); 26 | 27 | @property (nonatomic, copy, readonly) UIView * (^jk_masksToBounds)(BOOL masksToBounds); 28 | 29 | @property (nonatomic, assign) CGFloat jk_centerX; 30 | @property (nonatomic, assign) CGFloat jk_centerY; 31 | 32 | /** 33 | 相对View本身bounds的中心点,也就是宽高的一半 34 | */ 35 | @property (nonatomic, assign, readonly) CGPoint jk_centerOfBounds; 36 | 37 | 38 | @end 39 | 40 | NS_ASSUME_NONNULL_END 41 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/UIView+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "UIView+Extension.h" 9 | 10 | @implementation UIView (Extension) 11 | 12 | 13 | - (UIView * _Nonnull (^)(UIColor * _Nullable))jk_backgroundColor { 14 | return ^UIView *(UIColor * value) { 15 | self.backgroundColor = value; 16 | return self; 17 | }; 18 | } 19 | 20 | - (UIView * _Nonnull (^)(CGFloat))jk_cornrRadius { 21 | return ^UIView *(CGFloat value) { 22 | self.layer.cornerRadius = value; 23 | return self; 24 | }; 25 | } 26 | 27 | - (UIView * _Nonnull (^)(CGFloat))jk_borderWidth { 28 | return ^UIView *(CGFloat value) { 29 | self.layer.borderWidth = value; 30 | self.layer.masksToBounds = value > 0.01; 31 | return self; 32 | }; 33 | } 34 | 35 | - (UIView * _Nonnull (^)(UIColor * _Nullable))jk_borderColor { 36 | return ^UIView *(UIColor * value) { 37 | self.layer.borderColor = value.CGColor; 38 | return self; 39 | }; 40 | } 41 | 42 | - (UIView * _Nonnull (^)(BOOL))jk_masksToBounds { 43 | return ^UIView *(BOOL value) { 44 | self.layer.masksToBounds = value; 45 | return self; 46 | }; 47 | } 48 | 49 | 50 | - (void)setJk_centerX:(CGFloat)jk_centerX { 51 | CGPoint temp = self.center; 52 | temp.x = jk_centerX; 53 | self.center = temp; 54 | } 55 | - (CGFloat)jk_centerX { 56 | return self.center.x; 57 | } 58 | 59 | 60 | 61 | - (void)setJk_centerY:(CGFloat)jk_centerY { 62 | CGPoint temp = self.center; 63 | temp.y = jk_centerY; 64 | self.center = temp; 65 | } 66 | - (CGFloat)jk_centerY { 67 | return self.center.y; 68 | } 69 | 70 | - (CGPoint)jk_centerOfBounds { 71 | return CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5); 72 | } 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "BasicViewController.h" 9 | 10 | @interface ViewController : BasicViewController 11 | 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import "ViewController.h" 9 | #import "NativeViewController.h" 10 | #import "FlutterModuleAgent.h" 11 | 12 | 13 | 14 | @interface ViewController () 15 | 16 | @property (nonatomic, assign) NSInteger index; 17 | 18 | @end 19 | 20 | @implementation ViewController 21 | 22 | - (void)viewDidLoad { 23 | [super viewDidLoad]; 24 | self.navigationItem.title = @"Native Page"; 25 | 26 | 27 | self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"present search" style:(UIBarButtonItemStylePlain) target:self action:@selector(presentSearchPage)]; 28 | self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"push search" style:(UIBarButtonItemStylePlain) target:self action:@selector(pushSearchPage)]; 29 | 30 | 31 | 32 | 33 | if (@available(iOS 13.0, *)) { 34 | var system = [UIButton jk_buttonWithFrame:CGRectMake(0, 150, 150, 40) titleColor:UIColor.whiteColor title:@"System"]; 35 | system.jk_font(PingFangMediumFont(15)).jk_backgroundColor(UIColor.purpleColor).jk_cornrRadius(4); 36 | [system addTarget:self action:@selector(setSystemMode) forControlEvents:(UIControlEventTouchUpInside)]; 37 | system.jk_centerX = self.view.jk_centerX; 38 | [self.view addSubview:system]; 39 | 40 | var dark = [UIButton jk_buttonWithFrame:CGRectMake(0, 220, 150, 40) titleColor:UIColor.whiteColor title:@"DarkMode"]; 41 | dark.jk_font(PingFangMediumFont(15)).jk_backgroundColor(UIColor.purpleColor).jk_cornrRadius(4); 42 | [dark addTarget:self action:@selector(setDarkMode) forControlEvents:(UIControlEventTouchUpInside)]; 43 | dark.jk_centerX = self.view.jk_centerX; 44 | [self.view addSubview:dark]; 45 | 46 | var light = [UIButton jk_buttonWithFrame:CGRectMake(0, 290, 150, 40) titleColor:UIColor.whiteColor title:@"LightMode"]; 47 | light.jk_font(PingFangMediumFont(15)).jk_backgroundColor(UIColor.purpleColor).jk_cornrRadius(4); 48 | [light addTarget:self action:@selector(setLightMode) forControlEvents:(UIControlEventTouchUpInside)]; 49 | light.jk_centerX = self.view.jk_centerX; 50 | [self.view addSubview:light]; 51 | } 52 | 53 | 54 | 55 | var nativeButton = [UIButton jk_buttonWithFrame:CGRectMake(0, 400, 150, 40) titleColor:UIColor.whiteColor title:@"Push Native Page"]; 56 | nativeButton.center = self.view.center; 57 | nativeButton.jk_font(PingFangMediumFont(15)).jk_backgroundColor(UIColor.purpleColor).jk_cornrRadius(4); 58 | [self.view addSubview:nativeButton]; 59 | [nativeButton addTarget:self action:@selector(pushNativePage) forControlEvents:(UIControlEventTouchUpInside)]; 60 | } 61 | 62 | 63 | - (void)presentSearchPage { 64 | self.index ++; 65 | [FlutterModuleNavigator present:@"search_page" arguments:@{@"index":@(self.index)}]; 66 | } 67 | 68 | - (void)pushSearchPage { 69 | self.index ++; 70 | [FlutterModuleNavigator push:@"search_page" arguments:@{@"index":@(self.index)}]; 71 | } 72 | 73 | - (void)pushNativePage { 74 | var vc = [[NativeViewController alloc] init]; 75 | [self.navigationController pushViewController:vc animated:true]; 76 | } 77 | 78 | 79 | - (void)setSystemMode API_AVAILABLE(ios(13.0), tvos(13.0)) { 80 | self.view.window.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified; 81 | [FlutterModuleAgent.shared preloadFlutterModuleAfterDelay:0.5]; 82 | } 83 | 84 | - (void)setDarkMode API_AVAILABLE(ios(13.0), tvos(13.0)) { 85 | self.view.window.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; 86 | [FlutterModuleAgent.shared preloadFlutterModuleAfterDelay:0.5]; 87 | } 88 | 89 | - (void)setLightMode API_AVAILABLE(ios(13.0), tvos(13.0)) { 90 | self.view.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; 91 | [FlutterModuleAgent.shared preloadFlutterModuleAfterDelay:0.5]; 92 | } 93 | 94 | 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /ios_module/FlutterBoostPro/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FlutterBoostPro 4 | // 5 | // Created by JK on 2021/6/10. 6 | // 7 | 8 | #import 9 | #import "AppDelegate.h" 10 | 11 | int main(int argc, char * argv[]) { 12 | NSString * appDelegateClassName; 13 | @autoreleasepool { 14 | // Setup code that might create autoreleased objects goes here. 15 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 16 | } 17 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 18 | } 19 | -------------------------------------------------------------------------------- /ios_module/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | #source 'https://github.com/XiFengLang/JKFlutter.git' 3 | 4 | platform :ios,'11.0' 5 | source 'https://github.com/CocoaPods/Specs.git' 6 | #source 'http://gitlab.private.cn/flutter/flutter_module_sdk_podspec.git' 7 | 8 | target 'FlutterBoostPro' do 9 | # Comment the next line if you don't want to use dynamic frameworks 10 | use_frameworks! 11 | 12 | pod 'AppleDevices' 13 | pod 'FDFullscreenPopGesture' 14 | pod 'JKRetractableGCDDelay' 15 | pod 'Masonry' 16 | 17 | 18 | # 0x01:可行,本地依赖(官方推荐) 缺点:每次编译的时候会顺带编译Flutter的framework,耗时 19 | # flutter_application_path = '../flutter_module/' 20 | # load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') 21 | # install_all_flutter_pods(flutter_application_path) 22 | 23 | 24 | # 0x02:可行,本地依赖Flutter的编译产物(.xcframework),手动创建podspec,依赖的时候指定:path 25 | # 缺点:不管是否将产物输出到iOS项目目录里,都是本地的相对路径,而还要对编译产物做git管理,对项目的侵入性或耦合性较强 26 | 27 | 28 | # 0x03:可行,Flutter.framework选择本地podspec+远程zip,App和PluginSDK则是本地依赖(方案同上) 29 | # 缺点:不管是否将产物输出到iOS项目目录里,都是本地的相对路径,要对编译产物做git管理,仅仅只是Flutter远程下载,对项目的侵入性或耦合性还是较强 30 | 31 | 32 | # 0x04:可行(Flutter本地podspec+远程zip,App和PluginSDK经Git远程依赖) 33 | # 如果用Git依赖远程代码,不加tag的话,每次update都会clone git,会有时间损耗, 34 | # 加了tag后首次下载会建本地缓存,后面就节省时间,缓存地址在 cd ~/Library/Caches/CocoaPods/Pods/External/ 35 | # 缺点:Flutter.podspec还是本地的,需要指定相对路径,多个SDK的依赖方式不一致 36 | # pod 'Flutter', :podspec => '../flutter_build/Frameworks/Release/Flutter.podspec' 37 | # pod 'FlutterAppSDK', :git => 'http://gitlab.private.cn/flutter/flutter_app_sdk.git', :tag => '1.0.1' 38 | # pod 'FlutterPluginSDK', :git => 'http://gitlab.private.cn/flutter/flutter_plugin_sdk.git', :tag => '1.0.1' 39 | 40 | 41 | # 0x05:可行,podspec 和 framework都在同一个仓库,同时给Flutter/App/Plugin建立了3个不同的库 42 | # 缺点 Flutter.framework文件太大,没有压缩,可能有480M,造成整个git文件较大,首次clone非常耗时 43 | # pod 'Flutter', :git => 'http://gitlab.private.cn/flutter/flutter_sdk.git', :tag => '1.0.3' 44 | # pod 'FlutterAppSDK', :git => 'http://gitlab.private.cn/flutter/flutter_app_sdk.git', :tag => '1.0.1' 45 | # pod 'FlutterPluginSDK', :git => 'http://gitlab.private.cn/flutter/flutter_plugin_sdk.git', :tag => '1.0.1' 46 | 47 | # 0x06:可行,全部经本地podspec(另一个仓库flutter_module_sdk_podspec)转远程zip依赖,因为都是zip文件,首次下载比完成git依赖要快 48 | # 缺点:本地依赖的podspec都放在另一个git仓库,指向的还是本地的相对地址,而且update之前还要拉取更新另一个git 49 | # pod 'Flutter', :podspec => './../../flutter_module_sdk_podspec/Flutter.podspec' 50 | # pod 'FlutterAppSDK', :podspec => './../../flutter_module_sdk_podspec/FlutterAppSDK.podspec' 51 | # pod 'FlutterPluginSDK', :podspec => './../../flutter_module_sdk_podspec/FlutterPluginSDK.podspec' 52 | 53 | 54 | # 0x07:可行,全部经本地podspec(另一个仓库flutter_module_sdk_podspec)转远程git依赖 55 | # 缺点:本地依赖的podspec都放在另一个git仓库,指向的还是本地的相对地址,而且update之前还要拉取更新另一个git,且flutter所在仓库克隆很慢 56 | # pod 'Flutter', :podspec => './../../flutter_module_sdk_podspec/Flutter.podspec' 57 | # pod 'FlutterAppSDK', :podspec => './../../flutter_module_sdk_podspec/FlutterAppSDK.podspec' 58 | # pod 'FlutterPluginSDK', :podspec => './../../flutter_module_sdk_podspec/FlutterPluginSDK.podspec' 59 | 60 | 61 | # 0x08:可行,全部经本地podspec(另一个仓库flutter_module_sdk_podspec)转远程zip&git混合依赖,但是 62 | # Flutter.framework文件大,选择依赖远程服务器的zip文件,其它framework文件小,选择git依赖; 63 | # 缺点:本地依赖的podspec都放在另一个git仓库,指向的还是本地的相对地址,而且update之前还要拉取更新另一个git 64 | pod 'Flutter', :podspec => './../../flutter_module_sdk_podspec/Flutter.podspec' 65 | pod 'FlutterAppSDK', :podspec => './../../flutter_module_sdk_podspec/FlutterAppSDK.podspec' 66 | pod 'FlutterPluginSDK', :podspec => './../../flutter_module_sdk_podspec/FlutterPluginSDK.podspec' 67 | 68 | 69 | # 0x09:行不通 基于0x08的远程仓库做中转,而不是将0x08的远程拉到本地做中转,而且中转远程的文件有服务器的zip和私有git仓库2种方案; 70 | # pod update不会报错,但实际上并没有下载Flutter.framework、App.framework以及其它的framework文件,只是个空架子 71 | # pod 'Flutter', :git => 'http://gitlab.private.cn/flutter/flutter_module_sdk_podspec.git' 72 | # pod 'FlutterAppSDK', :git => 'http://gitlab.private.cn/flutter/flutter_module_sdk_podspec.git' 73 | # pod 'FlutterAppSDK', :git => 'http://gitlab.private.cn/flutter/flutter_module_sdk_podspec.git' 74 | 75 | 76 | # 0x0A:行不通,远程git的podspec,但是通过:http 指向服务器的zip文件 77 | # pod update不会报错,但实际上并没有下载Flutter.framework 78 | # pod 'Flutter', :git => 'http://gitlab.private.cn/flutter/flutter_module_sdk_podspec.git' 79 | 80 | # 0x0B:行不通,远程服务器上的podspec,通过:http 指向同服务器的zip文件 81 | # 会直接报错 82 | # pod 'Flutter', :podspec => 'http://ftp.private.com/flutter/Flutter.podspec' 83 | 84 | 85 | 86 | end 87 | -------------------------------------------------------------------------------- /ios_module/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AppleDevices (1.0.0) 3 | - FDFullscreenPopGesture (1.1) 4 | - Flutter (2.0.300) 5 | - FlutterAppSDK (2.0.0.6) 6 | - FlutterPluginSDK (2.0.0.6) 7 | - JKRetractableGCDDelay (1.0.2) 8 | - Masonry (1.1.0) 9 | 10 | DEPENDENCIES: 11 | - AppleDevices 12 | - FDFullscreenPopGesture 13 | - Flutter (from `./../../flutter_module_sdk_podspec/Flutter.podspec`) 14 | - FlutterAppSDK (from `./../../flutter_module_sdk_podspec/FlutterAppSDK.podspec`) 15 | - FlutterPluginSDK (from `./../../flutter_module_sdk_podspec/FlutterPluginSDK.podspec`) 16 | - JKRetractableGCDDelay 17 | - Masonry 18 | 19 | SPEC REPOS: 20 | https://github.com/CocoaPods/Specs.git: 21 | - AppleDevices 22 | - FDFullscreenPopGesture 23 | - JKRetractableGCDDelay 24 | - Masonry 25 | 26 | EXTERNAL SOURCES: 27 | Flutter: 28 | :podspec: "./../../flutter_module_sdk_podspec/Flutter.podspec" 29 | FlutterAppSDK: 30 | :podspec: "./../../flutter_module_sdk_podspec/FlutterAppSDK.podspec" 31 | FlutterPluginSDK: 32 | :podspec: "./../../flutter_module_sdk_podspec/FlutterPluginSDK.podspec" 33 | 34 | SPEC CHECKSUMS: 35 | AppleDevices: 437bb7c4e2dd769d3e73af704adfbb1a16143624 36 | FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0 37 | Flutter: fcfd44cd2e0c1c7ed7b45046079dbf769116d228 38 | FlutterAppSDK: a8de2f0f9fbc76f6dcc7c65d970981d6738c1ea7 39 | FlutterPluginSDK: 6d14430edad5b13e804421800f6d497cfb035042 40 | JKRetractableGCDDelay: 95f9c04a3a16725aa3375274e08549f6f7363ba1 41 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 42 | 43 | PODFILE CHECKSUM: 201d306cad4a3fd68c883acffa0966ce22de13ee 44 | 45 | COCOAPODS: 1.10.1 46 | -------------------------------------------------------------------------------- /ios_module/Pods/AppleDevices/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 溪枫狼 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ios_module/Pods/AppleDevices/README.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # AppleDevices 4 | 5 | 识别当前的苹果设备型号 -(Identify current Apple product model.) 6 | 7 | **Support** 8 | 9 | - [x] iPhone 10 | - [x] iPad 11 | - [x] Apple TV 12 | - [x] Apple Watch 13 | - [x] iPod touch 14 | 15 | ## 使用 & Usage 16 | 17 | #### NSString * currentDeviceName 18 | 19 | > * 识别当前设备型号 20 | > * Identify current Apple product model with machine model, eg: iPhone 11, iPad Pro (11-inch). 21 | 22 | ```C 23 | @property (class, nonatomic, copy, readonly) NSString * currentDeviceName; 24 | 25 | AppleDevice.currentDeviceName // iPhone 11 26 | ``` 27 | 28 | #### BOOL isNotchDesignStyle 29 | 30 | > * 判断是不是刘海屏机型,支持模拟器 31 | > * iPhone device with a notch design style, the notch design style is started with the iPhone X, and Xcode simulator is supported. 32 | 33 | 34 | ```C 35 | @property (class, nonatomic, assign, readonly) BOOL isNotchDesignStyle; 36 | 37 | AppleDevice.isNotchDesignStyle // true 38 | ``` 39 | 40 | 41 | ## 更新记录 & Change Log 42 | 43 | - 2021-4-29 `...` 44 | 45 | ## 已适配机型 & Supported Devices 46 | 47 | ### iPhone 48 | 49 | 50 | - [x] iPhone 12 Pro Max 51 | - [x] iPhone 12 Pro 52 | - [x] iPhone 12 53 | - [x] iPhone 12 mini 54 | - [x] iPhone SE (2nd) 55 | - [x] iPhone 11 Pro Max 56 | - [x] iPhone 11 Pro 57 | - [x] iPhone 11 58 | - [x] iPhone XR 59 | - [x] iPhone XS Max 60 | - [x] iPhone XS 61 | - [x] iPhone X 62 | - [x] iPhone 8 Plus 63 | - [x] iPhone 8 64 | - [x] iPhone 7 Plus 65 | - [x] iPhone 7 66 | - [x] iPhone SE 67 | - [x] iPhone 6s Plus 68 | - [x] iPhone 6s 69 | - [x] iPhone 6 70 | - [x] iPhone 6 Plus 71 | - [x] iPhone 5s 72 | - [x] iPhone 5c 73 | - [x] iPhone 5 74 | - [x] iPhone 4S 75 | 76 | 77 | ### iPad 78 | 79 | 80 | - [x] iPad Air (4th) 81 | - [x] iPad Air (3rd) 82 | - [x] iPad Air 2 83 | - [x] iPad Air 84 | - [x] iPad (8th) 85 | - [x] iPad (7th) 86 | - [x] iPad (6th) 87 | - [x] iPad (5th) 88 | - [x] iPad (4th) 89 | - [x] iPad (3rd) 90 | - [x] iPad 2 91 | - [x] iPad 92 | - [x] iPad Pro (12.9-inch) (5th) 93 | - [x] iPad Pro (11-inch) (3rd) 94 | - [x] iPad Pro (12.9-inch) (4th) 95 | - [x] iPad Pro (11-inch) (2nd) 96 | - [x] iPad Pro (12.9-inch) (3rd) 97 | - [x] iPad Pro (11-inch) 98 | - [x] iPad Pro (10.5-inch) 99 | - [x] iPad Pro (12.9-inch) (2nd) 100 | - [x] iPad Pro (12.9-inch) 101 | - [x] iPad Pro (9.7-inch) 102 | - [x] iPad Mini (5th) 103 | - [x] iPad Mini 4 104 | - [x] iPad Mini 3 105 | - [x] iPad Mini 2 106 | - [x] iPad Mini 107 | 108 | 109 | ### Apple TV 110 | 111 | 112 | - [x] Apple TV 4K (2nd) 113 | - [x] Apple TV 4K 114 | - [x] Apple TV (4th) 115 | - [x] Apple TV (3rd) 116 | - [x] Apple TV (2nd) 117 | - [x] Apple TV (1st) 118 | 119 | 120 | ### Apple Watch 121 | 122 | 123 | - [x] Apple Watch Series 6 124 | - [x] Apple Watch SE 125 | - [x] Apple Watch Series 5 126 | - [x] Apple Watch Series 4 127 | - [x] Apple Watch Series 3 128 | - [x] Apple Watch Series 2 129 | - [x] Apple Watch Series 1 130 | - [x] Apple Watch (1st) 131 | 132 | 133 | 134 | ### iPod touch 135 | 136 | 137 | - [x] iPod touch (7th) 138 | - [x] iPod touch (6th) 139 | - [x] iPod touch (5th) 140 | - [x] iPod touch (4th) 141 | - [x] iPod touch (3rd) 142 | - [x] iPod touch (2nd) 143 | - [x] iPod touch 144 | 145 | ## 参考 & Reference 146 | 147 | * [https://www.theiphonewiki.com/wiki/Models](https://www.theiphonewiki.com/wiki/Models) 148 | * [List of iOS and iPadOS devices](https://en.wikipedia.org/wiki/List_of_iOS_and_iPadOS_devices) 149 | * [Identify your iPhone model](https://support.apple.com/en-us/HT201296) -------------------------------------------------------------------------------- /ios_module/Pods/AppleDevices/src/AppleDevice.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppleDevice.h 3 | // AppleDevices 4 | // 5 | // Created by 溪枫狼 on 2021/4/29. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | FOUNDATION_EXTERN UIWindow * KEY_WINDOW(void); 13 | 14 | 15 | /// identify current Apple product model with machine model. 16 | /// 识别当前的设备型号 17 | @interface AppleDevice : NSObject 18 | 19 | /// identify current Apple product model with machine model, eg: iPhone X, iPad Pro. 20 | /// 当前设备型号 21 | @property (class, nonatomic, copy, readonly) NSString * currentDeviceName; 22 | 23 | 24 | /// iPhone device with a notch design style, the notch design style is started with the iPhone X, and Xcode simulator is supported. 25 | /// 判断是不是刘海屏,支持模拟器 26 | @property (class, nonatomic, assign, readonly) BOOL isNotchDesignStyle; 27 | 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /ios_module/Pods/FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h: -------------------------------------------------------------------------------- 1 | // The MIT License (MIT) 2 | // 3 | // Copyright (c) 2015-2016 forkingdog ( https://github.com/forkingdog ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in all 13 | // copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | // SOFTWARE. 22 | 23 | #import 24 | 25 | /// "UINavigation+FDFullscreenPopGesture" extends UINavigationController's swipe- 26 | /// to-pop behavior in iOS 7+ by supporting fullscreen pan gesture. Instead of 27 | /// screen edge, you can now swipe from any place on the screen and the onboard 28 | /// interactive pop transition works seamlessly. 29 | /// 30 | /// Adding the implementation file of this category to your target will 31 | /// automatically patch UINavigationController with this feature. 32 | @interface UINavigationController (FDFullscreenPopGesture) 33 | 34 | /// The gesture recognizer that actually handles interactive pop. 35 | @property (nonatomic, strong, readonly) UIPanGestureRecognizer *fd_fullscreenPopGestureRecognizer; 36 | 37 | /// A view controller is able to control navigation bar's appearance by itself, 38 | /// rather than a global way, checking "fd_prefersNavigationBarHidden" property. 39 | /// Default to YES, disable it if you don't want so. 40 | @property (nonatomic, assign) BOOL fd_viewControllerBasedNavigationBarAppearanceEnabled; 41 | 42 | @end 43 | 44 | /// Allows any view controller to disable interactive pop gesture, which might 45 | /// be necessary when the view controller itself handles pan gesture in some 46 | /// cases. 47 | @interface UIViewController (FDFullscreenPopGesture) 48 | 49 | /// Whether the interactive pop gesture is disabled when contained in a navigation 50 | /// stack. 51 | @property (nonatomic, assign) BOOL fd_interactivePopDisabled; 52 | 53 | /// Indicate this view controller prefers its navigation bar hidden or not, 54 | /// checked when view controller based navigation bar's appearance is enabled. 55 | /// Default to NO, bars are more likely to show. 56 | @property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden; 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /ios_module/Pods/FDFullscreenPopGesture/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /ios_module/Pods/FDFullscreenPopGesture/README.md: -------------------------------------------------------------------------------- 1 | # FDFullscreenPopGesture 2 | An UINavigationController's category to enable fullscreen pop gesture in an iOS7+ system style with AOP. 3 | 4 | # Overview 5 | 6 | ![snapshot](https://raw.githubusercontent.com/forkingdog/FDFullscreenPopGesture/master/Snapshots/snapshot0.gif) 7 | 8 | 这个扩展来自 @J_雨 同学的这个很天才的思路,他的文章地址:[http://www.jianshu.com/p/d39f7d22db6c](http://www.jianshu.com/p/d39f7d22db6c) 9 | 10 | # Usage 11 | 12 | **AOP**, just add 2 files and **no need** for any setups, all navigation controllers will be able to use fullscreen pop gesture automatically. 13 | 14 | To disable this pop gesture of a navigation controller: 15 | 16 | ``` objc 17 | navigationController.fd_fullscreenPopGestureRecognizer.enabled = NO; 18 | ``` 19 | 20 | To disable this pop gesture of a view controller: 21 | 22 | ``` objc 23 | viewController.fd_interactivePopDisabled = YES; 24 | ``` 25 | 26 | Require at least iOS **7.0**. 27 | 28 | # View Controller Based Navigation Bar Appearance 29 | 30 | It handles navigation bar transition properly when using fullscreen gesture to push or pop a view controller: 31 | 32 | - with bar -> without bar 33 | - without bar -> with bar 34 | - without bar -> without bar 35 | 36 | ![snapshot with bar states](https://raw.githubusercontent.com/forkingdog/FDFullscreenPopGesture/master/Snapshots/snapshot1.gif) 37 | 38 | This opmiziation is enabled by default, from now on you don't need to call **UINavigationController**'s `-setNavigationBarHidden:animated:` method, instead, use view controller's specific API to hide its bar: 39 | 40 | ``` objc 41 | - (void)viewDidLoad { 42 | [super viewDidLoad]; 43 | self.fd_prefersNavigationBarHidden = NO; 44 | } 45 | ``` 46 | 47 | And this property is **YES** by default. 48 | 49 | # Installation 50 | 51 | Use cocoapods 52 | 53 | ``` ruby 54 | pod 'FDFullscreenPopGesture', '1.1' 55 | ``` 56 | # Release Notes 57 | 58 | **1.1** - View controller based navigation bar appearance and transition. 59 | **1.0** - Fullscreen pop gesture. 60 | 61 | # License 62 | MIT 63 | -------------------------------------------------------------------------------- /ios_module/Pods/FlutterAppSDK/README.md: -------------------------------------------------------------------------------- 1 | # FlutterAppSDK 2 | 3 | Flutter编译产物 App.framework存储仓库 -------------------------------------------------------------------------------- /ios_module/Pods/FlutterPluginSDK/README.md: -------------------------------------------------------------------------------- 1 | # FlutterPluginSDK 2 | 3 | Flutter编译产物 FlutterPluginRegistrant.xcframework和其它第三方组件的源码存储仓库 -------------------------------------------------------------------------------- /ios_module/Pods/JKRetractableGCDDelay/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 溪枫狼 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ios_module/Pods/JKRetractableGCDDelay/README.md: -------------------------------------------------------------------------------- 1 | # JKRetractableGCDDelay 2 | 可取消的GCD延迟操作,基于[Dispatch-Cancel]( 3 | https://github.com/Spaceman-Labs/Dispatch-Cancel) 4 | 5 | 6 | ### CocoaPods 7 | 8 | ```C 9 | source 'https://github.com/CocoaPods/Specs.git' 10 | 11 | pod 'JKRetractableGCDDelay', '~> 1.0.1' 12 | ``` 13 | 14 | 15 | * 使用performSelector执行延迟任务,以及取消延迟任务。 16 | 17 | ```Object-C 18 | 19 | [self performSelector:@selector(jk_testSEL) withObject:nil afterDelay:5]; 20 | 21 | [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(jk_testSEL) object:nil]; 22 | // [NSObject cancelPreviousPerformRequestsWithTarget:self]; 23 | ``` 24 | 25 | * 使用dispatch_after执行延迟任务,但是系统没有提供取消任务的API,而dispatch_after可能会强引用外部对象,导致对象延迟释放,出现奇奇怪怪的问题。不过[Dispatch-Cancel]( 26 | https://github.com/Spaceman-Labs/Dispatch-Cancel)恰好解决了这个问题,有兴趣的可以看看源码。JKRetractableGCDDelay基于这个框架封装,提供了3种方法执行延迟任务。 27 | 28 | 29 | **调用函数** 30 | 31 | ```Object-C 32 | 33 | /// 外部需要强引用JKGCDDelayTaskBlock 34 | @property (nonatomic, copy) JKGCDDelayTaskBlock delayTaskBlock; 35 | 36 | 37 | __weak typeof(self) weakSelf = self; 38 | self.delayTaskBlock = JK_GCDDelayTaskBlock(5.0, ^{ 39 | weakSelf.view.backgroundColor = [UIColor redColor]; 40 | }); 41 | 42 | 43 | JK_CancelGCDDelayedTask(self.delayTaskBlock); 44 | ``` 45 | 46 | **每个对象在同一时段只能执行一个延迟任务** 47 | 48 | ```Object-C 49 | __weak typeof(self) weakSelf = self; 50 | [self jk_excuteDelayTask:5 inMainQueue:^{ 51 | weakSelf.view.backgroundColor = [UIColor darkGrayColor]; 52 | }]; 53 | 54 | 55 | [self jk_cancelGCDDelayTask]; 56 | ``` 57 | 58 | 59 | **给每个任务绑定Key,根据对应的Key取消任务** 60 | 61 | ```Object-C 62 | __weak typeof(self) weakSelf = self; 63 | [self jk_excuteDelayTaskWithKey:"key" delayInSeconds:5 inMainQueue:^{ 64 | weakSelf.view.backgroundColor = [UIColor blueColor]; 65 | }]; 66 | 67 | 68 | [self jk_cancelGCDDelayTaskForKey:"key"]; 69 | ``` 70 | 71 | -------------------------------------------------------------------------------- /ios_module/Pods/JKRetractableGCDDelay/src/NSObject+GCDDelayTask.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+GCDDelayTask.h 3 | // JKAutoReleaseObject 4 | // 5 | // Created by 蒋鹏 on 17/1/9. 6 | // Copyright © 2017年 溪枫狼. All rights reserved. 7 | // 参考:https://github.com/Spaceman-Labs/Dispatch-Cancel 8 | // 9 | // 基于GCD定时器封装,延时任务能随时取消,并且立刻释放相应的Block内存。 10 | // 1.0.0:基于Runtime将delaytaskBlock关联在self上,在主线程延迟及回调,但是在[self dealloc]中不能通过runtime取出block导致取消失败 11 | // 1.0.1:delaytaskBlock不再关联在self上,而是由全局的JKGCDDelayTaskDict管理,默认以NSStringFromClass(self.class)做block的key,在全局队列延迟,主线程回调 12 | 13 | 14 | 15 | #import 16 | #import 17 | 18 | 19 | typedef void(^JKGCDDelayTaskBlock)(BOOL cancel); 20 | 21 | @interface NSObject (GCDDelayTask) 22 | 23 | 24 | 25 | #pragma mark - 通用函数 26 | 27 | 28 | /** 29 | 开始延时任务 30 | 31 | @param delayInSeconds 延时 32 | @param block 延时任务Block 33 | @return JKGCDDelayTaskBlock,通过JK_CancelGCDDelayedTask()取消延时任务。 34 | */ 35 | FOUNDATION_EXPORT JKGCDDelayTaskBlock JK_GCDDelayTaskBlock(CGFloat delayInSeconds, dispatch_block_t block); 36 | 37 | 38 | 39 | /** 40 | 取消延时任务 41 | 42 | @param delayedHandle JKGCDDelayTaskBlock 43 | */ 44 | FOUNDATION_EXPORT void JK_CancelGCDDelayedTask(JKGCDDelayTaskBlock delayedHandle); 45 | 46 | 47 | 48 | 49 | 50 | #pragma mark - 通用实例方法 51 | 52 | 53 | 54 | 55 | /** 56 | 延时任务(单位:秒),主线程回调,取调用jk_cancelGCDDelayTaskForKey:nil 取消延迟 57 | 58 | @param delayInSeconds 延时时间戳 59 | @param block 延时执行的Block,如果取消延迟任务则不调用,并且立刻释放内存。 60 | */ 61 | - (void)jk_excuteDelayTask:(CGFloat)delayInSeconds 62 | inMainQueue:(dispatch_block_t)block; 63 | 64 | 65 | 66 | 67 | /** 68 | 取消延时任务,等效[self jk_cancelGCDDelayTaskForKey:nil],对应延时方法:jk_excuteDelayTask:(CGFloat)delayInSeconds 69 | inMainQueue:(dispatch_block_t)block 70 | * 71 | */ 72 | - (void)jk_cancelGCDDelayTask; 73 | 74 | 75 | 76 | #pragma mark - 特定KEY延时任务 77 | 78 | 79 | /** 80 | 延时任务(单位:秒),主线程回调,取调用jk_cancelGCDDelayTaskForKey:key 取消延迟 81 | 82 | @param key 每个Block对应一个key,作为唯一标识 83 | @param delayInSeconds 延时 84 | @param block 延时执行的Block,如果取消延时任务则不调用,并且立刻释放内存。 85 | */ 86 | - (void)jk_excuteDelayTaskWithKey:(const char *)key 87 | delayInSeconds:(CGFloat)delayInSeconds 88 | inMainQueue:(dispatch_block_t)block; 89 | 90 | 91 | 92 | /** 93 | 取消延迟任务,并释放对应的延迟Block 94 | 95 | @param key \ 96 | * 如果key == nil,对应延时方法:jk_excuteDelayTask:(CGFloat)delayInSeconds 97 | inMainQueue:(dispatch_block_t)block; 98 | * 99 | * 如果key != nil,对应延时方法:jk_excuteDelayTaskWithKey:(const void *)key 100 | delayInSeconds:(CGFloat)delayInSeconds 101 | inMainQueue:(dispatch_block_t)block 102 | */ 103 | - (void)jk_cancelGCDDelayTaskForKey:(const char *)key; 104 | 105 | 106 | 107 | @end 108 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/App.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "version": "2.2.100", 4 | "summary": "Flutter App Framework", 5 | "description": "Flutter is Google’s UI toolkit for building beautiful", 6 | "homepage": "https://flutter.dev", 7 | "license": { 8 | "type": "MIT", 9 | "text": "Copyright 2014 The Flutter Authors. All rights reserved.\n" 10 | }, 11 | "authors": { 12 | "Flutter Dev Team": "flutter-dev@googlegroups.com" 13 | }, 14 | "source": { 15 | "path": "." 16 | }, 17 | "documentation_url": "https://flutter.dev/docs", 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "vendored_frameworks": "App.xcframework" 22 | } 23 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/Flutter.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Flutter", 3 | "version": "2.0.300", 4 | "summary": "Flutter Engine Framework", 5 | "description": "Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.\nThis pod vends the iOS Flutter engine framework. It is compatible with application frameworks created with this version of the engine and tools.\nThe pod version matches Flutter version major.minor.(patch * 100) + hotfix.", 6 | "homepage": "https://flutter.dev", 7 | "license": { 8 | "type": "MIT", 9 | "text": "Copyright 2014 The Flutter Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n * Neither the name of Google Inc. nor the names of its\n contributors may be used to endorse or promote products derived\n from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n" 10 | }, 11 | "authors": { 12 | "Flutter Dev Team": "flutter-dev@googlegroups.com" 13 | }, 14 | "source": { 15 | "http": "https://storage.flutter-io.cn/flutter_infra/flutter/3459eb24361807fb186953a864cf890fa8e9d26a/ios-release/artifacts.zip" 16 | }, 17 | "documentation_url": "https://flutter.dev/docs", 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "vendored_frameworks": "Flutter.xcframework" 22 | } 23 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/FlutterAppSDK.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FlutterAppSDK", 3 | "version": "2.0.0.6", 4 | "summary": "Flutter App SDK", 5 | "description": "SDK整合了FlutterModule编译后的产物", 6 | "homepage": "https://github.com/XiFengLang/JKFlutter", 7 | "license": { 8 | "type": "MIT", 9 | "text": "Copyright 2021 The Flutter Authors. All rights reserved.\n" 10 | }, 11 | "authors": { 12 | "Flutter Dev Team": "flutter-dev@googlegroups.com" 13 | }, 14 | "source": { 15 | "git": "http://gitlab.mvmtv.cn/flutter/flutter_app_sdk.git", 16 | "tag": "2.0.0.6" 17 | }, 18 | "documentation_url": "https://flutter.dev/docs", 19 | "platforms": { 20 | "ios": "8.0" 21 | }, 22 | "requires_arc": true, 23 | "vendored_frameworks": "*.xcframework" 24 | } 25 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/FlutterPluginRegistrant.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FlutterPluginRegistrant", 3 | "version": "0.0.1", 4 | "summary": "Registers plugins with your flutter app", 5 | "description": "Depends on all your plugins, and provides a function to register them.", 6 | "homepage": "https://flutter.dev", 7 | "license": { 8 | "type": "BSD" 9 | }, 10 | "authors": { 11 | "Flutter Dev Team": "flutter-dev@googlegroups.com" 12 | }, 13 | "platforms": { 14 | "ios": "9.0" 15 | }, 16 | "source_files": [ 17 | "Classes", 18 | "Classes/**/*.{h,m}" 19 | ], 20 | "source": { 21 | "path": "." 22 | }, 23 | "public_header_files": "./Classes/**/*.h", 24 | "static_framework": true, 25 | "pod_target_xcconfig": { 26 | "DEFINES_MODULE": "YES" 27 | }, 28 | "dependencies": { 29 | "Flutter": [ 30 | 31 | ], 32 | "flutter_boost": [ 33 | 34 | ], 35 | "package_info_plus": [ 36 | 37 | ], 38 | "sentry_flutter": [ 39 | 40 | ] 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/FlutterPluginSDK.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FlutterPluginSDK", 3 | "version": "2.0.0.6", 4 | "summary": "Flutter Module SDK", 5 | "description": "SDK整合了FlutterModule编译后的产物", 6 | "homepage": "https://github.com/XiFengLang/JKFlutter", 7 | "license": { 8 | "type": "MIT", 9 | "text": "Copyright 2021 The Flutter Authors. All rights reserved.\n" 10 | }, 11 | "authors": { 12 | "Flutter Dev Team": "flutter-dev@googlegroups.com" 13 | }, 14 | "source": { 15 | "git": "http://gitlab.mvmtv.cn/flutter/flutter_module_sdk.git", 16 | "tag": "2.0.0.6" 17 | }, 18 | "documentation_url": "https://flutter.dev/docs", 19 | "platforms": { 20 | "ios": "8.0" 21 | }, 22 | "requires_arc": true, 23 | "vendored_frameworks": "*.xcframework" 24 | } 25 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/PodSpecs.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PodSpecs", 3 | "version": "1.0.0", 4 | "summary": "Flutter Engine Framework", 5 | "description": "podspec文件汇总仓库", 6 | "homepage": "https://flutter.dev", 7 | "authors": { 8 | "Flutter Dev Team": "flutter-dev@googlegroups.com" 9 | }, 10 | "source": { 11 | "git": "https://github.com/XiFengLang/podspecs.git", 12 | "tag": "1.0.0" 13 | }, 14 | "documentation_url": "https://flutter.dev/docs", 15 | "platforms": { 16 | "ios": "8.0" 17 | }, 18 | "source_files": "*.podspec" 19 | } 20 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/flutter_boost.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flutter_boost", 3 | "version": "0.0.2", 4 | "summary": "A new Flutter plugin make flutter better to use!", 5 | "description": "A new Flutter plugin make flutter better to use!", 6 | "homepage": "http://example.com", 7 | "license": { 8 | "file": "../LICENSE.md" 9 | }, 10 | "authors": { 11 | "Alibaba Xianyu": "email@example.com" 12 | }, 13 | "source": { 14 | "path": "." 15 | }, 16 | "source_files": "Classes/**/*.{h,m,mm}", 17 | "public_header_files": [ 18 | "Classes/FlutterBoost.h", 19 | "Classes/FlutterBoostDelegate.h", 20 | "Classes/FlutterBoostPlugin.h", 21 | "Classes/container/FBFlutterViewContainer.h", 22 | "Classes/container/FBFlutterContainer.h", 23 | "Classes/FlutterBoostOptions.h", 24 | "Classes/messages.h" 25 | ], 26 | "dependencies": { 27 | "Flutter": [ 28 | 29 | ] 30 | }, 31 | "libraries": "c++", 32 | "xcconfig": { 33 | "CLANG_CXX_LANGUAGE_STANDARD": "c++11", 34 | "CLANG_CXX_LIBRARY": "libc++" 35 | }, 36 | "platforms": { 37 | "ios": "8.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/flutter_module.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flutter_module", 3 | "version": "0.0.1", 4 | "summary": "Flutter module", 5 | "description": "Flutter module - flutter_module", 6 | "homepage": "https://flutter.dev", 7 | "license": { 8 | "type": "BSD" 9 | }, 10 | "authors": { 11 | "Flutter Dev Team": "flutter-dev@googlegroups.com" 12 | }, 13 | "source": { 14 | "path": "." 15 | }, 16 | "platforms": { 17 | "ios": "9.0" 18 | }, 19 | "vendored_frameworks": "App.framework", 20 | "dependencies": { 21 | "Flutter": [ 22 | 23 | ] 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/package_info_plus.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "package_info_plus", 3 | "version": "0.4.5", 4 | "summary": "Flutter Package Info", 5 | "description": "This Flutter plugin provides an API for querying information about an application package.\nDownloaded by pub (not CocoaPods).", 6 | "homepage": "https://github.com/fluttercommunity/package_info_plus", 7 | "license": { 8 | "file": "../LICENSE" 9 | }, 10 | "authors": { 11 | "Flutter Community": "authors@fluttercommunity.dev" 12 | }, 13 | "source": { 14 | "path": "." 15 | }, 16 | "source_files": "Classes/**/*", 17 | "public_header_files": "Classes/**/*.h", 18 | "dependencies": { 19 | "Flutter": [ 20 | 21 | ] 22 | }, 23 | "platforms": { 24 | "ios": "8.0" 25 | }, 26 | "pod_target_xcconfig": { 27 | "DEFINES_MODULE": "YES", 28 | "VALID_ARCHS[sdk=iphonesimulator*]": "x86_64" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ios_module/Pods/Local Podspecs/sentry_flutter.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sentry_flutter", 3 | "version": "0.0.1", 4 | "summary": "Sentry SDK for Flutter.", 5 | "description": "Sentry SDK for Flutter with support to native through sentry-cocoa.", 6 | "homepage": "https://sentry.io", 7 | "license": { 8 | "file": "../LICENSE" 9 | }, 10 | "authors": "Sentry", 11 | "source": { 12 | "git": "https://github.com/getsentry/sentry-dart.git", 13 | "tag": "0.0.1" 14 | }, 15 | "source_files": "Classes/**/*", 16 | "public_header_files": "Classes/**/*.h", 17 | "dependencies": { 18 | "Sentry": [ 19 | "~> 7.1.3" 20 | ] 21 | }, 22 | "ios": { 23 | "dependencies": { 24 | "Flutter": [ 25 | 26 | ] 27 | }, 28 | "pod_target_xcconfig": { 29 | "DEFINES_MODULE": "YES", 30 | "VALID_ARCHS[sdk=iphonesimulator*]": "x86_64" 31 | } 32 | }, 33 | "osx": { 34 | "dependencies": { 35 | "FlutterMacOS": [ 36 | 37 | ] 38 | }, 39 | "pod_target_xcconfig": { 40 | "DEFINES_MODULE": "YES" 41 | } 42 | }, 43 | "platforms": { 44 | "ios": "9.0", 45 | "osx": "10.11" 46 | }, 47 | "swift_versions": "5.0", 48 | "swift_version": "5.0" 49 | } 50 | -------------------------------------------------------------------------------- /ios_module/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AppleDevices (1.0.0) 3 | - FDFullscreenPopGesture (1.1) 4 | - Flutter (2.0.300) 5 | - FlutterAppSDK (2.0.0.6) 6 | - FlutterPluginSDK (2.0.0.6) 7 | - JKRetractableGCDDelay (1.0.2) 8 | - Masonry (1.1.0) 9 | 10 | DEPENDENCIES: 11 | - AppleDevices 12 | - FDFullscreenPopGesture 13 | - Flutter (from `./../../flutter_module_sdk_podspec/Flutter.podspec`) 14 | - FlutterAppSDK (from `./../../flutter_module_sdk_podspec/FlutterAppSDK.podspec`) 15 | - FlutterPluginSDK (from `./../../flutter_module_sdk_podspec/FlutterPluginSDK.podspec`) 16 | - JKRetractableGCDDelay 17 | - Masonry 18 | 19 | SPEC REPOS: 20 | https://github.com/CocoaPods/Specs.git: 21 | - AppleDevices 22 | - FDFullscreenPopGesture 23 | - JKRetractableGCDDelay 24 | - Masonry 25 | 26 | EXTERNAL SOURCES: 27 | Flutter: 28 | :podspec: "./../../flutter_module_sdk_podspec/Flutter.podspec" 29 | FlutterAppSDK: 30 | :podspec: "./../../flutter_module_sdk_podspec/FlutterAppSDK.podspec" 31 | FlutterPluginSDK: 32 | :podspec: "./../../flutter_module_sdk_podspec/FlutterPluginSDK.podspec" 33 | 34 | SPEC CHECKSUMS: 35 | AppleDevices: 437bb7c4e2dd769d3e73af704adfbb1a16143624 36 | FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0 37 | Flutter: fcfd44cd2e0c1c7ed7b45046079dbf769116d228 38 | FlutterAppSDK: a8de2f0f9fbc76f6dcc7c65d970981d6738c1ea7 39 | FlutterPluginSDK: 6d14430edad5b13e804421800f6d497cfb035042 40 | JKRetractableGCDDelay: 95f9c04a3a16725aa3375274e08549f6f7363ba1 41 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 42 | 43 | PODFILE CHECKSUM: 201d306cad4a3fd68c883acffa0966ce22de13ee 44 | 45 | COCOAPODS: 1.10.1 46 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/MASCompositeConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASCompositeConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | #import "MASUtilities.h" 11 | 12 | /** 13 | * A group of MASConstraint objects 14 | */ 15 | @interface MASCompositeConstraint : MASConstraint 16 | 17 | /** 18 | * Creates a composite with a predefined array of children 19 | * 20 | * @param children child MASConstraints 21 | * 22 | * @return a composite constraint 23 | */ 24 | - (id)initWithChildren:(NSArray *)children; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/MASConstraint+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASConstraint+Private.h 3 | // Masonry 4 | // 5 | // Created by Nick Tymchenko on 29/04/14. 6 | // Copyright (c) 2014 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | 11 | @protocol MASConstraintDelegate; 12 | 13 | 14 | @interface MASConstraint () 15 | 16 | /** 17 | * Whether or not to check for an existing constraint instead of adding constraint 18 | */ 19 | @property (nonatomic, assign) BOOL updateExisting; 20 | 21 | /** 22 | * Usually MASConstraintMaker but could be a parent MASConstraint 23 | */ 24 | @property (nonatomic, weak) id delegate; 25 | 26 | /** 27 | * Based on a provided value type, is equal to calling: 28 | * NSNumber - setOffset: 29 | * NSValue with CGPoint - setPointOffset: 30 | * NSValue with CGSize - setSizeOffset: 31 | * NSValue with MASEdgeInsets - setInsets: 32 | */ 33 | - (void)setLayoutConstantWithValue:(NSValue *)value; 34 | 35 | @end 36 | 37 | 38 | @interface MASConstraint (Abstract) 39 | 40 | /** 41 | * Sets the constraint relation to given NSLayoutRelation 42 | * returns a block which accepts one of the following: 43 | * MASViewAttribute, UIView, NSValue, NSArray 44 | * see readme for more details. 45 | */ 46 | - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation; 47 | 48 | /** 49 | * Override to set a custom chaining behaviour 50 | */ 51 | - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; 52 | 53 | @end 54 | 55 | 56 | @protocol MASConstraintDelegate 57 | 58 | /** 59 | * Notifies the delegate when the constraint needs to be replaced with another constraint. For example 60 | * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks 61 | */ 62 | - (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint; 63 | 64 | - (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/MASLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * When you are debugging or printing the constraints attached to a view this subclass 13 | * makes it easier to identify which constraints have been created via Masonry 14 | */ 15 | @interface MASLayoutConstraint : NSLayoutConstraint 16 | 17 | /** 18 | * a key to associate with this constraint 19 | */ 20 | @property (nonatomic, strong) id mas_key; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/MASLayoutConstraint.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASLayoutConstraint.h" 10 | 11 | @implementation MASLayoutConstraint 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/MASViewAttribute.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * An immutable tuple which stores the view and the related NSLayoutAttribute. 13 | * Describes part of either the left or right hand side of a constraint equation 14 | */ 15 | @interface MASViewAttribute : NSObject 16 | 17 | /** 18 | * The view which the reciever relates to. Can be nil if item is not a view. 19 | */ 20 | @property (nonatomic, weak, readonly) MAS_VIEW *view; 21 | 22 | /** 23 | * The item which the reciever relates to. 24 | */ 25 | @property (nonatomic, weak, readonly) id item; 26 | 27 | /** 28 | * The attribute which the reciever relates to 29 | */ 30 | @property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; 31 | 32 | /** 33 | * Convenience initializer. 34 | */ 35 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; 36 | 37 | /** 38 | * The designated initializer. 39 | */ 40 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute; 41 | 42 | /** 43 | * Determine whether the layoutAttribute is a size attribute 44 | * 45 | * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight 46 | */ 47 | - (BOOL)isSizeAttribute; 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/MASViewAttribute.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | 11 | @implementation MASViewAttribute 12 | 13 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { 14 | self = [self initWithView:view item:view layoutAttribute:layoutAttribute]; 15 | return self; 16 | } 17 | 18 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute { 19 | self = [super init]; 20 | if (!self) return nil; 21 | 22 | _view = view; 23 | _item = item; 24 | _layoutAttribute = layoutAttribute; 25 | 26 | return self; 27 | } 28 | 29 | - (BOOL)isSizeAttribute { 30 | return self.layoutAttribute == NSLayoutAttributeWidth 31 | || self.layoutAttribute == NSLayoutAttributeHeight; 32 | } 33 | 34 | - (BOOL)isEqual:(MASViewAttribute *)viewAttribute { 35 | if ([viewAttribute isKindOfClass:self.class]) { 36 | return self.view == viewAttribute.view 37 | && self.layoutAttribute == viewAttribute.layoutAttribute; 38 | } 39 | return [super isEqual:viewAttribute]; 40 | } 41 | 42 | - (NSUInteger)hash { 43 | return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/MASViewConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | #import "MASConstraint.h" 11 | #import "MASLayoutConstraint.h" 12 | #import "MASUtilities.h" 13 | 14 | /** 15 | * A single constraint. 16 | * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view 17 | */ 18 | @interface MASViewConstraint : MASConstraint 19 | 20 | /** 21 | * First item/view and first attribute of the NSLayoutConstraint 22 | */ 23 | @property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; 24 | 25 | /** 26 | * Second item/view and second attribute of the NSLayoutConstraint 27 | */ 28 | @property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; 29 | 30 | /** 31 | * initialises the MASViewConstraint with the first part of the equation 32 | * 33 | * @param firstViewAttribute view.mas_left, view.mas_width etc. 34 | * 35 | * @return a new view constraint 36 | */ 37 | - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; 38 | 39 | /** 40 | * Returns all MASViewConstraints installed with this view as a first item. 41 | * 42 | * @param view A view to retrieve constraints for. 43 | * 44 | * @return An array of MASViewConstraints. 45 | */ 46 | + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/Masonry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Masonry.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Masonry. 12 | FOUNDATION_EXPORT double MasonryVersionNumber; 13 | 14 | //! Project version string for Masonry. 15 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 16 | 17 | #import "MASUtilities.h" 18 | #import "View+MASAdditions.h" 19 | #import "View+MASShorthandAdditions.h" 20 | #import "ViewController+MASAdditions.h" 21 | #import "NSArray+MASAdditions.h" 22 | #import "NSArray+MASShorthandAdditions.h" 23 | #import "MASConstraint.h" 24 | #import "MASCompositeConstraint.h" 25 | #import "MASViewAttribute.h" 26 | #import "MASViewConstraint.h" 27 | #import "MASConstraintMaker.h" 28 | #import "MASLayoutConstraint.h" 29 | #import "NSLayoutConstraint+MASDebugAdditions.h" 30 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/NSArray+MASAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+MASAdditions.h 3 | // 4 | // 5 | // Created by Daniel Hammond on 11/26/13. 6 | // 7 | // 8 | 9 | #import "MASUtilities.h" 10 | #import "MASConstraintMaker.h" 11 | #import "MASViewAttribute.h" 12 | 13 | typedef NS_ENUM(NSUInteger, MASAxisType) { 14 | MASAxisTypeHorizontal, 15 | MASAxisTypeVertical 16 | }; 17 | 18 | @interface NSArray (MASAdditions) 19 | 20 | /** 21 | * Creates a MASConstraintMaker with each view in the callee. 22 | * Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view 23 | * 24 | * @param block scope within which you can build up the constraints which you wish to apply to each view. 25 | * 26 | * @return Array of created MASConstraints 27 | */ 28 | - (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block; 29 | 30 | /** 31 | * Creates a MASConstraintMaker with each view in the callee. 32 | * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. 33 | * If an existing constraint exists then it will be updated instead. 34 | * 35 | * @param block scope within which you can build up the constraints which you wish to apply to each view. 36 | * 37 | * @return Array of created/updated MASConstraints 38 | */ 39 | - (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block; 40 | 41 | /** 42 | * Creates a MASConstraintMaker with each view in the callee. 43 | * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. 44 | * All constraints previously installed for the views will be removed. 45 | * 46 | * @param block scope within which you can build up the constraints which you wish to apply to each view. 47 | * 48 | * @return Array of created/updated MASConstraints 49 | */ 50 | - (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block; 51 | 52 | /** 53 | * distribute with fixed spacing 54 | * 55 | * @param axisType which axis to distribute items along 56 | * @param fixedSpacing the spacing between each item 57 | * @param leadSpacing the spacing before the first item and the container 58 | * @param tailSpacing the spacing after the last item and the container 59 | */ 60 | - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; 61 | 62 | /** 63 | * distribute with fixed item size 64 | * 65 | * @param axisType which axis to distribute items along 66 | * @param fixedItemLength the fixed length of each item 67 | * @param leadSpacing the spacing before the first item and the container 68 | * @param tailSpacing the spacing after the last item and the container 69 | */ 70 | - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/NSArray+MASShorthandAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+MASShorthandAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 22/07/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "NSArray+MASAdditions.h" 10 | 11 | #ifdef MAS_SHORTHAND 12 | 13 | /** 14 | * Shorthand array additions without the 'mas_' prefixes, 15 | * only enabled if MAS_SHORTHAND is defined 16 | */ 17 | @interface NSArray (MASShorthandAdditions) 18 | 19 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; 20 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; 21 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; 22 | 23 | @end 24 | 25 | @implementation NSArray (MASShorthandAdditions) 26 | 27 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { 28 | return [self mas_makeConstraints:block]; 29 | } 30 | 31 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { 32 | return [self mas_updateConstraints:block]; 33 | } 34 | 35 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { 36 | return [self mas_remakeConstraints:block]; 37 | } 38 | 39 | @end 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+MASDebugAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * makes debug and log output of NSLayoutConstraints more readable 13 | */ 14 | @interface NSLayoutConstraint (MASDebugAdditions) 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/ViewController+MASAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.h 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "MASUtilities.h" 10 | #import "MASConstraintMaker.h" 11 | #import "MASViewAttribute.h" 12 | 13 | #ifdef MAS_VIEW_CONTROLLER 14 | 15 | @interface MAS_VIEW_CONTROLLER (MASAdditions) 16 | 17 | /** 18 | * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute 19 | */ 20 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; 21 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; 22 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; 23 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; 24 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; 25 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; 26 | 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /ios_module/Pods/Masonry/Masonry/ViewController+MASAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.m 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "ViewController+MASAdditions.h" 10 | 11 | #ifdef MAS_VIEW_CONTROLLER 12 | 13 | @implementation MAS_VIEW_CONTROLLER (MASAdditions) 14 | 15 | - (MASViewAttribute *)mas_topLayoutGuide { 16 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 17 | } 18 | - (MASViewAttribute *)mas_topLayoutGuideTop { 19 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 20 | } 21 | - (MASViewAttribute *)mas_topLayoutGuideBottom { 22 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 23 | } 24 | 25 | - (MASViewAttribute *)mas_bottomLayoutGuide { 26 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 27 | } 28 | - (MASViewAttribute *)mas_bottomLayoutGuideTop { 29 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 30 | } 31 | - (MASViewAttribute *)mas_bottomLayoutGuideBottom { 32 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 33 | } 34 | 35 | 36 | 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /ios_module/Pods/PodSpecs/Flutter.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Flutter' 3 | s.version = '2.0.300' # 2.0.3 4 | s.summary = 'Flutter Engine Framework' 5 | s.description = <<-DESC 6 | Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. 7 | This pod vends the iOS Flutter engine framework. It is compatible with application frameworks created with this version of the engine and tools. 8 | The pod version matches Flutter version major.minor.(patch * 100) + hotfix. 9 | DESC 10 | s.homepage = 'https://flutter.dev' 11 | s.license = { :type => 'MIT', :text => <<-LICENSE 12 | Copyright 2014 The Flutter Authors. All rights reserved. 13 | 14 | Redistribution and use in source and binary forms, with or without modification, 15 | are permitted provided that the following conditions are met: 16 | 17 | * Redistributions of source code must retain the above copyright 18 | notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above 20 | copyright notice, this list of conditions and the following 21 | disclaimer in the documentation and/or other materials provided 22 | with the distribution. 23 | * Neither the name of Google Inc. nor the names of its 24 | contributors may be used to endorse or promote products derived 25 | from this software without specific prior written permission. 26 | 27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 28 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 29 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 30 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 31 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 32 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 33 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 34 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 | 38 | LICENSE 39 | } 40 | s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } 41 | s.source = { :http => 'https://storage.flutter-io.cn/flutter_infra/flutter/3459eb24361807fb186953a864cf890fa8e9d26a/ios-release/artifacts.zip' } 42 | s.documentation_url = 'https://flutter.dev/docs' 43 | s.platform = :ios, '8.0' 44 | s.vendored_frameworks = 'Flutter.xcframework' 45 | end 46 | -------------------------------------------------------------------------------- /ios_module/Pods/PodSpecs/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 溪枫狼 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ios_module/Pods/PodSpecs/PodSpecs.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'PodSpecs' 3 | s.version = '1.0.0' 4 | s.summary = 'Flutter Engine Framework' 5 | s.description = <<-DESC 6 | podspec文件汇总仓库 7 | DESC 8 | s.homepage = 'https://flutter.dev' 9 | s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } 10 | s.source = { :git => 'https://github.com/XiFengLang/podspecs.git', :tag => "#{s.version}" } 11 | s.documentation_url = 'https://flutter.dev/docs' 12 | s.platform = :ios, '8.0' 13 | s.source_files = '*.podspec' 14 | end 15 | -------------------------------------------------------------------------------- /ios_module/Pods/PodSpecs/README.md: -------------------------------------------------------------------------------- 1 | # podspecs 2 | podspecs 集合 3 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/AppleDevices/AppleDevices-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/AppleDevices/AppleDevices-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_AppleDevices : NSObject 3 | @end 4 | @implementation PodsDummy_AppleDevices 5 | @end 6 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/AppleDevices/AppleDevices-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/AppleDevices/AppleDevices-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "AppleDevice.h" 14 | 15 | FOUNDATION_EXPORT double AppleDevicesVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char AppleDevicesVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/AppleDevices/AppleDevices.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppleDevices 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/AppleDevices/AppleDevices.modulemap: -------------------------------------------------------------------------------- 1 | framework module AppleDevices { 2 | umbrella header "AppleDevices-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/AppleDevices/AppleDevices.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppleDevices 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FDFullscreenPopGesture : NSObject 3 | @end 4 | @implementation PodsDummy_FDFullscreenPopGesture 5 | @end 6 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "UINavigationController+FDFullscreenPopGesture.h" 14 | 15 | FOUNDATION_EXPORT double FDFullscreenPopGestureVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char FDFullscreenPopGestureVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FDFullscreenPopGesture 8 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture.modulemap: -------------------------------------------------------------------------------- 1 | framework module FDFullscreenPopGesture { 2 | umbrella header "FDFullscreenPopGesture-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FDFullscreenPopGesture 8 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Flutter/Flutter-xcframeworks-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Flutter/Flutter-xcframeworks.sh 2 | ${PODS_ROOT}/Flutter/Flutter.xcframework -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Flutter/Flutter-xcframeworks-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Flutter/Flutter.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Flutter 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Flutter 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Flutter/Flutter.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Flutter 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Flutter 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterAppSDK/FlutterAppSDK-xcframeworks-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/FlutterAppSDK/FlutterAppSDK-xcframeworks.sh 2 | ${PODS_ROOT}/FlutterAppSDK/App.xcframework -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterAppSDK/FlutterAppSDK-xcframeworks-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/App -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterAppSDK/FlutterAppSDK.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlutterAppSDK 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FlutterAppSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/App" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlutterAppSDK 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterAppSDK/FlutterAppSDK.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlutterAppSDK 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FlutterAppSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/App" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlutterAppSDK 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterPluginSDK/FlutterPluginSDK-xcframeworks-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/FlutterPluginSDK/FlutterPluginSDK-xcframeworks.sh 2 | ${PODS_ROOT}/FlutterPluginSDK/FlutterPluginRegistrant.xcframework 3 | ${PODS_ROOT}/FlutterPluginSDK/flutter_boost.xcframework 4 | ${PODS_ROOT}/FlutterPluginSDK/FMDB.xcframework 5 | ${PODS_ROOT}/FlutterPluginSDK/MMKV.xcframework 6 | ${PODS_ROOT}/FlutterPluginSDK/MMKVCore.xcframework 7 | ${PODS_ROOT}/FlutterPluginSDK/mmkv_flutter.xcframework 8 | ${PODS_ROOT}/FlutterPluginSDK/package_info_plus.xcframework 9 | ${PODS_ROOT}/FlutterPluginSDK/path_provider.xcframework 10 | ${PODS_ROOT}/FlutterPluginSDK/Sentry.xcframework 11 | ${PODS_ROOT}/FlutterPluginSDK/sentry_flutter.xcframework 12 | ${PODS_ROOT}/FlutterPluginSDK/shared_preferences.xcframework 13 | ${PODS_ROOT}/FlutterPluginSDK/sqflite.xcframework -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterPluginSDK/FlutterPluginSDK-xcframeworks-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/FlutterPluginRegistrant 2 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost 3 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB 4 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV 5 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore 6 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter 7 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus 8 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider 9 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry 10 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter 11 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences 12 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterPluginSDK/FlutterPluginSDK.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlutterPluginSDK 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FlutterPluginSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FlutterPluginRegistrant" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry" "${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost" "${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus" "${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlutterPluginSDK 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/FlutterPluginSDK/FlutterPluginSDK.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlutterPluginSDK 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FlutterPluginSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FlutterPluginRegistrant" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry" "${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost" "${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus" "${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlutterPluginSDK 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/JKRetractableGCDDelay/JKRetractableGCDDelay-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/JKRetractableGCDDelay/JKRetractableGCDDelay-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_JKRetractableGCDDelay : NSObject 3 | @end 4 | @implementation PodsDummy_JKRetractableGCDDelay 5 | @end 6 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/JKRetractableGCDDelay/JKRetractableGCDDelay-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/JKRetractableGCDDelay/JKRetractableGCDDelay-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "NSObject+GCDDelayTask.h" 14 | 15 | FOUNDATION_EXPORT double JKRetractableGCDDelayVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char JKRetractableGCDDelayVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/JKRetractableGCDDelay/JKRetractableGCDDelay.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/JKRetractableGCDDelay 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/JKRetractableGCDDelay/JKRetractableGCDDelay.modulemap: -------------------------------------------------------------------------------- 1 | framework module JKRetractableGCDDelay { 2 | umbrella header "JKRetractableGCDDelay-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/JKRetractableGCDDelay/JKRetractableGCDDelay.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/JKRetractableGCDDelay 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Masonry/Masonry-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Masonry/Masonry-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Masonry : NSObject 3 | @end 4 | @implementation PodsDummy_Masonry 5 | @end 6 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Masonry/Masonry-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Masonry/Masonry-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "MASCompositeConstraint.h" 14 | #import "MASConstraint+Private.h" 15 | #import "MASConstraint.h" 16 | #import "MASConstraintMaker.h" 17 | #import "MASLayoutConstraint.h" 18 | #import "Masonry.h" 19 | #import "MASUtilities.h" 20 | #import "MASViewAttribute.h" 21 | #import "MASViewConstraint.h" 22 | #import "NSArray+MASAdditions.h" 23 | #import "NSArray+MASShorthandAdditions.h" 24 | #import "NSLayoutConstraint+MASDebugAdditions.h" 25 | #import "View+MASAdditions.h" 26 | #import "View+MASShorthandAdditions.h" 27 | #import "ViewController+MASAdditions.h" 28 | 29 | FOUNDATION_EXPORT double MasonryVersionNumber; 30 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 31 | 32 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Masonry/Masonry.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Masonry/Masonry.modulemap: -------------------------------------------------------------------------------- 1 | framework module Masonry { 2 | umbrella header "Masonry-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Masonry/Masonry.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_FlutterBoostPro : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_FlutterBoostPro 5 | @end 6 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/AppleDevices/AppleDevices.framework 3 | ${BUILT_PRODUCTS_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework 4 | ${BUILT_PRODUCTS_DIR}/JKRetractableGCDDelay/JKRetractableGCDDelay.framework 5 | ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework 6 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter/Flutter.framework/Flutter 7 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/App/App.framework/App 8 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost/flutter_boost.framework/flutter_boost 9 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB/FMDB.framework/FMDB 10 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV/MMKV.framework/MMKV 11 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore/MMKVCore.framework/MMKVCore 12 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter/mmkv_flutter.framework/mmkv_flutter 13 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus/package_info_plus.framework/package_info_plus 14 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider/path_provider.framework/path_provider 15 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry/Sentry.framework/Sentry 16 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter/sentry_flutter.framework/sentry_flutter 17 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences/shared_preferences.framework/shared_preferences 18 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite/sqflite.framework/sqflite -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppleDevices.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FDFullscreenPopGesture.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JKRetractableGCDDelay.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework 6 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/App.framework 7 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_boost.framework 8 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework 9 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MMKV.framework 10 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MMKVCore.framework 11 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mmkv_flutter.framework 12 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework 13 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework 14 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework 15 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sentry_flutter.framework 16 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework 17 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/AppleDevices/AppleDevices.framework 3 | ${BUILT_PRODUCTS_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework 4 | ${BUILT_PRODUCTS_DIR}/JKRetractableGCDDelay/JKRetractableGCDDelay.framework 5 | ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework 6 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter/Flutter.framework/Flutter 7 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/App/App.framework/App 8 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost/flutter_boost.framework/flutter_boost 9 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB/FMDB.framework/FMDB 10 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV/MMKV.framework/MMKV 11 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore/MMKVCore.framework/MMKVCore 12 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter/mmkv_flutter.framework/mmkv_flutter 13 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus/package_info_plus.framework/package_info_plus 14 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider/path_provider.framework/path_provider 15 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry/Sentry.framework/Sentry 16 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter/sentry_flutter.framework/sentry_flutter 17 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences/shared_preferences.framework/shared_preferences 18 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite/sqflite.framework/sqflite -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppleDevices.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FDFullscreenPopGesture.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JKRetractableGCDDelay.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework 6 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/App.framework 7 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_boost.framework 8 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework 9 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MMKV.framework 10 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MMKVCore.framework 11 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mmkv_flutter.framework 12 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework 13 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework 14 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework 15 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sentry_flutter.framework 16 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework 17 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks-Test-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/AppleDevices/AppleDevices.framework 3 | ${BUILT_PRODUCTS_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework 4 | ${BUILT_PRODUCTS_DIR}/JKRetractableGCDDelay/JKRetractableGCDDelay.framework 5 | ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework 6 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter/Flutter.framework/Flutter 7 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/App/App.framework/App 8 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost/flutter_boost.framework/flutter_boost 9 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB/FMDB.framework/FMDB 10 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV/MMKV.framework/MMKV 11 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore/MMKVCore.framework/MMKVCore 12 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter/mmkv_flutter.framework/mmkv_flutter 13 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus/package_info_plus.framework/package_info_plus 14 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider/path_provider.framework/path_provider 15 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry/Sentry.framework/Sentry 16 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter/sentry_flutter.framework/sentry_flutter 17 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences/shared_preferences.framework/shared_preferences 18 | ${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite/sqflite.framework/sqflite -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-frameworks-Test-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppleDevices.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FDFullscreenPopGesture.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JKRetractableGCDDelay.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework 6 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/App.framework 7 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_boost.framework 8 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework 9 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MMKV.framework 10 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MMKVCore.framework 11 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mmkv_flutter.framework 12 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework 13 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework 14 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework 15 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sentry_flutter.framework 16 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework 17 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_FlutterBoostProVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_FlutterBoostProVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices" "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture" "${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_ROOT}/Flutter" "${PODS_ROOT}/FlutterAppSDK" "${PODS_ROOT}/FlutterPluginSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/App" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FlutterPluginRegistrant" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry" "${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost" "${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus" "${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices/AppleDevices.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay/JKRetractableGCDDelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "App" -framework "AppleDevices" -framework "FDFullscreenPopGesture" -framework "FMDB" -framework "Flutter" -framework "FlutterPluginRegistrant" -framework "Foundation" -framework "JKRetractableGCDDelay" -framework "MMKV" -framework "MMKVCore" -framework "Masonry" -framework "Sentry" -framework "UIKit" -framework "flutter_boost" -framework "mmkv_flutter" -framework "package_info_plus" -framework "path_provider" -framework "sentry_flutter" -framework "shared_preferences" -framework "sqflite" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_FlutterBoostPro { 2 | umbrella header "Pods-FlutterBoostPro-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices" "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture" "${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_ROOT}/Flutter" "${PODS_ROOT}/FlutterAppSDK" "${PODS_ROOT}/FlutterPluginSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/App" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FlutterPluginRegistrant" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry" "${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost" "${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus" "${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices/AppleDevices.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay/JKRetractableGCDDelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "App" -framework "AppleDevices" -framework "FDFullscreenPopGesture" -framework "FMDB" -framework "Flutter" -framework "FlutterPluginRegistrant" -framework "Foundation" -framework "JKRetractableGCDDelay" -framework "MMKV" -framework "MMKVCore" -framework "Masonry" -framework "Sentry" -framework "UIKit" -framework "flutter_boost" -framework "mmkv_flutter" -framework "package_info_plus" -framework "path_provider" -framework "sentry_flutter" -framework "shared_preferences" -framework "sqflite" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /ios_module/Pods/Target Support Files/Pods-FlutterBoostPro/Pods-FlutterBoostPro.test.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices" "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture" "${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_ROOT}/Flutter" "${PODS_ROOT}/FlutterAppSDK" "${PODS_ROOT}/FlutterPluginSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/App" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FMDB" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FlutterPluginRegistrant" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKV" "${PODS_XCFRAMEWORKS_BUILD_DIR}/MMKVCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Sentry" "${PODS_XCFRAMEWORKS_BUILD_DIR}/flutter_boost" "${PODS_XCFRAMEWORKS_BUILD_DIR}/mmkv_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/package_info_plus" "${PODS_XCFRAMEWORKS_BUILD_DIR}/path_provider" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sentry_flutter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/shared_preferences" "${PODS_XCFRAMEWORKS_BUILD_DIR}/sqflite" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppleDevices/AppleDevices.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FDFullscreenPopGesture/FDFullscreenPopGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JKRetractableGCDDelay/JKRetractableGCDDelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "App" -framework "AppleDevices" -framework "FDFullscreenPopGesture" -framework "FMDB" -framework "Flutter" -framework "FlutterPluginRegistrant" -framework "Foundation" -framework "JKRetractableGCDDelay" -framework "MMKV" -framework "MMKVCore" -framework "Masonry" -framework "Sentry" -framework "UIKit" -framework "flutter_boost" -framework "mmkv_flutter" -framework "package_info_plus" -framework "path_provider" -framework "sentry_flutter" -framework "shared_preferences" -framework "sqflite" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | --------------------------------------------------------------------------------