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 Conformance
sekcji:
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-signature
narzę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!
źródło
Odpowiedzi:
rpath
problemUdał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
Co oznacza, że problem był naprawdę zły
rpath
.rpath
Sł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
rpath
pomocą Appleinstall_name_tool
. Nie jest to coś, co użytkownik powinien kiedykolwiek robić i jest to coś, co deweloper aplikacji powinien naprawić przed wdrożeniem.źródło
Steve 2
Jest 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żkihdiutil
i musisz nadać jej nazwę (w tym przypadkuSteve
. 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.