2015-02-27 38 views
5

Tôi đã tạo một khung Objective-C tùy chỉnh. Tôi muốn nhập nó vào bất kỳ dự án iOS cụ thể nào và sử dụng chức năng được cung cấp của nó trên cả Trình mô phỏng iOS và thiết bị thực tế. Để nhập khung, tôi liên kết nó bằng cách sử dụng các giai đoạn xây dựng Giai đoạn> Liên kết nhị phân với thư viện trong mục tiêu của ứng dụng. Tôi sau đó có thể nhập nó vào một trong các lớp học của tôi với tuyên bố này:Lỗi Xcode 6 - "Thiếu kiến ​​trúc bắt buộc i386" Khi xây dựng cho iOS Simulator

#import <CustomFramework/CustomFramework.h> 

tôi có thể nhanh chóng khuôn khổ lớp học của tôi tốt, nhưng khi tôi cố gắng để chạy dự án của tôi trên một thiết bị, tôi nhận được lỗi sau thông điệp:

dyld: Library not loaded: @rpath/CustomFramework.framework/CustomFramework 
Referenced from: /var/mobile/Applications/A61E882D-481A-4C0B-B4FD-69F5D24968BF/TestApp.app/TestApp 
Reason: image not found 

Và nếu tôi cố gắng chạy nó trên giả lập, tôi nhận được một thông báo lỗi khác nhau:

ld: warning: ignoring file /Users/user/Desktop/CustomFramework.framework/CustomFramework, missing required architecture i386 in file /Users/user/Desktop/CustomFramework.framework/CustomFramework (2 slices) 
Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_CustomFramework", referenced from: 
     objc-class-ref in AppDelegate.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

này xảy ra khi tôi nhanh chóng một lớp từ khuôn khổ. Nếu tôi nhập khung nhưng không thực sự sử dụng nó, ứng dụng của tôi sẽ xây dựng thành công. Nó chỉ là lỗi bất cứ khi nào tôi khởi tạo một lớp từ khung công tác vì một lý do nào đó.

Để ứng dụng xây dựng trên thiết bị, tôi đã theo dõi this SO câu trả lời. Thay vì liên kết khung công tác, tôi đã thêm một giai đoạn Sao chép tệp mới trong cài đặt Xây dựng các giai đoạn của mục tiêu, đặt Đích đến Khung và thêm khung của tôi.

Điều đó hoạt động tốt; tuy nhiên, tôi cũng muốn thử nghiệm ứng dụng của mình trên iOS Simulator. Khi tôi cố gắng chạy ứng dụng của mình trên trình mô phỏng, tôi vẫn gặp lỗi "i386 kiến ​​trúc bị thiếu bắt buộc". Tôi đã thử các giải pháp được đề xuất chỉ về mọi chủ đề liên quan đến SO mà tôi có thể tìm thấy và không có gì giúp tôi giải quyết vấn đề này.

Xin lưu ý rằng tôi đang cố gắng sử dụng khung tùy chỉnh của mình trong dự án Xcode mới, vì vậy không có cài đặt ứng dụng/xây dựng nào được thay đổi từ cài đặt mặc định của chúng.

Làm cách nào để khắc phục lỗi này để tôi có thể chạy ứng dụng trên cả Trình mô phỏng iOS và thiết bị có khung của tôi được bao gồm trong dự án? Bất kỳ cái nhìn sâu sắc sẽ được đánh giá rất nhiều!

Trả lời

5

Vấn đề là khung không được biên dịch cho kiến ​​trúc của Trình mô phỏng iOS, tức là i386. Xcode chỉ biên dịch một khuôn khổ cho kiến ​​trúc đích, vì vậy nếu tôi xây dựng khung cho Trình mô phỏng iOS, nó sẽ không hoạt động trên thiết bị và nếu tôi xây dựng khung cho thiết bị, nó sẽ không hoạt động trên Trình mô phỏng iOS.

Tôi tạo ra khuôn khổ của tôi từ đầu với sự giúp đỡ của hướng dẫn này: http://www.raywenderlich.com/65964/create-a-framework-for-ios

Các đa kiến ​​trúc xây dựng kịch bản là những gì cho phép khuôn khổ của tôi để chạy trên cả iOS Simulator và một thiết bị.

+2

Cảm ơn bạn đã trả lời! Tuy nhiên nó là phi lý mà đến năm 2015, chúng tôi vẫn phải nghỉ mát để xây dựng thủ công để có được một khuôn khổ phong nha (hướng dẫn là như thế, dài 10 trang ?!). Xấu hổ với bạn, Apple! – Rick77

+1

@ Rick77 Rất vui được giúp đỡ! Tôi hoàn toàn đồng ý.Tôi cũng phát triển các ứng dụng cho Windows và Windows Phone và thậm chí tôi không phải nghĩ về điều này trên các nền tảng đó. – Alexander

+0

@Alexander Khung của tôi không được biên soạn cho kiến ​​trúc của Trình mô phỏng iOS. Nó chỉ hỗ trợ thiết bị, Cách làm cho khung công việc của tôi hoạt động trong Trình mô phỏng.I đang sử dụng Khung . – Arun

0

Tôi đã gặp sự cố tương tự này với Xcode 7.1 khi cố gắng xây dựng trình mô phỏng. Một người nào khác nói rằng nó làm việc cho họ theo Xcode 8.2.1, vì vậy tôi đã cố gắng xây dựng/chạy ở đó và nó hoạt động. Tôi không phải thay đổi mục tiêu hay bất cứ thứ gì trong dự án của mình.

Vì vậy, hãy thử nâng cấp mã Xcode của bạn nếu có thể, có thể bạn sẽ nhận được các sửa lỗi bổ sung.

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