Showing posts with label Tweak. Show all posts
Showing posts with label Tweak. Show all posts

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

2012/10/10

Ажиллах явцад нөхөөс хийх боломж буюу MobileSubstrate болон зальжин програм


MobileSubstrate нь iOS системийг (iPhone, iPad, iPod гэх мэт) ажиллах явцад нөхөөс хийх боломжийг хөгжүүлэгчдэд олгодог тогтолцоо юм. Энэ тогтолцооны тусламжтайгаар jailbreak буюу шоронгоос оргуулсан iOS төхөөрөмж дээр Apple-аас албан ёсоор зөвшөөрөгдөөгүй хөгжүүлэлтийн боломжуудыг ашиглан програм хөгжүүлэх, аль эсвэл ямар нэг програмыг ажиллах явцад нь өөрчлөх, эсвэл сайжруулж өөр олон санаануудыг нэмэх зэргийг хийх боломжтой болгодог. Ажиллах явцад програмын ажиллагааг өөрчилдөг програмыг tweak буюу зальжин програм гэж хэлж болно.
iOS төхөөрөмжийг шоронгоос оргуулахын нэг давуу тал нь энэ юм. Хөгжүүлэгчдэд ямар нэг хязгаарлалтгүйгээр төрөл бүрийн програм хөгжүүлэх асар өргөн боломжийг олгож, хэрэглэгчдэд AppStore-д баригдалгүйгээр олон төрлийн програм суулгах нөхцөлийг бүрдүүлдэг. Зарим магадгүй утсаа эвдчихнэ гэж боддог аймхай нэг нь iOS төхөөрөмжийг шоронгоос оргуулах нь хууль ёсны бус шүү дээ гэж хэлэх л байх. Магадгүй улс улсаасаа хамаарч болох юм, гэхдээ л DMCA-н хүрээнд АНУ-д хууль ёсны гэж зөвшөөрөгдсөн байгаа юм. Энэ талаар болон шоронгоос оргуулах талаар уншигчид өөрсдөө дэлгэрүүлээд уншина биз.

Эргээд MobileSubstrate-н ажиллах зарчмыг товчхон тайлбарлавал:

1. Cydia нь MobileSubstrate-г суулгах үед cynject-г /etc/launchd.conf дотор нэмж өгдөг. Ингэснээр програм эсвэл демон бүрт тарилга болон орох боломжтой болдог. Мөн MobileSubstrate суух үед /Library/MobileSubstrate гэсэн сан үүсдэг бөгөөд түүн дотор динамик сан нь хадгалагддаг.

2. cynject нь SubstrateLauncher.dylib-г процесс 1-д (launchd) тарьж оруулж өгдөг бөгөөд энэ сан нь орчны хувьсагч DYLD_INSERT_LIBRARIES-г /Library/MobileSubstrate/ болгож тохируулах ажлыг хийдэг. Ерөнхийдөө "DYLD_INSERT_LIBRARIES" орчны хувьсагчийг төхөөрөмж ачаалахад launchd тохируулж өгдөг.

3. Энэ орчны хувьсагчийг dyld буюу динамик linker орчуулбал холбогч уншиж /Library/MobileSubstrate/ санг хайн mobilesubstrate.dylib-г дууддаг. Ингэхдээ:
    а. mobileloader (MobileSubstrate-н бүрэлдэхүүн хэсэг) нь өөрийгөө ажиллаж байгаа програм руу дууддаг бөгөөд DYLD_INSERT_LIBRARIES-г ашигладаг.
    б. mobileloader дараа нь mobilesubstrate-г дууддаг.

4. MobileSubstrate нь "DYLD_INSERT_LIBRARIES" орчны хувьсагч ашиглан бүх програмуудад тарилга болон ордог. Энэ нь /Library/MobileSubstrate/DynamicLibraries санд байгаа dylib-үүдийг дууддаг.

5. Tweak буюу зальжин програмууд нь динамик сангууд бөгөөд эдгээр нь /Library/MobileSubstrate/DynamicLibraries санд хадгалагдаж динамик холбогч ашиглан ажилладаг програм бүрийн хувьд тодорхой шүүлтүүрийн нөхцөл хангагдсан тохиолдолд дуудагддаг байна.

6. dylib буюу динамик сангууд нь тодорхой шүүлтүүртэй байх ёстой.

Шоронгоос оргуулсан төхөөрөмжид зориулж програм зохиохдоо Xcode-н GUI ашиглаж болохоос гадна зальжин програм хөгжүүлэхийг хялбаршуулсан тогтолцоонууд байдаг. Тэдгээрийн хамгийн түгээмэл нь Theos/Logos юм.
Энэ нь эх файл буюу .xm файлыг эмхэтгэж хөрвүүлэхдээ эхлээд logos (.pl) ашиглаж боловсруулан obj-C/C++ код болгодог бөгөөд үүнийг дараа нь theos хөрвүүлдэг.
Завсрын файлыг logos.pl ашиглан харж болох бөгөөд .m гэх зэргийн файл үүсгэдэг.
Жишээ нь: # /path/to/logos.pl Tweak.xm > Tweak.m гэх мэт

Дараагийн удаа цаг зав болбол хялбар Tweak хэрхэн хөгжүүлэх талаар бичье.

MobileSubstrate болон Theos/Logos-той холбоотой бусад мэдээллүүдийг интернэтээс хайж олоод уншина бизээ.