07 Mar

Choosing Developers for Apps: iOS and Android

Choosing Developers for Apps: iOS and Android

Choosing the right development agency to build your mobile app can be tough. Clients often come to us with many questions about the right ways to build and deploy their apps. Some common questions we get are, “Should we launch an iOS app first and an Android at the same time?” or “How big is your team?”. We wanted to put together this list of selection criteria to guide you in choosing the right company to build your mobile app.

Look for companies with strong quality assurance (QA) and testing capabilities –

Make sure you grill your app agency for their usage of automated testing tools. A solid QA team is one of the surest signs you are choosing good app developers. Some common tools for testing mobile apps are Appium and Selenium (our QA team uses both platforms). Without QA testing, your mobile app will be subject to bugginess and latency. To perform QA testing correctly, the company you work with should have a dedicated QA team with a least 2-3 QA specialists.

Negotiate rates to get your money’s worth –

When hiring an agency to build a mobile app, billable hours can stack up quickly. Make sure that if you’re paying high rates ($100-$200 / hr) that all development is being done onshore. Unfortunately, many agencies out there will charge an onshore rate only to offshore the development. Make the sure the developers come from the companies internal teams (check LinkedIn for a sizable development team). If you do pay less than $100 / hr, you may want to consider an onshore/offshore model to maximize your investment.

Choosing where to host the app –

If your company is aiming to build an enterprise-level mobile app, you may want to carefully consider the cloud hosting environment appropriate to the deployment. Companies like Amazon and Oracle are constantly fighting it out to make their environments better for mobile app deployments.

Understand iOS vs. Android –

choosing-developers-ios-androidTo understand if you should deploy an iOS and an Android app at the same time, you have to consider budget and customer base. Outside of the U.S., it is almost a no-brainer to do both. Many people outside of the U.S. do not have iPhones and thus Android tends to be more popular. The good news is, iOS developers typically have lower rates than Android. Consider your budget and location: if you are in the U.S. with a low budget, you might want to start with an iOS-only app. If you have a large budget, you should create both. If you have a small budget and you are outside of the U.S., you may want to consider an Android-only application.

Verify on Clutch –

Clutch is rapidly becoming the go-to source when comparing app development companies. Make sure the firm you select has a profile on Clutch. Be aware that not all reviews on the site are from current projects (you can submit past projects for review). Be sure to check out our own profile on Clutch or contact us directly if you are interested in our app development process.

25 May

128 Technology: 128T Networking Platform

128 Technology: 128T Networking Platform


We’re proud to announce that tCognition has recently partnered with 128 Technology, Inc. (Burlington); the former founders of Acme Packet (now Oracle)!

128 Technology in a Nutshell

128 Technology understands that for many companies, the network is a core part of their business – and in some cases, the network is their core business. They have developed the game-changing and stateful 128T Networking Platform (128T), which uses a Secure Vector Routing architecture that exponentially improves enterprise application performance, Cloud (AWSAzureGoogle), Security & Identity Governance, and network simplification, all while reducing cost through the elimination of now unnecessary devices (i.e. load balancers, firewalls, etc.).

128 Technology’s vision for 128T is rooted in the five basic principles below:

IP networks should be session-aware

All meaningful IP services and applications are based on sessions – the two-way exchange of information between endpoints. A session-oriented perspective provides the basis for a fundamentally new way of building, optimizing, and securing networks with end-to-end, fine-grained control, and visibility.

Advanced network capabilities should not be standalone functions

Network functions such as firewalls, load balancers, and Wide Area Network (WAN) optimizers have some level of session-awareness, yet reside in multiple physical or virtual appliances that add to the complexity. Imbuing session awareness and control into the routing layer enables the consolidation of these functions, and makes them native to the act of routing.

Routing must evolve to be application and service-centric

The modern model for routing must evolve beyond simply IP addresses and cost-based forwarding to encompass the notions of service topologies and policy frameworks. Multi-tenant policy and control logic should exist within, not on top of, IP networks.

Overlay networks are not the answer

Encapsulation or tunnel-based overlay networks such as MPLS, IPSec, and VxLAN sit on top of IP networks in order to deliver deterministic routing, network virtualization, and segmentation. These techniques create overhead, fragmentation, operational costs, and scaling challenges – and limit the effectiveness of security and monitoring systems. Session-oriented networking offers a better alternative that stretches virtual networks end-to-end across network boundaries and domains.

Zero trust security must be everywhere

Perimeter security models are no longer sufficient for today’s business demands. Next-level network security requires that no user, traffic source, or connected network should be trusted. IP routing is no exception.

With these principles in mind, 128 Technology has developed a new kind of networking platform that addresses a broad range of networking challenges but is easy to implement alongside your existing network. They’re excited about this platform because it will deliver outstanding benefits to enterprises, service providers, and cloud services companies alike.

128T Networking Platform (128T) is a software-based platform that exponentially simplifies networking, reduces cost, and provides greater security. The session-oriented, service-centric, and deterministic policy engine enables faster route selection and bi-directional route enforcement through the use of a distributed control plane (vs. centralized controller), eliminating the need for tunnels, overlay networks, and segmentation, treating traffic flows in direct correlation to the established policy.

The CGN approach to networking configures end sites with private addresses, which in turn are translated to public addresses by NAT devices embedded in the network. The incorporation of CGN is similar to a tunnel header applied in multi-tenancy environments, and thus, application-level NAT problems are eliminated, as the source and destination addresses are translated back to the original addresses before delivery to the final destination. 128T is superior to current software-defined Wide Area Networking (SD-WAN) architectures and network functions virtualization because it eliminates complexity and reshapes the way organizations design, deploy, and operate real-world networks by making them dramatically simpler, smarter, and more secure.

Application in Financials and Retail

128T brings tremendous value to the Financial Services and Retail Industries, with a unique focus on the following use cases.


Zero Trust Security starting at the very edge of the network and extending across network boundaries; no packets enter the network unless there is an explicit policy allowing access.


Next Generation WAN (NG-WAN) with seamless failover, the ability to leverage public and private networks, and the need for more and lower cost bandwidth across networks.

Interconnecting Data Centers

To create one “logical” DC to the enterprise including Disaster Recovery with the support of duplicate IP addresses, and the ability to move services across networks.

For example, 128 Technology is currently working with a large financial software company that had experienced a session failure resulting in millions of dollars lost in trades. Session migration and session failover were a high priority for them; all resolved using 128T.

128T can also add enormous value to any retail organization by providing secure, efficient, and dynamic connections to retail locations. Through the NG-WAN platform, a large auto part retailer, for example, was able to connect over 4,000 sites countrywide. The primary driver for this retailer was 128T’s ability to provide dynamic failover of applications.

How tCognition Can Support 128 Technology

tCognition offers cost effective programs in support of advanced technologies like the 128T Networking Platform, providing Application Development & IntegrationQA-Test EngineeringHelp Desk (Level 1-3+), and 24×7 Managed Services all customized to meet the exacting requirements of our client’s needs.

We employ solution development and product support teams for Enterprise applications like NetSuiteOracleSAGE and SAP; monitoring and management tools like EM7, Nectar, and HP OpenView; secure mobile (iOS, Android, MS) application Single Sign-On (SSO) solutions for accessing ServiceNow, ERP and CRM platforms; Omni-Channel – WebRTC solution frameworks enabling browser based full collaboration communication; Telematics, connected vehicle solutions for Agero, vehicle manufacturers like Toyota and VW, and Insurance companies.

We look forward to working with and supporting 128 Technology in taking on the challenge of securing, controlling, and optimizing clients’ overly complex networks – and internetwork – architectures. Let us know how we can engage you in a discussion and show you how we can help deliver the highest level of security, control, and agility – along with 128 Technology!

16 Jun

Transferring Data in watchOS 2 and Objective-C

Transferring Data in watchOS 2 and Objective-C

watchOSToday we are going to have a tutorial on transferring data & files between watchOS and Objective-C. watchOS 2 was a major release with lots of API level changes to help developers. watchOS 2 provides us with WatchConnectivity Framework, which we will focus on in this tutorial.

  1. To start with, create a Single Screen iPhone Application in XCode and name it as WatchOS2Demo. Add WatchConnectivity Framework from Target -> Build Phases -> Link Binary With Libraries.
  2. To work in Watch app we need to create a new Extension for it. Click on “File” button next to XCode on top bar, now a drop down will appear choose “New and select “Target”.
  3. A window will pop in saying to choose template for target. Select the Application under watchOS on left side panel, on right side you will see 2 options WatchKit App and WatchKit App for watchOS 1. As i am going for watch OS 2 demo so we will choose the 1st option WatchKit App which supports watchOS 2 and above.(Refer to the screenshot below):watchOS-Objective-C
  4. On hitting Next button XCode will ask you if you want to Activate the Target – Choose YES.
  5. XCode will generate watch extension template files (InterfaceController h/m, ExtensionDelegate h/m, Interface.Storyboard, etc.).

Watch Extension Part:

In WatchKit Extension’s InterfaceController & iPhone App ViewController header files import the WatchConnectivity framework and also confirm to WCSessionDelegate protocol.

In WatchKit Extension’s InterfaceController implementation file check for:

  • (void)awakeWithContext:(id)context In this method check if the WCSession is supported and if so activate it.

– (void)awakeWithContext:(id)context {

   [super awakeWithContext:context];

   if ([WCSession isSupported]) {

       WCSession *session = [WCSession defaultSession];

       session.delegate = self;

       [session activateSession];



iPhone App Part:

In ViewController implementation file add the same code inside the – (void)viewDidLoad method.

– (void)viewDidLoad {

[super viewDidLoad];

if ([WCSession isSupported]) {

WCSession *session = [WCSession defaultSession];

session.delegate = self;

[session activateSession];



WCSession can be used to transfer NSDictionary (applicationContext), NSData (messageData), NSUrl (file) and provides the delegates for the same.

Below are the WCSession delegates to send information:

– (BOOL)updateApplicationContext:(NSDictionary<NSString *, id> *)applicationContext error:(NSError **)error;

  • (WCSessionFileTransfer *)transferFile:(NSURL *)file metadata:(nullable NSDictionary<NSString *, id> *)metadata;
  • (void)sendMessage:(NSDictionary<NSString *, id> *)message replyHandler:(nullable void (^)(NSDictionary<NSString *, id> *replyMessage))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;

– (void)sendMessageData:(NSData *)data replyHandler:(nullable void (^)(NSData *replyMessageData))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;

Below are the WCSession delegates to receive information:

  • (void)session:(WCSession *)session didReceiveApplicationContext:(NSDictionary<NSString *, id> *)applicationContext;
  • (void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file;- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message replyHandler:(void(^)(NSDictionary<NSString *, id> *replyMessage))replyHandler;
  • (void)session:(WCSession *)session didReceiveMessageData:(NSData *)messageData;

Passing data via applicationcontext from iPhone to Watch:

To pass data from iPhone open the ViewController implementation file in iPhone App.

Add a UIButton with Title ‘Pass Data on storyboard and set IBAction ‘– (IBAction)passAppContext:(id)sender;’ to it. Now lets pass the NSDictionary to watch on hitting this button.

  • (IBAction)passAppContext:(id)sender {

            if ([WCSession isSupported]) {

       WCSession *session = [WCSession defaultSession];

       if ([session isPaired]) { // isPaired returns YES if the Watch is paired with iPhone (does not support the other way, so cannot be used in watch extension)

           NSDictionary *applicationDict = @{@”kDeviceName”:@”iPhone”, @”kDeviceOSVersion”:@”iOS 9.3″};

           NSError *error = nil;

           [session updateApplicationContext:applicationDict error:&error];

           if (error) {

               NSLog(@”Unable to send Dictionary to Watch with error: %@”,error.localizedDescription);


       } else {

           NSLog(@”iPhone is not paired with Watch”);


   } else {

       NSLog(@”WCSession is not supported with this OS version.”);



Passing data via applicationcontext to Watch from iPhone:

To receive the data from iPhone to Watch open the InterfaceController implementation file in the Watch Extension.

Add the delegate method of WCSession to receive the applicationContext.

– (void)session:(WCSession *)session didReceiveApplicationContext:(NSDictionary<NSString *, id> *)applicationContext {

   if (applicationContext != nil) {

       NSString *dataReceivedfromiPhone = [NSString stringWithFormat:@”Device Name: %@, Device Version: %@”, [applicationContext objectForKey:@”kDeviceName”], [applicationContext objectForKey:@”kDeviceOSVersion”]];

        WKAlertAction *action = [WKAlertAction actionWithTitle:@”OK” style:WKAlertActionStyleDefault handler:^{}];

       NSString *title = @”Data Received”;

       NSString *message = dataReceivedfromiPhone;

       [self presentAlertControllerWithTitle:title message:message preferredStyle:WKAlertControllerStyleAlert actions:@[ action ]];

   } else {

       NSLog(@”Login failed on iPhone App”);

       WKAlertAction *action = [WKAlertAction actionWithTitle:@”OK” style:WKAlertActionStyleDefault handler:^{}];

       NSString *title = @”Oops!”;

       NSString *message = @”iPhone App failed to login.”;

       [self presentAlertControllerWithTitle:title message:message preferredStyle:WKAlertControllerStyleAlert actions:@[ action ]];



In same way we can send data from watchOS to iOS using Objective-C. In a similar fashion you can implement the other delegates to communicate and transfer data and files between iOS and watchOS.

16 May

Introduction to XCode 7

Introduction to XCode 7

XCode is an integrated development environment (IDE), a single software development kit (SDK) used to develop and test OS X, iOS and watchOS apps.

XCode is a free tool which a developer can download from Apple App Store. You cannot use XCode on any other platform (Windows or Linux) other than Mac OS X.

Learn to develop your first app and get more familiar with XCode


XCode comes with built-in tools to test and execute developed apps. To execute an app and test Apple watchOS or iOS app XCode helps us by providing simulators. Simulators provide us with a real hardware like environment where we can execute and test our developed apps. You can select either to develop apps in Objective C or Swift.


1. AppDelegate: This file deals with the life cycle of the iOS app. In case if you want to deal with application background mode, foreground mode, terminating or start execution, this is the place to handle it.

2. ViewController: In this file life cycle of your ViewController lies, here you can code to present the UI and link them with respective action events.

3. Storyboard: As the name reflects it is where you can design all the UI part of your app. You can create UI Screens (Scenes) and connect them with each other (linking Controllers with Segue). This file gives you a perfect picture what we want to design along with its flow.

4. Info.plist: It holds System level Configurations, where you can add or edit many features.

5. Targets: App can hold one or more than one Targets. Suppose i have to build an application that will work on iPhone as well as Watch; so i have to build an app containing two targets, first for iPhone App and other for Watch App.

Hopefully this gets your feet wet into XCode! Don’t forget to check out our blog on an introduction to developing iOS mobile apps.

09 May

Advanced iOS Development Tips – A Focus on Automation

Advanced iOS Development Tips – A Focus on Automation

Here are some tips and techniques for advanced iOS Development. These are just the terms, and this blog isn’t a deep dive into each of these development tips. This blog follows up on our blog regarding iOS Techniques for Beginners.

Top-10 Advanced iOS App Development Tips

  1. Learn Interface builder –

The Interface builder editor within Xcode makes it simple to design a full interface without writing any code. Simply drag and drop buttons, labels, text and other UI objects onto the design canvas to create a functioning user interface.

2. Utilize Storyboards –

Storyboards are essentially a single file for all your screens in the application. It not only shows all the screens of your application but also shows how they are connected to each other.

Some key components of storyboards:

a. Scene – A view or screen is called as Scene in the storyboard. A view is the UI part that will be presented on screen.

b. Segues – A segue is used in iOS development to represent a transition

c. Segue identifier – Its a unique name given to a segue to identify particular segue

3. Set up Scrum Teams –

Scrum teams are flexible product development strategies where a development team works as a unit to achieve common goal. Scrum teams are useful especially in larger, more advanced deployments.

Here’s how a scrum works:

a. An initial appointment of a project manager called the “scrum master”.

b. Definition and prioritization of tasks to be done.

c. Planning session for each task.

d. Daily meetings among teams.

e. Review progress and evaluation of completed project.

4. Get Familiar with “Agile Development” –

Actual application development is carried out in this phase with the help of Agile methodology. The Agile approach believes that every project needs to be handled differently and existing methods need to be tailored to best-suit the project requirements.

5. Sprints –

‘Sprinting’ is a term for an agile development practice that breaks the product into small incremental builds. These builds are provided in iterations. Each iteration typically lasts about one to three weeks and called a “sprint”. Every sprint involves cross functional teams working simultaneously on various areas like planning, requirements analysis, design, coding, unit testing and acceptance testing.

Advanced iOS Testing & Bug Fixing Terms

It does not matter how much time you invest in design and implementation, mistakes are inevitable, and bugs will appear. There are some common bugs on iOS applications. Below image introduces some common types of iOS testing strategies.

6. Automated Testing –

Automated testing is the most advantageous aspect of iOS testing. It enables you to detect the bug and performance issues quickly.

Benefits of Automated Testing:

a. Automated testing can run on multiple devices, saving your time.

b. Automated testing can target SDK’s. You can run tests on different SDK versions.

c. Increases productivity of testing.

7. UI Testing with UIAutomation –

UIAutomation is Javascript library provided by Apple, which can be used to perform automated tests on real devices and on simulator.

Benefits of UI Automation:

a. Reduce efforts on manual testing

b. Uses less memory to execute all your tests.

c. Simplify your UI testing procedure.

8. Enter Additional Information in iTunes Connect –

iTunes Connect is a web tool you use to enter information about your app for sale in the store. iTunes Connect stores all the metadata about your app including the app versions and builds that you upload using Xcode. Before you submit your app, enter all the required information.

04 May

How to Develop iOS Mobile Apps – Top-10 Beginner Basics

How to Develop iOS Mobile Apps – Top-10 Beginner Basics

Since we iOS develop applications here at tCognition, we wanted to drop some knowledge on how to develop iOS mobile apps for beginners with these ‘top-10’ basics. Apple iOS devices have revolutionized the world with their capabilities, innovations and user experience. When the first generation iPhone was launched on June 29, 2007, it revolutionized the concept of the what a cell phone could do. Since then Apple has launched many iOS devices like iPod Touch, iPad and Apple Watch. We specialize in developing applications in the telematics industry ourselves, but this knowledge is universal.

Top-10 iOS App Development Basics

1. Get the right machine – To be an iOS app developer you must have an Apple Mac Machine with XCode IDE installed on it and an Apple Developer Member Account. One can download XCode for free from the App Store on any Mac Machine meeting its installation requirements. XCode is all-in-one Software Development Kit & Integrated Development Environment (IDE) which comes with various simulators and instruments to check memory leakages, and sandboxes where a developer can build and test the iOS Apps in the real environment before submitting the developed app to the App Store.

2. Know the languages – A knowledge of programming languages like Objective C and/or Swift* (a superset of C++ programming languages) is critical. These languages have emerged as powerful tools to build Object Oriented Apps. Swift is an open source scripting language developed by Apple to make the developers life easier.

3. Enroll in the Apple Developer Program – It costs $99 / per year to enroll in Apple’s Developer Program and $299 / per year for Apple Developer Enterprise Program annually.

4. Harvest Your Ideas – Every application starts with an idea. Strive to simplify your work and what you create. Make sure you write down and white board every idea that comes to mind. It is always an idea which leads to a great invention.

5. Competition and Usership –

  • Competition – what other apps of similar type are available on the market?
  • Usership – what can we do to add more to facilitate our users and get huge set of end users?

6. Requirement Gathering – With a clear vision of what we want to develop we can get the best quality output. Requirement gathering is an important part of the app development process. Decides on what input parameters the development team will work from is important.

7. Keep the User Experience in Mind – Designing not only deals with the User Interface but also deals with the User Experience. The designer develops the blueprints of the app and its flow by generating mockups, storyboards, images and clickable icons.

8. Test and Bug Fixing – This is a critical phase where the app is tested thoroughly to make it bug free, so as to meet the expectations of end user. Be sure to “drive the product into the ground” (use the mobile product to every extent imaginable) to make sure you get all the bugs out.

9. Create a prototype – A prototype is early sample, model to test a concept or process. Prototype serves to provide specifications for a real working system and helps in rapid development. Prototype shows actual flow of the application along with UI. It also give a chance to user/clients to take a precise look at applications design and make any changes if required.

10. Submit Your App to the App Store – After entering the required information, choose which build you wish to upload via XcodeApp and the Store team will review your app. The review process generally takes around 10-15 days to complete. The app will be tested based on Apples Guidelines during this review process. If an app passes review process, the app will be available on App Store!

About the Author – Suraj MIrajkar is tCognition’s Senior iOS Develper on tCognition’s staff. For more information about tCognition’s application development services, ask for Suraj at info@tcognition.com.