2009-02-23 13 views
58

Tôi đang cố thiết lập máy chủ xây dựng tự động cho ứng dụng iPhone. Tôi muốn có thể có bản dựng beta adhoc hàng đêm để người thử nghiệm có thể theo dõi sự phát triển.Chạy xcodebuild từ một thiết bị đầu cuối phân chia

Tôi đã setted lên xcode thành công Xcode để thực hiện xây dựng Adhoc và tôi cũng có thể khởi động xây dựng từ dòng lệnh:

xcodebuild -configuration AdHoc -sdk iphoneos2.2 clean build

Vấn đề tôi đang gặp là dòng sau không hoạt động từ một thiết bị đầu cuối chia hai (sử dụng nohup hoặc màn hình) và thất bại với những điều sau

CodeSign error: Code Signing Identity 'iPhone Distribution: XXXXX' does not match any code-signing certificate in your keychain. Once added to the keychain, touch a file or clean the project to continue.

tôi đã kiểm tra các biến môi trường của tôi trong vỏ của tôi và trong nohup hoặc màn hình và không tìm thấy một đầu mối. Tôi đoán vấn đề của tôi là thiết bị đầu cuối được chia đôi không thể truy cập vào móc khóa nhưng tôi không có đầu mối về cách cho phép nó.

Cảm ơn sự giúp đỡ của bạn

+0

Bạn có thể dán vào lệnh bạn đang sử dụng để khởi chạy thiết bị đầu cuối không? –

+0

Thiết bị đầu cuối đầu tiên được khởi chạy mở Terminal.app Thứ hai với màn hình –

+0

Sự cố có thể được giải quyết bằng sudo không? – adam

Trả lời

2

Tôi đã xem lệnh bảo mật có vẻ như các móc khóa được gán cho thiết bị đầu cuối của tôi không giống nhau khi được chia hai. Nếu tôi đưa ra các lệnh an ninh tại nhà ga tôi có:

$ security list-keychains 
    "/Users/yannooo/Library/Keychains/login.keychain" 
    "/Library/Keychains/System.keychain" 

trong khi đó khi sử dụng màn hình tôi có kết quả như sau:

$ security list-keychains 
    "/Library/Keychains/System.keychain" 
    "/Library/Keychains/System.keychain" 

Kể từ chứng chỉ xây dựng của tôi được lưu trữ trong keychain đăng nhập, mã ký lỗi Tôi có vẻ bình thường.

Có ai biết cách tôi có thể gán một móc khóa cho thiết bị đầu cuối không? Tôi đã thử điều này mà không thành công

security login-keychain -s /Users/yannooo/Library/Keychains/login.keychain 

Bất kỳ ý tưởng nào?

+0

Sử dụng ứng dụng Keychain Access, sao chép thủ công các chứng chỉ được yêu cầu từ Keychain đăng nhập vào Keychain hệ thống. – brack

+0

brack, cảm ơn bạn! Việc này ổn với tôi. Nhưng tôi sợ một chút về nó - nó có đúng không? Cảm ơn –

+0

Nó không hoạt động trong Lion 10.7.2 (nhưng hoạt động trong 10.7.1) –

9

Bạn có thể sử dụng security list-keychains -s ${HOME}/Library/Keychains/login.keychain bên trong quá trình xây dựng để thêm rõ ràng chuỗi đăng nhập của bạn vào danh sách tìm kiếm không? Nó có vẻ như từ Terminal chia hai, quá trình xây dựng không nhìn thấy keychain người dùng của bạn. Điều đó có thể có ý nghĩa nếu danh sách tìm kiếm keychain dựa trên phiên bảo mật hiện tại của bạn - phiên thiết bị đầu cuối được chia nhỏ sẽ rời khỏi phiên đăng nhập giống như bạn ssh qua kết nối vòng lặp.

+0

Cảm ơn rất nhiều, điều này đã làm cho nó. –

+0

Không phải cho tôi. Nếu tôi đăng nhập tương tác vào tài khoản xây dựng, tôi có thể thêm các móc khóa vào danh sách tìm kiếm của mình. Nếu tôi đăng nhập như một người khác, tôi không thể. – sehugg

4

Như một poster cho biết,

security list-keychains -s "~/Library/Keychains/login.keychain" 

Nhưng tôi nghĩ rằng bạn chỉ có quyền truy cập vào các login.keychain khi bạn đã đăng nhập, trong bối cảnh GUI (tôi chỉ thử nghiệm trên một hệ thống thông qua SSH và màn hình, nhưng tôi cũng đã đăng nhập vào thông qua VNC). Có thể sử dụng launchctl để chọn bối cảnh GUI và chạy chương trình, nhưng tôi nghi ngờ rằng nó chỉ hoạt động đối với "người dùng đã đăng nhập" quá.

Nếu bạn cố gắng 'security show-keychain-info keychain-file' sau đó bạn sẽ nhận được lỗi sau:

User interaction is not allowed

Và đó là một cụm từ tìm kiếm với một số thông tin hơn. Giải pháp khác là đưa chứng chỉ vào Keychain hệ thống của bạn!

+1

Bạn đã tìm thấy giải pháp "cách chia sẻ" đăng nhập hay bất kỳ móc khóa nào? Tôi có nghĩa là sử dụng ssh hoặc cách khác (không GUI) để sử dụng Keychains. –

90

Tôi đã te lỗi tương tác người dùng không được phép và giải quyết nó bằng cách mở khóa keychain đầu tiên

security unlock-keychain /Users/yannooo/Library/Keychains/login.keychain 

Tôi cũng đã cố gắng để đưa certs của tôi trong keychain của hệ thống và nó đã làm việc. giải pháp cuối cùng của tôi là để đặt tất cả Certs liên quan iPhone của tôi trong một keychain chuyên dụng tên iPhone.keychain sử dụng Keychain Access ứng dụng

security list-keychains -s /Users/yannooo/Library/Keychains/iPhone.keychain 
security unlock-keychain -p keychainpassword /Users/yannooo/Library/Keychains/iPhone.keychain 
+0

Bạn có thể muốn sao chép các nhận xét này vào câu hỏi ban đầu của mình, thay vì đặt chúng dưới dạng "câu trả lời" –

+3

Đây là những gì tôi định làm, nhưng quá dài để vừa trong một nhận xét. Và không thể định dạng nhận xét AFAIK. –

+0

Điều này giải quyết vấn đề của tôi về "Tương tác người dùng không được phép". Bí quyết đẹp. – Jirapong

1

Nếu bạn đang thực hiện xcodebuild như là người chủ (mà bạn là khi bạn sudo) , bạn cần phải đăng nhập như là người chủ và đặt chứng chỉ ký của bạn trong keychain của root. Sau đó mở khóa keychain với bảo mật như trên.

6

Ok, vấn đề là hai điều đối với tôi, 1st đã mở khóa móc khóa;

security unlock-keychain login.keychain 

Thứ hai là (trống) cụm mật khẩu,

security import blahblahbackup.p12 -k login.keychain -T /usr/bin/codesign -P "" 

UPDATE: A có một vấn đề nhỏ sau, khi kịch bản được kích hoạt từ một kịch bản web hoặc sth. như thế. Nó chỉ thấy /Library/Keychains/System.chain. Vì vậy, tôi tìm thấy một workaround bẩn (có thể dẫn đến vấn đề an ninh nhưng ok cho tôi);

  • thiết lập pubkey ssh login (từ người dùng muốn gọi tập lệnh xây dựng, cho người dùng thực tế có chứng chỉ và sẽ chạy xcodebuild) trong trường hợp của tôi, đó là cùng một người dùng. Apache đang hoạt động như someuser và mọi thứ để xây dựng được thiết lập trên someuser.
  • và tập lệnh php của tôi (để kích hoạt xây dựng) đang gọi ~/build-script. Tôi đã thay đổi đó như thế này:

    ssh someuser @ localhost ~/build-script

để nó hoạt động trong một tty sản, và tất cả các keychain có thể truy cập, tất cả mọi thứ hoạt động tốt.

6

cập nhật cho mọi người chạy vào các vấn đề tương tự với Jenkins:

Nếu bạn thiết lập máy Mac của bạn để khởi động Jenkins qua LaunchDaemons, bạn cần phải chắc chắn để thêm

<key>SessionCreate</key> 
<true /> 

Vì vậy, toàn bộ ci .plist sẽ trông giống như vậy:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>Label</key> 
<string>Jenkins</string> 
<key>UserName</key> 
<string>user</string> 
<key>GroupName</key> 
<string>staff</string> 
<key>ProgramArguments</key> 
<array> 
<string>/usr/bin/java</string> 
<string>-Xmx512m</string> 
<string>-jar</string> 
<string>/path/to/jenkins/jenkins.war</string> 
</array> 
<key>RunAtLoad</key> 
<true/> 
<key>KeepAlive</key> 
<true/> 
<key>EnvironmentVariables</key> 
    <dict> 
    <key>JENKINS_HOME</key> 
    <string>/path/to/jenkins/home</string> 
    </dict> 
<key>SessionCreate</key> 
<true /> 
</dict> 
</plist> 

Tôi đã bị mắc kẹt với cùng một vấn đề với nhiều người ở trên. Cụ thể là tôi đã gặp phải sự cố khi chạy từ một tập lệnh của Jenkins Tôi nhận được ** Tương tác người dùng không được phép ** lỗi. Khi chạy từ trình bao ssh, tập lệnh của tôi hoạt động tốt.

Sự khác biệt mà hầu hết mọi người cũng đã thấy là nếu bạn chạy an ninh list-keychain bạn muốn nhận được:

$ security list-keychain 
    "/Library/Keychains/System.keychain" 
    "/Library/Keychains/System.keychain" 

Nhưng khi chạy trong vỏ ssh, tôi muốn nhận được:

$ security list-keychain 
    "/Users/<i>user_account_name</i>/Library/Keychains/login.keychain" 
    "/Library/Keychains/System.keychain" 

Và hầu hết mọi người sẽ có tất cả khóa/chứng chỉ của họ, v.v. trong khóa tài khoản người dùng . Giống như một số người đã đề xuất việc tạo chuỗi khóa mới mới khác với chuỗi khóa của người dùng và reseve nó cho công cụ ký XCode của bạn. Tôi đã kết thúc đưa tôi vào đây: /Library/Keychains/sysiphone.keychain

Tôi nghĩ rằng vấn đề là để thiết lập của tôi (và có thể cho bạn quá), bạn đang chạy trong một miền tùy chọn bảo mật khác (hệ thống so với người dùng). Cuối cùng - ở đây là làm thế nào tôi có sysiphone.keychain tôi để hiển thị lên:

$ sudo security list-keychains -d system -s "/Library/Keychains/sysiphone.keychain" 
Password: ***** 
$ security list-keychains -d system 
    "/Library/Keychains/sysiphone.keychain" 

... và kỳ diệu mọi thứ bắt đầu xây dựng trong Jenkins. Wow ... đó là khoảng 4 giờ xuống cống cho tôi. Thở dài.

+0

Điều này cố định vấn đề xây dựng TeamCity của tôi. Cảm ơn! – ddoughty

0

tôi đã làm:

  • xóa login.keychain từ danh sách

  • tạo keychain riêng trong $HOME/Library/Keychains/

  • thêm nó vào móc chìa khóa danh sách (tôi không chỉ định bất kỳ lĩnh vực cụ thể)

  • đặt làm mặc định

  • gọi security unlock-keychain vào nó

  • thêm giấy chứng nhận ký toàn cầu (WWDRCA) để nó

  • nhập khẩu khóa riêng và cả hai giấy chứng nhận phát triển và phân phối với nó

Nếu có login.keychain, tôi vẫn nhận được lỗi "Tương tác người dùng không được phép". Vì vậy, việc xóa login.keychain bằng cách sử dụng security delete-keychain cuối cùng đã giúp!

2

Tôi đang sử dụng Atlassian Bamboo 2.7 và OS X 10.7.3 Lion và tôi đã thử mọi cách tiếp cận được tìm thấy trong chuỗi nhưng tôi vẫn nhận được lỗi "tương tác người dùng không được phép".

Vấn đề là, trong phiên làm việc từ xa (như "superuser" chẳng hạn như trong trường hợp của Bamboo hoặc hệ thống xây dựng tự động khác), keychain cần phải được mở khóa. bình thường nhìn thấy (chẳng hạn như được hiển thị bởi Yann trong here) khi bạn không phải là superuser.

gì cuối cùng làm việc cho tôi là phải làm như sau:

  1. đăng nhập như quản trị hệ thống như mô tả here
  2. tạo việc ký kết chỉ keychain (ví dụ, ios.keychain)
  3. thêm các chứng chỉ ký cho nó (cùng với chứng chỉ WWDRCA)

Xác minh bằng cách đi su và chạy security list-keychains trên thiết bị đầu cuối. Bạn sẽ thấy ios.keychain trong danh sách. (sudo security list-keychains sẽ không hiển thị điều tương tự):

sh-3.2# security list-keychains 
"/private/var/root/Library/Keychains/login.keychain" 
"/Library/Keychains/ios.keychain" 
"/Library/Keychains/System.keychain" 

Tôi đã phát hiện ra rằng bạn vẫn phải thêm ios.keychain phạm vi tìm kiếm của bạn trước khi thực hiện lệnh unlock-keychain. Trong xây dựng kịch bản của bạn, có các dòng sau chạy:

KEYCHAIN=/Library/Keychains/ios.keychain 
# the -s option adds $KEYCHAIN to the search scope, while the -d option adds $KEYCHAIN to the system domain; both are needed 
security -v list-keychains -d system -s $KEYCHAIN 
security -v unlock-keychain -p bambooiphone $KEYCHAIN 
11

Một giải pháp:

  • Mở Keychain Access
  • Nhấp chuột phải vào tin chính
  • Chọn "Get Info"
  • Chọn tab "Kiểm soát truy cập"
  • Nhấp vào "Cho phép tất cả ứng dụng truy cập mục này"
  • Bấm "Save Changes"
  • Nhập mật khẩu của bạn
  • Thưởng thức
+0

Đây là những gì làm việc cho tôi. Trong trường hợp của chúng tôi, chúng tôi đang sử dụng Hudson. –

+0

Điều này đã giúp tôi cũng như cho một cert/key mới tôi đã sử dụng trong một TeamCity xây dựng. – Taytay

28

Có hai (có thể là ba!) Thành phần này. Một là keychain phải được mở khóa. Thứ hai, có một danh sách điều khiển truy cập bên trong keychain cho biết các quyền nào được cấp cho các ứng dụng trong trạng thái mở khóa. Vì vậy, ngay cả khi bạn đã mở khoá thành công, nếu khả năng truy cập khóa cá nhân và ký với nó không được cấp cho /usr/bin/codesign thì bạn vẫn sẽ nhận được thông báo này. Cuối cùng, nếu bạn đang sử dụng Mac OS Sierra, ID phân vùng mặc định được gán cho các khóa không chính xác để tương thích với mã nhị phân codesign.

Giải pháp là như sau:

1) Nếu bạn có quyền truy cập vào các Keychain Access GUI, sau đó bạn có thể tự cấp mọi chương trình hoặc/usr/bin/codesign truy cập bằng cách nhấp chuột phải vào khóa riêng của bạn, chọn tab "Kiểm soát truy cập" và sau đó chọn radio "Cho phép tất cả ứng dụng truy cập mục này" hoặc danh sách "Luôn cho phép truy cập bằng các ứng dụng này".

2) Nếu bạn gặp phải lỗi này, rất có thể bạn đang cố gắng chạy codesign cho người dùng không đăng nhập. Trong trường hợp này, bạn rõ ràng không có quyền truy cập vào giao diện "Keychain Access". Đối với những trường hợp này, bạn xác minh sign uỷ quyền thiếu cho các ứng dụng <null>, mà dường như có nghĩa là tất cả các ứng dụng, hoặc cụ thể /usr/bin/codesign bằng cách sử dụng:

security dump-keychain -i login.keychain 

Tuy nhiên, bạn không thể thêm hoặc sửa đổi các thuộc tính kiểm soát truy cập trong chế độ tương tác đối với một số lý do - - chỉ xóa!Bạn thực sự phải xóa khóa theo cách thủ công và thêm lại khóa đó vào móc khóa chỉ định cờ -T.

security import login.keychain -P "<password>" -T /usr/bin/codesign 

đâu -T định

-T Specify an application which may access the imported key (multiple -T options are allowed) 

3) Nếu bạn đang ở trên Mac OS Sierra, sửa đổi ID phân vùng để bao gồm các phân vùng apple. Có lẽ, đây là không gian tên được gán cho codesign vì nó được phân phối bởi Apple.

security set-key-partition-list -S apple-tool:,apple: -k "<password>" login.keychain

LƯU Ý: Các phân vùng apple-tool được chèn bằng các công cụ security, vì vậy lệnh trên bảo phân vùng đó. Để biết thêm thông tin về khía cạnh này, hãy xem: http://www.openradar.me/28524119

+0

Cảm ơn bạn rất nhiều! Điều này giải quyết được vấn đề của tôi. Tôi đã thêm/usr/bin/codesign vào khóa riêng của mình. – bmauter

+0

Thêm/usr/bin/codesign vào khóa cá nhân là giải pháp cho các vấn đề của chúng tôi với việc viết mã. Đây sẽ là câu trả lời được chấp nhận. Cảm ơn nhiều! – Vertigo

+0

'-T' không giống cách này nữa. Bạn cũng phải thiết lập một danh sách phân vùng. http://stackoverflow.com/a/40039594/9636 (Xin chào Mark!) –

2

Mở khoá móc khóa đăng nhập không hoạt động đối với tôi. Tạo một keychain riêng bằng cách sử dụng Keychain Access (gọi là iOS) và sau đó thêm các lệnh này vào bản dựng đã hoạt động (khi chạy Jenkins là người dùng của riêng tôi):

security -v list-keychains -d system -s ~/Library/Keychains/iOS.keychain; bảo mật -v unlock-keychain -p mật khẩu ~/Library/Keychains/iOS.keychain;

này sẽ hứa hẹn nhiều hơn, mặc dù: https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin#XcodePlugin-Userinteractionisnotallowed

2

Nếu bạn đang chạy security list-keychains và nhìn thấy keychain tùy chỉnh của bạn xuất hiện ở đâu đó trong danh sách, nhưng nó vẫn không hoạt động, nó có thể là bạn đang chạy vào vấn đề tôi đã theo đó các móc khóa được kiểm tra theo thứ tự từ danh sách tìm kiếm, và vì tôi không mở khóa login.keychain trong phiên SSH của mình, nó sẽ thất bại ở đó thay vì chuyển sang keychain tiếp theo trong danh sách, đó là tùy chỉnh mà tôi muốn Mở khóa.

Đặt danh sách tìm kiếm thành chuỗi khóa tùy chỉnh mà bạn mở khóa bằng security unlock-keychain hoạt động. Sử dụng phương pháp này từ câu trả lời của Yann cũng sẽ xóa login.keychain của bạn khỏi danh sách tìm kiếm.

Để duy trì login.keychain:

security list-keychains -s ~/Library/Keychains/custom.keychain ~/Library/Keychains/login.keychain 

Bằng cách này, khi sử dụng phiên GUI tại máy bạn vẫn sẽ có quyền truy cập vào login.keychain mục, nhưng mã ký sẽ kiểm tra keychain tùy chỉnh đầu tiên, mà thành công nếu bạn đã mở khóa nó.