Using Cocoapods with watchOS 2

ผมมีโปรเจคหนึ่งที่ต้องลองเล่นกับ Watch OS 2 ที่พึ่งออกอัพเดทมาในงานที่ผ่านมา และพบว่าใช้ Cocoapods เปลี่ยนไปไม่เหมือนเดิม ก็เลยต้องมานั่งแก้ปัญหา เลยอยากจะ Blog เก็บไว้หน่อย


โดยการแก้ไขที่ออกมาตั้งแต่ Cocoapods 0.38 Beta 1 นะครับ (ปัจจุบัน 0.39 แล้วหล่ะ)
สิ่งที่ต่างไปจากเดิมคือ Xcode จะมอง Watch OS เป็น Platform ที่แยกตัวออกมาต่างหาก
เนื่องจากเมื่อก่อนนั้น Watch App เป็นเพียงแค่ Extension ของ App หลักเท่านั้น และใช้ Data Store ร่วมกัน แต่ตอนนี้มันแยกออกมาเลย ตัวโค้ดของ Watch Extension จะอยู่ในตัว Apple Watch ดังภาพ


ดังนั้น ถ้าเราใช้ Cocoapods แบบปกติ ก็อาจจะเจอข้อความประมาณนี้

Target ‘Pods-MyWatchExtension’ of project ‘Pods’ was rejected as an implicit dependency for ‘Pods_MyWatchExtension.framework’ because it doesn’t contain platform ‘watchsimulator’ in its SUPPORTED_PLATFORMS ‘iphonesimulator, iphoneos’
และแน่นอนว่า Cocoapods จะมองไม่เห็น 3rd Party Library ของเรา
คราวนี้วิธีการซ่อม เราต้องทำ 2 ขั้นตอนหลักคือ

1. ต้องให้ 3rd Party Library ทำการอัพเดท Podspec เพื่อให้รองรับ Watch OS 2 โดยถ้าเป็น Library ที่เก่ามาก เราจำเป็นจะต้อง Fork มาแล้วแก้เอง (จากนั้นส่ง Pull Request ไปหาเจ้าของ Library นั้นด้วยจะดีมาก) แก้ในส่วนของ Platform โดยเขียนแบบนี้


Wait for the Code ....

โดยขณะที่รอเจ้าของแก้ไข หรือตอบรับ  Pull Request เราต้องสั่งให้ Cocoapods ชี้ไปหา Repository ของเราเพื่อใช้งานก่อนชั่วคราว (วิธีการทำผมเคยเขียนไว้ที่นี่ Custom 3rd Party Library and Using with Cocoapods)

2. เขียน Podfile ในอีกรูปแบบเพื่อแยกระหว่าง 2 Platform ให้ชัดเจน แบบนี้


Wait for the Code ....

ลองดูนะครับ แล้วปัญหาจะหมดไป ~ เย้ ผมนี่งงอยู่พักนึงเลย T~T


Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น