2013-10-04 10 views
6

Integruję podpisywanie kodu w naszych kompilacjach i utworzyłem niestandardowy pęku kluczy, który jest przechowywany w drzewie kodu źródłowego i służy do podpisania kodu (jest kopiowany do ~/Library/Keychains przed użyciem, więc znajduje się w dobrze znanej lokalizacji).Codesign mówi "nie znaleziono tożsamości", ale tożsamość jest na pęku

Jednak gdy próbuje się zalogować pojawia się błąd:

$ /usr/bin/codesign --sign='Mac Developer: John Doe (AA1AAA1AAA)' \ 
    --keychain=~/Library/Keychains/xxx.keychain \ 
    dist/64/gmake/release/bin/libmylib.dylib 

Mac Developer: John Doe (AA1AAA1AAA): no identity found 

Jednakże:

$ security find-identity -p codesigning ~/Library/Keychains/xxx.keychain 

Policy: Code Signing 
    Matching identities 
    1) 49F2FBE79899DF18A9638AC6B1302E2EB6E079AD "Mac Developer: John Doe (AA1AAA1AAA)" 
    1 identities found 

    Valid identities only 
    1) 49F2FBE79899DF18A9638AC6B1302E2EB6E079AD "Mac Developer: John Doe (AA1AAA1AAA)" 

Więc nie rozumiem, dlaczego codesign nie jest w stanie odnaleźć tożsamość.

Czy ktoś może zaproponować rozwiązanie?

Należy zauważyć, że próbowałem również z identyfikatorem SHA-1, z tym samym wynikiem.

Odpowiedz

8

Niektóre z komunikatów o błędach codeign są mniej wyraźne. Problem polega na tym, że kodowanie nie może znaleźć pęku kluczy, a to jest spowodowane użyciem --keychain=~/path. Jest to interpretowane jako pojedynczy argument i nie przeprowadza się rozszerzenia tyldy. Jeśli zmodyfikujesz polecenie, aby używał oddzielnych argumentów, powinno działać zgodnie z oczekiwaniami:

codesign --sign 'Mac Developer: John Doe (AA1AAA1AAA)' \ 
    --keychain ~/Library/Keychains/xxx.keychain \ 
    dist/64/gmake/release/bin/libmylib.dylib 
+0

Interesujące; Nie sądziłem, że powłoka nie rozwinie '~', jeśli podam argumenty w ten sposób. Przetestuję jutro i wrócę do ciebie, ale myślę, że jesteś zwycięzcą. – trojanfoe

+0

Tak, to jest odpowiedź, ale teraz dostaję "interakcja użytkownika nie jest dozwolona" pomimo faktu, że odblokowałem ją za pomocą 'security unlock-keychain'. Teraz wiem, że sekwencja będzie działać z 'login.keychain' (robię to często), ale wydaje się, że nie działa, gdy używasz niestandardowego pęku kluczy. Nienawidzę być wampirem * pomocy, ale czy masz jakieś sugestie? – trojanfoe

+0

Mogę wymyślić kilka możliwości. Jednym z nich jest to, że keychain nie został skonfigurowany tak, aby zawsze pozwalał na dostęp do klucza prywatnego, aby system mógł poprosić użytkownika o zezwolenie na dostęp. Możesz to ustawić za pomocą Keychain Access, klikając dwukrotnie klucz prywatny i dodając kody pod kontrolą dostępu (lub zezwalaj na wszystkie aplikacje). Drugim jest to, że domyślny limit czasu keychain wynoszący 5 minut jest zbyt krótki, jeśli odblokowanie nastąpi wcześnie w procesie kompilacji. Możesz kontrolować to poprzez ustawienia pęku kluczy, aby rozszerzyć lub usunąć limit czasu. –

Powiązane problemy