As a developer, you can use Google Tag Manager to implement and manage
measurement tags and pixels in your mobile applications, without having to
rebuild and resubmit application binaries to app marketplaces. Developers who
work with the Google Analytics for Firebase SDK can easily add Tag Manager to
help manage and make changes to the implementation, even after the app has
shipped.

Developers can log important events and decide later which tags or pixels should
be fired.

## Prerequisites

- In the [Firebase console](https://console.firebase.google.com), add your app to your Firebase project.
- [Set up Google Analytics](https://firebase.google.com/docs/analytics/ios/start/) for your app, including enabling Google Analytics in your Firebase project and adding the Google Analytics for Firebase SDK to your app.
- [Create a Tag Manager account](https://tagmanager.google.com).
- [Configure a Tag Manager container](https://support.google.com/tagmanager/answer/6103696#CreatingAnAccount).

The following sections walk you through the steps to configure and use Google
Tag Manager in your iOS application.

## 1. Add Tag Manager to your project

1. Add the Tag Manager package:

   ### CocoaPods

   To add Tag Manager via [CocoaPods](https://cocoapods.org):
   1. In a terminal, run the following command:

          $ sudo gem install cocoapods

   2. Change to your project directory.

   3. Run the following command to create a file named `Podfile`:

          $ pod init

   4. In `Podfile`, add the following:

          pod 'GoogleTagManager', '~> 6.0'

   5. Run the following command to download and install Tag Manager
      dependencies to your project:

          $ pod install

   ### Swift Package Manager


   To add Tag Manager via the [Swift Package Manager](https://swift.org/package-manager/):
   1. If migrating from a CocoaPods-based project, run `pod deintegrate` to remove CocoaPods from your Xcode project. The CocoaPods-generated `.xcworkspace` file can safely be deleted afterward. If you're adding Firebase to a project for the first time, this step can be ignored.
   2. In Xcode 12, install the Tag Manager library by navigating to **File \> Tag Manager Packages \> Add Package Dependency...**
   3. In the prompt that appears, enter the Tag Manager GitHub
      repository:

          https://github.com/googleanalytics/google-tag-manager-ios-sdk.git

   4. Select the version of Tag Manager you want to use. For new
      projects, we recommend using the latest version of Tag Manager.

   5. Add `-ObjC` to **Other Linker Flags** in the **Build Settings** of
      your project.

2. Create an iOS container if your Tag Manager account doesn't have one:

   1. Sign in to your [Tag Manager](https://tagmanager.google.com) account.
   2. In the *Accounts* tab, select your iOS container.
   3. Click **Admin** in the top navigation bar.
   4. On the **CONTAINER** column, click the '+' icon to create a container.
   5. Enter a container name.
   6. Select **iOS** container.
   7. Click **Create**.
3. Download your container:

   1. Sign in to your [Tag Manager](https://tagmanager.google.com) account.
   2. In the *Accounts* tab, select your iOS container.
   3. Click *Versions* in the top navigation bar.
   4. Select the version of the container you want to download.
   5. Click **Download**.

      > [!NOTE]
      > **Note:** The name of the downloaded file is the container ID with a `.json` extension.

4. Add the downloaded container to your project:

   1. Copy the downloaded file into a folder called `container` in the XCode project root (usually `PROJECT_ROOT/container/GTM-XXXXXX.json`).
   2. Open Xcode.
   3. From the **File** menu, choose **Add files to...**
   4. Select the `container` folder.
   5. Click **Options** and make sure **Create folder references** is selected.
   6. Click **Finish**.

## 2. Log events and variables

Tag Manager uses events, parameters, and user properties logged by the Google
Analytics for Firebase SDK to trigger and build tags you've configured in
Google Tag Manager.

Read the [Firebase developer documentation](https://firebase.google.com/docs/analytics/) for instructions on how to
[log events](https://firebase.google.com/docs/analytics/ios/events) and [set user properties](https://firebase.google.com/docs/analytics/ios/properties).

### **Configure variables in Tag Manager**

To capture the value of event parameters and user properties for use in Google
Tag Manager, you can [configure variables](https://support.google.com/tagmanager/answer/6106899) in the Tag Manager interface.

For example, you could log the following custom event in your app:

    Analytics.logEvent("share_image", parameters: [
      "image_name": name,
      "full_text": text
    ])

Then, you could configure new Event Parameter variables in Tag Manager as
follows to capture the `image_name` and `full_text parameter` values:

- **Variable Name**: Image Name
- **Variable Type**: Event Parameter
- **Event Parameter Key Name** : `image_name`

and:

- **Variable Name**: Full Text
- **Variable Type**: Event Parameter
- **Event Parameter Key Name** : `full_text`

Similarly, you could set the following user property in your app:

    Analytics.setUserProperty(food, forName: "favorite_food")

Then, you could configure a new Firebase User Property variable in Google Tag
Manager to capture the `favorite_food` value:

- **Variable Name**: Favorite Food
- **Variable Type**: Firebase User Property
- **Event Parameter Key Name** : `favorite_food`

### Modify and block events

Tag Manager enables you to modify and block events before they are logged by the
Google Analytics for Firebase SDK. Modifying events can help you add, remove, or
change the values of event parameters or adjust event names without app updates.
Events that are not blocked will be logged by the Google Analytics for Firebase
SDK.

The Google Analytics for Firebase SDK also automatically logs some [events](https://support.google.com/firebase/answer/6317485) and
[user properties](https://support.google.com/firebase/answer/6317486). You can use automatically collected events and properties in
Tag Manager without needing to add any code. However, you can't block them.

## 3. Send events

Firebase event name variables, Firebase event parameter variables, and other
variables are used to set up [triggers](https://support.google.com/tagmanager/answer/6106961). Trigger conditions are evaluated
whenever you log a Firebase event. By default, Google Analytics for Firebase
events automatically fire. It is possible to add a Google Analytics for Firebase
tag in Tag Manager to block events from being sent to Google Analytics.

## 4. Preview, debug, and publish your container

Before publishing a version of your container, you'll want to preview it to make
sure it works as intended. Tag Manager enables you to preview versions of your
container by generating links and QR codes in the Tag Manager web interface and
using them to open your application.

### **Preview container**

To preview a container, generate a preview URL in the Tag Manager web
interface:

1. Sign in to your [Tag Manager](https://tagmanager.google.com) account.
2. Select a mobile container.
3. Click **Versions** in the top navigation bar.
4. Click **Actions \> Preview** on the container version you'd like to preview.
5. Enter your application's package name.
6. Click **Generate begin preview link**.


   ![Preview URLs are available in the preview window of the Tag
   Manager web interface](https://developers.google.com/static/tag-platform/tag-manager/images/preview_example.png)
   **Figure 1:**Getting a preview URL from the Tag Manager web interface.

   <br />

   Save this preview URL for later steps.

To enable container previews, you must define the Tag Manager preview URL scheme
in your project's property list. Under **URL types** of your application's
property list file, register the following URL identifier and URL scheme:

    URL identifier: _your.package.name_
    URL scheme: tagmanager.c._your.package.name_

![Register the tag manager preview URL scheme in your application's
property list file.](https://developers.google.com/static/tag-platform/tag-manager/images/plist.png) **Figure 2:**Add the Tag Manager preview URL scheme to your application's property list file.

> [!NOTE]
> **Note:** `your.package.name` must match the name of the app used to generate the preview URL (see Figure 1).

Stop your application and open the preview URL on an emulator or physical device
to preview the draft container in your application.

### **Debug container**

When you run your app in a simulator or in preview mode, Tag Manager
automatically turns logging to verbose.

### **Publish container**

After you preview your container and verify that it is working, you can
[publish it](https://support.google.com/tagmanager/answer/6107163). After you have published your container, your tag configurations
will become available to mobile app users.

> [!NOTE]
> **Note:** For mobile containers, a default container is used to set initial tag configurations until the first time a container is downloaded. Once the app has connected to the internet and downloaded a container, it will never use the default container again. Applications periodically check for container updates, typically every 12 hours.

## Related resources

Read [Advanced configuration](https://developers.google.com/tag-platform/tag-manager/ios/v5/advanced-config).