xcode 5.1: Sự cố kiến ​​trúc libCordova.a


81

Hôm qua (3/10/14) khi iOS 7.1 được phát hành, tôi cũng đã nâng cấp lên Xcode 5.1 và nhận thấy rằng dự án PhoneGap / Cordova của tôi sẽ không còn biên dịch sang iPhone 5s của tôi nữa. Tôi cũng đã nâng cấp Cordova lên bản phát hành gần đây nhất: v 3.4.0-0.1.3.

Tôi đã đọc nhiều giải pháp khác nhau trên SO có liên quan đến việc thay đổi các kiến ​​trúc đang hoạt động và chỉ xây dựng các kiến ​​trúc đang hoạt động, và không có kiến ​​trúc nào hoạt động. Vì vậy, đây là những gì tôi đã thử và những lỗi tôi nhận được. Ban đầu tôi gặp lỗi:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Vì vậy, tôi đã thử những điều sau đây. Tôi đã chọn dự án con CordovaLib trong dự án của mình và trong cả dự án và mục tiêu, tôi đi tới Cài đặt xây dựng trong Kiến trúc và đảm bảo rằng dự án đó arm64không được bao gồm trong bất kỳ kiến ​​trúc Gỡ lỗi hoặc Phát hành nào. Tại thời điểm này, Build Active Architecture Only được đặt thành "Có". Điều đó dẫn đến lỗi sau:

file was built for archive which is not the architecture being linked (armv7): 
<long file path omitted> libCordova.a
Undefined symbols for architecture armv7

Đặt Build Active Architecture Only thành "Không", lỗi lại trở thành:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Tôi không chắc chắn những gì khác để thử. Cài đặt kiến ​​trúc của dự án chỉ bao gồm khóa "Base SDK" được đặt thành iOS 7.1. Mục tiêu của dự án không có cài đặt kiến ​​trúc. Dù sao, tôi khá chắc chắn rằng vấn đề nằm ở dự án con CordovaLib được nhúng. Tôi có thể làm gì để biên dịch thành công thứ này vào thiết bị của mình?

Cập nhật: vấn đề tương tự trên Jira của Apache: https://issues.apache.org/jira/browse/CB-6223


2
Tôi có cùng một vấn đề. iOS 7.1 và Xcode 5.1 đã có sẵn cho các nhà phát triển một thời gian, vì vậy thật đáng thất vọng khi nhóm Cordova ít nhất đã không đưa ra cảnh báo về điều này trước khi chúng được phát hành.
Ade

Đúng vậy. Tôi đã tạo Dự án Cordova 'Xin chào thế giới' hoàn toàn mới với Cordova mới nhất được cài đặt và nó sẽ không biên dịch thành công.
inorganik

Có thể nắm giữ và cài đặt lại iOS 7.0 SDK không?
Ade

Tôi đã nhận nó để biên dịch bằng các cài đặt này nhưng khi tôi đi đến Xác thực tệp lưu trữ, tôi gặp lỗi: ** Gói này không hợp lệ. Các ứng dụng bao gồm kiến ​​trúc armv7s được yêu cầu bao gồm kiến ​​trúc armv7. Điều đó thật kỳ lạ vì có vẻ như tôi đã bao gồm cả hai.
Ade

3
Khắc phục các bước trong sự cố Apache Cordova JIRA: issue.apache.org/jira/browse/CB-6223 .
Shazron

Câu trả lời:


86

@Shazron đã đăng bản sửa lỗi trên Apache JIRA - anh ấy lưu ý rằng bản sửa lỗi sẽ được phát hành như một phần của Cordova 3.5:

  1. Chọn biểu tượng Dự án của bạn
  2. Chọn Cài đặt bản dựng.
  3. Đối với "Kiến trúc", hãy chọn $ ARCHS_STANDARD - Kiến trúc chuẩn (armv7, armv7s, arm64)
  4. Đối với "Kiến trúc hợp lệ", hãy thêm "arm64"
  5. Chọn biểu tượng CordovaLib.xcodeproj của bạn
  6. Trong Cài đặt xây dựng cho Dự án (không phải Mục tiêu), hãy xóa cài đặt kiến ​​trúc có điều kiện (di chuột để xem dấu trừ)
  7. Đối với "Kiến trúc", hãy chọn $ ARCHS_STANDARD - Kiến trúc chuẩn (armv7, armv7s, arm64)
  8. Đối với "Kiến trúc hợp lệ", hãy thêm "arm64"
  9. Goto 6, nhưng bây giờ hãy làm điều đó cho "Target"

Đây là liên kết đến bài viết đầy đủ của Shazron về vấn đề này: http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

Nó hiện đã được phát hành và phiên bản ngắn gọn của những việc cần làm là:

Cordova CLI 3.4.1-0.1.0 đã ra mắt, bao gồm Cordova iOS 3.4.1 kết hợp tất cả các bản sửa lỗi được đề cập trong bài đăng trên blog này. Cập nhật Cordova CLI của bạn và nếu bạn có một dự án hiện có, hãy thực hiện “cập nhật nền tảng cordova ios”.


10
Thông minh. Đối với bước # 6, tôi đã đúng khi nghĩ rằng tôi nên xóa TẤT CẢ những thứ này: SCREENSHOT ?
Ade

1
có vẻ ok lúc đầu: Các tài liệu lưu trữ ứng dụng, và xác nhận. Nhưng khi được xuất dưới dạng phân phối đặc biệt, nó sẽ không chạy trên iPhone 5S.
Ade

7
Có, câu trả lời này giúp ứng dụng biên dịch và cài đặt trên 5S, nhưng khi bắt đầu chạy, nó sẽ xuất hiện lỗi lldb và bị treo (hoặc tạm dừng nếu bạn đang chạy thiết bị của mình được kết nối với máy Mac trong khi chạy Xcode).
Jough Dempsey

5
Đây là liên kết đến bài đăng @Shazron. Nó bao gồm 3 vấn đề: shazronatadobe.wordpress.com/2014/03/12/...
stefbach

Tôi xác nhận nó hoạt động cho tôi. Đừng quên điểm 9 là xóa bất kỳ cài đặt kiến ​​trúc có điều kiện nào cho mục tiêu 'Cordova Lib'. Bạn nên có cho cả Dự án 'CordovaLib' và mục tiêu 'CordovaLib'. Thiết lập kiến trúc nên vẻ: - Debug: Kiến trúc tiêu chuẩn (...) - Phát hành: kiến trúc tiêu chuẩn (...)
stefbach

11

Một cách tiếp cận khác hoạt động:

  1. Nhấp vào dự án của bạn ở trên cùng của trình điều hướng dự án (không phải dự án con Cordova.lib).
  2. Trong ngăn trình chỉnh sửa, hãy chọn dự án (không phải mục tiêu), chọn tab trình chỉnh sửa Cài đặt Xây dựng và nhấp vào nút Tất cả và Mức độ.
  3. Mở rộng nhóm Kiến trúc nếu cần và tìm hàng Kiến trúc bên dưới nó.
  4. Cột đầu tiên (đã giải quyết) và cột thứ ba (Mặc định iOS) trong hàng Kiến trúc sẽ cho biết Tiêu chuẩn; cột (dự án) thứ hai sẽ trống.
  5. Nhấp vào cột thứ hai trống để hiển thị một hộp sẽ có một dòng, “$ (ARCHS_STANDARD)”.
  6. Nhấp đúp vào dòng đó để có thể chỉnh sửa, sau đó thay đổi nó thành “$ (ARCHS_STANDARD_32_BIT)”.
  7. Nhấp vào bên ngoài hộp để xác nhận thay đổi của bạn. Bây giờ hộp đầu tiên và hộp thứ hai sẽ chỉ có $ trong chúng.
  8. Bây giờ bạn sẽ có thể xây dựng.

10

Hạ cấp Xcode 5.1 xuống 5.0.2 phù hợp với tôi, tôi không thể đợi bản phát hành Cordova 3.5 chính thức với bản sửa lỗi.

Bạn có thể lấy bản sao của phiên bản trước tại đây: https://developer.apple.com/downloads/index.action


3
Điều này hoạt động - cảnh báo duy nhất là bạn không thể kiểm tra trực tiếp trong XCode trên iPhone đang chạy iOS 7.1. Đây là nơi mà trình mô phỏng có ích. Ứng dụng đã biên dịch có thể chạy trên iOS 7.1 (được xác nhận trên cả iPhone 5 và 5S) vì vậy hạ cấp cho đến khi Cordova 3.5 được phát hành có vẻ là lựa chọn tốt nhất.
Ade

Điều này phù hợp nhất với tôi ngay bây giờ. Đã tải xuống Xcode 5.02 và sao chép nó (đặt tên nó là XCode_502 trước) vào Ứng dụng cho phép tôi chạy nó bên cạnh Xcode 5.1.
EeKay

Ade Tôi đã hạ cấp xuống 5.0.2 và đang thử nghiệm ứng dụng của mình trên iPhone 5 và iPad 2 với cả iOS 7.1, không có vấn đề gì, tôi cũng đã gửi ứng dụng lên iTunes Connect mà không gặp vấn đề gì.
AlexLopezIT

8

Họ vừa phát hành phiên bản 3.4.1 mới giải quyết vấn đề này.

Do đó, tôi cập nhật một tệp duy nhất để trỏ đến TAG 3.4.1:

/usr/local/lib/node_modules/cordova/platforms.js

dòng 24 từ:

version: '3.4.0'

đến:

version: '3.4.1'

Sau đó, bạn xóa thư mục iOS trong dự án của mình và chạy:

cordova platform add ios

Thao tác này sẽ tải xuống mẫu mới dựa trên 3.4.1 với tất cả các bản vá.


@JPRichardson Cảm ơn, tôi sẽ nâng cấp ngay bây giờ :)
dk123

1
npm cập nhật cordova -g, sau đó cập nhật nền tảng cordova ios
sepulturkey

5

Làm theo hướng dẫn trên video này: https://www.youtube.com/watch?v=EIkJAKcz8DE

Chỉ cần thêm arm64 vào các kiến ​​trúc hợp lệ trong dự án của bạn và xóa tất cả các kiến ​​trúc có điều kiện của dự án của Cordova.


Bạn vừa giúp tôi đỡ đau đầu quá. Video này đã khắc phục sự cố mà tôi gặp khó khăn trong vài giờ.
Bullyen

Điều này đã làm việc cho tôi. Cảm ơn bạn đã làm video - nó đã làm cho nó rất rõ ràng.
John Q

3

Tôi đã có thể đưa ứng dụng của mình xây dựng trong XCode 5.1 bằng cách đầu tiên xây dựng dự án CordovaLib riêng biệt với bên trong XCode và sau đó xây dựng dự án của tôi.


Cái này cũng có tác dụng với tôi. Tuyệt vời, vì tôi không thể hạ cấp Xcode (và không thể kiểm tra trên thiết bị iOS 7.1). Cảm ơn!
Adam Tuttle

2

Bạn chỉ cần thêm kiến ​​trúc arm64 vào mọi câu lệnh và cài đặt tòa nhà, ý tôi là, trên dự án hiện tại của bạn và trên dự án cordova.

Về dự án của bạn:

  • Kiến trúc
  • Kiến trúc hợp lệ

trên Cordova:

  • Kiến trúc
  • gỡ lỗi
  • giải phóng
  • Bất kỳ SDK ios nào

VÀ ĐIỀU QUAN TRỌNG NHẤT

Kiến trúc -Valid tại cài đặt xây dựng cordova

Cấu hình này tạo ra rất nhiều cảnh báo, nhưng chỉ là thay đổi "% d" cho "% ld" ở tất cả các dòng cảnh báo nói.


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.