# Using the TiApp Utility Class in Hyperloop iOS
💡 Hint
This document describes technologies available in Hyperloop 3.1.0+ and Titanium 7.3.0+.
When developing iOS modules with Hyperloop, there are situations where you want to present a new view controller from your current context or pass your current context to a new view controller. Natively, you would usually reference "self" as its represents your current UIViewController subclass. In Titanium, your "self" is usually a Ti.UI.Window instance, which is fine for Titanium development, but cannot be used in native development.
That's why Hyperloop includes a number of utility methods that solve these kind of problems. They are exposed in the "TiApp" class that can be required as the following:
indes.js
// ES5
var TiApp = require('Titanium/TiApp');
// ES6+
import TiApp from 'Titanium/TiApp';
And that's basically it. As the TiApp class is a singleton in Titanium, the instance methods are done on the TiApp.app()
singleton and the class methods on TiApp
directly. See the following table for a reference of the available utilities:
# Class Methods
Call these methods on the TiApp
property directly.
Name | Parameters | Return | Description |
---|---|---|---|
app() | void | TiApp | The singleton object to call all other API's on. |
getController() | void | UIViewController | Returns the application's root view controller. |
getTiAppProperties() | void | NSDictionary | Return a read-only dictionary from tiapp.xml properties. |
# Instance Methods
Call these methods on the TiApp.app()
singleton.
Name | Parameters | Return | Description |
---|---|---|---|
showModalController(controller, animated) | UIViewController, BOOL | void | Presents a view controller on the top presented view controller (e.g. "presentViewController:animated 😊. |
hideModalController(controller, animated) | UIViewController, BOOL | void | Hides a currently presented view controller (e.g. " dismissViewControllerAnimated:completion 😊. |
showModalError(error) | NSString | void | Shows the "red screen of death" indicating an unhandled error. |
startNetwork() | void | void | Tells application to show network activity indicator. |
stopNetwork() | void | void | Tells application to hide network activity indicator. |
registerApplicationDelegate(delegate) | id<UIApplicationDelegate> | void | Registers a new UIApplicationDelegate to the host application. |
unregisterApplicationDelegate(delegate) | id<UIApplicationDelegate> | void | Unregisters an existing UIApplicationDelegate from the host application. |
windowIsKeyWindow() | void | BOOL | Indicates weather the current window is the key-window of the host application. |
getRemoteDeviceUUID() | void | NSString | Returns the remote UUID for the current running device. |
getSessionId() | void | NSString | Returns the unique identifier for the current application launch. |
getLaunchOptions() | void | NSDictionary | Returns the application's launch options. |
# Instance Properties
Call these properties on the TiApp.app()
singleton.
Name | Type | Description |
---|---|---|
userAgent | NSString | The user agent string to use for system network requests. |
window | UIWindow | The application's primary window. |
remoteNotification | NSDictionary | The details for the last remote notification. |
localNotification | NSDictionary | The details for the last local notification. |
userAgent | NSString | The user agent string to use for network requests. |
# Examples
# Present a view controller
This example shows how to open a new view controller in your current application context.
var myNewViewController = new UIViewController(); // Create a new view controller or pass it from existing libraries / SDK's
var myNewView = UIView.alloc().initWithFrame(CGRectMake(0,0, 200, 200)); // Create a new UIView with a 200x200 frame
myNewView.backgroundColor = UIColor.greenColor; // Set a green background color
myNewViewController.view = myNewView; // Assign the UIView instance to your UIViewController
TiApp.app().showModalController(myNewViewController, true); // Present the view controller
# Pass the current view controller
This example shows how to pass your top presented controller to a native method (e.g. in the Facebook SDK).
var FBSDKShareDialog = require('FBSDKShareKit/FBSDKShareDialog');
var FBSDKShareDialogModeAutomatic = require('FBSDKShareKit').FBSDKShareDialogModeAutomatic;
var FBSDKShareLinkContent = require('FBSDKShareKit/FBSDKShareLinkContent');
var NSURL = require('Foundation/NSURL');
var TiApp = require('Titanium/TiApp');
var dialog = new FBSDKShareDialog(); // Create a new share dialog. Equals "FBSDKShareDialog.alloc().init()".
var content = new FBSDKShareLinkContent(); // Create new share content (link-based). Equals "FBSDKShareLinkContent.alloc().init()".
content.contentURL = NSURL.URLWithString('http://appcelerator.com'); // Construct a native URL
dialog.setMode(FBSDKShareDialogModeAutomatic); // Use enumerations to define how the dialog should be shown
dialog.setFromViewController(TiApp.controller); // <- This is where you pass your current context
dialog.setShareContent(content); // Assign the share content
dialog.show(); // Present it!
# Get the device's push notifications UUID
This examples shows how to receive the device's UUID used for remote notifications.
var remoteUUID = TiApp.app().remoteDeviceUUID;
Ti.API.info('UUID: ' + remoteUUID);
# Subscribe to the UIApplicationDelegate
This example shows how to subscribe to the UIApplicationDelegate
in order to use the application:didFinishLaunchingWithOptions:
delegate method. For more infos, see iOS Modules - Use Native UI Application Delegates in Hyperloop and Native Modules.
💡 Hint
Note: Many native SDK's recommend to initialize them in this delegate. In the Titanium world, you can also do this in the open event of your initial window, which effectively does the same and is more cross-platform fashioned way of implementing this.
var TiApp = require('Titanium/TiApp');
var UIApplicationDelegate = require('UIKit').UIApplicationDelegate;
// Create a new class to handle the delegate
var TiAppApplicationDelegate = Hyperloop.defineClass('TiAppApplicationDelegate', 'NSObject', 'UIApplicationDelegate');
// Add the selector to handle the result
TiAppApplicationDelegate.addMethod({
selector: 'application:didFinishLaunchingWithOptions:',
instance: true,
returnType: 'BOOL',
arguments: [
'UIApplication',
'NSDictionary'
],
callback: function(application, options) {
if (this.didFinishLaunchingWithOptions) {
return this.didFinishLaunchingWithOptions(application, options);
}
return true;
}
});
// Instantiate the delegate subclass
var applicationDelegate = new TiAppApplicationDelegate();
// Called when the application finished launching. Initialize SDK's here for example
applicationDelegate.didFinishLaunchingWithOptions = function(application, options) {
Ti.API.info('Hey there!');
return true
};
// Finally, assign your subclass to the "applicationDelegate" property of the TiApp class
TiApp.app().registerApplicationDelegate(applicationDelegate);