domingo, 16 de diciembre de 2012

Como instalar Perl en el iphone ios

Esta vez vamos a aprender a instalar Perl en nuestro iPhone/iPod/iPad,de momento yo lo he probado en ipod touch 3g/4g y iphone 4 iOS 5.1.1 con jailbreak.

Necesitan jailbreak y iOS 5,no lo he probado en iOS 4 o 3 pero creo que también funciona :D

Solo les tengo malas noticias,este lenguaje usado en iOS esta dedicado al scripting,ya que no esta(no he encontrado) UICaboodle para perl y crear interfaces graficas basadas en UIApliction :(.

Osea que solo lo podremos usar en scripts como es el caso de ruby,no como python que si incluye UICaboodle por ejemplo esta es la app de python que se instala con python(hello word) y lo que hace es importar los contactos y mostralos en GUI:


# Special thanks goes to Dave Arter (dave@minus-zero.org)
# for actually writing most of this sample application!!

# While I managed to get PyObjC working, I didn't actually
# know any Python to go with it ;P. - Jay Freeman (saurik)

import sys

import objc
from _uicaboodle import UIApplicationMain
from objc import YES, NO, NULL
from sqlite3 import dbapi2 as sqlite 

objc.loadBundle("UIKit", globals(), "/System/Library/Frameworks/UIKit.framework")

class PYApplication(UIApplication):
    def getName(self, contact):
        name = contact["first"]
        if contact["last"] is not None:
            name += " " + contact["last"]
        return name

    @objc.signature("i@:@")
    def numberOfSectionsInSectionList_(self, list):
        return len(self.sections_)

    @objc.signature("@@:@i")
    def sectionList_titleForSection_(self, list, section):
        return self.sections_[section]["title"]

    @objc.signature("i@:@i")
    def sectionList_rowForSection_(self, list, section):
        return self.sections_[section]["row"]

    @objc.signature("i@:@")
    def numberOfRowsInTable_(self, table):
        return len(self.contacts_)

    @objc.signature("@@:@i@@")
    def table_cellForRow_column_reusing_(self, table, row, col, reusing):
        contact = self.contacts_[row]
        if reusing is not None:
            cell = reusing
        else:
            cell = UIImageAndTextTableCell.alloc().init()
        cell.setTitle_(self.getName(contact))
        return cell

    @objc.signature("c@:@i")
    def table_canSelectRow_(self, table, row):
        return NO

    @objc.signature("v@:@")
    def applicationDidFinishLaunching_(self, unused):
        self.contacts_ = []
        self.sections_ = []

        db = sqlite.connect(self.userHomeDirectory() + "/Library/AddressBook/AddressBook.sqlitedb")
        cursor = db.cursor()
        cursor.execute("select first, last from ABPerson where first is not null order by first")
        for first, last in cursor.fetchall():
            self.contacts_.append({"first": first, "last": last})
        cursor.close()
        db.close()

        outer = UIHardware.fullScreenApplicationContentRect()
        self.window = UIWindow.alloc().initWithFrame_(outer)

        self.window.orderFront_(self)
        self.window.makeKey_(self)
        self.window.setHidden_(NO)

        inner = self.window.bounds()
        navsize = UINavigationBar.defaultSize()
        navrect = ((0, 0), (inner[1][0], navsize[1]))

        self.view = UIView.alloc().initWithFrame_(self.window.bounds())
        self.window.setContentView_(self.view)

        self.navbar = UINavigationBar.alloc().initWithFrame_(navrect);
        self.view.addSubview_(self.navbar)

        self.navbar.setBarStyle_(1)

        navitem = UINavigationItem.alloc().initWithTitle_("Contact List")
        self.navbar.pushNavigationItem_(navitem)

        i = 0
        letter = u""
        for contact in self.contacts_:
            name = self.getName(contact)
            now = unicode(name[0])
            if letter != now:
                letter = now
                self.sections_.append({"row": i, "title": now})
            i += 1

        lower = ((0, navsize[1]), (inner[1][0], inner[1][1] - navsize[1]));
        self.list = UISectionList.alloc().initWithFrame_(lower)
        self.view.addSubview_(self.list)

        col = UITableColumn.alloc().initWithTitle_identifier_width_("Name", "name", 320)

        table = self.list.table();
        table.setSeparatorStyle_(1)
        table.addTableColumn_(col)
        table.setReusesTableCells_(YES)

        self.list.setDataSource_(self)
        self.list.reloadData()

UIApplicationMain(sys.argv, PYApplication)



Y se ejecuta con un script en bash:


#!/bin/bash
exec "$(dirname "$0")"/Python "$(dirname "$0")"/HelloPython.py

Así se podría hacer en Perl,pero no hay nada de documentación y tampoco encuentro UICaboodle para perl,para por lo menos traducir las aplicaciones de Python a Perl y crear algunas apps sencillas para que sirvan de ejemplo.

Pero bueno,de todas formas en cydia nos dan muchos módulos muchos para usarlos en scripting desde terminal,que se encuentran en CPAN.




Tutorial



1.Necesitamos ya tener el jailbreak pero también necesitamos instalar de cydia:

openssh

APT 0.7 HTTPS Method

wget 

sbsettings y el toogle de ssh

Y por ultimo Terminal








Solo entran a cydia,los buscan y instalan


2.Ahora en nuestro sistema de escrtitorio necesitamos un cliente ssh,en mi caso Archlinux instale openssh

 sudo pacman -S openssh

 Y nos conectamos por ssh

Encendemos el ssh del iphone y en la Pc/Mac

ssh root@ip_del_iphone

La ip del iphone esta en mismo sbsettings




3.Descargamos el .pub

wget http://coredev.nl/cydia/coredev.pub

Lo añadimos
apt-key add coredev.pub
Usamos un pipe para mandarlo a sources

echo 'deb http://coredev.nl/cydia iphone main' > /etc/apt/sources.list.d/coredev.nl.list
Recargamos los repos

apt-get update

4.Y instalamos

No probé

apt-get install perl

Pero puede que funcione ya que así instale python

Pero para mas seguro:

Salimos del ssh

exit

Entramos a Cydia >> Manejar >> Fuentes y estará una repo con el camello :D


Entramos y buscamos Perl


Instalamos



Hacemos un respring.

5.Creamos Hola Mundo

Abrimos terminal y escribimos:

 echo '#!/usr/bin/local/perl' > hola.pl && echo 'print "Hola Mundo!!!\n"' >> hola.pl

Pueden por ssh,o por con un editor como el de iFile

Y listo


Eso es todo si quieren módulos busquen en la repo hay muchos :D

Referencias:






No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.