2016-08-26 12 views
7

jestem wklejając mój ostatni post od wstępnych dyskusji tutaj:Podpisywanie błędów za pomocą use_frameworks! provisioning i unikalne profile

https://github.com/CocoaPods/CocoaPods/issues/4331

Ten problem ma już prawie rok, a nadal nie znalazł właściwego rozwiązania.

Kiedy budynek:

Code Sign error: Provisioning profile does not match bundle identifier: The provisioning profile specified in your build settings (“MyDistributionProfileName”) has an AppID of “com.myorg.myapp” which does not match your bundle identifier “org.cocoapods.PureLayout”. 

Uwaga! PureLayout dodaje do mojego strąka jako zależność używając (w mypod.podspec pliku): s.dependency 'PureLayout', '3.0.2'

To jest cały plik podspec mojego Pod:

Pod::Spec.new do |s| 
    s.name    = 'MyPod' 
    s.version    = '1.2.34' 
    s.license    = { :type => "MIT", :file => "LICENSE" } 
    s.homepage   = 'https-:-//bitbucket.org/XXXX123/my-pod' 
    s.authors    = { "AuthorName" => "[email protected]" } 
    s.summary    = 'This isa a cocoa pod that contains the MY framework.' 
    s.source    = { :git => "https-:-//bitbucket.org/XXXX123/my-pod", :tag => "#{s.version}" } 
    s.ios.deployment_target = '8.0' 
    s.source_files  = 'MyPod/**/*.{swift,h}' 
    s.resource = 'MyPod/*' 
    s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'ONLY_ACTIVE_ARCH' => 'NO'} 
    s.dependency 'PureLayout', '3.0.2' 
end 

Uwagi:

  1. Korzystanie z CocoaPods nie jest możliwe.

  2. Używanie @DimaVartanian poprawkę prowadzi do podobnych błędów jak napotkanych przez @mgrebenets

    ERROR ITMS-90035 nieprawidłowy podpis. Obiekt kodu nie jest w ogóle podpisany. Upewnij się, że podpisałeś swoją aplikację certyfikatem dystrybucji, a nie certyfikatem ad hoc lub certyfikatem programistycznym. Sprawdź, czy ustawienia podpisywania kodu w Xcode są prawidłowe na poziomie docelowym (które zastępują wszelkie wartości na poziomie projektu). Dodatkowo upewnij się, że przesyłany pakiet został zbudowany przy użyciu celu Release w Xcode, a nie celu symulatora. Jeśli masz pewność, że ustawienia podpisywania kodu są poprawne, wybierz "Wyczyść wszystko" w Xcode, usuń katalog "kompilacji" w Finderze i odbuduj cel wydania. Aby uzyskać więcej informacji, należy skonsultować https -: - // developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html”

    ERROR ITMS-90171 Nieprawidłowy Bundle Structure - Plik binarny "XApp.app/Frameworks/X.framework/XView.o" jest niedozwolony Twoja aplikacja nie może zawierać autonomicznych plików wykonywalnych lub bibliotek innych niż CFBundleExecutable z obsługiwanych pakietów.Zobacz Przewodnik programowania pakietu na stronie https- : -. // developer.apple.com/go/?id=bundle-structure informacji na temat struktury wiązki app iOS

  3. Mój projekt wykorzystuje również PushNotifications więc nie można użyć dowolnego wieloznaczny provisi na profilach.

  4. Oto mój wiersz siłowni do budowy build

    gym --clean --scheme ${XCODE_PROJECT_TARGET_NAME} --configuration Release --include_bitcode false --archive_path ${BUILDS_DIR}${PACKAGE_NAME}.xcarchive --output_directory $BUILDS_DIR --output_name "${PACKAGE_NAME}.ipa" --xcargs PROVISIONING_PROFILE=$APP_PROVISION_UUID 
    

    Linia ta działa bez żadnych błędów podczas @DimaVartanian poprawka jest stosowany, ale jak powyżej, prowadzi do ERROR ITMS-90035 i ERROR ITMS -90171 podczas procesu przesyłania.

    Oto moja linia pilotażowa przesyłając build:

    pilot upload --skip_submission --username ${APPLE_ID_USERNAME} --team_id ${APPLE_ITUNES_CONNECT_TEAM_ID} --verbose --ipa ${BUILDS_DIR}${PACKAGE_NAME}.ipa --skip_waiting_for_build_processing true 
    
  5. Mogę również potwierdzić, że ten sam problem istnieje wówczas, gdy budowa/archiwum/upload używając Xcode.

  6. Dodanie tego --export_options "ExportOptions.plist" do linii poleceń siłowni, nie miało żadnego znaczenia. Również nie udało się spróbować przez xcargs --xcargs "PROVISIONING_PROFILE=$APP_PROVISION_UUID exportOptionsPlist=$EXPORT_OPTIONS_PLIST".

    zawartość pliku jest następująca:

    <?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>teamID</key> 
        <string>TEAMID123</string> 
        <key>uploadSymbols</key> 
        <string>NO</string> 
        <key>compileBitcode</key> 
        <false/> 
        <key>uploadBitcode</key> 
        <false/> 
        <key>method</key> 
        <string>app-store</string> 
    </dict> 
    </plist> 
    

Mam nadzieję, że zespół CocoaPods będzie naprawić szybko.

Aby powiedzieć w skrócie - co nie jest koniec następującej kolejności:

  1. Utwórz projekt bazowy w Objectvie-C lub wziąć byle utrzymany Objective-C projekt
  2. tworzenia i wdrażania ram (Cocoa Touch ramowa) projekt Swift
  3. Tworzenie podspec dla tych ram i przesłać go do przechowalni
  4. Dołącz tych ram do projektu bazowego korzystając CocoaPods
  5. zbudować i uruchomić aplikację na symulatorze i na urządzenia przewodowego jest OK (wszystko działa zgodnie z oczekiwaniami)
  6. budowy i/lub przesłać do iTunesConnect nie jest ok, to nie!

Postaram się dodać przykładowy projekt później, aby przedstawić wersję demonstracyjną.

+0

Czy próbowałeś przekazać -exportOptionsPlist do xcodebuild podczas budowania aplikacji i wewnątrz tej metody zestawu plist: app-store? Zobacz moją odpowiedź w wątku CocoaPods, o której mowa w pytaniu – tgebarowski

+0

Próbowałem przekazać exportOtionsPlist. Nie powiodło się. Nie ma żadnego lepszego efektu. Zaktualizowany post ze szczegółami. –

+0

btw! Te klucze w pliku ExportOptions.plist wydają się mieć sens jedynie dla procesu przesyłania, a nie dla procesu budowania, więc brzmi to tak, jakby miało sens, dlaczego nie miało to żadnego wpływu. –

Odpowiedz

2

Ok, więc tym razem rozwiązałem ten problem na swój własny sposób. Jak zwykle, rozwiązanie jest łatwiejsze niż kiedykolwiek sądzono.

Przyczyna błędu robala Błąd ERMOR ITMS-90171 był tym razem dyrektywą w pliku podspec.

ten jeden: s.resource = 'MyPod/*'

Nie mam pojęcia, jak brakowało mi, że jeden, ale „MyPod/*” dosłownie mówi, to wszystko w katalogu MyPod, która oprócz aktywów graficznych zawartych pliki * .swift również.

Więc mała poprawka poprzez zmianę tej linii na: s.resource = 'MyPod/Graphics.xcassets' naprawiła problem. Nie ma już ERROR ITMS-90171.


Jednak Tutaj mamy jeszcze żyć z obejścia (zaproponowanej przez @DimaVartanian), które ustala wymóg podpisywania kodu dla ram przewidzianych przez cocoapods.

Sama poprawka jest dodanie tego kodu do bazy projektu „Podfile”:

post_install do |installer| 
    installer.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = "" 
     config.build_settings['CODE_SIGNING_REQUIRED'] = "NO" 
     config.build_settings['CODE_SIGNING_ALLOWED'] = "NO" 
    end 
    end 
end 

To pójdzie (po „strąka zainstalować”) przez wszystkie cele strączkowych w projekcie oraz zniesienie wymogu podpisywania kodu poprzez zmianę pewne ustawienia, jak widać w kodzie.

Jest kilka plotek, że to obejście nie będzie już wymagane po aktualizacji do XCode 8. Nie znalazłem żadnego oficjalnego potwierdzenia na ten temat, ale mam nadzieję, że to prawda.

Powiązane problemy