# Setting MPM SDK

## 1. Detailed setting

The iOS MPM framework supports various settings.

### Setting the collection interval

You can set the interval for the IMQA MPM framework to save and collect data in seconds.&#x20;

* **Objective-C**

{% code title="AppDelegate.m" %}

```objectivec
IMQAConfig* mpmConfig = [[IMQAConfig alloc] init:@"PROJECT_KEY"];
mpmConfig.dump_interval = 10; // Interval of getting the performance data dump (sec)
mpmConfig.save_interval = 60; // Interval of sending performance data to the collection server (sec)
```

{% endcode %}

* **Swift**

{% code title="AppDelegate.swift" %}

```swift
let mpmConfig = IMQAConfig("<PROJECT_KEY>")
mpmConfig.dump_interval = 10 // Interval of getting the performance data dump (sec)
mpmConfig.save_interval = 60 // Interval of sending performance data to the collection server (sec)
```

{% endcode %}

### Setting the collection server

{% hint style="warning" %}
Clients who have selected an installation-type must perform this setting.
{% endhint %}

The collection server can be set separately, which sends data to be collected by the IMQA MPM framework. Basically, no separate settings are required for clients using SaaS.

* **Objective-C**

{% code title="AppDelegate.m" %}

```objectivec
NSString* imqaUrl = @"https://custom-url"; 
IMQAConfig* mpmConfig = [[IMQAConfig alloc] init:PROJECT_KEY]; 
mpmConfig.api_url = imqaUrl;
```

{% endcode %}

* **Swift**

{% code title="AppDelegate.swift" %}

```swift
let imqaUrl = "https://custom-url" 
let mpmConfig = IMQAConfig(PROJECT_KEY) 
mpmConfig.api_url = imqaUrl
```

{% endcode %}

### Setting network collection&#x20;

The IMQA MPM framework can set whether or not to collect network information. The framework also provides a function that can ignore the collection of a specific URL, which enables you to ignore the URL that requires security.

* **Objective-C**

{% code title="AppDelegate.m" %}

```objectivec
IMQAConfig* mpmConfig = [[IMQAConfig alloc] init:@"PROJECT_KEY"];
mpmConfig.useNetworkCollect = YES; // YES: Collect, NO: Do not collec
mpmConfig.ignoreUrl = @[@"https://url1.com", @"http://url.com"]; // An array of specific URLs to ignore
```

{% endcode %}

* **Swift**

{% code title="AppDelegate.swift" %}

```swift
let mpmConfig = IMQAConfig("<PROJECT_KEY>")
mpmConfig.useNetworkCollect = true // true: Collect, false: Do not collect
mpmConfig.ignoreUrl = ["https://url1.com", "http://url.com"] // An array of specific URLs to ignore
```

{% endcode %}

### Checking collected data&#x20;

If you want to check the data collected by the IMQA MPM framework, you can check the data on the console using its own options.

* **Objective-C**

{% code title="AppDelegate.m" %}

```objectivec
IMQAConfig* mpmConfig = [[IMQAConfig alloc] init:@"PROJECT_KEY"];
mpmConfig.downloadDumpData = YES;
```

{% endcode %}

* **Swift**

{% code title="AppDelegate.swift" %}

```swift
let mpmConfig = IMQAConfig("<PROJECT_KEY>")
mpmConfig.downloadDumpData = true
```

{% endcode %}

## 2. Setting WKWebView

The IMQA MPM framework also collects the performance information of WKWebView. Please be noted that UIWebView is not supported due to the Apple policy.

### Setting the web server (HTML)

The IMQA WebView JavaScript library should be inserted into a web page to collect WKWebView data. If you wish, you can also download the file and use it by adding a direct path to the web page.

{% hint style="info" %}
For information on how to install the Agent when using MPM / WPM integration, refer to ‘IMQA WPM/WCrash Installation Guide > 1.2. Please refer to 'Using WPM / MPM integration (Installing WebAgent + WebviewAgent)'.
{% endhint %}

{% code title="page.html" %}

```html
<!-- IMQA Webview Agent(ver. 1.1.3 earlier)  -->
<script type="text/javascript" src="https://imqawebviewagent.blob.core.windows.net/agent/webview-agent-1.1.2.js"
crossorigin></script>

// If you want to apply it as a min file:
<script type="text/javascript" src="https://imqawebviewagent.blob.core.windows.net/agent/webview-agent-1.1.2.min.js"
crossorigin></script>
```

{% endcode %}

```html
<!-- IMQA Webview Agent (ver. 1.1.3 later) -->
<script type="text/javascript" src="https://cdn.imqa.io/agent/webview-agent-1.1.3.js"
crossorigin></script>

<script>
    ((w, c, _wv, _w, _wk, _mh, _b) => {        
       w[_wv](w); // Webview Agent Execution Function
    })(window, 'imqaClientConfig', 'IMQAWebviewMain', 'IMQAWebMain', 'webkit', 'messageHandlers', 'ImqaBridge')
</script>
```

### Setting iOS project

The WebView that requires performance collection requires the following settings. Additionally, error information occurring in WebView can be collected. To collect Webview Crash, you must add ImqaBridgeCrash.

* **Objective-C**

{% code title="ViewController.m " %}

```objectivec
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
   // IMQA settings section
   if([message.name isEqual: @"ImqaBridge"]) {
        [[IMQAMpm sharedInstance] saveWebviewPostMessage:self :message.body];
   }
   // Additional setup code (Webview Agent (ver. 1.1.2 later) WebView Crash collection)
   if(message.name == "ImqaBridgeCrash") {
    IMQACrash.notifyWebCrash("\(message.body)")
   }
}

- (void)viewDidLoad {
    [super viewDidLoad];
    NSURL* url = [[NSURL alloc] initWithString:@""];
    NSURLRequest* reqeust = [[NSURLRequest alloc] initWithURL:url];
    [_webView loadRequest:request];
    [_webView.configuration.userContentController addScriptMessageHandler:self           name:@"ImqaBridge"];
}
```

{% endcode %}

* **Swift**

{% code title="ViewController.swift" %}

```swift
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    // IMQA settings section
    if(message.name == "ImqaBridge") {
        IMQAMpm.sharedInstance.saveWebviewPostMessage(self,"\(message.body)")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    let request = URLRequest(url: URL(string: url)!) webView.load(request)

    // IMQA settings section
    webView.configuration.userContentController.add(self, name: "ImqaBridge")
}
```

{% endcode %}

## 3. Network Collection (NSURLSession or URLSession)

When using NSURLSession or URLSession to communicate over the network, some settings are required for network collection.

* **Objective-C**&#x20;

```swift
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; // or default
configuration.protocolClasses = [[IMQAMpm sharedInstance] imqaURLSessionProtocol];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
```

* **Swift**

```objectivec
let configuration = URLSessionConfiguration.ephemeral // or default
configuration.protocolClasses = IMQAMpm.sharedInstance.imqaURLSessionProtocol()
let session = URLSession.init(configuration: configuration)
```

## 4. dSYM Settings

For apps with iOS Symbolication, you can view class names and function names through dSYM settings. See [Using MPM > Project list > Project Management > Proguard/dSYM Settings](/imqa-guide/eng/user-guide/using-mpm/project-list.md#proguard-dsym-settings).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.imqa.io/imqa-guide/eng/installation-guide/ios/setting-mpm-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
