2016-09-27 27 views
6

Ứng dụng chạy tốt khi được biên dịch từ xcode 7 cho iOS 8 đến 10 nhưng khi được biên dịch từ xcode 8, ứng dụng chỉ hoạt động bình thường trên iOS 9 và 10 trên iOS 8, ứng dụng gặp sự cố không nhất quán . Đôi khi nó sẽ dừng lại ở một yếu tố giao diện người dùng ngẫu nhiên như:EXC_BAD_ACCESS chỉ trên xcode 8 chạy iOS 8

enter image description here

Nhưng thường xuyên hơn nó sẽ chỉ sụp đổ tại chính:

enter image description here

* thread #1: tid = 0x11d655, 0x35deaf56 libobjc.A.dylib`objc_msgSend + 22, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xf632d5c1) 
frame #0: 0x35deaf56 libobjc.A.dylib`objc_msgSend + 22 
frame #1: 0x2db167ea CoreUI`-[CUINamedImage initWithName:usingRenditionKey:fromTheme:] + 98 
frame #2: 0x2db21d48 CoreUI`-[CUICatalog imageWithName:scaleFactor:deviceIdiom:deviceSubtype:sizeClassHorizontal:sizeClassVertical:] + 128 
frame #3: 0x2b8aee98 UIKit`__98-[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:]_block_invoke + 240 
frame #4: 0x2b8aecea UIKit`-[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:] + 230 
frame #5: 0x2b95df86 UIKit`-[UIImageAsset imageWithTraitCollection:] + 474 
frame #6: 0x2b58d9d2 UIKit`-[UIImageView _resolveImageForTrait:] + 286 
frame #7: 0x2b58d690 UIKit`-[UIImageView _didMoveFromWindow:toWindow:] + 156 
frame #8: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #9: 0x2b300d50 UIKit`-[UIControl _didMoveFromWindow:toWindow:] + 44 
frame #10: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #11: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #12: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #13: 0x2b28a804 UIKit`__45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 112 
frame #14: 0x2b28a720 UIKit`-[UIView(Hierarchy) _postMovedFromSuperview:] + 428 
frame #15: 0x2b294bce UIKit`-[UIView(Internal) _addSubview:positioned:relativeTo:] + 1462 
frame #16: 0x2b29460e UIKit`-[UIView(Hierarchy) addSubview:] + 30 
frame #17: 0x2b459eae UIKit`__53-[_UINavigationParallaxTransition animateTransition:]_block_invoke + 1262 
frame #18: 0x2b29ada4 UIKit`+[UIView(Animation) performWithoutAnimation:] + 72 
frame #19: 0x2b45977c UIKit`-[_UINavigationParallaxTransition animateTransition:] + 812 
frame #20: 0x2b417cfc UIKit`-[UINavigationController _startCustomTransition:] + 2860 
frame #21: 0x2b337026 UIKit`-[UINavigationController _startDeferredTransitionIfNeeded:] + 422 
frame #22: 0x2b336e2c UIKit`-[UINavigationController __viewWillLayoutSubviews] + 44 
frame #23: 0x2b336dc0 UIKit`-[UILayoutContainerView layoutSubviews] + 184 
frame #24: 0x2b28b7fe UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 514 
frame #25: 0x2acb1834 QuartzCore`-[CALayer layoutSublayers] + 136 
frame #26: 0x2acad20c QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 360 
frame #27: 0x2acad094 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 16 
frame #28: 0x2acaca70 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 224 
frame #29: 0x2acac874 QuartzCore`CA::Transaction::commit() + 324 
frame #30: 0x2aca674c QuartzCore`CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 56 
frame #31: 0x27d37ffc CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20 
frame #32: 0x27d356ba CoreFoundation`__CFRunLoopDoObservers + 278 
frame #33: 0x27d35ac2 CoreFoundation`__CFRunLoopRun + 914 
frame #34: 0x27c833b0 CoreFoundation`CFRunLoopRunSpecific + 476 
frame #35: 0x27c831c2 CoreFoundation`CFRunLoopRunInMode + 106 
frame #36: 0x2f1f2200 GraphicsServices`GSEventRunModal + 136 
frame #37: 0x2b2ed43c UIKit`UIApplicationMain + 1440 
* frame #38: 0x0017bf62 Dev`main(argc=1, argv=0x01549a28) + 106 at main.m:14 
frame #39: 0x3636aaae libdyld.dylib`start + 2 

Tôi đã có NSZombies kích hoạt và tôi đã không nhận được thông tin mới. Tôi cũng đã thử bật địa chỉ khử trùng và nó cũng sẽ sụp đổ rải rác nhưng thường cũng ở phương pháp chính:

enter image description here

thread #1: tid = 0x11d992, 0x020fce9e libclang_rt.asan_ios_dynamic.dylib`__asan::AsanDie(), queue = 'com.apple.main-thread', stop reason = Attempt to free a non-allocated address 
{ 
"access_size" : 0, 
    "access_type" : 0, 
    "address" : 103442256, 
    "description" : "Attempt to free a non-allocated address", 
    "instrumentation_class" : "AddressSanitizer", 
    "pc" : 0, 
    "stop_type" : "fatal_error" 
} 

Một lần nữa các ứng dụng hoạt động tốt khi xây dựng từ Xcode 7 hoặc từ Xcode 8 cho iOS 9 hoặc 10. Điều này chỉ xảy ra khi được xây dựng từ Xcode 8 cho iOS 8. Mọi ý tưởng?

Trả lời

10

Một số người khác trong nhóm tìm thấy câu trả lời. Bogus.

https://forums.developer.apple.com/thread/60919

Với Xcode 8 GM, lỗi này sẽ xảy ra nếu bạn bao gồm 16-bit hoặc P3 tài sản trong một trình ứng dụng nhắm mục tiêu iOS phiên bản trước đó thì iOS 9.3. Nếu ứng dụng của bạn yêu cầu chức năng màu rộng, bạn phải thay đổi Mục tiêu triển khai thành iOS 9.3 trở lên. Nếu ứng dụng của bạn không yêu cầu chức năng màu rộng và bạn muốn triển khai nó sang phiên bản cũ hơn iOS thì bạn nên thay thế tất cả nội dung 16 bit hoặc P3 bằng tài sản sRGB 8 bit. Bạn có thể tìm tài sản 16 bit hoặc P3 bằng cách chạy “assetutil” trên danh mục nội dung có tên trong thông báo lỗi từ Kết nối iTunes. Các bước sau đây nêu rõ quy trình:

  1. Tạo tệp .ipa có thể kiểm tra. Trong Xcode Organizer (Xcode-> Window-> Organiser), chọn một kho lưu trữ để kiểm tra, nhấn “Export ...”, và chọn “Export for Enterprise or Ad-Hoc Deployment” Điều này sẽ tạo một bản sao cục bộ file .ipa cho ứng dụng của bạn.
  2. Xác định vị trí tập tin .ipa và thay đổi của nó mở rộng để .zip.
  3. Mở rộng tập tin .zip. Điều này sẽ tạo ra một thư mục Payload chứa bó .app của bạn.
  4. Mở một thiết bị đầu cuối và thay đổi thư mục hoạt động ở cấp cao nhất của đường dẫn cd gói ứng dụng của bạn/thành/Payload/your.app

  5. Sử dụng công cụ tìm kiếm để định vị Assets.c các tệp ar trong gói .app của bạn như được hiển thị bên dưới: tìm. -name 'Assets.car'

  6. Sử dụng công cụ assetutil để tìm bất kỳ nội dung 16 bit hoặc P3 nào, trong mỗi Assets.car ứng dụng của bạn có như hình dưới đây. : sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car> /tmp/Assets.json

  7. Kiểm tra kết quả /tmp/Assets.json và tìm bất kỳ nội dung nào có chứa “ DisplayGamut ":" P3 "và" Tên "được liên kết của nó.Điều này sẽ là tên của hình ảnh của bạn chứa một hoặc nhiều 16-bit hoặc P3 nội dung.

  8. Thay thế các nội dung đó bằng tài sản 8 bit/sRGB, sau đó tạo lại ứng dụng của bạn. Cập nhật: Nếu mục tiêu triển khai của bạn được đặt thành 8.3 hoặc 8.4 và bạn có danh mục nội dung thì bạn sẽ nhận được cùng một thông báo lỗi , ngay cả khi bạn không thực sự có tài sản 16 bit hoặc P3. Trong trường hợp này, bạn sẽ cần phải hạ thấp Mục tiêu triển khai xuống 8.2, hoặc di chuyển lên đến 9.x.

Cập nhật: Nếu triển khai mục tiêu của bạn được đặt hoặc 8.3 hoặc 8.4 và bạn có một danh mục tài sản sau đó bạn sẽ nhận được thông báo lỗi tương tự này, ngay cả khi bạn không thực sự có tài sản 16-bit hoặc P3 . Trong trường hợp này, bạn sẽ cần hạ thấp Target Deployment của bạn xuống 8.2, hoặc di chuyển nó lên 9.x.

+0

Cảm ơn rất nhiều vì điều này, hạ thấp mục tiêu xuống 8.2 để giải quyết trong trường hợp của tôi! –

+0

Cảm ơn, điều này đã giúp tôi rất nhiều! 8.2 cũng làm việc cho tôi. – floschliep

+0

Giúp tôi quá! Để mượn từ câu trả lời tại http://stackoverflow.com/a/39570973, bạn chỉ có thể chạy lệnh 'sips -m ...' để sửa tài sản của bạn. –

Các vấn đề liên quan