Re-sign IPA (iPhone)

Obecnie buduję wszystkie moje aplikacje z 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 firmowego zamiast konta firmowego (w app store lub czasami rozproszonego ad-hoc).

Mój problem polega na tym, że gdy próbuję zrezygnować z aplikacji, nie będzie ona instalowana na moim urządzeniu (i powinna, ponieważ jest to Enterprise build). Komunikat o błędzie znajduje się na urządzenie (nie w iTunes) i mówi mi po prostu, że nie może zainstalować aplikacji. Nie podano więcej informacji.

Znalazłem trochę informacji; (http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/ )

I to może być możliwe. Problem, z którym się borykam, polega na tym, że nie wydaje się osadzać profilu aprowizacji mobilnej, jak to robię z moimi normalnymi kompilacjami (za pomocą xcrun), czy można to kontrolować za pomocą narzędzia codesign, czy możliwe jest ponowne podpisanie umowy z xcrun?

Z moim skryptem do rezygnacji aktualnie wykonuję

  • rozpakuj aplikację.ipa
  • appname=$(ls)
  • xcrun-sdk Iphoneos PackageApplication-s "$provisioning_profile ""$ project_dir/Payload/$appname" -o "$project_dir / app-10.ipa "--sign "$provisioning_profile "--embed "$mobileprovision "

Zajrzałem do pliku wynikowego ipa i wydaje się być bardzo podobny do oryginalnej aplikacji. Jakie pliki powinny naprawdę przebrać się tutaj? Początkowo myślałem, że _codesignature / CodeResources się zmieni, ale treść wygląda prawie dokładnie tak samo.

Wskaźniki są bardzo cenione.

Author: Erik, 2011-08-01

8 answers

W końcu to działa!

Przetestowano z IPA podpisanym certyfikatem cert1 w celu przesłania aplikacji ze sklepu app store bez dodawania urządzeń w profilu aprowizacji. Skutkuje nowym IPA podpisanym przy użyciu konta korporacyjnego i mobilnym profilem aprowizacji dla wdrożenia wewnętrznego (profil aprowizacji mobilnej zostanie osadzony w IPA).

Rozwiązanie:

Rozpakuj IPA

unzip Application.ipa

Usuń stare CodeSignature

rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true

Zastąp wbudowaną obsługę urządzeń mobilnych profil

cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"

Re-sign

/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

Re-package

zip -qr "Application.resigned.ipa" Payload

Edit: usunięto część uprawnień (zobacz komentarz, dzięki)

 207
Author: Erik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-03 03:57:44

Odpowiedzi na to pytanie są trochę nieaktualne i brakuje potencjalnie kluczowych kroków, więc jest to zaktualizowany przewodnik instalowania aplikacji od zewnętrznego dewelopera.

----- Jak zrezygnować z aplikacji na iOS-----

Załóżmy, że otrzymujesz aplikację (np.ipa) od innego dewelopera, i chcesz być w stanie zainstalować i uruchomić go na swoich urządzeniach (za pomocą ideviceinstaller, na przykład).

Przygotowanie Nowego Podpisywania Aktywa

Pierwszym krokiem jest uzyskanie profilu Aprowizacyjnego , który obejmuje wszystkie urządzenia, które chcesz zainstalować i uruchomić. Upewnij się, że profil zawiera certyfikat zainstalowany w Twoim Keychain Access (np. twórca iPhone ' a: niektóre ciało (XXXXXXXXX)). Pobierz profil (MyProfile.mobileprovision), dzięki czemu można zastąpić profil osadzony w aplikacji.

Następnie przygotujemy plik uprawnień do włączenia w podpisuję. Otwórz terminal i uruchom następujące czynności.

$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist

Spowoduje to utworzenie pliku xml opisującego twój profil Aprowizacyjny . Następnie chcemy wyodrębnić uprawnienia do pliku.

$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

Zastąp profil Provisioning i Zrezygnuj z aplikacji

Jeśli pracujesz z .IPA najpierw rozpakuj aplikację (jeśli masz .app zamiast tego możesz pominąć ten krok).

$ unzip MyApp.ipa

Twój katalog roboczy będzie teraz zawierał Payload/ i Payload/MyApp.app/. Następnie usuń stare pliki podpisów kodu.

$ rm -rf Payload/MyApp.app/_CodeSignature

Zastąp istniejący profil aprowizacji (np. osadzony.mobileprovision) z własnym.

$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision

Teraz podpisz aplikację z certyfikatem zawartym w profilu obsługi i uprawnieniami.plist, który stworzyłeś wcześniej.

$ /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 wszelkie dodatkowe frameworki muszą być zrezygnowane lub aplikacja zostanie zainstalowana, ale nie zostanie uruchomiona.

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*

Możesz teraz rezip aplikacji.

$ zip -qr MyApp-resigned.ipa Payload

Done

Możesz teraz usunąć katalog Payload, ponieważ masz oryginalną aplikację (MyApp.ipa) i twoja rezygnacja (MyApp-rezygnacja.ipa). Możesz teraz zainstalować MyApp-rezygnować.ipa na dowolnym urządzeniu włączonym do profilu aprowizacji.

 31
Author: grez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 22:17:00

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ęść przedostatniego stwierdzenia i zadziałało jak urok.

 11
Author: alleus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-02 14:26:13

Żadne z tych ustępstw nie działało dla mnie, więc musiałem wymyślić coś innego.

W moim przypadku miałem IPA z wygasłym certyfikatem. Mogłem przebudować aplikację, ale ponieważ chcieliśmy mieć pewność, że rozprowadzamy dokładnie tę samą wersję (tylko z nowym certyfikatem), nie chcieliśmy jej odbudowywać.

Zamiast sposobów rezygnacji wymienionych w innych odpowiedziach, zwróciłem się do metody Xcode tworzenia IPA, która zaczyna się od an .xcarchive z buduj.

  1. Skopiowałem istniejący .xcarchive i zaczął zastępować zawartość. (Zignorowałem .plik dSYM.)

  2. Po rozpakowaniu, aplikacja jest jedyną rzeczą w folderze Payload)

  3. Przeniosłem tę aplikację do nowego .xcarchive, pod Products/Applications zastąpienie aplikacji, która tam była.

  4. I edited Info.plist, edycja

    • ApplicationProperties/ApplicationPath
    • ApplicationProperties/CFBundleIdentifier
    • ApplicationProperties/CFBundleShortVersionString
    • ApplicationProperties/CFBundleVersion
    • Name
  5. Przeniosłem .xcarchive do folderu archiwum Xcode, zwykle /Users/xxxx/Library/Developer/Xcode/Archives.

  6. W Xcode otworzyłem okno Organizatora, wybrałem nowe archiwum i dokonałem regularnego (w tym przypadku Enterprise) eksportu.

Rezultatem było dobre IPA, które działa.

 3
Author: Gary Makin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-05 03:00:39

Sprawdzone z 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 świadczenia

3) Plik uprawnień (Opcjonalnie, dodaj tylko jeśli posiadasz uprawnienia)

4) identyfikator pakietu

5) Certyfikat Dystrybucji

Możesz zobaczyć wyjście .plik ipa zapisany po ponownym podpisaniu

Proste i potężne narzędzie

 3
Author: Saranjith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-04 04:27:55

Z opcją rezygnacji Fastlane sigh 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ą sigh, tuż przed poleceniem.

 1
Author: Vineeth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 07:25:22

Dziękuję, Eryku, że to zamieściłeś. To mi pomogło. Chciałbym dodać notatkę o dodatkowym kroku, którego potrzebowałem. W Ramach "Ładunek/Aplikacja.app / " istniał katalog o nazwie " CACertChains ", który zawierał plik o nazwie "cacert.pem ". Musiałem usunąć katalog i ... pem, aby wykonać te kroki. Jeszcze raz dziękuję! –

 0
Author: William Power,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 17:56:07

Jeśli masz aplikację z rozszerzeniami i / lub aplikację watch i masz wiele Profili aprowizacji dla każdego rozszerzenia/aplikacji watch, powinieneś użyć tego skryptu do ponownego podpisania pliku ipa.

Re-signing script at 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 dołączyć również inne profile obsługi rozszerzeń, dodając je za pomocą kolejnej opcji-P.

Dla mnie - wszystkie profile provisioning zostały podpisane przez to samo tożsamość certyfikatu / podpisu.

 -1
Author: RPM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 01:53:12