2011-09-13 39 views
8

Tôi vừa biết về khả năng sử dụng OTHER_CODE_SIGN_FLAGS để chỉ định keychain bao gồm chứng chỉ cần thiết để xây dựng và ký ứng dụng. Nhưng tiếc là tôi không thể làm cho nó hoạt động.OTHER_CODE_SIGN_FLAGS cờ keychain bị bỏ qua?

Kịch bản của tôi trông giống như sau:

#!/bin/bash 
TARGET="MyProject" 
CONFIGURATION="Release" 
SDK="iphoneos" 
IDENTITY="iPhone Developer: John Doe (XX22RR22O)" 
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain" 
PASSWORD="" 

security unlock-keychain -p ${PASSWORD} ${KEYCHAIN} 
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}" 

Nhưng thất bại:

Check dependencies 
[BEROR]Code Sign error: The identity 'iPhone Developer: John Doe (XX22RR22O)' doesn't match any valid certificate/private key pair in the default keychain 

Nhưng nếu tôi chuyển sang keychain đầu tiên nó hoạt động nhưng đó không phải là sử dụng được trên máy chủ xây dựng nơi nhiều các bản dựng có thể xảy ra đồng thời:

#!/bin/bash 
TARGET="MyProject" 
CONFIGURATION="Release" 
SDK="iphoneos" 
IDENTITY="iPhone Developer: John Doe (XX22RR22O)" 
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain" 
PASSWORD="" 

security unlock-keychain -p ${PASSWORD} ${KEYCHAIN} 
security default-keychain -s ${KEYCHAIN} 
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}" 

Hy vọng các bạn có thể giúp -Morten

Trả lời

3

Câu trả lời là nâng cấp: Xcode 4.3 tôn trọng cờ OTHER_CODE_SIGN_FLAGS trong bước xây dựng Check dependencies.

+0

Cảm ơn và xin lỗi vì sự chậm trễ :) – mbogh

1

Tôi đã gặp sự cố tương tự khi cố gắng thiết lập CI cho các dự án iOS của chúng tôi. Tôi đã cập nhật kịch bản Perl PackageApplication Perl để hỗ trợ chuyển tùy chọn keychain. Vị trí:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication 

Tôi vẫn đang chờ một số giấy phép làm rõ từ Apple để tôi có thể xuất bản tập lệnh cập nhật lên GitHub.

+0

Âm thanh thú vị, vui lòng cho tôi biết khi bạn biết thêm. – mbogh

+0

Bạn có bao giờ có thể xuất bản trang này không? – atreat

0

Không có điều nào trong số này thực sự hiệu quả trừ khi bạn có các bản dựng kịch bản đơn giản nhất. Giống như @Tyler cho biết, PackageApplication không hỗ trợ chỉ định keychain và một số phiên bản của xcode sẽ yêu cầu không có chứng chỉ trùng lặp nào trên các móc khóa khi họ kiểm tra các phụ thuộc.

Đừng lãng phí thời gian của bạn, chỉ cần gọi cho Apple và yêu cầu họ đổi tên một trong các chứng chỉ của bạn (họ sẽ đổi tên công ty của bạn --- bằng cách thêm hậu tố --- và bạn phải tạo lại chứng chỉ và cập nhật hồ sơ của bạn).

3

Tôi thấy rằng nếu tôi không thêm danh sách tìm kiếm keychain vào chuỗi khóa, xcodebuild sẽ không tôn trọng cài đặt OTHER_CODE_SIGN_FLAG --keychain. Tôi phải thêm mã này:

// Early in the script 
ORIGINAL_KEYCHAINS=`security list-keychains -d user` 

// After I create my keychain, add it to the list 
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS} "${KEYCHAIN_NAME}" 

// On cleanup 
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS} 

Không cần phải nói, tôi đã mất thời gian tìm hiểu điều này.

Đồng thời trợ giúp, đảm bảo rằng keychain vẫn mở trong thời gian xây dựng của bạn. Dưới dạng advised here:

security -v set-keychain-settings -lut 7200 ${KEYCHAIN_NAME} 
+0

Điều này cực kỳ hữu ích, nhưng tôi thấy rằng danh sách các móc khóa người dùng trong 'ORIGINAL_KEYCHAINS' chứa các dấu nháy đơn cho mỗi một; chạy biến đó thông qua mã như 'CLEAN_KEYCHAINS =" $ {ORIGINAL_KEYCHAINS // \ "}" '(nó thay thế tất cả các dấu nháy đơn không có gì) khi thực hiện việc dọn dẹp hoàn hảo. – Luke

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