เมื่อ Apple เปิดตัวSwiftซึ่งเป็นภาษาการเขียนโปรแกรมใหม่ของพวกเขาฉันสงสัยว่าคุณจะรวมเข้ากับไลบรารี Objective-C ที่มีอยู่ผ่านCocoaPods ได้อย่างไร?
เมื่อ Apple เปิดตัวSwiftซึ่งเป็นภาษาการเขียนโปรแกรมใหม่ของพวกเขาฉันสงสัยว่าคุณจะรวมเข้ากับไลบรารี Objective-C ที่มีอยู่ผ่านCocoaPods ได้อย่างไร?
คำตอบ:
Cocoapods 0.36 ขึ้นไปแนะนำuse_frameworks!
คำสั่งซึ่งหมายความว่าไม่จำเป็นต้องใช้ส่วนหัวเชื่อมต่อสำหรับการนำเข้า Objective-C pod ใน Swift
โปรดดูตัวอย่างด้านล่างโดยใช้MBProgressHUDและAlamofire :
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!
pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod
ลบ #imports ออกจากส่วนหัว bridging หรือแม้แต่ลบไฟล์ bridging header ถ้าคุณไม่ต้องการ หากคุณเลือกความเป็นไปได้หลังอย่าลืมลบเส้นทาง (ไปยังไฟล์ส่วนหัวเชื่อมต่อที่ถูกลบนี้) ในการกำหนดค่าโครงการ Xcode ของคุณ
เพิ่มimport MBProgressHUD
และ / หรือimport Alamofire
ที่ด้านบนของไฟล์ Swift ทุกไฟล์ที่ต้องการคลาสเหล่านี้
ตอนนี้คุณกำลังใช้เฟรมเวิร์กโดยสุจริตดังนั้น enums ของคุณจึงได้ย้ายไป! คุณอาจมีสาย Swift ที่เข้ากันได้ดีกับส่วนหัวเชื่อมต่อแบบนี้:
progressHUD.mode = MBProgressHUDModeIndeterminate
ตอนนี้ต้องกลายเป็นสิ่งนี้:
progressHUD.mode = MBProgressHUDMode.Indeterminate
ไม่ใช่เรื่องใหญ่ แต่ข้อผิดพลาดมากมายอาจทำให้คุณหลงทางว่าคุณมีปัญหาใหญ่กว่าที่คุณทำถ้าคุณใช้ Objective-C enums จำนวนมาก
( ที่มาของคำตอบนี้ )
สำหรับข้อมูลของคุณ: ฉันเดาว่า (คุณจะต้องทดสอบด้วยตัวเองให้แน่ใจ) ว่า use_frameworks! คำแนะนำใน Podfile ของคุณใช้ได้กับโปรเจ็กต์ Xcode ที่กำหนดเป้าหมาย iOS> = 8 เท่านั้น
มันดูเหมือนว่ากระบวนการที่คล้ายกับที่อธิบายไว้ในMix and Matchส่วนหนึ่งของการใช้สวิฟท์กับโกโก้และวัตถุประสงค์ -Cเอกสาร
pod install
และเรียกใช้Example-Bridging-Header.h
และเพิ่มลงในโครงการObjective-C Bridging Header
เป้าหมายของคุณ:ตอนนี้คุณสามารถใช้ไลบรารีของคุณในกรณีนั้นคือ MKUnits ในไฟล์ Swift ของคุณ:
let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)
เพิ่มเติมที่นี่: การผสานรวม Cocoapods กับโครงการ Swift
#import <Reachability/Reachability.h>
#import "Reachability.h"
อัปเดต : CocoaPods 0.36 เวอร์ชันเสถียรได้รับการเผยแพร่ รองรับ Swift อย่างเป็นทางการ
CocoaPods รองรับ Swift ในรุ่น 0.36 ล่าสุดแล้ว ยังอยู่ในรุ่นเบต้า แต่ใช้งานได้
ก่อนอื่นคุณต้องติดตั้ง CocoaPods เบต้า (ปัจจุบันคือเบต้า 2) โดยเรียกใช้สิ่งนี้ใน Terminal ของคุณ
sudo gem install cocoapods --pre
มันสวยมาก คุณสามารถเพิ่มไลบรารี Swift ได้เหมือนที่คุณทำตามปกติ
แต่มีสิ่งที่จับได้หากคุณต้องการเพิ่มไลบรารีที่เขียนด้วย Objective-C ไปยังโครงการ Swift ผ่าน CocoaPods คุณต้องเพิ่มบรรทัดuse_frameworks!
ใน Podfile ของคุณ นี่คือตัวอย่าง
use_frameworks!
platform :ios, '8.0'
pod 'MagicalRecord'
ฉันเขียนบล็อกโพสต์เกี่ยวกับเรื่องนี้เช่นกัน
use_frameworks!
ใช้สำหรับ iOS เท่านั้น> = 8 ใช่ไหม ถ้าเป็นเช่นนั้นคุณควรเขียนสิ่งนี้ในคำตอบของคุณ
หากคุณได้รับไฟล์ไม่พบข้อผิดพลาดใน bridging-header.h คุณอาจต้องการตรวจสอบให้แน่ใจว่าไลบรารี Pods ของคุณกำลังเชื่อมโยงใน Build Scheme ของคุณ
ส่วนการแก้ไขปัญหา CocoaPods อธิบายถึงวิธีการดำเนินการภายใต้ข้อ # 4 ที่นี่
ตอนนี้คุณสามารถใช้ cocoapods เวอร์ชัน 0.36.0 ได้โดยการรันsudo gem install cocoapods
ซึ่งรองรับการรวมเฟรมเวิร์กที่รวดเร็ว เมื่อคุณใช้กรอบงานที่เขียนโดย swift คุณควรใช้อย่างชัดเจนใน Podfile:
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'