Mobile SDKs

OTA Translation Updates for Mobile

Push translation changes to your mobile app without app store releases. Our SDKs handle downloading, caching, and applying updates automatically.

App Store Compliant: OTA translation updates are explicitly permitted by Apple and Google guidelines. Our SDKs only update string resources, not executable code.

SDK Features

Delta Updates

Only download changed strings. Reduces bandwidth by up to 90% for incremental updates.

Offline Support

Graceful fallback to bundled translations when offline. No missing strings, ever.

Signed Bundles

Cryptographic signatures prevent tampering. Verify bundle integrity on device.

Background Sync

Updates download in the background. Users see new translations on next app launch.

Platform SDKs

React Native

For React Native and Expo apps

Install:

npm install @intlpull/react-native

Usage:

// App.tsx
import { IntlPullProvider } from '@intlpull/react-native';

export default function App() {
  return (
    <IntlPullProvider
      projectId="proj_abc123"
      defaultLanguage="en"
      fallbackToBundle={true}
    >
      <YourApp />
    </IntlPullProvider>
  );
}

// Use in components
import { useTranslation } from '@intlpull/react-native';

function Welcome() {
  const { t, language, setLanguage } = useTranslation();

  return (
    <View>
      <Text>{t('common.welcome')}</Text>
      <Button onPress={() => setLanguage('es')} title="Español" />
    </View>
  );
}

iOS (Swift)

For native iOS apps

Install:

pod 'IntlPull', '~> 2.0'

Usage:

// AppDelegate.swift
import IntlPull

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        IntlPull.configure(projectId: "proj_abc123")
        IntlPull.shared.sync()
        return true
    }
}

// Use in views
import IntlPull

struct ContentView: View {
    var body: some View {
        Text(IntlPull.t("common.welcome"))
    }
}

// Or with SwiftUI environment
struct ContentView: View {
    @Environment(\.intlpull) var t

    var body: some View {
        Text(t("common.welcome"))
    }
}

Android (Kotlin)

For native Android apps

Install:

implementation 'com.intlpull:android:2.0.0'

Usage:

// Application.kt
import com.intlpull.IntlPull

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        IntlPull.configure(this, "proj_abc123")
        IntlPull.sync()
    }
}

// Use in activities/fragments
import com.intlpull.IntlPull.t

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding.welcomeText.text = t("common.welcome")
    }
}

// With Jetpack Compose
@Composable
fun Welcome() {
    val t = rememberIntlPull()
    Text(text = t("common.welcome"))
}

Configuration Options

OptionDefaultDescription
projectId-Your IntlPull project ID (required)
defaultLanguage"en"Fallback language when translation missing
fallbackToBundletrueUse bundled translations if OTA fails
syncOnLaunchtrueCheck for updates on app launch
syncInterval3600Seconds between sync checks (0 = manual only)
enableLoggingfalseLog sync activity for debugging

Plan Availability

OTA updates are available on Professional and Enterprise plans. Lower-tier plans can still use the SDKs for bundled translations without OTA.

Next Steps