[ios] 잘못된 Swift 지원-파일이 일치하지 않습니다.

방금 Swift 2에서 앱을 다시 작성했습니다. 내부 테스트를 위해 iTunesConnect (Xcode 7 GM을 통해)에 앱을 업로드하려고합니다.

나는 잠시 동안 “Invalid Swift Support”오류 ( 다른 관련 질문이 있음 ) 와 씨름 했지만 이제는 약간 다른 것으로 변경되었습니다.

Apple의 오류는 이제 다음과 같이 말합니다.

잘못된 Swift 지원

libswiftCoreLocation.dylib, libswiftCoreMedia.dylib, libswiftCoreData.dylib, libswiftAVFoundation.dylib 파일이 일치하지 않습니다.

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks/libswiftAVFoundation. dylib

파일이 올바른지 (?) 확인하고 앱을 다시 빌드 한 다음 다시 제출하세요.

사후 처리를 적용하지 마십시오.

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks/libswiftAVFoundation. dylib.

‘후 처리 적용 안함’, ‘파일이 올바른지 확인하고 앱을 다시 빌드 한 다음 다시 제출’등을 검색하여 유사한 오류를 찾을 수 없습니다.

누구든지 “파일이 올바른지 확인”할 수있는 방법을 알고 있거나 다른 권장 사항이 있습니까? 감사합니다.



답변

여기에도 같은 문제가 있습니다. 저는 이것이 Bitcode와 관련된 개발자 도구의 버그 일 가능성이 높습니다.

방금 해결 방법을 찾았습니다.

  1. 새 빌드 번호로 앱 보관 🙁
  2. Organizer“Show in Finder”에서 Finder의 아카이브 (.xcarchive 파일)를 찾습니다.
  3. 패키지를 열고 같은 디렉터리를 찾을 수 Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/
  4. 모든 libswiftXxx.dylib파일을에서 SwiftSupport/iphoneos/복사Products/Applications/YourApp.ipa/Frameworks/ 하고 덮어 씁니다.
  5. 이제 오거나이저에서 App Store업로드

이 프로세스를 통해 빌드 업로드에 성공했습니다. 이제 검토를 기다리고 있습니다.

노트:

CocoaPods를 사용하고 있으며 ENABLE_BITCODE옵션은 NO였습니다.


답변

편집 : CocoaPods 0.39.0 이 출시 되어이 문제를 해결했습니다!

으로 @orkenstein 언급 ,이 간단한 해결책 에 몇 가지 코드를 주석으로는 Pod-frameworks.sh. 여기에 좀 더 자세한 내용이 포함되어 있습니다.

Xcode 프로젝트 디렉토리에서 Pods/Target Support Files/Pods/Pods-frameworks.sh

다음 줄을 주석 처리하십시오.

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

=>

# Embed linked Swift runtime libraries
# local basename
# basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
# local swift_runtime_libs
# swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
# for lib in $swift_runtime_libs; do
#   echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
#   rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
#   code_sign_if_enabled "${destination}/${lib}"
# done

저장 Pods-frameworks.sh하고 잘 가야합니다!


답변

이 문제에 대한 수정 사항이 병합되었으며 최신 CocoaPods 버전에서 사용할 수 있습니다. 0.39.0.beta.5

https://github.com/CocoaPods/CocoaPods/pull/4268

CocoaPods의 최신 버전을 얻으려면 gem install cocoapods --pre

또는 릴리스되지 않은 기능 실행 지침을 따르십시오.
http://guides.cocoapods.org/using/unreleased-features

CocoaPods의 최신 버전이 있으면 pod install다시 실행 하십시오.


답변

나는 fastlane gym 1.9.0을 사용하여 내 앱을 빌드했는데 파일이 일치하지 않아서 애플에서 계속 거부 당했지만 XCode 8을 통해 업로드하면 수락되었습니다. ipa의 swift support 폴더와 Frameworks 폴더에서 swift libs를 확인한 결과 swift support 폴더의 libs는 swift 2.3 용이고 Frameworks 폴더에서는 swift 3입니다. 그래서 내 체육관 파일에 도구 모음을 추가했습니다. 선택권:

gym(
  scheme: "CoCadre",
  configuration: "Production Release",
  clean: true,
  use_legacy_build_api: false,
  toolchain: "com.apple.dt.toolchain.Swift_2_3"
)

* 툴체인 옵션을 사용하려면 use_legacy_build_api를 false로 변경해야했습니다.

툴체인 옵션을 사용하려면 use_legacy_build_api를 설정해야합니다 : false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185


답변

GitHub 에있는 좀 덜 복잡한 솔루션이 있습니다 .

Pods-frameworks.sh를 둘러 본 결과 다음과 같은 주석이 달린 섹션을 찾았습니다.

링크 된 Swift 런타임 라이브러리
포함 이러한 라이브러리를 복사하는 코드 블록 (및 코드 서명)을 주석 처리하면 제출 문제가 해결 된 것 같습니다. 나는 문제를 일으키는 것이 단지 복사인지 또는 코드 서명인지 확인하기 위해 아직 더 깊이 파고 들지 않았습니다. 나는 거기 내 깊이에서 약간 벗어나고 있습니다.


답변

  1. cocoapods를 최신 버전으로 업데이트 sudo gem install cocoapods하고 터미널을 입력하십시오 .
  2. pod update프로젝트 디렉토리에서 실행하십시오 .
  3. 모든 포드에 대한 옵션에 대해 비트 코드 활성화아니오 로 설정해야합니다 Debug.
  4. 결정된

의 다음 코드 때문에 문제가 해결되었습니다 Pods-frameworks.sh.

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

다음으로 변경되었습니다.

# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
    local swift_runtime_libs
    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
  for lib in $swift_runtime_libs; do
    echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
    rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
    code_sign_if_enabled "${destination}/${lib}"
  done
fi


답변

이에 대한 내 솔루션 :

Cocoapods를 통해 Reveal을 사용하고 있으며 Reveal은 Bitcode를 비활성화해야합니다. 그래서 Debug에만 Reveal (다른 Framwork에서 작동해야 함)을 포함했습니다.

pod 'Reveal-iOS-SDK', :configurations => ['Debug']

내 Reveal은 이제 디버그 용으로 만 구성되었으므로 디버그 용으로 만 비트 코드를 비활성화했습니다.

여기에 이미지 설명 입력

이 설정으로 모든 것이 해킹없이 잘 작동합니다.