This document provides guidance to a developer interested in customizing or rebranding the Vantiq iOS app. The following sections discuss likely operations necessary to develop a new iOS app based on the Vantiq version with the goal of submitting the new app to the Apple App Store.

Please note: this document assumes the reader is an experienced iOS developer. Additionally, if customizing more than just images, the developer should be comfortable developing in Objective-C.

Fork the Vantiq iOS App Repository

The Vantiq iOS app GitHub repository may be found here. (This is a private repository so you must contact Vantiq in order to obtain access to it.) In order to maintain the ability to track changes in the Vantiq-maintained app version, the developer should fork the repository. There are many sources of information for learning how to keep a forked repository up to date with the original. Here is one summary.

Open Xcode Workspace

The iOS project makes use of several third-party CocoaPods pods for some of its functionality. Consequently, the project uses the Xcode Workspace Vantiq-ios.xcworkspace rather than the Xcode project Vantiq-ios.xcodeproj. The workspace is located in the Vantiq directory of the GitHub repository.

There is an additional workspace, Vantiq-ios plus Watch.xcworkspace, that has hooks for a companion Apple Watch app. This is an older version of the Vantiq app and is not currently in use.

Modify the Project Settings

In order to submit the branded app to the Apple App Store, the developer must modify several settings in the Vantiq-ios target. In the Xcode Project Navigator, navigate to the Vantiq-ios target and select the General tab. Review and modify all appropriate properties (e.g. Display Name, Signing Team, App Icons, Launch Images, etc.).

The Vantiq app contains a Vantiq logo PNG format image with three scaled sizes for branding purposes. These images are used in the app’s Launch Screen and in at least two more views (Choose Server and Select Namespace). The base image is 150px x 43px (Vantiq-150×43.png) with a transparent background. There are two additional sizes of this image (@2x, @3x) to support Retina displays. These images are found in the Vantiq/Vantiq-ios/Images directory of the GitHub repository.

The easiest way to provide new brand-specific logos is to simply create similarly sized images using the same names as currently exist (i.e. Vantiq-150×43.png, Vantiq-150×[email protected] and Vantiq-150×[email protected]) and replace the files found in the Images directory.

Change Fonts and Colors

There are two files related to overall app font and color use.

Branding.h, found in the Vantiq/Vantiq-ios/Utilities directory, contains the definitions for the two different app Navigation Bar components (background, text and controls) in addition to the list cell background color. This file also contains the names of the bold and regular size fonts used throughout the app. The Vantiq version uses a font imbedded in the app, Source Sans Pro.

Branding.m, found in the same directory as Branding.h, uses the constants found in Branding.h but contains some additional programmatic options such as default font sizes.

Consumer Mode

Consumer Mode is a special type of branding that bypasses the normal Vantiq authentication views by specifying a dedicated Vantiq server URL, namespace and Public Client name. This allows the branded app to display a Public Client which implements self-registration. Once the Public Client has run and the user has authenticated, Consumer Mode also specifies a single dedicated, private Client to be run. No other functionality found in the existing Vantiq mobile app is available.

There is one file related to Consumer Mode, Settings.m, found in the Vantiq/Vantiq-ios/Settings Xcode folder. To enable Consumer Mode, return YES in the isConsumerMode function. To specify the dedicated Vantiq server URL, the namespace that contains the Public and private Client, and the Public and private Client names, alter the return values in the consumerServer, consumerNamespace, consumerPublicClientName and consumerPrivateClientName.