> For the complete documentation index, see [llms.txt](https://doc.batch.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.batch.com/developer/technical-guides/how-to-guides/mobile/ios-specific/how-to-work-around-ios-test-signing-issues-with-batch-2.0.md).

# How to work around iOS test signing issues with Batch 2.0?

Batch SDK for iOS 2.0 is distributed in a different way than the 1.x versions.

The 1.x framework were Static Libraries and starting with 2.0.0 it is a Dynamic Library with support for [Mergable Libraries](https://developer.apple.com/documentation/xcode/configuring-your-project-to-use-mergeable-libraries).

{% hint style="info" %}
Due to CocoaPods limitations, Batch is only distributed as a Mergable Library via Swift Package Manager or manually downloading the XCFramework.
{% endhint %}

Support for those frameworks has been introduced in Xcode 15.0, but unfortunately some tooling in the iOS ecosystem is not compatible with Mergable Libraries yet.

This can result in various errors misleading returned by those tools, such as:

* Invalid framework Batch.framework
* Invalid binary
* Code signing failed
* IOS\_DEPLOY\_FAILED A valid provisioning profile for this executable was not found. (BrowserStack)

{% hint style="info" %}
If you're running into issues but are either:

* Using Batch SDK 1.x
* Integrating using CocoaPods

then this article does not apply to you, as those versions are not Mergable Libraries. Your issue probably comes from another problem.
{% endhint %}

{% hint style="warning" %}
If the issue arises with BrowserStack, please don't hesitate to reach out to their support team, as they will be able to help resolve the error you're encountering.
{% endhint %}

### Modifying your project <a href="#h_eb1e034b1e" id="h_eb1e034b1e"></a>

The workaround is to ask Xcode to create a merged binary, compiling Batch into your main target rather than linking to it dynamically.

This can even be benificial for your app, as statically linked binaries start up faster!

To do so:

* Open your Xcode project
* Select your application's target
* Open `Build Settings`
* Search for `merged`
* Set `Create Merged Binary` to `Automatic`

<figure><img src="https://38998153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCL8wF0y1T2vLnm3yR2MW%2Fuploads%2FMOELqcNJblvn8utkmpAB%2Ftechnical_guides_xcode_create_merged_binary_190625.gif?alt=media&amp;token=68c80ee0-bfec-41b3-84ca-6e373c775745" alt=""><figcaption><p>Xcode Create Merged Binary</p></figcaption></figure>

{% hint style="warning" %}
While this is an invisible change for most apps, this might cause unexpected issues depending on what dependencies you use and how they've beed added to the project.

Consider testing this change in a TestFlight build, or only configure your project with this setting for builds you send to testing platforms.
{% endhint %}

If the workaround worked, it is indeed that your service/tool does not support Mergable Libraries. Please consider getting in touch with the provider or maintainer to let them know about this!

If you do not want or are not able to make a Merged Binary, please try another workaround down below or get in touch with our support team.

**If this does not work, there are two other ways to work around this:**

<details>

<summary><strong>Cocoapods</strong></summary>

As the Cocoapods is not a Mergable Library, integrating Batch with it works around the issue.

You do not have to switch to Cocoapods for all of your dependencies, only Batch.

</details>

<details>

<summary>Manual integration</summary>

Download the CocoaPod framework binary yourself and manually integrate it into the project. You can find the ZIP URL [in the Podspec file](https://github.com/CocoaPods/Specs/blob/master/Specs/5/1/f/Batch/2.0.2/Batch.podspec.json).

Replace `2.0.2` in the GitHub Podspec URL with the Batch version you want.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://doc.batch.com/developer/technical-guides/how-to-guides/mobile/ios-specific/how-to-work-around-ios-test-signing-issues-with-batch-2.0.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
