---
title: FAQs - Frequently Asked Questions
slug: sdks/faqs
hidden: false
sidebar_order: 99
sidebar_label: 'FAQs '
metadata:
  title: Pine Labs iOS SDK FAQs — Integration & Troubleshooting | Pine Labs
  description: >-
    Find answers to common questions about Pine Labs iOS SDK integration,
    requirements, testing, compatibility, security, and troubleshooting.
  keywords: >-
    ios sdk faq, pine labs mobile sdk, swift integration, upi intent, payment
    sdk troubleshooting, ios 16
  robots: index
---
[block:html]
{
  "html": "<style>\n\n/* Container */\n.container {\n    max-width: 100%;\n    margin: 0 auto;\n}\n\n/* Header */\n.header {\n    text-align: flex-start;\n    margin-bottom: 3rem;\n}\n\n.header h1 {\n    font-size: 2.5rem;\n    color: #1e293b;\n    margin-bottom: 0.75rem;\n}\n\n.header p {\n    font-size: 1.125rem;\n    color: #64748b;\n}\n\n/* Category Filter */\n.category-filter {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 0.5rem;\n    margin-bottom: 2rem;\n}\n\n.category-label {\n    display: inline-block;\n    padding: 0.5rem 1rem;\n    background: #f1f5f9;\n    color: #475569;\n    border-radius: 9999px;\n    font-size: 0.875rem;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    border: 2px solid transparent;\n}\n\n.category-label:hover {\n    background: #e2e8f0;\n}\n\n.category-input {\n    display: none;\n}\n\n/* Category Filtering Logic */\n/* Show all FAQs by default */\n.faq-item {\n    display: block;\n}\n\n/* Category filtering using radio buttons */\n#cat-all:checked ~ .faq-list .faq-item {\n    display: block;\n}\n\n#cat-requirements:checked ~ .faq-list .faq-item:not([data-category=\"Requirements\"]) {\n    display: none;\n}\n\n#cat-testing:checked ~ .faq-list .faq-item:not([data-category=\"Testing\"]) {\n    display: none;\n}\n\n#cat-integration:checked ~ .faq-list .faq-item:not([data-category=\"Integration\"]) {\n    display: none;\n}\n\n#cat-compatibility:checked ~ .faq-list .faq-item:not([data-category=\"Compatibility\"]) {\n    display: none;\n}\n\n#cat-implementation:checked ~ .faq-list .faq-item:not([data-category=\"Implementation\"]) {\n    display: none;\n}\n\n#cat-configuration:checked ~ .faq-list .faq-item:not([data-category=\"Configuration\"]) {\n    display: none;\n}\n\n#cat-security:checked ~ .faq-list .faq-item:not([data-category=\"Security\"]) {\n    display: none;\n}\n\n/* Active category styling */\n#cat-all:checked ~ .category-filter label[for=\"cat-all\"],\n#cat-requirements:checked ~ .category-filter label[for=\"cat-requirements\"],\n#cat-testing:checked ~ .category-filter label[for=\"cat-testing\"],\n#cat-integration:checked ~ .category-filter label[for=\"cat-integration\"],\n#cat-compatibility:checked ~ .category-filter label[for=\"cat-compatibility\"],\n#cat-implementation:checked ~ .category-filter label[for=\"cat-implementation\"],\n#cat-configuration:checked ~ .category-filter label[for=\"cat-configuration\"],\n#cat-security:checked ~ .category-filter label[for=\"cat-security\"] {\n    background: #003434;\n    color: white;\n    border-color: #002323;\n}\n\n/* FAQ List */\n.faq-list {\n    display: flex;\n    flex-direction: column;\n    gap: 1rem;\n}\n\n/* FAQ Item */\n.faq-item {\n    background: white;\n    border: 1px solid #e2e8f0;\n    border-radius: 0.5rem;\n    overflow: hidden;\n    transition: box-shadow 0.3s ease;\n}\n\n.faq-item:hover {\n    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n}\n\n.faq-checkbox {\n    display: none;\n}\n\n/* FAQ Question */\n.faq-question {\n    display: block;\n    padding: 1.5rem;\n    cursor: pointer;\n    user-select: none;\n    position: relative;\n    font-weight: 500;\n    font-size: 1.063rem;\n    color: #1e293b;\n    transition: background-color 0.3s ease;\n}\n\n.faq-question:hover {\n    background: #f8fafc;\n}\n\n/* Plus/Minus Icon */\n.faq-question::after {\n    content: '+';\n    position: absolute;\n    right: 1.5rem;\n    top: 50%;\n    transform: translateY(-50%);\n    font-size: 1.5rem;\n    font-weight: 300;\n    color: #008d63;\n    transition: transform 0.3s ease;\n}\n\n.faq-checkbox:checked + .faq-question::after {\n    content: '−';\n    transform: translateY(-50%) rotate(180deg);\n}\n\n/* Category Tag */\n.faq-category-tag {\n    display: inline-block;\n    margin-top: 0.5rem;\n    font-size: 0.75rem;\n    color: #008d63;\n    font-weight: 500;\n}\n\n/* FAQ Answer */\n.faq-answer {\n    max-height: 0;\n    overflow: hidden;\n    transition: max-height 0.4s ease, padding 0.4s ease;\n    padding: 0 1.5rem;\n    border-top: 1px solid transparent;\n}\n\n.faq-checkbox:checked ~ .faq-answer {\n    max-height: 1000px;\n    padding: 1.5rem;\n    border-top-color: #f1f5f9;\n}\n\n/* Answer Content Styling */\n.faq-answer p {\n    margin-bottom: 1rem;\n    color: #475569;\n}\n\n.faq-answer p:last-child {\n    margin-bottom: 0;\n}\n\n.faq-answer ul {\n    margin: 1rem 0;\n    padding-left: 1.5rem;\n}\n\n.faq-answer li {\n    margin-bottom: 0.5rem;\n    color: #475569;\n}\n\n.faq-answer strong {\n    color: #1e293b;\n}\n\n.faq-answer code {\n    background: #f1f5f9;\n    padding: 0.125rem 0.5rem;\n    border-radius: 0.25rem;\n    font-family: 'Courier New', monospace;\n    font-size: 0.875rem;\n    color: #dc2626;\n}\n\n/* Help Section */\n.help-section {\n    margin-top: 3rem;\n    padding: 2rem;\n    background: #dbeafe;\n    border-radius: 0.5rem;\n    text-align: center;\n}\n\n.help-section h3 {\n    font-size: 1.5rem;\n    margin-bottom: 0.5rem;\n    color: #1e293b;\n}\n\n.help-section p {\n    color: #475569;\n    margin-bottom: 1.5rem;\n}\n\n.help-button {\n    display: inline-block;\n    padding: 0.75rem 1.5rem;\n    background: #2563eb;\n    color: white;\n    text-decoration: none;\n    border-radius: 0.5rem;\n    font-weight: 500;\n    transition: background 0.3s ease;\n}\n\n.help-button:hover {\n    background: #1d4ed8;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n    .header h1 {\n        font-size: 2rem;\n    }\n\n    .faq-question {\n        padding: 1rem;\n        padding-right: 3rem;\n    }\n\n    .faq-checkbox:checked ~ .faq-answer {\n        padding: 1rem;\n    }\n\n    .help-section {\n        padding: 1.5rem;\n    }\n}\n\n</style>\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Pine Labs iOS SDK - FAQ</title>\n  <!--  <link rel=\"stylesheet\" href=\"faq.css\">-->\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"header\">\n            <p>Find answers to common questions about the Pine Labs iOS SDK</p>\n        </div>\n\n        <!-- Category filter using radio buttons -->\n        <input type=\"radio\" id=\"cat-all\" name=\"category\" class=\"category-input\" checked>\n        <input type=\"radio\" id=\"cat-requirements\" name=\"category\" class=\"category-input\">\n        <input type=\"radio\" id=\"cat-testing\" name=\"category\" class=\"category-input\">\n        <input type=\"radio\" id=\"cat-integration\" name=\"category\" class=\"category-input\">\n        <input type=\"radio\" id=\"cat-compatibility\" name=\"category\" class=\"category-input\">\n        <input type=\"radio\" id=\"cat-implementation\" name=\"category\" class=\"category-input\">\n        <input type=\"radio\" id=\"cat-configuration\" name=\"category\" class=\"category-input\">\n        <input type=\"radio\" id=\"cat-security\" name=\"category\" class=\"category-input\">\n\n        <div class=\"category-filter\">\n            <label for=\"cat-all\" class=\"category-label\">All</label>\n            <label for=\"cat-requirements\" class=\"category-label\">Requirements</label>\n            <label for=\"cat-testing\" class=\"category-label\">Testing</label>\n            <label for=\"cat-integration\" class=\"category-label\">Integration</label>\n            <label for=\"cat-compatibility\" class=\"category-label\">Compatibility</label>\n            <label for=\"cat-implementation\" class=\"category-label\">Implementation</label>\n            <label for=\"cat-configuration\" class=\"category-label\">Configuration</label>\n            <label for=\"cat-security\" class=\"category-label\">Security</label>\n        </div>\n\n        <div class=\"faq-list\">\n            <!-- FAQ 1 -->\n            <div class=\"faq-item\" data-category=\"Requirements\">\n                <input type=\"checkbox\" id=\"faq1\" class=\"faq-checkbox\">\n                <label for=\"faq1\" class=\"faq-question\">\n                    What iOS versions and Swift versions are supported?\n                    <span class=\"faq-category-tag\">Requirements</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>The SDK requires:</p>\n                    <ul>\n                        <li><strong>iOS 16+</strong></li>\n                        <li><strong>Xcode 15+</strong></li>\n                        <li><strong>Swift 5</strong></li>\n                    </ul>\n                    <p>Apps written in Swift 4 or later and Objective-C are supported.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 2 -->\n            <div class=\"faq-item\" data-category=\"Testing\">\n                <input type=\"checkbox\" id=\"faq2\" class=\"faq-checkbox\">\n                <label for=\"faq2\" class=\"faq-question\">\n                    Payments fail on the iOS Simulator but work on a real device. Why?\n                    <span class=\"faq-category-tag\">Testing</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>On the iOS Simulator, Apple may block network requests due to stricter security and SSL validation rules.</p>\n                    <p>If the payment request fails during SSL handshake:</p>\n                    <ul>\n                        <li>Ensure the Pine Labs domain is allowlisted</li>\n                        <li>Verify App Transport Security (ATS) settings in Info.plist</li>\n                    </ul>\n                    <p><strong>Testing on a physical device is strongly recommended for final validation.</strong></p>\n                </div>\n            </div>\n\n            <!-- FAQ 3 -->\n            <div class=\"faq-item\" data-category=\"Integration\">\n                <input type=\"checkbox\" id=\"faq3\" class=\"faq-checkbox\">\n                <label for=\"faq3\" class=\"faq-question\">\n                    After adding the SDK, the import Pine Labs Online is not coming up automatically.\n                    <span class=\"faq-category-tag\">Integration</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>To resolve this issue:</p>\n                    <ul>\n                        <li>Make sure that you see the framework under your app target <strong>Frameworks, Libraries and Embedded Content</strong></li>\n                        <li>Make sure that it is in <strong>Embed and Sign</strong></li>\n                        <li>If issue still persists, clean the build and build again</li>\n                    </ul>\n                </div>\n            </div>\n\n            <!-- FAQ 4 -->\n            <div class=\"faq-item\" data-category=\"Integration\">\n                <input type=\"checkbox\" id=\"faq4\" class=\"faq-checkbox\">\n                <label for=\"faq4\" class=\"faq-question\">\n                    My project fails to build after adding the SDK. What could be wrong?\n                    <span class=\"faq-category-tag\">Integration</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>Common causes include:</p>\n                    <ul>\n                        <li>Unsupported Swift version (must be Swift 5+)</li>\n                        <li>Incompatible iOS deployment target</li>\n                        <li>Outdated dependency manager setup (SPM)</li>\n                    </ul>\n                    <p>Verify that your project meets all SDK prerequisites.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 5 -->\n            <div class=\"faq-item\" data-category=\"Compatibility\">\n                <input type=\"checkbox\" id=\"faq5\" class=\"faq-checkbox\">\n                <label for=\"faq5\" class=\"faq-question\">\n                    Does the SDK work with both UIKit and SwiftUI apps?\n                    <span class=\"faq-category-tag\">Compatibility</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>Yes. The SDK can be integrated into UIKit-based apps and SwiftUI apps, provided the app meets the required iOS and Swift versions.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 6 -->\n            <div class=\"faq-item\" data-category=\"Implementation\">\n                <input type=\"checkbox\" id=\"faq6\" class=\"faq-checkbox\">\n                <label for=\"faq6\" class=\"faq-question\">\n                    How do I handle payment success, failure, or cancellation?\n                    <span class=\"faq-category-tag\">Implementation</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>The SDK provides callbacks for:</p>\n                    <ul>\n                        <li><code>onSuccessResponse</code></li>\n                        <li><code>onFailureResponse</code></li>\n                        <li><code>onCancelTxn</code></li>\n                    </ul>\n                    <p>These callbacks must be implemented to correctly handle the transaction outcome and update your app UI.</p>\n                    <p>In all these cases we get Order ID, in some cases we also get status and error message. <strong>Using the Order ID it is recommended that you do an enquiry API call and verify the status of the order and proceed accordingly.</strong></p>\n                </div>\n            </div>\n\n            <!-- FAQ 7 -->\n            <div class=\"faq-item\" data-category=\"Testing\">\n                <input type=\"checkbox\" id=\"faq7\" class=\"faq-checkbox\">\n                <label for=\"faq7\" class=\"faq-question\">\n                    Can I test the SDK entirely on the simulator?\n                    <span class=\"faq-category-tag\">Testing</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>Basic testing for most of the pay modes is possible except the UPI Intent flow, but end-to-end payment testing should be done on a real device to avoid simulator-specific network and security issues.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 8 -->\n            <div class=\"faq-item\" data-category=\"Configuration\">\n                <input type=\"checkbox\" id=\"faq8\" class=\"faq-checkbox\">\n                <label for=\"faq8\" class=\"faq-question\">\n                    How do I switch from test to production?\n                    <span class=\"faq-category-tag\">Configuration</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>When you initialise the SDK, we have provided an environment variable in the <code>startPayment</code> function signature. Using that one can easily switch from testing environment (<code>.uat</code>) to live production environment (<code>.prod</code>).</p>\n                    <p><strong>Important:</strong> Make sure that the order is created in the correct environment. If order created in test environment is given to SDK when we have set the <code>(environment == .prod)</code> then Order Not Found error will be displayed.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 9 -->\n            <div class=\"faq-item\" data-category=\"Security\">\n                <input type=\"checkbox\" id=\"faq9\" class=\"faq-checkbox\">\n                <label for=\"faq9\" class=\"faq-question\">\n                    Can API keys be stored directly in the iOS app?\n                    <span class=\"faq-category-tag\">Security</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p><strong>No.</strong> API keys must be generated and passed securely from your backend. Hardcoding keys in the app is not recommended.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 10 -->\n            <div class=\"faq-item\" data-category=\"Compatibility\">\n                <input type=\"checkbox\" id=\"faq10\" class=\"faq-checkbox\">\n                <label for=\"faq10\" class=\"faq-question\">\n                    My app is written in <code>Swift 4</code>. Can I integrate the SDK?\n                    <span class=\"faq-category-tag\">Compatibility</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p><strong>Yes.</strong> Apps written in Swift 4 or later can integrate the SDK as long as they are built using a Swift 5–compatible Xcode version (Xcode 15+) and target iOS 16 or above.</p>\n                    <p>The SDK is distributed as a compiled XCFramework built with Swift 5, which is ABI-stable and backward compatible with Swift 4 source code.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 11 -->\n            <div class=\"faq-item\" data-category=\"Compatibility\">\n                <input type=\"checkbox\" id=\"faq11\" class=\"faq-checkbox\">\n                <label for=\"faq11\" class=\"faq-question\">\n                    My app is written in <code>Swift 3</code>. Can I integrate the SDK?\n                    <span class=\"faq-category-tag\">Compatibility</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p><strong>No.</strong> Apps written in Swift 3 or earlier are not supported.</p>\n                    <p>Reasons:</p>\n                    <ul>\n                        <li>Swift 3 does not support Swift 5 ABI stability</li>\n                        <li>Older Xcode versions cannot build iOS 16 apps</li>\n                        <li>Apple no longer supports these toolchains</li>\n                    </ul>\n                    <p><strong>FIX:</strong> Migration to Swift 5 and a modern Xcode version is required.</p>\n                </div>\n            </div>\n\n            <!-- FAQ 12 -->\n            <div class=\"faq-item\" data-category=\"Requirements\">\n                <input type=\"checkbox\" id=\"faq12\" class=\"faq-checkbox\">\n                <label for=\"faq12\" class=\"faq-question\">\n                    Why does the SDK require <code>iOS 16</code> or above?\n                    <span class=\"faq-category-tag\">Requirements</span>\n                </label>\n                <div class=\"faq-answer\">\n                    <p>Because the SDK depends on:</p>\n                    <ul>\n                        <li>Modern WebKit and networking APIs</li>\n                        <li>Updated security & TLS requirements</li>\n                        <li>Apple-mandated platform security standards</li>\n                    </ul>\n                    <p>Apps targeting older iOS versions are increasingly restricted by Apple and App Store policies.</p>\n                </div>\n            </div>\n        </div>\n    </div>\n</body>\n</html>\n"
}
[/block]
