iOS下面的APP限制蠻多的 (ex: 進入背景之後, 最多只有10min可以作網路相關的事情), 如果想要突破限制就得要JB, 紀錄一下如何寫JB之後的程式.
在iOS底下, 所有的APP可以放在兩個地方/Applications/<your app>.app and /var/mobile/Applications/<id>/<your app>.app (一般經由iTune or XCode 安裝的APP都會在此), 所有在/var/mobile/Applications的app 都會跑在自己的sandbox, 而且也沒有讀取整個系統的權限, 為了能夠突破iOS的限制, 以下是如何產生可以直接安裝到/Applications 取得root 權限 APP作法 (注意必須手機要經過JB):
一般都是使用 Theos 來產生你想要得APP project.
安裝步驟:
安裝iOS SDK
安裝theos
利用theos建立新的project (可以看到自動幫你產生出的檔案)
$ export THEOS=/opt/theos $ svn co http://svn/howett.net/svn/theos/trunk $THEOS $ curl -s http://dl.dropbox.com/u/3157793/ldid > ~/Desktop/ldid $ chmod +x ~/Desktop/ldid $ mv ~/Desktop/ldid $THEOS/bin/ldid $ sudo port install dpkg $ ./$THEOS/bin/nic.pl IC 1.0 - New Instance Creator ------------------------------ [1.] iphone/application [2.] iphone/library [3.] iphone/preference_bundle [4.] iphone/tool [5.] iphone/tweak Choose a Template (required): 1 Project Name (required): zzz Package Name [com.yourcompany.zzz]: Author/Maintainer Name [ytshen]: zzz Instantiating iphone/application in zzz/... Done. $ls zzz Makefile RootViewController.h control theos Resources RootViewController.mm main.m zzzApplication.mm $
從Makefile上面你可以更改你的application name, 所有你需要compile object-c file (ex: .m .mm), 還有你需要include的framework:
include theos/makefiles/common.mk APPLICATION_NAME = xxx xxx_FILES = main.m XXXApplication.mm RootViewController.mm xxx_FRAMEWORKS = UIKit CoreGraphics include $(THEOS_MAKE_PATH)/application.mk
接下來就是要如何build project, 並且deploy到手機上面:
$ export SDKVERSION=5.1 $ export THEOS_DEVICE_IP=192.168.1.11 # build project $ make Making all for application xxx... Compiling main.m... Compiling XXXApplication.mm... Compiling RootViewController.mm... Linking application XXX... Stripping XXX... Signing XXX... # build deb $ make package Making all for application CameraUpload... make[2]: Nothing to be done for `internal-application-compile'. Making stage for application XXX... Copying resource directories into the application wrapper... dpkg-deb: building package `com.ttt.xxx' in `./com.ttt.xxx_0.0.1-50_iphoneos-arm.deb'. # install deb in device $ make package install
其他像是你想要更改APP icon或是跟一些resource相關, 你可以修改 Resource/Info.plist 達到你的要求.
Debugging:
使用這種方式的APP在debug上面沒辦法使用xcode的debug console, 所以只能透過syslog. 所以你可以透過Cydia安裝 "Erica Utilities" (for 'tail' utility), "Mobile Terminal", "OpenSSH", "SBSettings", "syslogd", "Syslog Toggle" 來達到debug的目的 安裝完之後, 你就可以透過ssh連上device在上面直接觀看syslog log.
root# tail -f /var/log/syslog Jul 27 13:19:16 hayokushin-mato-iPhone com.apple.launchd[1] (com.ikey.bbot): (com.ikey.bbot) Throttling respawn: Will start in 10 seconds Jul 27 13:19:16 hayokushin-mato-iPhone syncdefaultsd[1374]: com.apple.stocks has no valid com.apple.developer.ubiquity-kvstore-identifier entitlement Jul 27 13:19:16 hayokushin-mato-iPhone syncdefaultsd[1374]: Can't get application info for com.apple.stocks Jul 27 13:19:31 hayokushin-mato-iPhone syncdefaultsd[1374]: com.apple.stocks has no valid com.apple.developer.ubiquity-kvstore-identifier entitlement
Reference:
沒有留言:
張貼留言