2014-10-21 28 views
140

Po prostu uaktualniono do Xcode 6.1 dzisiaj i zgadnij co: teraz mam problemy z przesyłaniem kompilacji przy użyciu aplikacji komputerowej TestFlight. Tutaj jest błąd Dostaję natomiast aplikacja rozpoczyna budowę IPA:Błąd Xcode 6.1 podczas budowania IPA

The error

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules=/tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist /tmp/QYFSJIvu7W/Payload/XX.app failed with error 1. Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)! Warning: --resource-rules has been deprecated in Mac OS X >= 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: cannot read resources

do „Pomoc Artykuł” nie ma pojęcia co się dzieje.

To nie wydaje się być problemem TestFlight, ponieważ to samo dzieje się w środowisku CI, takim jak Jenkins, używając xcrun lub podobnych narzędzi.

Aplikacja nie była aktualizowana przez wiele miesięcy, więc wiem, że nie powinienem oczekiwać żadnych aktualizacji, aby rozwiązać ten problem w najbliższym czasie. Kiedyś pracowałem naprawdę dobrze dla mnie i moich klientów, więc nie jestem zbytnio zainteresowany rezygnowaniem z czegoś innego.

Wszelkie sugestie dotyczące tego, o co chodzi w tym błędzie, i sposób jego naprawy byłyby bardzo cenne.

+4

To nie wydaje się być problem z TestFlight, ponieważ to samo dzieje się w środowisku CI za pomocą polecenia xcrun, tak jak poniżej: 'xcrun -sdk iphoneos PackageApplication -v -o --sign --embed < Provisioning_profile> '. W Xcode 6.0.1 wszystko działało OK. –

Odpowiedz

312

Chciałbym wiedzieć dlaczego to działa, ale here's a fix że pracował dla mnie:

Found the fix !

Click on your project > Targets > Select your target > Build Settings >

Code Signing Resource Rules Path

and add :

$(SDKROOT)/ResourceRules.plist

+7

Dzięki! Szczerze mówiąc, nie obchodzi mnie, dlaczego to działa :) właśnie to, co Apple zepsuło w swojej świetnej passie w ciągu ostatnich kilku miesięcy. W każdym razie, dzięki za wskazanie rozwiązania. (i dla mnie za to, że nie sprawdziłem dokładnie błędu przed opublikowaniem) –

+10

CODE_SIGN_RESOURCE_RULES_PATH jest nazwą zmiennej, jeśli edytujesz ustawienia xcodeproj przez skrypt lub linię poleceń. https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/Getting%20Information%20on%20a%20Build%20Setting.html#//apple_ref/doc/uid/TP40010155-CH6-SW1 – roblocop

+5

Nie widzę "Ścieżki reguł podpisywania zasobów" w moich Ustawieniach kompilacji. Dowolny pomysł? – Georg

10

Wysłałem e-mail wsparcia TestFlight i dostał tej odpowiedzi:

Our team is currently investigating this issue with the TestFlight Desktop app. In the meantime, please use Xcode to create the IPA file and then upload it using the desktop app or the TestFlight website.

Sugerowana obejście wyszło.

+1

Udało mi się zrobić tylko .ipa z Xcode i przesłać za pomocą aplikacji komputerowej. – livingtech

+0

@livingtech Tak, jednak ja też się bałam: "Xcode generuje nowy profil zamiast wybierać ten, który chcę" - od razu :) Przesyłanie z testflight działało wspaniale. – helmesjo

0

Jak określono w another answer, można też po prostu nie określa certyfikat dystrybucji do podpisania i będą go zapakować prawidłowo . TestFlight będzie musiał zaktualizować swoją aplikację, aby to zrobić.

59

Poprawiona dla mnie łatka dla PackageApplications, usunąłem reguły zasobów, ponieważ są one nieaktualne w dniu 10.10.

Testflight buduje pracę bez niego. Appstore również się buduje.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin 
% diff PackageApplication PackageApplicationFixed 
155,157c155,156 
<  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", 
<       "--sign", $opt{sign}, 
<       "--resource-rules=$destApp/ResourceRules.plist"); 
--- 
>  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", 
>       "--sign", $opt{sign}); 
+0

Usunięto łotrzyka przestarzały parametr z PackageApplication, a buildozer buduje teraz moją aplikację Python dla iOS –

+0

Świetna poprawka! Bardzo dziękuję :) Powyższe ustawienie "Ścieżka reguł podpisywania zasobów kodu" nie naprawiło mojego problemu, ale ta odpowiedź była, plus poprawka jest teraz globalna we wszystkich projektach :) – Pellet

+0

@IanEllis: Czy mógłbyś dać mi znać, w jaki sposób usunąłeś "resource-rules" parametru z PackageApplication. To będzie wielka pomoc !! –

2

W Yosemite z XCode 6.4 nawet przy użyciu poprawki SDKROOT nieudane wysyłanie kodów. Poniższy artykuł wyjaśnia, jak załączyć skrypt XCode, aby obejść ten problem. Zauważ, że jest to łatanie XCode, więc jest to wersja specyficzna, ale rozwiązuje problem.

http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts

9

answer Tim Gostony nie działa już od momentu wydania Xcode 7. Teraz proces składania App Store zawodzi, gdy przepisy zasobów są obecne. Rozwiązaniem jest, aby wyczyścić swój kod Podpisanie Rules zasobów Path i zastąpić xcrun z xcodebuild narzędzia:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file] 

Najprostszym Options.plist do eksportowania plików IPA dystrybucji ad-hoc wygląda następująco:

<?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>iCloudContainerEnvironment</key> 
    <string>Production</string> 
    <key>teamID</key> 
    <string>[YOUR TEAM ID]</string> 
    <key>method</key> 
    <string>ad-hoc</string> 
</dict> 
</plist> 

Tam są inne opcje dostępne dla tego plist pliku dotyczące bitcode, rozrzedzenie aplikacji, itp. Dlatego myślę, że narzędzie xcodebuild jest właściwym narzędziem do eksportowania plików ipa dla iOS 9 i wyżej.

Więcej szczegółów o opcjach plist jest dostępnych z poleceniem xcodebuild -help.

+0

dziękuję Vladimirowi, bardzo się w to wkurzyłem, ponieważ jest w konflikcie z przesłaniami Xcode 7. – kevinl

+0

jak dokładnie zastąpić xcrun? Nie widzę żadnych ustawień dla wtyczki Jenkins Xcode :( – Hlung

+0

@Hlung: Nie używam wtyczki Jenkins Xcode –

1

answer z Alistry działa dla mnie, ale nie chcę zmieniać skryptu, który nie jest mój (przyszłe wydanie Xcode może zmienić ten plik, a korekta zostanie utracona).

diff PackageApplication PackageApplicationFixed 155,157c155,156 
<-  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", 
<-       "--sign", $opt{sign}, 
<-       "--resource-rules=$destApp/ResourceRules.plist"); 
--- 
->  my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", 
->       "--sign", $opt{sign}); 

myślę answer od Vladimir Grigorov jest najlepszy, jeśli masz archiwum przy użyciu:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file] 

W moim przypadku nie ma archiwum, bo po modyfikacji aplikacji budować i muszę zmienić identyfikator pakietu i podpisanie certyfikatu.

Rozwiązaniem, które znalazłem, jest zadzwonienie pod numer codesign przed użyciem PackageApplication. Tak:

replace : 

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>" 

by : 

/bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision" 
/usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>" 
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" 

Nie zapomnij osadzony plik .mobileprovision używając do podpisania z cp.

Powiązane problemy