Sử dụng Cocoapods với Tiện ích mở rộng ứng dụng


83

Tôi đang cố gắng tạo một Tiện ích mở rộng ứng dụng ảnh trong Xcode 6 Beta-6 sử dụng thư viện cocoapods. Tiêu đề bắc cầu mà Xcode tạo cho phần mở rộng ảnh không thể nhìn thấy bất kỳ thứ gì từ cocoapods.

Ví dụ: #import <GPUImage/GPUImage.h>kết quả là lỗi "GPUImage/GPUImage.h" file not found.

Tôi đã thử mọi đường dẫn có thể tưởng tượng cho việc nhập (có dấu ngoặc và dấu ngoặc kép) và hầu như không thành công. Trường hợp ngoại lệ là đối với vỏ đơn giản thích SVProgressHUD, sau khủng khiếp hack xấu xí hoạt động: #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h".

Nhưng đối với GPUImage, nó đi vào GPUImage.htiêu đề và quyết định rằng nó đột nhiên không thể nhìn thấy GPUImageContext.hmặc dù không có vấn đề gì khi điều này được nhập với tiêu đề bắc cầu cho mã nhanh bình thường không phải là một phần của tiện ích ứng dụng.

Điều gì khác biệt về việc biên dịch các tiện ích mở rộng ứng dụng đang ngăn chặn tiêu đề bắc cầu hoạt động một cách bình thường?

Lưu ý: Tôi đã đọc mọi hoán vị có thể có của hướng dẫn này và nó không thể áp dụng ngay lập tức, đề phòng bất kỳ ai nghĩ rằng họ đã tìm thấy câu trả lời ở đó.

Ngoài ra, vấn đề được mô tả trong câu hỏi SO này có thể liên quan, nhưng tôi vẫn hỏi câu hỏi này trong trường hợp vấn đề của tôi là cụ thể đối với tiện ích mở rộng ứng dụng.


đây là giải pháp phù hợp với tôi [Cocopoads cũng dành cho tiện ích con (hoặc mục tiêu)] [1] [1]: stackoverflow.com/a/17850444/1415713
kurtanamo 25/12/14

Câu trả lời:


65

Cách thích hợp để thực hiện việc này là cập nhật podfile của bạn để chỉ thêm 1 dòng:

link_with 'yourApp', 'yourAppExtension'

và bản cập nhật nhóm sẽ giải quyết được sự cố.


3
Chính xác! Tôi không thể tin rằng tôi đã không tìm thấy điều này.
DanBlakemore

1
Phần 'youAppExtension' là gì?
Nate Uni

6
Tôi nên thêm các dòng đó vào đâu trong tệp nhóm?
Dekel Maman

7
Như @Sti nói, công trình này và trả về thông báo lỗi không còn là "không hợp lệ Podfilefile: Các đặc điểm kỹ thuật của [!] link_withTrong Podfile bây giờ đã được hỗ trợ, xin vui lòng sử dụng khối mục tiêu thay vì .."
Ryan

2
Đặc điểm kỹ thuật của link_withtrong Podfile hiện không được hỗ trợ, hãy sử dụng các khối mục tiêu để thay thế .. Giải pháp này không được dùng nữa.
Mehul

85

CHỈNH SỬA (2015/03/10)

Xem câu trả lời mới được chấp nhận. Tôi đã thử nó trong một dự án mới và nó hoạt động, mặc dù các nhóm thử nghiệm của tôi đều sử dụng sharedApplication không được phép trong các tiện ích mở rộng. Thực tế là họ đã chỉ ra những lỗi đó có nghĩa là nó được liên kết đúng cách. Tốt lắm @LeChatNoir!


Sự thành công.

Giải pháp như sau: Sau khi bạn có tiện ích mở rộng ứng dụng của mình và nó là tiêu đề cầu nối trong một dự án sử dụng cocoapods và bạn muốn sử dụng một trong các thư viện cocoapods đó, việc cố gắng đưa vào nhóm giống như vậy #import <GPUImage/GPUImage.h>sẽ không thành công file not found.

Trước tiên, hãy đảm bảo rằng bạn yêu cầu tiện ích mở rộng ứng dụng (nhấp vào tệp dự án của bạn, sau đó nhấp vào mục tiêu tiện ích mở rộng) để liên kết với libPods.a, giống như mục tiêu ứng dụng của bạn.

Tiếp theo, trong dự án thực tế của bạn (nhấp vào tệp dự án của bạn, sau đó vào tệp dự án một lần nữa trong phần "Dự án" của thanh bên bên trong) trong tab Thông tin, hãy đặt cấu hình của tiện ích mở rộng cho Gỡ lỗi, Phát hành và Inhouse để sử dụng cấu hình "Nhóm" từ menu thả xuống. Pod Install sẽ không thực hiện việc này cho bạn, vì vậy bạn sẽ cần phải tự mình thực hiện.

Cuối cùng, hãy đảm bảo rằng cả mục tiêu của dự án Pods và mục tiêu dự án của bạn đều có tất cả các kiến ​​trúc bạn cần xây dựng trong biến Kiến trúc hợp lệ, nếu không bạn sẽ gặp phải lỗi ký hiệu không xác định rất thú vị.

Điều này sẽ hoạt động và cho phép bạn nhập các nhóm bạn chọn như bình thường.


EDIT (2014/10/14): Ngoài ra, vì bạn cũng có thể bao gồm các tệp Objective-C từ trong mã dự án của riêng bạn trong phần mở rộng Swift, bạn nên đảm bảo rằng bất kỳ .mtệp nào bạn đặt trong tiêu đề bắc cầu cũng được biên dịch bởi mục tiêu mở rộng. Bạn có thể thực hiện việc này từ menu nguồn biên dịch cho đích hoặc trong .mchính tệp bằng cách sử dụng phần "Tư cách thành viên mục tiêu" của thanh bên phải trong Xcode.


Tôi đã triển khai ở trên tất cả các bước .. nhưng đang gặp sự cố .. Các ký hiệu không xác định cho kiến ​​trúc armv7: "_OBJC_CLASS _ $ _ Location", được tham chiếu từ: objc-class-ref trong TodayViewController. Vui lòng giúp tôi. làm thế nào để giải quyết nó
Urmi

tôi đã nhập tệp "Location.h" và sử dụng + phương thức lớp trong tiện ích mở rộng ngày nay ... thì tôi sẽ gặp sự cố ở trên.
Urmi

1
Bạn có đảm bảo rằng tệp cũng là thành viên của mục tiêu tiện ích mở rộng không? Cũng kiểm tra xem bạn đang xây dựng cho đúng kiến ​​trúc.
DanBlakemore

tôi đã kiểm tra rằng kiến ​​trúc là chính xác. nhưng tệp nếu không phải là thành viên của mục tiêu mở rộng. nhưng tôi không thể sử dụng các tệp đã có trong ứng dụng?
Urmi

3
Tôi cũng phải đặt $ (kế thừa) cho OTHER_LD_FLAGS trong cài đặt bản dựng tiện ích mở rộng.
TWilly

70

Các câu trả lời trên sẽ hoạt động, nhưng tôi chỉ muốn một vài nhóm trong tiện ích mở rộng của mình, vì vậy tôi đã thực hiện như sau với Podfile của mình:

target '[Main App Target Name]' do
        pod ...
        pod ...
        pod ...
end

target '[Extension Target Name]' do
        pod ...
end

Và sau đó một pod installý chí làm điều đó!


2
Câu trả lời tốt nhất. Bằng cách này tôi không quá tải iOS mở rộng của tôi với Pods không cần thiết
marcelosalloum

Tuyệt vời! Cảm ơn!
user3427013

Đây là một trong những câu trả lời hoàn hảo. becouse lỗi xcode: Các đặc điểm kỹ thuật của link_withtrong Podfile bây giờ đã được hỗ trợ, xin vui lòng sử dụng khối mục tiêu thay vì ..
Mehul

3

nhập mô tả hình ảnh ở đây

link_with, bạn sẽ không sử dụng nó nữa.

PodfileTệp không hợp lệ : [!] Đặc tả của link_withtrong Podfile hiện không được hỗ trợ, hãy sử dụng các khối đích để thay thế ..

Dưới đây là answe hoàn hảo, cũng đã được thử nghiệm.

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, ‘9.0’
use_frameworks!
inhibit_all_warnings!

target 'DemoTodayWidget' do
    pod 'Reachability',                         '~> 3.2'
end

target 'My Widget' do
    pod 'Reachability',                         '~> 3.2'
end
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.