Gatekeeper odrzuca prawidłowo podpisany wniosek

4

Próbuję opublikować podpisaną aplikację, ale podczas pobierania jej przez Internet strażnik narzeka:

Ponadto na stronie pomocy znajduje się informacja, że ​​aplikacja została zmodyfikowana:

Co tak naprawdę nie jest prawdą, oto moja procedura podpisywania / pakowania:

codesign --deep --force --verify -s "Developer ID Application: Nanolive SA (GMLD8K8WH3)" Steve/Steve.app
hdiutil create -volname Steve -srcfolder Steve -ov -format UDZO Steve.dmg
codesign -s "Developer ID Application: Nanolive SA (GMLD8K8WH3)" Steve.dmg

Cała procedura działa bez problemu i jak widać, nie zmieniam pakietu między podpisem a tworzeniem dmg.

Przejrzałem cały ten dokument i myślę, że wszystko jest w porządku: https://developer.apple.com/library/archive/technotes/tn2206/_index.html

Ponadto przejrzałem wszystko w Checking Gatekeeper Conformancesekcji:

Sprawdzanie dmg:

$ spctl -a -t open --context context:primary-signature -v Steve.dmg
Steve.dmg: accepted
source=Developer ID

Korzystanie z kodu:

$ codesign --verify --deep --strict --verbose=2 Steve.app
--prepared:/Volumes/Steve/Steve.app/Contents/MacOS/ffmpeg
--validated:/Volumes/Steve/Steve.app/Contents/MacOS/ffmpeg

<snip a lot of validated libs>

--prepared:/Volumes/Steve/Steve.app/Contents/Frameworks/libvtkRenderingAnnotation-7.1.1.dylib
--validated:/Volumes/Steve/Steve.app/Contents/Frameworks/libvtkRenderingAnnotation-7.1.1.dylib
Steve.app: valid on disk
Steve.app: satisfies its Designated Requirement

za pomocą check-signaturenarzędzia:

$ /Volumes/Signature\ Check/check-signature Steve.app
(c) 2014 Apple Inc.  All rights reserved.
YES
$ /Volumes/Signature\ Check/check-signature Steve.app/Contents/Frameworks/*
(c) 2014 Apple Inc.  All rights reserved.
Steve.app/Contents/Frameworks/QtConcurrent.framework: YES

<snip a lot of YES>

Steve.app/Contents/Frameworks/qwt: YES

I na koniec używając spctl:

spctl -a -t exec -vv Steve.app
Steve.app: accepted
source=Developer ID
origin=Developer ID Application: Nanolive SA (GMLD8K8WH3)

Wiersz poleceń mówi mi, że wszystko jest w 100% poprawne, ale nadal nie mogę uruchomić aplikacji z interfejsu użytkownika, ponieważ brakuje mi czegoś, czego nie powie mi wiersz poleceń.

Pamiętaj, że gdy pomijam kwarantannę przy użyciu wiersza polecenia, aplikacja uruchamia się poprawnie, co oznacza, że ​​o ile mi wiadomo, nie brakuje mi żadnej biblioteki.

Serwer kompilacji działa w systemie OSX High Sierra 10.13.6

Dziękuję za twój czas i pomoc!

Paul Habfast
źródło
1
Jeśli przejdziesz do Findera, a następnie Aplikacji, znajdź swoją aplikację i kliknij ją prawym przyciskiem myszy, a następnie wybierz Otwórz, da ci to kolejny przycisk pozwalający ominąć Strażnika Wrót. Czy próbowałeś już, czy aplikacja może się w ogóle otworzyć?
Jesse P.,
Tak, jeśli to zrobię, działa dobrze.
Paul Habfast,
Chłodny. Więc przynajmniej wiesz, że to działa i jest to tylko kwestia certyfikatu.
Jesse P.,
Zauważ, że developer.apple.com/library/archive/technotes/tn2206/... jest na 10.11 mówi, że szukaj w Aplle Developer aktualnych dokumentów ...... Obecny dokument może być tym jednym help.apple.com/xcode/ mac / current / # / dev033e997ca
Mark,

Odpowiedzi:

2

rpathproblem

Udało mi się rozwiązać problem dzięki pomocy zewnętrznej.

Podczas otwierania aplikacji konsoli widziałem ten komunikat, który pochodzi z XProtectService, który jest najwyraźniej prawdziwym odniesieniem pod względem GateKeeper

default    11:00:31.445713 +0200    XprotectService    File /Volumes/Steve 2/Steve.app/Contents/MacOS/Steve failed on rPathCmd /Users/example/tmp/buildSteve/QtConcurrent.framework/Versions/5/QtConcurrent

Co oznacza, że ​​problem był naprawdę zły rpath. rpathSłuży do wyszukiwania i obciążenia ramy potrzebne aplikacji.

Napisałem skrypt Pythona, aby rekurencyjnie to naprawić rpath, a teraz działa.

Skrypt zmienia pliki wykonywalne za rpathpomocą Apple install_name_tool. Nie jest to coś, co użytkownik powinien kiedykolwiek robić i jest to coś, co deweloper aplikacji powinien naprawić przed wdrożeniem.

Paul Habfast
źródło
Biorąc pod uwagę, że całe rozwiązanie wydaje się być skryptem perla, sugerowałbym dodanie go do odpowiedzi :)
JBis,
Udostępnij skrypt python wraz z poprawką lub wyjaśnij go bardziej szczegółowo. W tej chwili jest to po prostu odpowiedź typu „tak, rozwiązałem problem”, ale nie pomaga bez dodatkowych informacji.
Ludvig A. Norin
W rzeczywistości problem wygląda jak problem z dyskiem montażowym. Twoje pytanie nazywa się Steve Value i odpowiedź Steve 2Jest tak, ponieważ w pewnym momencie dysk odmontował się niepoprawnie i zostawił katalog w pobliżu, więc następne podłączenie utworzyło nowy katalog, a tym samym zmieniło nazwę ścieżki
Mark
Nie jest to problem z dyskiem instalacyjnym: jeśli masz już gotową aplikację do spakowania, zamieniasz ją w plik dmg za pomocą hdiutili musisz nadać jej nazwę (w tym przypadku Steve. Po otwarciu pakietu na innym komputerze , pierwszy zamontowany dmg jest montowany na /Volumes/Steve/, a następnie drugi na /Volumes/Steve 2/itd. Jest to po prostu standardowy sposób montowania dmgs na komputerach Mac.
Paul Habfast