miércoles, 14 de octubre de 2015

Solucionando NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -XXXXX) Xcode ó SSL con iOS 9

Abre tu archivo .m que realiza la conexión y antes de la linea de código que dice @implementation

 agrega el siguiente código: 

@interface NSURLRequest (interfaceSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;

@end

después ubica en tu código la linea que realiza la conexión , ya que la encontraste escribe lo siguiente que deberá ir antes de la linea de código de tu conexión

 [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:@"tu_host"];


El host debe ser solo el DNS por ejemplo si tienes http://evalbyte.com/conexion/archivos, lo que debes tomar es solo "evalbyte.com" como host, si comienza con www (http://www.evalbyte.com/conexion/archivos) deberías poner www.evalbyte.com ó evalbyte.com (prueba con ambas).


por ejemplo si tienes tu conexión en un método , esta linea es lo primero que invocarías :

-(NSData*)consultaPost:(NSString*)postConsulta urlCadena:(NSString*)URL{
    
   
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:@"tu_host"];

código de conexión o algunas inicializaciones

----
---
---

}

////// Si estas utilizando iOS 9, en algunos casos puedes omitir ó no las instrucciones anteriores, pero si debes modificar el .plist  con los siguientes pasos.

Ubica en tu Xcode del lado izquierdo una carpeta con nombre Supporting Files, dentro de ella busca un archivo info.plist (verifica que no estés utilizando el info.plist de TEST)

colocate en ese archivo y con el botón derecho de mouse da click , te mostrara un sub menú , selecciona abrir como codigo fuente (open as --> source code).


casi al final encontraras estas etiquetas que cierran al xml

</dict>
</plist>

Añade sobre ellas lo siguinte

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>TU HOST</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>

</dict>


debería quedar integrado así:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>TU HOST</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>

</dict>
</dict>

</plist>


Compila y tu código debería funcionar.

Solucionando error: Undefined symbols for architecture xxxxx: "_inflate" Xcode

Undefined symbols for architecture armv7: "_inflate" 
Undefined symbols for architecture i386: "_inflate"
Undefined symbols for architecture armv6: "_inflate"
.......

Para resolver este problema solo hay que realizar los siguientes pasos (se utilizo Xcode 6.4, pero si utilizas alguna otro los nombres de los elementos son similares):

Ubica en Xcode el lado izquierdo de la pantalla (donde tienes infinidad de carpetas y tus archivos .m y . h) como primer elemento de ese árbol de archivos es tu proyecto dale click, veras como cambia la pantalla derecha donde mostrara dos títulos ---> PROJECT  y TARGETS.

Ubicate en TARGETS y selecciona el elemento contenido en TARGETS (si tienes más de un target repite los pasos en cada uno que tenga los títulos que mas abajo veremos)

Al seleccionar veremos como cambia la pantalla central , en ella encontraras un menú que comienza con --- > General , Capabilities, Info, Build settings....... ( si en tu target no se muestra este menú busca el elemento de tu target que lo contenga.)

Ubicate en General y busca : Linked Frameworks and Libraries (te darás cuenta que es el correcto ya que contiene archivos con extension framework en forma de maletas).


Ahora ubica un botón + (ó un botón que nos permita agregar)


Busca lo siguiente y añadelo : libz.dylib Y compila de nuevo.


Tu aplicación debería pasar sin problema.

 

domingo, 23 de junio de 2013

Solucionar error (-1) para iPhone 4S

Esta solución (Funciona solo en maquinas MAC) es para todos aquellos que quisieron instalar el nuevo iOS 7 o de alguna manera llegaron a este error en pantalla de su iPhone 4S (Solo realice el rescate en iPhone 4S no se si funcione para el 4): y que por mas que lo intentaron no pudieron restaurar la copia anterior , aquí la solución.

Tendran que bajar estos dos archivos :


 iOS 6 (este es algo pesado casi un gb pero vale la pena)

https://docs.google.com/file/d/0B0ipwbY5aADyeGNVZ3d6cVZXSDQ/edit?usp=sharing

Y

Redsn0w


https://sites.google.com/a/iphone-dev.com/files/home/redsn0w_mac_0.9.15b3.zip?attredirects=0&d=1



Ya que se tienen los archivos descargados abrimos el paquete descargado Redsn0w,

(buscamos el logo de una piña) al abrir por primera vez este archivo en nuestra mac nos mandara un mensaje relacionado a que desconoce el editor, para saltar este paso colocamos de nuevo el puntero en el archivo de la piña, y con el botón derecho del mouse o pad damos clic y desde ese menú desplegable damos en abrir mostrándonos la siguiente pantalla y ...

Paso 0.- Conecta tu iPhone luego...

Paso 1.- Seleccionamos Extras:





Paso 2.- Seleccionamos Even more:
Paso 3.- Seleccionamos Restore:

Paso 4.- Seleccionamos IPSW:
Paso 5.- Aqui debemos ubicar el archivo iOS6 que descargamos previamente, lo seleccionamos y pulsamos sobre Open

Paso 6.- Seleccionamos Yes
Paso 7.-  Por cierto verificar mas abajo que tengas conectado el iPhone


 y si esta todo en orden comenzara la instalación , verán en la pantalla de su iPhone el logo de la manzana y la barra instalando todo de nuevo, al terminar el proceso saldrá una pantalla de instalación concluida, así que ahora desconecta y vuelve a conectar el iPhone para que cargues tus respaldos si es que los tienes.


Si les funciona no se olviden de compartir esta pagina con mas amigos para que puedan recuperar su iPhone, y si no es mucho pedir  visiten algún enlace alrededor de esta pagina , Saludos a todos. 

martes, 23 de octubre de 2012

Phonegap, Enviando datos a mysql

Cuando comenzamos a desarrollar para móvil y nos adentramos mas, nos surge la duda "¿como envío información de mi formulario a una base de datos?",  la respuesta a este enigma es: utilizando ajax y un servidor remoto que nos permita crear un archivo .php, .jsp, .asp, etc que haga la interacción a X base de datos, que en este caso - ejemplo utilizaremos un archivo .php y base de datos Mysql. El código se capturo dentro de Dreamweaver 6, que ya tiene integrado Phonegap y Jquerymobile, por lo que si utilizan integración de phonegap en Xcode o Eclipse les recomiendo solo añadir los links .js faltantes al código html resultante de este ejemplo.
 
 
Creando Tabla mysql y el archivo .PHP
 
Para guardar la información en la base de datos requerimos de un puente, esto es un archivo PHP que por medio de Post obtendrá los datos que enviemos desde nuestra aplicación móvil y este lo enviara a la base de datos.

Tabla mysql

1.- Create database phonegap

2.- CREATE TABLE `clientes` (
  id_clientes int(11) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) DEFAULT NULL,

`mail` varchar(50) DEFAULT NULL,
`telefono` varchar(50) DEFAULT NULL ,
  PRIMARY KEY (`id_clientes `)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;



Archivo .PHP

1.- Creamos un archivo conecta.php (puede ser cualquier otro nombre)

2.- <?php

//Conexión a base de datos
$server = "localhost";
$username = "root";
$password = "";
$database = "phonegap";
$con = mysql_connect($server, $username, $password) or die ("Error al conectar: " . mysql_error());
mysql_select_db($database, $con);

//Obtenemos por Post los valores enviados desde el móvil

$nombre = $_POST["name"];
$mail = $_POST["mail"];
$telefono = $_POST["telefono"];

//Insertamos en la base de datos

$sql = "INSERT INTO clientes (id_clientes, nombre, mail, telefono ) ";
$sql .= "VALUES (' ', '$nombre', '$mail', '$telefono')";
if (!mysql_query($sql, $con)) {
 die('Error: ' . mysql_error());
} else {
// Mostramos un mensaje, que sera el que se desplegara en nuestro móvil al concluir el guardado de datos.

 echo "Datos guardados";
}
mysql_close($con);
?>



En el código anterior se muestra como crear la conexión a la base de datos, para después obtener por POST los valores que envío el móvil para así finalizar insertando en la base de datos y enviar un mensaje final hacia el móvil, notaran que es similar a como lo hacen los formularios de una pagina WEB.




Creando el conector móvil
 
Archivo .html (móvil)
 
Creamos el archivo en html en este caso prueba.html y dentro de <head></head> escribimos el <script> lo siguiente:

 <script>
        $(function() {

            $("#enviadatos").click(function() {
                var elNombre = $("#nombre").val();
    var elMail = $("#mail").val();
    var elTelefono = $("#telefono").val();

$("#nombre").val(" ");
    $("#mail").val(" ");
    $("#telefono").val(" ");
               
                    $.ajax({
                      type: "POST",
                      url: "conecta.php",
                      data: ({name: elNombre, mail: elMail, telefono: elTelefono }),
                      cache: false,
                      dataType: "text",
                      success: onSuccess
                    });
               
            });

          

            function onSuccess(data)
            {
             
    alert(data);
            }

        });
    </script>



El código se invoca cuando se presiona el botón con id= "enviadatos" de nuestro formulario móvil, paso seguido se guardan en variables los valores de en este caso los input con los id: nombre, mail, telefono , que serán enviados por medio de Ajax a nuestro archivo conecta.php que sera el encargado de procesar la información y retornar algún mensaje.

Y listo esos son los pasos para enviar datos desde el móvil hacia una base de datos.

aquí abajo esta el código completo del formulario móvil.


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Aplic. Web de jQuery Mobile</title>


<link rel="stylesheet" href="jquery-mobile/jquery.mobile-1.2.0.min.css" />
<!--script src="jquery-mobile/jquery-1.6.4.min.js"></script-->
<script src="jquery-mobile/jquery-1.8.0.js"></script>
<script src="jquery-mobile/jquery.mobile-1.2.0.min.js"></script>

<script>
        $(function() {

            $("#enviadatos").click(function() {
                var elNombre = $("#nombre").val();
    var elMail = $("#mail").val();
    var elTelefono = $("#telefono").val();
$("#nombre").val(" ");
    $("#mail").val(" ");
    $("#telefono").val(" ");
               
                    $.ajax({
                      type: "POST",
                      url: "conecta.php",
                      data: ({name: elNombre, mail: elMail, telefono: elTelefono }),
                      cache: false,
                      dataType: "text",
                      success: onSuccess
                    });
               
            });

        
            function onSuccess(data)
            {
            
        alert(data);
            }

        });
    </script>

</head>

<body>

<div data-role="page" id="page">
 <div data-role="header">
  <h1>Clientes</h1>
 </div>

<div data-role="fieldcontain">
          <label for="name">Nombre:</label>
          <input type="text" name="nombre" id="nombre" value=""  />
   </div>
           
            <div data-role="fieldcontain">
          <label for="mail">Mail:</label>
          <input type="text" name="mail" id="mail" value=""  />
   </div>
        
                  
             <div data-role="fieldcontain">
          <label for="telefono">Tel:</label>
          <input type="text" name="telefono" id="telefono" value=""  />
   </div>
 

  <div class="ui-body ui-body-b">
  <fieldset class="ui-grid-a">
    <div class="ui-block-a"><button type="submit" data-theme="d">Cancelar</button></div>
    <div class="ui-block-b"><button type="button" data-theme="a" id="enviadatos">Enviar</button>
            
                       
                </div>
     </fieldset>
        </div>

<div data-role="footer">
  <h4>Clientes</h4>
 </div>

</div>
</body>
</html>





- Beagle Mobil Education.