จะรวม Cocoapods กับโครงการ Swift ได้อย่างไร


84

เมื่อ Apple เปิดตัวSwiftซึ่งเป็นภาษาการเขียนโปรแกรมใหม่ของพวกเขาฉันสงสัยว่าคุณจะรวมเข้ากับไลบรารี Objective-C ที่มีอยู่ผ่านCocoaPods ได้อย่างไร?


คุณยังสามารถอ่านบทความล่าสุดของฉันเกี่ยวกับวิธีตั้งค่า CocoaPods ด้วยโครงการ Swift ของคุณ
Hemang

คำตอบ:


78

Cocoapods 0.36 ขึ้นไปแนะนำuse_frameworks!คำสั่งซึ่งหมายความว่าไม่จำเป็นต้องใช้ส่วนหัวเชื่อมต่อสำหรับการนำเข้า Objective-C pod ใน Swift

โปรดดูตัวอย่างด้านล่างโดยใช้MBProgressHUDและAlamofire :

1. Podfile

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

2. การลบ

ลบ #imports ออกจากส่วนหัว bridging หรือแม้แต่ลบไฟล์ bridging header ถ้าคุณไม่ต้องการ หากคุณเลือกความเป็นไปได้หลังอย่าลืมลบเส้นทาง (ไปยังไฟล์ส่วนหัวเชื่อมต่อที่ถูกลบนี้) ในการกำหนดค่าโครงการ Xcode ของคุณ

3. การเพิ่มการนำเข้า

เพิ่มimport MBProgressHUDและ / หรือimport Alamofireที่ด้านบนของไฟล์ Swift ทุกไฟล์ที่ต้องการคลาสเหล่านี้

4. แก้ไข enums ถ้าจำเป็น

ตอนนี้คุณกำลังใช้เฟรมเวิร์กโดยสุจริตดังนั้น enums ของคุณจึงได้ย้ายไป! คุณอาจมีสาย Swift ที่เข้ากันได้ดีกับส่วนหัวเชื่อมต่อแบบนี้:

progressHUD.mode = MBProgressHUDModeIndeterminate

ตอนนี้ต้องกลายเป็นสิ่งนี้:

progressHUD.mode = MBProgressHUDMode.Indeterminate

ไม่ใช่เรื่องใหญ่ แต่ข้อผิดพลาดมากมายอาจทำให้คุณหลงทางว่าคุณมีปัญหาใหญ่กว่าที่คุณทำถ้าคุณใช้ Objective-C enums จำนวนมาก

( ที่มาของคำตอบนี้ )

สำหรับข้อมูลของคุณ: ฉันเดาว่า (คุณจะต้องทดสอบด้วยตัวเองให้แน่ใจ) ว่า use_frameworks! คำแนะนำใน Podfile ของคุณใช้ได้กับโปรเจ็กต์ Xcode ที่กำหนดเป้าหมาย iOS> = 8 เท่านั้น


73

มันดูเหมือนว่ากระบวนการที่คล้ายกับที่อธิบายไว้ในMix and Matchส่วนหนึ่งของการใช้สวิฟท์กับโกโก้และวัตถุประสงค์ -Cเอกสาร

  1. สร้างของคุณ Podfile pod installและเรียกใช้
  2. สร้างไฟล์ส่วนหัว Objective-C ใหม่Example-Bridging-Header.hและเพิ่มลงในโครงการ
  3. เพิ่มคำสั่งนำเข้ากับหัวสะพาน
  4. กำหนด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


3
สำหรับผมคำสั่งนำเข้าที่จำเป็นในการรวม dir โครงการ aka มากกว่า#import <Reachability/Reachability.h> #import "Reachability.h"
Kyle Clegg

เพียงแค่การปรับปรุง Swift PODs ได้แก่ Swift Libs จะได้รับการสนับสนุนจาก CocoaPods ในไม่ช้า 0.36 เวอร์ชันถัดไปจะรองรับ Swift เต็มรูปแบบใน CocoaPods คุณลักษณะส่วนใหญ่เสร็จสมบูรณ์แล้วและคุณสามารถทดลองขับ Swift Pods ได้ทันทีโดยใช้คำแนะนำจากบล็อกโพสต์
Sachin Palewar

2
Cocoapods 0.36 ขึ้นไปแนะนำ use_frameworks! คำสั่งซึ่งหมายความว่าไม่จำเป็นต้องใช้ส่วนหัวของการเชื่อมต่ออีกต่อไปสำหรับการนำเข้า Objective-C pods ใน Swift (โปรดดูคำตอบของฉันด้านล่าง)
King-Wizard

5
นอกเหนือจากข้างต้นฉันพบว่าต้องเพิ่ม "Pods / **" ใน "User Header Search Paths" ในการตั้งค่าบิลด์ ฉันต้องเพิ่ม "#import <Foundation / Foundation.h>" ในไฟล์บริดจ์ด้วย
Swifty McSwifterton

1
ขอบคุณ Swifty ฉันลอง use_frameworks! แต่มันไม่ได้ผลสำหรับฉัน การเพิ่ม "พ็อด / **" ในเส้นทางการค้นหาของผู้ใช้ทำได้ผล
user3246173

16

อัปเดต : 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'

ฉันเขียนบล็อกโพสต์เกี่ยวกับเรื่องนี้เช่นกัน


3
use_frameworks!ใช้สำหรับ iOS เท่านั้น> = 8 ใช่ไหม ถ้าเป็นเช่นนั้นคุณควรเขียนสิ่งนี้ในคำตอบของคุณ
เก็บตัว

2

หากคุณได้รับไฟล์ไม่พบข้อผิดพลาดใน bridging-header.h คุณอาจต้องการตรวจสอบให้แน่ใจว่าไลบรารี Pods ของคุณกำลังเชื่อมโยงใน Build Scheme ของคุณ

ส่วนการแก้ไขปัญหา CocoaPods อธิบายถึงวิธีการดำเนินการภายใต้ข้อ # 4 ที่นี่


1

ตอนนี้คุณสามารถใช้ cocoapods เวอร์ชัน 0.36.0 ได้โดยการรันsudo gem install cocoapodsซึ่งรองรับการรวมเฟรมเวิร์กที่รวดเร็ว เมื่อคุณใช้กรอบงานที่เขียนโดย swift คุณควรใช้อย่างชัดเจนใน Podfile:

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'

0

ในกรณีของฉันฉันพบว่าฉันไม่ได้เพิ่มฝักเพื่อเป้าหมายหลัก แต่เพียงการทดสอบและการ TestUI เป้าหมายใน Podfile ตามที่อธิบายไว้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.