Hỗ trợ Swift không hợp lệ - Các tệp không khớp


116

Tôi vừa viết lại một ứng dụng trong Swift 2. Tôi đang cố tải ứng dụng lên iTunesConnect (qua Xcode 7 GM) để thử nghiệm nội bộ.

Tôi đã vật lộn với lỗi "Hỗ trợ Swift không hợp lệ" trong một thời gian ( có câu hỏi khác, liên quan ) ... nhưng bây giờ nó đã được thay đổi thành một cái gì đó hơi khác một chút.

Lỗi từ Apple hiện cho biết:

Hỗ trợ Swift không hợp lệ

Các tệp libswiftCoreLocation.dylib, libswiftCoreMedia.dylib, libswiftCoreData.dylib, libswiftAVFoundation.dylib không khớp

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.appation/FraftAVFraftworks/ dylib

Đảm bảo tệp là chính xác (?), Xây dựng lại ứng dụng của bạn và gửi lại.

Không áp dụng xử lý hậu kỳ cho

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.appation/FraftAVFraftworks/ dylib.

Tôi không thể tìm thấy các lỗi tương tự bằng cách tìm kiếm "Không áp dụng xử lý sau", "Đảm bảo tệp chính xác, xây dựng lại ứng dụng của bạn và gửi lại", v.v.

Có ai biết cách tôi có thể "Đảm bảo các tệp là chính xác" - hoặc-- có bất kỳ đề xuất nào khác không? Cảm ơn bạn.


Tôi có cùng một vấn đề. Bất kỳ giải pháp?
Beny Boariu

Bạn có từ chức ứng dụng này không? Đây có phải là tải lên trực tiếp từ Xcode không?
Andy

@Andy tải lên trực tiếp từ Xcode ngay sau khi lưu trữ nó.
Dan

Câu trả lời:


82

Cùng một vấn đề ở đây. Tôi nghĩ đây rất có thể là một lỗi của Công cụ dành cho nhà phát triển, liên quan đến Bitcode.

Tôi vừa tìm thấy giải pháp cho việc này.

  1. Lưu trữ ứng dụng của bạn với số bản dựng mới :(
  2. Tìm tệp lưu trữ (tệp .xcarchive) trong Finder từ "Show in Finder" của Organizer
  3. Mở gói và tìm các thư mục như Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/
  4. Sao chép tất cả libswiftXxx.dylibcác tệp từ SwiftSupport/iphoneos/vào Products/Applications/YourApp.ipa/Frameworks/và ghi đè
  5. Bây giờ, tải lên App Store từ Organizer

Với quy trình này, tôi đã thành công trong việc tải lên bản dựng của mình. Bây giờ tôi đang chờ xem xét.

GHI CHÚ:

Tôi đang sử dụng CocoaPods và ENABLE_BITCODEtùy chọn là KHÔNG.


Bạn đang nhắm mục tiêu SDK iOS nào? Tôi nghĩ rằng bạn không thể gửi đến cửa hàng với mã bit bị tắt.
JAL

3
Trong trường hợp của tôi, SwiftSupport / iphoneos / trống.
Lim Thye Chean

2
Tôi đã xác thực thành công nhưng quá trình xây dựng vẫn còn Processingsau ~ 12 giờ trong phần Prerelease của iTunes Connect.
ldiqual

2
này, cảm ơn vì điều này! Tôi vẫn nhận được cảnh báo về tệp phân tích API quá lớn cl.ly/image/0s0N0s441s0X - nhưng điều quan trọng là nó vẫn vượt qua và có thể vào được TestFlight.
ded

1
Tôi nên làm gì nếu không có thư mục SwiftSupport / iphoneos / bên trong .ipa của tôi?
Alexander Yakovlev

51

Chỉnh sửa: CocoaPods 0.39.0 đã được phát hành để khắc phục sự cố này!

Như @orkenstein đã đề cập , có một giải pháp đơn giản hơn bằng cách bình luận một số mã trong Pod-frameworks.sh. Tôi đang bao gồm một chút chi tiết ở đây.

Trong thư mục dự án Xcode của bạn, hãy mở Pods/Target Support Files/Pods/Pods-frameworks.sh

Nhận xét những dòng sau:

# 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

Tiết kiệm Pods-frameworks.shvà bạn nên đi!


4
Điều này đã làm việc cho tôi. Xin lưu ý, nếu bạn chạy pod-install hoặc pod-update, bạn có thể phải nhận xét lại!
Max Alexander

Cocoapods hành ở đây: github.com/CocoaPods/CocoaPods/issues/4188 , bạn có thể thử PR này: github.com/CocoaPods/CocoaPods/pull/4221 với những hướng dẫn: guides.cocoapods.org/using/unreleased-features
ldiqual

cập nhật cocoaPods 0.39.0 và nó không giải quyết được vấn đề này đối với tôi
nwales

@DJ Tarazona Cảm ơn công thức của bạn !! nó hoàn toàn đã làm các trick cho tôi, ngay cả khi tôi đã cập nhật các cocopods đá quý lên phiên bản mới nhất
Jorge Vicente Mendoza

16

Bản sửa lỗi cho vấn đề này đã được hợp nhất và nó có sẵn trên phiên bản CocoaPods mới nhất 0.39.0.beta.5

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

Để chạy phiên bản CocoaPods mới nhất gem install cocoapods --pre

Ngoài ra, hãy làm theo hướng dẫn để chạy các tính năng chưa được phát hành: http://guides.cocoapods.org/using/unreleased-features

Sau khi bạn có phiên bản CocoaPods mới nhất, hãy chạy pod installlại.


Đây là nhà sản xuất tiền
tommybananas

Những giọt nước mắt đang chảy. Cảm ơn bạn!
MQLN

Lỗi không liên quan cụ thể với CocoaPods; chúng tôi đang gặp sự cố tương tự và không sử dụng CocoaPods.
defos1

8

Tôi đang sử dụng fastlane gym 1.9.0 để xây dựng ứng dụng của mình và nó liên tục bị apple từ chối vì các tệp không khớp, trong khi nếu tôi tải lên thông qua XCode 8 thì nó đã được chấp nhận. Tôi đã kiểm tra các lib nhanh trong thư mục hỗ trợ nhanh của ipa và trong thư mục Khung công tác, tôi thấy rằng các lib trong thư mục hỗ trợ nhanh dành cho swift 2.3 trong khi trong thư mục Khung làm việc là nhanh 3. Vì vậy, trong tệp phòng tập thể dục của tôi, tôi đã thêm chuỗi công cụ Lựa chọn:

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

* Lưu ý rằng tôi đã phải thay đổi use_legacy_build_api thành false để sử dụng tùy chọn chuỗi công cụ

Để sử dụng tùy chọn chuỗi công cụ, cần đặt use_legacy_build_api: false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185


Cảm ơn bạn! Tôi cũng đang sử dụng Fastlane và Gym và điều này đã khắc phục sự cố.
Eystein Bye

Cảm ơn, điều đó đã giúp khắc phục sự cố khi sử dụng Phòng tập thể dục. Xin lưu ý rằng tôi vẫn có thể sử dụng giải pháp này với use_legacy_build_api: true
Viktor Malyi

6

Có một giải pháp ít phức tạp hơn một chút, được tìm thấy trên GitHub :

Tôi đã xem qua Pods-frameworks.sh và thấy một phần được nhận xét là:

Nhúng các thư viện thời gian chạy Swift được liên kết
Nhận xét khối mã sao chép các thư viện này qua (và mã ký hiệu chúng) dường như đã giải quyết được vấn đề khi gửi của tôi. Tôi vẫn chưa đi sâu hơn để xem liệu đó chỉ là việc sao chép chúng gây ra sự cố hay đó là việc ký mã. Tôi đang nhận ra một chút chiều sâu của tôi ở đó.


4
  1. Cập nhật cocoapods của bạn lên phiên bản mới nhất, nhập sudo gem install cocoapods thiết bị đầu cuối.
  2. Chạy pod update trong thư mục dự án của bạn.
  3. Hãy nhớ đặt Bật Bitcode thành KHÔNG choDebug tùy chọn cho tất cả các nhóm của bạn.
  4. đã sửa

Sự cố đã được khắc phục vì mã sau trong 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

đã được đổi thành:

# 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

2

Giải pháp của tôi cho điều này:

Tôi đang sử dụng Reveal thông qua Cocoapods và Reveal cần phải tắt Bitcode. Vì vậy, tôi đã bao gồm Reveal (sẽ hoạt động cho bất kỳ Framwork nào khác) chỉ cho Debug:

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

Vì Reveal của tôi bây giờ chỉ được định cấu hình cho Gỡ lỗi, tôi đã tắt Bitcode chỉ cho Gỡ lỗi.

nhập mô tả hình ảnh ở đây

Với cài đặt này, mọi thứ hoạt động tốt, không có bất kỳ hack nào ...


0

Tôi đã thấy lỗi này xảy ra khi tích hợp các thư viện không hỗ trợ bitcode (chẳng hạn như phiên bản ổn định hiện tại của New Relic). Giải pháp là xóa các thư viện, vô hiệu hóa bitcode (và có khả năng không thể gửi đến cửa hàng) hoặc đợi các tệp nhị phân cập nhật hỗ trợ bitcode từ nhà cung cấp thư viện của bạn.


0

Lỗi đối với tôi là tôi đã xây dựng hồ sơ Adhoc thay vì hồ sơ App Store để tải spa lên cửa hàng ứng dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.