Appfigurate™️
HomeDocumentation
  • Introducing Appfigurate™️ 3
  • Getting Started
    • Getting Started
    • Examples
    • Upgrade guide
      • v1.4.0 to v2.2.0
      • v2.1.1 to v2.2.0
      • v2.2.1 to v3.0.0
      • v3.2.1 to v4.0.0
    • iOS native app integration
      • iOS app extension integration
    • watchOS app integration
      • watchOS app extension integration
    • Android native app integration
    • Mobile Flutter integration
      • Flutter iOS
      • Flutter Android
    • React Native integration
      • iOS native module integration
      • Android native module integration
      • JavaScript integration
    • Third party remote configuration providers
      • Firebase Remote Config
      • Launch Darkly
      • Other third party remote configuration providers
  • Configuration subclasses
    • Supported property types
      • Boolean
      • Integer
      • Float
      • Double
      • Plain String
      • Encrypted String
    • Custom executable actions
    • Slider icon types
  • Additional reading
    • Info.plist options
    • AndroidManifest.xml options
    • Displaying overridden configuration
    • Security
      • Best practice
      • Encryption
      • Export compliance
      • App Store compliance
      • PrivacyInfo.xcprivacy
      • Rotating your private key
  • Automation testing
    • iOS native app automation testing
    • Android native automation testing
  • API
    • iOS and watchOS API
    • Android API
    • Mobile Flutter API
    • React Native API
  • Appfigurate User Guide
    • Introduction
    • Main menu
    • Select app
    • Add app
    • Import app
    • Install example apps
    • Settings
      • Passcode Lock
      • Restore
      • Backup
      • Delete all apps and Settings
      • Analytics
    • Edit app
    • Configure app
    • Permissions
  • Appfigurate SE user guide
    • Introduction
    • Manual encryption
      • ENCRYPTED_STRING macro/function
      • ENCRYPTED_STRING_IOS_WATCHOS macro/function
    • Setup iOS Simulator app
    • Setup Android Emulator app
    • Xcode source editor extension
      • Troubleshooting
    • Real device cloud testing services
      • BrowserStack
  • LEGAL
    • License Agreement
    • Privacy Policy
    • Release History
    • Third party notices
Powered by GitBook
On this page
  • Protecting your app metadata records
  • iOS Simulator and Android Emulator
  • Physical devices
  • Real device cloud testing services
  • Using wrong app metadata records for development
  • Sharing app metadata records between team members
  • Release builds
  • Rotate your private key
  1. Additional reading
  2. Security

Best practice

PreviousSecurityNextEncryption

Last updated 5 months ago

Protecting your app metadata records

Appfigurate generates a unique 2048-bit RSA private key as part of an app's metadata record that is used for signing configuration payloads. To protect app metadata records you should follow these best practices:

iOS Simulator and Android Emulator

We rely upon you and your Mac's security. You Mac should be up-to-date with all security patches applied, firewall enabled, FileVault on. You should use a strong password on boot and screen unlock.

Physical devices

Ensure the device has a strong passcode (six-digit) or custom alphanumeric code. Enable Erase Data after ten failed passcode attempts. .

You should and to unlock Appfigurate each time it is run, or to restrict your app's metadata from being exported. The database will be deleted after 5 incorrect PIN attempts.

Real device cloud testing services

For supported real device cloud testing services, your pre-packaged Appfigurate instance is uploaded to the vendors servers and you have no control over storage of your apps. We recommend in this scenario so your real app metadata record is never revealed.

Using wrong app metadata records for development

In a large development team it may be beneficial to restrict the distribution of real app metadata records to selected team members. Other team members can continue to test debug builds using the following instructions:

In Appfigurate using the real URL Scheme. The newly created app metadata record will have a completely different (wrong) private key from the real app metadata record.

Ensure your app's method returns YES for debug builds and NO for release builds. Do not replace the real public key in the method with the newly generated (wrong) public key.

App is debug build (allowInvalidSignatures returns YES)
App is release build (allowInvalidSignatures returns NO)

Real app metadata record (Selected team members only)

✓ Configuration applied

✓ Configuration applied

Wrong app metadata record (Other team members)

✓ Configuration applied

✕ Configuration not applied

Sharing app metadata records between team members

Release builds

When including Appfigurate library into release builds (App Store/TestFlight Beta/Enterprise/Google Play/Alpha track/Beta track), you should ensure that:

Rotate your private key

If you need to share an app metadata record (with the real private key) across devices in your team, you should limit the ability to re-export the app's metadata record on the new device. You can do this when by leaving the Exportable switch off. When the app metadata record is imported into the new device, it will not be exportable from that device, and it will expire after 180 days.

Your subclass doesn't contain any non-public information that could be used for malicious purposes. e.g. internal server names. You should consider using .

If you have overridden the default behaviour of , that you've checked it returns the correct value for debug and release builds. To test this, use Appfigurate to read the current configuration of your app. If a release build reports Debug build - App allows invalid signatures then your implementation of is incorrect.

You can test applying configuration using a wrong signature to a release build by long-pressing the Apply⌄ button, then tapping the Apply invalid to this device action. Your app will be launched with a configuration payload signed by an invalid key. If the configuration is successfully applied, then your implementation of is incorrect.

You should consider occasionally.

APLConfiguration
encrypted strings
APLConfiguration.allowInvalidSignatures
APLConfiguration.allowInvalidSignatures
APLConfiguration.allowInvalidSignatures
rotating your private key
https://support.apple.com/en-us/HT204060
add a new app
APLConfiguration.allowInvalidSignatures
APLConfiguration.publicKey
using wrong app metadata records for development
exporting from your device
enable PIN
TouchID/FaceID/Biometrics