Releases · KeyboardKit/KeyboardKit · GitHub
Skip to content

Releases: KeyboardKit/KeyboardKit

10.7.0-beta.1

Choose a tag to compare

@danielsaidi danielsaidi released this 26 Jun 09:07

This version adds undo functionality to the keyboard engine, which makes it possible to undo text insertions, deletions, and autocompletions in chunks. This is currently opt-in. Enable the undoManager experiment to try it out.

This version also adds many more pickers and settings for various keyboard models, including a brand new KeyboardActionPicker. This will let us harmonize the settings tools, and avoid having to write separate code for each model.

This version also flattens the remaining namespaces, to complete the extensive namespace transition earlier than initially planned, to give us all time to migrate before KeyboardKit 11.

🌱 Essentials

  • Keyboard.DockEdge has a new .none case.
  • Keyboard.DockEdge now implements KeyboardSettingsPickerValue.
  • Keyboard.InputToolbarType now implements KeyboardSettingsPickerValue.
  • Keyboard.InputType now implements KeyboardSettingsPickerValue.
  • Keyboard.KeyboardCase now implements KeyboardSettingsPickerValue.
  • Keyboard.KeyboardType now implements KeyboardSettingsPickerValue.
  • Keyboard.LayoutType now implements KeyboardSettingsPickerValue.
  • Keyboard.ReturnKeyType now implements KeyboardSettingsPickerValue.
  • Keyboard.SpacebarLongPressBehavior now implements KeyboardSettingsPickerValue.
  • Keyboard.SpacebarMenuType has a new .none case.
  • Keyboard.SpacebarMenuType now implements KeyboardSettingsPickerValue.
  • KeyboardController has a new undoLastRecordedDocumentChange function.
  • KeyboardController has a new openMainApp and openMainAppDeepLink functions.

⚡️ Actions

  • KeyboardAction .openMainApp and .undo are new actions.
  • KeyboardAction.PickerValue is a new KeyboardSettingsPickerValue.
  • StandardKeyboardActionHandler has a new undoLastRecordedDocumentChange function.

🧪 Experiments

  • Experiment.undoManager is a new experiment that lets you enable the new undo feature.

📜 Licenses

  • LicenseErrorAlert has been redesigned to be more informative.

📄 Proxy

  • TextDocumentUndoChange is a new type to describe a text document change.
  • TextDocumentUndoManager is a new class for undoing text document changes.

⚙️ Settings

  • Keyboard.DockEdgePicker is a new picker component.
  • Keyboard.InputToolbarTypePicker is a new picker component.
  • Keyboard.InputTypePicker is a new picker component.
  • Keyboard.KeyboardCasePicker is a new picker component.
  • Keyboard.KeyboardTypePicker is a new picker component.
  • Keyboard.LayoutTypePicker is a new picker component.
  • Keyboard.ReturnKeyTypePicker is a new picker component.
  • Keyboard.SpacebarLongPressBehaviorPicker is a new picker component.
  • Keyboard.SpacebarMenuTypePicker is a new picker component.
  • KeyboardActionPicker is a new picker component.

🎨 Styling

  • Image.keyboardArrowBackward is a new image.
  • Image.keyboardArrowForward is a new image.
  • Image.keyboardCase is a new image builder.
  • Image.keyboardEscape is a new image.
  • Image.keyboardFunction is a new image.
  • Image.keyboardInputType is a new image builder.
  • Image.keyboardSpace is a new image.
  • Image.keyboardSystemSettings is a new image.
  • Image.keyboardType is a new image builder.
  • Image.keyboardUrlDomain is a new image.

🐛 Bug fixes

  • KeyboardLocaleSettingsScreen now applies the correct layout type.

📦 Namespace Changes

  • Autocomplete.AutocorrectionDisabledToContextModifer has been renamed to KeyboardKit.AutocorrectionDisabledModifer.
  • Autocomplete.DisabledAutocompleteService has been renamed to KeyboardKit.DisabledAutocompleteService.
  • Autocomplete.NextWordPredictionMethod has been renamed to AutocompleteMethod.
  • Autocomplete.NextWordPredictionRequestType has been renamed to AutocompleteMethod.
  • Autocomplete.NextWordPredictionTypePicker has been renamed to AutocompleteMethodPicker.
  • Autocomplete.Result has been renamed to AutocompleteResult.
  • Autocomplete.RemotePredictionRequest has been renamed to RemoteAutocompleteRequest.
  • Autocomplete.SettingsScreen has been renamed to AutocompleteSettingsScreen.
  • Autocomplete.SettingsScreenLocalization has been renamed to AutocompleteSettingsScreenLocalization.
  • Autocomplete.SettingsScreenSections has been renamed to AutocompleteSettingsScreenSections.
  • Autocomplete.SettingsScreenVisibility has been renamed to AutocompleteSettingsScreenVisibility.
  • Autocomplete.StandardAutocompleteService has been renamed to KeyboardKit.StandardAutocompleteService.
  • Autocomplete.Suggestion has been renamed to AutocompleteSuggestion.
  • Autocomplete.SuggestionType has been renamed to AutocompleteSuggestionType.
  • Autocomplete.TextReplacementDictionary has been renamed to AutocompleteReplacementDictionary.
  • Autocomplete.Toolbar has been renamed to AutocompleteToolbar.
  • Autocomplete.ToolbarScrollMode has been renamed to AutocompleteToolbarScrollMode.
  • Autocomplete.ToolbarStyle has been renamed to AutocompleteToolbarStyle.
  • Autocomplete.ToolbarItem has been renamed to AutocompleteToolbarItem.
  • Autocomplete.ToolbarItemStyle has been renamed to AutocompleteToolbarItemStyle.
  • Autocomplete.ToolbarSeparator has been renamed to AutocompleteToolbarSeparator.
  • Autocomplete.ToolbarSeparatorStyle has been renamed to AutocompleteToolbarSeparatorStyle.
  • Callouts.Actions has been renamed to KeyboardCalloutActions
  • Callouts.ActionsBuilder has been renamed to KeyboardCalloutActions.Builder
  • Callouts.ActionsBuilderParams has been renamed to KeyboardCalloutActions.BuilderParams
  • Callouts.ActionCallout has been renamed to KeyboardActionCallout
  • Callouts.CalloutStyle has been renamed to KeyboardCalloutStyle
  • Callouts.InputCallout has been renamed to KeyboardInputCallout
  • Dictation.AuthorizationStatus has been renamed to DictationAuthorizationStatus
  • Dictation.BarVisualizer has been renamed to DictationBarVisualizer
  • Dictation.BarVisualizerStyle has been renamed to DictationBarVisualizerStyle
  • Dictation.DictationMethod has been renamed to DictationMethod
  • Dictation.DictationState has been renamed to DictationState
  • Dictation.DisabledDictationEngine has been renamed to DisabledDictationEngine
  • Dictation.DisabledDictationService has been renamed to DisabledDictationService
  • Dictation.DisabledSpeechRecognizer has been renamed to DisabledDictationSpeechRecognizer
  • Dictation.Indicator has been renamed to DictationIndicatorBadge
  • Dictation.IndicatorStyle has been renamed to DictationIndicatorBadgeStyle
  • Dictation.ProgressView has been renamed to DictationKeyboardOverlay
  • Dictation.ProgressViewLocalization has been renamed to DictationKeyboardOverlayLocalization
  • Dictation.ProgressViewStyle has been renamed to DictationKeyboardOverlayStyle
  • Dictation.ServiceError has been renamed to DictationServiceError
  • Dictation.SettingsScreen has been renamed to DictationSettingsScreen
  • Dictation.SettingsScreenLocalization has been renamed to DictationSettingsScreenLocalization
  • Dictation.SettingsScreenSections has been renamed to DictationSettingsScreenSections
  • Dictation.SpeechRecognizerResult has been renamed to DictationSpeechResult
  • Dictation.StandardDictationEngine has been renamed to StandardDictationEngine
  • Dictation.StandardDictationService has been renamed to StandardDictationService
  • Dictation.StandardVolumeRecorder has been renamed to StandardDictationVolumeRecorder
  • Dictation.VolumeRecorder has been renamed to DictationVolumeRecorder
  • Dictation.VolumeResult has been renamed to DictationVolumeResult
  • Dictation.VolumeVisualizer has been renamed to DictationVolumeVisualizer
  • Dictation.VolumeVisualizerStyle has been renamed to DictationVolumeVisualizerStyle
  • Emoji.ColonSearch has been renamed to EmojiColonSearch.
  • Emoji.KeyboardSearchField has been renamed to EmojiSearchField
  • EmojiKeyboard.Configuration has been renamed to EmojiKeyboardConfiguration
  • EmojiKeyboard.Sizes has been renamed to EmojiKeyboardSizes
  • EmojiKeyboard.State has been renamed to EmojiKeyboardState
  • EmojiKeyboard.Style has been renamed to EmojiKeyboardStyle
  • Experiment has been renamed to KeyboardExperiment.
  • Experiment.SettingsScreen has been renamed to KeyboardExperimentSettingsScreen.
  • Experiment.SettingsScreenLocalization has been renamed to KeyboardExperimentSettingsScreenLocalization.
  • Experiments has been renamed to KeyboardExperimentSettings.
  • ExperimentContext has been renamed to KeyboardExperimentContext.
  • Feedback.Audio has been renamed to KeyboardAudioFeedback.
  • Feedback.AudioConfiguration has been renamed to KeyboardAudioFeedbackConfiguration.
  • Feedback.AudioEngine has been renamed to KeyboardAudioFeedbackEngine.
  • Feedback.DisabledFeedbackService has been renamed to DisabledKeyboardFeedbackService.
  • Feedback.Haptic has been renamed to KeyboardHapticFeedback.
  • Feedback.HapticConfiguration has been renamed to KeyboardHapticFeedbackConfiguration.
  • Feedback.HapticEngine has been renamed to KeyboardHapticFeedbackEngine.
  • Feedback.StandardFeedbackService has been renamed to StandardKeyboardFeedbackService.
  • Feedback.Toggle has been renamed to KeyboardFeedbackToggle.
  • FeedbackContext has been renamed to KeyboardFeedbackContext.
  • FeedbackService has been renamed to KeyboardFeedbackService.
  • FeedbackSettings has been renamed to KeyboardFeedbackSettings.
  • FontContext has been renamed to KeyboardFontContext.
  • FontSettings has been renamed to KeyboardFontSettings.
  • Fonts.UnicodeFont has been renamed to KeyboardUnicodeFont.
  • Fonts.UnicodeFontOption has been renamed to KeyboardUnicodeFontOption.
  • `Ke...
Read more

10.6.0

Choose a tag to compare

@danielsaidi danielsaidi released this 22 Jun 12:24

This version minimizes the number of on-launch redraws to minimize launch flickering, and makes it possible to swipe up and down on the spacebar to move the cursor in greater steps.

This also version starts reducing namespace nesting, as described in issue 1045. Expect less nesting and more surface-level types, with renaming guides to help you migrate.

Finally, since the host application bundle ID keeps returning nil in iOS 27, we have deprecated the KeyboardInputViewController hostApplicationBundleId property, and updated the documentation with alternate ways to handle this.

🌱 Essentials

  • Keyboard.SpacebarDragGestureHandler can now handle vertical movement.
  • Keyboard.SpacebarDragGestureOffset is a new enum for spacebar dragging.
  • Keyboard.SpacebarDragSensitivity now defines a horizontal and a vertical step value.
  • KeyboardInputViewController minimizes the number of on-launch redraws to minimize flickering.

🏠 Host

  • KeyboardHostApplicationPicker now specializes KeyboardSettingsPicker.

🔣 Layout

  • KeyboardLayout convert baseLayout builder to an initializer.
  • KeyboardLayout convert iPhoneLayout and iPadLayout builders to instance members.
  • KeyboardLayout updates the keyboard switcher placement on iPads running iOS 18 and earlier.
  • KeyboardLayout.DeviceConfiguration applies updated edge insets on iPads running iOS 18 and earlier.

📦 Namespace Changes

  • KeyboardLayout.DeviceConfiguration has been renamed to KeyboardLayoutConfiguration.
  • KeyboardLayout.Item has been renamed to KeyboardLayoutItem.
  • KeyboardLocale.ContextMenu has been renamed to KeyboardLocaleContextMenuModifier.
  • KeyboardLocale.ListItem has been renamed to KeyboardLocaleListItem.
  • KeyboardLocale.SettingsScreen has been renamed to KeyboardLocaleSettingsSettingsScreen.
  • KeyboardLocale.SettingsScreenLocalization has been renamed to KeyboardLocaleSettingsScreenLocalization.
  • KeyboardLocale.SettingsScreenPickers has been renamed to KeyboardLocaleSettingsScreenPickers.
  • KeyboardLocale.SettingsScreenVisibility has been renamed to KeyboardLocaleSettingsScreenVisibility.
  • KeyboardSettings.SettingsScreen has been renamed to KeyboardSettingsScreen.
  • KeyboardSettings.SettingsScreenLocalization has been renamed to KeyboardSettingsScreenLocalization.
  • KeyboardSettings.SettingsScreenPickers has been renamed to KeyboardSettingsScreenPickers.
  • KeyboardSettings.SettingsScreenSections has been renamed to KeyboardSettingsScreenSections.
  • KeyboardSettings.SettingsScreenVisibility has been renamed to KeyboardSettingsScreenVisibility.
  • KeyboardSettings.Picker has been renamed to KeyboardSettingsPicker.
  • KeyboardSettings.PickerValue has been renamed to KeyboardSettingsPickerValue.
  • KeyboardStatus.Label has been renamed to KeyboardStatusLabel.
  • KeyboardStatus.LabelStyle has been renamed to KeyboardStatusLabelStyle.
  • KeyboardStatus.Section has been renamed to KeyboardStatusSection.
  • KeyboardStatus.SectionLocalization has been renamed to KeyboardStatusSectionLocalization.
  • KeyboardStatus.SectionStyle has been renamed to KeyboardStatusSectionStyle.
  • KeyboardTheme.Collection has been renamed to KeyboardThemeCollection.
  • KeyboardTheme.SettingsScreen has been renamed to KeyboardThemeSettingsScreen.
  • KeyboardTheme.SettingsScreenLocalization has been renamed to KeyboardThemeSettingsScreenLocalization.
  • KeyboardTheme.SettingsScreenStyle has been renamed to KeyboardThemeSettingsScreenStyle.
  • KeyboardTheme.SettingsScreenThemes has been renamed to KeyboardThemeSettingsScreenThemes.
  • Proxy.FullDocumentReaderConfiguration has been renamed to DocumentReaderConfiguration.
  • Proxy.FullDocumentReaderError has been renamed to DocumentReaderError.
  • Proxy.FullDocumentReaderResult has been renamed to DocumentReaderResult.
  • Proxy.SelectionEdge has been renamed to Keyboard.TextSelectionEdge.

👁️ Previews

  • KeyboardPreviews.ActionHandler is renamed to PreviewKeyboardActionHandler.
  • KeyboardPreviews.AutocompleteService is renamed to PreviewAutocompleteService.
  • KeyboardPreviews.InputViewController is renamed to PreviewKeyboardInputViewController.
  • KeyboardPreviews.TextDocumentProxy is renamed to PreviewTextDocumentProxy.

📄 Proxy

  • DocumentReader is a new protocol, informally implemented by UITextDocumentProxy.
  • UITextDocumentProxy has new sentence offset variables.

⚙️ Settings

  • KeyboardSettingsPicker now supports an optional selection binding.
  • .keyboardSettingsPickerTitle(for:_:) is a new KeyboardSettingsPicker view modifier.
  • .keyboardSettingsPickerValueTitle(for:_:) is a new KeyboardSettingsPicker view modifier.

🩺 Status

  • KeyboardStatusInspector is a new tool for inspecting the keyboard system status.

🗑️ Deprecations

  • The KeyboardInputViewController hostApplicationBundleId has been deprecated.
  • The KeyboardInput namespace is deprecated and will be removed in KeyboardKit 11.
  • The KeyboardLocale namespace is deprecated and will be removed in KeyboardKit 11.
  • The KeyboardPreviews namespace is deprecated and will be removed in KeyboardKit 11.
  • The KeyboardStatus namespace is deprecated and will be removed in KeyboardKit 11.
  • The KeyboardStyle namespace is deprecated and will be removed in KeyboardKit 11.
  • The Proxy namespace is deprecated and will be removed in KeyboardKit 11.

10.5.1

Choose a tag to compare

@danielsaidi danielsaidi released this 02 Jun 07:01

This version updates some license information.

9.9.1

Choose a tag to compare

@danielsaidi danielsaidi released this 25 May 08:06

This version patches the host application bundle ID code to not crash.

Note that the code will still return nil on iOS 26.4 and later.

10.5.0

Choose a tag to compare

@danielsaidi danielsaidi released this 19 May 19:18

KeyboardKit 10.5 is out! This release adds Arabic (PC) support and adds new accessibility settings to increase the font weight and key height. It also adds new iOS 26.4 emojis, improves autocomplete, and much more.

🌱 Essentials

  • KeyboardController has a new resetKeyboardInputType function.

♿️ Accessibility

  • KeyboardAccessibility is a new namespace.
  • KeyboardAccessibilityContext is a new observable context.
  • KeyboardAccessibilitySettings is a new type with persistent settings.
  • KeyboardTheme has a new adjusted(for:) that applies accessibility settings.

💡 Autocomplete

  • Autocomplete.TextReplacementDictionary.additionalAutocompletions is a new list.
  • Autocomplete.TextReplacementDictionary.additionalAutocorrections has more values.
  • Autocomplete.SettingsScreen has a new toggle that can hide the autocomplete toolbar.
  • Autocomplete.StandardAutocompleteService will now filter out duplicate suggestions.
  • AutocompleteContext.autocompleteDictionary is a new dictionary with custom completions.
  • AutocompleteSettings has a new isToolbarEnabled setting that can be used to hide the toolbar.
  • KeyboardView will automatically hide the autocomplete toolbar if isToolbarEnabled is false.

🔣 Layout

  • KeyboardLayout now adds additional edge insets on Liquid Glass iPad devices.
  • KeyboardLayout now places the keyboard switcher firstmost on Liquid Glass iPad devices.
  • KeyboardLayout.DeviceConfiguration now has an additional edgeInsets padding property.

🌐 Localization

  • KeyboardLocale is a new namespace for locale-specific types.
  • Locale has a new .arabic_pc locale, with layouts and callouts.
  • Locale.Dictionary now implements Sendable.

😀 Emojis

  • EmojiKeyboard now supports new iOS 26.4 emojis.
  • EmojiKeyboard now supports skin tones in emoji search.
  • KeyboardInputViewController now cancels emoji search when the cursor moves.

📄 Proxy

  • UITextDocumentProxy has a new moveTextInputCursorToRefreshContext(sleepInterval:) function.

🎛️ Settings

  • Keyboard.SettingsScreen has been moved to KeyboardSettings.
  • Keyboard.LocaleSettingsScreen has been moved to KeyboardLocale.

🎨 Styling

  • KeyboardAction slightly increases the standard image font weight.
  • KeyboardAction slightly increases the standard lowercase font weight.
  • KeyboardView redesigns swipe down actions to look a bit more like native.

🗑️ Deprecations

  • View.localeSettingsScreenLocalization has been renamed to keyboardLocaleSettingsScreenLocalization.
  • View.localeSettingsScreenVisibility has been renamed to keyboardLocaleSettingsScreenVisibility.

🐛 Bug fixes

  • KeyboardLayoutCache adjusts layout cache to avoid missing input switcher on iPhone SE.

10.4.1

Choose a tag to compare

@danielsaidi danielsaidi released this 10 Apr 14:16

This version fixes some bugs and adds a preview of a new way to handle setting values and pickers.

The new KeyboardSettings.Picker view can be used to harmonize the various setting pickers, and adds a new localization method which will make the various screen pickers and localization tools obsolete, or at least smaller.

🌱 Essentials

  • Keyboard.InputToolbarType implements PickerValue.
  • Keyboard.InputToolbarTypePicker is a new typealias.

🎛️ Settings (BETA)

  • KeyboardSettings has a new, generic Picker view.
  • KeyboardSettings has a new PickerValue protocol.
  • .keyboardSettingsPickerValueTitle(...) is a new view modifier can be used to localize these pickers.

🐛 Bug fixes

  • Keyboard.SettingsScreen now displays a none option for the input toolbar type.
  • KeyboardLayout fixes a bug that cased the input toolbar to become too tall on iPad.
  • KeyboardSettings now uses the .frequent category for the input toolbar emoji keys.
  • StandardAutocompleteService fixes a Safari casing bug for English next word predictions.

🗑️ Deprecations

  • DragGestureHandler has been moved into Keyboard.
  • Gestures has been merged with the Keyboard namespace.
  • KeyboardSettings.InputToolbarType has been moved to Keyboard.

10.4.0

Choose a tag to compare

@danielsaidi danielsaidi released this 08 Apr 12:15

This version fixes random slow keyboard launches by postponing costly operations until the keyboard has appeared.

This version also adjusts the hostApplicationBundleId logic to handle that this property becomes nil in iOS 26.4 and later. You can now set it with code or let users pick or specify a host application from the keyboard.

You can read more about this change here. If not being able to automatically resolve the host application affects your app in a negative way, we strongly recommend reaching out to Apple with the Feedback Assistant.

🌱 Essentials

  • Keyboard.State injects a new keyboardAppContext into the environment.
  • KeyboardController has a new openMainAppUrl(_:withReason:) function.
  • KeyboardInputViewController postpones autocomplete to speed up launch.

⚡️ Actions

  • KeyboardAction has a new .openMainApp action.
  • KeyboardAction has a new KeyboardApp-based .openMainApp builder.
  • KeyboardAction has a new standard release action for .openMainApp.

📱 App

  • KeyboardAppContext is a new app-specific context.
  • KeyboardAppContext.reason defines an app launch reason.
  • KeyboardAppSettings has new, internal app-specific settings.
  • KeyboardAppView resets the context reason when sent to the background.

💡 Autocomplete

  • Autocomplete.ToolbarScrollMode is a new enum that defines toolbar scroll modes.
  • .autocompleteToolbarScrollMode(...) is a new view modifier that can be used to enable scrolling.

🏠 Host

  • The hostApplicationBundleId has been documented to not work in iOS 26.4.
  • The new KeyboardHostApplication.Picker can be used to pick a KeyboardHostApplication.

10.3.1

Choose a tag to compare

@danielsaidi danielsaidi released this 05 Mar 07:07

This version updates some license information.

10.3.0

Choose a tag to compare

@danielsaidi danielsaidi released this 12 Feb 14:13

This version adds support for on-device next word prediction, using Apple's Foundation Models. This is available on iPhone 15 Pro and later, iOS 26.1 and later. Note that this is a very(!) new technology that is slower and less accurate than other autocomplete features. You can help improving it by providing feedback.

This version also tweaks the license validation to be much faster than before, which also results in less flickering when setting up the keyboard extension. It also improves layout rendering by enabling layout caching by default. The old experiment has been converted to a proper dynamic KeyboardSettings setting. We hope you'll like these new changes.

This version also adds a new KeyboardSettings setting to visualize the dynamic text tap areas, to make it possible for developers to verify this dynamic behavior.

🌱 Essentials

  • KeyboardInputViewController has a new viewWillSetupKeyboardKit() function.

⚡️ Autocomplete

  • Autocomplete.NextWordPredictionMethod has a new .local method.
  • Autocomplete.SettingsScreen has a new next word prediction toggle.
  • Autocomplete.SettingsScreenSections has a redesigned next word prediction section.
  • Autocomplete.StandardAutocompleteService can now perform local next word prediction.
  • AutocompleteSettings.nextWordPredictionMethod now uses the .local method by default.

🧪 Experiments

  • Experiment has been refactored to make it easier to enable experiments.

🔉 Feedback

  • FeedbackContext has a new registerCustomAudioFeedback(...) function.
  • FeedbackContext has a new registerCustomHapticFeedback(...) function.

🔣 Layout

  • KeyboardLayout.DeviceConfiguration.standardPhone now uses a 51 point row height in iOS 26.

🤝 Licenses

  • KeyboardInputViewController validates licenses much faster than before.
  • Keyboard.ToggleToolbar now shows the toolbar if no license is registered.

🎛️ Settings

  • KeyboardSettings has a new isLayoutCaching setting.
  • KeyboardSettings has a new isPredictiveTextVisualizationActive setting.

🐛 Bug fixes

  • Keyboard.LocaleSettingsScreen now handles changes to added locales better.
  • KeyboardInputViewController will now make an initial autocomplete on launch.

🗑️ Deprecations

  • Autocomplete.NextWordPredictionRequestType has been renamed to NextWordPredictionMethod.
  • AutocompleteSettings.nextWordPredictionRequestType has been renamed to match this change.
  • Experiments has been simplified, and is no longer used to enable and disable experiments.
  • Experiment.layoutCaching has been deactivated, and no longer has any effect on the engine.
  • Experiments.active and Experiment.isActive is replaced with Experiment.activeExperiments.

10.2.2

Choose a tag to compare

@danielsaidi danielsaidi released this 17 Jan 14:50

This version improves the controller's host bundle ID logic with hopes of reducing random crashes.

This version also reduces the number of input set calculations for every layout that is generated.

🏠 Host

  • The KeyboardInputViewController hostApplicationBundleId has been rewritten to hopefully avoid crashes, or at least provide better crash information.

🔣 Layout

  • The KeyboardLayout.baseLayout(...) now only calculates the relevant input set, reducing the input set calculations with 2/3 for each layout generation.

🐛 Bug fixes

  • The incorrect upper-cased shift color in dark mode is fixed on pre iOS 26 iPhones.