Юуны түрүүнд програм бичих орчноо бэлдэх нь чухал юм. Мэдээж энд Mac OS X орчинд хөгжүүлэх тухай ярьж байгаа. Зарим хүмүүс Линукс дээр хөгжүүлдэг гэж байгаа, тэр тохиолдолд нэлээн олон зүйлс суулгаж тохируулах шаардлагатай болох учраас энд зөвхөн OS X-ийн орчинд хөгжүүлэх талаар дурдъя.
Дараах шаардлагуудыг хангасан байх хэрэгтэй.
1. Unix/Linux дээр ажиллаж байсан бага туршлага байсан ч тустай.
2. Xcode суулгасан байх шаардлагатай.
3. macports суулгах хэрэгтэй.
4. Macports ашиглаад dpkg суулгасан байх шаардлагатай.
5. git суулгасан байх шаардлагатай. Энэ нь бидний жишээг туршихад хэрэг болно.
5. iPhone руугаа холбогдохын тулд iPhone дээрээ OpenSSH суулгасан байх хэрэгтэй. Cydia-аас суулгачихаад default нууц үгийг өөрчлөхөө мартав. Тэгэхгүй бол өт хорхойнууд сүлжээнээс ороод ирнэ шүү. Анхдагч нууц үг нь alpine гэж байгаа.
6. Mac дээрээ SFTP дэмждэг FTP client програм суулгаж болно, гэхдээ заавал шаардлагагүй. Тушаалын мөрөөс scp тушаалыг ашиглаад юмаа хуулаад байж болно.
7. Debug хийх шаардлага гарч болзошгүй учраас Cydia ашиглаад syslogd, adv-cmds, network-cmds, diskdev-cmds, file-cmds, File Utilities, less гэх мэт хэрэгслүүдийг суулгаж болно.
За тэгээд програмаа бичихдээ ямар засварлагч ашиглах эсэхээ өөрсдөө мэдээрэй.
Миний хувьд emacs эсвэл TextMate v2 ашигладаг. Эхлэн суралцагчдад TextMate нь амар байх болов уу.
Theos/Logos-ийн гол зарчим нь hook буюу дэгээдэх гэж байгаа обьект болон түүний метод, өмчүүдийг %hook ... %end гэсэн хүрээнд оруулан бичих явдал юм.
Жишээ нь:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Түгжээтэй дэлгэцийг барьж цагийг шинэчлэхдээ огнооны текстийг өөрчилнө | |
%hook SBAwayDateView | |
// Түгжээтэй дэлгэцийн цаг,огноотой хэсгийг эхлүүлэхдээ зүйр үгсээ цонхонд гаргана | |
- (id)initWithFrame:(struct CGRect)arg1 | |
{ | |
// зүйр үгсээ гаргана :) | |
UIAlertView *quoteView = [[UIAlertView alloc] init]; | |
quoteView.title = @"Өдрийн ухаант үгс"; | |
// санамсаргүйгээр үгээ массиваас сонгоно | |
int index = arc4random_uniform(4); | |
quoteView.message = quote[index]; | |
[quoteView addButtonWithTitle:@"OK"]; | |
[quoteView show]; | |
// эх функцийг дуудна | |
return %orig; | |
} | |
%end |
Гэхдээ ингэж дэгээдэж зальжин програм бичихийн тулд ямар обьект, метод, өмчүүдийг дэгээдэхээ нэлээн судлах хэрэг гарна. Учир нь зарим нэг обьект, классуудын толгой файлын эх код байдаггүй. Гэхдээ хөгжүүлэгчид үүний учрыг олж KennyTM-ийн хийсэн class-dump-z хэрэгслийг ашиглан классуудын тодорхойлолтуудыг гаргаад авчихсан байдаг. Өөрөө ч уг хэрэгслийг ашиглаад тодорхойлолтыг гаргаад авч болно.
За тэгээд эдгээр тодорхойлолтуудыг харж байгаад дэгээдэж гогдох класс, методоо олно доо. Миний үзүүлэх жишээн дээр iPhone-ий Lock screen буюу түгжээтэй дэлгэц үзүүлдэг хэсгийг дэгээдсэн байгаа :)
Эх кодоо бичих явцдаа мэдээж байнгын туршилт хийгээд явах нь зөв болов уу. Жишээн дээр NSLog ашиглаад тайлбар болгосон хэсэг бий, ашигласан тохиолдолд syslog руу бичигдэнэ. Syslog файл /var/log/syslog дотор үүсч байгаа. ssh-ээр iPhone руугаа ороод тэрийг tail -f /var/log/syslog гэх маягаар шалгаад явж болно.
Эх кодоо зөв ажиллаж байгаа эсэхийг шалгахын тулд мэдээж бүтээж эмхэтгэх хэрэгтэй.
Үүний тулд Makefile-аа бас зөв тохируулж өгөх ёстой. Жишээ нь:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
TWEAK_NAME = LockQuote | |
LockQuote_OBJCC_FILES = Tweak.xmi | |
LockQuote_FRAMEWORKS = Foundation UIKit | |
include theos/makefiles/common.mk | |
include theos/makefiles/tweak.mk |
Энэ талаар Интернэт дээр зөндөө жишээ болон тайлбарууд бий учир дэлгэрүүлэлгүй орхихоор шийдлээ. Мөн миний үзүүлэх жишээн дээр бүгдийг тохируулаад хийчихсэн байгаа.
Хэрэв PreferenceLoader ашиглаад Settings дотор ажиллах програмынхаа тохиргоотой холбоотой зүйлсийг оруулах бол Theos-ийн nic.pl хэрэгслийг ашиглаж болно.
Жишээ програмын кодыг харвал тийм ч айхтар их юм харагдахгүй л болов уу.
Кодыг бичих явцдаа бараг мөр бүрийг тайлбарлаад оруулсан байгаа учир илүү ойлгомжтой болсон байх.
Мөн онч мэргэн үгсийг массивт жишээ болгоод дөрвийг хийсэн байгаа.
Сайжруулж хөгжүүлэх хүсэлтэй нэг нь онч мэргэн үгсээ файл эсвэл sqlite гэх мэт өгөгдлийн санд бас хадгалаад уншдагаар хийж бас болох юм шүү.
Бас өөр нэг санаа нь хэл сурахыг хүссэн нэг нь онч мэргэн үгсийн оронд гадаад хэлний шинэ үгсийг орчуулгатай нь харуулдагаар хийж болно.
Програмын эх кодыг https://github.com/fooatbar/LockQuote хаягаас татан авч туршина уу.
Хэрхэн татаж авч турших талаар README.md файлд бичсэн байгаа болно. Тушаалуудыг Терминал дээрээс ажиллуулахаа мартав.
Програмын эх код нь зөвхөн Tweak.xmi файлд бий. Бусад нь Theos-ийн гэх мэт туслах файлууд болон толгой файлууд юм. layout/DEBIAN сан дотор суулгахад хэрэглэгдэх control (ерөнхий тайлбар), postinst (суулгасны дараах хийх зүйлс), postrm (устгасны дараа хийх зүйлс) гэсэн файлууд бий. layout/Library/MobileSubstrate/DynamicLibraries сан дотор LockQuote.plist гээд шүүлтүүр файл бий. layout сан доторх файлууд нь pkg үүсгэхэд LockQuote.dylib файлтай цуг нэг багц болон ордог.
За тэгээд асуулт асуухаасаа өмнө энд бичсэн зүйлсийг сайн уншаарай.
Мөн өмнөх нийтлэлийг бас нэг харчихад зүгээр шүү.
Амжилт хүсье!
Зальжин програм хөгжүүлэгчид олшрох болтугай :)
Нэмэлт тайлбар:
Хэрэв Xcode 4.5 суулгасан бол хуучин iOS 5.x SDK байхгүй байгаа. Түүнийг нэмэлтээр хуучин Xcode-уудаас задалж SDK байгаа сан (/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/) руу хуулж өгөх ёстой.
Сайхан дэлгэрэнгүй бичсэн байна. Зав гарвал туршинаа.
ReplyDeleteHow to install an older ios SDK: http://goodliffe.blogspot.de/2011/09/ios-using-older-sdks-with-newer-xcode.html
ReplyDeleteHow to setup theos/logos on Mountain Lion: http://iphonesdkdev.blogspot.de/2012/06/how-to-install-thoes-under-xcode-44.html
сайнуу?
ReplyDeleteта нараас нэг юм асууя. iphone аваад яагаад jailbreak хийдэг юм бэ шууд ажилладаггүй юм уу
гадаадынхан бас jailbreak хийдэг үү? ямар хүмүүс нь jailbreak хийлгүй ашигладаг юм бэ? цаг заваа гаргаад заавал хариулахыг бодоорой
бүгдэнд нь амжилт
Jailbreak хийлгүйгээр unlocked буюу оператор lock байхгүй утсыг шууд ашиглаад явах боломжтой. Тийм утсан дээр зөвхөн AppStore-с програм суулгах боломжтой бөгөөд өөр газраас програм суулгах боломжгүй. Жишээ нь Монгол гарын байрлал ашиглах боломж байхгүй.
ReplyDeleteJailbreak гэдэг нь нэг ёсондоо утсан дээрх бүх юм руугаа хязгааргүй эрхээр (root) хандах боломж бүрдүүлнэ гэсэн үг юм. Хязгааргүй эрхээр хандана гэдэг маань утасныхаа бүх боломжийг хязгааргүйгээр ашиглаж болно гэсэн үг. Ямар нэг лимитгүйгээр бүх төрлийн програмыг хаанаас аваад суулгаад ашиглаад байж болно гэж ойлгож болно. Тэр дундаа tweak бас хамаарна.
Hi thanks for shaaring this
ReplyDelete