Application security feature

iOS app shielding

Otukan shields iOS apps by applying code protection and runtime checks to the same signed release, across the executable, frameworks and app extensions.

  • iOS
Decrypted and patched IPA is met at the binary and runtime boundary before it reaches the appDecrypted and patched IPABinary and runtimeYour app
  • The whole bundle

    Otukan protects the main executable, your own frameworks and the app extensions you choose, each as the separate Mach-O binary it is.

  • Runtime policy per flow

    Jailbreak, debugger and injection signals feed a response you set per flow, with your backend making the decision that matters.

  • Proven on a signed build

    Every control is accepted on a distribution-signed build on physical devices, the same build your users install.

iOS threats Otukan shielding handles

Pick a threat to see how Otukan detects or blocks it, how the app responds and what your backend receives.

Decrypted and disassembled binary

  1. Detect

    Otukan obfuscates Swift and Objective-C names, type metadata and strings, so a decrypted executable reveals far less.

  2. Respond

    Analysts face renamed code and encoded strings instead of a readable map of your app.

  3. Report

    Your team keeps a private rename map per build for crash symbolication.

Patched and re-signed copies

  1. Detect

    Otukan compares the executable, resources and team identifier with the build you distributed.

  2. Respond

    A modified copy is stopped before sensitive code runs, or restricted as your policy sets.

  3. Report

    An integrity signal tells your backend the request comes from an altered app.

Jailbroken devices

  1. Detect

    Independent checks read filesystem traces, sandbox integrity and loaded code, in rootful and rootless layouts.

  2. Respond

    High-risk flows are stepped up or restricted; browsing continues.

  3. Report

    A jailbreak signal travels with login and transaction requests.

Attached debuggers

  1. Detect

    Otukan detects a debugger attached to the release build outside development.

  2. Respond

    Sensitive flows are restricted or the session ends, per your policy.

  3. Report

    A debugging signal reaches your backend, which can refuse the request.

Injected libraries and tweaks

  1. Detect

    Otukan finds dynamic libraries loaded into the process that are not part of your bundle, at launch or later.

  2. Respond

    The current flow applies the response you set for injection.

  3. Report

    An injection signal travels with the request for your server to act on.

Scripted and modified clients

  1. Detect

    Otukan's signals pair with App Attest assertions your server verifies on supported devices.

  2. Respond

    Requests without valid app identity are stepped up or refused on your server.

  3. Report

    Your backend sees both the runtime signal and the attestation result.

What Otukan iOS shielding brings together

Static protection is applied to the build; runtime checks run on the device. Both come from one protection step.

  • Swift and Objective-C obfuscation

    Renames classes, selectors and Swift type metadata and encodes strings, keeping the names iOS resolves at run time.

  • Bundle and signature integrity

    Confirms the executable, resources and team identifier match the build you distributed through the App Store or TestFlight.

  • Jailbreak detection

    Independent checks for filesystem traces, sandbox integrity and injected code, covering rootful and rootless jailbreaks.

  • Debugger detection

    Detects a debugger attached to the release build outside development, so your logic cannot be stepped through quietly.

  • Injection detection

    Finds dynamic libraries and tweaks loaded into the process that are not part of your bundle, at launch or later.

  • App Attest pairing

    Otukan's runtime signals sit alongside App Attest, which lets your server confirm requests come from your genuine app.

You choose the response

Set a response for each user flow. Start by observing, then tighten flow by flow as the signals prove themselves.

Observe

Signal sent to your backend

Rolling out a new policy and measuring real-world signals.

Warn

This device looks modified. Continue with care.

Conditions some genuine users create, such as developer settings.

Restrict

Payments are unavailable on this device.

Payments, stored data and account changes.

Terminate

Session closed for your security.

Clear tampering on a high-risk flow.

How it works

  1. Agree the scope

    Name the executable, frameworks and extensions to protect, and the response for each user flow.

  2. Protect the build

    Otukan fits your existing build and release pipeline. Your distribution certificate stays with your team.

  3. Sign and accept

    Sign as usual and accept each control on physical devices with the distribution-signed build.

  4. Ship and observe

    Submit through App Store Connect as today; runtime signals reach your backend from the first session.

  5. Tighten flow by flow

    Use what the signals show about real users to move each flow to the response it needs.

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 combines iOS code protection and runtime checks by applying both to the same distribution build in one protection step. At build time, it obfuscates Swift and Objective-C names and strings and embeds integrity data for the executable, resources and signing identity. On the device, runtime checks watch for jailbreaks, debuggers and injected libraries, and feed a response policy your backend enforces. The scope names the main executable, your own frameworks and each app extension you choose. The result is an iOS app that is slower and costlier to analyse and patch, and a backend that knows when someone tries.

For the cross-platform view, see mobile app shielding.

Binary and bundle coverage

An iOS app is a bundle of several signed binaries, not one file. Otukan protects each part according to what it holds.

ComponentWhat it containsWhat an analyst reads without protectionWhat Otukan does
Main executableYour Swift and Objective-C code as a Mach-O binaryClass and method names, Swift type metadata, string literalsObfuscates names and strings; embeds integrity data
Your frameworksDynamic frameworks you buildThe same metadata, for every frameworkProtects them like the main executable, keeping their public interface
Vendor XCFrameworksThird-party binaries signed by their vendorVendor codeLeaves them as shipped, so vendor signatures stay valid
App extensionsWidgets, notification, share and other extensionsLogic that handles shared dataProtects the extensions you choose, with light runtime checks
ResourcesInfo.plist, asset catalogues, bundled JSON and modelsConfiguration and endpoints in plain filesCovers them with integrity data
Framework bundlesFlutter’s compiled Dart code or a React Native JavaScript or Hermes bundleMost of the app’s logic, outside the Swift layerProtects the framework layer, not only the native shell

App Store encryption does not change this picture. iOS decrypts the executable to run it, and on a jailbroken device the decrypted binary can be written out and read. Obfuscation detail is covered on iOS code obfuscation.

Runtime protection policy

Runtime checks produce signals. Your policy decides what each signal means in each part of the app.

Signals

  • Jailbreak. Independent checks for filesystem traces, sandbox integrity and code the app did not ship. Rootless jailbreaks keep the system volume intact and place files elsewhere, and Otukan covers both layouts.
  • Debugger. A debugger attached to the release build outside development.
  • Injected libraries. Dynamic libraries loaded into the app that are not part of your bundle, as used by instrumentation frameworks and tweak loaders.
  • Integrity. A team identifier, bundle identifier or bundle content that differs from your distributed build. A copy re-signed by another team also loses access to Keychain items stored under your access groups.

Responses

Set a response per user flow: observe, warn, restrict or end the session. Otukan sends signals with login and transaction requests so your server decides, and your server can pair them with App Attest on devices that support it. Policy design is covered on threat response, and runtime mechanics are covered on mobile RASP.

Signing, performance and release acceptance

Signing and distribution

You sign with your distribution certificate, and Apple re-signs App Store builds for delivery. TestFlight, ad hoc, custom app and enterprise builds each carry different signing details, and Otukan’s integrity expectations list the legitimate identity for each channel you use. Otukan fits your existing build and release pipeline, and your distribution certificate and its private key stay with your team.

Performance

iOS terminates apps that take too long to launch, so Otukan keeps launch-time checks light and applies heavier transforms only to the code you choose. We measure launch time and app size with your team on the oldest iPhone and iOS version you support, comparing protected and unprotected builds.

Release acceptance

Otukan accepts each release with your engineers:

  1. Build and sign the protected app exactly as for release.
  2. On physical devices, reproduce each signal in an authorised lab and confirm the expected response.
  3. Repeat the same journeys on a supported, non-jailbroken device and confirm nothing fires.
  4. Run install, update from the previous release, sign-in and your most sensitive flow.
  5. Confirm a test crash symbolicates with the build’s dSYM files.
  6. Record iOS versions, device models, results and the reviewer.

The simulator runs a different build for a different environment, so acceptance always happens on devices.

For the platform view, return to iOS app security. If your iOS app is already on the App Store, you can request a free App Exposure Check of the public release.

Common questions

  • Doesn't App Store encryption already protect the binary?

    App Store binaries are encrypted, but iOS decrypts them to run them. On a jailbroken device, public tools read the decrypted executable from memory, after which class names, Swift metadata and strings are readable. Encryption controls distribution. Otukan protects what an analyst sees after decryption, and its runtime checks react when the app is studied on a jailbroken device.

  • Do app extensions need protection too?

    When they handle sensitive data, yes. Extensions are separate executables with their own signatures and entitlements, and they share data with the app through App Groups and Keychain access groups. Otukan lets you choose which extensions to protect and keeps runtime checks light there, because extensions run under tighter memory limits.

  • Will jailbreak checks misfire on legitimate users?

    Otukan's jailbreak checks are independent and report which one fired, and the response is set per flow. You can start in observe mode, measure how often each check fires across your real users, then tighten flow by flow. Keeping the decision on your backend means a policy change does not need a new release.

  • Does shielding change how we submit to the App Store?

    No. The protected build goes through normal archive, signing and App Store Connect upload. Otukan fits your existing build and release pipeline, your distribution certificate stays with your team, and the dSYM files from the build still symbolicate crash reports. The only change is that your release carries protection.

On the mobile engineering team?

How protection fits your build, signing and release, platform by platform.

Related

Ship a shielded iOS release

Tell us your minimum iOS version, whether the app is Swift, Objective-C or a cross-platform framework, which extensions you ship and how you distribute builds. We do not ask for source code, IPA files, signing certificates or production credentials.

Or request a technical demo