MADRID · NOV 21-22 · 2014 Android Architecture DALVIK ART Just-In-Time (JIT) Compilation Ahead-Of-Time (AOT) Compilation Cache builds up over time Boot times are faster Cache is built at first boot Rebooting device takes significantly longer Apps compiled when executed Stores Compiled Apps Consumes much more internal storage space
MADRID · NOV 21-22 · 2014 Instruments on iOS Debugging, performance analysis, and testing Real-time CPU, memory, disk, energy, and network usage Threads, network, and energy usage I/O system and thread activity Allows detecting memory leaks
MADRID · NOV 21-22 · 2014 iOS Applications C Objective –C,[message passing] Swift PlayGround for leaning Swift Programming with Objetive-C in windows/ linux http://www.gnustep.org/ https://developer.apple.com/swift
MADRID · NOV 21-22 · 2014 Objective-C vs Swift NSString *string = @“hello”; let string = "hello" as NSString let s: NSString = "hello" var string: NSString = "hello" string= "Hello" NSLog(@“This is a string”); println("This is a string"); NSArray *myArray = [NSArray arrayWithObjects:@“string1", @“string2", nil]; var myArray = [“string1", "string2"] var myArray : [String] = [“string1", "string2"]
MADRID · NOV 21-22 · 2014 iOS Applications UINavigationController - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; //Recuperamos el ViewController UIViewController *rootViewController = [storyboard instantiateInitialViewController]; // Creamos un UINavigationController, que se encargará de controlar y almacenar los distintos viewControllers de nuestra aplicación. UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController]; //Asignamos el navigationController como principal. self.window.rootViewController = navigationController; return YES; } -(IBAction)goToPantalla2:(id)sender { UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; //Obtenemos el controlador con Identifier "Pantalla2" Pantalla2ViewController *pantalla2Controller = [storyBoard instantiateViewControllerWithIdentifier:@"Pantalla2"]; //Lanzamos el controlador en el navigation de forma animada: [self.navigationController pushViewController:pantalla2Controller animated:YES]; }
MADRID · NOV 21-22 · 2014 Design patterns on iOS Applications MVC Target-action Delegate and protocols A delegate is an object that control of the user interface for that event.
MADRID · NOV 21-22 · 2014 Certificates and Signing Android iOS Self-signed certificate Apps are signed by developers Apple certificate Apps are signed by Apple Java Keytool Generate a distribution provisioning profile Export + Sign APK iOS Provisioning Portal Debug and distribution certificate App ID (unique ID of your app) Set of device unique identifiers Developer certificate
MADRID · NOV 21-22 · 2014 Permissions on iOS o Declare your application requirements in its manifest-like Info.plist. This is used only for ensuring device compatibility. o UIRequiredDeviceCapabilities allows you to list ’hardware-like’ capabilities that your app needs. o AppStore reads this information for filter installer devices.
MADRID · NOV 21-22 · 2014 Android Material design Minimalist and consistency Transitions, animiations Cards https://developer.android.com/training/material/get-started.html
MADRID · NOV 21-22 · 2014 Android Material design Ldrawer https://github.com/kanytu/android-material-drawer-template https://github.com/IkiMuhendis/LDrawer
MADRID · NOV 21-22 · 2014 Android Fragments Fragment is a chunk of user interface with its own life cycle. Fragment must exist within an Activity Interaction with fragments is done through FragmentManager Fragment API was introduced in API 11 http://developer.android.com/tools/support-library
MADRID · NOV 21-22 · 2014 CheckList Rotating the screen Behavior of when network is not available Navigation between screens Behavior of app if app is running for longer period of time and checking memory
MADRID · NOV 21-22 · 2014 Testing on Android Unit & Integration,TDD Junit RoboElectric Acceptance,BDD RobotiumTesting User Interface Calabash
MADRID · NOV 21-22 · 2014 Emulator vs Simulator Android iOS Emulator Simulator Very slow integrated with SDK Integrated with Xcode Emulates hardware and software Simulates only software Launched apps are equal binaries from the apps compiled for Device CPU Launched apps are different binaries from the apps compiled for Device CPU
MADRID · NOV 21-22 · 2014 Genymotion Integration with Eclipse and Android Studio MULTI OS Compatible with Linux,Windows and Mac Requires VirtualBox
MADRID · NOV 21-22 · 2014 Alternatives http://jimulabs.com/ for Android live preview https://appthwack.com/ for testing in the cloud with real devices
MADRID · NOV 21-22 · 2014 Android Handles memory management automatically Garbage Collector iOS release, retain, autorelease ARC(Automatic Reference Counting) Developer maintain the count number for each object Destroys object when reference counting become 0 @autoreleasepool With ARC, compiler set this methods where its necessary
MADRID · NOV 21-22 · 2014 Android iOS SQLite android.database.sqlite Tables and relations Core Data Objects DataModel Content Providers /data/data/ /databases/ Only acces with root DataModel editor in Xcode for register objects and their relationships
MADRID · NOV 21-22 · 2014 Android iOS Google requires a one time fee of US$25 iOS Developer Program $99 /year Greater capacity for monetization Google play + Publish in other stores like Amazon,Opera AppStore Alpha/beta testing before put in production Upload to store in 30 min Review process 5-7 days Android Developer Console Beta Testing http://ibetatest.com/ http://testflightapp.com/
MADRID · NOV 21-22 · 2014 References o www.developer.android.com o http://www.google.com/design/spec/material-design/ introduction.html o http://tools.android.com/ o https://android-arsenal.com/ o http://android-developers.blogspot.com.es/ o www.developer.apple.com o https://developer.apple.com/videos/wwdc/ o https://developer.apple.com/library/ios/referencelibrary/Getting Started/RoadMapiOS/