Ir para conteúdo
Faça parte da equipe! (2024) ×

Criando aplicativos para o iPhone no Linux (sem Xcode e MacOS X)


☢|EXPL01T3R|☣
 Compartilhar

Posts Recomendados

Introdução

 

1289276447.linuxmacmaca.jpg

Veremos neste documento como desenvolver aplicativos para os dispositivos da APPLE (iPhone, iPod Touch e iPad) sem a necessidade de obter o conjunto super proprietário (Mac OS X, Xcode e MacBook). Muitas pessoas inclusive instrutores de programação para o iPhone diziam ser impossível criar aplicações em ambientes não Mac. Mais impossível ainda com ferramentas de código aberto.

 

Embora seja um desenvolvedor Android, questionamento surgiram, pois já instalaram o Android no iPhone..., o processador do iPad A4 é baseado no Cortex-A8 que no fundo pertence a arquitetura ARM. No site UBM TechInsights podemos obter o RAIO-X na CPU do processado A4 e perceber "a semelhança total" com o núcleo do Samsung S5PC110A01. Então é fácil concluir que o processador do iPad A4 = ARM Cortx A8 (45 nm) = ARM.

 

Foi assim que comecei a minha jornada para a compilação cruzada de aplicativos escrito em C/C++ e Obj-C para os dispositivos da APPLE.

a4-samsung.jpg

Aproveito este artigo para divulgar um appliance Linux baseado no openSUSE que criei para os interessados no desenvolvimento de software para o iPhone utilizando ferramentas open-source e não tem tempo para ficar resolvendo e compilando dependência, como também compatibilidade do mesmo com o seu sistema atual. Este projeto chama-se LiMobile, esta iniciativa nasceu das minhas pesquisas, como também da necessidade de carregar um live CD ou um pendrive com um sistema composto de todo SDK open souce para dispositivos portáteis APPLE.

logo-limobile.png

A mágica para chegar ao resultado final está na pesquisa e no agrupamentos de muitas ferramentas de código aberto, mas em especial vale a pena mencionar o llvm-gcc e o iphonedevonlinux.

 

O LLVM, Low Level Virtual *******, é uma infraestrutura de compilação, seguinte (LATTNER, C, 2006), proporciona componentes modulares e reaproveitáveis para construção de compiladores, assim, reduzindo o tempo e custo para construir um compilador particular. O llvm-gcc. Ele é uma versão do gcc que compila programas C/ObjC em objetos nativos, bitcode LLVM (binário), ou em linguagem assembly LLVM (texto) (LLVM TEAM, 2009).

 

O pacote iphonedevonlinux não passa de um script que faz o download e processa todos os códigos fontes possíveis e imagináveis para compilar o compilador arm-darwin-gcc. A principal vantagem do LiMobile, além de possuir os pacotes com a versão são exata, dispensa horas de download durante a compilação, sendo assim, é efetuado o download apenas dos pacotes proprietários para não violar os licenciamentos da APPLE.

 

Abaixo um screenshot do boot da imagem do projet LiMobile.

thumb_limobile-screen02.png

 

Requisitos e instalação:

 

Software proprietário:

 

Começaremos pela parte proprietária. O arquivo do firmware e SDK 3 do iphone (iPhone1,2_3.0_7A341_Restore.ipsw e iphone_sdk_3.0__leopard__9m2736__final.dmg) são imprescindíveis e serão obtidos por conta própria no site da APPLE ou em FTPs públicos espalhados pela internet (megaupload, rapidshare entre outros). É uma pena, pois se o licenciamento permitisse, a imagem do LiMobile traria consigo já todos os arquivos instalado pronto para compilação.

 

Hardware:

 

O aparelho precisa estar desbloqueado com o jailbreak, cydia, openssh, afc2add e MobileTerminal (opcional). Não vou entrar em detalhes com relação ao desbloqueio do mesmo para não fugir do escopo principal deste documento.

 

Dependências:

 

A lista abaixo de dependências básicas foi o que motivou a criar o LiMobile, não quero passa por esta saga novamente:

  • automake
  • bison
  • cpio
  • flex
  • g++
  • g++-4.3
  • g++-4.3-multilib
  • gawk
  • gcc-4.3
  • git-core
  • gobjc-4.3
  • gzip
  • libbz2-dev
  • libcurl4-openssl-dev
  • libssl-dev
  • make
  • mount
  • subversion
  • sudo
  • tar
  • unzip
  • uuid
  • uuid-dev
  • wget
  • xar
  • zlib1g-dev

 

Primeiramente, baixe o script toolchain.sh do projeto iphonedevonlinux:

 

$ svn checkout iphonedevonlinux - Revision 83: /branches/3.0 ./

 

Na sua pasta home crie as pastas Projects/iphone/toolchain/files/firmware e copie o arquivo do firmware e SDK nas pastas conforme o exemplo abaixo.

 

$ mkdir -p ~/ Projects/iphone/toolchain/files/firmware

$ cp iphone_sdk_3.0__leopard__9m2736__final.dmg ~/ Projects/iphone/toolchain/files

$ cp iPhone1,2_3.0_7A341_Restore ~/ Projects/iphone/toolchain/files/firmware

 

Para iniciar os downloads, compilação e toda magia-negra automatizada, execute o script toolchain.sh:

 

$ ./toolchain.sh all

 

O script efetuará o download e compilará alguns pacote como:

  • dmg2img - Converte imagens/arquivos .dmg para imagens hfsplus. Mais informações no site oficial.
  • llvm-gcc - Compilador utilizado para objetos nativos, bitcode LLVM de programas escrito em C/OBJC. Informações no site oficial.
  • Ferramentas open source para o Darwin (www.opensource.apple.com), o lado opensource do Mac. Abaixo a lista dos pacotes.

 

http://www.opensource.apple.com/tarballs/cctools/cctools-667.8.0.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_authorization/libsecurity_authorization-32564.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_cdsa_client/libsecurity_cdsa_client-32432.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_cdsa_utilities/libsecurity_cdsa_utilities-33506.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_cms/libsecurity_cms-32521.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_codesigning/libsecurity_codesigning-33803.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_cssm/libsecurity_cssm-32993.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_keychain/libsecurity_keychain-34101.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_mds/libsecurity_mds-32820.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_ssl/libsecurity_ssl-32463.tar.gz

http://www.opensource.apple.com/tarballs/libsecurity_utilities/libsecurity_utilities-32820.tar.gz

http://www.opensource.apple.com/tarballs/libsecurityd/libsecurityd-33470.tar.gz

http://www.opensource.apple.com/tarballs/DiskArbitration/DiskArbitration-183.tar.gz

http://www.opensource.apple.com/tarballs/IOKitUser/IOKitUser-388.2.1.tar.gz

http://www.opensource.apple.com/tarballs/IOGraphics/IOGraphics-193.2.tar.gz

http://www.opensource.apple.com/tarballs/IOHIDFamily/IOHIDFamily-258.3.tar.gz

http://www.opensource.apple.com/tarballs/IOStorageFamily/IOStorageFamily-88.tar.gz

http://www.opensource.apple.com/tarballs/IOCDStorageFamily/IOCDStorageFamily-39.tar.gz

http://www.opensource.apple.com/tarballs/IODVDStorageFamily/IODVDStorageFamily-26.tar.gz

http://www.opensource.apple.com/tarballs/WebCore/WebCore-351.9.tar.gz

http://www.opensource.apple.com/tarballs/CF/CF-476.14.tar.gz

http://www.opensource.apple.com/tarballs/configd/configd-210.tar.gz

http://www.opensource.apple.com/tarballs/xnu/xnu-1228.7.58.tar.gz

http://www.opensource.apple.com/tarballs/xnu/xnu-1228.3.13.tar.gz

http://www.opensource.apple.com/tarballs/Libc/Libc-498.tar.gz

http://www.opensource.apple.com/tarballs/launchd/launchd-258.1.tar.gz

http://www.opensource.apple.com/tarballs/DirectoryService/DirectoryService-514.23.tar.gz

http://www.opensource.apple.com/tarballs/JavaScriptCore/JavaScriptCore-466.1.tar.gz

 

Durante a execução, o código fonte do dmg2img será copilado para posterior utilização no pacote SDK do iPhone.

Trying to mount the iPhone SDK dmg...

dmg2img v1.6.1 is derived from dmg2iso by vu1tur ([email protected])

/home/mobile/Projects/iphone/toolchain/files/iphone_sdk_3.0__leopard__9m2736__final.dmg--> /home/mobile/Projects/iphone/toolchain/tmp/iphone_sdk_3.0__leopard__9m2736__final.img

reading property list, 522739 bytes from address 2237401625 …

partition 0: begin=195, size=430, decoded=284

partition 1: begin=914, size=430, decoded=284

partition 2: begin=1632, size=430, decoded=284

partition 3: begin=2367, size=430, decoded=284

partition 4: begin=3088, size=430, decoded=284

partition 5: begin=3799, size=516090, decoded=347564

partition 6: begin=520170, size=430, decoded=284

decompressing:

opening partition 0 ... [2] 100.00% ok

opening partition 1 ... [2] 100.00% ok

opening partition 2 ... [2] 100.00% ok

opening partition 3 ... [2] 100.00% ok

opening partition 4 ... [2] 100.00% ok

opening partition 5 ... [8684] 100.00% ok

Archive successfully decompressed as /home/mobile/Projects/iphone/toolchain/tmp/iphone_sdk_3.0__leopard__9m2736__final.img

You should be able to mount the image [as root] by:

modprobe hfsplus

mount -t hfsplus -o loop /home/mobile/Projects/iphone/toolchain/tmp/iphone_sdk_3.0__leopard__9m2736__final.img /mnt

In order to extract iphone_sdk_3.0__leopard__9m2736__final.dmg, I am going to mount it.

This needs to be done as root.

SDK is version 3.0.1

Extracting iPhoneSDKHeadersAndLibs.pkg...

Extracting MacOSX10.5.pkg...

Unmounting iPhone SDK img...

Headers extracted.

 

Logo em seguida, o arquivo de firmware do iPhone é descompactado para extração dos arquivos necessários com a chave criptográfica obtida em tempo real na internet.

Checksum of firmware file is valid.

Archive: /home/mobile/Projects/iphone/toolchain/files/firmware/iPhone1,2_3.0_7A341_Restore.ipsw

inflating: /home/mobile/Projects/iphone/toolchain/tmp/Restore.plist

Firmware Details

Device Class: iPhone

Product Version: 3.0

Build Version: 7A341

Restore RamDisk: 018-5305-002.dmg

Restore Image: 018-5301-002.dmg

Board Config: n82ap

Unzipping 018-5301-002.dmg...

Archive: /home/mobile/Projects/iphone/toolchain/files/firmware/iPhone1,2_3.0_7A341_Restore.ipsw

inflating: /home/mobile/Projects/iphone/toolchain/tmp/018-5301-002.dmg

We need the decryption key for 018-5301-002.dmg.

I'm going to try to fetch it from

I found it!

Mounting 018-5301-002.dmg...

Decrypting 018-5301-002.dmg...

dmg2img v1.6.1 is derived from dmg2iso by vu1tur ([email protected])

/home/mobile/Projects/iphone/toolchain/tmp/018-5301-002.dmg.decrypted --> /home/mobile/Projects/iphone/toolchain/tmp/018-5301-002.dmg.decrypted.img

 

reading property list, 116195 bytes from address 208878440 …

partition 0: begin=195, size=430, decoded=284

partition 1: begin=914, size=430, decoded=284

partition 2: begin=1632, size=430, decoded=284

partition 3: begin=2367, size=430, decoded=284

partition 4: begin=3088, size=430, decoded=284

partition 5: begin=3800, size=105735, decoded=71204

partition 6: begin=109817, size=430, decoded=284

decompressing:

opening partition 0 ... [2] 100.00% ok

opening partition 1 ... [2] 100.00% ok

opening partition 2 ... [2] 100.00% ok

opening partition 3 ... [2] 100.00% ok

opening partition 4 ... [2] 100.00% ok

opening partition 5 ... [1775] 100.00% ok

Archive successfully decompressed as /home/mobile/Projects/iphone/toolchain/tmp/018-5301-002.dmg.decrypted.img

modprobe hfsplus

mount -t hfsplus -o loop /home/mobile/Projects/iphone/toolchain/tmp/018-5301-002.dmg.decrypted.img /mnt

In order to extract 018-5301-002.dmg, I am going to mount it.

This needs to be done as root.

Copying required components of the firmware...

Unmounting...

Firmware extracted.

Building the toolchain...

Finding and extracting archives...

cctools-667.8.0

CF-476.14

configd-210

DirectoryService-514.23

 

...

 

Vá tomar um CAFÉ...

 

...

Se tudo estiver bem, a compilação do llvm-gcc e outros finalizará e teremos as seguintes mensagens finais:

checking where to find the target ranlib... pre-installed

checking where to find the target strip... pre-installed

checking where to find the target windres... pre-installed

checking whether to enable maintainer-specific portions of Makefiles... no

updating cache ./config.cache

creating ./config.status

creating Makefile

Building gcc-4.2-iphone...

Build progress logged to: /home/mobile/Projects/iphone/toolchain/toolchain/bld/gcc-4.2-iphone/make.log

It seems like the toolchain built!

Cleaning up...

All stages completed. The toolchain is ready.

 

Para compilar o um programa em c, basta entrar na para ~/Projects/iphone/toolchain/apps/HelloWorldFirst. Encontraremos nesta pasta um convencional HellWord conforme o exemplo abaixo, para compilá-lo basta utilizar o comando make.

 

É necessário se cadastrar para acessar o conteúdo.

 

Vamos direto ao código em objetive-C, localizado em ~Projects/iphone/toolchain/apps/HelloToolchain. Ao entrar nesta pasta utilize o comando make para compilar o projeto. E logo em seguida define o IP do seu dispositivo móvel para um posterior deploy como no exemplo abaixo:

 

$ make

$ export IP=10.0.0.2

$ make deploy

 

Pronto, nesta etapa o dispositivo sera reiniciado e um novo aplicativos será acrescentado na area de trabalho. Para finalizar, deixo abaixo um vídeo demonstrativo do projeto o LiMobile.

 

[video=youtube;zHyU0kNVD54]

 

Creditos:cabelo(VOL)

python-doc-icon.jpg

wVNulLU.gif

Link para o comentário
Compartilhar em outros sites

  • 2 semanas atrás...
Este tópico está impedido de receber novos posts.
 Compartilhar

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.