สมัยก่อน ตอนที่มีการ hack ให้ iPod touch ทำอะไรได้พอๆ กับที่ iPhone ทำได้ เรารับทราบว่าเราต้องเข้าไปแก้ com.apple.springboard.plist รวมถึงอาจจะต้องเข้าไปแก้ส่วนของ capabilities ใน CoreServices ของ SpringBoard
เรามาดูกันว่ามีคีย์ไหนน่าสนใจบ้าง
accessibility คือฟีเจอร์ Accessibility ที่มีอยู่ 5 อย่างคือ การซูมหน้าจอ, การทำให้มี Voice Over, การสลับหน้าจอขาวดำ, เสียงแบบโมโน, และอ่านข้อความอัตโนมัติgas-gauge-battery คือฟีเจอร์แสดงเปอร์เซ็นต์แบตเตอรี่ที่เหลืออยู่ ซึ่งถ้าใส่เพิ่มเข้าไปใน Settings > General > Usage จะมีแถบให้เลื่อนเปิดปิดปรากฏขึ้นมาด้วย ถ้าไม่ใส่ไป ทำยังไงๆ (แก้ springboard ตาม entry ที่แล้ว) ก็ไม่มีทางแสดงผลขึ้นมา (ดูมันกั้ก!)mms คือฟีเจอร์ MMS อันนี้ฝากคุณ kanggg ทดลองแก้ให้แต่เขาบอกว่าใช้ไม่ได้ ก็เลยไม่ขอออกความเห็นแล้วกัน ใครอยากลองแก้ก็ลองแก้ดูครับvideo-camera คือฟีเจอร์กล้องวีดีโอ เท่าที่ลองแก้ดูใน Camera มันก็มีส่วนของการบันทึกวีดีโอเพิ่มเข้ามา แต่กลับใช้การไม่ได้nike-ipod คือฟีเจอร์การใช้อุปกรณ์ Nike กับ iPhone 3GS ซึ่งถ้าแก้ตรงส่วนนี้ถ้าอยากให้ใช้งานได้ต้องไปเอา Nike.app และ Framework ที่เกี่ยวข้องจาก iPod touch 2G มาติดตั้งเพิ่มถึงจะใช้งานได้ (ไม่ได้ทดลองเอง)auto-focus-camera คือฟีเจอร์กล้องจิ้มหาโฟกัส (น่าลองไหม?)voice-control คือฟีเจอร์สั่งงานผ่านเสียง (ต้องไปหา Framework ที่เกี่ยวข้องมาติดตั้งเพิ่มแน่ๆ)เอาเท่าที่นึกออกก็ประมาณนี้
เราเห็นเว็บข่าวลือแมคต่างประเทศมีการพูดคุยถึงฟังก์ชั่นซ่อนของโปรแกรมต่างๆ เช่น iTunes เราก็อยากรู้ว่าเขาทำอย่างไร สรุปก็คือเขาใช้วิธีตรวจหา Symbol ต้องสงสัยใน executable ของโปรแกรมที่สนใจ แล้วมันทำได้อย่างไรล่ะ?
ต้องเข้าใจก่อนว่าโปรแกรม executable ต่างๆ มันเป็น binary แต่แน่นอนว่าใน binary นี้ มันต้องมีอะไรที่เราพอจะแกะมาอ่านได้ วิธีพื้นๆ ที่เขาใช้กันคือ ใช้คำสั่ง strings ซึ่งคำสั่งนี้จะทำการสกัดเอา String ที่พอจะอ่านได้จาก binary ออกมาให้เราดูคำละบรรทัด
แต่ก็มันก็มีอีกส่วนที่เราอ่านไม่ออก (แต่คอมมันอ่านออก) นั่นก็คือ Symbol ซึ่งหลงเหลือจากการแปลงโปรแกรม ซึ่งส่วนนี้จะทำให้ได้เห็นชื่อตัวแปรหรือชื่อคลาสบ้าง คำสั่งที่ใช้เป็นอีกคำสั่งคือคำสั่ง nm พอสั่งปุ๊บก็จะเห็นเลยว่ามีชื่อตัวแปรอะไรน่าสนใจให้เราพอจะเดาได้ว่าโปรแกรมนี้มันใช้อะไร ทำอะไร (แต่ไม่รู้หรอกว่าทำงานอย่างไร เว้นแต่จะไปแกะดูคำสั่งในระดับ assembly)
มีเมล์ภาษาไทยฉบับหนึ่งแจ้งมาเมื่อช่วงต้นเดือนว่า Apple เปลี่ยนนโยบายของ one to one จากเดิมที่รับลูกค้าผลิตภัณฑ์ Apple ไม่ว่าจะซื้อจากร้านใดก็ตามเป็นรับเฉพาะผู้ที่ซื้อผลิตภัณฑ์ Apple จากร้านของ Apple (ในเฉพาะประเทศที่มีร้านค้าของ Apple ตั้งอยู่รวมถึงร้านออนไลน์ของประเทศนั้น) เท่านั้น
ลูกค้าในสหรัฐอเมริกา อังกฤษ เยอรมัน สวิตเซอร์แลนด์ อิตาลี ญี่ปุ่น แคนนาดา ออสเตรเลีย และจีน เท่านั้นที่มีสิทธิ์ซื้อบริการ one to one ได้ แล้วประเทศอื่นล่ะ? ฉันก็ลูกค้าเธอนะ ทำไมเธอกีดกันฉันไม่ให้ได้ซื้อบริการที่ดีของเธอล่ะ?
มองในแง่ดีกับทาง Apple เองคือ ลดปริมาณการใช้บริการ one to one ลงจากลูกค้านอกระบบของเขา (แน่นอนลูกค้าที่ซื้อตามตัวแทนจำหน่าย Apple จะไม่มีฐานข้อมูลใดๆ ทั้งสิ้นจนกว่าเขาจะมากรอกลงทะเบียนเอง) แต่ในเชิงคนที่ซื้อผ่านร้านออนไลน์ที่อยู่ประเทศอื่นล่ะ? ผมคิดว่ามันก็ไม่ค่อยยุติธรรมเท่าไร อย่างน้อยเราน่าจะได้เลือกบ้างนะ ซื้อคอมจากไทยไปใช้ที่ออสเตรเลียแล้วเกิดมีปัญหา อยากไปนั่งเรียนกับเขา อ้าวไม่มีสิทธิ์นะจ้ะเพราะคุณไม่ได้ซื้อ one to one ไว้
อยากให้ Apple ทบทวนในประเด็นนี้หน่อย (เขาคงอ่านภาษาไทยไม่ออกมั้ง?) หรือถ้าให้ดีก็มาตั้ง Store จริงๆ ในประเทศอื่นๆ ที่มีร้านออนไลน์บ้าง
เกิดอาการมันเคี้ยว iPhone ของตัวเอง อยากให้มันแสดงว่า Battery ตอนนี้เหลืออยู่กี่เปอร์เซ็นต์แต่ไม่อยาก Jailbreak (เพราะยังทำไม่ได้)
จำได้ว่าเมื่อก่อน มีคนเคยทำ FakeCarrier กับ FakeTimeString โดยไม่ต้องทำการ Jailbreak แถมยังใช้โปรแกรมบนฝั่ง Mac ทำเสียด้วย ก็เลยลองค้นดูหลักการว่าเขาทำอย่างไร ผลก็คือจริงๆ เขาแค่แก้ไฟล์ com.apple.springboard.plist ที่จริงๆ แล้วไฟล์นี้อยู่ในเครื่องที่ใช้ Sync เจ้า iPhone นั่นแหละ แต่ปัญหาคือวิธีที่ iTunes ทำการ Backup ตัวข้อมูลในเครื่อง มันจะถูกเก็บเป็นไฟล์ที่เราอ่านชื่อไม่ออกจำนวนมากมาย (ก็คือทุกอย่างใน /var/mobile) แต่ตัวข้อมูลไม่ได้มีการดัดแปลงให้พิสดารแต่ประการใด!
ทีนี้ปัญหาก็คือ เออแล้วไฟล์ที่เราต้องการมันคือไฟล์ไหนล่ะ? Spotlight ช่วยได้ไหม? ไม่ได้ แล้วจะทำอย่างไรก็เลยลองค้นหาวิธีก็พบว่า ใช้แค่สองคำสั่งผสมกันคือ ใช้คำสั่ง find ในการวิ่งไปตามไฟล์ใน Folder ที่ต้องการผสมกับคำสั่ง grep ซึ่งใช้ในการค้นหา String ได้ดีอยู่แล้ว ทีนี้ก็ต้องไปดูว่าแล้ว com.apple.springboard.plist มีอะไรที่น่าสนใจพอจะให้เดาได้ว่าคือมัน ตอนแรกลองค้นหาคำว่า SB ก็เจอบานตะไทเลย เลยเปลี่ยนเป็นอะไรที่เจาะจงขึ้นเลยค้นคำว่า SBLanguageRestart ก็พบไฟล์ที่ต้องการ
find . -type f -name "*.mddata" -exec grep -il "SBLanguageRestart" {} \;
เสร็จแล้วก็จัดแจง ใช้ Property List Editor แก้ซะจนเรียบร้อย (น่าแปลกใจตรงที่ Apple ได้ใส่ค่า SBShowBatteryLevel มาให้แล้ว แต่กลับยังไม่มีช่องทางในการเปลี่ยนค่านี้ให้จากโปรแกรมในตัว iPhone) แล้วทำการ Restore เครื่องกลับ ปรากฏว่าเหมือนเดิม!
ก็เลยค้นต่อไปพบว่า จริงๆ แล้วเราต้องเพิ่ม SBShowBatteryPercentage เข้าไปอีกอัน ก็เลยทำใหม่อีกรอบ จัดการ Restore ก็ยังใช้ไม่ได้ อะไรของมันหว่า? (หรือมัน Restore ลงไปยังที่ที่มันไม่ควรอยู่?)
ประหลาดใจตรงที่ iPhone Simulator ใส่แค่ SBShowBatteryLevel มันก็ใช้ได้แล้วนะ ทำไมเครื่องจริงต้องใส่เพิ่มเข้าไปอีกอัน?
มีคนพูดถึงเรื่องนี้ไว้ด้วยแฮะ ทำไปคนละทิศคนละทางเลย!