Obecnie wszystkie moje aplikacje buduję w hudson, używając xcodebuild, a następnie xcrun bez żadnych problemów
Otrzymałem kilka plików IPA od różnych osób, które chciałbym ponownie podpisać za pomocą konta korporacyjnego zamiast konta firmowego (dla sklepu z aplikacjami lub czasami dystrybuowanych ad-hoc).
Mój problem polega na tym, że gdy próbuję zrezygnować z aplikacji, nie zainstaluje się ona na moim urządzeniu (a powinno, ponieważ jest to wersja Enterprise). Komunikat o błędzie znajduje się na urządzeniu (nie w iTunes) i informuje mnie po prostu, że nie można zainstalować aplikacji. Nie podano więcej informacji.
Znalazłem informacje, ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for- upload / )
A to może być możliwe. Problem, z którym się zmagam, polega na tym, że wydaje się, że nie wydaje się osadzać mobilnego profilu obsługi administracyjnej, tak jak robię to w przypadku moich normalnych kompilacji (przy użyciu xcrun), czy można to kontrolować za pomocą narzędzia do kodowania, czy też można ponownie podpisać za pomocą xcrun ?
Obecnie wykonuję mój skrypt rezygnacji
- rozpakuj app.ipa
- appname = $ (ls Payload)
- xcrun -sdk iphoneos PackageApplication -s "$ provisioning_profile" "$ project_dir / Payload / $ appname" -o "$ project_dir / app-resigned.ipa" --sign "$ provisioning_profile" --embed "$ mobileprovision"
Przejrzałem wynikowy plik ipa i wydaje się, że jest bardzo podobny do oryginalnej aplikacji. Jakie pliki naprawdę powinny się tutaj zmienić? Początkowo myślałem, że _CodeSignature / CodeResources ulegnie zmianie, ale zawartość wygląda prawie tak samo.
Wskaźniki są bardzo cenione.
/usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.app
Następnie podczas rezygnacji dodaj--entitlements entitlements.plist
Odpowiedzi na to pytanie są trochę nieaktualne i nie zawierają potencjalnie kluczowych kroków, dlatego jest to zaktualizowany przewodnik dotyczący instalowania aplikacji od zewnętrznego programisty.
----- Jak zrezygnować z aplikacji na iOS -----
Załóżmy, że otrzymujesz aplikację (np. MyApp.ipa) od innego programisty i chcesz mieć możliwość jej zainstalowania i uruchomienia na swoich urządzeniach ( na przykład za pomocą ideviceinstaller ).
Przygotuj nowe zasoby do podpisywania
Pierwszym krokiem jest uzyskanie profilu obsługi administracyjnej, który obejmuje wszystkie urządzenia, które chcesz zainstalować i na których chcesz działać. Upewnij się, że profil zawiera certyfikat, który zainstalowałeś w swoim Keychain Access (np. IPhone Developer: Some Body (XXXXXXXXXX)). Pobierz profil (MyProfile.mobileprovision), aby móc zastąpić profil osadzony w aplikacji.
Następnie przygotujemy plik uprawnień do podpisania. Otwórz terminal i uruchom następujące.
$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist
Spowoduje to utworzenie pliku XML opisującego profil obsługi administracyjnej . Następnie chcemy wyodrębnić uprawnienia do pliku.
$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist
Wymień profil obsługi administracyjnej i zrestartuj aplikację
Jeśli pracujesz z plikiem .ipa , najpierw rozpakuj aplikację (jeśli masz zamiast tego .app , możesz pominąć ten krok).
Twój katalog roboczy będzie teraz zawierał
Payload/
iPayload/MyApp.app/
. Następnie usuń stare pliki podpisów kodu.Zastąp istniejący profil informacyjny (tj. Embedded.mobileprovision) własnym.
$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision
Teraz podpisz aplikację za pomocą certyfikatu zawartego w Twoim profilu informacyjnym i utworzonej wcześniej encyklopedii entity.plist.
$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app
WAŻNE: musisz również zrezygnować ze wszystkich frameworków zawartych w aplikacji . Znajdziesz je w
Payload/MyApp.app/Frameworks
. Jeśli aplikacja jest napisana w języku Swift lub zawiera dodatkowe frameworki, należy je zrezygnować, w przeciwnym razie aplikacja zostanie zainstalowana, ale nie będzie działać.$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*
Możesz teraz ponownie załadować aplikację.
Gotowe
Możesz teraz usunąć
Payload
katalog, ponieważ masz oryginalną aplikację (MyApp.ipa) i wersję, z której zrezygnowałeś (MyApp-resigned.ipa). Możesz teraz zainstalować MyApp-resigned.ipa na dowolnym urządzeniu uwzględnionym w Twoim profilu informacyjnym.źródło
Z powodzeniem zastosowałem się do tej odpowiedzi, ale ponieważ uprawnienia się zmieniły, po prostu usunąłem
--entitlements "Payload/Application.app/Entitlements.plist"
część przedostatniej wypowiedzi i zadziałało to jak urok.źródło
SecItemCopyMatching: missing entitlement
. I nie ma osobny plik Entitlements.plist, tak aby zachować uprawnienia użyłem @ komentarzu LordT za : najpierw utworzyć plik uprawnień:echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>/usr/bin/codesign -d --entitlements - temp/Payload/$APP_NAME | sed -E -e '1d'" > temp/newEntitlements
, a następnie użyć go podczas podpisywania:--entitlements temp/newEntitlements
.Myślę, że najłatwiej jest skorzystać z Fastlane:
sudo gem install fastlane -NV hash -r # for bash rehash # for zsh fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"
źródło
Sprawdzono w systemie Mac OS High Sierra i Xcode 10
Możesz po prostu zaimplementować to samo za pomocą aplikacji iResign .
Podaj ścieżkę 1) .ipa
2) Nowy profil prowizyjny
3) Plik uprawnień (opcjonalnie, dodaj tylko wtedy, gdy masz uprawnienia)
4) Identyfikator pakietu
5) Certyfikat dystrybucji
Możesz zobaczyć wyjściowy plik .ipa zapisany po ponownym podpisaniu
Proste i wydajne narzędzie
źródło
Żadne z tych rezygnujących podejść nie działało na mnie, więc musiałem wypracować coś innego.
W moim przypadku miałem IPA z wygasłym certyfikatem. Mogłem odbudować aplikację, ale ponieważ chcieliśmy mieć pewność, że dystrybuujemy dokładnie tę samą wersję (tylko z nowym certyfikatem), nie chcieliśmy jej odbudowywać.
Zamiast sposobów rezygnacji z innych odpowiedzi, zwróciłem się do metody Xcode tworzenia IPA, która zaczyna się od pliku .xcarchive z builda.
Zduplikowałem istniejący plik .xcarchive i zacząłem zastępować zawartość. (Zignorowałem plik .dSYM.)
Wyodrębniłem starą aplikację ze starego pliku IPA (przez rozpakowanie; aplikacja jest jedyną rzeczą w folderze Payload)
Przeniosłem tę aplikację do nowego .xcarchive,
Products/Applications
zastępując istniejącą tam aplikację.Redagowałem
Info.plist
, redagowałemApplicationProperties/ApplicationPath
ApplicationProperties/CFBundleIdentifier
ApplicationProperties/CFBundleShortVersionString
ApplicationProperties/CFBundleVersion
Name
Zwykle przenosiłem .xcarchive do folderu archiwum Xcode
/Users/xxxx/Library/Developer/Xcode/Archives
.W Xcode otworzyłem okno Organizatora, wybrałem to nowe archiwum i wykonałem regularny (w tym przypadku Enterprise) eksport.
Rezultatem było dobre IPA, które działa.
źródło
Dzięki opcji rezygnacji Fastlane możesz to zrobić bardzo łatwo.
sigh resign -p <path-to-profile-with-mobileprovision-ext> -i <code-sighning-identity-of-your-app>
Możesz pobrać profil również za pomocą westchnienia, tuż przed komendą.
źródło
W 2020 roku zrobiłem to z Fastlane -
Oto polecenie, którego użyłem
$ fastlane run resign ipa:"/Users/my_user/path/to/app.ipa" signing_identity:"iPhone Distribution: MY Company (XXXXXXXX)" provisioning_profile:"/Users/my_user/path/to/profile.mobileprovision" bundle_id:com.company.new.bundle.name
Pełna dokumentacja tutaj - https://docs.fastlane.tools/actions/resign/
źródło
Dziękuję Erik za opublikowanie tego. To zadziałało dla mnie. Chciałbym dodać uwagę na temat dodatkowego kroku, którego potrzebowałem. W „Payload / Application.app /” znajdował się katalog o nazwie „ CACertChains ”, który zawierał plik o nazwie „ cacert.pem ”. Musiałem usunąć katalog i .pem, aby wykonać te czynności. Dzięki jeszcze raz! -
źródło
Wypróbowałem wszystkie rozwiązania, ale w końcu jestem w stanie stworzyć zrezygnować ipa za pomocą tych poleceń
Rezygnacja z certyfikatów
7. Set :CFBundleIdentifier “com.mycompany.newbundleidentifier” (This should be new bundle ID) 8. save 9. quit
https://stackoverflow.com/a/37172815 https://stackoverflow.com/a/50392448 https://coderwall.com/p/qwqpnw/resign-ipa-with-new-cfbundleidentifier-and-certificate
źródło
Jeśli masz aplikację z rozszerzeniami i / lub aplikację zegarka i masz wiele profili aprowizacji dla każdego rozszerzenia / aplikacji zegarka, użyj tego skryptu, aby ponownie podpisać plik ipa.
Ponowne podpisywanie skryptu na Github
Oto przykład użycia tego skryptu:
./resign.sh YourApp.ipa "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision -p <path_to_provisioning_profile_for_watchkitapp>.mobileprovision -p <path_to_provisioning_profile_for_todayextension>.mobileprovision resignedYourApp.ipa
Możesz również dołączyć inne profile obsługi rozszerzeń, dodając je z jeszcze jedną opcją -p.
Dla mnie - wszystkie profile aprowizacji zostały podpisane tym samym certyfikatem / tożsamością podpisu.
źródło
fastlane sigh resign YourApp.ipa --signing_identity "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision
zamiast tego.