diff --git a/_data/product_version.yml b/_data/product_version.yml
index 8c5a951..7e638de 100644
--- a/_data/product_version.yml
+++ b/_data/product_version.yml
@@ -4,4 +4,5 @@ version_info_list_mobile:
- value: latest version
- value: 2.x
child:
+ - 2.0.21_ios
- 2.0.20
diff --git a/assets/js/dcpMobileVersionSearch.json b/assets/js/dcpMobileVersionSearch.json
index 4730bbe..1b0f8b1 100644
--- a/assets/js/dcpMobileVersionSearch.json
+++ b/assets/js/dcpMobileVersionSearch.json
@@ -1,5 +1,154 @@
[
{
+ "version": "2.2.10",
+ "matchList": {
+ "android":{
+ "dcvRepoMobile": [
+ {
+ "path": "/programming/android/api-reference/license",
+ "version": "3.2.10"
+ }, {
+ "path": "/programming/android/api-reference/core",
+ "version": "3.2.10"
+ }
+ ],
+ "dcvRepoCore": [
+ {
+ "path": "/enums/core",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/capture-vision-template",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/target-roi-def",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/code-parser-task-settings",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/image-parameter",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/semantic-processing",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/image-source-options",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/global-parameter",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/label-recognizer-task-settings",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/text-line-specification",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/barcode-reader-task-settings",
+ "version": "10.2.10"
+ }
+ ]
+ },
+ "ios":{
+ "dcvRepoMobile": [
+ {
+ "path": "/programming/objectivec-swift/api-reference/license",
+ "version": "3.2.11"
+ }, {
+ "path": "/programming/objectivec-swift/api-reference/core",
+ "version": "3.2.11"
+ }
+ ],
+ "dcvRepoCore": [
+ {
+ "path": "/enums/core",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/capture-vision-template",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/target-roi-def",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/code-parser-task-settings",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/image-parameter",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/semantic-processing",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/image-source-options",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/global-parameter",
+ "version": "2.2.10"
+ },{
+ "path": "/parameters/reference/label-recognizer-task-settings",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/text-line-specification",
+ "version": "3.2.10"
+ },{
+ "path": "/parameters/reference/barcode-reader-task-settings",
+ "version": "10.2.10"
+ }
+ ]
+ }
+ }
+ }, {
+ "version": "2.0.21",
+ "matchList": {
+ "ios":{
+ "dcvRepoMobile": [
+ {
+ "path": "/programming/objectivec-swift/api-reference/license",
+ "version": "3.0.20"
+ }, {
+ "path": "/programming/objectivec-swift/api-reference/core",
+ "version": "3.0.20"
+ }
+ ],
+ "dcvRepoCore": [
+ {
+ "path": "/enums/core",
+ "version": "3.0.20"
+ },{
+ "path": "/parameters/reference/capture-vision-template",
+ "version": "2.0.21"
+ },{
+ "path": "/parameters/reference/target-roi-def",
+ "version": "2.0.21"
+ },{
+ "path": "/parameters/reference/code-parser-task-settings",
+ "version": "2.0.20"
+ },{
+ "path": "/parameters/reference/image-parameter",
+ "version": "2.0.21"
+ },{
+ "path": "/parameters/reference/semantic-processing",
+ "version": "3.0.20"
+ },{
+ "path": "/parameters/reference/image-source-options",
+ "version": "3.0.20"
+ },{
+ "path": "/parameters/reference/global-parameter",
+ "version": "2.0.21"
+ },{
+ "path": "/parameters/reference/label-recognizer-task-settings",
+ "version": "3.0.20"
+ },{
+ "path": "/parameters/reference/text-line-specification",
+ "version": "3.0.20"
+ },{
+ "path": "/parameters/reference/barcode-reader-task-settings",
+ "version": "10.0.21"
+ }
+ ]
+ }
+ }
+ },{
"version": "2.0.20",
"matchList": {
"android":{
diff --git a/programming/android/release-notes/android-2.md b/programming/android/release-notes/android-2.md
index 1cedade..55d5d22 100644
--- a/programming/android/release-notes/android-2.md
+++ b/programming/android/release-notes/android-2.md
@@ -8,6 +8,16 @@ needGenerateH3Content: false
# Release Notes for Android Edition - 2.x
+## 2.2.10 (04/16/2024)
+
+### Improved
+
+- Security update for `DynamsoftCodeParser` and its related libraries.
+
+### Fixed
+
+- Small fixes and tweaks.
+
## 2.0.20 (12/07/2023)
{%- include release-notes/product-highlight-2.0.0.md -%}
diff --git a/programming/android/release-notes/index.md b/programming/android/release-notes/index.md
index e1f6d16..8158cc4 100644
--- a/programming/android/release-notes/index.md
+++ b/programming/android/release-notes/index.md
@@ -8,4 +8,5 @@ needAutoGenerateSidebar: false
# Release Notes - Android Edition
+- [2.2.10 (04/16/2024)](android-2.md#2210-04162024)
- [2.0.20 (12/07/2023)](android-2.md#2020-12072023)
diff --git a/programming/android/user-guide/getting-started-v2.0.20.md b/programming/android/user-guide/getting-started-v2.0.20.md
new file mode 100644
index 0000000..6d00eea
--- /dev/null
+++ b/programming/android/user-guide/getting-started-v2.0.20.md
@@ -0,0 +1,242 @@
+---
+layout: default-layout
+title: User Guide - Dynamsoft Code Parser SDK Android Edition
+description: This is the user guide of Dynamsoft Code Parser SDK Android Edition.
+keywords: user guide, Android
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Dynamsoft Code Parser - Android User Guide
+
+- [Dynamsoft Code Parser - Android User Guide](#dynamsoft-code-parser---android-user-guide)
+ - [Requirements](#requirements)
+ - [Add the Libraries](#add-the-libraries)
+ - [Add the Libraries Manually](#add-the-libraries-manually)
+ - [Add the Libraries via Maven](#add-the-libraries-via-maven)
+ - [Build Your First Application](#build-your-first-application)
+ - [Create a New Project](#create-a-new-project)
+ - [Include the Library](#include-the-library)
+ - [Initialize the License](#initialize-the-license)
+ - [Initialize Code Parser And Parse the Code Bytes](#initialize-code-parser-and-parse-the-code-bytes)
+ - [Display Parsed Results](#display-parsed-results)
+ - [Build and Run the Project](#build-and-run-the-project)
+
+## Requirements
+
+- Supported OS: Android 5.0 (API Level 21) or higher.
+- Supported ABI: **armeabi-v7a**, **arm64-v8a**, **x86** and **x86_64**.
+- Development Environment: Android Studio 2022.2.1 or higher.
+
+## Add the Libraries
+
+The Dynamsoft Code Parser (DCP) Android SDK comes with four libraries:
+
+ | File | Description |
+ |---------|-------------|
+ | `DynamsoftCodeParser.aar` | The Dynamsoft Code Parser library, which includes code parsing logic and related APIs. |
+ | `DynamsoftCore.aar` | The core library, which includes common basic structures and intermediate result related APIs. |
+ | `DynamsoftLicense.aar` | The license library, which includes license related APIs. |
+ | `DynamsoftCodeParserDedicator.aar`| The code parser helper library, which includes some validation functions used by the SDK.|
+
+There are two ways to add the libraries into your project - **Manually** and **Maven**.
+
+### Add the Libraries Manually
+
+1. Download the SDK package from the Dynamsoft Website. After unzipping, four **aar** files can be found in the **Dynamsoft\Libs** directory:
+
+ - **DynamsoftCodeParser.aar**
+ - **DynamsoftCore.aar**
+ - **DynamsoftLicense.aar**
+ - **DynamsoftCodeParserDedicator.aar**
+
+2. Copy the above seven **aar** files to the target directory such as `[App Project Root Path]\app\libs`
+
+3. Open the file `[App Project Root Path]\app\build.gradle` and add the reference in the dependencies:
+
+ ```groovy
+ dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.aar'])
+ }
+ ```
+
+4. Click **Sync Now**. After the synchronization is complete, the SDK is added to the project.
+
+### Add the Libraries via Maven
+
+1. Open the file `[App Project Root Path]\app\build.gradle` and add the Maven repository:
+
+ ```groovy
+ repositories {
+ maven {
+ url "https://download2.dynamsoft.com/maven/aar"
+ }
+ }
+ ```
+
+2. Add the references in the dependencies:
+
+ ```groovy
+ dependencies {
+ implementation 'com.dynamsoft:dynamsoftcodeparser:2.0.20'
+ implementation 'com.dynamsoft:dynamsoftcodeparserdedicator:1.0.10'
+ implementation 'com.dynamsoft:dynamsoftcore:3.0.20'
+ implementation 'com.dynamsoft:dynamsoftlicense:3.0.30'
+ }
+ ```
+
+3. Click **Sync Now**. After the synchronization is complete, the SDK is added to the project.
+
+## Build Your First Application
+
+In this section, we are going to explain how to create a simple `HelloWorld` app for parsing text or bytes.
+
+>Note:
+>
+>- Android Studio 2022.3.1 is used here in this guide.
+>- You can get similar source code from
+> - HelloWorld Sample (Java)
+
+### Create a New Project
+
+1. Open Android Studio and select New Project… in the File > New > New Project… menu to create a new project.
+
+2. Choose the correct template for your project. In this sample, we'll use `Empty Activity`.
+
+3. When prompted, choose your app name (`HelloWorld`) and set the Save location, Language, and Minimum SDK (21)
+ >Note: With minSdkVersion set to 21, your app is available on more than 94.1% of devices on the Google Play Store (last update: March 2021).
+
+### Include the Library
+
+Add the SDK to your new project. Please read [Add the Libraries](#add-the-libraries) section for more details.
+
+### Initialize the License
+
+1. Initialize the license in the file `MainActivity.java`.
+
+ ```java
+ import com.dynamsoft.license.LicenseManager;
+ public class MainActivity extends AppCompatActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ LicenseManager.initLicense("DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9", this, (isSuccess, error) -> {
+ if (!isSuccess) {
+ error.printStackTrace();
+ }
+ });
+ }
+ }
+ ```
+
+ >Note:
+ >
+ >- The license string here grants a time-limited free trial which requires network connection to work.
+ >- You can request for a 30-day trial license via the Customer Portal. Offline trial license is also available by contacting us.
+ >- If you download the Installation Package, it comes with a 30-day trial license by default.
+
+### Initialize Code Parser And Parse the Code Bytes
+
+1. Import and initialize the `CodeParser`.
+
+ ```java
+ import com.dynamsoft.dcp.CodeParser;
+ public class MainActivity extends AppCompatActivity {
+ private CodeParser mParser;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ ...
+ mParser = new CodeParser(this);
+ }
+ }
+ ```
+
+2. In the Project window, open **app > res > layout > `activity_main.xml`**, create a "Parse" button control under the root node.
+
+ ```xml
+
+ ```
+
+3. Parse the code bytes when the user clicks the "Parse" button. Here we use the passport MRZ string as an example.
+
+ ```java
+ public class MainActivity extends AppCompatActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ ...
+ final String passportMRZStr = "P parseCode(passportMRZStr.getBytes())).start();
+ }
+ });
+ }
+
+ private void parseCode(byte[] codeBytes) {
+ try {
+ ParsedResultItem parsedResultItem = mParser.parse(codeBytes, "");
+ showResults(parsedResultItem);
+ } catch (CodeParserException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ ```
+
+ >Note:
+ >- Check out the complete supported code types and fields for details.
+
+### Display Parsed Results
+
+1. Display the parsed result(s) in an alert dialog box.
+
+ ```java
+ public class MainActivity extends AppCompatActivity {
+ ...
+ private void showResults(ParsedResultItem item) {
+ StringBuilder result = new StringBuilder();
+
+ for (HashMap.Entry entry : item.getParsedFields().entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue();
+
+ result.append(key).append(":").append(value).append("\n");
+ }
+
+ runOnUiThread(() -> {
+ new AlertDialog.Builder(this)
+ .setTitle("Result")
+ .setMessage(result.toString())
+ .setPositiveButton("OK", null)
+ .setCancelable(true)
+ .show();
+ });
+ }
+ }
+ ```
+
+### Build and Run the Project
+
+1. Select the device that you want to run your app on from the target device drop-down menu in the toolbar.
+
+2. Click the **Run app** button, then Android Studio installs your app on the connected device and launches it.
+
+You can also download the full source code of all the steps above:
+
+- HelloWorld Sample (Java)
diff --git a/programming/android/user-guide/getting-started.md b/programming/android/user-guide/getting-started.md
index 85bb5ef..afd08f6 100644
--- a/programming/android/user-guide/getting-started.md
+++ b/programming/android/user-guide/getting-started.md
@@ -27,7 +27,7 @@ noTitleIndex: true
- Supported OS: Android 5.0 (API Level 21) or higher.
- Supported ABI: **armeabi-v7a**, **arm64-v8a**, **x86** and **x86_64**.
-- Development Environment: Android Studio 3.4+ (Android Studio 4.2+ recommended).
+- Development Environment: Android Studio 2022.2.1 or higher.
## Add the Libraries
@@ -79,10 +79,10 @@ There are two ways to add the libraries into your project - **Manually** and **M
```groovy
dependencies {
- implementation 'com.dynamsoft:dynamsoftcodeparser:2.0.20'
- implementation 'com.dynamsoft:dynamsoftcodeparserdedicator:1.0.10'
- implementation 'com.dynamsoft:dynamsoftcore:3.0.20'
- implementation 'com.dynamsoft:dynamsoftlicense:3.0.30'
+ implementation 'com.dynamsoft:dynamsoftcodeparser:2.2.10'
+ implementation 'com.dynamsoft:dynamsoftcodeparserdedicator:1.2.20'
+ implementation 'com.dynamsoft:dynamsoftcore:3.2.10'
+ implementation 'com.dynamsoft:dynamsoftlicense:3.2.10'
}
```
diff --git a/programming/ios/api-reference/parsed-result.md b/programming/ios/api-reference/parsed-result.md
index ae7fcd7..accf579 100644
--- a/programming/ios/api-reference/parsed-result.md
+++ b/programming/ios/api-reference/parsed-result.md
@@ -32,15 +32,15 @@ class ParsedResult : NSObject
| Property | Type | Description |
| -------- | ---- | ----------- |
-| [`getOriginalImageHashId`](#getoriginalimagehashid) | | Gets the hash ID of the source image. |
-| [`getOriginalImageTag`](#getoriginalimagetag) | | Gets the tag of the source image. |
-| [`getItems`](#getitems) | | Gets the parsed result item at the specified index. |
-| [`getErrorCode`](#geterrorcode) | | Gets the error code of the parsed result, if an error occurred. |
-| [`getErrorString`](#geterrormessage) | | Gets the error message of the parsed result, if an error occurred. |
+| [`originalImageHashId`](#originalimagehashid) | *NSString \** | Gets the hash ID of the source image. |
+| [`originalImageTag`](#originalimagetag) | *DSImageTag \** | Gets the tag of the source image. |
+| [`items`](#items) | *NSArray \** | Gets the parsed result item at the specified index. |
+| [`errorCode`](#errorcode) | *NSInteger* | Gets the error code of the parsed result, if an error occurred. |
+| [`errorString`](#errormessage) | *NSString \** | Gets the error message of the parsed result, if an error occurred. |
## Method Detail
-### getOriginalImageHashId
+### originalImageHashId
Gets the hash ID of the source image.
@@ -61,7 +61,7 @@ var originalImageHashId: String? { get }
Returns a pointer to a null-terminated string containing the hash ID of the source image.
-### getOriginalImageTag
+### originalImageTag
Gets the tag of the source image.
@@ -86,7 +86,7 @@ Returns a pointer to a CImageTag object representing the tag of the source image
[ImageTag]({{ site.dcv_ios_api }}core/basic-structures/image-tag.html)
-### getItems
+### items
Gets the parsed result item at the specified index.
@@ -107,7 +107,7 @@ var items: [ParsedResultItem]? { get }
Returns an array of [`ParsedResultItem`](parsed-result-item.html).
-### getErrorCode
+### errorCode
Gets the error code of the parsed result, if an error occurred.
@@ -128,7 +128,7 @@ var errorCode: Int { get }
Returns the error code of the parsed result, or 0 if no error occurred.
-### getErrorMessage
+### errorMessage
Gets the error message of the parsed result, if an error occurred.
diff --git a/programming/ios/release-notes/index.md b/programming/ios/release-notes/index.md
index d4e8e0c..1d49c4d 100644
--- a/programming/ios/release-notes/index.md
+++ b/programming/ios/release-notes/index.md
@@ -8,5 +8,6 @@ needAutoGenerateSidebar: false
# Release Notes - iOS Edition
+- [2.2.10 (04/16/2024)](ios-2.md#2210-04162024)
- [2.0.21 (12/28/2023)](ios-2.md#2021-12282023)
- [2.0.20 (12/07/2023)](ios-2.md#2020-12072023)
diff --git a/programming/ios/release-notes/ios-2.md b/programming/ios/release-notes/ios-2.md
index a6dd473..a8aa030 100644
--- a/programming/ios/release-notes/ios-2.md
+++ b/programming/ios/release-notes/ios-2.md
@@ -8,6 +8,21 @@ needGenerateH3Content: false
# Release Notes for iOS Edition - 2.x
+## 2.2.10 (04/16/2024)
+
+### Improved
+
+- Security update for `DynamsoftCodeParser` and its related libraries.
+
+### Fixed
+
+- Small fixes and tweaks.
+
+
+
## 2.0.21 (12/28/2023)
- Fixed a bug where Sourth Africa drivers' license might be parsed incorrectly.
@@ -15,4 +30,3 @@ needGenerateH3Content: false
## 2.0.20 (12/07/2023)
{%- include release-notes/product-highlight-2.0.0.md -%}
-
diff --git a/programming/ios/user-guide/getting-started-v2.0.21.md b/programming/ios/user-guide/getting-started-v2.0.21.md
new file mode 100644
index 0000000..a4e7201
--- /dev/null
+++ b/programming/ios/user-guide/getting-started-v2.0.21.md
@@ -0,0 +1,226 @@
+---
+layout: default-layout
+title: User Guide - Dynamsoft Code Parser SDK iOS Edition
+description: This is the user guide of Dynamsoft Code Parser SDK iOS Edition.
+keywords: user guide, iOS
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Dynamsoft Code Parser - iOS User Guide
+
+- [Dynamsoft Code Parser - iOS User Guide](#dynamsoft-code-parser---ios-user-guide)
+ - [Requirements](#requirements)
+ - [Add the xcframeworks](#add-the-xcframeworks)
+ - [Add the xcframeworks Manually](#add-the-xcframeworks-manually)
+ - [Add the xcframeworks via CocoaPods](#add-the-xcframeworks-via-cocoapods)
+ - [Build Your First Application](#build-your-first-application)
+ - [Create a New Project](#create-a-new-project)
+ - [Include the Library](#include-the-library)
+ - [Initialize the License](#initialize-the-license)
+ - [Initialize Code Parser And Parse the Code Bytes](#initialize-code-parser-and-parse-the-code-bytes)
+ - [Display Parsed Results](#display-parsed-results)
+ - [Build and Run the Project](#build-and-run-the-project)
+
+## Requirements
+
+- Supported OS: iOS 11 or higher (iOS 13 and higher recommended).
+- Supported ABI: arm64 and x86_64.
+- Development Environment: Xcode 13 and above (Xcode 14.1+ recommended).
+
+## Add the xcframeworks
+
+The Dynamsoft Code Parser (DCP) iOS SDK comes with four libraries:
+
+| File | Description |
+|---------|-------------|
+| `DynamsoftCodeParser.xcframework` | The Dynamsoft Code Parser library, which includes code parsing logic and related APIs. |
+| `DynamsoftCore.xcframework` | The core library, which includes common basic structures and intermediate result related APIs. |
+| `DynamsoftLicense.xcframework` | The license library, which includes license related APIs. |
+| `DynamsoftCodeParserDedicator.xcframework` | The code parser helper library, which includes some validation functions used by the SDK. |
+
+There are two ways to add the libraries into your project - **Manually** and **Via the CocaPods**.
+
+### Add the xcframeworks Manually
+
+1. Download the SDK package from the Dynamsoft website. After unzipping, four **xcframework** files can be found in the **Dynamsoft\Frameworks** directory:
+
+ - **DynamsoftCodeParser.xcframework**
+ - **DynamsoftCore.xcframework**
+ - **DynamsoftLicense.xcframework**
+ - **DynamsoftCodeParserDedicator.xcframework**
+
+2. Drag and drop the above **xcframeworks** into your Xcode project. Make sure to check Copy items if needed and create groups to copy the **xcframeworks** into your project's folder.
+
+3. Click on the project settings then go to **General –> Frameworks, Libraries, and Embedded Content**. Set the **Embed** field to **Embed & Sign** for all the **xcframeworks**.
+
+### Add the xcframeworks via CocoaPods
+
+1. Add the frameworks in your **Podfile**, replace `TargetName` with your real target name.
+
+ ```pod
+ target '{Your project name}' do
+ use_frameworks!
+
+ pod 'DynamsoftCodeParser','2.0.21'
+ pod 'DynamsoftCodeParserDedicator','1.0.10'
+ pod 'DynamsoftCore','3.0.20'
+ pod 'DynamsoftLicense','3.0.30'
+
+ end
+ ```
+
+2. Execute the pod command to install the frameworks and generate workspace(**{TargetName}.xcworkspace**):
+
+ ```bash
+ pod install
+ ```
+
+## Build Your First Application
+
+The following sample will demonstrate how to create a simple `HelloWorld` app for parsing text or bytes.
+
+>Note:
+>
+>- The following steps are completed in XCode 14.2
+>- View the entire Swift source code from [HelloWorld(Swift) sample](https://github.com/Dynamsoft/code-parser-mobile-samples/blob/master/ios/HelloWorld/)
+
+### Create a New Project
+
+1. Open XCode and select New Project… in the File > New > New Project… menu to create a new project.
+
+2. Select **iOS -> App** for your application.
+
+3. Input your product name (HelloWorld), interface (StoryBoard) and language (Objective-C/Swift)
+
+4. Click on the **Next** button and select the location to save the project.
+
+5. Click on the **Create** button to finish.
+
+### Include the Library
+
+Add the SDK to your new project. Please read [Add the xcframeworks](#add-the-xcframeworks) section for more details.
+
+### Initialize the License
+
+1. Use the `LicenseManager` class and initialize the license in the file **AppDelegate**.
+
+ ```swift
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+ LicenseManager.initLicense("DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9", verificationDelegate:self)
+ return true
+ }
+ func onLicenseVerified(_ isSuccess: Bool, error: Error?) {
+ if(error != nil)
+ {
+ if let msg = error?.localizedDescription {
+ print("Server license verify failed, error:\(msg)")
+ }
+ }
+ }
+ ```
+
+ >Note:
+ >
+ >- Network connection is required for the license to work.
+ >- The license string here will grant you a time-limited trial license.
+ >- If the license has expired, you can go to the customer portal to request for an extension.
+
+### Initialize Code Parser And Parse the Code Bytes
+
+1. Import and initialize the `CodeParser`.
+
+ ```swift
+ import UIKit
+ import CodeParser
+ class ViewController: UIViewController {
+ private let codeParser = CodeParser()
+
+ }
+ ```
+
+2. Add a "Parse" button on the UI.
+
+ ```swift
+ class ViewController: UIViewController {
+ ...
+ lazy var parseButton: UIButton = {
+ let left = 120.0
+ let width = UIScreen.main.bounds.size.width - 2 * left
+ let height = 50.0
+ let top = UIScreen.main.bounds.size.height - 50.0 - height
+ let button = UIButton(frame: CGRectMake(left, top, width, height))
+ button.backgroundColor = .darkGray
+ button.setTitle("Parse", for: .normal)
+ button.setTitleColor(.white, for: .normal)
+ button.layer.cornerRadius = 6.0
+ button.titleLabel?.font = UIFont.systemFont(ofSize: 20.0)
+ button.addTarget(self, action: #selector(parseCode(_:)), for: .touchUpInside)
+ return button
+ }()
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ self.view.addSubview(parseButton)
+ }
+ }
+ ```
+
+3. Parse the code bytes when the user clicks the "Parse" button. Here we use the passport MRZ string as an example.
+
+ ```swift
+ class ViewController: UIViewController {
+ ...
+ @objc private func parseCode(_ button: UIButton) -> Void {
+ let passportMRZStr = "PNote:
+ >- Check out the complete supported code types and fields for details.
+
+### Display Parsed Results
+
+1. Display the parsed result(s) in an alert dialog box.
+
+ ```swift
+ class ViewController: UIViewController {
+ ...
+ private func showResults(_ item: ParsedResultItem?) -> Void {
+ if item != nil {
+ guard let parsedFields = item?.parsedFields else { return }
+
+ var result = ""
+ for (key,value) in parsedFields {
+ result += "\(key):\(value)\n"
+ }
+
+ let alterController = UIAlertController(title:"Result", message: result, preferredStyle: .alert)
+ let okAction = UIAlertAction(title:"OK", style: .default, handler: nil)
+ alterController.addAction(okAction)
+
+ present(alterController, animated: true, completion: nil)
+ }
+ }
+ }
+ ```
+
+### Build and Run the Project
+
+1. Select the device that you want to run your app on.
+2. Run the project, then your app will be installed on your device.
+
+>Note:
+>
+>- You can get the source code of the HelloWord app from the following link
+>- View the entire Swift source code from [HelloWorld sample](https://github.com/Dynamsoft/code-parser-mobile-samples/blob/main/ios/HelloWorld/)
diff --git a/programming/ios/user-guide/getting-started.md b/programming/ios/user-guide/getting-started.md
index a4e7201..a498b72 100644
--- a/programming/ios/user-guide/getting-started.md
+++ b/programming/ios/user-guide/getting-started.md
@@ -63,10 +63,10 @@ There are two ways to add the libraries into your project - **Manually** and **V
target '{Your project name}' do
use_frameworks!
- pod 'DynamsoftCodeParser','2.0.21'
- pod 'DynamsoftCodeParserDedicator','1.0.10'
- pod 'DynamsoftCore','3.0.20'
- pod 'DynamsoftLicense','3.0.30'
+ pod 'DynamsoftCodeParser','2.2.10'
+ pod 'DynamsoftCodeParserDedicator','1.2.20'
+ pod 'DynamsoftCore','3.2.11'
+ pod 'DynamsoftLicense','3.2.11'
end
```