Nasza zautomatyzowana kompilacja działa na Jenkins. Sama kompilacja działa na niewolnikach, a niewolnicy są wykonywane przez SSH.
Pojawia się błąd:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
Wypróbowałem każdą sugestię, którą do tej pory widziałem w innych postach tutaj:
- Użycie bezpieczeństwa odblokowania pęku kluczy bezpośrednio przed podpisaniem w celu odblokowania pęku kluczy.
- Przeniesienie klucza podpisywania do własnego pęku kluczy.
- Przeniesienie klucza podpisu do pęku kluczy logowania.
- Przeniesienie klucza podpisywania do pęku kluczy systemu.
- Ręczne ustawianie list-pęków kluczy tylko do pęku kluczy, który zawiera klucz.
We wszystkich przypadkach pojawia się ten sam błąd.
Próbując zdiagnozować problem, próbowałem uruchomić polecenie „security unlock-keychain” na moim lokalnym terminalu i stwierdziłem, że w rzeczywistości nie odblokowuje ono pęku kluczy - jeśli spojrzę w Dostęp do pęku kluczy, symbol blokady nadal tam jest. Dzieje się tak, niezależnie od tego, czy podaję hasło w wierszu poleceń, czy też pozwolę, aby monit o to. Odblokowanie tego samego pęku kluczy za pomocą GUI spowoduje wyświetlenie monitu o hasło, a następnie odblokowanie go. Dodatkowo, jeśli uruchomię „security lock-keychain”, to zrobić patrz blokadę natychmiast po uruchomieniu komendy. To sprawia, że myślę, że odblokowanie pęku kluczy tak naprawdę nie działa. Doświadczam tego samego zachowania na Lion (którego używamy dla niewolników kompilacji) i Mavericks (na którym rozwijam).
Następnie spróbowałem dodać -v do wszystkich poleceń bezpieczeństwa:
list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
"/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.
Z tego wynika, że lista-pęków kluczy jest tym, co nie działa. Może nie działa. : /
Tutaj jest podobne pytanie . Rozwiązanie jest interesujące - ustaw „SessionCreate” na true w launchctl. Ale nie opieram się na master - mój proces kompilacji jest uruchamiany z SSH na maszynie do kompilacji slave. Może istnieje sposób z wiersza poleceń, aby zrobić to, co robi launchctl po uruchomieniu „SessionCreate”?
źródło
Odpowiedzi:
Ja też z tym walczyłem. Nic nie pomogło, dopóki nie wypróbowałem sugestii na http://devnet.jetbrains.com/thread/311971 . Dzięki ashish agrawal!
Zaloguj się do użytkownika kompilacji za pośrednictwem interfejsu GUI i otwórz dostęp do pęku kluczy. Wybierz swój klucz prywatny podpisu, kliknij prawym przyciskiem myszy, wybierz Uzyskaj informacje, przejdź do zakładki Kontrola dostępu i wybierz opcję „Zezwalaj wszystkim aplikacjom na dostęp do tego elementu”.
źródło
codesign
do listy „Zawsze zezwalaj”.security unlock-keychain
wszystkoCóż, wydaje mi się, że dziś odpowiem na swoje pytanie, ponieważ po dźgnięciu go przez dwa i pół dnia jedna z rzeczy, których próbowałem, zadziałała. Zamierzam się teraz od tego wycofać i mam nadzieję, że nadal będzie działać.
Zasadniczo wygląda na to, że tak
-d system
naprawdę nie działa. Tak więc wiele odpowiedzi na inne pytania powinno prawdopodobnie zostać zaktualizowanych, aby to odzwierciedlić.źródło
codesign
przez ssh bez faktycznego przechowywania hasła logowania w jakimś skrypcie?.env
pliku nie jest takie złe, ponieważ.env
plik zawiera już wrażliwe klucze np. AWS i Heroku. W naszym przypadku poświadczenia znaku kodu związanego z kompilacją są przechowywane w nowo utworzonym pęku kluczy, który jest następnie usuwany po kompilacji. Następnie jest ponownie tworzony na potrzeby następnej kompilacji. Jednaklogin
pęku kluczy nadal trzeba otworzyć, podobniesecurity unlock-keychain -p pass login.keychain
jak brakujące ogniwo. Dzięki!Żadna z pozostałych odpowiedzi nie działała dla mnie.
Tym, co ostatecznie uratowało mnie, był ten post
Podsumowując, może to być spowodowane domyślnym limitem czasu wynoszącym 5 minut, który wywoła ten błąd po długiej kompilacji.
Naprawić:
źródło
Confirm
nawet po zmianie dostępu. : /Spróbuj zadzwonić
security unlock-keychain
icodesign
jako polecenie jednowierszowe. To mi pomogło. Coś jak:źródło
sshexec
i za każdym razem tworzy nową sesję ssh.Używanie zabezpieczeń do tworzenia pęku kluczy dla / usr / bin / codign
Zaimportowanie certyfikatu i zaprogramowanie go na programową współpracę z Codesign nie jest kwestią używania loginu lub breloczków systemowych ani modlenia się do jakiegoś boga coding. Musisz tylko mieć ustawione odpowiednie uprawnienia. Polecam stworzenie nowego pęku kluczy specjalnie do celów związanych z kodowaniem.
W dzisiejszych czasach, aby
codesign
nie uzyskać wynikówerrSecInternalComponent
, musisz uzyskać poprawną listę partycji (ACL). Przejdę przez kolejne kroki:Utwórz pęku kluczy
w tym momencie pęku kluczy jest odblokowany, ale nie pojawi się w
Keychain Access
.Dodaj nowy pęku kluczy do listy wyszukiwania
Dodaj nowy pęku kluczy do listy. Jeśli najpierw nie pobierzesz oryginalnej listy,
list-keychains
której nie będzie jużlogin.keychain
na Twojej liście wyszukiwania.Odblokuj pęku kluczy
Jest to zbędne, jeśli utworzyłeś pęku kluczy powyżej, ale jeśli pęku kluczy już istniał, jest to konieczne.
Usuń wartości domyślne z pęku kluczy
Nie określając żadnych argumentów, ustawi to limit czasu automatycznej blokady na nieograniczony i usunie automatyczną blokadę w stanie uśpienia.
Zaimportuj swoje certyfikaty do podpisywania z pliku .p12
Zaimportuj certyfikaty i daj
codesign
dostęp za pomocą-T
opcji.Ustaw listę ACL w pęku kluczy
Jest to wymóg, który brakuje wielu osobom. Możesz zobaczyć, co robi macOS, używając dump-keychain. Co w przypadku kodowania wymaga
apple:
iapple-tool:
.-s
odnosi się do podpisywania certyfikatów.Gitlab-Runner, Jenkins i tym podobne
Jedną bardzo ważną rzeczą dla każdego runnera typu CI lub systemu kompilacji jest upewnienie się, że proces został uruchomiony
launchd
prawidłowo. Upewnij się, że plist zawiera<SessionCreate> </true>
.Nieprawidłowe dopasowanie właściciela pęku kluczy do procesu budowania i upewnienie się, że sesja bezpieczeństwa została utworzona, spowoduje różnego rodzaju bóle głowy. Z punktu widzenia diagnostyki możesz wprowadzić
list-keychains
i sprawdzić, czy wynik spełnia Twoje oczekiwania.To jest ze strony
launchd.plist
man:SessionCreate <boolean>
UserName <string>
GroupName <string>
Wreszcie kodowanie
Możesz wyszukać skrót certyfikatów podpisywania za pomocą
find-identity
Codesign a framework, dylib itp.
Zaprojektuj pakiet aplikacji
Uwagi końcowe - jeśli spojrzysz na to, jak robi to Xcode, ustawili oni
CODESIGN_ALLOCATE
na używanie tego zawartego w Xcode, a nie w/usr/bin
.Ustawiono ścieżkę wyszukiwania
${PLATFORM_PATH}:${TOOLCHAIN_PATH}:${PATH}
, gdzie ścieżka PLATFORMY to katalog / usr / bin dla danego docelowego SDK, a TOOLCHAIN_PATH to / usr / bin dla narzędzi hosta Xcode.źródło
Umieść klucze w pęku kluczy System
źródło
Więc to jest polecenie, które działa.
-A
ma zapobiec pytaniu o hasło przez Maca. Importowanie do system.keychain nie wymaga GUI.sudo security import <cert.p12> -k "/Library/Keychains/System.keychain" -P <passphrase> -A
źródło
Mój pęku kluczy był zablokowany. To opór moje postępy, aby zmienić ten fakt ...
Keychain Access
->Keychain First Aid
->Repair
, et voilá !źródło
Odblokowanie pęku kluczy nie wystarczy. Musisz także ustawić dostęp klucza prywatnego na „Zezwalaj wszystkim aplikacjom na dostęp do tego elementu”. Aby to zrobić z wiersza poleceń, konieczne jest ponowne zaimportowanie klucza. A więc biorąc rzeczy naraz:
Odblokuj pęku kluczy logowania, jeśli jest zablokowany. Nie powinno być jednak blokowane, ale tak czy inaczej, oto jak to zrobić:
Jeśli z jakiegoś powodu twoja maszyna budująca ma zablokowany pęku kluczy logowania i nie chcesz ujawniać tego hasła w skrypcie, powinieneś użyć innego pęku kluczy. Możesz go utworzyć na miejscu i użyć go w poprzednim i następnym poleceniu. Aby utworzyć na miejscu:
Następnie zaimportuj swoje certyfikaty i powiązane klucze prywatne do pęku kluczy logowania przy użyciu parametru -A. Zauważ, że nie musisz robić tego wszystkiego sudo ...
Parametr -A spowoduje ustawienie klucza prywatnego na „Zezwalaj wszystkim aplikacjom na dostęp do tego elementu”
Korzystając z tych wszystkich, powinieneś być w stanie stworzyć skrypt, który zainstaluje wymagany certyfikat w celu zbudowania wydania ipa i podpisania go bez pytania. Możesz przechowywać plik .p12 w swoim repozytorium, dzięki czemu każdy komputer może zbudować Twój IPA bez konieczności ręcznej konfiguracji.
źródło
Oprócz odblokowania pęku kluczy (jak wspomniano w innych odpowiedziach), musisz zezwolić wszystkim aplikacjom na dostęp do tokena uwierzytelniania Xcode w pęku kluczy:
źródło
Zaimportuj klucze do pęku kluczy systemu. Możesz użyć tego polecenia:
źródło
Spróbowałem więc tutaj każdej odpowiedzi i coś się nie zgadzało. W końcu zorientowałem się, że po ponownym uruchomieniu mojej usługi CI działa ona pod innym użytkownikiem, niż się spodziewałem. Zmiana na użytkownika, który faktycznie miał dostęp do klucza w łańcuchu logowania, naprawiła wszystko. Może to nie jest częsty problem, ale chciałem udokumentować mój konkretny powód tego błędu, na wypadek, gdyby zdarzyło się to innym.
źródło
Wydaje mi się, że nic nie działało, trzeba ponownie zainstalować Xcode. Jenkins ciągle podaje ten sam błąd. Zaoszczędzisz dużo czasu, jeśli po prostu przeniesiesz instalację Xcode do Kosza i przeinstalujesz. Upewnij się, że uruchomiłeś polecenie Codesign z wiersza poleceń przynajmniej raz.
Nawet jeśli pojawi się ten sam błąd, spróbuj ustawić „Odblokować pęku kluczy?” w Jenkins i podaj ścieżkę do swojego loginu.keychain w /Users/${USER}/Library/Keychains/login.keychain
Mam nadzieję, że Bóg będzie z tobą po tym.
źródło
W moim przypadku było to spowodowane tworzeniem pęku kluczy z domyślnym limitem czasu wynoszącym 300 sekund i długą kompilacją xcode trwającą ponad 300 sekund. Dla mnie obejściem było wywołanie:
security set-keychain-settings -t <longer timeout in seconds> <keychain>
natychmiast po utworzeniu tymczasowego pęku kluczy.
źródło
Przejrzałem wszystkie te sugestie i nadal miałem problemy z korzystaniem z Fastlane
gym
w pracy w . Po zainstalowaniu certyfikatu i odblokowaniu pęku kluczy byłem w stanie podpisać kod na urządzeniu podrzędnym, gdy ręcznie uruchomiłem polecenie Codesign w wierszu poleceń.W ramach obejścia problemu, jeśli Jenkins łączy się z serwerem slave za pomocą JNLP zamiast SSH, będziesz mógł kodować.
źródło
U mnie dzieje się tak, gdy jest dodany ręcznie drugi brelok i jest zablokowany. Z jakiegoś powodu
codesign
próbuje uzyskać dostęp do zablokowanego pęku kluczy i kończy się niepowodzeniem, mimo że certyfikaty znajdują się w pęku kluczy logowania (i są odblokowane). Odblokowanie drugiego rozwiązuje problem. Po prostu nie ma to dla mnie sensu.źródło
Po wypróbowaniu kilku z powyższych rozwiązań. Zdałem sobie sprawę, że jednym z czynników było to, że zaczynałem kompilację przy użyciu konsoli ION. Kiedy wróciłem do tworzenia kompilacji z aplikacji Terminal, wszystko działało dobrze.
źródło