Pytanie Jak podpisać aplikację Mac OS X w systemie Linux?


W przypadku OS X rozpowszechniam moją aplikację Java wewnątrz DMG. Od wydania Mountain Lion, otwarcie aplikacji daje następujący komunikat o błędzie:

[nazwa aplikacji] jest uszkodzony i nie można go otworzyć. Powinieneś wyrzucić   obraz dysku.

Wygląda na to, że poprawka polega na podpisaniu pliku .app więc czytam Przewodnik Podpisywania kodu. Wszystko wydaje się proste, z wyjątkiem ważnej kwestii jak zintegrować to z moim procesem budowania jednym kliknięciem.

Tworzenie mojego produktu na wszystkich platformach odbywa się na mojej maszynie programistycznej Linux. Uruchamiam skrypt Ant i instaluję instalator Windows, starter EXE, instalator Linuksa, aplikację OS X i DMG. Chciałbym zintegrować podpisywanie kodu w tym procesie.

Czy istnieje odpowiednik "codeign" dla systemu Linux?


12
2017-07-31 08:48


pochodzenie




Odpowiedzi:


Nie ma sposobu na podpisanie kodu aplikacji Mac OS X w systemie Linux

Jedyny sposób, w jaki udało mi się to zrobić do tej pory, to SSH na Maca i użyj tego.


5
2017-08-28 09:40



To najlepsze, co do tej pory znalazłem. Jeśli ktoś wie, jak to zrobić w Linuksie, nagrodzę odpowiedź po swojemu ... - Dan Gravell
Problem polega na tym, że otrzymujemy błąd "interakcja użytkownika nie jest dozwolona". podczas wywoływania codesign narzędzie przez SSH. :( - Mot
Może coś wspólnego z kluczami zainstalowanymi w twojej instancji OS X? Niestety, nie może być znacznie więcej pomocy niż to. - Dan Gravell
Prawdopodobnie pęk kluczy musi zostać odblokowany przed: security unlock-keychain - mstrap


Możesz to obejść, podpisując tylko aplikację JavaApplicationStub i info.plist swojej aplikacji i wykluczając podpisywanie folderu "Zasoby". Następnie musisz zmienić proces kompilacji, aby użyć wcześniej podpisanego kontenera. Oczywiście nie jest to sens kodowania, ale zadziała ;-)

Aby to osiągnąć, wykonaj następujące czynności:

  • utwórz swój .app jak zwykle
  • przenieś go do swojego mac
  • utwórz plik "ResourceRules.plist" o następującej treści:

ResourceRules.plist:

<?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>rules</key>
        <dict>
                <key>^Resources/</key>
                <false/>
                <key>^version.plist$</key>
                <true/>
        </dict>
</dict>
</plist>
  • teraz zarejestruj za pomocą następujących poleceń: CODESIGN_ALLOCATE = "/ Applications / Xcode.app / Contents / Developer / usr / bin / codesign_allocate" codesign -s "Nazwa certyfikatu" --resource-rules ResourceRules.plist -fv MyApp.app

  • Następnie usuń wszystko z zasobu i sprawdź podpis (codesign -v -v MyApp.app). Zobaczysz, że nadal jest ważny

  • Użyj pełnego podpisanego kodu pośredniczącego w procesie budowania. Możesz zmienić wszystko w Zasobach, ale nie możesz zmienić info.plist.


1
2017-11-08 08:22



BTW, jak zbudować pliki dmg na Linuksie? - Michael Wyraz
Ha! to już inna historia. Pierwotnie użyłem hfsutils (zob blog.serverhorror.com/2011/02/26/... ). Jednak od tego czasu odkryłem, że hfsutils pisze DMG niepoprawnie, aby zachować podpisaną aplikację (przepracowałem bilet z obsługą Apple, która to zakończyła). Odtąd musiałem zmienić moją kompilację na ssh na Maca Mini i stworzyć tam DMG. - Dan Gravell
Czy to faktycznie pomaga np. Unikanie ostrzeżeń Gatekeepera? - Malcolm MacLeod