CocoaPods: gestor de dependencias para iOS

CocoaPods es un gestor de dependencia para los proyectos Swift y Objective-C Cocoa. Está construido con Ruby y se puede instalar con el Ruby predeterminado disponible en OS X.

Para instalarlo, hay que realizar lo siguiente:

macairjx:~ javoaxian$ sudo gem install cocoapods

Se pedirá nuestra contraseña y después de ingresarla, mostrará una salida similar:


macairjx:~ javoaxian$ sudo gem install cocoapods
Password:
Fetching: concurrent-ruby-1.0.5.gem (100%)
Successfully installed concurrent-ruby-1.0.5
Fetching: i18n-0.9.5.gem (100%)
Successfully installed i18n-0.9.5
Fetching: thread_safe-0.3.6.gem (100%)
Successfully installed thread_safe-0.3.6
Fetching: tzinfo-1.2.5.gem (100%)
Successfully installed tzinfo-1.2.5
Fetching: activesupport-4.2.10.gem (100%)
Successfully installed activesupport-4.2.10
Fetching: nap-1.1.0.gem (100%)
Successfully installed nap-1.1.0
Fetching: fuzzy_match-2.0.4.gem (100%)
Successfully installed fuzzy_match-2.0.4
Fetching: cocoapods-core-1.5.3.gem (100%)
Successfully installed cocoapods-core-1.5.3
Fetching: claide-1.0.2.gem (100%)
Successfully installed claide-1.0.2
Fetching: cocoapods-deintegrate-1.0.2.gem (100%)
Successfully installed cocoapods-deintegrate-1.0.2
Fetching: cocoapods-downloader-1.2.1.gem (100%)
Successfully installed cocoapods-downloader-1.2.1
Fetching: cocoapods-plugins-1.0.0.gem (100%)
Successfully installed cocoapods-plugins-1.0.0
Fetching: cocoapods-search-1.0.0.gem (100%)
Successfully installed cocoapods-search-1.0.0
Fetching: cocoapods-stats-1.0.0.gem (100%)
Successfully installed cocoapods-stats-1.0.0
Fetching: netrc-0.11.0.gem (100%)
Successfully installed netrc-0.11.0
Fetching: cocoapods-trunk-1.3.0.gem (100%)
Successfully installed cocoapods-trunk-1.3.0
Fetching: cocoapods-try-1.1.0.gem (100%)
Successfully installed cocoapods-try-1.1.0
Fetching: molinillo-0.6.5.gem (100%)
Successfully installed molinillo-0.6.5
Fetching: atomos-0.1.2.gem (100%)
Successfully installed atomos-0.1.2
Fetching: CFPropertyList-3.0.0.gem (100%)
Successfully installed CFPropertyList-3.0.0
Fetching: colored2-3.1.2.gem (100%)
Successfully installed colored2-3.1.2
Fetching: nanaimo-0.2.6.gem (100%)
Successfully installed nanaimo-0.2.6
Fetching: xcodeproj-1.5.9.gem (100%)
Successfully installed xcodeproj-1.5.9
Fetching: escape-0.0.4.gem (100%)
Successfully installed escape-0.0.4
Fetching: fourflusher-2.0.1.gem (100%)
Successfully installed fourflusher-2.0.1
Fetching: gh_inspector-1.1.3.gem (100%)
Successfully installed gh_inspector-1.1.3
Fetching: ruby-macho-1.2.0.gem (100%)
Successfully installed ruby-macho-1.2.0
Fetching: cocoapods-1.5.3.gem (100%)
Successfully installed cocoapods-1.5.3
Parsing documentation for concurrent-ruby-1.0.5
Installing ri documentation for concurrent-ruby-1.0.5
Parsing documentation for i18n-0.9.5
Installing ri documentation for i18n-0.9.5
Parsing documentation for thread_safe-0.3.6
Installing ri documentation for thread_safe-0.3.6
Parsing documentation for tzinfo-1.2.5
Installing ri documentation for tzinfo-1.2.5
Parsing documentation for activesupport-4.2.10
Installing ri documentation for activesupport-4.2.10
Parsing documentation for nap-1.1.0
Installing ri documentation for nap-1.1.0
Parsing documentation for fuzzy_match-2.0.4
Installing ri documentation for fuzzy_match-2.0.4
Parsing documentation for cocoapods-core-1.5.3
Installing ri documentation for cocoapods-core-1.5.3
Parsing documentation for claide-1.0.2
Installing ri documentation for claide-1.0.2
Parsing documentation for cocoapods-deintegrate-1.0.2
Installing ri documentation for cocoapods-deintegrate-1.0.2
Parsing documentation for cocoapods-downloader-1.2.1
Installing ri documentation for cocoapods-downloader-1.2.1
Parsing documentation for cocoapods-plugins-1.0.0
Installing ri documentation for cocoapods-plugins-1.0.0
Parsing documentation for cocoapods-search-1.0.0
Installing ri documentation for cocoapods-search-1.0.0
Parsing documentation for cocoapods-stats-1.0.0
Installing ri documentation for cocoapods-stats-1.0.0
Parsing documentation for netrc-0.11.0
Installing ri documentation for netrc-0.11.0
Parsing documentation for cocoapods-trunk-1.3.0
Installing ri documentation for cocoapods-trunk-1.3.0
Parsing documentation for cocoapods-try-1.1.0
Installing ri documentation for cocoapods-try-1.1.0
Parsing documentation for molinillo-0.6.5
Installing ri documentation for molinillo-0.6.5
Parsing documentation for atomos-0.1.2
Installing ri documentation for atomos-0.1.2
Parsing documentation for CFPropertyList-3.0.0
Installing ri documentation for CFPropertyList-3.0.0
Parsing documentation for colored2-3.1.2
Installing ri documentation for colored2-3.1.2
Parsing documentation for nanaimo-0.2.6
Installing ri documentation for nanaimo-0.2.6
Parsing documentation for xcodeproj-1.5.9
Installing ri documentation for xcodeproj-1.5.9
Parsing documentation for escape-0.0.4
Installing ri documentation for escape-0.0.4
Parsing documentation for fourflusher-2.0.1
Installing ri documentation for fourflusher-2.0.1
Parsing documentation for gh_inspector-1.1.3
Installing ri documentation for gh_inspector-1.1.3
Parsing documentation for ruby-macho-1.2.0
Installing ri documentation for ruby-macho-1.2.0
Parsing documentation for cocoapods-1.5.3
Installing ri documentation for cocoapods-1.5.3
Done installing documentation for concurrent-ruby, i18n, thread_safe, tzinfo, activesupport, nap, fuzzy_match, cocoapods-core, claide, cocoapods-deintegrate, cocoapods-downloader, cocoapods-plugins, cocoapods-search, cocoapods-stats, netrc, cocoapods-trunk, cocoapods-try, molinillo, atomos, CFPropertyList, colored2, nanaimo, xcodeproj, escape, fourflusher, gh_inspector, ruby-macho, cocoapods after 30 seconds
28 gems installed

Con esto queda instalado CocoaPods para poder usarlo en nuestros proyectos para iOS.

Git-cola: cliente para Git

Git-cola es un cliente para administrar los cambios de nuestros proyectos con Git. Los he empezado a usar y esta muy simple a comparación de otros que he probado y quizá algo limitado visualmente a mi gusto, pero realmente lo veo funcional y en algunos proyectos lo estoy usando y me ha funcionado bien.

Sitio: https://git-cola.github.io/

Descarga: https://git-cola.github.io/downloads.html

Gratuito: Sí.

GitKraken: cliente para Git

GitKraken es un cliente para administrar nuestros cambios de nuestros proyectos con Git. Últimamente lo he empezado a usar bastante con GNU/Linux y me ha dejado muy buen sabor de boca, aún no se le compara al 100% a SourceTree que lo he usado ya bastante tiempo en Mac OS X.

Esta en constante actualización debido a que todavía está en versión Beta.

Esta disponible para su descarga en GNU/Linux, Mac OS X y Windows.

 

La liga para su descarga es:

Sitio: http://www.gitkraken.com

Descarga: http://www.gitkraken.com/download

Gratuito: Si y versión Pro de paga.

Aquí dejo una captura de pantalla de este cliente.


jx_post_857_02

Cómo obtener el ancho y alto (width y height) de una pantalla en iOS con Objective-C

Para obtener el ancho y el alto de una pantalla en iOS con Objective-C es muy sencillo, bastará con ejecutar las siguientes línea según sea el caso:

Ancho (width):

[[UIScreen mainScreen] bounds].size.width;

Alto (height):

[[UIScreen mainScreen] bounds].size.height;

 

Crear un UIScrollView con contenido en un UIView usando XIB y Objective-C en iOS

Existen muchas formas de crear un Scroll en iOS, esta es una forma sencilla de hacerlo, sobre todo cuando tenemos un contenido fijo y requerimos que se contenido tenga scroll.

Pre requisitos:

En este ejemplo la pantalla está configurada para un iPhone de 3.5 pulgadas.

jx_post_529_01

Lo que haremos será agregar un UIScrollView dentro del UIView que tenemos.

jx_post_529_02

jx_post_529_03

Ahora se creará un nuevo UIView el cual tendrá el contenido.

jx_post_529_04

Este UIView será de Size Freedom:

jx_post_529_05

y tendrá las medidas de 320 de width y 568 de height.

jx_post_529_06

En el UIView que acabamos de crear, agregaremos algún elemento visual en él en la parte de abajo, en este caso será un UILabel.


jx_post_529_07

jx_post_529_08

Ahora se deberá crear un property del UIScrollView como del UIView y conectarlos para incrustar el UIView dentro del UIScrollView.

Para hacer la conexión puede ser como se mencionó en cualquiera de estos dos post:

Aquí use el del segundo post.

jx_post_529_09

jx_post_529_10

En este ejemplo el UIScrollView se llama scrollViewContenido y el UIView se llama viewContenido.

Abriremos el archivo ViewController.h y en su método:

– (void)viewDidLoad

vamos a agregar el siguiente código para asignar el contenido del UIView dentro del UIScrollView.

[self.scrollViewContenido setContentSize:CGSizeMake(self.viewContenido.frame.size.width, self.viewContenido.frame.size.height)];

[self.scrollViewContenido addSubview:self.viewContenido];

El método quedará de la siguiente manera:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    [self.scrollViewContenido setContentSize:CGSizeMake(self.viewContenido.frame.size.width, self.viewContenido.frame.size.height)];
    [self.scrollViewContenido addSubview:self.viewContenido];
}

Si ejecutamos el ejemplo, podemos mover el scroll hacía abajo y veremos el UILabel que habíamos agregado.

jx_post_529_11

Cómo conectar automáticamente una property IBOutlet de un ViewController a un XIB o Storyboard en Objective-C

Un IBOutlet sirve para conectar un elemento visual a un elemento del controlador, en este caso, conectar un elemento de nuestro XIB o Storyboard a nuestro ViewController.

En esta ocasión, se describirá como hacerlo de forma más sencilla y casi automática, en: Cómo conectar manualmente una property IBOutlet de un ViewController a un XIB o Storyboard en Objective-C se indica cómo hacerlo de forma manual.

Pre requisitos:

  • Tener creado un proyecto.
  • Contar con un Storyboard o un archivo XIB con su respectivo ViewController.

Este ejemplo cuenta con un archivo Storyboard llamado Main.storyboard y un controlador llamado ViewController.

Lo primero que haremos es abrir el archivo de la interfaz gráfica Main.storyboard y crear un UILabel.

jx_post_516_01

jx_post_516_02

Lo siguiente será crear una conexión entre el UILabel que creamos y asignarlo a un property dentro del controlador, para esto, separaremos nuestra pantalla en dos. Aseguremonos que el archivo Main.storyboard esté seleccionado.
jx_post_516_03
y ahora selecionaremos la opción:
Show the Assistant editor
jx_post_516_04
la cuál son 2 círculos enlazados de Xcode para separar en dos la pantalla y así nos mostrará de un lado la interfaz gráfica y del otro el código fuente del controller asociado.
jx_post_516_05
Hay que asegurarse que esté seleccionado nuestro archivo .h para generar la conexión, en este caso el archivo es ViewController.h.
jx_post_516_10
Ahora crearemos la conexión y la property en el ViewController asociado, para ello, presionamos sobre el UILabel que creamos junto con la tecla Ctrl, lo cual hará que se muestre una línea azul y la dirigiremos hacia la sección con el código.
jx_post_516_06
soltaremos y nos mostrará una pantalla similar a esta:
jx_post_516_07
Ahora lo que haremos será introducir el nombre de nuestra property en en campo Name y presionaremos en Connect. En este caso se llamará labelNombre.
jx_post_516_08
Se creará una property en el controller y se generará la conexión a este con el elemento de la interfaz gráfica.
jx_post_516_09

Crear un menú lateral usando SWRevealViewController en Objective-C

SWRevealViewController es una biblioteca que nos permite crear un menús laterales ya sea del lado derecho o izquierdo de nuestra pantalla. He usado esta herramienta en algunas aplicaciones y la verdad es que me ha sido de bastante utilidad y sencilla de usar.

Pre requisitos:

 

Para comenzar descargaremos SWRevealViewController.

Descomprimimos el archivo que descargamos.

Ahora agregaremos SWRevealViewController a nuestro proyecto, para ello, haremos lo siguiente:

Presionamos con botón derecho sobre el nombre del proyecto y seleccionamos la opción:

Add Files to “Nombre del proyecto…

En este caso:

Add Files to “ProyectoXib”…

jx_post_470_01

Nos aparecerá una pantalla donde deberemos buscar la ubicación del archivo que descomprimimos y que deseamos agregar a nuestro proyecto.

En mi caso está en la carpeta Downloads, dentro de esta carpeta se creó una sub carpeta llamada: SWRevealViewController-master y dentro de esta existe otra carpeta llamada SWRevealViewController, en la cual se encuentran los archivos necesarios.

Seleccionaremos dicha carpeta, marcamos las opción Copy ítems if needed y Create groups para posteriormente presionar Add.

jx_post_470_02

Se creara una carpeta amarilla con el nombre de:

SWRevealViewController

Ahora abriremos el archivo AppDelegate.h y abajo de los import que tengamos:

#import <UIKit/UIKit.h>

jx_post_470_03

Agregaremos la siguiente línea:

@class SWRevealViewController;

jx_post_470_04

También se agregará la siguiente propiedad:

@property (strong, nonatomic) SWRevealViewController *viewController;

jx_post_470_05

Ahora crearemos un controller que tendrá la información del menú, en mi caso lo llamaré MenuViewController.

Para esto, seleccionamos el proyecto con carpeta amarilla y presionamos el botón derecho para seleccionar la opción New File…

En este ejemplo sería:

ProyectoXib -> New File…

jx_post_470_06

Aparecerá una pantalla donde seleccionamos la opción Cocoa Touch Class:

iOS -> Source Cocoa Touch Class

Presionamos Next y se mostrará una pantalla donde nos pide los datos del ViewController a crear, en este caso le pondré el nombre MenuViewController y marcar la opción Also create XIB file.

jx_post_470_07

Presionamos Next y por último se nos preguntará donde crear los archivos, aquí sólo hay que presionar en Create.

Ahora que tenemos ya nuestro controller para el menú, abriremos el archivo MenuViewController.xib para agregar el contenido de nuestro menú. Aquí colocaré un botón, pero lo más común para este menú es utilizar un UITableViewController para realmente dar el efecto de menú, pero cada quién es libre de construir el menú como se desee.

En este ejemplo el MenuViewController.xib quedaría de la siguiente manera:

jx_post_470_08

Abriremos el archivo AppDelegate.m e importaremos los siguientes archivos:

#import “SWRevealViewController.h”
#import “MenuViewController.h”

jx_post_470_09

Agregaremos a:

@interface AppDelegate ()

lo siguiente:

<SWRevealViewControllerDelegate>

Para que quede de la siguiente manera:

@interface AppDelegate()<SWRevealViewControllerDelegate>

Ahora dentro del método:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Debido a que este post se está basando en uno anterior, ya tenemos creado un objeto llamado: ViewControllerPrincipal el cual seguiremos usando.

Crearemos un navigationController para nuestra viewControllerPrincipal, esto es de la siguiente manera:

UINavigationController *navPrincipal = [[UINavigationController alloc] initWithRootViewController:viewPrincipal];

Crearemos un objeto del controlador del menú:

MenuViewController *menuView = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];

Ahora crearemos el objeto del controlador SWRevealViewController que se encargará de dar el comportamiento del menú. Esto es de la siguiente manera:

SWRevealViewController *revealView = [[SWRevealViewController alloc] initWithRearViewController:menuView frontViewController:navPrincipal];

Al objeto revealView que creamos, le asignaremos el delegate para que pueda manejar los comportamientos.

 revealView.delegate = self;

Lo siguiente será asignarle a nuestra propiedad viewController definida en nuestro AppDelegate.h, el objeto revealView.

self.viewController = revealView;

Lo último que faltará hacer en este archivo es asignar al rootViewController de nuestro window nuestro atributo viewController, esto se hace de la siguiente manera:

[self.window setRootViewController:self.viewController];

Todo este método se verá de la siguiente manera:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    ViewControllerPrincipal *viewPrincipal = [[ViewControllerPrincipal alloc] initWithNibName:@"ViewControllerPrincipal" bundle:nil];
    MenuViewController *menuView = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
    UINavigationController *navPrincipal = [[UINavigationController alloc] initWithRootViewController:viewPrincipal];
    SWRevealViewController *revealView = [[SWRevealViewController alloc] initWithRearViewController:menuView frontViewController:viewPrincipal];
    revealView.delegate = self;
    self.viewController = revealView;
    [self.window setRootViewController:self.viewController];
    [self.window makeKeyAndVisible];
    
    return YES;
}
 jx_post_470_10

Abriremos el archivo ViewControllerPrincipal.h y haremos el siguiente import:

#import “SWRevealViewController.h”

Dentro del método:

– (void)viewDidLoad

Obtendremos el comportamiento del revealViewController de la siguiente manera:

SWRevealViewController *revealController = [self revealViewController];

Ya que tenemos creado este objeto, asignaremos los gestos para mover el menú de derecha a izquierdo o viceversa.

[revealController panGestureRecognizer];

[revealController tapGestureRecognizer];

Ahora crearemos un botón para el navigationBar que será el que se encargará de al ser presionado, mostrar u ocultar el menú.

 UIBarButtonItem *revealButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Menú" style:UIBarButtonItemStylePlain target:revealController action:@selector(revealToggle:)];

por último asignamos el botón al navigationBar del lado izquierdo.

[self.navigationItem setLeftBarButtonItem:revealController];

Esto se verá así:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setTitle:@"Principal"];
    
    SWRevealViewController *revealController = [self revealViewController];
    
    [revealController panGestureRecognizer];
    [revealController tapGestureRecognizer];
    
    UIBarButtonItem *revealButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Menú" style:UIBarButtonItemStylePlain target:revealController action:@selector(revealToggle:)];
    
    [self.navigationItem setLeftBarButtonItem:revealButtonItem];
}

jx_post_470_11

El menú se verá así:

jx_post_470_12


jx_post_470_13

Cómo conectar manualmente una property IBOutlet de un ViewController a un XIB o Storyboard en Objective-C

Un IBOutlet sirve para conectar un elemento visual a un elemento del controlador, en este caso, conectar un elemento de nuestro XIB o Storyboard a nuestro ViewController.

En esta ocasión, se describirá como hacerlo de forma manual y después crear la conexión, en otro post se indicará cómo hacerlo de una manera más sencilla y casi automática.

Pre requisitos:

  • Tener creado un proyecto.
  • Contar con un Storyboard o un archivo XIB con su respectivo ViewController.

Este ejemplo cuenta con un archivo XIB y un controlador llamados ViewController.

Lo primero que haremos es abrir el archivo ViewController.h y crear la siguiente propiedad:

@property (strong, nonatomic) IBOutlet UILabel *labelNombre;

Ahora iremos al archivo de la interfaz gráfica ViewController.xib y crearemos un UILabel.
jx_post_476_01
Lo siguiente será crear el conexión de la propiedad labelNombre definida en el archivo ViewController.h y el elemento UILabel agregado a la interfaz gráfica.
Para ello, presionaremos sobre File’s Owner que se encuentra en:
Placeholers -> File’s Owner
junto con la tecla Ctrl, lo cual hará que se muestre una línea azul y dirigimos hacia donde está el UILabel.
jx_post_476_02
dejamos de presionar y nos aparecerá un menú:
jx_post_476_03
Nos aparecerán todos los elementos visuales que con los que se puede relacionar, en este caso como podemos observar, se muestra el nombre de la propiedad que definimos en nuestro ViewController. Bastará con presionar sobre el nombre de nuestra propiedad para que quede hecha la conexión.
jx_post_476_04
Con eso quedará realizada la relación entre nuestro elemento visual y un objeto del controlador.

Crear un proyecto en Xcode 6 usando Xib en lugar de Storyboard con Objective-C

Para todos aquellos que como yo, les sigue gustando trabajar con archivos XIB en lugar de Storyboard en la programación de apps en iOS. Aquí presento la forma en que pueden crear un proyecto usando archivos XIB en la vista y Objective-C como lenguaje de programación, debido a que con las nuevas versiones de Xcode, sólo podemos crear proyectos con Storyboard’s por default.

Abriremos Xcode:

jx_post_421_01

 

Creamos un nuevo proyecto:

Create a new Xcode project

Ahora crearemos un Single View Application:

iOS -> Application -> Single View Application

jx_post_421_02

Presionamos en Next y en la siguiente pantalla ingresamos los datos que deseamos para nuestro proyecto, donde deberemos verificar que este seleccionado en el lenguaje de programación Objective-C.

Language: Objective-C

jx_post_421_03

Presionamos Next y la siguiente pantalla es para decidir en donde guardar el proyecto.

jx_post_421_04

Ahora sólo presionamos en Create y quedará creado nuestro proyecto.

Lo siguiente por hacer es borrar los archivos:

ViewController.h

ViewController.m

Main.storyboard

jx_post_421_05

Ahora que hemos borrado los archivos, crearemos un ViewController con su archivo XIB, para esto, seleccionamos el nombre del proyecto con la carpeta amarilla, en este ejemplo:

ProyectoXib -> ProyectoXib

jx_post_421_10

presionamos con botón derecho y en el menú presionamos en:

File -> New -> File…

jx_post_421_06

 

Aparecerá una pantalla donde seleccionamos la opción Cocoa Touch Class:

iOS -> Source Cocoa Touch Class

jx_post_421_07

Presionamos Next y se mostrará una pantalla donde nos pide los datos del ViewController a crear, en este caso le pondré el nombre ViewControllerPrincipal y hay que cerciorarse en marcar la opción Also create XIB file.

jx_post_421_08

Presionamos Next y por último se nos preguntará donde crear los archivos, aquí sólo hay que presionar en Create.

jx_post_421_09

Ya que tenemos estos archivos creados, abriremos el archivo AppDelegate.m e importamos el controlador que acabamos de crear, que en este caso es ViewControllerPrincipal, y lo colocaremos como sigue:

#import “AppDelegate.h”

#import “ViewControllerPrincipal.h”

jx_post_421_10

 

Ahora en el método:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    return YES;
}

Lo modificaremos para crear un objeto del controlador que creamos y lo asignaremos para que esta sea la pantalla que deberá de mostrarse.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

ViewControllerPrincipal *viewPrincipal = [[ViewControllerPrincipal alloc] initWithNibName:@"ViewControllerPrincipal" bundle:nil];
[self.window setRootViewController:viewPrincipal];

[self.window makeKeyAndVisible];

return YES;
}

jx_post_421_11

Por último habrá que quitar dentro de la información general del proyecto que la interfaz principal sea Main. Esto se encuentra en:

Nombre del proyecto -> TARGETS -> Nombre del proyecto -> General -> Main interface

En el ejemplo que tenemos, sería:

ProyectoXib -> TARGETS -> ProyectoXib -> General -> Main interface

En Main Interface deberemos quitar Main para así permitir que la pantalla que creamos, sea la que se vea.

 

jx_post_421_12

Bastará con borrarla y ahora si podemos ejecutar nuestro proyecto y ver la interfaz XIB que creamos.

Detener un temporizador usando NSTimer en iOS

Para detener un temporizador usando NSTimer y suponiendo que se usó el ejemplo propuesto en el post anterior, lo único que hay que hacer para detener el temporizador es lo siguiente:

[self.temporizador invalidate];

self.temporizador = nil;

 

Iniciar un temporizador con NSTimer en iOS

Este es un ejemplo muy sencillo de cómo podemos hacer un contador usando NSTimer.

Lo que haremos es imprimir cada segundo un número consecutivo y lo primero a realizar es crear 2 propiedades de la siguiente manera:

@property (strong, nonatomic) NSTimer *temporizador;

@property (nonatomic) NSInteger contador;

Ahora en donde quiera lanzarse el comienzo del contador se deberá poner la siguiente instrucción:

self.temporizador = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(contar) userInfo:nil repeats:YES];

Por último se colocará un método llamado contar el cual irá imprimiendo el número consecutivo:

– (void)contar {

NSLog(@”Contando: %i”,self.contador);

self.contador++;

}

Eso es todo para empezar un temporizador.

 

Reproduciendo sonidos en nuestra app usando AudioToolbox

En esta ocasión voy a ver cómo se puede reproducir un archivo de sonido usando el framework AudioToolbox, esto es muy útil cuando queremos reproducir archivos con algunos efectos de audio al presionar un botón o realizar cierta acción.

Para iniciar deberemos agregar el framework AudioToolbox.framework, como se indica en la image y presionamos el signo “+”.

jx_post_198_01

Presionamos el botón “Add” y se agregará el framework.

jx_post_198_02

Hecho lo anterior, podemos agregar a nuestro proyecto, un archivo de sonido, para ejemplificar, aquí se usará un archivo en formato .mp3.

Presionamos con el botón derecho del ratón sobre una de las carpetas del proyecto como en este caso Supporting Files y elegimos la opción Add Files To “NombreProyecto”… como se puede ver en la imagen.

jx_post_198_03

Buscamos y seleccionamos el archivo que deseamos, en mi caso coloqué el archivo dentro del proyecto, por lo que sólo seleccionaré las opciones marcadas en la imagen.

jx_post_198_04

Agregado el archivo lo siguiente que haremos será agregar el código necesario. Empezaremos incluyendo en el archivo .h o .m la biblioteca necesaria:

#import <AudioToolbox/AudioToolbox.h>

Ahora donde deseemos usar la reproducción del sonido, incluiremos las siguientes líneas:

SystemSoundID SoundID;

NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"sableon" ofType:@"mp3"];

AudioServicesCreateSystemSoundID((__bridge CFURLRef) [NSURL fileURLWithPath:soundFile], &SoundID);

AudioServicesPlaySystemSound(SoundID);

Se deberá cambiar el nombre del archivo en mi caso llamado sableon (sin la extensión) por el nombre de su archivo y si fuera de otra extensión deberemos cambiar donde dice mp3.

Algo importante a considerar es que deben ser sonidos pequeños, de efectos o tonos de duración corta para que sea reproducido rápidamente, de lo contrario se pueden usar otros métodos para la reproducción del audio deseado.

Con esto agregado únicamente falta probar la reproducción del sonido de acuerdo a como lo hayan implementado, ya sea en la acción como respuesta a presionar un botón, a un gesto o lo que hubiesen implementado.

Obtener medidas de la pantalla en iOS

En algunas aplicaciones que deseamos crear, es necesario obtener las dimensiones de la pantalla del dispositivo, sobre todo ahora con el iPhone 5, por lo que a veces tendremos que hacer una diferencia con las medidas de los iPhone’s anteriores y este.

Para podere obtener dichas medidas se puede agregar el siguiente código:

CGRect pantalla = [[UIScreen mainScreen] bounds];

Esta asignación nos crea un objeto con la información de la pantalla, para obtener el width o height de la pantalla sólo tenemos que hacer referencia a los atributos de pantalla:

pantalla.size.height

o

pantalla.size.width

Con esto obtendremos las dimensiones de nuestros dispositivos con iOS.

Cerrar una pantalla abierta con el método presentModalViewController

En el post Abrir una nueva pantalla usando presentModalViewController mostré como abrir una pantalla haciendo uso del método presentModalViewController, ahora mostraré como cerrar esa ventana que abrimos.

Dentro del método que desean que cierre la ventana se deberá incluir la siguiente línea:

[self dismissModalViewControllerAnimated:YES];

Con esto se cerrará la ventana abierta.

Abrir una nueva pantalla usando presentModalViewController

Una forma de abrir otra pantalla en una aplicación en iOS, es usando el método presentModalViewController de la pantalla actual.

Lo que se debe de realizar es crear una objeto de la pantalla que se quiere abrir, en mi caso usaré una pantalla llamada JXViewController2:

JXViewController2 *view2 = [[JXViewController2 alloc] initWithNibName:@"JXViewController2" bundle:nil];

Ahora ejecutaré la acción para abrir esta pantalla:

[self presentModalViewController:view2 animated:YES];

Con esto se abrirá la ventana que deseamos.

Cambiar el texto del botón atrás de un UINavigationBar

Hay ocasiones en las que nuestra aplicación cuenta con un UINavigationController y una UITableView.

jx_post_100_01

Cuando presionamos en alguno de los items de la tabla hacemos cambio a otra pantalla y en el NavigationBar de esta muestra un botón con el texto “atrás” o “back”.

jx_post_100_02Lo que deseamos hacer es cambiar ese texto a algo que nosotros deseamos. Para lograr ésto, haremos lo siguiente:

Crearemos un UIBarButtonItem y asignarlo al NavigationItem:

UIBarButtonItem *barButtonItemAtras = [[UIBarButtonItem alloc] initWithTitle:@"Regresar..." style:UIBarButtonItemStyleBordered target:nil action:nil];
[self.navigationItem setBackBarButtonItem:barButtonItemAtras];

jx_post_100_03

Eso es todo.

 

Obtener la versión de nuestra app en iOS

En ocasiones para nuestra aplicación en iOS queremos o necesitamos obtener el número de versión que le asignamos para mostrarla en alguna parte de dicha app.

Para realizar esto podemos hacer lo siguiente:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

Con esto ya tenemos en la versión en nuestra variable y la podremos usar para lo que necesitemos.

Usar NSURL con URLs con acentos

Me ha llegado a suceder que hay URLs que cuantan con acentos y cuando a NSURL le paso  este URL termina por devolverme un NULL.

Para poder resolver esto he usado el método stringByAddingPercentEscapesUsingEncoding de un objeto de tipo NSString de la siguiente manera:

NSURL *urlImagen = [[NSURL alloc] initWithString:[url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];

Esto convertirá la cadena correctamente y se obtendrá la información deseada.