- Added static methods for global cell configuration.
- Added default style configuration for the color palette, including background colors for tables and cells.
- Added color palette theme tool and test cases
- Added punctuation marks by default for speech recognition
- Added data and encoding parameters to SSE requests
- Compatibility with iOS 26 and Xcode 26
- Fixed a crash issue when enabling the new TabBarController style on iOS 26
- Fixed an issue with toolBar height calculation on iOS 26
- Fixed an issue with the image cropping component compatibility on iOS 26
- Added a new asynchronous loading hook method for WebView
- Added a new method for obtaining the model file path in Database
- Split the Location, Microphone, and Speech submodule codes and optimize package permission warnings
- AlertPlugin and ToastPlugin support await coroutine calls
- Added Cloud submodule to manage iCloud data and file plugins
- PurchaseManager adds sync and product methods
- Compatible with Xcode 26, minimum compatibility with Swift 5.10
- Adapted to UISceneDelegate, migration and upgrade required
- AppDelegate and SceneDelegate lifecycle adjustments
- Added BlocConsumer component for Bloc mode
- Added a method to retrieve all cache keys in the Cache component
- Synchronized SmartCodable to the latest version
- Due to Xcode 26 requirements, apps must adapt to UISceneDelegate and must be migrated and upgraded.
- If using AppResponder and SceneResponder, migrate and upgrade to the new lifecycle methods.
- Migrated IgnoredKey to SmartIgnored. If you encounter other errors, please refer to the Example project.
- Added methods for monitoring and sending Darwin cross-process notifications
- Added hide method for GuideView
- Modified the default path of database and file cache to Application Support directory
- Added the Purchase in-app payment plugin submodule
- Synchronize SmartCodable to the latest version 5.0.14
- Refactor the submodule list, use as needed, and reduce the size of the core module
- Add Bluetooth, motion, and voice recognition permission management, and change the microphone to built-in permission
- ImagePlugin splits out the ImageCoderPlugin encoding plug-in
- Add AudioRecorder recording and voice recognition components
- Add SwiftSpeech instant input recognition SwiftUI component
- Add ObjectMapper model plug-in
- Add Alamofire SSE request extension
- Remove JSONModel component and KeyMappable protocol
- Add MappedCodableModel and AbstractParameter parameter
- Abstract ImageCropControllerProtocol protocol, which can be implemented by the application
- Since the submodule list has been refactored, the old version of the submodule needs to be migrated to the new version of the submodule list
- Please migrate JSONModel to SmartModel or MappableModel
- If you encounter code errors, please migrate to new class names and method names, or refer to the Example project
- File log supports limiting the maximum file size, and adds a flush method
- Router adds an openURL coroutine method, and Context adds a complete method
- Synchronize SmartCodable to the latest version 5.0.10, support SmartSubclass macros, etc.
- Fix the problem of getting path path by FileManager.pathGroup method
- Synchronize SmartCodable to the latest version 4.4.0
- Added SmartModelConfiguration global encoding and decoding configuration
- Synchronize SmartCodable to the latest version 4.3.9
- Optimize FWSwiftUI/Module to only depend on FWSwiftUI/Plugin
- Code optimization, fix Swift Package Manager 5.x compilation problem
- Split FWUIKit submodules, refactor submodule list, CocoaPods and SPM projects need to migrate and adapt
- Remove JSONModel read and write memory method, please implement KeyMappable or migrate to SmartModel
- Refactor Loader implementation, add AsyncLoader, add file Logger, Logger supports filtering grouping
- HTTPRequest adds request end callback, RequestFilter supports throws throwing exception
- Remove obsolete code, refactor some class and method naming, if you encounter code errors, please migrate and adapt
- Since the submodule list has been refactored, the old version of the submodule needs to be migrated to the new version of the submodule list
- Migrate JSONModel read and write memory method to KeyMappable method or use SmartModel, etc.
- If you encounter other compilation errors, please migrate to the new class name and method name, or refer to the Example project
- SmartCodable component introduced, new SmartModel model compatible with AnyModel|AnyArchive protocol, gradual migration is recommended
- MMKV cache plug-in, MMAPValue property wrapper component added
- Cache component changed to generic mode, migration and adaptation required
- Archiver component changed to generic mode, registerType is no longer required, migration and adaptation required
- Added tools and methods such as DNS resolution and VPN connection check
- Decimal and CGFloat are compatible with BasicType protocol
- JSONModel memory reading and writing method is unstable, please use KeyMappable method or migrate to SmartModel, memoryMode method will be removed in the next version
- After the Archiver component is changed to a generic method, registerType is no longer required. If you need to be compatible with the old version of Any type data, the usage method remains the same as before
- After Cache component is changed to generic mode, if you encounter code errors, you can convert as? T to as T?
- The next major version will split the UIKit submodules, refactor the on-demand loading method of submodules, and remove obsolete code. Stay tuned.
- Fixed the issue that the dimmingColor of the ViewTransition component does not occupy the full space when switching to horizontal screen
- Added the appendURL method in Router to splice query parameters
- ViewStyle supports extending custom styles based on view types and removes the default style
- Compatible with Xcode 16.1
- Split uncommonly used Views and Services into FWPlugin/Module submodules, which can be imported as needed
- Remove the network request plugin mockEnabled, please use the NetworkMocker.register(for:) method
- Added GuideView guide view component
- PopupMenu supports custom view customView
- Optimize the method of quickly creating tableView and collectionView
- Added UISearchController test case
- Compatible with the latest version of Alamofire 5.10.0
- Added UIImage long edge scaling tool method
- Moved VersionManager to Service submodule
- Opened WebViewJSBridge.WeakProxy for extension
- Compatible with Swift 6, code marks MainActor, Sendable, nonisolated, etc., easy to write safer code
- Compatible with iOS 18, ViewIntrospect adds iOS 18 related variables
- Refactor the proportional scaling implementation scheme, and related methods support non-main thread calls
- Add SendableValue object to solve the problem of passing parameters of any object Sendable
- Add observe method related to Message starting with safe, used for main thread calling listener handle
- Add ProtectedValue, LockingProtocol and other thread safety tool classes
- Add MainActor.runDeinit method to uniformly handle deinit calling main thread code problems
- Router, JSBridge component related methods mark MainActor main thread calls, need to migrate and adapt
- Remove the methods marked as deprecated in version 5.x, please use the new API to replace the implementation, need to migrate and adapt
- Refactor the height acquisition methods of the global status bar, navigation bar, tab bar, etc., and give priority to dynamic acquisition and caching
- To adapt to Swift 6, you need to fix the compilation errors of related codes after marking MainActor, Sendable, and nonisolated, and you need to migrate and adapt
- To adapt to iOS 18, if you use the ViewIntrospect component, you need to adapt to v18 related variables, and you need to migrate and adapt
- To adapt to Plugin, you need to synchronously mark MainActor, Sendable, etc. when implementing custom Plugins, and you need to migrate and adapt
- If the main thread needs to call the Message-related observe listener handle, please migrate to the corresponding method starting with safe
- If you need to handle the problem of deinit calling the main thread code, please migrate to use the MainActor.runDeinit method
- If the main project opens Swift 6 compilation, HTTPRequest request subclasses, etc. need to be synchronously marked as
@unchecked Sendable - The obsolete methods of version 5.x have been removed. Please use the new Api to replace the implementation (such as chain=>layoutChain, etc.), and you need to migrate and adapt
- After fixing the compilation error, you need to test whether the related functions are normal (such as the height of the status bar, navigation bar, MainActor related functions, etc.)
- For more usage examples, please refer to the Example project
- Compatible with Swift 5.8 and SwiftPackageIndex
- Mark WeakObject as deprecated, please migrate to WeakValue
- Added isIpod and pointHalf tool methods
- Fixed the issue that performBlock method does not use queue parameter
- Fixed the judgment method of isMac in iOS13 system
- Adaptive global static bar is highly compatible with iPhone15, iPhone16 and other series models
- DispatchQueue adds runSyncIf related methods
- AssetManager preview method adds size parameter, default nil to get screen size
- Mark UIDevice.isLandscape as obsolete, please migrate to UIScreen.isInterfaceLandscape
- Runtime adds safe access value and setValue methods
- Mediator and Plugin support default search for current module to remove Protocol implementation class
- WebView adds injectWindowClose property to intercept window.close event
- BarStyle hidden judgment compatible view isHidden
- Optimize the calculation method of tabBarHeight when hidesBottomBarWhenPushed is turned on and the controller transitions
- Add inAncestorView parameter to the view transition method
- Fixed the issue that setting statusBarHidden did not take effect
- Refactor Test asynchronous test, support custom testSuite and manual call, migration and upgrade required
- PluginView parameter optimized to AttributedStringParameter
- Thread-safe processing of tempObject and allBoundObject
- DrawerView adds draggingAreaBlock configuration and springAnimation configuration
- Optimize the method of folding the specified view effect when scrolling ScrollView
- Added a method to achieve the effect of folding a specified view when scrolling ScrollView
- ViewModel renamed to ObservableViewModel, marked as deprecated, migration and upgrade required
- ViewProtocol marked as deprecated, SetupViewProtocol protocol added and related methods automatically called, migration and upgrade required
- EventViewProtocol general event view protocol added, optional use
- Optimize autoMatchDimension to generate constraints as required to prevent conflicts with imageView automatic constraints
- autoMatchDimension supports dynamic switching on or off
- UIView adds autoMatchDimension to handle issues such as fixed image height and adaptive width size layout
- Added AnyChainable protocol to support chain calls, NSObject implements chainValue and chainBlock chain methods by default
- Added ArrayResultBuilder to implement functions similar to SwiftUI layout code
- SwiftUI added AttributedText rich text component, compatible with NSAttributedString display
- SwiftUI.Text supports multiple text splicing, compatible with ArrayResultBuilder
- Modified the parameter name of some SwiftUI tool methods from builder to content
- NSAttributedString supports multiple text splicing, compatible with ArrayResultBuilder
- UIView added arrangeSubviews and arrangeLayout methods, compatible with ArrayResultBuilder
- UILabel is compatible with font and textAlignment settings when clicking attributedText
- UITextView supports getting text style attributes of the click position, similar to UILabel
- Added Shortcut tool method, the original method is marked as deprecated and will be deleted in the next version, it is recommended to migrate gradually
- Compatible with SwiftPackageIndex
- Compatible with Swift5.8 compilation
- UIButton adds contentCollapse property to quickly handle button shrinkage issues
- Compatible with SwiftPackageIndex
- Added UITableView and UICollectionView methods for calculating height and frame
- Fixed the issue that WebView configuration reuseConfigurationBlock did not take effect
- Compatible with Xcode16, fix Cocoapods submodule compilation error
- Modify version number acquisition and comparison tool methods to support minor versions
- Modify Autoloader to load static methods and class methods starting with load by default
- Compatible with Xcode16, fix compilation errors
- SwiftUI component ViewIntrospect adds v18 when conditionally compiled in Xcode16, compatible with iOS18, and can be migrated and adapted
- Xcode16 conditionally compiled compatible with iOS18, adds setTabBarHidden method
- Optimize Optional.isNil and deepUnwrap methods, remove _OptionalProtocol
- Cocoapods submodule FWPlugin/Macros compatible with Xcode16
- Refactor the Language multi-language implementation to optimize performance
- Refactor ToastPlugin to support detail attributes and more custom attributes
- Refactor ToastView to support custom attributes such as position and attributedMessage
- Optimize the animation effect of TabbarController test cases
- Compatible with Swift Package Index
- Fixed the issue of SDWebImage plugin rendering SDAnimatedImageView
- Added a new String detection link tool method
- Optimized the recursive search for subview method names
- layoutKey is compatible with accessibilityIdentifier
- Unified and optimized the test case navigation bar button style
- Added Later|Earlier related adaptation methods to the SwiftUI component ViewIntrospect, no need to hard-code each version number
- ToolbarView opens updateHeight and updateLayout methods to allow subclasses to override
- The setContentModeAspectFill method is renamed to scaleAspectFill
- Compatible with Xcode16, fix compilation errors
- Added autoScale parameter to AutoLayout layout extension method
- Disable autoScale automatic proportional scaling in all component layout codes of the framework
- Added PopupViewControllerProtocol popup controller protocol, supporting bottom and center popups, etc.
- Added RectCornerView to handle irregular rounded corners
- Refactored ViewTransition component, added edge parameter to support four directions, etc.
- Transition animation interactEnabled and interactScreenEdge interactive gestures can coexist
- Added ViewProtocol view specification protocol, optional use
- Added SingletonProtocol for plug-in to find singleton
- Added setupBusiness business initialization hook to AppResponder
- Added ignorable return value to the method of setting navigation bar button
- Optimized framework class to no longer inherit NSObject when not necessary
- Fixed compilation error when BUILD_LIBRARY_FOR_DISTRIBUTION is enabled
- Fixed the issue that some OC projects may conflict with the Swift.h bridging header file automatically generated by the framework
- Fixed the issue that the ImageCropController custom toolbar button is invalid after clicking
- Added navigation bar childProxyEnabled switch to control the child status bar style
- Optimize the status bar style processing of ImagePreview components
- Optimize the status bar style processing of ImagePicker and ImagePreview components
- Optimize the status bar style processing of navigation controller child
- Added ViewStyle and methods for defining and using common view styles
- setBorderView disables automatic layout scaling
- emptyInsets|toastInsets disables automatic layout scaling
- PasscodeView|WebView disables automatic layout scaling
- Added RequestViewControllerProtocol to quickly handle controller network requests
- BatchRequest, ChainRequest implement HTTPRequestProtocol protocol
- ViewModel moved to Module submodule, compatible with UIKit and SwiftUI
- UITableView shortcut initialization method adds tableViewConfiguration configuration handle
- Optimize the implementation of reloadData(completion:) method
- JSBridge supports finding the default DefaultBridge: development
- CacheKeychain supports custom Service names
- CacheUserDefaults is compatible with AnyArchivable protocol
- Remove the ArchivedValue attribute annotation, and the StoredValue attribute annotation is compatible with the AnyArchivable protocol
- Added AnyArchivable protocol, which can quickly archive models and is compatible with Codable, CodableModel and JSONModel
- Archiver, UserDefault, Cache, Database, Keychain and other components are compatible with AnyArchivable protocol objects
- Added ArchivedValue attribute annotation to quickly archive and save AnyArchivable objects to UserDefaults
- Authorize and Toolkit related components support async|await coroutine calls
- Reconstruct the AuthorizeLocation component to support async|await coroutine calls
- Reconstruct the Authorize component, open the implementation class and add the Error parameter, which requires migration and adaptation.
- Added new biometric authorization plug-in AuthorizeBiometry, which needs to introduce the FWPlugin/Biometry submodule
- Fixed the problem of encoding nil when requestArgument nested Optional parameters in GET request
- Split the second-level sub-modules, CocoaPods can introduce the required sub-modules on demand
- Reconstruct the FWExtension submodule into FWPlugin, which is compatible with CocoaPods and SPM and needs to be migrated and adapted.
- Split rarely used Views and Services into FWPlugin/Module sub-modules, which can be introduced as needed
- Code reconstruction, remove all classification extension methods starting with fw_, only support Wrapper(fw.) method calling
- Reconstruct MulticastBlock to support priority and asynchronous calls
- Remove the didLayoutSubviews state from the controller life cycle
- ImagePlugin adds queryMemoryData option
- Reconstruct the FWExtension submodule to be compatible with CocoaPods and SPM. It is necessary to migrate the FWMacro related submodules to FWExtension.
- Integrate PrivacyInfo.xcprivacy file
- Fixed the issue that addColor mixed color does not take effect
- HTTPRequest method handle parameter supports Self, no type conversion is required
- HTTPRequest opens the contextAccessory attribute and can be customized
- When a BatchRequest request fails and stops, only other requests are canceled. Add the addRequest method.
- Complete implementation in pure Swift, removing FWObjC submodule
- Autoloader's autoload method is changed to Swift calling mechanism
- Reconstruct attribute KVO monitoring and add swift native observation method
- Reconstruct error capture ErrorManager, pure Swift implementation
- Mediator adds Delegate mode, AppResponder can be used optionally
- Reconstruct UIViewController life cycle monitoring and add ViewControllerLifecycleObservable protocol
- Added commonly used UIKit tool methods
- Autoloader.autoload is no longer automatically called. It can be manually called at startup or inherited from AppResponder. Migration and upgrade are required.
- The default lifecyleState of UIViewController is changed to nil. It needs to implement LifecycleObservable or enable monitoring to have a value. It needs to be migrated and upgraded.
- Due to the Swift implementation mechanism, the associated properties can no longer be accessed during didDeinit of the UIViewController life cycle and need to be migrated and upgraded.
- The API related to ExceptionManager error capture has been changed to ErrorManager, which needs to be migrated and upgraded.
- Fix Xcode compilation warnings, replace and remove deprecated methods
- Remove the obsolete method of obtaining the operator and modify the method of obtaining the network type
- Added Optional shortcut method, optimized CGFloat, etc. and no longer implement BasicType
- Added new macros such as MappedValueMacro to quickly write interface data models. FWMacro/Macros submodules need to be included.
- Remove KeyMapping mode related methods from CodableModel and JSONModel because they are complex to use and do not support inheritance
- MappedValue supports ignored configuration
- JSONModel annotation MappedValue is compatible with ValidatedValue
- Added KeyMappable protocol, compatible with CodableModel and JSONModel
- Added MappedValue attribute annotation, compatible with CodableModel and JSONModel
- Modify JSONModel. After implementing the KeyMappable protocol, it will no longer directly read and write memory. It is recommended to migrate gradually.
- Modify Router.Parameter synchronously. When inheriting, new properties must be marked with MappedValue.
- Codable supports parsing Any, Any dictionary and Any array type data
- Reconstruct BadgeView to unify and simplify the use of badgeOffset
- Modify the mirrorDictionary method to no longer filter attributes starting with underscores
- JSONModel is compatible with Xcode15.3
- Added delayPlaceholder option to the picture plug-in
- TabBarController adds imageInsets attribute
- Added global fast ceil extension method
- Added controller compatible with TabBar adaptation method when using safeArea layout
- Added new controller quick customization Toast|Empty plug-in method
- The routing openURL method parameter url is changed to Optional
- Controller navigationBarHeight is compatible with custom navigationBarHidden settings
- Fixed the problem of countLabel not being updated due to position change of customBlock in image preview plug-in
- Added RoundedCornerView to handle semi-circle corner problem without frame
- Modify NavigationStyle to get the current status when it is not set
- PopupMenu supports specifying container views. Modify showsMaskView to hide maskView. Migration testing is required.
- Optimize Database performance and increase ModelFields parsing cache
- After two years of reconstruction, the Swift version is released, compatible with iOS13+ and no longer compatible with OC
- Supports advanced features such as Swift coroutine async, await, property annotation propertyWrapper, etc.
- Completely replaceable UI plug-in management for easy project customization
- Replaceable picture library and network request layer, with built-in extensions compatible with SDWebImage, Alamofire, etc.
- Several years of accumulation of online projects, two years of painstaking effort in refactoring the Swift version, everything you want is available here
- Thanks to ChatGPT, thanks to Codeium, and thanks to the authors of all open source libraries used
- Finally, thank myself. It’s really not easy to persevere through countless days and nights.
- Autoloader only loads static class methods by default and needs to be migrated and upgraded.
- The Router routing binding method API has changed and needs to be migrated and upgraded.
- JSBridge binding method API has changed and needs to be migrated and upgraded.
- HTTPRequest network request API has changed and needs to be migrated and upgraded.
- Other compilation errors need to be fixed using the new API and tested to see if the relevant functions are normal.
- To use the sample code, please refer to the Example project
- Compatible with Xcode15.3, fix Archive failure problem
- UISwitch supports custom offTintColor
- Fixed the issue of incomplete text display when UILabel customizes contentInset.
- BannerView supports NSAttributedString, adding new spacing settings and other attributes
- Compatible with Xcode15, iOS17
- Synchronize SwiftUI component Introspect to the latest version
- Optimize SwiftUI refresh and add plug-in usage
- Fixed the problem that the QR code scanning component may be called back multiple times in succession when using it.
- Image plug-in adds new methods to read local cache and clear all caches
- Fixed the issue of occasional transition animation exception when the ZoomImageView image cache exists
- Fix the problem that the callback order of the system image selector is incorrect and multiple callbacks are triggered
- Optimized image compression decrement rate default value is 0.3
- Add UICollectionView drag sorting method
- Added an option to always perform animation when modifying progress in Lottie view
- Keyboard management adds keyboardDistanceBlock custom handle
- Added batch compression image processing method in the background
- The system image selector supports custom cropping when selecting a single image
- Optimize the system image selector to close the interface and call back after processing the image
- Added shortcut to create NSParagraphStyle method
- UITextView added quick setting lineHeight method
- Modify the origin meaning of cursorRect to offset
- Router routing supports *id format parameters
- PopupMenu adds custom style attributes
- NSAttributedString shortcut initialization method adds attributes parameter
- Added layoutFrame calculation method for UICollectionView
- RefreshPlugin adds a customBlock parameter, which needs to be adapted
- RefreshView supports custom height, remove the original UIScrollView plug-in height setting, need to adapt
- The picture selector adds a switch to enable the navigation bar property
- Modify the filter method behavior of MulticastDelegate, need to adapt
- Modifying autoScale is only effective for the current view, no longer looking for the parent view (unstable)
- Compatible with loadingFinished and setting before reloadData can also take effect
- Fixed the problem that finishedView was not refreshed when isDataEmpty changed but finished did not change
- Fix the problem that the offset and collapse methods are not automatically scaled and reversed when the automatic layout is scaled
- If auto scaling layout is enabled, check whether there is a view with autoScale set separately and adapt it
- If auto scaling layout is enabled, check the collapse and offset methods with parameters in LayoutChain, and change to automatic scaling
- If auto scaling layout is enabled and the layout constraint requires a fixed value, use the constant method of LayoutChain
- By default, only the QR code is enabled for scanning the code, and you can specify the bar code, etc.
- Scan code to add zoom gesture handle
- The pull-up add-on does not display finishedView if the data is empty
- The pull-up append plugin padding supports negative numbers
- Added Swift version CachedValue annotation
- Added Swift version table and collection Cell simple exposure scheme
- Added Swift version parsing server response time method
- Added shortcut method to start background task
- Refactor and synchronize QR code scanning component ScanView
- Added maskViewColor property to PopupMenu
- SegmentedControl adds a custom layer handle
- Added a tool method for judging network request error types
- The custom Sheet component supports hiding the cancel button
- Added database migration protocol method
- Added currentDotSize setting to PageControl
- MulticastBlock adds the main thread call attribute
- Added Button packaging method in SwiftUI
- Refactor the NumberFormatter constructor
- The method of playing system sound files supports completion callback
- Optimize SwiftUI display ToastPlugin related methods
- Fix SwiftUI occasional ToastPlugin re-display problem when returning to the interface
- Added AutoLayout batch layout method, layout conflict debugging and optimization
- EmptyPlugin adds a method to get the view being displayed
- ToastPlugin adds a method to get the view being displayed
- Little red dot BadgeView supports custom size and offset
- WebView supports window.close to close the interface by default
- Optimize whether the SwiftUI control can continue to append
- Fix the problem that the occasional style does not take effect after customizing the customBlock on the empty interface
- EmptyPlugin supports NSAttributedString parameters
- Added shortcut to create NSAttributedString method
- Added methods for calculating font height and calculating baselineOffset
- Remove the barTransitionNeedsUpdate method, the framework handles it automatically
- Remove global autoFlat switch, migrate to UIFont and UIView configuration
- Fix the problem that the SegmentedControl text is not centered in some cases
- SwiftUI adds commonly used relative layout methods
- AutoLayout supports switching to disable multiple layout constraints
- JSONModel supports underscore and camel case conversion
- Newly added global proportional scaling pixel rounding switch configuration
- Fix the loss of precision of JSONModel large number conversion to string on iOS15 and above
- Add background color and other configurations for the SegmentedControl component
- Added finishedBlock property in the pull-up view
- Add global flat shortcut method, remove pointHalf constant
- LayoutChain supports to collapse multiple constraints at the same time
- Fixed the occasional DynamicLayout crash in iOS14
- Fix open mailto, sms jump link problem
- Fixed the problem that the polling request was not completely canceled when it was stopped
- A new isCancelled handle is added to the network request to handle the scene where the request is cancelled.
- Added SwiftUI shortcut binding List, ScrollView refresh and append, empty interface components
- New refresh component showsFinishedView configures whether to display the finished view
- Modify the global static color configuration method to handle configuration
- Modify the parameters of the SwiftUI input box auto-focus method
- Unify ViewControllerState and ViewState as ViewState enumeration
- Synchronize the latest code of the Introspect component, compatible with iOS16
- Fix SwiftUI processing List, ScrollView compatible components bug
- Added SwiftUI to handle List and ScrollView compatible components
- Added SwiftUI to handle Divider compatible components
- Added SwiftUI input box configuration handle component
- Added SwiftUI button highlighting and disabling style components
- Modify SwiftUI's ViewModel component as a protocol
- Fix SwiftUI refresh component, border rounded method bug
- Added shortcut processing automatic layout contraction method
- Added view batch automatic layout method
- Routing supports strict mode, it responds only when it matches exactly, and it is disabled by default
- Optimize the request retry method, support -1 unlimited times
- Optimize SwiftUI font method, same as UIKit method
- Fixed keyboard management touchResign need to click twice to trigger the button event problem
- Added the barTransitionNeedsUpdate method to handle the scene where the transition style of the navigation bar changes
- PagingView supports reuse, fix the problem that reloadData does not reset contentOffset
- The controller adds allowsBarAppearance to control whether to modify the navigation bar style
- Added dismissingScaleEnabled configuration to the ImagePreview plug-in to fix the occasional flickering problem
- Refactor the global fontBlock, automatically take the relative size according to the configuration
- ToolbarView supports irregular shape buttons
- StateView is compatible with Xcode14.3
- Compatible with iPhone14 series mobile phones
- ToolbarTitleView supports configuring the minimum distance on the left
- ToolbarView now supports configuring left alignment and spacing.
- ToolbarTitleView now supports configuring left alignment and spacing.
- Added a method to dynamically calculate the width and height of the AutoLayout layout view
- DynamicLayout method adds NS_NOESCAPE flag
- Added scrollViewInsets padding configuration for DrawerView
- AttributedLabel compatible with iOS15+ system comes with strikethrough
- Refactor the method name of obtaining and selecting the TabBar specified controller
- Optimize DrawerView not automatically return to the top when it is in non-scrollViewPositions
- Refactor DrawerView to support multiple modes
- Added safeJSON fast conversion JSON method
- Added method to get TabBar root controller
- Added merge method to JSONModel
- The ParameterModel.toDictionary method automatically filters attributes starting with an underscore
- UIButton and click gesture support custom highlight state, disabled state handle
- Fixed the problem that calling setPosition does not take effect when the DrawerView is in a special scene
- Added Swift version ParameterModel component
- Added scrollViewFilter configuration for DrawerView
- NotificationManager adds delegate configuration
- Added Analyzer analysis component
- Added Validator Swift verification component
- Added MulticastBlock multi-handle proxy component
- Added Optional commonly used extension methods
- Refactor the Swift Annotation component
- Refactoring Request component synchronous request
- Remove the NetworkMocker component
- The Request component supports synchronous requests
- ModuleBundle supports loading module colors
- AttributedLabel supports strikethrough style
- Fix the problem that the DateFormatter format is incorrect when the mobile phone system is in 12-hour format
- Fixed the problem that sliding the top navigation bar quickly will trigger the bottom navigation bar to slide back after the navigation bar interception is enabled
- Optimize the implementation of the pull-down refresh plugin indicatorPadding
- Fix Swift Package Manager minimum compatible with lottie-ios 4.0
- Upgrade the Lottie component to be compatible with lottie-ios 4.0
- Rename LottieView to LottiePluginView
- AlertController supports modifying animationType
- AlertController supports clicking Action without closing the interface
- Added box style and padding properties to SegmentedControl
- Optimize DynamicLayout to support Swift generics
- Waterfall layout supports Header hover effect
- Added Swift version model parsing component JSONModel
- Modify the default value of the Swift version API method
- Optimize the skeleton screen view, no need to manually add animation views
- Rewrite all test cases for Swift implementation
- Added data callback parameter when the picture plugin downloads pictures
- Support custom global mainWindow properties
- Added UIView sorting subview hierarchy method
- View controller added toastInAncestor property
- Globally compatible with iPad
- Refactor Swift version Swizzle related API methods
- Added a common method of proportional scaling screen adaptation
- Modify the autoScale property to take effect for the current view and its subviews
- Optimize the controller to get the bottom bar height algorithm
- Optimized the Failed state processing of transition gestures
- Fix method name from spelling error
- Added the method of parsing the startup URL
- Optimize the precision problem of pull-up and appending floating-point numbers
- Refactor AutoLayout to support priority parameter
- Added WebView to allow opening SchemeURL configuration
- Added List lookup UICollectionView method
- Compatible with Xcode14, compatible with iOS16
- Click gesture support to monitor highlighted state
- Optimized BannerView index change callback method
- Added pop to specified workflow method
- Added color mixing method
- Added playback touch feedback method
- Merge FWApplication into this framework, new version
- Refactored some API methods and remove uncommon functions
- Refactor the directory structure and unify Pod submodules
- NSAttributedString supports click to highlight URL
- The default waiting time for the automatic completion of the modified input box is 0.5 seconds
- Added iOS13+ to enable new navigation bar style global switch
- Added method to find subviews subviews according to tag
- Added the safe reading method of array safe subscript
- Added method to remove all click block events
- Removed colorWithString from color name init method
- Modify the Swift version State to StateObject
- Fixed the problem of opening failure when route parsing URL with port
- Support saving custom deviceToken strings
- Refactoring the NavigationOptions routing solution
- Controller close method supports options parameter
- Refactor the Navigation navigation tool method
- Added completion callback for quick open URL method
- Route userInfo supports custom routerHandler
- Open controller, workflow and other methods support completion callback
- Added FW.synchronized to add mutex lock method
- Migrate some common tools and methods to FWFramework
- Refactored OC version classification API, changed to fw_ prefix, removed Wrapper
- Optimize the keyboard management jump input box scheme
- Optimized to get safeAreaInsets even when keyWindow does not exist
- Route support lookup DefaultRouter: format method
- Keyboard management support to hide default previous and next buttons
- Fix the calculation problem when the countdown method is running in the background
- Fix the abnormal problems of the theme colorForStyle and other methods
- New configuration management and configuration template protocol
- Refactor Router routing component method name
- Added UIKit input component tool method
- Refactor AutoLayout layout syntax to be more beautiful
- Added UITableView and UICollectionView custom cache methods
- Refactor Swift version Api method
- Added FW global method, you can customize the call name
- Refactored some components and added several functions
- This version is not compatible with the previous version, the code must be migrated
- Brand new version, using .fw. calling method
- Customizable .fw. for any call name
- Refactored some components and added several functions
- This version is not compatible with the previous version, the code must be migrated
- Added proportional adaptation to FWRelative related methods
- FWLayoutChain opens the view attribute for easy expansion
- FWTest supports asynchronous testing
- Modify the FWRouterProtocol method to remove the fw prefix
- Modify FWLog, support group and userInfo
- Added FWABTest class for AB testing
- UILabel supports quick setting of line height and attribute style
- Migrate UIDevice.fwDeviceIDFA to Tracking submodule and fix the problem that the value is nil
- Added FWEncode compatible Swift extension method
- Added FWFoundation compatible Swift extension method
- Modify the debug information method to debugDescription
- Refactored Pod sub-module, split OC and Swift code
- Support Swift Package Manager
- Added String multi-language extension method
- Split out FWApplication to maintain a separate warehouse
- Refactor the implementation of FWFramework
- Fix the compatibility problem of navigation bar style when compiling with Xcode13
- FWAttributedLabel supports custom view when the tail is truncated
- UIButton supports quick setting of alpha when clicked and highlighted
- UITextView supports vertical center layout and placeholder custom margins
- Optimize UISearchBar center position algorithm
- Added FWAssetManager image management component
- Added FWAudioPlayer audio player component
- Added FWVideoPlayer video playback component
- The input box supports custom cursor color and cursor size
- The navigation bar style is compatible with iOS15, Xcode13 takes effect
- Refactored FWPhotoBrowser to support asynchronous loading of pictures
- Added a method to determine whether the view skeleton screen is displaying
- Toast plug-in supports setting the vertical offset, the default is -30
- Fixed the bug that the navigation bar cannot be hidden when Appearance is set and then hidden
- Added custom navigation bar FWNavigationView component
- New controller popover controller shortcut method
- Modify the minimum compatible iOS version to iOS10
- Refactored the implementation of FWNavigationStyle, compatible with custom navigation bars
- Refactored FWPopupMenuDelegate method name
- Refactored UIViewController navigation bar height acquisition method
- Modify the web container JS bridge call to support callback when there is an error
- Optimize system JSON decoding because of special characters error 3840 problem
- Optimize the query parameter parsing problem when the URL contains Chinese
- FWEmptyPlugin added fwEmptyInsets outer spacing property setting
- FWToastPlugin added fwToastInsets outer spacing property setting
- Optimize FWDynamicLayout caching mechanism, fix iOS15 height calculation bug
- Refactored FWTheme theme color processing, compatible with theme switching below iOS13
- Added FWIcon icon font class, supporting loading by name
- Refactored FWTheme theme management class, optimized method names, and avoided memory leaks
- Optimize the problem of multiple calls when fwDismissBlock is pulled down, which needs to be triggered manually
- FWWebViewJsBridge supports APP and JS double-ended bridge error callback
- FWPhotoBrowser supports dismiss to the specified location
- Fix the nullable declaration of UIKit Component
- Rename the FWImageName method to FWImageNamed
- FWModuleBundle uses the fwImageNamed image loading method
- iOS13+ supports SVG image format by default
- FWImage newly added decoding option configuration, compatible with SDWebImage
- UITableView added fwPerformUpdates method
- Added fade transition animation method
- Fix the problem that the index of FWSegmentedControl is not normal when it jumps to it for the first time
- Fix the problem of triggering the refresh plug-in at the same time, and the abnormal progress callback when the content is short
- Added FWMulticastDelegate multi-agent forwarding class
- Refactor the project directory structure and use the recommended method of pod
- Rewrite the FWPromise class to support OC and Swift calls
- Refactor FWLog method name
- Fixed occasional bugs in FWRefreshPlugin and FWWebImage plugins
- Fixed the issue of FWAnimatedTransition referencing presentationController circularly
- FWPhotoBrowserDelegate added callback methods when displaying and hiding
- Added safe conversion method for fwAs commonly used types in Swift
- Modify the FWRouterContext attribute name and declaration
- Fix the problem that fwTouchEventInterval does not take effect
- FWAutoLayout increases the layout method of view aspect ratio
- FWRouterContext adds mergeParameters method
- UIApplication adds a new calling system sharing method
- UITextField keyboard management supports UIScrollView scrolling
- Optimize the accuracy of NSDate.fwCurrentTime
- Modify FWModuleProtocol.setup as an optional method
- Fix the nullable declaration of FWAppDelegate method
- Optimize the animation effect of the empty interface plug-in, and automatically remove the Overlay view
- Refactored log plug-in and image plug-in
- Refactored pop-up plug-in, empty interface plug-in, toast plug-in, refresh plug-in
- FWRouter removes the isObjectURL judgment method, compatible with scheme:path format URL
- FWEmptyPluginConfig adds customBlock configuration
- Fix FWRouter routing parameter parsing problem, code optimization
- UIScrollView supports fwOverlayView view
- UIScrollView supports displaying an empty interface, modify the FWEmptyViewDelegate method
- Added new empty interface gradient animation configuration, which is enabled by default
- Refactor the implementation of FWEmptyPlugin to support scroll view and default text
- Refactored FWToastPlugin to support default text
- FWViewController added renderState state rendering method
- FWNavigationBarAppearance supports theme colors and theme pictures
- Fix the problem of FWRouter routing parameter parsing
- Add a method to get the life cycle status of ViewController
- UINavigationBar and UITabBar support quick setting of theme background images
- Optimize FWTabBarController, the performance is consistent with UITabBarController
- Refactor FWWebViewDelegate method
- Refactor the implementation of FWWebViewController and extract FWWebView
- FWRouter, FWMediator support preset methods
- FWTabBarController supports loading network pictures
- Optimize the animation effect of FWDrawerView
- FWPagingView supports pull-down refresh of sub-pages when hovering
- Added FWOAuth2Manager network authorization class
- Refactored FWImagePlugin plug-in, refactored FWWebImage, and added option configuration
- Optimize FWEncode to handle URL encoding
- Refactor the FWRouter routing class
- Refactor FWLoader to automatically load classes
- Refactored FWPluginManager plugin management class
- Added FWSignatureView view component
- Optimize the controller fwTopBarHeight algorithm
- Added FWQrcodeScanView configuration parameters
- Optimize FWRouter empty string handling
- Refactor the design and implementation of FWView, support Delegate and Block
- Add FWNetworkUtils.isRequestError error judgment method
- Optimize framework OC attribute declaration, Swift call is more friendly
- FWAutoloader was renamed to FWLoader
- Code optimization, Example project optimization
- Add RSA encryption and decryption, signature verification algorithm
- FWPasscodeView added configuration parameters
- FWAlertController supports custom textField keyboard management
- Added FWPasscodeView component
- FWTheme and FWImage classes support bundle loading
- FWPhotoBrowser supports UIImage parameters
- Example project refactoring, modularization and continuous integration example
- Add FWAutoloader automatic loading class
- Optimize FWWebViewController button handling
- Optimize screen adaptation constants, see FWAdaptive for details
- After two years of precipitation, version 1.0.0 was released