2012/10/13

Theos/Logos ашиглан Tweak буюу зальжин програм бичих арга

Өмнөх нийтлэлд MobileSubstrate болон Theos/Logos-ийн талаар товчхон дурдсан билээ. Тэгвэл энэ удаад Theos/Logos тогтолцоог ашиглан шоронгоос оргуулсан төхөөрөмжид зориулж iOS 5 SDK ашиглан Tweak буюу зальжин програм хэрхэн бичих талаар өгүүлье. Дашрамд хэлэхэд шоронгоос оргуулсан iPhone, iPad дээр ажилладаг MongolKeyboard энэ аргаар хийгдсэн байгаа.  Одоо жишээ болгоод нэг зальжин програм хийж үзүүлье. Энэ програм нь iPhone-ий дэлгэцийг түгжсэний дараа дахин дэлгэцээ нээхэд түгжээтэй дэлгэц дээр зүйр цэцэн үгс, алдартай хүмүүсийн хэлсэн онч мэргэн ухаант үгсийг санамсаргүйгүээр сонгон харуулдаг зальжин програм юм.


Юуны түрүүнд програм бичих орчноо бэлдэх нь чухал юм. Мэдээж энд 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 гэсэн хүрээнд оруулан бичих явдал юм.
Жишээ нь:


Гэхдээ ингэж дэгээдэж зальжин програм бичихийн тулд ямар обьект, метод, өмчүүдийг дэгээдэхээ нэлээн судлах хэрэг гарна. Учир нь зарим нэг обьект, классуудын толгой файлын эх код байдаггүй. Гэхдээ хөгжүүлэгчид үүний учрыг олж KennyTM-ийн хийсэн class-dump-z хэрэгслийг ашиглан классуудын тодорхойлолтуудыг гаргаад авчихсан байдаг. Өөрөө ч уг хэрэгслийг ашиглаад тодорхойлолтыг гаргаад авч болно.
За тэгээд эдгээр тодорхойлолтуудыг харж байгаад дэгээдэж гогдох класс, методоо олно доо. Миний үзүүлэх жишээн дээр iPhone-ий Lock screen буюу түгжээтэй дэлгэц үзүүлдэг хэсгийг дэгээдсэн байгаа :)
Эх кодоо бичих явцдаа мэдээж байнгын туршилт хийгээд явах нь зөв болов уу. Жишээн дээр NSLog ашиглаад тайлбар болгосон хэсэг бий, ашигласан тохиолдолд syslog руу бичигдэнэ. Syslog файл /var/log/syslog дотор үүсч байгаа. ssh-ээр iPhone руугаа ороод тэрийг tail -f /var/log/syslog гэх маягаар шалгаад явж болно.
Эх кодоо зөв ажиллаж байгаа эсэхийг шалгахын тулд мэдээж бүтээж эмхэтгэх хэрэгтэй.
Үүний тулд Makefile-аа бас зөв тохируулж өгөх ёстой. Жишээ нь:


Энэ талаар Интернэт дээр зөндөө жишээ болон тайлбарууд бий учир дэлгэрүүлэлгүй орхихоор шийдлээ. Мөн миний үзүүлэх жишээн дээр бүгдийг тохируулаад хийчихсэн байгаа.

Хэрэв 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/) руу хуулж өгөх ёстой.

5 comments:

  1. Сайхан дэлгэрэнгүй бичсэн байна. Зав гарвал туршинаа.

    ReplyDelete
  2. How to install an older ios SDK: http://goodliffe.blogspot.de/2011/09/ios-using-older-sdks-with-newer-xcode.html

    How to setup theos/logos on Mountain Lion: http://iphonesdkdev.blogspot.de/2012/06/how-to-install-thoes-under-xcode-44.html

    ReplyDelete
  3. сайнуу?
    та нараас нэг юм асууя. iphone аваад яагаад jailbreak хийдэг юм бэ шууд ажилладаггүй юм уу
    гадаадынхан бас jailbreak хийдэг үү? ямар хүмүүс нь jailbreak хийлгүй ашигладаг юм бэ? цаг заваа гаргаад заавал хариулахыг бодоорой
    бүгдэнд нь амжилт

    ReplyDelete
  4. Jailbreak хийлгүйгээр unlocked буюу оператор lock байхгүй утсыг шууд ашиглаад явах боломжтой. Тийм утсан дээр зөвхөн AppStore-с програм суулгах боломжтой бөгөөд өөр газраас програм суулгах боломжгүй. Жишээ нь Монгол гарын байрлал ашиглах боломж байхгүй.
    Jailbreak гэдэг нь нэг ёсондоо утсан дээрх бүх юм руугаа хязгааргүй эрхээр (root) хандах боломж бүрдүүлнэ гэсэн үг юм. Хязгааргүй эрхээр хандана гэдэг маань утасныхаа бүх боломжийг хязгааргүйгээр ашиглаж болно гэсэн үг. Ямар нэг лимитгүйгээр бүх төрлийн програмыг хаанаас аваад суулгаад ашиглаад байж болно гэж ойлгож болно. Тэр дундаа tweak бас хамаарна.

    ReplyDelete