iOS native app integration
Integrating Appfigurate Library into iOS native apps
iOS native apps can be developed in both Swift and Objective-C.
For Flutter apps, jump to Flutter integration. For React Native apps, jump to React Native integration.
Prerequisites
You must have the following:
Xcode 15.2+
iOS SDKs and associated Simulators.
AppfigurateSE macOS app.
Appfigurate Simulator app installed into one or more iOS Simulators (use the AppfigurateSE macOS app for easy 1 click installation).
Your iOS app must target iOS 13.0+ in order to link Appfigurate Library.
Add AppfigurateLibrary.xcframework to the iOS app target
Choose one of the following integration methods (all of which are compatible with both Swift and Objective-C):
Add a package dependency File ‣ Add Package Dependencies
with the URL https://github.com/electricbolt/appfiguratesdk
Add new app into Appfigurate Simulator
Run Appfigurate in the iOS Simulator.
Tap ≡
Add app
.
Select app type iOS
.
Enter a URL scheme that will be used by Appfigurate to launch your app in order to read or apply configuration. The URL scheme must be 4-64 ASCII characters in length and must be unique to your app. e.g. YOUR-APP-URLSCHEME
Tap Add app
.
Output source code snippets
Tap ≡
YOUR-APP-URLSCHEME
.
The Edit app screen will be displayed.
Under the SWIFT/IOS LIBRARY INTEGRATION
section:
Tap Output implementation
then tap Clipboard
.
Create APLConfiguration subclass
In Xcode, tap File
‣ New
‣ New "Configuration.swift"
file from Clipboard.
Swift Configuration example
import Foundation
import AppfigurateLibrary
@objcMembers class Configuration: APLConfiguration {
@BoolProperty(description: "Log debug output to console", restart: false)
var debugLogging: Bool
@StringPropertyListEdit(regex: #"https://[\w\.-]+\.yourappserver.com/.*"#, description: "Application server url", restart: false, values: ["Dev":"https://dev.yourappserver.com/api", "Prod":"https://www.yourappserver.com/api"])
var serverURL: String
override func allowInvalidSignatures() -> Bool {
return !ENCRYPTED()
}
override func publicKey() -> String {
// 41 36 87 71 0D 05
return "-----BEGIN PUBLIC KEY-----\n" +
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4TZnKfGeXttN7Rr3eiAZ\n" +
...
"ywIDAQAB\n" +
"-----END PUBLIC KEY-----\n";
}
override func reset() {
debugLogging = true
serverURL = "https://www.yourappserver.com/api"
}
}
@_cdecl("APLConfigurationClass")
func APLConfigurationClass() -> AnyClass {
return Configuration.self
}
The APLConfigurationClass
function with C calling convention must be implemented in your app otherwise a linker error will be issued. The recommended place to implement is at the bottom of your APLConfiguration
subclass.
Edit Info.plist
In your apps Info.plist
file (right click, Open As
‣ Source Code
) include the following. Replace the text YOUR-APP-URLSCHEME
with your own app's URL Scheme - the same value you added in the section Add new app into Appfigurate Simulator above.
Info.plist
example
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>appfigurate.YOUR-APP-URLSCHEME</string>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR-APP-URLSCHEME</string>
</array>
</dict>
</array>
If you already have an existing CFBundleURLTypes
array in your Info.plist
file, then insert just the <dict> ... </dict>
portion.
UIApplicationDelegate
In your apps AppDelegate.swift/.m
file, include calls to APLApplicationOpenURL
and APLDidFinishLaunchingWithOptions
. Create any missing delegate methods as appropriate.
Swift
UIApplicationDelegate
example
import AppfigurateLibrary
...
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// When your app opens a URL while running or suspended in memory.
return APLApplicationOpenURL(url)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// After launch.
APLApplicationDidFinishLaunchingWithOptions(launchOptions)
return true
}
For apps using UIWindowSceneDelegate
If your app has a UIWindowSceneDelegate
, in your apps SceneDelegate.swift/m
file, include calls to APLApplicationOpenURL
. Create any missing delegate methods as appropriate.
Swift
UIWindowSceneDelegate
example
import AppfigurateLibrary
...
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
// When your app opens a URL while running or suspended in memory.
if let url = URLContexts.first?.url {
APLApplicationOpenURL(url)
}
}
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// After launch.
if let url = connectionOptions.urlContexts.first?.url {
APLApplicationOpenURL(url)
}
}
Test your iOS app
To test that you've successfully updated your app to use Appfigurate:
Compile and run your app to the Simulator instance.
Launch the Appfigurate Simulator app.
Tap your applications row. The app will be run and made visible, it's configuration read, and then swap back to Appfigurate.
Appfigurate's Configure app screen will now be displayed. You can now change the
debugLogging
andserverURL
properties. TapApply⌄
to apply the configuration to your app.
Now jump to Supported property types.
Last updated