Engineering

iOS app security

Otukan protects iOS apps within Apple's rules: Swift and Objective-C code, frameworks and extensions, App Store signing, and runtime signals for your server.

  • iOS
  • Every binary in the bundle

    Your main executable, embedded frameworks and app extensions are separate signed binaries. Otukan protects each one you choose, and your crash reports still symbolicate.

  • Built for Apple's delivery

    App Store builds are re-signed and encrypted by Apple. Otukan binds its integrity checks to what users actually install, not to the archive you upload.

  • Signals your server trusts

    Where iOS limits what an app can stop, Otukan detects the threat and sends the signal with each sensitive request, so your backend decides.

What Otukan adds to your iOS app

Static and runtime protection designed for iOS on its own terms, with a response you control for every sensitive flow.

  • Code obfuscation

    Hardens readable Swift and Objective-C symbols and strings in the release binary, so reverse engineering takes far more effort.

  • Anti-tampering

    Checks the code signature and bundle properties that survive Apple's processing, and responds to re-signed or modified copies.

  • Runtime self-protection

    Detects hooking, method swizzling, injected libraries and attached debuggers while the app runs.

  • Jailbreak detection

    Combines independent signals to flag devices whose system has been modified, and feeds them to your response policy.

  • App attestation

    Gives your server evidence that a request comes from a genuine instance of your app, using App Attest where the device supports it.

  • Screen capture protection

    Hides sensitive views while the screen is recorded or mirrored, and reports screenshots to your backend.

How it works

  1. Share your app profile

    Tell us your targets, frameworks, extensions and distribution paths. No binaries or certificates are needed.

  2. Set your policy

    Choose the controls and the response for each sensitive flow: observe, warn, restrict or terminate.

  3. Protect every archive

    Protection fits your existing Xcode build and release pipeline and covers every archive you ship.

  4. Sign and distribute

    You sign with your own identities; Apple processes the build and the checks still match.

  5. Act on signals

    Jailbreak, hooking and tampering signals reach your backend with the requests that matter.

Free for app publishers

Check your app's exposure

A passive review of your published app by an Otukan engineer. No files, no access to your systems. Findings go by email to the verified publisher.

You finish the request on the next page.

Otukan fits within the three boundaries Apple sets for every iOS app: how it is built into signed binaries, how Apple signs and delivers it, and what the sandbox lets an app see while it runs. It protects your Swift and Objective-C code, embedded frameworks and app extensions, binds its integrity checks to properties that survive Apple’s re-signing, and leaves your certificates with your team. At runtime it detects jailbreaks, hooking, swizzling and tampering, and sends each signal to your backend with the requests that matter. Every control is built and validated for iOS on its own terms. Android has its own page, Android app security.

Inputs Otukan protects: code, frameworks and extensions

An iOS app is a bundle of several signed binaries, not one. Otukan protects each binary you choose and keeps your debugging workflow intact.

InputWhat it isHow Otukan handles it
Swift codeCompiled to machine code, but type metadata and symbol names can remain readableHardens readable symbols and strings in the release binary
Objective-C codeThe runtime keeps class names, selectors and method lists, which also makes method swizzling easyProtects sensitive classes and detects swizzling of their methods at runtime
Embedded frameworksDynamic frameworks and XCFrameworks are separate binaries; static libraries and Swift packages are linked into the main executableProtects your own frameworks and lets you decide how vendor frameworks are treated
App extensionsWidgets, notification service, share and keyboard extensions are separate executables with their own entitlements and memory limitsCovers the extensions you choose, within each extension’s memory limit
Cross-platform frameworksFlutter ships compiled Dart in App.framework; React Native ships a JavaScript or Hermes bytecode bundleProtects the framework’s own code, not only the native shell
Debug symbolsCrash reports are symbolicated with dSYM files whose UUIDs must match the shipped binaryKeeps your crash reports readable with the matching dSYMs
Deployment targetThe minimum iOS version decides which APIs, such as App Attest, are availableValidates each control per iOS version on physical devices

Framework-specific detail is on Flutter app security and React Native app security, with hybrid apps on Ionic and Cordova app security.

Physical devices and the simulator

The simulator runs a separate build compiled for your Mac, not the device binary you ship. App Attest is not available there, and the simulator does not enforce device code signing the way an iPhone does. Otukan validates protection behaviour on physical iPhones and iPads, where your users run your app.

Distribution

Signing authority

Every iOS app is signed with a certificate issued by Apple, and each app extension and embedded framework carries its own signature. Because Apple processes App Store builds, the binary on a user’s device is not byte-identical to the archive you uploaded. Otukan’s integrity checks rely on properties that survive that processing, so they hold across the distribution paths you use:

PathWho signs what users installHow Otukan handles it
App StoreApple re-signs the app and encrypts it with FairPlayChecks bound to properties such as team ID and bundle ID
TestFlightApple, as for the App StoreVerified separately, because receipts and some environment values differ from App Store installs
In-house (Apple Developer Enterprise Program)Your enterprise distribution certificate, for internal use onlyChecks bound to your enterprise identity and validated through certificate renewal
Custom apps through Apple Business ManagerApple, through the App StoreHandled as the App Store path
Alternative distribution in the EUApple notarises and signs; a marketplace or your website deliversEach channel verified separately

Signing certificates and provisioning profiles stay with your team; Otukan does not need them.

Protected-build testing

Otukan works with your team on a test plan for the build Apple delivers, not only the archive:

  • a TestFlight install and an update from the previous App Store version
  • sign-in, Keychain access and your most sensitive flows, such as payments or account changes
  • each app extension, including under its memory limit
  • a crash in the protected build, to confirm it symbolicates with the matching dSYM
  • the same journeys on several iPhone and iPad models and iOS versions

Detect and prevent: how Otukan works within iOS

The iOS sandbox protects apps from each other, and it also limits what an app can stop inside its own process. Some actions iOS prevents itself. For the rest, Otukan detects the threat and hands the decision to your policy and your server.

ControlDetect or preventWhat Otukan does
Jailbreak detectionDetectCombines independent signals of a modified system and reports them to your policy
Debugger attachmentiOS prevents it on stock devices for release builds without the get-task-allow entitlement; detect otherwiseDetects attached debuggers and responds per flow
Hooking and swizzlingDetectDetects changed method implementations and injected libraries at runtime
Re-signing and tamperingDetectCompares code signature and bundle properties with expected values
App attestationYour server decidesGives your server evidence of a genuine app instance, using App Attest where available
Screen captureDetect; sensitive views can be hidden during recordingHides sensitive views while recording or mirroring, and reports screenshots
Data at restiOS prevents access while locked, when the right Data Protection class is usedKeychain and Data Protection remain the foundation Otukan builds on

Further iOS controls have their own pages: network security, memory protection, secrets protection, code obfuscation and app shielding. Implementation guides are collected under iOS app security guides.

Detection pays off in the response. Otukan sends its signals with login and payment requests, so your backend can refuse a risky session rather than trusting the device alone. Code obfuscation and runtime protection (RASP) make removing those checks slower and costlier, and attempts to remove them leave a signal for your security team.

For how iOS fits the wider protection model, return to mobile app security. If your iOS app is already on the App Store, a free App Exposure Check reviews the public store release.

Common questions

  • Does bitcode still matter for iOS app protection?

    No. Apple deprecated bitcode with Xcode 14, and the App Store no longer accepts bitcode submissions. The machine code in your archive is what Apple distributes, after its own signing and encryption. Otukan protects that machine code and binds its checks to properties that survive Apple's processing, so the protected build behaves the same way once it reaches users.

  • Can protection be tested in the iOS simulator?

    The simulator runs a separate build compiled for your Mac, not the device binary you ship, and some platform services, including App Attest, are not available there. Use it for functional checks. Otukan validates protection, attestation and jailbreak signals on physical iPhones and iPads, and your protected-build test plan should do the same.

  • Do you need our distribution certificate?

    No. Signing identities, certificates and provisioning profiles stay with your team. Otukan plans the integration from a description of your targets, extensions and distribution paths, and you sign the protected build in your own pipeline, exactly as you sign releases today.

Protect your next iOS release

Tell us your minimum iOS version, languages and frameworks, any app extensions, and how you distribute releases. We never ask for binaries, signing certificates or production credentials.

Or request a technical demo