2012-06-14 31 views
44

Chúng tôi đang xây dựng một ứng dụng cho một công ty khác. Họ giữ chìa khóa ký và không muốn chia sẻ nó với chúng tôi.Xây dựng các ứng dụng iOS bằng cách sử dụng xcodebuild mà không cần mã số

Có thể tách riêng bản dựng và ký, nhưng làm cách nào để chỉ định nó trên dòng lệnh của xcodebuild?

EDIT cho những người đến đây từ tìm kiếm. Câu trả lời được chấp nhận là chính xác - nó làm những gì câu hỏi yêu cầu. Tuy nhiên, ảnh lớn là tách bản dựng và mã vạch (cho phép nhà phát triển không có khóa phân phối để tạo ứng dụng). Các phiên bản mới hơn của Xcode cung cấp các công cụ cho điều đó. Đây không phải là một câu trả lời đúng cho câu hỏi này, vì vậy tôi đăng nó như là một ý chính: https://gist.github.com/noamtm/5c3aaa0b615477162ccd.

+0

Đây có phải là những gì bạn đang tìm kiếm không? http://cydia.saurik.com/codesign.html – QED

+0

Sau khi thay đổi cài đặt, dưới đây là cách bạn kiểm tra xem gói ứng dụng có được ký hay không: 'codesign -dv/Applications/AppName.app' – Daniel

Trả lời

96

Để bỏ qua các mã ký bạn có thể thực hiện một hướng dẫn xây dựng từ giao diện điều khiển như thế này:

xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO 

Sử dụng thêm các thông số -configuration, -target-sdk để xác định cài đặt xây dựng của bạn.

Tham khảo stackoverflow answer này để nhận mô tả chi tiết về cách vô hiệu hóa mã ký bên trong Xcode.

+0

Cảm ơn. Chưa thử nghiệm, nhưng nó có ý nghĩa. – noamtm

+5

Điều này làm việc, nhưng vấn đề là không thể tạo các tệp Entitlements và ResourceRules cần thiết cho lệnh 'codesign --entitlements ... --resource-rules ...'. Điều này đặc biệt quan trọng nếu bạn định sử dụng iCloud. Nó không phải là tầm thường để tạo ra các tập tin này của chính mình. Xem thêm http://stackoverflow.com/questions/9280130/how-to-call-builtin-productpackagingutility-in-command-line. – Alexander

+1

cảm ơn bạn cảm ơn bạn Cảm ơn bạn – liang

8

Rất tiếc, thật khó để xây dựng ứng dụng của bạn ở chế độ phát hành mà không cần ký mã. Bạn sẽ nhận được lỗi từ hệ thống xây dựng như thế này:

CodeSign error: code signing is required for product type 'Application' in SDK 
       'iOS 5.1' 

Trong trường hợp này, bạn nên cấu hình mục tiêu của bạn để sử dụng nhà phát triển/nhóm của bạn ký tự đại diện (*) sắc ký trong chế độ Release. Các ứng dụng sẽ được ký kết với điều đó khi bạn xây dựng nó, và bạn có thể gửi nó cho khách hàng của bạn để họ có thể từ chức nó. Đây là những gì hầu hết các nhà phát triển bên ngoài của chúng tôi làm.

Sau đó, bạn có thể xóa thông tin ký mã bằng cách xóa các tệp khác nhau trong ứng dụng như _CodeSignature và sử dụng công cụ codesign để xóa thông tin khỏi nhị phân ứng dụng. Nhưng tôi không chắc nó dễ đến mức nào. Nó không thực sự cần thiết. Không có bất kỳ thông tin nhạy cảm nào trong hồ sơ cung cấp hoặc thông tin ký tên.

+0

Vì vậy, đây sẽ là quá trình để xây dựng một .ipa để gửi cho khách hàng đang sử dụng Citrix/Zenprise để triển khai ứng dụng cho nhân viên của họ? Bạn có thể nhận xét về bài đăng của tôi ở đây không ?: http: // stackoverflow.com/questions/16089918/citrix-receiver-xenapp-xenmobile-zenprise-ipa-provisioning-và-deploying-an – whyoz

3

Trong Project Navigator, chọn dự án của bạn và mở phần "Cài đặt xây dựng" của dự án của bạn (và không phải bất kỳ mục tiêu cụ thể nào).

Trong "Ký mã", tìm "Mã ký nhận dạng" và cho cả chế độ Gỡ lỗi và Phát hành được đặt "Mọi SDK iOS" thành "Không ký mã".

5

Để ngăn chặn hoàn toàn mã ký với Xcode 7, tôi đã sử dụng tất cả các tùy chọn sau:

CODE_SIGN_IDENTITY="" 
CODE_SIGNING_REQUIRED="NO" 
CODE_SIGN_ENTITLEMENTS="" 
CODE_SIGNING_ALLOWED="NO" 

Tùy chọn cuối cùng, CODE_SIGNING_ALLOWED="NO" dường như làm các trick.

+0

Chỉ cần muốn làm như vậy. Cám ơn vì đã chia sẻ. –

+0

Lưu ý: Tôi không thể thêm các quyền (nhóm ứng dụng) để làm việc cho một kho lưu trữ được xây dựng mà không có chúng ngay cả khi tôi chạy codesign với tệp quyền lợi mong muốn. –

+0

Lưu ý rằng tôi sẽ không thực hiện việc hack này cho các bản dựng Lưu trữ. Tôi chỉ muốn không chạy vào một codesigning khi tôi chạy/thử nghiệm ứng dụng của tôi trong gỡ lỗi trong giả lập. Lưu trữ hành động thường yêu cầu mã hóa cho bạn có lẽ không nên vô hiệu hóa nó cả. –

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