Unbreakable iOS App Links with AppsOnAir AppLink – The Smarter Firebase Dynamic Links Alternative

By Harshil Gandhi
Dot
October 9, 2025
Unbreakable iOS App Links with AppsOnAir AppLink – The Smarter Firebase Dynamic Links Alternative

Introducing AppLink for iOS

AppLink by AppsOnAir is the smarter, more reliable alternative to Firebase Dynamic Links. It keeps your iOS deep links unbreakable with custom domains, unlimited redirects, and powerful analytics. Effortlessly migrate existing links and gain full control over deep linking, referrals, and user attribution - all in one seamless platform.

Why AppLink Stands Out for iOS

Effortless Setup in Minutes

Forget the lengthy, confusing setup of Firebase Dynamic Links. With AppLink, you’ll have your iOS deep links running in minutes through an intuitive dashboard built for speed and simplicity.

Actionable Insights That Matter

AppLink delivers more than basic metrics. Gain visibility into user engagement, conversion paths, and retention - all from real-time analytics designed to help you optimize your iOS app experience.

Seamless iOS Integration

Built specifically with iOS developers in mind, AppLink integrates smoothly with your existing setup. No hacks, no heavy lifting — just clean, reliable linking that feels native to iOS.

Getting Started With AppLink in iOS

Import the SDK into Your Xcode Project

First, add Pod in your project

In your project’s root directory, run the following command to install CocoaPods:

sudo gem install cocoapods

Run the following command to initialize CocoaPods:

pod init

Open the generated Podfile in your preferred code editor and add the SDK dependency under your app target:

target 'your_project_name' do
  pod 'AppsOnAir-AppLink'
end

In the terminal, navigate to your project directory and run:

pod repo update
pod install

iOS Setup Made Simple

Add your application ID to your info.plist file. This unique identifier connects your app to the AppLink service:

<key>AppsonairAppId</key>
<string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>

Replace the placeholder with your actual application ID from the AppsOnAir dashboard.

Configure Entitlements and URL Schemes

For Custom URL Schemes: If you're using custom URL schemes (like myapp://), add this configuration:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>YOUR_URL_NAME</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>YOUR_CUSTOM_URL_SCHEME</string>
        </array>
    </dict>
</array>

For Universal Links: Universal Links provide a seamless experience by opening your app directly when users tap links. Configure them like this:

<key>com.apple.developer.associated-domains</key>
<array>
    <string>applinks:YOUR_DOMAIN</string>
</array>

Replace YOUR_DOMAIN with your actual domain name.

Implementation and Initialize the AppLink Service

Import the SDK at the top of your AppDelegate file or relevant Swift/SwiftUI/Objective-C file:

Import

Swift / SwiftUi

#import "AppsOnAir_AppLink-Swift.h"

Objective-C

#import "AppsOnAir_AppLink-Swift.h"

Implementation

Swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    // AppLink Class instance create
    let appLinkService = AppLinkService.shared

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Initialize the link service
        AppLinkService.shared.initialize { url, linkInfo in
            //Write the code for handling flow based on url
        } onReferralLinkDetected: { referralInfo in
            //Write the code for handling referral flow based on url
        }
        return true
    }

}

SwiftUI

import SwiftUI
import AppsOnAir_AppLink

@main
struct appsonairApp: App {

    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
      AppLinkService.shared.initialize { url, linkInfo in
            //Write the code for handling flow based on url
      }onReferralLinkDetected: { referralInfo in
            //Write the code for handling referral flow based on url
      }
      return true
  }
}

Objective-C

#import "AppDelegate.h"
#import "AppsOnAir_AppLink/AppsOnAir_AppLink-Swift.h"

@interface AppDelegate ()
@property (nonatomic, strong) AppLinkService *appLinkServices;
@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // AppLink Class instance create
    self.appLinkServices = [AppLinkService shared];

    // help to initialize link services
    [self.appLinkServices initializeOnDeepLinkProcessed:^(NSURL * url, NSDictionary<NSString *,id> * linkInfo) {
        //Write the code for handling flow based on url
    } onReferralLinkDetected:^(NSDictionary<NSString *,id> * referralInfo) {
        //Write the code for handling referral flow based on url
    }];
    // Override point for customization after application launch.
    return YES;
}

AppLink Implementation Code for SwiftUI

When using SwiftUI, it is necessary to add the .onOpenURL modifier in ContentView.swift, directly after any layout container such as VStack, Button, or similar views for handling AppLink.

VStack {
    // Your UI components here
}
.onOpenURL { url in
    AppLinkService.shared.handleAppLink(incomingURL: url)
}

AppLink Creation

You can also generate an AppLink such as from a button tap within your application’s UI.

Swift

class ViewController: UIViewController {
    let appLinkService = AppLinkService.shared

    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton(type: .system)
                button.setTitle("Button", for: .normal)
                button.backgroundColor = .systemBlue
                button.setTitleColor(.white, for: .normal)
                button.layer.cornerRadius = 10

                // Set button frame (size and position)
                button.frame = CGRect(x: 100, y: 200, width: 150, height: 50)

                // Add target for onPressed (TouchUpInside)
                button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)

                // Add the button to the view
                self.view.addSubview(button)
          }

          // Define the action when button is pressed
          @objc func buttonPressed() {
               // Help to create the link
               // <urlPrefix> shouldn't contain http or https
               // <shortId>  If not set, it will be auto-generated
               appLinkService.createAppLink(url: "https://appsonair.com",name: "AppsOnAir",urlPrefix: "YOUR_DOMAIN_NAME",shortId: "LINK_ID",socialMeta: ["title": "link title","description":  "link description","imageUrl": "https://image.png"],isOpenInBrowserApple: false,isOpenInIosApp: true,iosFallbackUrl: "https://appstore.com"
                ) { linkInfo  in
                    //write the code for handling create link
                }
           }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

SwiftUI

struct ContentView: View {
    @State private var showToast = false
    @State private var message = ""

    var body: some View {
        VStack(spacing: 20) {
            Button(action: {
                AppLinkService.shared.createAppLink(
                    url: "https://appsonair.com",
                    name: "AppsOnAir",
                    urlPrefix: "YOUR_DOMAIN_NAME", //  <urlPrefix> shouldn't contain http or https
                    shortId: "LINK_ID",   // <shortId>  If not set, it will be auto-generated
                    socialMeta: ["title": "link title","description": "link description","imageUrl": "https://image.png"],
                    isOpenInBrowserApple: false,
                    isOpenInIosApp: true,
                    iosFallbackUrl: "https://appstore.com",
                ) { linkInfo in
                     //write the code for handling create link
                }
            }) {
                Text("Create Link")
                    .padding()
                    .frame(maxWidth: .infinity)
                    .background(Color.green)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
        }
        .padding()
        .toast(isPresented: $showToast, message: message)
        .onOpenURL { url in
            AppLinkService.shared.handleAppLink(incomingURL: url)
        }
    }
}

Objective-C

@interface ViewController ()
@property (nonatomic, strong) AppLinkService *appLinkService;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.appLinkService = [AppLinkService shared];
    // Create a UIButton programmatically
       UIButton *ctaButton = [UIButton buttonWithType:UIButtonTypeSystem];

       // Set button title
       [ctaButton setTitle:@"Create Link" forState:UIControlStateNormal];

       // Set button frame (position and size)
       ctaButton.frame = CGRectMake(100, 200, 200, 50);

       // Add target-action for button tap
       [ctaButton addTarget:self action:@selector(createLinkTap) forControlEvents:UIControlEventTouchUpInside];

       // Add button to the view
       [self.view addSubview:ctaButton];
}
- (void)createLinkTap {
     // Help to create link
     // <urlPrefix> shouldn't contain http or https
     // <shortId>  If not set, it will be auto-generated
    [self.appLinkService createAppLinkWithUrl:@"https://appsonair.com" name:@"AppsOnAir" urlPrefix:@"YOUR_DOMAIN_NAME" shortId: @"LINK_ID"socialMeta:@{@"title":@"link title",@"description":@"link description",@"imageUrl":@"https://image.png"}isOpenInBrowserApple:@0 isOpenInIosApp:@1 iosFallbackUrl:@"https://appstore.com" isOpenInAndroidApp:@1 isOpenInBrowserAndroid:@0 androidFallbackUrl:@"https://play.google.com" completion:^(NSDictionary<NSString *,id> * linkInfo) {
        //write the code for handling create link
    }];
}

Get Referral Link

You can also retrieve linkInfo, such as from a button action:

Swift

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton(type: .system)
                button.setTitle("Button", for: .normal)
                button.backgroundColor = .systemBlue
                button.setTitleColor(.white, for: .normal)
                button.layer.cornerRadius = 10

                // Set button frame (size and position)
                button.frame = CGRect(x: 100, y: 200, width: 150, height: 50)

                // Add target for onPressed (TouchUpInside)
                button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)

                // Add the button to the view
                self.view.addSubview(button)
          }

          // Define the action when button is pressed
           @objc func buttonPressed() {
               // Retrieve referral link info
                AppLinkService.shared.getReferralInfo { linkInfo in
                   //Write the code for handling referral linkInfo
                }
           }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

SwiftUI

struct ContentView: View {

    var body: some View {
        VStack(spacing: 20) {
            Button(action: {
                AppLinkService.shared.getReferralInfo { linkInfo in
                   //Write the code for handling referral flow based on url
                }
            }) {
                Text("Fetch Referral Link")
                    .padding()
                    .frame(maxWidth: .infinity)
                    .background(Color.green)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
        }
        .padding()
        .onOpenURL { url in
            AppLinkService.shared.handleAppLink(incomingURL: url)
        }
    }
}

Objective-C

@interface ViewController ()
@property (nonatomic, strong) AppLinkService *appLinkService;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.appLinkService = [AppLinkService shared];
    // Create a UIButton programmatically
       UIButton *ctaButton = [UIButton buttonWithType:UIButtonTypeSystem];

       // Set button title
       [ctaButton setTitle:@"Fetch Referral Link" forState:UIControlStateNormal];

       // Set button frame (position and size)
       ctaButton.frame = CGRectMake(100, 200, 200, 50);

       // Add target-action for button tap
       [ctaButton addTarget:self action:@selector(getReferralLinkTap) forControlEvents:UIControlEventTouchUpInside];

       // Add button to the view
       [self.view addSubview:ctaButton];
}
- (void)getReferralLinkTap {
    // Retrieve referral link info
    [self.appLinkServices getReferralInfoWithCompletion:^(NSDictionary<NSString *,id> * linkInfo) {
         //Write the code for handling referral linkInfo
    }];
}

Track referrals, measure viral growth, and understand your user acquisition funnel with one simple method call.

For a complete guide and example refer to documentation.

What Makes This Special

  1. Optimized for Social Sharing: Generates polished previews for platforms like Twitter, Facebook, and LinkedIn automatically.
  2. Intelligent Platform Routing: Delivers the right experience for iOS users while adapting for other devices.
  3. Reliable Fallbacks: Ensures users without your app are directed to the appropriate App Store page.
  4. Custom Branded Links: Leverage your own domain to create professional, on-brand links.

The Dashboard That Transforms Your iOS Deep Linking

AppLink’s web dashboard gives iOS developers full control:

  • Real-Time Analytics – Track clicks, conversions, and user journeys instantly.
  • Team Collaboration – Manage access and collaborate seamlessly with your development team.

Technical Advantages for iOS

  1. Simple Setup – One pod, clear documentation, instant results without complex configuration.
  2. High Performance – Links resolve faster than Firebase Dynamic Links.
  3. Reliable – 99.9% uptime SLA supported by a global CDN.
  4. Future-Ready – Regular updates and new features ensure your setup evolves, not stagnates.

Migration Made Easy

From Firebase Dynamic Links

AppLink covers all your Firebase use cases, but better:

  • Deep Linking : Faster, more reliable link resolution for iOS.
  • Social Sharing : Automatically generated previews.
  • Analytics : More actionable insights to optimize engagement.
  • Custom Domains :  Simple setup with flexible branding options.

For New iOS Projects

Starting fresh? AppLink is built for modern iOS apps:

  • Clean Swift/SwiftUI and Objective -c integration
  • Comprehensive developer documentation
  • Active support and ongoing development
  • Scalable pricing that grows with your app

Best Practices for iOS AppLink Success

1. Plan Your Link Structure : Use clear, meaningful shortIds for important links.

2. Optimize Social Previews : Well-crafted titles, descriptions, and images can boost click-through rates dramatically.

3. Test Across Devices : AppLink handles iOS differently than Android. Test thoroughly before launch.

4. Monitor Analytics : Use the dashboard to track user behavior and fine-tune your funnels.

The Future of iOS Deep Linking

AppLink isn’t just a Firebase replacement - it’s the next generation of deep linking and user attribution. With advanced analytics, team collaboration tools, and enterprise-grade reliability, AppLink builds the foundation modern iOS apps need.

Ready to Make the Switch?

The Firebase Dynamic Links era is over. The AppLink era for iOS has begun.

Your users deserve seamless deep links. Your business deserves accurate attribution. Your development team deserves tools that just work. AppLink delivers all three.

Start building with AppLink today and discover why iOS developers call it the deep linking solution we’ve been waiting for.

Experience AppLink for iOS visit AppsOnAir and see why thousands of developers are switching from Firebase Dynamic Links.

Start Pushing Real-Time App Updates Today
Try AppsOnAir for Free
Stay Uptodate