Posts

Showing posts from January, 2016

[iOS] CocoaPods กับการใช้งาน 3rd-party library #2

Image
ก่อนหน้านี้ได้พูดถึง CocoaPods ไปแล้วบางส่วน http://www.lordgift.in.th/2016/01/ios-cocoapods-3rd-party-library.html ครั้งนี้ เราจะสมมติสถานการณ์ดูว่า ถ้าเราต้องการหา library ซักอย่างมาใช้ เพื่อช่วยในงานบางอย่าง วิธีการเป็นอย่างไรบ้าง

เราสามารถค้นหา library ผ่านหน้าเว็บของ CocoaPods ได้เลย
https://cocoapods.org/


* Type here to search by name, version, author, keywords, summary, and dependencies.
แน่นอนว่าเราจะพบกับผลการค้นหามากมาย ซึ่งเราก็ต้องเลือกใช้ โดยจะมีรายละเอียดบางส่วนสามารถดูได้ รวมถึง link ไปยังเว็บหลักของ library นั้นๆ

สำหรับโจทย์วันนี้คือ QR Code & Barcode
ซึ่งหลังจากที่ผมได้ค้นหาและทดลองมาจบที่ PQScanner https://cocoapods.org/pods/PQScanner ซึ่งถ้าดูจากตัวอย่างจะเห็นว่าเป็น Objective-C เอามาจะเอามาใช้กับ Swift โพสก่อนหน้านี้ก็บอกว่าเราสามารถทำ Bridging Header ได้ (http://www.lordgift.in.th/2016/01/ios-bridging-header-swift-objective-c.html) ซึ่งในเคสของ CocoaPods จะต่างกันนิดหน่อย install library (PQScanner) ผ่าน cocoapods ให้เรียบร้อยเปิด View Controller ที่ต้องการใช้งา…

[iOS] เปิดอ่าน PDF ด้วย Swift

Image
Swift สามารถเขียนให้เปิด PDF โดยเลือกใช้ component WebView วาดลงใน storyboard และจัดการ layout ให้เรียบร้อย ตามรูปแบบการแสดงผลที่ต้องการ (จากตัวอย่างลองวาดเต็มจอ)
เขียนโปรแกรมเรียก *.pdf มาแสดงบน WebView

// Get the document's file path. let path = NSBundle.mainBundle().pathForResource("sample.pdf", ofType: nil) // Create an NSURL object based on the file path. let url = NSURL.fileURLWithPath(path!) // Create an NSURLRequest object. let request = NSURLRequest(URL: url) // Load the web viewer using the request object. webView.loadRequest(request)
ซึ่งสามารถแสดงผลดังรูป
ref: https://timdietrich.me/blog/swift-display-bundled-pdf-with-uiwebview/

[iOS] Swift <-> Objective-C การใช้งานข้ามภาษา

Image
การพัฒนา iOS Application ต้องเป็นภาษา Objective-C หรือ Swift ซึ่งแต่ก่อน Objective-C เป็นภาษาแรกที่ Apple เลือกใช้ และพัฒนาต่อขึ้นมาเป็น Swift ดังนั้นเราจึงมีนักพัฒนาอยู่ทั้ง 2 ภาษา

          โพสนี้ผมขอแนะนำวิธีการลดช่องว่างระหว่าง Objective-C และ Swift เพื่อให้นักพัฒนาหน้าเก่าต้องการที่จะเริ่ม และนักพัฒนาหน้าใหม่ที่คงจะยังหนีของเก่าไม่พ้น ซึ่งหมายความว่า ณ ตอนนี้เรายังทิ้งภาษาไหนไม่ได้เลย

          ลองดู syntax เล่น ๆ กันก่อน เปรียบเทียบ source code ของฟังก์ชัน register remote notification
//Objective-C - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { } //Swift 2 func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { } //Swift 3 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { }
เตรียมความพร้อมบน Swift Project เปล่า ๆ
Objective-C TO Swift           สร้าง View โดยเ…

[iOS] CocoaPods กับการใช้งาน 3rd-party library

CocoaPods CocoaPods หรือ pod เป็นตัวจัดการ library สำหรับ xcode project โดยเราจะใช้ teminal เป็นตัวสั่งงาน โดย อันดับแรก เราจะต้องติดตั้ง CocoaPods กันก่อน
$ [sudo] gem install cocoapods
จากนั้นเราก็จะสามารถใช้งานคำสั่งได้ ลองทดสอบเช็คเวอร์ชันดูครับ
$ pod --version
เมื่อ setup เรียบร้อยแล้ว เราจะเอาไปใช้กับ xcode project ก็ต้องหา library ที่ต้องการใช้งาน ซึ่งในที่นี้ผมจะใช้ library สำหรับวาดลายเซ็นครับ >> https://github.com/jharwig/PPSSignatureView

ทำการติดตั้ง library

เปิด Terminal และ cd ไปที่ path ของ xcode project ที่ต้องการ **แนะนำให้ปิด xcode ไปเลยดีกว่า**
pod init
เพื่อสร้าง environment ต่างๆ ที่เกี่ยวข้องกับ cocoapods ซึ่งเราจะสนใจที่ Podfile ให้เติมคำสั่งลงในไฟล์ (library ที่ supported cocoapods ส่วนใหญ่จะบอกคำสั่งไว้ด้วย)
pod "PPSSignatureView"
เซฟและมาสั่งคำสั่งใน Terminal อีกครั้ง
pod install
หลังจาก Terminal ทำงานเรียบร้อยแล้ว ให้เปิด project ที่ไฟล์ *.xcworkspace ไม่ใช่ *.xcodeproj
จากนั้นเราก็สามารถใช้งาน 3rd-party library ได้เป็นที่เรียบร้อย



ref:
https://…

[iOS] ใช้ฐานข้อมูล Core Data ด้วย Swift

Image
นี่อาจจะเป็น post แรกเรื่องเกี่ยวกับ iOS native บอกตรงๆเลยว่า ผมเป็น Android Developer ที่ไม่ชอบ iOS แต่ถึงกระนั้นเราก็ต้องทำต่อไปอยู่ดี มองในแง่ดีเราก็จะได้รับมุมมองที่แตกต่างบ้างล่ะนะ

SQLite เป็นรูปแบบฐานข้อมูลที่นิยมสูง แม้ว่าปัจจุบัน application ส่วนใหญ่จะ online ใช้ฐานข้อมูลจาก server แต่เราก็ต้องทำเพื่อพิสูจน์ว่า "มันทำได้"

Core Data ชื่อที่ xcode ตั้งไว้สำหรับการใช้งาน SQLite ซึ่งต้องยอมรับว่าจุดนี้เค้าแข็งกว่า Android พอสมควร เราจะมาเริ่มจาก Design กันก่อน

1. File -> New -> File... เลือก Data Model

2. ทำการออกแบบ ซึ่ง Xcode มีหน้าจอสวยงามให้ใช้งาน (ไม่อธิบายแล้วกันเนอะ)
3. Editor -> Create NSManagedObject Subclass หรือจะเลือก New ที่ภาพแรกก็ได้ เสร็จแล้วก็สร้างออกมาให้เป็น *.swift file 



ไฟล์ที่เกี่ยวข้องทั้งหมดของ Core Data ครับ



สังเกตว่า หลังจากเราออกแบบฐานข้อมูลเพื่อรองรับการใช้งานเป็นที่เรียบร้อยแล้ว เราต้องสร้างไฟล์ class บางอย่างเพื่อเชื่อมต่อไปยังฐานข้อมูลนั้นๆด้วย ลักษณะนี้คือการทำงานของ Object-relational Mapping เพื่อเชื่อมโยงฐานข้อมูลกับ class นั่นเ…

[Android] Glide ตัวช่วยจัดการเรื่องรูปภาพ

Image
การแสดงรูปภาพบน Android Application อาจดูเป็นเรื่องที่ไม่มีอะไรในกอไผ่

<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/imageView" />
โค้ดเหล่านี้ลอยขึ้นมาในหัว....

แน่นอนว่า รูปที่เราจะเอามาแสดงนั้นต้องมาจากซักที่หนึ่ง ไม่ว่าจะเป็น อยู่ในโปรเจค, ภายในเครื่อง หรือ มาจากเว็บ โดยเฉพาะเว็บจะต้องมีการ download มา cache ก่อนจึงจะแสดงผลได้ อธิบายเป็นขั้นตอนเชิงเทคนิค ง่ายๆ ดังนี้
ทำ AsyncTask (Thread for Android)โหลดรูปภาพลง Bitmap objectนำ Bitmap object ไปเซ็ตที่ ImageView
เท่านี้ก็ดูยุบยับเกินไปสำหรับเรื่องแค่จะโหลดรูปมาโชว์เฉยๆ ซึ่งก็มี library ที่มาช่วยในส่วนนี้หลายตัวอยู่เหมือนกัน  Glide.with(this) .load("http://www.fireflydaily.com/wp-content/uploads/2015/09/Googlr.gif") .into(imageView);
อาจจะดูสั้นๆ แต่ Glide ยังมีอย่างอื่นให้เล่นอีกมากมาย เช่นการ crop, resize หรือแม้กระทั่งในโค้ดตัวอย่าง ก็ยังเป็นไฟล์ Animated GIF ซึ่งสามาร…

[Android] Otto ตัวช่วยส่งข้อมูลผ่าน event bus

อย่างที่รู้กันในหมู่ Android Developer ว่า การคุยกันระหว่าง Activity กับ Fragment นั้นไม่ง่ายเลย แต่บทความนี้ผมจะยังไม่อธิบายว่าแตกต่างกันอย่างไร (ถ้าใครใจร้อนมี link ให้ครับ http://developer.android.com/guide/components/fragments.html)

วิธีพื้นบ้าน (No lib.)
เตรียมพร้อมด้วย communication interface ก่อน
public interface OnFragmentInteractionListener { public void onFragmentInteraction(Data data); }
การใช้งานใน Fragment Class
OnFragmentInteractionListener mListener; ... @Override public void onAttach(Activity activity) { super.onAttach(activity); mListener = (OnFragmentInteractionListener) activity; } @Override public void onDetach() { super.onDetach(); mListener = null; }
ทำการส่งค่าจาก Fragment ไปยัง Activity
@Override public void onClick(View v) { mListener.onFragmentInteraction(data); }
และอย่าลืมว่าต้อง implement method ใน Activity Class ด้วย
public void onFragmentInteracti…

Crashlytics - ตรวจสอบ error ที่เกิดบน mobile application

Image
การพัฒนา mobile app. เราสามารถตรวจสอบปัญหาโดยดูจาก stack trace ที่เกิดขึ้นบน console ซึ่งก็สามารถตรวจสอบและแก้ไขได้เป็นธรรมชาติของ developer แต่เมื่อ app. ของเราถูกส่งถึงมือผู้ใช้งานแล้ว ทีมพัฒนาจะติดตามปัญหาได้ค่อนข้างยาก
หลายๆ คนคงรู้จัก Twitter  แน่ๆ Twitter ก็เป็นอีกค่ายที่ทำ API ต่างๆ ให้นำไปใช้งานได้ แต่ขณะที่ค่ายอื่นทำเพื่อเอื้อประโยชน์ให้กับตัวเอง แต่ดูเหมือนว่า Twitter จะทำออกมาให้ผู้นำไปใช้ได้ประโยชน์ซะมากกว่า
อ้าว!! ของ Twitter หรอกหรอ ? คำตอบคือ ใช่ครับ Crashlytics เป็นของ Twitter และอยู่ภายใต้ Fabric อีกทีนึง ซึ่งภายใน Fabric นี้ก็ยังมี tools อื่นๆ ให้เลือกใช้อีก

เอาล่ะ เข้าสู่เนื้อหากัน ใครแอบไป search ก่อนก็อาจจะได้เจอกับหน้าเว็บของ Crashlytics ไปแล้ว แต่ไม่ว่าจะพยายาม register หรือ login ก็จะถูก redirect ไปที่หน้าเว็บ Fabric อยู่ดี จัดการสมัครสมาชิกกันไป

เมื่อเข้าสู่ระบบได้แล้ว ครั้งแรกระบบน่าจะให้สร้าง organization โดย 1 organization ประกอบได้หลาย apps ครับ ผมลองเล่น Android app. กับ iOS app. ให้อยู่บน organization เดียวกันก็ทำได้ครับ สำหรับการเชื่อมต่อกับ app นั้น Fab…

Facebook Comment

Recent Posts

Popular

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

ความเร็วเน็ตที่แท้จริง Mbps MBps ???

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

พิมพ์ซองจากรายชื่อ excel ด้วยวิธี Mail Merge

[Java] รู้จัก Maven ให้มากขึ้น เพื่อก้าวสู่ java professional

เรื่องของ ++i กับ i++

[Java] Spring Framework กับความสามารถ Dependency Injection