tworzenie iOS builds / IPA nie działa już z wiersza poleceń

Przegląd

Nasza linia poleceń buduje (aby budować i tworzyćipa) nie działają już.

ITunesConnect zaczął odrzucać Kompilacje, które używają ustawienia budowania CODE_SIGN_RESOURCE_RULES_PATH.

Jeśli zbudujemy bez tego ustawienia narzędzie PackageApplication (którego używamy do tworzenia podpisanego .IPA).

Wygląda na to, że PackageApplication wywołuje /usr / bin / codesign z argumentami resource-rules, nawet jeśli ustawienie budowaniaCODE_SIGN_RESOURCE_RULES_PATH jest wyłączone

I podejrzewa, że PackageApplication musi zostać zaktualizowany tak, aby nie wywoływał /usr/bin / codesign z argumentami resource-rules, gdy ustawienie kompilacji CODE_SIGN_RESOURCE_RULES_PATH jest wyłączone.

Czy ktoś znalazł na to rozwiązanie?

Szczegóły

Naszą aplikację budujemy w wierszu poleceń w następujący sposób:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'

Tworzymy podpis .ipa w wierszu poleceń tak:

xcrun -log -sdk iphoneos PackageApplication "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.app" -o "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.ipa" -sign "iPhone Distribution: MyTeam (XXXXXXXXXX)" -embed /Users/mpv/Library/MobileDevice/Provisioning\ Profiles/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mobileprovision

ITunesConnect odrzuca teraz nasze buildy z następującym błędem:

" ten pakiet jest nieprawidłowy. Info.plist zawiera nieprawidłowy klucz "CFBundleResourceSpecification" w pakiecie myApp [myApp.app] "

Jeśli usuniemy bit 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' z polecenia build, aplikacja zostanie zbudowana bez klucza CFBundleResourceSpecification plist(co zakładam, że jest tym, czego chcemy). Nowe polecenie build wygląda tak:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 

Problem polega teraz na tym, że komenda do budowaniaipa nie występuje z następującym błędem:

Błąd: / usr / bin / codesign --force --preserve-metadata = identyfikator,uprawnienia, resource-rules --sign iPhone Distribution: MyTeam (XXXXXXXXX) --resource-rules=/var/folders/2B/7hylk7nn13dgrl9yyh2wp0lm0000gn/t/zdrjmkktq/Payload/myApp.App / ResourceRules.plist --entitlements /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/t/zdrjmkktq/entitlements_plistIUdGWLYe / var/folders/2B/7hylk7nn13dgrl9yyh2wp0lm0000gn/t/zdrjmkktq/Payload / myApp.aplikacja nie powiodło się z błędem 1. Wyjście: Warning: usage of --preserve-metadata z opcją "resource-rules" (deprecated in Mac OS X >= 10.10)!

Warning: -- resource-rules has been deprecated in Mac OS X > = 10.10! / var/folders/2B/7hylk7nn13dgrl9yyh2wp0lm0000gn/t/zdrjmkktq/Payload / myApp.App / ResourceRules.plist: nie można odczytać zasobów

Wygląda na to, że PackageApplication wywołuje /usr/bin/codesign z argumentami resource-rules, nawet jeśli ustawienie CODE_SIGN_RESOURCE_RULES_PATH argument / build jest wyłączone.

Myślę, że PackageApplication musi zostać zaktualizowany, aby nie wywołuje /usr/bin/codesign z argumentami resource-rules, gdy ustawienie CODE_SIGN_RESOURCE_RULES_PATH argument / build jest wykluczone.

Author: Vadim Kotov, 2015-09-24

5 answers

Apple wróciło do mnie z rozwiązaniem. Od Xcode 7 powinniśmy używać xcodebuild zamiast PackageApplication do produkcji .plik ipa.

Xcodebuild ma nową opcję-exportArchive, aby utworzyć .ipa, który działa bardziej jak Xcode Organizer.

Więc powinniśmy teraz:

  1. zbuduj archiwum za pomocą xcodebuild archive
  2. create the .ipa z xcodebuild -exportArchive

Teraz tworzymy archiwum w następujący sposób:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive

Teraz eksportujemy .IPA jak to:

xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build

Te dwa polecenia tworzą pliki build/myApp.xcarchive i build/myApp.ipa

Zauważ, że xcodebuild -exportArchive wymaga argumentu -exportOptionsPlist, który wskazuje naplik plist z opcjami eksportu. Aby uzyskać pełną listę tego, co możesz umieścić w pliście, Uruchom xcodebuild -help. Minimalna zawartość pliku 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>method</key>
    <string>app-store</string>
    <key>teamID</key>
    <string>YOUR_TEN_CHARACTER_TEAM_ID</string>
</dict>
</plist>

W Xcode 9, musisz teraz określić więcej szczegółów w exportOptions.plist jak poniżej:

<?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>compileBitcode</key>
  <false/>
  <key>method</key>
  <string>ad-hoc</string>
  <key>provisioningProfiles</key>
  <dict>
    <key>my.bundle.idenifier</key>
    <string>My Provisioning Profile Name</string>
  </dict>
  <key>signingCertificate</key>
  <string>iPhone Distribution</string>
  <key>signingStyle</key>
  <string>manual</string>
  <key>stripSwiftSymbols</key>
  <true/>
  <key>teamID</key>
  <string>YOURTEAMID</string>
  <key>thinning</key>
  <string>&lt;none&gt;</string>
</dict>
</plist> 
 101
Author: Mike Vosseller,
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-26 01:58:31

Kroki, aby terminal IPA Usig

Czysty Projekt:

Release

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration  ReleaseAdhoc  -alltargets

Debug

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets

Projekt Archiwum:

Debug

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp” -configuration Debug  -archivePath  pathForArchiveFolder/myApp.xcarchive

Release

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp”  -archivePath  pathForArchiveFolder/myApp.xcarchive

Export IPA

starsza wersja: Może to oznaczać, że podpisany zasób został dodany, zmodyfikowany lub usunięty. Błąd

xcodebuild -exportArchive -archivePath  projectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportFormat ipa  -exportProvisioningProfile  “provisioning profile”

nowa wersja:

xcodebuild -exportArchive -archivePath  ProjectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportOptionsPlist  ProjectFolder/exportPlist.plist
 12
Author: Devesh,
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
2016-12-19 11:31:11

Oto szybka wskazówka w przypadku, gdy trzeba utworzyć exportOptions.plik plist jako część procesu budowania (może Jenkins).

Możesz użyć narzędzia plutil, Aby zmienić JSON w plist. Przykład:

echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- -
Smacznego!
 2
Author: Johannes Fahrenkrug,
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-03-31 19:06:38

Przejdź do folderu projektu:

Archiwum:

Dla debugowania:

xcrun xcodebuild -scheme MyApp -configuration Debug archive -archivePath build/MyApp.xcarchive

Dla Wydania:

xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive

IPA:

xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/
 1
Author: Devesh,
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
2016-12-15 14:15:20

Utworzyłem nazwę projektu myFirstApp, a lokalizacja projektu to Desktop / myFirstApp. Sprawdzone na Xcode 8.3

Krok 1 -

cd /Users/Ved/Desktop/myFirstApp/

Krok 2 -

xcodebuild -scheme myFirstApp archive \

-archivePath /Users/Ved/Desktop/myFirstApp.xcarchive

Krok 3 -

xcodebuild -exportArchive -exportFormat ipa \

-archivePath "/Users/Ved/Desktop/myFirstApp.xcarchive" \

-exportPath "/Users/Ved/Desktop/myFirstApp.ipa" \

-exportProvisioningProfile "myFirstAppDevProfile"
 0
Author: Ved Rauniyar,
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-15 11:54:14