# iOS (external)

The **DatagramConferenceFramework** is an iOS SDK that allows you to integrate conference functionality into your app. It supports retrieving conference information and joining conferences using either a URL or an alias, with built-in GUI support.

## Installation Guide

**Step 1:** Navigate to the[ Datagram Conference SDK GitHub repository](https://github.com/Datagram-Group/datagram_conference_framework_ios) and download the entire repository.

<figure><img src="/files/SrkC0MxvRsB5zFO9XKPc" alt=""><figcaption></figcaption></figure>

**Step 2:** Inside the downloaded files, open the **`lib`** folder. Copy the file `DatagramConferenceFramework.framework` into your Xcode project directory.

<figure><img src="/files/kt9ZIaXo9lswGmtAFRLC" alt=""><figcaption></figcaption></figure>

**Step 3:** Open your project in **Xcode**.

**Step 4: I**n **Build Settings**, search for `Framework Search Paths` and add the path to the folder where the framework is located.

<figure><img src="/files/BjlNJoN9BoOoCXDoEu4V" alt=""><figcaption></figcaption></figure>

**Step 5:** Go to the **General** tab of your project settings. Under **Frameworks, Libraries, and Embedded Content**, change the embed option for the framework to **"Embed & Sign".**

<figure><img src="/files/AcyynoQHarpSmIZyAvQX" alt=""><figcaption></figcaption></figure>

**Step 6:** Open your app's `Info.plist`file and add **camera** and **microphone** usage descriptions. These are required—if they’re missing, your app will crash when accessing **audio/video**.

<figure><img src="/files/1K04IVX8yO3SaLAXqJEO" alt=""><figcaption></figcaption></figure>

**Step 7:** To allow conference calls to continue while the app is in the background, enable background modes:

* Go to the **Signing & Capabilities** tab.
* Add **Background Modes**.
* Enable the **Voice over IP** option.

<figure><img src="/files/QCcaO2vQzN91i7FvpXgM" alt=""><figcaption></figcaption></figure>

## Usage

### Import the Framework

Add this line at the top of your Swift file:

```
import DatagramConferenceFramework
```

### Load Conference Info

Use the following method to fetch conference details using a URL or an alias:

#### Objective-C Signature:

```
+ (void)getConferenceInfo:(NSString *_Nullable)url
                    Alias:(NSString *_Nullable)alias
              completion:(void(^)(NSDictionary<NSString *,id> * _Nullable result))resultBlock;

```

**What It Does:**

* Retrieves details about a conference using either its **URL** or **alias**.
* If valid, the result will contain
  * **name**: name of the conference
  * **alias**: same as input
  * **expiredAt**: timestamp when the conference expires
* If there's an error, the **error** key will indicate either **"InvalidUrl"** or **"NotFound."**

#### Swift Example:

```
ConferenceSDK.getConferenceInfo(nil, alias: alias) { [weak self] result in
    guard let self = self else { return }

    if let validResult = result {
        NSLog("validResult = %@", validResult)

        if let aliasText = alias, text.count > aliasText.count, qrcodeDict.count < 3 {
            self.joinLinkTextField.text = alias
            self.joinLinkPrefixLabel.text = JoinLinkPrefixText
            self.layoutPrefixView()
        }

        if let resultAlias = validResult["alias"] as? String, !resultAlias.isEmpty {
            self.showAliasDetail(info: validResult)
        } else {
            let notFoundError = "Event not found. Please try again"
            self.showLinkError(errorString: notFoundError)
        }
    }
}
```

### Join Conference (with built-in GUI)

Use this method to join a conference via alias or URL:

#### Objective-C Signature:

```
+ (void)joinConference:(NSString *_Nullable)url
                Alias:(NSString *_Nullable)alias
                  Name:(NSString *_Nullable)name
            completion:(void(^)(NSDictionary<NSString *,id> * _Nullable result))resultBlock;
```

What It Does:

* Joins a conference using the given **URL** or **alias**.
* On success, no result is returned.
* On failure, **the result** will contain an **"error"** key with either **"InvalidUrl"** or **"NotFound."**

#### Swift Example:

```
if resultAlias != nil {
    ConferenceSDK.joinConference(nil, alias: resultAlias, name: "SDK-Demo") { joinResult in
        // Handle result if needed
    }
}
```


---

# 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://doc.datagram.network/sdks/video-conferencing/ios-external.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.
