2014-09-26 24 views
9

Tôi có một mô-đun/khung được viết bằng Swift, dự định được sử dụng trên iOS. Khi tôi cố gắng bao gồm khuôn khổ trong ứng dụng của tôi, đầu tiên tôi nhận thấy một số đỏ "không tìm thấy" gợi ý trong việc xây dựng giai đoạn:Mô-đun Swift iOS không được triển khai vào thư mục gỡ lỗi dự kiến ​​

enter image description here

Tuy nhiên, dự án xây dựng tốt - phụ thuộc mục tiêu được tìm thấy, vì vậy không có vấn đề biên dịch. Nó chỉ là khung được tạo dựng - và chắc chắn đủ, khi khởi chạy, tôi có lỗi liên kết, nó không thể tìm thấy hình ảnh. Nhìn vào việc xây dựng nhật ký, nó đang tìm kiếm ở đây:

/Users/Craig/Projects/Fluffy/build/Debug-iphoneos/ 

nào có ý nghĩa - đó là những gì được định nghĩa trong Cài đặt xây dựng cho khuôn khổ của tôi:

enter image description here

Nhưng các bản sao thất bại, là nguồn khung không tồn tại:

PBXCp /Users/Craig/projects/Fluffy/build/Debug-iphoneos/Fluffy_iOS.framework /Users/Craig/Library/Developer/Xcode/DerivedData/MyApp-dcjfhcnyzkwzxiejuuxqlsgajreb/Build/Products/Debug-iphoneos/MyApp/Frameworks/Fluffy_iOS.framework 
... 
error: /Users/Craig/projects/Fluffy/build/Debug-iphoneos/Fluffy_iOS.framework: No such file or directory 

Tuy nhiên, nhìn vào nhật ký xây dựng cho khuôn khổ của tôi, tôi thấy rằng đó là thực sự kết thúc ở đây:

/Users/Craig/Library/Developer/Xcode/DerivedData/Fluffy-fuuewsvogdkycegheyrsabkiicxc/Build/Products/Debug-iphonesimulator/Fluffy_iOS.framework 

Tôi cho rằng có ý nghĩa - DerivedData đã một thời bây giờ được vị trí mặc định cho bất kỳ sản phẩm xây dựng.

Và khi tôi có một cái nhìn tại dự kiến ​​ xây dựng thư mục, không có nhiều, rất nhiều của nó trở về già, và không ai trong số đó liên quan đến việc cấu hình gỡ lỗi:

enter image description here

Vì vậy, tôi câu hỏi là: Tại sao khung của tôi được đặt trong thư mục DerivedData, khi nó có vẻ như được yêu cầu trong Cài đặt Xây dựng được đặt trong thư mục build liên quan đến dự án? Các tham số này (đường dẫn sản phẩm xây dựng trên mỗi cấu hình, v.v ...) có được tham vấn không?

Và tôi nên làm gì để điều chỉnh việc này? Làm thế nào ứng dụng của tôi có thể biết tìm trong thư mục DerivedData đúng cho khung công tác, cho cấu hình đúng (gỡ lỗi và phát hành) theo cách có thể mở rộng và sẽ hoạt động mà không cần phải chỉ định đường dẫn tuyệt đối theo cách thủ công?

+0

Tôi gặp vấn đề tương tự. Bạn đã tìm được bản sửa lỗi chưa? – olive

+0

Không, thật không may mắn. :-( –

+0

Chỉ cần tò mò, bạn có một không gian làm việc và Fluffy_iOS đang được xây dựng trong không gian làm việc đó như là một sự phụ thuộc không? –

Trả lời

25

Được rồi, vì vậy tôi đã tìm ra cách giải quyết vấn đề này. Điều này giả sử bạn có không gian làm việc và bạn đã bao gồm khung làm dự án trong không gian làm việc và bạn đang cố gắng xây dựng một sản phẩm từ một dự án khác trong không gian làm việc bao gồm khung công tác.

Những gì bạn cần làm là tìm hiểu nơi khung được xây dựng. Nó thường là một số thư mục điên dưới thư mục DeriveData. Đi tới Trình tìm kiếm và tìm nó cho cấu hình bạn vừa cố gắng tạo.

Trong cài đặt General của mục tiêu sản phẩm, dưới Embedded Binaries, hãy kéo tệp đó vào đó. Điều này bây giờ nên đặt nó trong Project Navigator. Bạn cũng sẽ thấy nó trong số Linked Frameworks and Libraries nằm bên dưới Embedded Binaries.

Đi tới Project Navigator và chọn tệp và xem tệp theo số File Inspector.Tại đó, hãy thay đổi Location thành Relative to Build Products.

Trong mục tiêu của Build Settings, cho Framework Search Paths, thêm $(BUILT_PRODUCTS_DIR) và làm đệ quy đó. Xóa mục nhập được thêm tự động khi bạn thêm khung. Nó sẽ là một đường dẫn rõ ràng có đường dẫn DerivedData trong đó.

Làm sạch sâu và xóa thư mục DerivedData để có biện pháp tốt.

Xây dựng.

Bây giờ bạn sẽ thấy khuôn khổ chuyển sang màu đen và nó sẽ hoạt động bình thường.

+0

Hoan hô nhất không rõ ràng và quan trọng: ** Vào Project Navigator và chọn tập tin và xem nó dưới Trình kiểm tra tệp.Ở đó, thay đổi Vị trí thành Tương đối để Tạo Sản phẩm ** – skywinder

+0

Mục nhập nào? "Xóa mục nhập đã được tự động thêm khi bạn thêm khung." – lespommes

+0

Thông thường khi bạn thêm khung, Xcode sẽ đặt một mục nhập vào đường dẫn cho khung đó trong Đường dẫn tìm kiếm khung. Đường dẫn đó sẽ là một đường dẫn rõ ràng bằng cách sử dụng thư mục đường dẫn của bạn. Điều đó không phù hợp với người khác vì chúng sẽ không có cấu trúc đường dẫn của bạn (bao gồm tên người dùng của bạn) –

0

Ngoài câu trả lời ở trên hoạt động hoàn hảo trên Trình mô phỏng. Trên thiết bị, bạn sẽ nhận được thư viện dyld không tìm thấy lỗi và sự cố.

Dưới đây là giải pháp cho rằng:

Trong dự án mà phụ thuộc vào khuôn khổ này: Dưới các thiết lập xây dựng: Thêm một giai đoạn sao chép tập tin và thêm khuôn khổ này vào thư mục 'Khung' trong giai đoạn sao chép tập tin.

+0

Trong khi tạo một tập tin sao chép giai đoạn giải quyết nó, nếu khuôn khổ đã có trong các khuôn khổ nhúng, nó đã có nghĩa là Xcode sẽ sao chép nó vào thư mục khung. Sử dụng pha tệp sao chép với tùy chọn khung thường được sử dụng cho các khung được xây dựng bên ngoài Xcode, tức là công cụ dòng lệnh. – chrisamanse

0

bước Đây là chút thay đổi được cung cấp bởi @Mobile Bến

Giả sử, bạn có cấu trúc dự án Xcode sau

-YourWorkspace 
--YourFramework project 
--YourApp project 

bước 1. Xóa tất cả các mục tiêu với Cmd+Shift+KCmd+Option+Shift+K (bằng cách chọn từng chúng trong bộ chọn Đề án và nhấn tổ hợp phím nóng)

bước 2. Chọn dự án YourFramework.

bước 3. Chọn một mô phỏng và xây dựng (Cmd+B) YourFramework khuôn khổ mục tiêu

bước 4: Chọn Generic iOS Device và xây dựng (Cmd+B) YourFramework khuôn khổ mục tiêu

bước 5: Chọn YourApp dự án. Nhấn + trong Embedded Binaries và chọn khuôn khổ của dự án YourFramework

bước 6: bây giờ xác định vị trí các khung chỉ được thêm vào trong dự án Navigator (bên trái). Trong Trình kiểm tra tệp (ở bên phải), chọn vị trí Relative to build product.

LƯU Ý: Tôi tin rằng bước 6 là bắt buộc b/c của một số lỗi trong Xcode. Nhưng, mặc dù, không lựa chọn Relative to build product theo mặc định có thể là một hành động cố ý

UPD # 1: Kể từ Xcode 8.0 (8A218a), bước 6 là không cần thiết nữa - IDE đặt Relative to Build Products tự động.

Các vấn đề liên quan