Use conditional compilation
Use conditional compilation to leverage platform specific API
Introduction
You can leverage all of the iOS functionality and soon all of the Android SDK in your cross platform application. Depending on your mobile os, you use conditional compilation statements to execute code for the specific platform. In below examples, we execute iOS specific functionality. We will extend this chapter with examples of invoking the Android API shortly.
We use Apple Swift compiler conditional compilation statements. A good documentation can be found here Apple Swift Conditional Compilation Blocks
Checking for the platform
We introduced Android as an additional platform. Here a code snippet to execute code on iOS or Android
#if os(iOS)
canOpenUrl = UIApplication.shared.canOpenURL(url)
#endif
#if os(Android)
// Execute some Android code
#endif
#if swift(>=3.0)
// Execute some Swift 3.0 code
#endif
canOpenURL example
In this example, we add conditional code. If we are on iOS, we use canOpenUrl function to check the validity of the URL. The app is simple. Whenever we press the check button, it gets the text value and checks its URL using the platform specific canOpenUrl. Depending on the result, we show a red or green indicator.
We use the foundations URL class. SCADE provides both Swift 3 and the foundation cross platform for Android and Apple. This includes the URL class.
The code for the app looks like this and is hopefully self explanatory.
import ScadeKit
#if os(iOS)
import UIKit
#endif
class MainPageAdapter: SCDLatticePageAdapter {
dynamic var validUrl : Bool = false
dynamic var invalidUrl : Bool = true
// page adapter initialization
override func load(_ path: String) {
super.load(path)
let button = self.page!.getWidgetByName("btnCheck") as! SCDWidgetsClickable
button.onClick.append(SCDWidgetsEventHandler{ _ in self.check() } )
}
func check() {
if let tbUrl = self.page!.getWidgetByName("tbUrl") as? SCDWidgetsTextbox {
// Lets use the Foundation URL class
if let url = URL(string: tbUrl.text) {
let result = checkUrl(url: url)
print("Result is \(result)")
self.validUrl = result
self.invalidUrl = !result
}
}
}
func checkUrl(url:URL) -> Bool {
var canOpenUrl = false
// Lets make a conditional check and use canOpenUrl on iOS
#if os(iOS)
canOpenUrl = UIApplication.shared.canOpenURL(url)
#endif
// used canOpenUrl to check URL syntax on iOS
return canOpenUrl
}
}
Updated over 7 years ago