Instalator pakietu Mac instaluje folder „Contents” w katalogu / Applications zamiast pakietu

2

Kiedy próbuję użyć pakietu z aplikacją .app do utworzenia instalatora dla komputerów Mac i uruchamiam instalator, tworzy on folder o nazwie „Contents” w folderze / Applications, a nie „pakietową aplikację” tak, jak powinien.

Testowałem z pkgbuild + productbuild:

pkgbuild --component "./myapp.app" --version 1 --install-location /Applications component.pkg
productbuild  --package-path "component.pkg" --distribution "./Distribution.xml" --package-path "./Temp" --resources "./Resources" --sign mycert "myapp.pkg"

I tylko z budowaniem produktu:

productbuild --component "./myapp.app" /Applications -s mycert myapp.pkg

W obu przypadkach uruchamiam instalator, wszystko wydaje się w porządku, ale w folderze Aplikacje widzę „Zawartość” (to jest zawartość pakietu aplikacji)

Próbowałem z „./myapp.app/” również w atrybucie --component, a nawet dodałem „/Applications/myapp.app” w --install-location

FlamingMoe
źródło
Czy próbowałeś określić opcję --root z resztą opcji pkgbuild?
MorganR
Opcji --root nie można używać z --component
FlamingMoe
Czy możesz spróbować z opcją --root zamiast --component? Pamiętam ten sam problem, co ty z narzędziem PackageMaker firmy Apple (GUI). Dowiedziałem się, że muszę sprawdzić opcję o nazwie „Dołącz root w pakiecie”. Zastanawiałem się, czy --root to zrobił, a - komponent nie.
MorganR
Dziękuję, ale ten sam problem ... Folder „Contents” (a nie sam pakiet .app) jest zainstalowany w folderze „Aplikacje”
FlamingMoe
Dobrze. Jedyną inną sugestią, która jest bardziej obejściem niż poprawką, jest próba umieszczenia pakietu aplikacji w folderze i podanie ścieżki do tego folderu. Na przykład: skopiuj „myapp.app” do „~ / Desktop / mytempfolder /” i spróbuj „pkgbuild --compontent '~ / Desktop / mytempfolder”. Mam nadzieję, że to zignoruje „mytempfolder” i skopiuje jego zawartość, która byłaby pakietem aplikacji.
MorganR 18.03.15

Odpowiedzi:

1

Podjąłem kilka prób, aby to zadziałało (instalatorowi udało się zrobić kilka naprawdę dziwnych rzeczy przy pierwszych kilku próbach). Ale wydaje się, że działa to niezawodnie.

Utworzyłem folder tymczasowy z aplikacją, którą chciałem spakować (pozostawienie aplikacji siedzącej gdzie indziej wydawało się skutkować wspomnianym dziwnym zachowaniem), a następnie spakować ją stamtąd. Utworzyłem więc folder tymczasowy o nazwie „test” na pulpicie i sam tam upuściłem aplikację. Następujące polecenie niezawodnie powoduje powstanie działającego pakietu na moim pulpicie.

productbuild --component ~/Desktop/test/myapp.app /Applications ~/Desktop/myapp.pkg --sign "my certificate identity name"

Coś, co jest przydatne podczas testowania, to jednoczesne uruchomienie sudo opensnoop | grep installdw terminalu. Generuje dużo danych wyjściowych, ale powinieneś być w stanie zobaczyć, jak pakiet aplikacji jest tworzony w coś podobnego, /var/folders/zz/GIBBERISH/C/PKInstallSandboxManager/GIBBERISH.activeSandbox/Root/a następnie kopiowany do ostatecznego miejsca docelowego.

Uwaga: Nie jestem pewien, dlaczego używasz -sw drugim przykładzie productbuildpolecenia podanego w pytaniu. Istnieją trzy opcje argumentów do zbudowania produktu, które zaczynają się od „s” (synteza, skrypty i znak), a strona podręcznika nie wspomina o użyciu krótszego „-s” dla żadnego z nich. Być może to jest problem. Oczywiście może to być literówka. :)

Alistair McMillan
źródło
Dobry pomysł ! ale to dziwne ... teraz nie widzę żadnych zmian w aplikacji ... nic nie jest zainstalowane, żadnych zmian ... a instalator mówi „aplikacje zostały zainstalowane” z zielonym znacznikiem na końcu ... dziwne !
FlamingMoe
@FlamingMoe Do odpowiedzi dodałem trochę informacji o opensnoop. Powinno to pomóc w określeniu, gdzie instalator pisze pakiet aplikacji, jeśli nie zapisuje go w / Applications.
Alistair McMillan
0

Myślę, że problemem jest to, że używasz --componentzamiast --root. Dokumenty są nieco niejasne, ale wygląda na to, że podobnie jak w przypadku katalogu głównego należy określić folder, który zawiera .apppakiet, a nie samą ścieżkę pakietu. Popełniłem ten błąd podczas używania --rooti byłem świadkiem, jak po prostu instaluje się zawartość mojego pakietu /Applications. Ta sama ostrożność jest wymagana przy faktycznym budowaniu pakietu za pomocą pkgbuild.

Skopiowałem .appgo do ./buildfolderu, a następnie:

pkgbuild --analyze --root ./build MyApp.plist 
pkgbuild --root ./build --component-plist MyApp.plist --identifier co.uk.MyApp --version 0 --install-location /Applications MyApp.pkg
productBuild --synthesize --package ./MyApp.pkg ./Distribution.xml
productBuild --distribution ./Distribution.xml --resources ./Resources --sign "Developer ID Installer: My Id" --package-path . ./MyApp-ver-whatever.pkg
Jonathan Mitchell
źródło
Powyższe polecenia nie działają dla mnie (MacOS Sierra i XCode 8.3). Podczas gdy pakiet jest tworzony i instalowany, pakiet .app nie jest kopiowany do / Aplikacje i nie mogę go znaleźć na dysku
madduci,