diff --git a/developer/engine/iphone-and-ipad/20.0/KeyboardPickerBarButtonItem/index.md b/developer/engine/iphone-and-ipad/20.0/KeyboardPickerBarButtonItem/index.md new file mode 100644 index 000000000..a6c0ce4a0 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeyboardPickerBarButtonItem/index.md @@ -0,0 +1,38 @@ +--- +title: KeyboardPickerBarButtonItem class +--- + +## Summary + +Returns a UIBarButtonItem that will display the keyboard picker when tapped. + +## Syntax + +``` swift +KeyboardPickerBarButtonItem(presentingVC: UIViewController) +``` + +### Parameters + +`presentingVC` +: View controller to handle the keyboard picker modes. + +## Description + +Opens a view for the user to switch keyboards or download new keyboards. + +Since the keyboard picker is modal, a UIViewController must be supplied to display it. The button has default images for normal and landscape orientation, and can overridden with other images or a title. + +## Examples + +### Example: Using `KeyboardPickerBarButtonItem()` + +The following script illustrates the use of `KeyboardPickerBarButtonItem()`: + +``` swift +let kbBarButton = KeyboardPickerBarButtonItem(presentingVC: self) +``` + +## See also + +- [`KeyboardPickerButton()`](../KeyboardPickerButton/) diff --git a/developer/engine/iphone-and-ipad/20.0/KeyboardPickerButton/index.md b/developer/engine/iphone-and-ipad/20.0/KeyboardPickerButton/index.md new file mode 100644 index 000000000..9702c35b5 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeyboardPickerButton/index.md @@ -0,0 +1,36 @@ +--- +title: KeyboardPickerButton class +--- + +## Summary + +The **KeyboardPickerButton** class provides a button that triggers the language picker menu + +## Syntax + +``` swift +KeyboardPickerButton.methodName() +``` + +## Description + +Opens a view for the user to switch keyboards or download new keyboards. + +## Methods + +[`setTitle()`](setTitle) +: clear images if the developer sets a title + +## Examples + +### Example: Using `KeyboardPickerButton()` + +The following script illustrates the use of `KeyboardPickerButton()`: + +``` swift +let kbButton = KeyboardPickerButton(presentingVC: self) +``` + +## See also + +- [`KeyboardPickerBarButtonItem()`](../KeyboardPickerBarButtonItem/) diff --git a/developer/engine/iphone-and-ipad/20.0/KeyboardPickerButton/setTitle.md b/developer/engine/iphone-and-ipad/20.0/KeyboardPickerButton/setTitle.md new file mode 100644 index 000000000..faee9b356 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeyboardPickerButton/setTitle.md @@ -0,0 +1,36 @@ +--- +title: KeyboardPickerButton.setTitle() +--- + +## Summary + +The **`setTitle()`** method sets the title of the keyboard picker button. + +## Syntax + +``` swift +KeyboardPickerButton.setTitle(title: String, state: UIControlState) +``` + +### Parameters + +`title` +: Title for the button. + +`state` +: State of the button + +## Description + +Clear images if the developer sets a title. + +## Examples + +### Example: Using `setTitle()` + +The following script illustrates the use of `setTitle()`: + +``` swift +let kbButton = KeyboardPickerButton(presentingVC: self) +kbButton.setTitle(item.title, for: .normal) +``` diff --git a/developer/engine/iphone-and-ipad/20.0/KeymanPackage/index.md b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/index.md new file mode 100644 index 000000000..e00bba80f --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/index.md @@ -0,0 +1,81 @@ +--- +title: KeymanPackage class +--- + +## Summary + +The **KeymanPackage** class and its subclasses represent Keyman package +files and their contents. + +## Syntax + +``` swift +KeymanPackage.methodName() +``` + +## Description + +The KeymanPackage is the base class used to represent various types of +Keyman packages within the Keyman Engine and their contents. As an +abstract class, it serves as a "type erasure" for its subclasses +`KeyboardKeymanPackage` and `LexicalModelKeymanPackage`, both of which +offer richer typing for certain fields and methods. + +## Fields + +`key:` [`KeymanPackage.Key`](key) +: Returns a unique identifier for the package, usable in package-search operations. + +`languages: [Language]` +: An array of languages supported by the keyboards or lexical models contained by the package. + + The most relevant fields for `Language` type are the `name: String` and `id: String` fields. (The other fields are mostly 'legacy'.) + +`name: String` +: The user-friendly name of the package. + +`resourceType: LanguageResourceType` +: An enum representing the type of LanguageResource contained within the package. + + May be either `.keyboard` (for a `KeyboardKeymanPackage`) or `.lexicalModel` (for a `LexicalModelKeymanPackage`). + +`sourceFolder: URL` +: The base folder for the package's extracted contents. + + --- + **Note:** For packages opened with [`ResourceFileManager.shared.prepareKMPInstall`](../ResourceFileManager/prepareKMPInstall), this may be a temporary location! + + --- + + Stability is not guaranteed if you write to any contents of the folder or its subfolders, but read operations are permitted. + +`version: Version` +: The package's version. + +## Methods + +[`installableResourceSets -> [[AnyLanguageResource]]`](installableResourceSets)` ` +: Returns a list of all resources & language pairings supported by this package. + +[`installableResources(forLanguage: String) -> [AnyLanguageResource]`](installableResources)` ` +: A language-filtered version of the method above. + +[`pageURL(for: KeymanPackagePage) -> URL?`](pageURL) +: Provides a link to known .html files contained by the package. + + Supported pages: `.readme`, `.welcome`, `.custom(bundledPath: String)`, the latter of which may target arbitrary locations within the package. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See Also + +- [`PackageWebViewController`](../PackageWebViewController) +: Used to display web pages contained within a package. + +- [`KeyboardKeymanPackage`](../TypedKeymanPackage) +: Represents packages containing keyboards. + +- [`LexicalModelKeymanPackage`](../TypedKeymanPackage) +: Represents packages containing lexical models. diff --git a/developer/engine/iphone-and-ipad/20.0/KeymanPackage/installableResourceSets.md b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/installableResourceSets.md new file mode 100644 index 000000000..65e68626e --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/installableResourceSets.md @@ -0,0 +1,47 @@ +--- +title: .installableResourceSets() +--- + +## Summary + +The **`KeymanPackage.installableResourceSets`** field enumerates all resources and language pairings supported by the current package. + +## Syntax + +``` swift +KeymanPackage.installableResourceSets: [[ AnyLanguageResource ]] +``` + +### Value + +The two dimensional array may be interpreted as follows: + +``` swift +package.installableResourceSets[resourceIndex][languageIndex] +``` + +`resourceIndex` +: Some legacy keyboard packages may support multiple keyboards. This index enumerates the unique keyboards (or lexical models) contained within the package. + +`languageIndex` +: Some resources support multiple languages. For example, Keyman's default keyboard - `sil_euro_latin` There will be one entry for each language supported by the resource. + +The indexed value +: `AnyLanguageResource` is a Swift "type erasure" that may represent either an `InstallableKeyboard` or an `InstallableLexicalModel`, each of which enumerates the metadata needed for the Keyman engine to properly load and use the resource. + + These objects typically include data about the needed fonts, underlying language codes, and resource identifiers. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`KeyboardKeymanPackage.installables: [[ InstallableKeyboard ]]`](../TypedKeymanPackage/installables) +: The equivalent field for keyboard packages. + +- [`LexicalModelKeymanPackage.installables: [[ InstallableLexicalModel ]]`](../TypedKeymanPackage/installables)` ` +: The equivalent field for lexical model packages. + +- [`installableResources(forLanguage: String): [ AnyLanguageResource ]`](installableResources) +: Provides the same functionality as this field, but filtered to a specific language code. diff --git a/developer/engine/iphone-and-ipad/20.0/KeymanPackage/installableResources.md b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/installableResources.md new file mode 100644 index 000000000..3e89a8089 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/installableResources.md @@ -0,0 +1,40 @@ +--- +title: .installableResources(forLanguage:) +--- + +## Summary + +The **`KeymanPackage.installableResources(forLanguage: String)`** method +enumerates all resources and language pairings supported by the current +package for the specified language code. + +## Syntax + +``` swift +KeymanPackage.installableResources(forLanguage: String) -> [ AnyLanguageResource ] +``` + +### Parameter + +`forLanguage: String` +: A BCP-47 language code. + +### Value + +An array of `InstallableKeyboard` (for a `KeyboardKeymanPackage`) or `InstallableLexicalModel` (for a `LexicalModelKeymanPackage`) instances. + +For most packages, there will only be a single entry in this array. +However, note that multi-keyboard packages may support multiple +keyboards for the same target language. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`installableResourceSets: [[ AnyLanguageResource ]]`](installableResourceSets) +: Returns a list of all resources & language pairings supported by this package. + +- [`TypedKeymanPackage.installables(forLanguage: String): [ TypedLanguageResource ]`](../TypedKeymanPackage/installables_forLanguage) +: Provides the same functionality as this method for `TypedKeymanPackage` and its subclasses, taking advantage of the class's generic specification to return a more strongly-typed array. diff --git a/developer/engine/iphone-and-ipad/20.0/KeymanPackage/key.md b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/key.md new file mode 100644 index 000000000..edeed139b --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/key.md @@ -0,0 +1,32 @@ +--- +title: KeymanPackage.Key class +--- + +## Summary + +The **KeymanPackage.Key** class serves as a unique identifier for packages. + +## Syntax + +``` swift +KeymanPackage.Key.field +``` + +## Description + +The KeymanPackage.Key class is used within the KeymanEngine by installed resources when there is a need to find and/or use their source packages. Such operations only succeed with installed packages. + +## Fields + +`id: String` +: The package's id string. + + Generally speaking, this is the filename for the package file once the file extension (`.kmp` for keyboard packages, `.model.kmp` for lexical model packages) has been removed. + +`type: LanguageResourceType` +: An enum representing resource types supported by the KeymanEngine. May be either `.keyboard` (for a `KeyboardKeymanPackage`) or `.lexicalModel` (for a `LexicalModelKeymanPackage`). + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + diff --git a/developer/engine/iphone-and-ipad/20.0/KeymanPackage/pageURL.md b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/pageURL.md new file mode 100644 index 000000000..7231bf6a9 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/KeymanPackage/pageURL.md @@ -0,0 +1,35 @@ +--- +title: .pageURL(for:) +--- + +## Summary + +The **`KeymanPackage.pageURL(for: KeymanPackagePage)`** method provides links to web pages contained within a package. + +## Syntax + +``` swift +KeymanPackage.pageURL(for: KeymanPackagePage) -> URL? +``` + +### Parameters + +`for: KeymanPackagePage` +: An enum representing the type of page to retrieve. + + Supported pages: `.readme`, `.welcome`, `.custom(bundledPath: String)`, the latter of which may target arbitrary locations within the package. + + May return `nil` if the corresponding file does not exist. + +### Value + +A `URL` that may be used to display the page within a `WKWebView` or similar module. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`PackageWebViewController`](../PackageWebViewController) +: Used to display web pages contained within a package. diff --git a/developer/engine/iphone-and-ipad/20.0/LanguageResource/LanguageResourceFullID.md b/developer/engine/iphone-and-ipad/20.0/LanguageResource/LanguageResourceFullID.md new file mode 100644 index 000000000..28d3c251f --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/LanguageResource/LanguageResourceFullID.md @@ -0,0 +1,73 @@ +--- +title: LanguageResourceFullID protocol +--- + +## Summary + +The **LanguageResourceFullID** protocol and the types that implement it +(`FullKeyboardID` and `FullLexicalModelID`) represent unique identifiers +for installed resource-language pairings of keyboards and lexical models +within the KeymanEngine. + +`FullKeyboardID` and `FullLexicalModelID` (both of which implement this +protocol) are designed as a 'higher level' and 'friendlier' analogue to +their corresponding `LanguageResource`s and are safe to construct +dynamically for use in any of KeymanEngine's API functions. + +## Syntax + +``` swift +LanguageResourceFullID.fieldName +``` + +## Description + +The `LanguageResourceFullID` protocol is frequently used for lookup +operations within the KeymanEngine, as it represents the minimal amount +of data needed to uniquely identify an installation for any +`LanguageResource`. Both `FullKeyboardID` (for keyboards) and +`FullLexicalModelID` (for lexical models) implement this protocol, +allowing methods to be written that can handle either resource type. +Also note the existence of `AnyLanguageResourceFullID`, which serves a +"type erasure" role for classes implementing this protocol. + +## Associated Types + +`Resource: `[`LanguageResource`](.) +: The type of `LanguageResource` represented by this type. + +## Fields + +`id: String` +: The resource's internal name. This must be unique among all resources of the same type and follows standard unique ID constraints: a-z, A-Z, 0-9, and underscores only. + +`languageID: String` +: One language paired with this resource during installation. + +`type: LanguageResourceType` +: An enum representing resource types supported by the KeymanEngine. May be either `.keyboard` (for `FullKeyboardID`) or `.lexicalModel` (for `FullLexicalModelID`). + +### Example: Using `FullKeyboardID` to install a keyboard + +The following script illustrates the use of `FullKeyboardID`, which implements this protocol: + +``` swift +let packageURL = Bundle.main.url(forResource: "sil_euro_latin", withExtension: "kmp")! +let keyboardID = FullKeyboardID("sil_euro_latin", "fr") // Marks the keyboard for use with French. + +if let keyboardPackage = try ResourceFileManager.shared.prepareKMPInstall(packageURL) as? KeyboardKeymanPackage { + // Gets the all of the package's metadata for the specified resource, without installing it. + // Returned type: InstallableKeyboard + let keyboard = keyboardPackage.findResource(withID: keyboardID) + // ... +} +``` + +## History + +While the classes that implement the protocol existed before this, the protocol itself was added in Keyman Engine for iPhone and iPad 14.0. + +## See Also + +[`LanguageResource`](.) +: Represents all metadata used internally by the KeymanEngine for installed keyboards and lexical models. diff --git a/developer/engine/iphone-and-ipad/20.0/LanguageResource/index.md b/developer/engine/iphone-and-ipad/20.0/LanguageResource/index.md new file mode 100644 index 000000000..302a92733 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/LanguageResource/index.md @@ -0,0 +1,103 @@ +--- +title: LanguageResource protocol +--- + +## Summary + +The **LanguageResource** protocol and the types that implement it +(`InstallableKeyboard` and `InstallableLexicalModel`) represent keyboards and +lexical models installed within Keyman Engine. + +Generally speaking, this is a lower-level type than +[`LanguageResourceFullID`](LanguageResourceFullID), requiring extra metadata +only discovered during installation from a resource's package and only used +internally within Keyman Engine. + +## Syntax + +```swift +LanguageResource.fieldName +``` + +## Description + +The `LanguageResource` protocol is the base type used to represent specific +types of installed resources within Keyman Engine, paired with their target +languages. Both `InstallableKeyboard` and `InstallableLexicalModel` implement +this protocol, allowing methods to be written that can handle either resource +type. Also note the existence of `AnyLanguageResource`, which serves a "type +erasure" role for classes implementing this protocol. + +Important note: multiple copies of `LanguageResource` for the same underlying +resource will exist if that resource has been installed for use with multiple +languages. One instance will exist per target language that was selected for +installation. + +## Associated Types + +`FullID: LanguageResourceFullID` + +: The [`LanguageResourceFullID`](LanguageResourceFullID) type used to uniquely +identify the resource, comprised of the resource's ID, type, and paired language +code. Frequently used within the engine as a unique identifier for the resource +in searches and comparisons. + +`Package: KeymanPackage` + +: The derived type of [KeymanPackage](../KeymanPackage) supporting this type of +resource. + +For example, `InstallableKeyboard.Package == KeyboardKeymanPackage`. + +## Fields + +`id: String` + +: The resource's internal name. This must be unique among all resources of the +same type and follows standard unique ID constraints: a-z, A-Z, 0-9, and +underscores only. + +`name: String` + +: The resource's external name, as displayed to users. + +`languageID: String` + +: One language paired with this resource during installation. + +`packageID: String?` + +: The ID of the resource's source package. Is 'optional' for legacy reasons. + +`packageKey: `[`KeymanPackage.Key`](../KeymanPackage/key) + +: The unique identifier for the resource's source package. + +`version: String` + +: The resource's installed version. + +`sourceFilename: String` + +: The filename of the package component used internally within Keyman Engine +to load the resource. + +`fullID: `[`AnyLanguageResourceFullID`](LanguageResourceFullID) + +: A unique identifier used in language resource searches and comparisons. + +## History + +While the classes that implement the protocol existed before this, the protocol +itself was added in Keyman Engine for iPhone and iPad 14.0. + +## See Also + +[`KeymanPackage`](../KeymanPackage) + +: Represents packages containing language resources. + +[`LanguageResourceFullID`](LanguageResourceFullID) + +: Unique identifiers used in language resource searches and comparisons. + diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/addKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/addKeyboard.md new file mode 100644 index 000000000..b71713a3d --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/addKeyboard.md @@ -0,0 +1,57 @@ +--- +title: Manager.addKeyboard() +--- + +## Summary + +The **`addKeyboard()`** method adds a keyboard into the keyboards list. + +**Deprecated** in favor of +[ResourceFileManager.shared.install()](../ResourceFileManager/install), which automatically includes the functionality of this method. + +## Syntax + +``` swift +Manager.addKeyboard(keyboard: InstallableKeyboard) +``` + +### Parameters + +`keyboard` +: The keyboard. + +## Description + +Use this method to include a keyboard in the keyboards list so that it +can be selected from the keyboards menu. If the keyboard with same +keyboard ID and language ID exists, it updates the existing keyboard +info. + +## Examples + +### Using `addKeyboard()` + +The following script illustrates the use of `addKeyboard()`: + +``` swift +// Add a custom keyboard +let kb = InstallableKeyboard(id: "tamil99m", + name: "Tamil 99M", + languageID: "ta", + languageName: "Tamil", + version: "1.1", + isRTL: false, + font: Font(filename: "aava1.ttf"), + oskFont: nil, + isCustom: true) +Manager.shared.addKeyboard(Defaults.keyboard) +Manager.shared.addKeyboard(kb) +``` + +## History + +Deprecated in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`removeKeyboard()`](removeKeyboard) diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/canAddNewKeyboards.md b/developer/engine/iphone-and-ipad/20.0/Manager/canAddNewKeyboards.md new file mode 100644 index 000000000..6bb9a5415 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/canAddNewKeyboards.md @@ -0,0 +1,33 @@ +--- +title: Manager.canAddNewKeyboards +--- + +## Summary + +The **`canAddNewKeyboards`** method returns whether adding a new keyboard is enabled in the keyboard picker menu. + +## Syntax + +``` swift +Manager.canAddNewKeyboards +``` + +### Returns + +Returns `true` if adding a new keyboard is enabled, `false` otherwise. + +## Description + +Use this method to check if '+' (add new keyboard) button is enabled in the keyboard picker menu. + +## Examples + +### Using `canAddNewKeyboards` + +The following script illustrates the use of `canAddNewKeyboards`: + +``` swift + if Manager.canAddNewKeyboard { + // add new keyboard button is enabled + } +``` diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/currentKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/currentKeyboard.md new file mode 100644 index 000000000..7fad51eab --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/currentKeyboard.md @@ -0,0 +1,32 @@ +--- +title: Manager.currentKeyboard +--- + +## Summary + +The **`currentKeyboard`** method returns info for the current keyboard, if its set. + +## Syntax + +``` swift +Manager.currentKeyboard +``` + +### Returns + +Returns the keyboard information `InstallableKeyboard`. + +## Description + +Use this method to get the current keyboard information. + +## Examples + +### Using `currentKeyboard` + +The following script illustrates the use of `currentKeyboard`: + +``` swift + let keyboardInfo = Manager.shared.currentKeyboard + let currentKeyboardId = keyboardInfo?.id ?? Defaults.keyboard.id +``` diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/dismissKeyboardPicker.md b/developer/engine/iphone-and-ipad/20.0/Manager/dismissKeyboardPicker.md new file mode 100644 index 000000000..8ed27c1f2 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/dismissKeyboardPicker.md @@ -0,0 +1,38 @@ +--- +title: Manager.dismissKeyboardPicker() +--- + +## Summary + +The **`dismissKeyboardPicker()`** method hides the keyboard picker. + +## Syntax + +``` swift +Manager.dismissKeyboardPicker(viewController: UIViewController) +``` + +### Parameters + +`viewController` +: View controller. + +## Description + +This dismisses the language list. + +## Examples + +### Using `dismissKeyboardPicker` + +The following script illustrates the use of `dismissKeyboardPicker`: + +``` swift +if !_isDoneButtonEnabled { + Manager.shared.dismissKeyboardPicker(self) +} +``` + +## See also + +- [`showKeyboardPicker()`](showKeyboardPicker) diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/downloadKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/downloadKeyboard.md new file mode 100644 index 000000000..cf4ee5b23 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/downloadKeyboard.md @@ -0,0 +1,65 @@ +--- +title: Manager.downloadKeyboard() +--- + +## Summary + +The **`downloadKeyboard()`** method installs keyboards for active use. + +## Syntax + +``` swift +Manager.downloadKeyboard(withID: String, languageID: String, isUpdate: Bool, fetchRepositoryIfNeeded: Bool = true) +``` + +### Parameters + +`withID` +: ID of the keyboard. + +`languageID` +: ID of the language. + +`isUpdate` +: Boolean to keep the keyboard files on failure. + +`fetchRepositoryIfNeeded` +: Fetch the list of keyboards from the API if necessary. + +## Description + +This syntax can be used to asynchronously fetch the keyboard files. + +### Example 1: Using `downloadKeyboard()` + +The following script illustrates the use of `downloadKeyboard()`: + +``` swift +Manager.shared.downloadKeyboard(withID: keyboard.id, languageID: keyboard.languageID, isUpdate: false) +``` + +------------------------------------------------------------------------ + +## Syntax + +``` swift +Manager.downloadKeyboard(url: URL) +``` + +### Parameter + +`url` +: URL to a .KMP package containing the keyboard. + +## Description + +This syntax can be used to asynchronously fetch the keyboard files. + +### Example 2: Using `downloadKeyboard()` + +The following script illustrates the use of `downloadKeyboard()`: + +``` swift +let url = URL(string: "https://example.com/keyboard.kmp") +Manager.shared.downloadKeyboard(from: url!) +``` diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/downloadLexicalModel.md b/developer/engine/iphone-and-ipad/20.0/Manager/downloadLexicalModel.md new file mode 100644 index 000000000..7cfd195ef --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/downloadLexicalModel.md @@ -0,0 +1,65 @@ +--- +title: Manager.downloadLexicalModel() +--- + +## Summary + +The **`downloadLexicalModel()`** method installs dictionaries (lexical models) for active use. + +## Syntax + +``` swift +Manager.downloadLexicalModel(withID: String, languageID: String, isUpdate: Bool, fetchRepositoryIfNeeded: Bool = true) +``` + +### Parameters + +`withID` +: ID of the dictionary. + +`languageID` +: ID of the language. + +`isUpdate` +: Boolean to keep the dictionary files on failure. + +`fetchRepositoryIfNeeded` +: Fetch the list of language resources from the API if necessary. + +## Description + +This syntax can be used to asynchronously fetch dictionary files. + +### Example 1: Using `downloadLexicalModel()` + +The following script illustrates the use of `downloadLexicalModel()`: + +``` swift +Manager.shared.downloadLexicalModel(withID: model.id, languageID: model.languageID, isUpdate: false) +``` + +------------------------------------------------------------------------ + +## Syntax + +``` swift +Manager.downloadLexicalModel(url: URL) +``` + +### Parameter + +`url` +: URL to a .MODEL.KMP package containing the dictionary. + +## Description + +This syntax can be used to asynchronously fetch the dictionary files. + +### Example 2: Using `downloadLexicalModel()` + +The following script illustrates the use of `downloadLexicalModel()`: + +``` swift +let url = URL(string: "https://example.com/en.example.model.kmp") +Manager.shared.downloadLexicalModel(from: url!) +``` diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/fontNameForKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/fontNameForKeyboard.md new file mode 100644 index 000000000..835c2d058 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/fontNameForKeyboard.md @@ -0,0 +1,40 @@ +--- +title: Manager.fontNameForKeyboard() +--- + +## Summary + +The **`fontNameForKeyboard()`** method returns the font name for the given keyboard. + +## Syntax + +``` swift +Manager.fontNameForKeyboard(fullID: FullKeyboardID) +``` + +### Parameter + +`fullID` +: Full ID of the keyboard. + +### Returns + +Returns `String` of the font name, `nil` if the keyboard doesn't have a +font. + +## Description + +This syntax can be used for getting the font name of a keyboard. + +### Example 1: Using `fontNameForKeyboard()` + +The following script illustrates the use of `fontNameForKeyboard()`: + +``` swift +let fontName: String? +if let id = Manager.shared.currentKeyboardID { + fontName = Manager.shared.fontNameForKeyboard(withFullID: id) +} else { + fontName = nil +} +``` diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/hideKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/hideKeyboard.md new file mode 100644 index 000000000..4ddac1442 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/hideKeyboard.md @@ -0,0 +1,31 @@ +--- +title: Manager.hideKeyboard() +--- + +## Summary + +The **`hideKeyboard()`** method hides the in-app OSK. + +## Syntax + +``` swift +Manager.hideKeyboard() +``` + +## Description + +A common usage is to hide the in-app OSK so that it does not obscure part of an app's dismissible popup notifications or windows. + +## Examples + +### Using `hideKeyboard` + +The following script illustrates the use of `hideKeyboard`: + +``` swift +Manager.shared.hideKeyboard() +``` + +## See also + +- [`showKeyboard()`](showKeyboard) diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/index.md b/developer/engine/iphone-and-ipad/20.0/Manager/index.md new file mode 100644 index 000000000..c56a4b3ad --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/index.md @@ -0,0 +1,84 @@ +--- +title: Manager class +--- + +## Summary + +The **Manager** class provides methods and properties for controlling Keyman Engine + +## Description + +The Manager is the core class which provides most of the methods, properties, and constants you will need to develop your apps with Keyman Engine + +## Properties + +[`spacebarText`](spacebarText) + +: controls the default text pattern shown on the spacebar + +## Methods + +[`addKeyboard()`](addKeyboard) + +: adds a keyboard into the keyboards list + +[`canAddNewKeyboards`](canAddNewKeyboards) + +: returns whether adding a new keyboard is enabled in the keyboard picker menu + +[`currentKeyboard()`](currentKeyboard) + +: returns info for the currently selected keyboard + +[`dismissKeyboardPicker()`](dismissKeyboardPicker) + +: hides the list of keyboards + +[`downloadKeyboard()`](downloadKeyboard) + +: asynchronously fetches the keyboard files + +[`downloadLexicalModel()`](downloadKeyboard) + +: asynchronously fetches the dictionary files + +[`fontNameForKeyboard()`](fontNameForKeyboard) + +: returns the font name for the given keyboard ID and language ID + +[`hideKeyboard()`](hideKeyboard) + +: hides the in-app OSK + +[`keyboardHeight()`](keyboardHeight) + +: returns the height of the keyboard + +[`removeKeyboard()`](removeKeyboard) + +: removes the keyboard at specified position from the keyboards list + +[`setKeyboard()`](setKeyboard) + +: sets the keyboard to be used + +[`showKeyboard()`](showKeyboard) + +: show the in-app OSK + +[`showKeyboardPicker()`](showKeyboardPicker) + +: displays a list of available keyboards and allows a user to add/remove keyboards + +[`stateForKeyboard()`](stateForKeyboard) + +: returns the current state of availability for a keyboard + +[`stateForLexicalModel()`](stateForLexicalModel) + +: returns the current state of availability for a dictionary + +[`switchToNextKeyboard()`](switchToNextKeyboard) + +: loads the next available keyboard in keyboards list + diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/keyboardHeight.md b/developer/engine/iphone-and-ipad/20.0/Manager/keyboardHeight.md new file mode 100644 index 000000000..be2cf3123 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/keyboardHeight.md @@ -0,0 +1,40 @@ +--- +title: Manager.KeyboardHeight +--- + +## Summary + +The **`keyboardHeight`** method returns the keyboard height, based on whether the keyboard is a system keyboard and the device orientation. + +## Syntax + +``` swift +Manager.keyboardHeight +``` + +### Returns + +Returns the keyboard height (CGFloat) + +## Description + +This syntax can be used for getting the keyboard height, including any space occupied by its banner if shown. + +## Examples + +### Example 1: Using `keyboardHeight` + +The following script illustrates the use of `keyboardHeight`: + +``` swift +let kbWidth = keyboardWidth +let kbHeight = keyboardHeight +keymanWeb.frame = CGRect(x: 0.0, y: 0.0, width: kbWidth, height: kbHeight + 1000) +``` + +------------------------------------------------------------------------ + +## See also + +- [`addKeyboard()`](addKeyboard) +- [`switchToNextKeyboard()`](switchToNextKeyboard) diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/removeKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/removeKeyboard.md new file mode 100644 index 000000000..afc78a6d5 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/removeKeyboard.md @@ -0,0 +1,82 @@ +--- +title: Manager.removeKeyboard() +--- + +## Summary + +The **`removeKeyboard()`** method removes a keyboard from the keyboard +list by a specified keyboard ID or position. + +## Syntax + +``` swift +Manager.removeKeyboard(fullID: FullKeyboardID) +``` + +### Parameter + +`fullID` +: The full keyboard ID. + +### Returns + +Returns `true` if the keyboard exists and was removed, `false` +otherwise. + +## Description + +Use this method to remove a keyboard from the list in the keyboard +picker. If the keyboard doesn't exist, it will be ignored and the method +will return `false` without altering the keyboards list. + +## Examples + +### Example: Using `removeKeyboard()` + +The following script illustrates the use of `removeKeyboard()`: + +``` swift +Manager.removeKeyboard('tamil99'); +``` + + + +------------------------------------------------------------------------ + +## Syntax + +``` swift +Manager.removeKeyboard(index: Int) +``` + +### Parameter + +`index` +: Index of keyboard to remove from the keyboards list. + +### Returns + +Returns `true` if the keyboard exists and was removed, `false` +otherwise. + +## Description + +Use this method to remove the keyboard at index from the keyboards list. +If the keyboard doesn't exist, it will be ignored and the method will +return `false` without altering the keyboards list. + +## Examples + +### Example: Using `removeKeyboard()` + +The following script illustrates the use of `removeKeyboard()`: + +``` swift +if Manager.shared.removeKeyboard(at: indexPath.row) { + loadUserKeyboards() +} +``` + +## See also + +- [`addKeyboard()`](addKeyboard) diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/setKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/setKeyboard.md new file mode 100644 index 000000000..bfa1a6ed2 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/setKeyboard.md @@ -0,0 +1,84 @@ +--- +title: Manager.setKeyboard() +--- + +## Summary + +The **`setKeyboard()`** method sets the current keyboard to be used, querying the user's list of keyboards. + +## Syntax + +``` swift +Manager.setKeyboard(fullID: FullKeyboardID) +``` + +### Parameter + +`fullID` +: ID of the keyboard. + +### Returns + +Returns `true` if the keyboard was set successfully, `false` otherwise. + +## Description + +This syntax can be used for setting a keyboard which is available on the +Keyman server. Make sure language list is displayed (see +[`showKeyboardPicker()`](showKeyboardPicker)) at least once before using +this syntax, otherwise it may fail to set the keyboard properly. Do not +use this syntax to set a custom keyboard. + +## Examples + +### Example 1: Using `setKeyboard()` + +The following script illustrates the use of `setKeyboard()`: + +``` swift + // Setting a Keyman keyboard + Manager.setKeyboard("sil_euro_latin"); +``` + +------------------------------------------------------------------------ + +## Syntax + +``` swift +Manager.setKeyboard(kb: InstallableKeyboard) +``` + +### Parameter + +`kb` +: Information for the keyboard to set. + +### Returns + +Returns `true` if the keyboard was set successfully, `false` otherwise. + +## Description + +This syntax can be used for setting a keyboard which is available on the +Keyman server. Make sure language list is displayed (see +[`showKeyboardPicker()`](showKeyboardPicker)) at least once before using +this syntax, otherwise it may fail to set the keyboard properly. Do not +use this syntax to set a custom keyboard. + +## Examples + +### Example 1: Using `setKeyboard()` + +The following script illustrates the use of `setKeyboard()`: + +``` swift +for keyboard in keyboards { + Manager.shared.addKeyboard(keyboard) + Manager.shared.setKeyboard(keyboard) +} +``` + +## See also + +- [`addKeyboard()`](addKeyboard) +- [`switchToNextKeyboard()`](switchToNextKeyboard) diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/showKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/showKeyboard.md new file mode 100644 index 000000000..8b3aa1348 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/showKeyboard.md @@ -0,0 +1,35 @@ +--- +title: Manager.showKeyboard() +--- + +## Summary + +The **`showKeyboard()`** method shows the in-app OSK. + +## Syntax + +``` swift +Manager.showKeyboard() +``` + +## Description + +Use this method to restore the in-app OSK after it has been hidden with +`hideKeyboard`. One common case is to restore the OSK after dismissal of +an app's popup notifications or windows. + +## Examples + +### Example: Using `showKeyboard()` + +The following script illustrates the use of `showKeyboard()` in the +Keyman for iPhone and iPad app's "Getting Started" view so that the +keyboard doesn't hide the lower options on certain devices + +``` swift +Manager.shared.showKeyboard() +``` + +## See also + +- [`hideKeyboard()`](hideKeyboard) diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/showKeyboardPicker.md b/developer/engine/iphone-and-ipad/20.0/Manager/showKeyboardPicker.md new file mode 100644 index 000000000..e0362e8df --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/showKeyboardPicker.md @@ -0,0 +1,43 @@ +--- +title: Manager.showKeyboardPicker() +--- + +## Summary + +The **`showKeyboardPicker()`** method displays a list of available +keyboards and allows a user to add/download new keyboards or remove +existing ones. + +## Syntax + +``` swift +Manager.showKeyboardPicker(viewController: UIViewController, shouldAddKeyboard: Bool) +``` + +### Parameters + +`viewController` +: The current UIViewController (recommended) or the navigation controller. + +`shouldAddKeyboard` +: Whether to immediately open the subview to add a new keyboard. If set to `false`, the language picker won't be displayed + +## Description + +Use this method to display keyboard picker menu. Normally you do not +need to call this method explicitly since, by default, Keyman on-screen +keyboard calls this method to display the keyboard picker menu whenever +'globe' key is tapped. Multiple calls to this method are unsafe and may +result in multiple instances of keyboard picker menu being displayed at +the same time. + +## Examples + +### Example: Using `showKeyboardPicker()` + +The following script illustrates the use of `showKeyboardPicker()`: + +``` swift +mainViewController.dismissGetStartedView(nil) +Manager.shared.showKeyboardPicker(in: mainViewController, shouldAddKeyboard: true) +``` diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/spacebarText.md b/developer/engine/iphone-and-ipad/20.0/Manager/spacebarText.md new file mode 100644 index 000000000..2c7c28e82 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/spacebarText.md @@ -0,0 +1,31 @@ +--- +title: Manager.spacebarText +--- + +## Summary + +The `spacebarText` property gets or sets the current text display pattern for +the spacebar. + +## Syntax + +```swift +Manager.SpacebarText pattern = Manager.spacebarText +Manager.spacebarText = pattern +``` + +### Returns + +`Manager.SpacebarText` is an enum with the following members: + + * `LANGUAGE` - the language name for the keyboard + * `KEYBOARD` - the keyboard name + * `LANGUAGE_KEYBOARD` - both the language name and the keyboard name, + separated by hyphen + * `BLANK` - no text to be displayed + +## Description + +The default text display pattern is `LANGUAGE_KEYBOARD`. The text shown on the +keyboard may be overridden on a per-keyboard basis with the `displayName` member +of `InstallableKeyboard`. diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/stateForKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/stateForKeyboard.md new file mode 100644 index 000000000..5affb5532 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/stateForKeyboard.md @@ -0,0 +1,48 @@ +--- +title: Manager.stateForKeyboard() +--- + +## Summary + +The **`stateForKeyboard()`** method returns the current state of availability for a keyboard. + +**Deprecated**, as keyboards and lexical models are no longer directly downloaded in favor of packages. Refer to [`ResourceFileManager.shared.installState()`](../ResourceFileManager/installState) + +## Syntax + +``` swift +Manager.stateForKeyboard(keyboardID: String) +``` + +### Parameter + +`keyboardID` +: ID of the keyboard. + +### Returns + +Returns the keyboard state: `downloading`, `needsDownload`, `needsUpdate`, or `upToDate`. + +## Description + +This syntax can be used for getting the state of a keyboard. + +## Examples + +### Example: Using `stateForKeyboard()` + +The following script illustrates the use of `stateForKeyboard()`: + +``` swift +let kbState = Manager.shared.stateForKeyboard(withID: kb.id) +if kbState == .needsUpdate { + if !kbIDs.contains(kb.id) { + kbIDs.insert(kb.id) + updateQueue!.append(kb) + } +} +``` + +## History + +Deprecated in Keyman Engine for iPhone and iPad 14.0. diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/stateForLexicalModel.md b/developer/engine/iphone-and-ipad/20.0/Manager/stateForLexicalModel.md new file mode 100644 index 000000000..78c7a90ba --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/stateForLexicalModel.md @@ -0,0 +1,51 @@ +--- +title: Manager.stateForLexicalModel() +--- + +## Summary + +The **`stateForLexicalModel()`** method returns the current state of +availability for a dictionary. + +**Deprecated**, as keyboards and lexical models are no longer directly +downloaded in favor of packages. Refer to [`ResourceFileManager.shared.installState()`](../ResourceFileManager/installState) + +## Syntax + +``` swift +Manager.stateForLexicalModel(withID: String) +``` + +### Parameter + +`withID` +: ID of the dictionary. + +### Returns + +Returns the dictionary state: `downloading`, `needsDownload`, +`needsUpdate`, or `upToDate`. + +## Description + +This syntax can be used for getting the state of a dictionary. + +## Examples + +### Example: Using `stateForLexicalModel()` + +The following script illustrates the use of `stateForLexicalModel()`: + +``` swift +let dictState = Manager.shared.stateForLexicalModel(withID: dict.id) +if dictState == .needsUpdate { + if !dictIDs.contains(dict.id) { + dictIDs.insert(dict.id) + updateQueue!.append(dict) + } +} +``` + +## History + +Deprecated in Keyman Engine for iPhone and iPad 14.0. diff --git a/developer/engine/iphone-and-ipad/20.0/Manager/switchToNextKeyboard.md b/developer/engine/iphone-and-ipad/20.0/Manager/switchToNextKeyboard.md new file mode 100644 index 000000000..d0982c51e --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/Manager/switchToNextKeyboard.md @@ -0,0 +1,37 @@ +--- +title: Manager.switchToNextKeyboard() +--- + +## Summary + +The **`switchToNextKeyboard()`** method switches to the next keyboard. + +## Syntax + +``` swift +Manager.switchToNextKeyboard() +``` + +### Returns + +Returns the index of the newly selected keyboard. If there's no keyboard to switch to, returns `nil`. + +## Description + +Use this method to switch to next keyboard in the keyboards list. If the +next keyboard does not exists, then it loads the first keyboard in the +keyboards list. + +## Examples + +### Example: Using `switchToNextKeyboard()` + +The following script illustrates the use of `switchToNextKeyboard()`: + +``` swift +Manager.shared.switchToNextKeyboard() +``` + +## See also + +- [`setKeyboard()`](setKeyboard) diff --git a/developer/engine/iphone-and-ipad/20.0/PackageWebViewController/index.md b/developer/engine/iphone-and-ipad/20.0/PackageWebViewController/index.md new file mode 100644 index 000000000..89bcaae2a --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/PackageWebViewController/index.md @@ -0,0 +1,40 @@ +--- +title: PackageWebViewController class +--- + +## Summary + +The **PackageWebViewController** class is used to display web pages +contained within packages, ejecting any links outside the package into +an external browser. + +## Syntax + +```swift +class PackageWebViewController: UIViewController +``` + +## Description + +The PackageWebViewController class is used to display .html contents +bundled within packages. Links that lead outside the package are +supported, but will be opened externally. + +At this time, we directly support opening two types of common pages: +`.readme` and `.welcome`. We also provide `.custom(bundledPath: String)` +to allow use of any custom pages you may wish to embed within your +packages for use within your app. + +## Constructor + +`public init?(for package: `[`KeymanPackage`](../KeymanPackage)`, page: `[`KeymanPackagePage`](../KeymanPackage/pageURL) +: Retrieves the corresponding page from the package and prepares a view to display it. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See Also + +- [`KeymanPackage.pageURL`](../KeymanPackage/pageURL) +: Retrieves a `URL` for a .html page contained within a package. diff --git a/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/getInstalledPackage.md b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/getInstalledPackage.md new file mode 100644 index 000000000..bee8827ac --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/getInstalledPackage.md @@ -0,0 +1,31 @@ +--- +title: .getInstalledPackage(for:) +--- + +## Summary + +The **`getInstalledPackage()`** method is used to install resources from opened package files. + +## Syntax + +```swift +ResourceFileManager.shared.getInstalledPackage(for: Resource) +``` + +### Parameters + +`for` +: Either a [`InstalledKeyboard`](../LanguageResource) or a [`InstalledLexicalModel`](../LanguageResource) that has been previously installed. + +### Returns + +The package, as currently installed. May return `nil` if the specified resource is not currently installed. + +## History + +- Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`installedPackages: [KeymanPackage]`](installedPackages) +: Returns an array of all currently-installed packages. diff --git a/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/index.md b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/index.md new file mode 100644 index 000000000..6ffcc1fb1 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/index.md @@ -0,0 +1,44 @@ +--- +title: ResourceFileManager class +--- + +## Summary + +The **ResourceFileManager** class manages and installs keyboards and lexical models + +## Syntax + +```swift +ResourceFileManager.shared.methodName() +``` + +## Description + +The ResourceFileManager is the core class which provides most of the +methods needed to install and manage any keyboard and lexical model +resources you wish to use with Keyman Engine. + +With the move to use of package files in 14.0, which contain metadata +about your keyboards and lexical models, far less resource metadata +needs to be specified within your app in comparison to earlier versions +of the engine. + +## Field + +[`installedPackages: [KeymanPackage]`](installedPackages) +: Lists packages currently installed within the KeymanEngine. + +## Methods + +[`getInstalledPackage(for: Resource) -> Resource.Package`](getInstalledPackage) +: Retrieves the installed package for this resource, if available. + +[`install(resourceWithID: LanguageResourceFullID, from: KeymanPackage)`](install) +: Installs specified resources from opened package files for use within the KeymanEngine. + +[`prepareKMPInstall(from: URL)`](prepareKMPInstall) +: Given a local filesystem URL for a KMP package, this function imports, opens, and parses the file for use within KeymanEngine + +## History + +- Added in Keyman Engine for iPhone and iPad 14.0. diff --git a/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/install.md b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/install.md new file mode 100644 index 000000000..673f72311 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/install.md @@ -0,0 +1,66 @@ +--- +title: .install() +--- + +## Summary + +The **`install()`** method is used to install resources from opened package files. + +## Syntax + +```swift +ResourceFileManager.shared.install(resourceWithID: URL, from: KeymanPackage) throws +``` + +### Parameters + +`resourceWithID` +: Either a [`FullKeyboardID`](../LanguageResource/LanguageResourceFullID) or a [`FullLexicalModelID`](../LanguageResource/LanguageResourceFullID) corresponding to the resource to be installed from the package. + +`from` +: The opened package file + +### Throws + +May fail if the package does not contain or support the designated +resource and language pairing specified by the resource's ID. + +## Description + +This syntax can be used for installing resources from a KMP package. + +### Example: Using `install()` to install a keyboard + +The following script illustrates the use of `install()`: + +```swift +let packageURL = Bundle.main.url(forResource: "sil_euro_latin", withExtension: "kmp")! +let keyboardID = FullKeyboardID("sil_euro_latin", "fr") // Marks the keyboard for use with French. +do { + if let keyboardPackage = try ResourceFileManager.shared.prepareKMPInstall(packageURL) as? KeyboardKeymanPackage { + try ResourceFileManager.shared.install(resourceWithID: keyboardID, from: keyboardPackage) + } else { + // Report the error + } +} catch { + // Report the error +} +``` + +## History + +- Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`LanguageResourceFullID`](../LanguageResource/LanguageResourceFullID) +: A loaded package file containing one or more keyboards. + +- `KeyboardKeymanPackage` +: A loaded package file containing one or more keyboards. + +- `LexicalModelKeymanPackage` +: A loaded package file containing a lexical model. + +- [`ResourceFileManager.shared.prepareKMPInstall(from:)`](prepareKMPInstall) +: This method is used to open packages for use by `install()`. diff --git a/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/installState.md b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/installState.md new file mode 100644 index 000000000..1a4c7ab1f --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/installState.md @@ -0,0 +1,38 @@ +--- +title: .installState(forPackage:) +--- + +## Summary + +The **`installState()`** method is used to determine whether or not a package has been installed. + +## Syntax + +```swift +ResourceFileManager.shared.installState(forPackage: KeymanPackage.Key) -> KeymanPackage.InstallationState +``` + +### Parameter + +`forPackage` +: A [`KeymanPackage.Key`](../KeymanPackage/key) that uniquely identifies the package. + +### Returns + +Returns one of the following: + +`.none` +: The package has not been installed. + +`.downloading` +: KeymanEngine has been told to download the package, and the download is still pending. + +`.pending` +: The package has been downloaded and temporarily opened, but installation is still pending. + +`.installed` +: The package has been installed. + +## History + +- Added in Keyman Engine for iPhone and iPad 14.0. diff --git a/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/installedPackages.md b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/installedPackages.md new file mode 100644 index 000000000..9cc972dc1 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/installedPackages.md @@ -0,0 +1,26 @@ +--- +title: .installedPackages() +--- + +## Summary + +The **`ResourceFileManager.installedPackages`** field enumerates all packages installed into the KeymanEngine. + +## Syntax + +```swift +ResourceFileManager.shared.installedPackages: [ KeymanPackage ] +``` + +### Value + +An array of `KeyboardKeymanPackage` and `LexicalModelKeymanPackage` instances. + +## History + +- Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`getInstalledPackage(for: Resource) -> Resource.Package?`](getInstalledPackage)` ` +: Finds the installed package for an already-installed resource. diff --git a/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/prepareKMPInstall.md b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/prepareKMPInstall.md new file mode 100644 index 000000000..b8c54002c --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/ResourceFileManager/prepareKMPInstall.md @@ -0,0 +1,68 @@ +--- +title: .prepareKMPInstall() +--- + +## Summary + +The **`prepareKMPInstall()`** method imports and parses package files, making their contents easily accessible for installation. + +## Syntax + +```swift +ResourceFileManager.shared.prepareKMPInstall(from: URL) throws -> KeymanPackage +``` + +### Parameter + +`from` +: URL to the KMP package. + +### Returns + +Returns either a `KeyboardKeymanPackage` or a `LexicalModelKeymanPackage`, depending on which type of resource the .kmp package represents. + +### Throws + +May fail if the file specified by the URL does not exist, is not a KMP, or if the KMP is malformed or corrupted. + +## Description + +This syntax can be used for installing resources from a KMP package. + +### Example: Using `prepareKMPInstall()` to install a keyboard + +The following script illustrates the use of `prepareKMPInstall()`: + +```swift +let packageURL = Bundle.main.url(forResource: "sil_euro_latin", withExtension: "kmp")! +let keyboardID = FullKeyboardID("sil_euro_latin", "fr") // Marks the keyboard for use with French. +do { + if let keyboardPackage = try ResourceFileManager.shared.prepareKMPInstall(packageURL) as? KeyboardKeymanPackage { + try ResourceFileManager.shared.install(resourceWithID: keyboardID, from: keyboardPackage) + } else { + // Report the error + } +} catch { + // Report the error +} +``` + +--- +**Note:** the package and keyboard must explicitly support your selected language code. + +--- + +## History + +- Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- `KeyboardKeymanPackage` +: A loaded package file containing one or more keyboards. + +- `LexicalModelKeymanPackage` +: A loaded package file containing a lexical model. + +- [`ResourceFileManager.shared.install(resourceWithID:,from:)`](install) +: This method is used to install specific resources from package files opened by `prepareKMPInstall()`. diff --git a/developer/engine/iphone-and-ipad/20.0/TextField/dismissKeyboard.md b/developer/engine/iphone-and-ipad/20.0/TextField/dismissKeyboard.md new file mode 100644 index 000000000..64642e6fe --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TextField/dismissKeyboard.md @@ -0,0 +1,26 @@ +--- +title: TextField.dismissKeyboard() +--- + +## Summary + +The **`dismissKeyboard()`** method dismisses the keyboard if this textfield is the first responder. + +## Syntax + +```swift +TextField.dismissKeyboard() +``` + +## Description + +Use this instead of *[resignFirstResponder]* as it also resigns the Keyman keyboard's responders. + +## Example + +### Using `dismissKeyboard()` +The following script illustrates the use of `dismissKeyboard()`: + +```swift +TextField.dismissKeyboard() +``` diff --git a/developer/engine/iphone-and-ipad/20.0/TextField/index.md b/developer/engine/iphone-and-ipad/20.0/TextField/index.md new file mode 100644 index 000000000..34ee73949 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TextField/index.md @@ -0,0 +1,31 @@ +--- +title: TextField class +--- + +## Summary + +The TextField class provides a UITextField to use with Keyman Engine. + +## Syntax + +```swift +TextField.methodName() +``` + +## Description + +The viewController should be set to main view controller to enable keyboard picker. + +## Methods + +[`dismissKeyboard()`](dismissKeyboard) +: dismisses the keyboard if this textview is the first responder. + +`inputView` +: gets or sets the input view. + +[`setKeymanDelegate()`](setKeymanDelegate) +: sets the TextFieldDelegate instead of the normal UITextFieldDelegate. + +`text` +: gets or sets the text string. diff --git a/developer/engine/iphone-and-ipad/20.0/TextField/setKeymanDelegate.md b/developer/engine/iphone-and-ipad/20.0/TextField/setKeymanDelegate.md new file mode 100644 index 000000000..96c3e8a13 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TextField/setKeymanDelegate.md @@ -0,0 +1,33 @@ +--- +title: TextField.setKeymanDelegate() +--- + +## Summary + +The **`setKeymanDelegate()`** method sets the delegate. + +## Syntax + +```swift +TextField.setKeymanDelegate(keymanDelegate: TextFieldDelegate) +``` + +### Parameter + +`keymanDelegate` +: Keyman Delegate. + +## Description + +Use this TextFieldDelegate instead of the normal UITextFieldDelegate. + +## Example + +### Using `setKeymanDelegate()` +The following script illustrates the use of `setKeymanDelegate()`: + +```swift +textField1 = TextField() +setTextFieldStyle(textField1) +textField1.setKeymanDelegate(self) +``` diff --git a/developer/engine/iphone-and-ipad/20.0/TextView/dismissKeyboard.md b/developer/engine/iphone-and-ipad/20.0/TextView/dismissKeyboard.md new file mode 100644 index 000000000..b3fad778c --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TextView/dismissKeyboard.md @@ -0,0 +1,26 @@ +--- +title: TextView.dismissKeyboard() +--- + +## Summary + +The **`dismissKeyboard()`** method dismisses the keyboard if this textview is the first responder. + +## Syntax + +```swift +TextView.dismissKeyboard() +``` + +## Description + +Use this instead of *[resignFirstResponder]* as it also resigns the Keyman keyboard's responders. + +## Example + +### Using `dismissKeyboard()` +The following script illustrates the use of `dismissKeyboard()`: + +```swift +TextView.dismissKeyboard() +``` diff --git a/developer/engine/iphone-and-ipad/20.0/TextView/index.md b/developer/engine/iphone-and-ipad/20.0/TextView/index.md new file mode 100644 index 000000000..28bbb0440 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TextView/index.md @@ -0,0 +1,28 @@ +--- +title: TextView class +--- + +## Summary + +The TextView class provides a UITextView to use with Keyman Engine. + +## Syntax + +```swift +TextView.methodName() +``` + +## Description + +The viewController should be set to main view controller to enable keyboard picker. + +## Methods + +[`dismissKeyboard()`](dismissKeyboard) +: dismisses the keyboard if this textview is the first responder. + +[`setKeymanDelegate()`](setKeymanDelegate) +: sets the TextViewDelegate instead of the normal UITextViewDelegate. + +`text` +: gets or sets the text string. diff --git a/developer/engine/iphone-and-ipad/20.0/TextView/setKeymanDelegate.md b/developer/engine/iphone-and-ipad/20.0/TextView/setKeymanDelegate.md new file mode 100644 index 000000000..9f11c38f7 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TextView/setKeymanDelegate.md @@ -0,0 +1,35 @@ +--- +title: TextView.setKeymanDelegate() +--- + +## Summary + +The **`setKeymanDelegate()`** method sets the delegate. + +## Syntax + +```swift +TextView.setKeymanDelegate(keymanDelegate: TextViewDelegate) +``` + +### Parameter + +`keymanDelegate` +: Keyman Delegate. + +## Description + +Use this TextViewDelegate instead of the normal UITextViewDelegate. + +## Example + +### Using `setKeymanDelegate()` +The following script illustrates the use of `setKeymanDelegate()`: + +```swift +textView1 = TextView() +setTextViewStyle(textView1) +textView1.setKeymanDelegate(self) +``` + + diff --git a/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/findResource.md b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/findResource.md new file mode 100644 index 000000000..a5759903e --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/findResource.md @@ -0,0 +1,36 @@ +--- +title: .findResource(withID:) +--- + +## Summary + +The **`TypedKeymanPackage.findResource(withID:)`** method allows direct lookup of a resource's metadata. + +## Syntax + +```swift +TypedKeymanPackage.findResource(withID:) -> TypedLanguageResource? +``` + +### Parameters + +`withID: TypedLanguageResource.FullID` +: The unique identifier for the desired keyboard or lexical model and target language. + +### Value + +- An `InstallableKeyboard` (for a `KeyboardKeymanPackage`) or `InstallableLexicalModel` (for a `LexicalModelKeymanPackage`). + +- May be `nil` if no resource matching the specified ID is found within the package. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`installables: [[ TypedLanguageResource ]]`](installables) +: Returns a list of all resources & language pairings supported by this package. + +- [`installables(forLanguage: String): [ TypedLanguageResource ]`](installables_forLanguage) +: Provides the same functionality as the field above, but filtered to a specific language code. diff --git a/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/index.md b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/index.md new file mode 100644 index 000000000..e60e869a1 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/index.md @@ -0,0 +1,59 @@ +--- +title: TypedKeymanPackage class +--- + +## Summary + +The **TypedKeymanPackage** class and its subclasses provide precise typing for the contents of a [`KeymanPackage`](../KeymanPackage). + +## Syntax + +```swift +TypedKeymanPackage.methodName() +``` + +### Generic Parameters + +`TypedLanguageResource: `[`LanguageResource`](../LanguageResource) +: The type of resource contained within the package. Should be either `InstallableKeyboard` or `InstallableLexicalModel` + +## Description + +TypedKeymanPackage is the base class of `KeyboardKeymanPackage` and +` LexicalModelKeymanPackage`, both of which represent richly-typed +parses of their corresponding package files. + +--- +**Note:** The type erasure, [`KeymanPackage`](../KeymanPackage), will +often be easier to work with in methods looking to handle both types of +packages due to Swift's typing constraints. + +--- + +## Methods and Fields + +[`findResource(withID:) -> TypedLanguageResource?`](findResource)` ` +: Returns the resource matching the specified ID, if contained within + the package. + +[`installables: [[TypedLanguageResource]]`](installables)` ` +: Returns a list of all resources & language pairings supported by + this package. + + For `KeyboardKeymanPackage`, this resolves to + `[[InstallableKeyboard]]`, while for `LexicalModelKeymanPackage`, + this resolves to `[[InstallableLexicalModel]]`. + +[`installables(forLanguage: String) -> [TypedLanguageResource]`](installables_forLanguage)` ` +: A language-filtered version of the field above, with the 'language + index' dimension dropped. + + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See Also + +- [`KeymanPackage`](../KeymanPackage) +: The base class (and type erasure) for packages. diff --git a/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/installables.md b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/installables.md new file mode 100644 index 000000000..76aa6774d --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/installables.md @@ -0,0 +1,52 @@ +--- +title: .installables() +--- + +## Summary + +The **`TypedKeymanPackage.installables`** field enumerates all resources and language pairings supported by the current package. This is equivalent to [` KeymanPackage.installableResourceSets`](../KeymanPackage/installableResourceSets), but with more precise typing. + +## Syntax + +```swift +TypedKeymanPackage.installables: [[ TypedLanguageResource ]] +``` + +### Value + +The two dimensional array may be interpreted as follows: + +```swift +package.installables[resourceIndex][languageIndex] +``` + +`resourceIndex` +: Some legacy keyboard packages may support multiple keyboards. This + index enumerates the unique keyboards (or lexical models) contained + within the package. + +`languageIndex` +: Some resources support multiple languages. For example, Keyman's + default keyboard - `sil_euro_latin` There will be one entry for each + language supported by the resource. + +The indexed value +: An `InstallableKeyboard` (for a `KeyboardKeymanPackage`) or an + `InstallableLexicalModel` (for a `LexicalModelKeymanPackage`). + + These objects include data about the resource's fonts, targeted + language code, and resource identifiers. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`findResource(withID:) -> TypedLanguageResource?`](findResource)` ` +: Returns the resource matching the specified ID, if contained within + the package. + +- [`installables(forLanguage: String): [ TypedLanguageResource ]`](installables_forLanguage) +: Provides the same functionality as this field, but filtered to a + specific language code. diff --git a/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/installables_forLanguage.md b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/installables_forLanguage.md new file mode 100644 index 000000000..d20380485 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/TypedKeymanPackage/installables_forLanguage.md @@ -0,0 +1,42 @@ +--- +title: .installables(forLanguage:) +--- + +## Summary + +The **`TypedKeymanPackage.installables(forLanguage:)`** method +enumerates all resources and language pairings supported by the current +package for the specified language code. + +## Syntax + +```swift +TypedKeymanPackage.installables(forLanguage:) -> [ TypedLanguageResource ] +``` + +### Parameters + +`forLanguage: String` +: A BCP-47 language code. + +### Value + +An array of `InstallableKeyboard` (for a `KeyboardKeymanPackage`) or +`InstallableLexicalModel` (for a `LexicalModelKeymanPackage`) +instances. + +For most packages, there will only be a single entry in this array. +However, note that multi-keyboard packages may support multiple +keyboards for the same target language. + +## History + +Added in Keyman Engine for iPhone and iPad 14.0. + +## See also + +- [`findResource(withID:) -> TypedLanguageResource?`](findResource)` ` +: Returns the resource matching the specified ID, if contained within the package. + +- [`installables: [[ TypedLanguageResource ]]`](installables) +: Returns a list of all resources & language pairings supported by this package. diff --git a/developer/engine/iphone-and-ipad/20.0/guides/in-app/index.md b/developer/engine/iphone-and-ipad/20.0/guides/in-app/index.md new file mode 100644 index 000000000..96240fa26 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/guides/in-app/index.md @@ -0,0 +1,94 @@ +--- +title: Guide: build an in-app keyboard +--- + +Keyman Engine for iPhone and iPad allows you to use any Keyman touch +keyboard in your iOS app, or even to create your own system keyboard app +for purchase in the App Store. +This guide will walk you through the steps for creating your first iOS +app with Keyman Engine for iPhone and iPad. + +If you are not familiar with iOS development, you will find the ["Start Developing iOS Apps" online guide by Apple](https://developer.apple.com/tutorials/app-dev-training/) an invaluable resource, and working through some of their tutorials first will help you with the rest of this guide. + +### 1. Install Free Tools + +1. Install [Keyman Developer 10 or later](https://keyman.com/developer/) on a Windows machine. + - Alternatively, it is possible to compile keyboards with the command-line tool [kmc](https://help.keyman.com/developer/current-version/reference/kmc/cli/reference), but we do not yet support a GUI interface for keyboard development on macOS. +2. Install + [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12). + +### 2. Download the Keyman Engine for iOS and Sample Project + +1. Keyman v10+ users can download the engine from downloads.keyman.com + + Download the latest [keyman-engine-ios.zip](https://downloads.keyman.com/ios/stable/) and extract the files to a new folder. + +The archive includes two sample projects and an iOS-targetting .framework file. This guide will use the first example project, **KMSample1**. + +1. The KMSample1 project can be found at **samples/KMSample1**. +2. Double-click **KMSample1.xcodeproj** to begin, or open it via **File > Open** to get started. + +### 3. Create a keyboard layout + +Use Keyman Developer to build a touch layout. The following documents walk through some of the development and testing for creating a touch keyboard layout: + +- [Creating a Touch Keyboard Layout for Amharic with Keyman Developer 12](/developer/current-version/guides/develop/creating-a-touch-keyboard-layout-for-amharic) +- [Creating A Touch Keyboard Layout For Amharic — The Nitty Gritty](/developer/current-version/guides/develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty) +- [How to test your keyboard layout with Keyman Developer — touch and desktop](/developer/current-version/guides/test/keyboard-touch-and-desktop) + +When your keyboard is ready, you should have a compiled keyboard package. The example below shows the Thamizha Tamil99 touch layout. + +![Keyman-developer](/cdn/dev/img/engine/ios/16.0/guides/in-app/keyboard-layout-in-developer-800wi.png "Keyman-developer") + +Open the package tab for your keyboard and compile it. Then, open the folder containing your package + +![Keyman-developer-open-containing-folder](/cdn/dev/img/engine/ios/16.0/guides/in-app/find-package-via-developer-800wi.png "Keyman-developer-open-containing-folder") + +![Compiled-keyboard-file](/cdn/dev/img/engine/ios/16.0/guides/in-app/package-file-800wi.png "Compiled-keyboard-file") + +### 4. Add your keyboard package to the project + +Copy your compiled keyboard package (in this example **ekwtamil99uni.kmp**) to your macOS machine within the **KMSample1\Keyboards** folder. + +![Copy-keyboard-file](/cdn/dev/img/engine/ios/16.0/guides/in-app/package-import.png "Copy-keyboard-file") + +When you switch back into Xcode, use the right-click context menu to "Add Files to 'KMSample1'": + +![Android-studio-assets](/cdn/dev/img/engine/ios/16.0/guides/in-app/xcode-package-import-800wi.png "Android-studio-assets") + +Next, edit `ViewController.viewDidLoad()` to add the keyboard (ekwtamil99uni) with `Manager.shared` from KeymanEngine.framework. + +``` swift + // Add a custom keyboard + let kmpFileURL = Bundle.main.url(forResource: "ekwtamil99uni", withExtension: "kmp")! + let keyboardID = FullKeyboardID(keyboardID: "ekwtamil99uni", languageID: "ta") + + do { + let package = try ResourceFileManager.shared.prepareKMPInstall(from: kmpFileURL) as! KeyboardKeymanPackage + try ResourceFileManager.shared.install(resourceWithID: keyboardID, from: package) + + _ = Manager.shared.setKeyboard(withFullID: keyboardID) + } catch { + print("Error preloading: \(error)") + } +``` + +![Android-studio-adding-keyboard](/cdn/dev/img/engine/ios/16.0/guides/in-app/fully-imported-800wi.png "Android-studio-adding-keyboard") + +### 5. Build and run the app + +You can run your app through Xcode's built-in Simulator, which can +emulate a number of iOS devices. Simply choose a target device to test +against from the drop-down toward the top-left. For example, in the +previous image, you can see "iPod Touch (7th generation)" selected. + +![Android-emulator-tamil](/cdn/dev/img/engine/ios/16.0/guides/in-app/ios-simulator-tamil.png "Android-emulator-tamil") + +And there you have it: your first Keyman Engine for iPhone and iPad app! + +## See Also + +- [Guide: Build a system keyboard app](../system-keyboard/) +- [Keyman Developer Documentation](/developer/current-version/) +- [Keyman Engine for iPhone and iOS Documentation](../../) +- [Apple Developer Home](https://developer.apple.com/) diff --git a/developer/engine/iphone-and-ipad/20.0/guides/index.md b/developer/engine/iphone-and-ipad/20.0/guides/index.md new file mode 100644 index 000000000..19c585411 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/guides/index.md @@ -0,0 +1,6 @@ +--- +title: Keyman Engine for iPhone and iPad Developer Guides +--- + +- [Build an in-app keyboard](in-app/) +- [Build a system keyboard app](system-keyboard/) diff --git a/developer/engine/iphone-and-ipad/20.0/guides/system-keyboard/index.md b/developer/engine/iphone-and-ipad/20.0/guides/system-keyboard/index.md new file mode 100644 index 000000000..9cad01956 --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/guides/system-keyboard/index.md @@ -0,0 +1,88 @@ +--- +title: Guide: build a system keyboard app +--- + +In [part 1](../in-app/) of this series, we looked at the steps involved +in creating a basic Android app which included a Keyman in-app keyboard. +In this post, we'll work with the second sample included in the Keyman +Engine for iPhone and iPad package, which is a very basic System +Keyboard app. This post builds on concepts and setup from the first +post, so be sure you are familiar with that before you start on this +one. + +### 1. Basic configuration + +As you may recall, the Keyman Engine for iPhone and iPad archive +includes two sample projects. This guide will use the second example +project, **KMSample2**. + +**1)** The KMSample2 project can be found at **samples/KMSample2**. + +**2)** Double-click **KMSample2.xcodeproj** to begin, or open it via **File > Open** to get started. + +### 2. Run the sample app + +The KMSample2 app includes the Thamizha Tamil99 keyboard as an example +keyboard. Without any further modifications to the code, the app should +run and you'll be able to configure your device to use your app as the +system keyboard. + +However, due to Apple's code signing policies, you'll need to reconfigure the project a bit first: + +**1)** You will need to choose an unreserved App Group name for compilation to succeed. Do a find and replace on "group.KMSample" with your custom name. + +**2)** You may also need to alter the Bundle Identifier under the project properties' "General" tab. + +**3)** Note that provisioning profiles must be set for both the KMSample2 and SWKeyboard targets. + +**4)** The downloaded project does not bundle the frameworks you'll need - make sure to get those in place. + - Refer to our [Cartfile](https://github.com/keymanapp/keyman/blob/stable-16.0/ios/Cartfile), which is used with the Carthage dependency manager. + +Once all of the pieces are in place, launch the app in Simulator, then +back out to the main screen. From there, launch the Settings app and go +to **General > Keyboards > Keyboards** to enable KMSample2 as a +system keyboard. + +![Emulator](/cdn/dev/img/engine/ios/16.0/guides/system-keyboard/set-sys-kbd.png "Emulator") + +Once that's done, open any app that can accept text input and select +KMSample2 as your keyboard! Note that in this sample, the Thamizha +Tamil99 keyboard can be accessed through the keyboard's "globe" key if +it is not set active within KMSample2. + +![Emulator](/cdn/dev/img/engine/ios/16.0/guides/system-keyboard/sys-kbd-active.png "Emulator") + +### 3. Extending the app + +From here, you will no doubt want to replace the keyboard with your own +one; again, follow the instructions from Part 1 to make this change. + +You can also customise the look and feel of the on screen keyboard by +including a custom CSS file in your keyboard through Keyman Developer. + +![AddEmbeddedCSS](/cdn/dev/img/engine/ios/16.0/guides/system-keyboard/developer-add-css-800wi.png "AddEmbeddedCSS") + +The CSS rules required to style your keyboard are beyond the scope of +this post, but the **kmwosk.css** file included in the Keyman Developer +16.0 distribution and in the [KeymanWeb 16.0 source](https://github.com/keymanapp/keyman/blob/master/web/src/resources/osk/kmwosk.css) is a good place to start. See this [reference](http://help.keyman.com/developer/engine/web/current-version/reference/osk/classes) for more information about the On-Screen Keyboard. + +Apple does not allow for automatic enabling of your app's system +keyboard. To assist users, you may wish to use following code to launch +the appropriate menu within Settings, making setup simple for them: + +``` swift +if let appSettings = URL(string: UIApplication.openSettingsURLString) { + UIApplication.shared.openURL(appSettings) +} +``` + +That's all there is to creating a System Keyboard with Keyman Engine for +iPhone and iPad. We've taken care of all the complex details of +keyboarding in the Keyman Engine, so you can focus on the look and feel +and the layout of your keyboard. + +### Further links + +- [Part 1 of this series](../in-app/) +- [Keyman Developer Documentation](/developer/current-version/) +- [Apple Developer Home](http://developer.apple.com/) diff --git a/developer/engine/iphone-and-ipad/20.0/index.md b/developer/engine/iphone-and-ipad/20.0/index.md new file mode 100644 index 000000000..af1a6998d --- /dev/null +++ b/developer/engine/iphone-and-ipad/20.0/index.md @@ -0,0 +1,155 @@ +--- +title: Keyman for iPhone and iPad Developer Support +--- + +## Overview + +The Keyman Engine for iPhone and iPad 20.0 SDK is designed to provide +advanced international keyboard support to iOS apps. + +As a developer, you simply need to use (or subclass) TextView or +TextField instead of using an ordinary UITextView or UITextField. + +To let a user pick/download additional keyboards, there are 2 pre-made +buttons you can use that bring up the Keyman keyboard UI. + +All of the methods and delegate calls of the original UIKit classes are +retained. + +As of version 14.0, we deprecated direct use of .js files for resources +in favor of supporting .kmp packages. Package files have the same old +.js files bundled alongside any related resources (like fonts and +documentation) on your behalf, making the process of setting up +keyboards and lexical models easier. + +## Guides + +- [Build an in-app keyboard](guides/in-app/) +- [Build a system keyboard app](guides/system-keyboard/) + +## Available Classes/Methods + +### Resource Identification + +[`LanguageResourceFullID`](LanguageResource/LanguageResourceFullID) +: The LanguageResourceFullID protocol and its implementing types + `FullKeyboardID` and `LexicalModelFullID` serve as unique + identifiers for language resources, whether installed or + uninstalled. + +[`LanguageResource`](LanguageResource) +: The LanguageResource protocol and its implementing types + `InstallableKeyboard` and `InstallableLexicalModel` represent the + full metadata specification for a single installed pairing of + keyboard or model & target language. + +[`KeymanPackage`](KeymanPackage/) +: The KeymanPackage is the base class used to represent various types + of Keyman packages within the Keyman Engine and their contents. This + class also serves a "type erasure" role for classes derived from it. + +[`TypedKeymanPackage`](TypedKeymanPackage/) +: The TypedKeymanPackage (and its direct subclasses + `KeyboardKeymanPackage` and `LexicalModelKeymanPackage`) provide + enhanced type signatures. + +### Resource Management + +[`ResourceFileManager`](ResourceFileManager/) +: The core class for managing and installing keyboards and lexical models + +### Controlling the Keyboard + +[`Manager`](Manager/) +: The core class for controlling Keyman Engine + +### UI elements & setup + +[`TextField`](TextField/) +: A UITextField to use with the Keyman Engine + +[`TextView`](TextView/) +: A UITextView to use with the Keyman Engine + +[`KeyboardPickerButton`](KeyboardPickerButton/) +: A button for bringing up the keyboard picker menu + +[`KeyboardPickerBarButtonItem`](KeyboardPickerBarButtonItem/) +: A bar that displays the keyboard picker when tapped + +[`PackageWebViewController`](PackageWebViewController/) +: Displays web pages contained within packages, ejecting any links outside the package into an external browser. + +## Adding the Keyman Engine for iPhone and iPad SDK to your project + +1) Create a new iOS project + +2) On your project's "General" tab, click the '+' sign under "Embedded Binaries" to add KeymanEngine.framework. + +- If you wish to use KeymanEngine-universal.framework instead for development, be aware that you may need to note the following: + - Xcode may have issues with the "-universal" part of the name; dropping this component after copying may be prudent. + - The 16.0 version of Keyman Engine for iPhone and iPad was compiled using Swift 5. + - Dragging the framework into the project will not properly set the framework up for embedding. +- When done properly, Xcode should automatically link the library and setup the bundle for copying. + - To verify, go to your target's "Build Phases" tab and check that the following details are in place: + - 'KeymanEngine.framework' is set within "Link Binary With Libraries" + - 'KeymanEngine.framework' is set within "Embed Frameworks" + +3) Include KeymanEngine's dependencies within your project: +(found in 'Link Binary With Libraries' in your target's 'build phases' +tab) + +- Ensure each of the following frameworks is included under "Embedded + Binaries": + - DeviceKit + - ObjcExceptionBridging + - Reachability + - Sentry + - XCGLogger + - Zip +- You may find it helpful to use a dependency manager (such as + [Carthage](https://github.com/Carthage/Carthage)) to assist with + framework maintenance. You may find our Cartfile (used with + Carthage) for this + [here](https://github.com/keymanapp/keyman/blob/master/ios/Cartfile). + +4) Import "KeymanEngine" into any source files requiring Keyman +classes. + +5) [OPTIONAL] Add the language .kmp files which you want to use to +your project (e.g. thai_kedmanee.kmp) + +- drag them into the project +- go to your target, then the "Build Phases" tab, and add them to the + "Copy Bundle Resources" section +- to avoid xcode warnings, remove them from the "Compile Sources" + section + +6) [OPTIONAL] Set the initial language prior to showing the keyboard +for the first time + +- it is recommended to do this when the app first launches + +- e.g. for Thai Kedmanee + + ```swift + Manager.shared.setKeyboard("thai_kedmanee"); + ``` + +- the keyboard defaults to English USA if not set otherwise + +## Keyman Demo + +To see the SDK in action, open the samples folder to find two small +sample projects. All of the above steps have already been performed. + +## See also + +- [Keyman Engine for iPhone and iPad 13.0](/developer/engine/iphone-and-ipad/13.0/) +- [Keyman Engine for iPhone and iPad 12.0](/developer/engine/iphone-and-ipad/12.0/) +- [Keyman Engine for iPhone and iPad 11.0](/developer/engine/iphone-and-ipad/11.0/) +- [Keyman Engine for iPhone and iPad 10.0](/developer/engine/iphone-and-ipad/10.0/) +- [Keyman Engine for iPhone and iPad 2.0](/developer/engine/iphone-and-ipad/2.0/) +- [Keyman Developer](/developer/current-version/) +- [Keyboard Library](http://keyman.com/developer/keymanweb/keyboards) +- [Keyman Engine for Android 10.0](/developer/engine/android/current-version/) diff --git a/products/iphone-and-ipad/20.0/about/history.md b/products/iphone-and-ipad/20.0/about/history.md new file mode 100644 index 000000000..60aba2b0f --- /dev/null +++ b/products/iphone-and-ipad/20.0/about/history.md @@ -0,0 +1,8 @@ +--- +title: Version History of Keyman for iPhone and iPad +--- + +A frequently-updated changelog for Keyman is kept at [help.keyman.com/version-history](https://help.keyman.com/version-history/) on the Keyman Help website. + +## Related Topics +* [What's New](whatsnew) diff --git a/products/iphone-and-ipad/20.0/about/index.md b/products/iphone-and-ipad/20.0/about/index.md new file mode 100644 index 000000000..71ead9925 --- /dev/null +++ b/products/iphone-and-ipad/20.0/about/index.md @@ -0,0 +1,8 @@ +--- +title: About Keyman +--- + +* [Welcome to Keyman](welcome) +* [What's New](whatsnew) +* [System Requirements](system-requirements) +* [Version History](history) diff --git a/products/iphone-and-ipad/20.0/about/system-requirements.md b/products/iphone-and-ipad/20.0/about/system-requirements.md new file mode 100644 index 000000000..7563130ae --- /dev/null +++ b/products/iphone-and-ipad/20.0/about/system-requirements.md @@ -0,0 +1,9 @@ +--- +title: System Requirements - Keyman for iPhone and iPad Help +--- + +## Minimum System Requirements + +### Minimum iOS Version +Keyman for iPhone and iPad will run on Apple iPhones and iPads that have a minimum version of +iOS 15.6 diff --git a/products/iphone-and-ipad/20.0/about/welcome.md b/products/iphone-and-ipad/20.0/about/welcome.md new file mode 100644 index 000000000..05246c7ca --- /dev/null +++ b/products/iphone-and-ipad/20.0/about/welcome.md @@ -0,0 +1,11 @@ +--- +title: Welcome to Keyman for iPhone and iPad +--- + +Thank you for installing Keyman for iPhone and iPad. Whether you're a new or returning user, +we believe you will appreciate the significant enhancements in this latest version of Keyman for iPhone and iPad. + +## What is Keyman for iPhone and iPad? +Keyman for iPhone and iPad lets you type in over 600 languages on Apple iPhones and iPads. + +[Click here](../start/) to get started diff --git a/products/iphone-and-ipad/20.0/about/whatsnew.md b/products/iphone-and-ipad/20.0/about/whatsnew.md new file mode 100644 index 000000000..fcca314d7 --- /dev/null +++ b/products/iphone-and-ipad/20.0/about/whatsnew.md @@ -0,0 +1,5 @@ +--- +title: What's New in Keyman 20.0 for iPhone and iPad +--- + +Here are some of the new features we have added to Keyman for iPhone and iPad 20.0: diff --git a/products/iphone-and-ipad/20.0/basic/config/index.md b/products/iphone-and-ipad/20.0/basic/config/index.md new file mode 100644 index 000000000..3eb3ee5e6 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/config/index.md @@ -0,0 +1,49 @@ +--- +title: Using the Settings Screen - Keyman for iPhone and iPad Help +--- + +## Using the Settings Screen + +This Settings screen is used to configure keyboards and dictionaries. +It also has many of the options that are available on the 'Get Started' menu. To access the Settings screen: + +Step 1) +Open the Keyman app. + +Step 2) +Click the ellipsis (...) for additional options. Select 'Settings' + +![](../../ios_images/settings-screen.png) + +Each selection on the Keyman Settings screen is described in further detail below: + + +## Installed Languages +This displays the number of installed languages. Click this line for the 'Installed Languages' +screen where you may view the languages you have installed and, by clicking any one language, find its keyboards and dictionaries along with [more settings](../language-settings). + +![](../../ios_images/find-new.png) + +Click on this to [search for a keyboard or language](../../start/searching-for-keyboards). + +## Show "Get Started" on startup +When enabled, the Keyman app will display the 'Get Started' screen on app startup. + +## Allow error reporting +When enabled, the Keyman app will send crash reporting information to Sentry. No personally identifiable information or keyboard strokes are recorded. + +## Spacebar Caption +Click on this to [change the displayed keyboard name](spacebar-caption) on the spacebar. + +## System Keyboard Settings +By default, installed Keyman keyboards are only available to use within the Keyman app. Click on this setting to +bring up the iOS system configuration so Keyman can be added as a system-wide keyboard. + +## Set Keyman as default keyboard +Select 'Keyboards' to bring up the iOS system configuration for setting Keyman as the default system-wide keyboard. Toggle both 'Keyman' and 'Allow Full Access'. + +![](../../ios_images/system-wide-setting.png) + +## Install From File +Select this to browse the files on your device and install a keyboard from a .kmp file. + diff --git a/products/iphone-and-ipad/20.0/basic/config/spacebar-caption.md b/products/iphone-and-ipad/20.0/basic/config/spacebar-caption.md new file mode 100644 index 000000000..4344c8306 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/config/spacebar-caption.md @@ -0,0 +1,13 @@ +--- +title: Spacebar Caption - Keyman for iPhone and iPad Help +--- + +## Spacebar Caption + +This menu can be used to change the displayed keyboard name on the spacebar. The options are: +* Language name +* Keyboard name +* Language name + Keyboard name +* Blank + +![](../../ios_images/spacebar-caption.png) diff --git a/products/iphone-and-ipad/20.0/basic/index.md b/products/iphone-and-ipad/20.0/basic/index.md new file mode 100644 index 000000000..9c40fd0f0 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/index.md @@ -0,0 +1,16 @@ +--- +title: Basic Help +--- +* [Predictive-Text Settings and the Banner](using-the-banner) + +* [Switching Between Keyboards](switching-between-keyboards) + +* [Using the Settings Screen](config/) + +* [Language Settings](language-settings) +* [Installing Custom Keyboards/Dictionaries](installing-custom-keyboards-dictionaries) +* [Sharing Keyboards and Dictionaries](sharing-keyboards) + +* [Using the Keyman Browser](using-keyman-browser) + +* [Removing Keyboards](uninstalling-keyboards) diff --git a/products/iphone-and-ipad/20.0/basic/installing-custom-keyboards-dictionaries.md b/products/iphone-and-ipad/20.0/basic/installing-custom-keyboards-dictionaries.md new file mode 100644 index 000000000..89f1ca9c7 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/installing-custom-keyboards-dictionaries.md @@ -0,0 +1,41 @@ +--- +title: Installing Custom Keyboards/Dictionaries - Keyman for iPhone and iPad Help +--- + +The following steps can be used to install either a keyboard package or a dictionary package. + +### Download the File +If downloading a custom keyboard from the internet, click the link to your custom keyboard package file. + +For this example, we'll install a custom keyboard from a link in Safari. Our example keyboard is for the GFF Amharic 7 keyboard. + +![](../ios_images/dist-url-screen-i.png) + +Safari will display an option to open the KMP file with Keyman. + +![](../ios_images/dist-kmp-open-i.png) + +Click **Open in "Keyman"** to continue. + +### Finding the File (iOS 13+ only) +Installation is also possible from email clients and other sources. +Once you download the file and save it to your device, look for an +**Open in "Keyman"** option or use the +Install From File option in Keyman seen below. + +![](../ios_images/add-keyboard-i2.png) + +Once this option is selected, a file browser will appear. By default, it will show the most + recently downloaded files that can be installed. + +![](../ios_images/add-keyboard-file-i.png) + +If you have difficulty finding the right file, consider using the **Browse** +option at the bottom-right. Once you select it, you should then be greeted with the screen shown in +the section below. + +### Installing the Package + +Whichever option you take, the app will launch and prompt you with the keyboard's installer. + +[Follow this link to continue.](../start/installing-packages) \ No newline at end of file diff --git a/products/iphone-and-ipad/20.0/basic/keyboard-usage.md b/products/iphone-and-ipad/20.0/basic/keyboard-usage.md new file mode 100644 index 000000000..f7834a4e7 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/keyboard-usage.md @@ -0,0 +1,28 @@ +--- +title: Using a Keyboard - Keyman for iPhone and iPad Help +--- + +Keyman keyboards are accessed by pressing the globe key whenever an iOS app presents the system keyboard. The following screenshot shows the Keyman EuroLatin keyboard displayed with Apple's Calendar app. + +![](../ios_images/system-keyboard-cal.png) + +### Using Gestures on the Keyboard Keys + +Gestures provide ways to interact with the keyboard to produce different text output. Which gestures are available varies depending on the design of the individual Keyman keyboard. + +**Note:** a dot or a small letter in the upper right corner of a key is a hint to indicate that the key supports flick, long press or multitap. + +The Gestures: + +* **Tap:** Tap on a character key to cause the associated character to be output to the app. + +* **Long press:** Press and hold a key, and after a moment a submenu will appear. Continue holding the key and slide to the submenu to select a key. Release, and the selected key from the submenu is output. A key submenu is shown in the following screenshot. + +![](../ios_images/key-submenu.png) + +* **Flick:** hold and slide in various directions on a key to reach alternate outputs. The key will animate to show you the expected output. For example, a keyboard could support sliding down on keys in the top row to output numerals. + +![](../ios_images/down-flick-i.gif) + +* **Multitap:** some keys produce alternate outputs with rapid, repeated taps. For example, tapping rapidly twice on shift will activate caps lock on many keyboards. + diff --git a/products/iphone-and-ipad/20.0/basic/language-settings.md b/products/iphone-and-ipad/20.0/basic/language-settings.md new file mode 100644 index 000000000..af39c37f3 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/language-settings.md @@ -0,0 +1,58 @@ +--- +title: Language Settings - Keyman for iPhone and iPad Help +--- + +### Access "Installed Languages" +First, open the "Settings" menu. + +![](../ios_images/add-keyboard-i.png) + +The "Installed Languages" menu found here manages your installed keyboards and dictionaries. + +![](../ios_images/add-keyboard-i2.png) + +You should then see the following screen: + +![](../ios_images/add-keyboard-i3.png) + + +### Select a Language to View its Settings +After selecting a language, you will find settings in these categories: Keyboards, Language Settings, and Dictionaries. + +![](../ios_images/language-settings.png) + +### Keyboard Settings +In Keyboard settings, you will find a list of keyboards installed in the language. After clicking a keyboard, you will see + +* the version of the installed keyboard +* the link to the 'Keyboard help' screen with information about its symbols and fonts +* the option to Uninstall the keyboard +* the QR code for loading this keyboard on another device + +### Language Settings +In Language settings, you may see + +* the option to enable predictions +* if predictions are enabled, the option to enable corrections + +These predictions and corrections are given while a user types, based upon the dictionary selected under 'Dictionaries'. + +### Dictionaries +In Dictionaries, you will see a list of dictionaries installed for the language. + +![](../ios_images/find-new.png) + +Click this to select a new dictionary from a list of available dictionaries in the language. + +![](../ios_images/dictionary-select.png) + +Back in the dictionaries list, after clicking a dictionary, you will see its name again, along with a blue information icon: + +![](../ios_images/dictionary-list.png) + +After clicking the 'i' icon, you will see + +* the version of the installed dictionary +* the option to Uninstall the dictionary + + diff --git a/products/iphone-and-ipad/20.0/basic/sharing-keyboards.md b/products/iphone-and-ipad/20.0/basic/sharing-keyboards.md new file mode 100644 index 000000000..bd2d40fe8 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/sharing-keyboards.md @@ -0,0 +1,55 @@ +--- +title: Sharing Keyboards and Dictionaries - Keyman for iPhone and iPad Help +--- +### Sharing Options +There are two supported ways to share keyboards and dictionaries: + +1. By file + - You may copy and send the `.kmp` package containing the keyboard or dictionary to someone else. +2. By QR code + - You may show someone else a QR code that links directly to the package's download page. + +### Sharing via File +Whenever you install a keyboard or dictionary from a file, Keyman makes a packaged copy of it on your device. You can find these copies in the iOS Files app. + +![](../ios_images/file-share-1i.png) + +Simply select the "Keyman" folder to view these files. + +![](../ios_images/file-share-2i.png) + +From here, longpress the file for the keyboard or dictionary you wish to share, then +click **Share** to view sharing options. + +For installing this file on another device, you may wish to read [Installing custom keyboards/dictionaries](installing-custom-keyboards-dictionaries). + +### Sharing via QR code +For keyboards and dictionaries downloaded directly through the app, +you can provide friends with a scannable QR code. First, find the resource +through the Settings menu under Installed Languages. + +![](../ios_images/add-keyboard-i2.png) + +![](../ios_images/add-keyboard-i3.png) + +![](../ios_images/qr-code-share-1i.png) + +When you select the keyboard, a page like the following should appear: + +![](../ios_images/qr-code-share-2i.png) + +Note that QR codes are only provided for keyboards and dictionaries +that are distributed by Keyman. + +### Installing from QR code +To install from QR code, simply launch your device's Camera app and point +it at the code, as seen below. + +![](../ios_images/qr-code-share-3i.png) + +Selecting the notification seen at the top will lead you to the following page: + +![](../ios_images/qr-code-share-4i.png) + +Selecting the big **Install on iPhone** (or **Install on iPad**) option will then download +the file for easy installation. (Refer to [Keyboard and Dictionary Installation](../start/installing-packages) for more information about installation.) diff --git a/products/iphone-and-ipad/20.0/basic/switching-between-keyboards.md b/products/iphone-and-ipad/20.0/basic/switching-between-keyboards.md new file mode 100644 index 000000000..5189121e7 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/switching-between-keyboards.md @@ -0,0 +1,25 @@ +--- +title: Switching between keyboards - Keyman for iPhone and iPad Help +--- + +Keyboard switching is always activated by using the following key: + +![](../ios_images/globe.png) + + This will bring up a list of all currently installed languages (the default is English USA). If you have already downloaded additional languages, they will appear here. Simply select them and the keyboard will re-appear with the new language. + +### The In-App Menu +![](../ios_images/in-app-picker-i.png) + +Simply select any keyboard to activate it and return to the previous screen. + +### The System Keyboard Menu + +![](../ios_images/system-picker-i.png) + +This menu only displays when the 'globe' key is touched and held. + +The "Close Keyman" option will activate the next available non-Keyman system keyboard. + +A quick tap on the "globe" key will instead transition to the next available installed keyboard +without displaying the menu. diff --git a/products/iphone-and-ipad/20.0/basic/uninstalling-keyboards.md b/products/iphone-and-ipad/20.0/basic/uninstalling-keyboards.md new file mode 100644 index 000000000..4f1af7ae2 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/uninstalling-keyboards.md @@ -0,0 +1,29 @@ +--- +title: Uninstalling Keyboards - Keyman for iPhone and iPad Help +--- + +To uninstall a keyboard, follow these steps. + +### Access "Installed Languages" +First, open the "Settings" menu. + +![](../ios_images/add-keyboard-i.png) + +The "Installed Languages" menu found here manages your installed keyboards and dictionaries. + +![](../ios_images/add-keyboard-i2.png) + +You should then see the following screen: + +![](../ios_images/add-keyboard-i3.png) + +### Removing the Keyboard +Start by selecting the language for the keyboard you wish to uninstall. + +![](../ios_images/delete-keyboard-i.png) + +Swipe left on the keyboard you want to remove. You'll see a button to **Delete**. + +![](../ios_images/delete-keyboard-i2.png) + +Click the **Delete** button to uninstall the keyboard. diff --git a/products/iphone-and-ipad/20.0/basic/using-keyman-browser.md b/products/iphone-and-ipad/20.0/basic/using-keyman-browser.md new file mode 100644 index 000000000..9a587b8b3 --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/using-keyman-browser.md @@ -0,0 +1,12 @@ +--- +title: Using the Keyman Browser - Keyman for iPhone and iPad Help +--- + +Step 1) Click the Keyman Browser button in the Keyman app + +Step 2) Enter the URL of a website to visit into the address bar, for example **google.com**. Keyman Browser will load +the page and detect your language if it is present, and reformat it to show your language instead of square boxes. + +Step 3) Use the bookmark button to save the current page for browsing later. + +Step 4) Use the Globe icon to swap between languages. diff --git a/products/iphone-and-ipad/20.0/basic/using-the-banner.md b/products/iphone-and-ipad/20.0/basic/using-the-banner.md new file mode 100644 index 000000000..59a00974a --- /dev/null +++ b/products/iphone-and-ipad/20.0/basic/using-the-banner.md @@ -0,0 +1,41 @@ +--- +title: Predictive-Text Settings and the Banner - Keyman for iPhone and iPad Help +--- + +## About the Keyboard Banner + +Keyman keyboards now always display a banner above the keyboard for one of the following functionalities: + +* Display suggestions (See "Using the Suggestion Banner" below) +* Display a Keyman-themed banner so popups and gestures for the top row of keys are visible +* Reserved for future functionality + +## Adjusting Text Suggestion Settings + +The banner mode can be controlled by going to Keyman Settings --> (select an installed language) + +At the bottom of the language settings menu are three controls for the banner: + +![](../ios_images/prediction-options.png) + +* Offer word completions (Suggestion banner displays predictions; shows a flat image-banner if disabled) +* Offer corrections (Suggestion banner displays predictions and corrections) +* Apply corrections automatically (Tapping the space bar may automatically apply the best suggestion) + +## Using the Suggestion Banner + +If a [dictionary is installed](installing-custom-keyboards-dictionaries) and enabled for the active Keyman +keyboard, the banner will display suggestions that can be selected. + +![](../ios_images/settings-suggestions-i.png) + +* Drag the banner horizontally to see more suggestions +* Overly-long suggestions are partially hidden, but expand when a finger is held on them +* The banner will display up to 8 suggestions at a time. + +## The Keyman-Themed Banner + +When suggestions are disabled or unavailable, the Keyman-themed banner will display instead. +This is displayed so that key-popups and gestures for the top row of keys are visible. + +![](../ios_images/themed-banner.png) \ No newline at end of file diff --git a/products/iphone-and-ipad/20.0/context/gestures.md b/products/iphone-and-ipad/20.0/context/gestures.md new file mode 100644 index 000000000..251de0f1c --- /dev/null +++ b/products/iphone-and-ipad/20.0/context/gestures.md @@ -0,0 +1,15 @@ +--- +title: Gesture Hints and Tips +--- + +## Using Gestures on the Keyboard Keys +There are now several gestures available to interact with some keys on the keyboard. Keys which have gestures available will normally show them as a hint in the top right of the key: + +![](../ios_images/gesture-hint.png) + +* **Long press**: Press and hold a key, and after a moment a submenu will appear. Slide the finger to the submenu to select a key. Release the finger, and the highlighted key from the submenu will be output. + +* **Flick**: Press and hold a key, and then slide the finger in various directions on a key to reach alternate outputs. The key will animate to show the expected output when the finger gets released. A common flick is to slide down to reach numerals on the top row of the keyboard. + + An up-flick on keys that support longpresses but do not have a defined up-flick will skip the wait and immediately display their longpress submenu. +* **Multitap**: Some keys can be pressed repeatedly and rapidly to reach alternate outputs. Tapping rapidly twice on Shift will activate Caps Lock on many keyboards. \ No newline at end of file diff --git a/products/iphone-and-ipad/20.0/context/index.md b/products/iphone-and-ipad/20.0/context/index.md new file mode 100644 index 000000000..90cfbfd5f --- /dev/null +++ b/products/iphone-and-ipad/20.0/context/index.md @@ -0,0 +1,26 @@ +--- +title: Keyman for iPhone and iPad Help +--- + +[Keyboard gestures](gestures) + +| | Keyboard Keys
(Keyboard Present) | +|---|---| +| ![](../ios_images/globe.png) | Install or select another language/keyboard | +| ![](../ios_images/hide-keyboard.png) | Hide the keyboard | +| ![](../ios_images/backspace.png) | Backspace | +| ![](../ios_images/return.png) | Return | +| ![](../ios_images/shift.png) | Shift key. Long press this key to access the CTRL, ALT and CTRLALT keys (which can access additional key layers) | +| ![](../ios_images/touch-hold.png) | Keys with a small dot in the top right corner indicate a long press key. Access further functionality by long pressing the key | + +---- + +| | Toolbar Icons +|---|---| +| ![](../ios_images/share.png) | Share your text via Mail, Text, Facebook or Twitter | +| ![](../ios_images/browser-icon.png) | Open the Keyman Browser | +| ![](../ios_images/menu-icon.png) | Open the menu for additional options | +| ![](../ios_images/font-size.png) | Adjust the font size | +| ![](../ios_images/delete.png) | Delete all current text | +| ![](../ios_images/get-started.png) | Open the initial setup screen | +| ![](../ios_images/info.png) | Load the Keyman help page | diff --git a/products/iphone-and-ipad/20.0/index.md b/products/iphone-and-ipad/20.0/index.md new file mode 100644 index 000000000..598071d81 --- /dev/null +++ b/products/iphone-and-ipad/20.0/index.md @@ -0,0 +1,40 @@ +--- +title: Keyman for iPhone and iPad 20.0 Help +--- + +## [About Keyman](about/) +* [Welcome to Keyman](about/welcome) +* [What's New](about/whatsnew) +* [System Requirements](about/system-requirements) +* [Version History](about/history) + +## [Getting Started](start/) +* [How To - Adding a Keyboard](start/searching-for-keyboards) +* [How To - Keyboard and Dictionary Installation](start/installing-packages) +* [How To - Installing Keyman as a System Keyboard](start/installing-system-keyboard) + + +## [Using Keyman for iPhone and iPad](basic/) +* [Predictive-Text Settings and the Banner](basic/using-the-banner) +* [Switching Between Keyboards](basic/switching-between-keyboards) +* [Using a Keyboard](basic/keyboard-usage) +* [Keyboard Gestures](context/gestures) +* [Using the Menu](context/) +* [Using the Settings Screen](basic/config/) +* [Language Settings](basic/language-settings) +* [Installing Custom Keyboards/Dictionaries](basic/installing-custom-keyboards-dictionaries) +* [Sharing Keyboards and Dictionaries](basic/sharing-keyboards) +* [Using the Keyman Browser](basic/using-keyman-browser) +* [Removing Keyboards](basic/uninstalling-keyboards) + +## Ask for Help +* [Ask other users in the SIL Keyman Community](https://community.software.sil.org/c/keyman) + +## [Troubleshooting](troubleshooting/) +* [How To - Installing fonts](troubleshooting/installing-fonts) +* [How To - Integrating Keyman for iPhone and iPad](troubleshooting/integrating) + +## Further Help +For more information on Keyman, see [keyman.com](https://keyman.com) + +For more information on Keyman for iPhone and iPad, see [keyman.com/iphone-and-ipad](https://keyman.com/iphone-and-ipad/) diff --git a/products/iphone-and-ipad/20.0/ios_images/add-keyboard-file-i.png b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-file-i.png new file mode 100644 index 000000000..804812fce Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-file-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i.png b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i.png new file mode 100644 index 000000000..2e8f99852 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i2.png b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i2.png new file mode 100644 index 000000000..a962b7f7d Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i2.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i3.png b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i3.png new file mode 100644 index 000000000..faa6a9478 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/add-keyboard-i3.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/backspace.png b/products/iphone-and-ipad/20.0/ios_images/backspace.png new file mode 100644 index 000000000..6ea9e4eb4 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/backspace.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/browser-icon.png b/products/iphone-and-ipad/20.0/ios_images/browser-icon.png new file mode 100644 index 000000000..b4ca58c37 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/browser-icon.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/confirm-dl.png b/products/iphone-and-ipad/20.0/ios_images/confirm-dl.png new file mode 100644 index 000000000..b2f42cba7 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/confirm-dl.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/delete-keyboard-i.png b/products/iphone-and-ipad/20.0/ios_images/delete-keyboard-i.png new file mode 100644 index 000000000..10385b475 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/delete-keyboard-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/delete-keyboard-i2.png b/products/iphone-and-ipad/20.0/ios_images/delete-keyboard-i2.png new file mode 100644 index 000000000..15fe1c6cc Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/delete-keyboard-i2.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/delete.png b/products/iphone-and-ipad/20.0/ios_images/delete.png new file mode 100644 index 000000000..d2f833bf2 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/delete.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dictionary-list.png b/products/iphone-and-ipad/20.0/ios_images/dictionary-list.png new file mode 100644 index 000000000..b2af2f53f Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dictionary-list.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dictionary-select.png b/products/iphone-and-ipad/20.0/ios_images/dictionary-select.png new file mode 100644 index 000000000..ae8300530 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dictionary-select.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dist-install1-i.png b/products/iphone-and-ipad/20.0/ios_images/dist-install1-i.png new file mode 100644 index 000000000..4871c99ea Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dist-install1-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dist-kmp-open-i.png b/products/iphone-and-ipad/20.0/ios_images/dist-kmp-open-i.png new file mode 100644 index 000000000..a6220a385 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dist-kmp-open-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dist-kmp-success-i.png b/products/iphone-and-ipad/20.0/ios_images/dist-kmp-success-i.png new file mode 100644 index 000000000..af1108946 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dist-kmp-success-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dist-url-screen-i.png b/products/iphone-and-ipad/20.0/ios_images/dist-url-screen-i.png new file mode 100644 index 000000000..1c0029646 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dist-url-screen-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dist-welcome-i.png b/products/iphone-and-ipad/20.0/ios_images/dist-welcome-i.png new file mode 100644 index 000000000..cfa0cc725 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dist-welcome-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/dl-success.png b/products/iphone-and-ipad/20.0/ios_images/dl-success.png new file mode 100644 index 000000000..e61f1eded Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/dl-success.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/down-flick-i.gif b/products/iphone-and-ipad/20.0/ios_images/down-flick-i.gif new file mode 100644 index 000000000..35734c3d1 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/down-flick-i.gif differ diff --git a/products/iphone-and-ipad/20.0/ios_images/file-share-1i.png b/products/iphone-and-ipad/20.0/ios_images/file-share-1i.png new file mode 100644 index 000000000..8415388dc Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/file-share-1i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/file-share-2i.png b/products/iphone-and-ipad/20.0/ios_images/file-share-2i.png new file mode 100644 index 000000000..a5749ae5c Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/file-share-2i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/find-new.png b/products/iphone-and-ipad/20.0/ios_images/find-new.png new file mode 100644 index 000000000..b76df881b Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/find-new.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/font-dl1.png b/products/iphone-and-ipad/20.0/ios_images/font-dl1.png new file mode 100644 index 000000000..f238d9b45 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/font-dl1.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/font-dl2.png b/products/iphone-and-ipad/20.0/ios_images/font-dl2.png new file mode 100644 index 000000000..f93787723 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/font-dl2.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/font-dl3.png b/products/iphone-and-ipad/20.0/ios_images/font-dl3.png new file mode 100644 index 000000000..6889f5f8e Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/font-dl3.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/font-dl4.png b/products/iphone-and-ipad/20.0/ios_images/font-dl4.png new file mode 100644 index 000000000..8ee473bfc Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/font-dl4.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/font-dl5.png b/products/iphone-and-ipad/20.0/ios_images/font-dl5.png new file mode 100644 index 000000000..47e3e9fd4 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/font-dl5.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/font-size.png b/products/iphone-and-ipad/20.0/ios_images/font-size.png new file mode 100644 index 000000000..b1dd62021 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/font-size.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/gesture-hint.png b/products/iphone-and-ipad/20.0/ios_images/gesture-hint.png new file mode 100644 index 000000000..155ba6741 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/gesture-hint.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/get-started.png b/products/iphone-and-ipad/20.0/ios_images/get-started.png new file mode 100644 index 000000000..cf9253b87 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/get-started.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/globe.png b/products/iphone-and-ipad/20.0/ios_images/globe.png new file mode 100644 index 000000000..857e3db94 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/globe.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/hide-keyboard.png b/products/iphone-and-ipad/20.0/ios_images/hide-keyboard.png new file mode 100644 index 000000000..de814bd6d Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/hide-keyboard.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/in-app-picker-i.png b/products/iphone-and-ipad/20.0/ios_images/in-app-picker-i.png new file mode 100644 index 000000000..af9aeb22d Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/in-app-picker-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/info.png b/products/iphone-and-ipad/20.0/ios_images/info.png new file mode 100644 index 000000000..48225689a Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/info.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/key-submenu.png b/products/iphone-and-ipad/20.0/ios_images/key-submenu.png new file mode 100644 index 000000000..58b029ca9 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/key-submenu.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyboard-search-1.png b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-1.png new file mode 100644 index 000000000..fa8537d17 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-1.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyboard-search-2.png b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-2.png new file mode 100644 index 000000000..edf4e6a4e Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-2.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyboard-search-3.png b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-3.png new file mode 100644 index 000000000..7eac47fe0 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-3.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyboard-search-4.png b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-4.png new file mode 100644 index 000000000..bf8dc89c9 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-4.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyboard-search-5.png b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-5.png new file mode 100644 index 000000000..ff9fcb994 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyboard-search-5.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyman-settings.png b/products/iphone-and-ipad/20.0/ios_images/keyman-settings.png new file mode 100644 index 000000000..3e203ba62 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyman-settings.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyman-settings2.png b/products/iphone-and-ipad/20.0/ios_images/keyman-settings2.png new file mode 100644 index 000000000..e2436103c Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyman-settings2.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyman-settings3.png b/products/iphone-and-ipad/20.0/ios_images/keyman-settings3.png new file mode 100644 index 000000000..98145546a Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyman-settings3.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyman-settings4.png b/products/iphone-and-ipad/20.0/ios_images/keyman-settings4.png new file mode 100644 index 000000000..e7eb1d419 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyman-settings4.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyman-settings5.png b/products/iphone-and-ipad/20.0/ios_images/keyman-settings5.png new file mode 100644 index 000000000..e78d30626 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyman-settings5.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/keyman-settings6.png b/products/iphone-and-ipad/20.0/ios_images/keyman-settings6.png new file mode 100644 index 000000000..5b097f933 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/keyman-settings6.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/language-settings.png b/products/iphone-and-ipad/20.0/ios_images/language-settings.png new file mode 100644 index 000000000..80f4a5ea6 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/language-settings.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/menu-icon.png b/products/iphone-and-ipad/20.0/ios_images/menu-icon.png new file mode 100644 index 000000000..50bcd6f16 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/menu-icon.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/package-install-1.png b/products/iphone-and-ipad/20.0/ios_images/package-install-1.png new file mode 100644 index 000000000..571adaefc Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/package-install-1.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/package-install-2.png b/products/iphone-and-ipad/20.0/ios_images/package-install-2.png new file mode 100644 index 000000000..ac3f7ce41 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/package-install-2.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/package-install-3.png b/products/iphone-and-ipad/20.0/ios_images/package-install-3.png new file mode 100644 index 000000000..20117f250 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/package-install-3.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/package-install-4.png b/products/iphone-and-ipad/20.0/ios_images/package-install-4.png new file mode 100644 index 000000000..95cec51a8 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/package-install-4.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/package-install-5.png b/products/iphone-and-ipad/20.0/ios_images/package-install-5.png new file mode 100644 index 000000000..9103c078c Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/package-install-5.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/prediction-options.png b/products/iphone-and-ipad/20.0/ios_images/prediction-options.png new file mode 100644 index 000000000..bc8d7fa0a Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/prediction-options.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/qr-code-share-1i.png b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-1i.png new file mode 100644 index 000000000..d4dd3106c Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-1i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/qr-code-share-2i.png b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-2i.png new file mode 100644 index 000000000..9ede20e31 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-2i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/qr-code-share-3i.png b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-3i.png new file mode 100644 index 000000000..ff4cf5abd Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-3i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/qr-code-share-4i.png b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-4i.png new file mode 100644 index 000000000..1e0fdcaf1 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/qr-code-share-4i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/return.png b/products/iphone-and-ipad/20.0/ios_images/return.png new file mode 100644 index 000000000..84e5a37a0 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/return.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/settings-screen.png b/products/iphone-and-ipad/20.0/ios_images/settings-screen.png new file mode 100644 index 000000000..1e5c72b7f Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/settings-screen.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/settings-suggestions-i.png b/products/iphone-and-ipad/20.0/ios_images/settings-suggestions-i.png new file mode 100644 index 000000000..7018a16bb Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/settings-suggestions-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/share.png b/products/iphone-and-ipad/20.0/ios_images/share.png new file mode 100644 index 000000000..3175063c9 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/share.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/shift.png b/products/iphone-and-ipad/20.0/ios_images/shift.png new file mode 100644 index 000000000..e03926637 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/shift.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/spacebar-caption.png b/products/iphone-and-ipad/20.0/ios_images/spacebar-caption.png new file mode 100644 index 000000000..2577c59e8 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/spacebar-caption.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/system-keyboard-cal.png b/products/iphone-and-ipad/20.0/ios_images/system-keyboard-cal.png new file mode 100644 index 000000000..49259f793 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/system-keyboard-cal.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/system-picker-i.png b/products/iphone-and-ipad/20.0/ios_images/system-picker-i.png new file mode 100644 index 000000000..f9d3c1fac Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/system-picker-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/system-wide-setting.png b/products/iphone-and-ipad/20.0/ios_images/system-wide-setting.png new file mode 100644 index 000000000..126fe13ec Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/system-wide-setting.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/themed-banner.png b/products/iphone-and-ipad/20.0/ios_images/themed-banner.png new file mode 100644 index 000000000..a8fd5e2da Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/themed-banner.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/touch-hold.png b/products/iphone-and-ipad/20.0/ios_images/touch-hold.png new file mode 100644 index 000000000..22909e559 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/touch-hold.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/uninstall-delete-i.png b/products/iphone-and-ipad/20.0/ios_images/uninstall-delete-i.png new file mode 100644 index 000000000..eb66a11b5 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/uninstall-delete-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/uninstall-list-i.png b/products/iphone-and-ipad/20.0/ios_images/uninstall-list-i.png new file mode 100644 index 000000000..110a63a96 Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/uninstall-list-i.png differ diff --git a/products/iphone-and-ipad/20.0/ios_images/video.png b/products/iphone-and-ipad/20.0/ios_images/video.png new file mode 100644 index 000000000..41ecf8d2c Binary files /dev/null and b/products/iphone-and-ipad/20.0/ios_images/video.png differ diff --git a/products/iphone-and-ipad/20.0/start/index.md b/products/iphone-and-ipad/20.0/start/index.md new file mode 100644 index 000000000..f48fc3f18 --- /dev/null +++ b/products/iphone-and-ipad/20.0/start/index.md @@ -0,0 +1,7 @@ +--- +title: Getting Started +--- + +* [How To - Adding a Keyboard](searching-for-keyboards) +* [How To - Keyboard and Dictionary Installation](installing-packages) +* [How To - Installing Keyman as a System Keyboard](installing-system-keyboard) diff --git a/products/iphone-and-ipad/20.0/start/installing-packages.md b/products/iphone-and-ipad/20.0/start/installing-packages.md new file mode 100644 index 000000000..2e378a9c1 --- /dev/null +++ b/products/iphone-and-ipad/20.0/start/installing-packages.md @@ -0,0 +1,36 @@ +--- +title: Keyboard and Dictionary Installation - Keyman for iPhone and iPad Help +--- + +The following steps can be used to install either a keyboard package or a dictionary package. + +### Installing the Package + +Whenever a keyboard or dictionary installation begins, the following screen will be displayed: + +![](../ios_images/package-install-1.png) + +The bar at the bottom is only displayed when installing keyboard packages supporting multiple languages. Selecting either "Select Language(s)" at the bottom-right or "Next" at the top-right +will continue the installation process. + +![](../ios_images/package-install-2.png) + +You may then choose any number of supported languages to pair this keyboard or dictionary with. When installing keyboards, the app will automatically search for available dictionaries matching the languages you choose. + +Once satisfied with your selections, click the **"Install"** button at the top right. + +![](../ios_images/package-install-3.png) + +The package's documentation will then be displayed while installation (including any background dictionary searches) continue in the background. Click "Done" to finish installing your keyboard or dictionary. + +### Other notes + +Note that on tablets, the first two screens above will be combined into a single screen. Furthermore, if installing a keyboard that only supports a single language, the second screen will not appear: + +![](../ios_images/package-install-4.png) + +Once installation is complete, the app will automatically save a backup copy of your newly-installed package. You may find it within the app's folder in the Files app, and it may be deleted safely. This file may also be sent to other devices in order to share the keyboard or dictionary package with other people. + +![](../ios_images/package-install-5.png) + +To learn how to create a custom installable keyboard or dictionary, [click here](http://help.keyman.com/developer/current-version/guides/distribute/). diff --git a/products/iphone-and-ipad/20.0/start/installing-system-keyboard.md b/products/iphone-and-ipad/20.0/start/installing-system-keyboard.md new file mode 100644 index 000000000..c764fc37f --- /dev/null +++ b/products/iphone-and-ipad/20.0/start/installing-system-keyboard.md @@ -0,0 +1,39 @@ +--- +title: Installing the Keyman System Keyboard - Keyman for iPhone and iPad Help +--- + +Open the 'Settings' App and go to 'General' > 'Keyboard'. + +![](../ios_images/keyman-settings5.png) + +Touch 'Keyboards'. + +![](../ios_images/keyman-settings6.png) + +### Enabling Keyman +To activate Keyman as a system keyboard, touch 'Add New Keyboard...' + +![](../ios_images/keyman-settings.png) + +Touch 'Keyman' under THIRD-PARTY KEYBOARDS. + +![](../ios_images/keyman-settings2.png) + +Touch 'Keyman - Keyman'. + +![](../ios_images/keyman-settings3.png) + +Turn on the 'Allow Full Access' toggle and confirm. + +![](../ios_images/keyman-settings4.png) + +Your Keyman keyboards will now be available throughout your entire device. You can switch between Keyman keyboards and +the default iOS keyboard layout by touching the globe key of the keyboard whenever you are typing. + +![](../ios_images/globe.png) + +### On "Allow Full Access" +An issue with iOS 16 causes the Keyman system keyboard to not display unless "Allow Full Access" is enabled. Until the issue is addressed, this setting must be left in the on position for Keyman to operate normally. + +For normal use of Keyman with versions prior to iOS 16.0, there is no need to keep "Allow Full Access" enabled. It is needed only for making changes to some keyboard preferences. + diff --git a/products/iphone-and-ipad/20.0/start/searching-for-keyboards.md b/products/iphone-and-ipad/20.0/start/searching-for-keyboards.md new file mode 100644 index 000000000..9b2bded6c --- /dev/null +++ b/products/iphone-and-ipad/20.0/start/searching-for-keyboards.md @@ -0,0 +1,45 @@ +--- +title: Adding keyboards - Keyman for iPhone and iPad Help +--- + +To install resources for use with a new language, follow these steps. + +### Access "Installed Languages" +First, open the "Settings" menu. + +![](../ios_images/add-keyboard-i.png) + +The "Installed Languages" menu found here manages your installed keyboards and dictionaries. + +![](../ios_images/add-keyboard-i2.png) + +You should then see the following screen: + +![](../ios_images/add-keyboard-i3.png) + + +### Finding Your Keyboard +Click the **+** at the top-right to open the keyboard catalog. This will launch a search page. You may type in the (English) name of your language, your country, or even a specific keyboard. + +![](../ios_images/keyboard-search-1.png) + +A list of keyboards matching your search will be listed. Selecting one will result in the following screen: + +![](../ios_images/keyboard-search-2.png) + +Clicking the big green "Install Keyboard" button will download and install the keyboard. + +Once you click the "Install" button, you will then be prompted with the keyboard's installer. + +**Learn more about [Keyboard and Dictionary Installation here.](installing-packages)** + +### Keyboard Documentation + +If you would prefer to learn more about the keyboard before installing it, look for this link on the same page: + +![](../ios_images/keyboard-search-3.png) + +This link will open in your preferred browser, allowing you to easily return the installation page once satisfied. + +![](../ios_images/keyboard-search-4.png) + diff --git a/products/iphone-and-ipad/20.0/troubleshooting/index.md b/products/iphone-and-ipad/20.0/troubleshooting/index.md new file mode 100644 index 000000000..1509c74ee --- /dev/null +++ b/products/iphone-and-ipad/20.0/troubleshooting/index.md @@ -0,0 +1,7 @@ +--- +title: Keyman for iPhone and iPad Troubleshooting +--- + +* [How To - Installing fonts](installing-fonts) + +* [How To - Integrating Keyman for iPhone and iPad](integrating) diff --git a/products/iphone-and-ipad/20.0/troubleshooting/installing-fonts.md b/products/iphone-and-ipad/20.0/troubleshooting/installing-fonts.md new file mode 100644 index 000000000..183b722c8 --- /dev/null +++ b/products/iphone-and-ipad/20.0/troubleshooting/installing-fonts.md @@ -0,0 +1,27 @@ +--- +title: Installing fonts - Keyman for iPhone and iPad Help +--- + +Some keyboards require special fonts that do not come standard with your iPhone or iPad. +For keyboards that use these fonts, the Keyman app will provide a download of the font to install onto your device, +meaning all apps will be able to correctly display the font. To install the font, touch **Install**. + +![](../ios_images/font-dl1.png) + +You will then be taken to your device settings, and asked to install a profile for the font. Touch **Install**. + +![](../ios_images/font-dl2.png) + +Then Install again in the Consent page. + +![](../ios_images/font-dl3.png) + +Once the profile is installed, touch Done. + +![](../ios_images/font-dl4.png) + +And then Touch now to return to Keyman. + +![](../ios_images/font-dl5.png) + +The font is now successfully installed, and will display correctly throughout your device! diff --git a/products/iphone-and-ipad/20.0/troubleshooting/integrating.md b/products/iphone-and-ipad/20.0/troubleshooting/integrating.md new file mode 100644 index 000000000..516503d09 --- /dev/null +++ b/products/iphone-and-ipad/20.0/troubleshooting/integrating.md @@ -0,0 +1,8 @@ +--- +title: How To - Integrating Keyman for iPhone and iPad +--- + +## Integrate Keyman with your App or Website +If you are interested in learning how Keyman can be integrated into your own app or +website, visit [keyman.com/engine](https://keyman.com/engine) +