# 1.37.0

VoIP push registration is simplified — the SDK now owns the `PKPushRegistry` delegate internally. A single call to `StreamVideoReactNative.voipRegistration()` replaces all the previous AppDelegate boilerplate.

## 🔨 What changed?

`StreamVideoReactNative.voipRegistration()` still exists but now sets up the registry **and** owns the delegate. The legacy helpers that used to be called from your `AppDelegate`'s `PKPushRegistryDelegate` methods are **removed**:

- `StreamVideoReactNative.didUpdatePushCredentials(_:forType:)`
- `StreamVideoReactNative.didReceiveIncomingPush(_:forType:completionHandler:)`
- `StreamVideoReactNative.didReceiveIncomingVoIPPush(_:metadata:completionHandler:)`

If your code references any of these, it will fail to compile against 1.37.0.

## 💡 How to migrate?

### Expo apps

Re-run prebuild after upgrading — the Stream Video SDK config plugin emits the new boilerplate automatically:

```bash
npx expo prebuild --clean
```

### React Native apps with a manual AppDelegate

Update your `AppDelegate.swift` (or `AppDelegate.mm`) in three steps. The `voipRegistration()` call itself stays — only the surrounding boilerplate changes.

#### 1. Drop the `PushKit` import

<Tabs>

```objc title="AppDelegate.mm" label="Objective-C"
#import <PushKit/PushKit.h> // [!code --]
#import "StreamVideoReactNative.h"
```

```swift title="AppDelegate.swift" label="Swift"
import PushKit // [!code --]
import stream_video_react_native
```

</Tabs>

#### 2. Remove the `PKPushRegistryDelegate` conformance and delete all `pushRegistry(...)` methods

Drop the protocol from your class declaration (Swift only):

```swift title="AppDelegate.swift"
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, PKPushRegistryDelegate { // [!code --]
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { // [!code ++]
```

Then delete the following delegate methods from your `AppDelegate`:

<Tabs>

```swift label="Swift"
// Methods to delete:
pushRegistry(_:didUpdate:for:)
pushRegistry(_:didReceiveIncomingPushWith:for:completion:)
pushRegistry(_:didReceiveIncomingVoIPPushWith:metadata:withCompletionHandler:) // iOS 26.4+ variant, if you added it
```

```objc label="Objective-C"
// Methods to delete:
pushRegistry:didUpdatePushCredentials:forType:
pushRegistry:didReceiveIncomingPushWithPayload:forType:withCompletionHandler:
pushRegistry:didReceiveIncomingVoIPPushWithPayload:metadata:withCompletionHandler: // iOS 26.4+ variant, if you added it
```

</Tabs>

#### 3. Keep the `voipRegistration()` call

No change needed — the call stays exactly as it was:

<Tabs>

```objc title="AppDelegate.mm" label="Objective-C"
[StreamVideoReactNative voipRegistration];
```

```swift title="AppDelegate.swift" label="Swift"
StreamVideoReactNative.voipRegistration()
```

</Tabs>


---

This page was last updated at 2026-06-05T14:24:49.278Z.

For the most recent version of this documentation, visit [https://getstream.io/video/docs/react-native/migration-guides/1.37.0/](https://getstream.io/video/docs/react-native/migration-guides/1.37.0/).