iOS越狱开发环境搭建 theos

来源:互联网 发布:mysql怎样导出数据库 编辑:程序博客网 时间:2024/04/30 02:48

iOS越狱开发环境搭建 theos

http://www.devdiv.com/home.php?mod=space&uid=54&do=blog&id=7596

 

 

前段时间在开发一个越狱应用,用于在通知中心显示阳历和阴历,名为Chinese Calendar for Notification Center。第一次研究越狱开发,四月七号开始编码到昨天,在这两周里,从无到有,接触了Notification Center Widget和Preference Bunlde应用的开发,深切地感觉到越狱文档的稀少和零散,以及找资料的痛苦,期间甚至有“没人提供文档,我来提供!”的想法。文档是个浩大的工程,目前的水平也无法做到。所以一点点来,先从开发任何应用都必经的环境搭建开始。

废话已经说的够多了,下面进入正题

需要什么知识?

  • ObjectiveC。ObjectiveC是iOS开发的官方唯一语言,了解它肯定只会对iOS开发有好处没坏处。但对于越狱开发,ObjectiveC并不是唯一选择,由Lua语言开发的Wax框架也可用于开发iOS App。注意:本文介绍的环境是用来编译ObjectiveC程序的,如果你想使用Wax进行开发,请参考这篇教程。
  • iOS Framework。需要对iOS常用的框架有了解。
  • Make。了解即可。

需要什么软件?

  • iOS SDK。我们是要开发iOS平台上的应用,SDK自然必不可少。
  • Theos。Theos是一个基于Make的编译环境,我们正是用它来编译生成deb文件的。
  • ssh。本机中需要装有ssh-client,设备中需要装有ssh-server。

如何安装?

  • iOS SDK。如果你有台Mac,并且安装了xCode,那么iOS SDK也就已经随之一起安装了。如果你想在Linux中开发,那也没有问题!前提是你的系统中装有iPhone Toolchain。如果已经安装了Toolchain,那就不需要再做其他工作了。如果没有,Github上已经有人写了一段脚本,在Linux上运行它就可以安装Toolchain和Theos。想在Windows上开发?装个Linux吧!
  • Theos。运行下面的脚本把Theos从库中下载到本地(你可以修改/opt/theos为任意你想要的路径)。
    git clone https://github.com/DHowett/theos /opt/theos

    下载完成之后,为了方便起见,我们再配置一下THEOS环境变量:

    export THEOS=/opt/theos

如何创建应用?

Thoes提供了一个叫做NIC(New Instance Creator)的工具,它会根据模板文件(.nic)创建与之对应的应用模板(在这里,模板中包含了源文件、Makefile、plist文件等)。Theos自带有5个模板:application, library, preference bundle, tool, tweak,这肯定是不够的,但是没有关系,已经有人为我们提供了其他的模板,例如:Notification Center Widget的模板和SBSettings Toggle的模板。

下面我们以开发Notification Center Widget为例。
首先我们需要安装Notification Center Widget模板至theos,运行下面的脚本,把.nic文件下载到theos目录下的nic/iphone目录,顾名思义,这个目录是用来放置iphone相关模板文件的。

curl -O https://raw.github.com/WillFour20/Notification-Widget-NIC-Template/master/notification_center_widget.nic $THEOS/templates/iphone/

接下来我们只需运行nic来创建Notification Center Widget的应用模板:

$ $THEOS/bin/nic.pl
NIC 1.0 – New Instance Creator
——————————
[1.] iphone/application
[2.] iphone/library
[3.] iphone/notification_center_widget
[4.] iphone/preference_bundle
[5.] iphone/tool
[6.] iphone/tweak
Choose a Template (required): 3
Project Name (required): Hello World
Package Name [com.yourcompany.helloworld]: com.crazytonyli.widget.helloworld
Author/Maintainer Name [Tony Li]: Tony Li
Instantiating iphone/notification_center_widget in helloworld/…
Done.

首先进入helloworld项目目录,看看nic为我们生成了什么文件:

  • BBWeeAppController-Protocol.h,这个头文件中声明了一个名为BBWeeAppController的protocol,编译生成的Bundle中必须要有一个类实现了该协议。
  • HelloWorldController.m,这就是上面提到的实现BBWeeAppController协议的类。生成的模板类提供的实现只是简单显示了一张通知中心的背景图片。
  • Makefile,上文中提到了:theos是基于Make的编译系统,自然少不了Makefile。
  • control,这是对deb包的描述,例如package的名称、作者、package的依赖等,以键值对的形式存在。在Cydia的作者Jay Saurik的这篇博客中对control的键值做了详细的说明。
  • theos,这是一个软连接文件,指向的是theos的路径。
  • Resource,这个目录下用于存放资源文件。其中包含了Bundle的描述文件:Info.plist。如果你的应用有图片,那么你应该把图片放到这个目录下。

由于要通过ssh把deb package安装到设备中,所以我们需要向theos提供设备的IP地址。theos提供了一个变量,THEOS_DEVICE_IP,用于指定设备的IP地址。下面我们在Makefile文件的头部增加一行设置该变量(变量的值取决于设备的IP地址):

THEOS_DEVICE_IP = 192.168.1.110

由于theos在发送deb至设备并安装的过程中,使用了ssh远程执行了几个命令,所以会经常提示输入密码,为了避免频繁地输入密码。你可以生成一个ssh public key,并将其加到设备的authorized keys中。具体请参见这篇教程。

那么我们编译运行一下吧。执行下面的命令来编译打包并将package安装到设备中:

make package install

命令执行完之后,设备会Respring,这是正常现象(参见Makefile的最后一行),是因为Notification Center Widget的安装/卸载都需要Respring才能生效。

SpringBoard启动后,拉下通知中心,其中出现了一块内容空空的部分,那就是你的Widget了。

接下来,你就可以向这个Hello World中增加你想要的功能了。Enjoy!

 

from:http://crazytonyli.com/2012/04/how-to-build-ios-jailbreak-development-enviroment/

0 0