iTerm 2: ¿cómo configurarlo?

La terminal, o bash, esa querida amiga que nos proporciona acceso a bajo nivel, que utilizamos un día sí y otro también. No es para menos que debamos configurarla, que nos resulte amena y legible su empleo. No soy de las que usan la terminal por defecto del mac con el fondo blanco y las letras negras, mi vista no me lo permite….son hormiguitas danzantes que se escapan de mi. No. No me gusta. Así que os escribo este tutorial para configurar iTerm 2 (o al menos para que os sirva de referencia para configurarla luego a vuestro antojo) y sí, también tiene un aspecto un tanto egoísta, es para no olvidarme cómo lo he configurado, para el futuro xD

iTerm 2

La terminal que empleo en mi día a día, se llama iTerm 2, está creada para los usuarios Mac OS X y la uso porque me encanta el nivel de configuración que tiene; puedes organizar el número de pantallas agrupándolas en diversos paneles – horizontales y verticales – , cambiar el color de las pestañas, abrir las ventanas con un determinado perfil o sesión, mostrar un historial en un panel auxiliar, comandos que te permiten mostrar los comandos más frecuentes y un larguísimo etcétera.

Screen Shot 2016-03-01 at 20.27.23

Panel dividido horizontalmente. El color de la pestaña también la heredan sus hijitas.

Sigue leyendo

Share

App Thinning y el error: ENABLE_BITCODE

XCode_Objective-C

Con la introducción de iOS 9 de forma oficial hace unas semanas, es hora de mirar un poco más de cerca los temas que nos afectarán con el cambio al momento de adaptar nuestro código de una versión a otra. En esta entrega hablaré sobre App Thinning y el error que nos arroja Xcode 7 al migrar nuestros proyectos creados en versiones anteriores: ENABLE_BITCODE.

App Thinning

ENABLE_BITCODE: ¿Qué rayos es esto? cuando ejecutas tu app en Xcode 7, nos aparece este error (si estás migrando tu proyecto). Pues Apple nos indica en su documentación, que con la introducción del WatchOS y el tvOS aparece un nuevo término: “App Thinning”; un sistema de optimización que se ha implementado para disminuir el tamaño que ocupa el OTA de iOS 9 y además para ser aplicado a las aplicaciones que desarrollemos de ahora en adelante en cualquier SO (WatchOS, tvOS o iOS) lo que mejorará la experiencia de usuario.

Leamos el extracto:

The App Store and operating system optimize the installation of iOS and watchOS apps by tailoring app delivery to the capabilities of the user’s particular device, with minimal footprint. This optimization, called app thinning, lets you create apps that use the most device features, occupy minimum disk space, and accommodate future updates that can be applied by Apple. Faster downloads and more space for other apps and content provides a better user experience.

Así pues, App Thinning posee tres componentes:

Sigue leyendo

Share

Configurar información de nuestra aplicación iOS en la sección Settings

swift

Si te ha tocado trabajar en equipo o has repartido tu aplicación entre varias personas para que actúen como Beta Tester, probablemente te habrás encontrado con el dilema de ¿qué versión de tu app tienen exactamente?; y aunque uses herramientas como Fabric o Hockey App para poder distribuir y controlar las versiones, nada ayuda más que configurar en la sección Settings (Ajustes) del iPhone la versión de tu App, así como cualquier otro tipo de característica que desees implementar y que pueda verse rápidamente.

Actualización: Si acabas de instalar iOS 9, no verás listado tus settings en la info de la aplicación. Deberás reiniciar tu dispositivo para que puede volver a verse. #EpicFailDeiOS

Para ello, deberás realizar esta serie de pasos:

1.- Crear un Settings.bundle con un  Root.plist cuya estructura deberá verse como la siguiente:

Captura de pantalla 2015-09-07 a las 9.39.42

Añadirás al array de Preference Items un Dictionary con los siguientes componentes:

  1. Type: Tipo de ítem, en nuestro caso es de tipo Title
  2. Title: El título que tendrá nuestro ítem, le colocaremos “version:”
  3. Identifier: Es el key que se usará para identificar el número de la versión de nuestra app

P.D: Si te vuelves loc@ tratando de realizar el bundle, no desesperes puedes bajarte el que he creado yo en mi github, solo sigue las instrucciones (básicamente es descargar y arrastrar al proyecto) aquí: https://github.com/phynet/SettingBundleiOSProject

2.- Ya, para dar por finalizado el tutorial, escribe las líneas de código siguiente y haz una llamada desde: didFinishLaunchingWithOptions:

Objective-C

Swift

Share

¿Cómo abrir las preferencias del iPhone desde nuestra app?

swift

 

En algunos momentos necesitaremos abrir las preferencias de iPhone para que el usuario pueda darle permisos, por ejemplo, a nuestras app para hacer algo. Un ejemplo sería configurar un teclado custom, hecho por nosotros; a su vez de hacerle un tutorial al usuario enseñándole en que sección de la configuración de su iPhone debe aceptar los permisos, podríamos abrir desde nuestra aplicación las preferencias de usuario.

 

 

En el gif anterior, vemos un ejemplo de como abrir las preferencias de usuario en la sección de teclados.

Escribamos algo de código:

Sigue leyendo

Share

Usar código Swift en Objective-c

swift

  1. Primero debemos habilitar el uso de ficheros Swift. Para ello nos dirigimos a “Build Settings” y en buscar colocamos “Swift” , encontraremos la opción: Build Options, y Embedded Content Contains Swift Code, seleccionamos Yesswift
  2. A continuación, en nuestra clase, o struct debemos colocar como prefijo @objc
  3. Y finalmente instanciamos la clase como siempre:
Share

¿Cómo usar removeObjectAtIndex de un Array en Swift?

swift

Para emplear el removeAtIndex, que permite eliminar un elemento contenido en un array, del cual no sabemos su índice, hay que hacer un par de maromas en Swift 1.2.

Veamos el código en Objective-c:

Objective-C:

Resulta sencillo eliminar directamente de un array (selectedRows) de tipo mutable, es decir un NSMutableArray, un elemento contenido en él empleando removeObject.

¿Y qué tenemos que hacer en Swift?:

 

Sigue leyendo

Share

Cosas de Eclipse/Android

Ahora que estoy metiendome mucho más a desarrollar para Android (la verdad, no sé mucho…me estresa un poco la lentitud en la que aprendo…Java no es mi lenguaje favorito, todo gracias a horrendas experiencias en el pasado) pues estoy intentado aprender  resolver ciertos errores y advertencias que genera Eclipse.

Hoy por ejemplo,me aparecia:

 ActivityManager: Warning: Activity not started, its current task has been brought to the front

Seguro para los más versados en el tema, sabrán la solución. Pero yo, la n00b tuve que buscar qué demonios significaba eso…; con una simple búsqueda en Google entendí que ocurría. Pues que para que se pueda ejecutar el código se debe compilar primero, si  no se hace ningún cambio al código este no compila de forma automática y arroja esa advertencia.

Ahora ya sabes, toca el código, quita un espacio o …whatever.

Enjoy Android…

 

Share

Crash NSLayoutConstraint (iOS 6)

Cuando nos toca actualizar cualquier SDK los valores añadidos de dicha actualización, muchas veces  generan problemas con programas realizados con el SDK anterior, bien sea porque hay líneas “Deprecated” u obsoletas, o porque hay que añadir alguna otra línea, funcionalidad, etc del API (los que usan Java viven esta tortura constantemente :p)

Así me ocurrió con la actualización de XCODE de 4.2 a 4.5 y que ahora usa iOS 6. Y aunque este post lo debí escribir hace mucho tiempo (2012 ya se fue) pues nunca es tarde para mencionar lo ocurrido.

Algunas nuevas funcionalidades de XCODE con iOS 6 es la utilización de Storyboards, es automático de hecho, y debería ser así. Sin embargo ya estaba a medio camino del proyecto cuando tuve que actualizar y no me di cuenta que las nuevas XIB que estaba creando me colocaban un “Check” en una opción que jamás había tocado antes. El AutoLayout.

¿Qué ocurre con esto? pensarás. Pues sencillo, cuando ejecutas tu programa en iOS 6 va de maravilla, puesto que ese AutoLayout es precisamente para iOS 6 y sus StoryBoards, si no usas StoryBoard no pasa nada. El problema aparece cuando bajas del iOS 6 al iOS 5 o 5.1 que NO es una funcionalidad de este sistema operativo y por lo tanto se cae al tratar de ejecutar el XIB con el AutoLayout marcado con el check y aparece el error de abajo:

La solución es sencilla: busca todos los XIB y desmarca la opción AUTOLAYOUT. ¡Presto!

Share

Depurando con DLog

Muchas veces, sino siempre, es necesario realizar depuraciones en nuestro código para determinar si hemos hecho las cosas bien o no, y básicamente para imprimir en la consola los valores que nos interesa observar. En Objective-C existe una forma, la tradicional de depurar que es usando la macro NSLog

NSLOG seguirá mostrando información en consola, aunque activemos la opción DEBUG (debug flag). Para evitar esto, existe la opción para debug llamada DLOG, que es otro macro que dejará de imprimir en consola cuando la bandera DEBUG este desactivada. De este modo, podremos dejar nuestros comentarios DLOG si desactivamos el modo debug.

Basta simplemente con hacer una cabecera (.h) (que yo llamare Macros.h) con el siguiente código:

 

y para usarlo en todo el proyecto, simplemente importalo al archivo

que se vería así

Ahora intenta emplearlo de la misma forma que con el NSLog. ¿Qué tal?

Dejo el código fuente para que lo veas mejor: aquí

 

Share