Ứng dụng iOS có khung bị lỗi trên thiết bị, dyld: Thư viện chưa được tải, Xcode 6 Beta


573

Sự cố này là sự cố chặn tôi đã sử dụng các bước sau để tái tạo sự cố:

  • Tạo một dự án Cacao Touch Framework
  • Thêm một tập tin nhanh chóng và một lớp Dog
  • Xây dựng khung cho thiết bị
  • Tạo ứng dụng Chế độ xem đơn trong Swift
  • Nhập khung vào dự án ứng dụng
  • Khởi tạo lớp swift từ khung công tác trong ViewContoder
  • Xây dựng và chạy một ứng dụng trên thiết bị

Ứng dụng ngay lập tức bị sập khi khởi chạy, đây là nhật ký giao diện điều khiển:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

Tôi đã cố gắng xây dựng trên các thiết bị iOS 7.1 và 8.0, cả hai đều gặp sự cố tương tự. Tuy nhiên, tôi có thể xây dựng một ứng dụng và chạy trên trình giả lập tốt. Ngoài ra, tôi biết rằng tôi có thể thay đổi khung thành dạng Bắt buộc thành Tùy chọn trong Liên kết nhị phân với Thư viện , nhưng nó không giải quyết được hoàn toàn vấn đề, ứng dụng đã bị sập khi tôi tạo một phiên bản Dog . Hành vi khác nhau trên thiết bị và trình giả lập, tôi nghi ngờ rằng chúng tôi không thể phân phối khung cho thiết bị bằng phiên bản beta của Xcode. bất cứ ai có thể làm sáng tỏ về điều này?


1
Điều tôi không hiểu là tại sao tất cả các khung bên thứ ba khác hoạt động tốt và có thể dễ dàng kéo và thả vào Link Binary with Librariesvà bằng cách nào đó Xcode biết sao chép chúng vào gói ứng dụng của bạn, trong khi đối với các khung tùy chỉnh thì điều này đơn giản là không xảy ra.
fatuhoku 17/2/2016

sazzad hissain khan câu trả lời ở đây stackoverflow.com/questions/26024100/NH là câu trả lời hay nhất ..
Ankit Kumar

1
Kiểm tra stackoverflow.com/a/52129141/2020034 này . Nó hoạt động
Vinayak Parmar

bạn có thể tạo một thư viện béo, bạn có thể thấy liên kết này: stackoverflow.com/a/54977145/3992606
mohsen

Phiên bản Xcode không khớp , được giải quyết với stackoverflow.com/a/55738882/5443510 .
Jimmy Yin

Câu trả lời:


975

Trong tab Chung của mục tiêu , có trường Binaries nhúng . Khi bạn thêm khung ở đó, sự cố được giải quyết.

Tham khảo tại đây trên Diễn đàn nhà phát triển của Apple.


73
Tôi có khung trong Các nhị phân nhúng và tôi cũng có Giai đoạn sao chép cũng được đặt thành "Khung". Nó gặp sự cố.
loretoparisi

11
Điều này chỉ giải quyết trên chế độ gỡ lỗi. Lỗi sẽ lại xảy ra khi bạn lưu trữ hoặc xây dựng dự án
Saad Ur Rehman

13
Thêm @ execable_path / Frameworks vào 'Đường dẫn tìm kiếm Runpath' đã giải quyết vấn đề này, ngoài việc thêm khung vào 'Binaries nhúng'
ArdenDev

14
Bất cứ ai cũng có thể giúp làm thế nào để thêm khung trong Binaries nhúng, từ POD?
Bonnke

3
Như trên. Tôi cũng muốn biết cách thêm từ POD, vì không có "Tổng quát> Các nhị phân nhúng" được tìm thấy trong XCode 6.4 bằng PODS
khấu trừ

259

Đối với iOS lớn hơn hoặc bằng 8

Trong tab Chung của mục tiêu, trong phần Binaries nhúng, thêm khung. Điều này sẽ sao chép khung vào trong trình biên dịch để nó có thể được liên kết với lúc chạy.

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

Tại sao chuyện này đang xảy ra? : bởi vì khung công tác bạn đang liên kết được biên dịch thành khung liên kết động và do đó được liên kết với lúc chạy.

** Lưu ý: ** Nhúng khung tùy chỉnh chỉ được hỗ trợ trong iOS> 8 và do đó, một giải pháp thay thế hoạt động trên các phiên bản iOS cũ hơn sau đây.

Dành cho iOS dưới 8

Nếu bạn ảnh hưởng đến khung này (có quyền truy cập vào mã nguồn / quy trình xây dựng), bạn có thể thay đổi khung này thành liên kết tĩnh thay vì liên kết động. Điều này sẽ khiến mã được bao gồm trong ứng dụng được biên dịch của bạn thay vì được liên kết với trong thời gian chạy và do đó khung sẽ không phải được nhúng.

** Cách thực hiện: ** Trong tab Cài đặt bản dựng của khung, trong phần Liên kết, thay đổi Loại Mach-O thành Thư viện tĩnh. Bây giờ bạn không cần bao gồm khung theo nhị phân nhúng.

Khung tĩnh

Bao gồm Tài sản: Để bao gồm những thứ như hình ảnh, âm thanh hoặc tệp xib / nib tôi khuyên bạn nên tạo một gói (về cơ bản là một thư mục, thông tin thêm ở đây bit.ly/ios_bundle) và sau đó tải tài sản từ gói bằng NSBundle.


1
Làm cách nào tôi có thể thêm khung vào nhị phân nhúng, nếu khung trong Pods?
TomazStoiljkovic

Bạn có ý nghĩa gì bởi "khung là trong Pods"? Rằng khung tùy chỉnh của bạn được phân phối qua CocoaPods?
Dawson

2
Điều này phải là "Lớn hơn hoặc bằng 8". Tôi cũng đã phải làm điều này trên iOS 8.
Cruinh

lỗiSwift is not supported for static libraries
jose920405

@TomazStoiljkovic bạn đã tìm ra điều này? Tôi có cùng một vấn đề, tôi có khung mà tôi muốn xây dựng dưới dạng nhị phân, nhưng nó phụ thuộc vào các khung khác thông qua vỏ ca cao.
MegaManX

125

Chỉ cần kéo khung vào dự án của bạn sẽ không đủ tốt. Điều đó giống như ở trong cùng một sân bóng nhưng không thể tìm thấy con bạn. Thực hiện theo các bước sau:

1) Tạo khung của bạn

  • Phát triển khuôn khổ của bạn.
  • Khi quá trình phát triển của bạn hoàn tất, COMMAND+ Bxây dựng khung của bạn và đảm bảo bạn nhận được "Xây dựng thành công".

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

2) Truy cập khuôn khổ của bạn

  • Khi dự án khung của bạn xây dựng thành công, nó sẽ sẵn sàng để bạn truy cập vào Productsthư mục trong dự án của bạn.

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

  • Nhấp chuột phải vào của bạn .frameworkvà chọn "Hiển thị trong Finder".

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

3) Đặt khung trong dự án của bạn

  • Kéo và thả .frameworktừ cửa sổ Finder vào thư mục "Framework" của dự án ứng dụng của bạn.

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

4) Cấu hình dự án ứng dụng cho khung

  • Chọn cấp cao nhất trong dự án của bạn

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

  • Chọn mục tiêu của bạn

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

  • Chuyển đến "Xây dựng giai đoạn", sau đó "Liên kết nhị phân với thư viện" và đảm bảo rằng khung của bạn được bao gồm với tùy chọn được chọn .

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

  • Vẫn trong "Giai đoạn xây dựng", đi đến phía trên bên trái và chọn +nút. Trong trình đơn thả xuống, chọn "Giai đoạn sao chép tệp mới".

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

  • Cuộn xuống phần "Sao chép tệp" mới và đảm bảo rằng bạn đặt Destinationthành "Khung". Để trống đường dẫn phụ. Sau đó nhấp vào +nút ở phía dưới bên trái.

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

  • Bạn sẽ được trình bày với hệ thống phân cấp dự án của bạn. Cuộn xuống thư mục "Khung" mà bạn đã thêm khung vào bước 3 hoặc tìm kiếm nó trong thanh tìm kiếm ở trên cùng. Chọn khung của bạn và nhấp vào "Thêm".

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

  • Đảm bảo rằng khung của bạn được bao gồm với "Đăng nhập mã sao chép" được chọn.

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

5) Làm sạch, sau đó chạy dự án của bạn

  • COMMAND+ SHIFT+K
  • COMMAND+R

5
Điểm tốt. Nó gần như làm việc cho tôi. Tôi đã tạo ra một khung A, trong đó bao gồm Alamofire. Ứng dụng máy chủ của tôi (khung nhúng A) hoạt động trong trình giả lập. Nhưng khi tôi cố chạy nó trong một chiếc iPhone thật thì nó gặp lỗi: Alamofire: dyld: Thư viện không được tải: @ rpath / Alamofire.framework / Alamofire Lý do: không tìm thấy hình ảnh phù hợp. Đã tìm thấy: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: mach-o, nhưng kiến ​​trúc sai
DàChún

1
@Brandon Làm tùy chọn để khung giải quyết vấn đề của tôi. Nhưng bạn có thể vui lòng giải thích cho tôi hành vi của việc tạo khung tùy chọn là gì không?
Mitesh Dobareeya

2
Cảm ơn bạn! Trong bước 5 của bạn, tôi đã kiểm tra "Chỉ sao chép khi cài đặt" và đó là vấn đề của tôi.
Andi

48

Tôi đã tạo một khung bằng Swift3 / Xcode 8.1 và đang sử dụng nó trong dự án Objective-C / Xcode 8.1. Để khắc phục vấn đề này, tôi phải kích hoạt Always Embed Swift Standard Librariestùy chọn bên dưới Build Options.

Hãy nhìn vào ảnh chụp màn hình này:

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


3
Điều này đã làm việc cho tôi tại. Giải pháp cho vấn đề này là vào BuildPhase -> Sao chép tệp -> chọn Khung bên dưới Đích và thêm khung của bạn. Rất có thể thư viện của bạn bị mất ở đây.
Harish

@Harish, Giải pháp bạn đang đề xuất đã được đề xuất bởi một số người và chắc chắn tôi sẽ quan tâm đến điều đó ngay từ đầu. Trong trường hợp của tôi, khung đã được thêm vào đó nhưng vẫn xuất hiện cùng một vấn đề. Sau đó, tôi tự đào nó. Nếu bạn đã bỏ phiếu cho giải pháp này, tôi không biết tại sao bạn khá chắc chắn về cách của mình khi nó không hoạt động trong trường hợp của tôi: S
NeverHopless

@Harish Cảm ơn. Câu trả lời của bạn đã giúp tôi nhiều hơn và tất nhiên là NeverHopless's cũng vậy :) Cảm ơn các bạn
Mohsin Khubaib Ahmed

Đây là điều duy nhất phù hợp với tôi .. nhưng tôi đã "nhúng" khung vào Embedded Binariesphần mục tiêu của mình . Vậy tại sao điều này làm cho nó hoạt động?
guptron

Điều tuyệt vời này hoạt động bởi vì nếu sử dụng một thư viện swift hoặc pod để nhúng vào dự án C mục tiêu. Dự án khách quan C thường có cờ này thành số
Swaroop S

47

Trước tiên, hãy cố gắng xây dựng sau Command + Option + Shift + K. Nếu vẫn thất bại thì hãy thực hiện các bước dưới đây.

Nếu bất kỳ ai đang gặp phải lỗi này trong Xcode 8 thì hãy thay đổi trạng thái khung của bạn thành Tùy chọn thay vì Bắt buộc trong Tab Chung của mục tiêu.

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


3
Điều này sẽ khiến thời gian chạy không nhận ra các lớp từ khung công tác
tesla

@azimov đúng. Tôi đang đối mặt với tình trạng khó xử này vào lúc này. Bắt buộc gây ra lỗi "không tìm thấy hình ảnh" và nếu chúng tôi thử đặt nó thành tùy chọn, nó sẽ bị sập khi chạy với "bộ chọn không nhận dạng"
Adam Mendoza

1
Mặc dù khung của tôi đã có trong Liên kết nhị phân và Nhúng, tôi vẫn phải thêm Giai đoạn sao chép. dyld: Thư viện chưa được tải: @ rpath / AFNetworking.framework / AFNetworking Được tham chiếu từ: / Users / {User} / Library / Developer / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Container B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp Lý do: không tìm thấy hình ảnh (lldb) Giải pháp: Dự án -> Mục tiêu -> Xây dựng giai đoạn -> + ở trên cùng để thêm Bản sao giai đoạn tập tin mới cần được sao chép
Adam Mendoza

@AdamMendoza Tôi đã từ chối ứng dụng của mình vì làm điều đó.
jbouaziz

@jbouaziz, vâng, một lỗi bạn có thể gặp phải là do .framework bị mập, có nghĩa là nó có các kiến ​​trúc không được hỗ trợ trên iOS như i386 x86_64 bên cạnh armv7 arm64 cần thiết. Cửa hàng sẽ cung cấp cho bạn một lỗi, nhưng bạn có thể không thấy lỗi trong Xcode. Sử dụng trình tải trong Xcode -> Mở Công cụ dành cho nhà phát triển -> Trình tải ứng dụng. SolutionL làm cho nó mỏng đi -> ikennd.ac/blog/2015/02/ Kẻ
Adam Mendoza

28

Tôi gặp vấn đề tương tự trong phiên bản iOS 9.x

VẤN ĐỀ IS: Ứng dụng gặp sự cố ngay khi tôi mở ứng dụng với lỗi bên dưới.

dyld: Thư viện không được tải: / System / L Library / Frameworks /UserNotutions.framework / UserNotutions Được tham chiếu từ: /var/containers/Bundle/Application/######/TestApp.app/TestApp Lý do: không tìm thấy hình ảnh

Tôi đã giải quyết vấn đề này bằng cách thay đổi Requiredđể OptionalLinked Frameworks and Librariescho UserNotifications.frameworkkhuôn khổ.


Những công việc này. Có ai biết tại sao không? Vì một số thiết bị cần cài đặt này, những thiết bị khác thì không.
NEO

Tôi nhận được "cảnh báo: không thể thực thi mã hỗ trợ để đọc dữ liệu của lớp Objective-C trong quá trình. Điều này có thể làm giảm chất lượng của thông tin loại có sẵn." khi đánh dấu lib của tôi là tùy chọn
BergP

nó hoạt động có lẽ lý do là một số khung không chạy trong trình giả lập đó là lý do
Gowtham Sooryaraj

@ redent84 Câu trả lời này, cùng với nhận xét của bạn, đã cứu tôi khỏi bị điên. Gặp vấn đề này với Xác thựcService.framework, yêu cầu iOS 12.
Tamás Sengel

26

Tôi đã phải (trên đầu trang được đề cập ở đây) thêm dòng sau vào Đường dẫn tìm kiếm Runpath trong tab Cài đặt bản dựng :
@executable_path/Frameworks

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


Điều này đã khắc phục vấn đề cho tôi. Tôi bắt đầu gặp sự cố sau khi thêm tiện ích mở rộng ứng dụng vào ứng dụng iOS 9 của mình. Trước khi thêm phần mở rộng, khung của tôi đã được tìm thấy tốt. Thêm giai đoạn xây dựng Sao chép tệp không giúp ích được gì và tôi đã nhúng khung.
Greg

Thật kỳ lạ, điều này không được bao gồm theo mặc định. Nếu bạn giải nén và xem IPA của mình, bạn sẽ tìm thấy các khung của mình trong Payloads / appname.app / Frameworks /. Tuy nhiên, việc thêm đường dẫn tìm kiếm này phải có để ứng dụng tìm trong thư mục này trong thời gian chạy. Kỳ dị.
mattv123

25

Bạn cần thêm khung công tác vào Giai đoạn xây dựng tập tin sao chép mới để đảm bảo rằng khung được sao chép vào gói ứng dụng khi chạy ..

Xem Cách thêm 'Sao chép giai đoạn xây dựng tệp' vào Mục tiêu của tôi để biết thêm thông tin.

Tài liệu chính thức của Apple: https://developer.apple.com/l Library / mac / recipes / xcode_help-project_editor / Articles / TreatingaCopyFilesBuildPhase.html


Sau khi thử rất nhiều thứ, đây là điều đã giải quyết nó cho tôi. Tôi đã có khung trong Liên kết nhị phân và khung nhúng. Tôi không nghĩ rằng tôi cũng phải thêm Giai đoạn sao chép nhưng điều này đã khắc phục nó.
Adam Mendoza

14

Nếu bạn đang sử dụng Xcode 11 trở lên :

  1. Điều hướng đến các cài đặt của mục tiêu của bạn và chọn Chung .

Cài đặt mục tiêu / Chung

  1. Cuộn xuống Khung, Thư viện và Nội dung được nhúng .

  2. Đảm bảo giá trị Nhúng & Ký hoặc Nhúng mà không cần ký được chọn cho tùy chọn Nhúng nếu cần.

Phần khung, thư viện và nội dung nhúng


13

Thêm khung trong Binaries nhúng nhập mô tả hình ảnh ở đây

Sau đó làm sạch và xây dựng.


11

Đáng ngạc nhiên, không phải tất cả các phần cần thiết đều được ghi lại ở đây, ít nhất là cho Xcode 8.

Trường hợp của tôi là một khung công tác tùy chỉnh như là một phần của cùng một không gian làm việc. Hóa ra nó đã được xây dựng không chính xác. Dựa trên phản hồi cuối cùng của jeremyhu cho chủ đề này:

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

Tôi đã phải set Dynamic Library Install Name Base( DYLIB_INSTALL_NAME_BASE) dưới Build Settingscủa khung dự án và sau đó xây dựng lại nó. Nó được đặt không chính xác $(LOCAL_LIBRARY_DIR)và tôi phải đổi nó thành @rpath.

Vì vậy, trong giai đoạn xử lý liên kết trong Dự án ứng dụng , nó đã hướng dẫn Ứng dụng chủ tải động khung công tác trong thời gian chạy từ /Library/Frameworks/fw.Framework/fw(như, gốc của hệ thống tệp thời gian chạy) chứ không phải đường dẫn đến Ứng dụng/Frameworks/fw.Framework/fw

Về tất cả các thiết lập khác: nó không phải là ở 3 nơi ở Build Phases, nhưng đây là tất cả thiết lập cùng một lúc khi bạn chỉ cần thêm nó vào Embedded Binariesthiết lập củaGeneral tab của App lưu trữ.

Tôi đã không phải thiết lập một Copy Filesgiai đoạn bổ sung , có vẻ như là dư thừa trực giác đối với giai đoạn nhúng. Bằng cách kiểm tra phần đuôi của bản sao bản dựng, chúng tôi có thể đảm bảo rằng điều đó không cần thiết.

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[Đã xóa nhiều dòng dài dòng, nhưng rõ ràng từ bản ghi được đơn giản hóa trong Giao diện người dùng Xcode.]

Tôi vẫn không biết tại sao Xcode đặt DYLIB_INSTALL_NAME_BASEgiá trị không chính xác cho tôi.


1
Cảm ơn bạn, điều này hóa ra là vấn đề của tôi trong Xcode 11. Tôi đã nhập một trong các khung công tác của riêng tôi, trước đây đã hoạt động, nhưng đã bắt đầu phát hành lỗi "dyld: Library không được tải". Để rõ ràng, bạn muốn đặt cài đặt xây dựng "Cơ sở tên cài đặt thư viện động" thành "@rpath" trong dự án của khung mà bạn đang cố gắng nhập, không phải trong dự án bạn đang nhập vào. Bằng cách nào đó, nó đã được đặt thành "/ Thư viện / Khung".
Ben Stahl

Vui mừng điều này là hữu ích 3 năm sau. Chỉnh sửa cho phù hợp.
BaseZen

9

Trong trường hợp của tôi, giải pháp là loại bỏ khung đã biên dịch khỏi các Binaries nhúng, đó là một dự án độc lập trong không gian làm việc, dọn dẹp và xây dựng lại nó, và cuối cùng thêm lại vào Binaries nhúng.


8

Môi trường của tôi: Cocos2d 2.0, Box2d, Mục tiêu C

Ngoài việc thực hiện các câu trả lời khác ở trên, cuối cùng tôi đã đi đến tab Chung và làm cho WatchKit không bắt buộc.

Mục tiêu và khung thư viện được liên kết chung Watchkit.framework Tùy chọn


8

Nếu bạn đang sử dụng khung của bên thứ ba và sử dụng Cocoapods làm người quản lý phụ thuộc của mình, hãy thử thực hiện pod install để làm mới nhóm của bạn.

Sự cố này đã xảy ra trên thư viện của bên thứ ba mà tôi đang sử dụng, rất vui vì giải pháp trên có hiệu quả với tôi, hy vọng nó hiệu quả với bạn!


1
Tuyệt quá! đã khắc phục sự cố của tôi. Nhưng có cách nào để tránh cài đặt phụ thuộc pod trong Ứng dụng máy chủ của tôi không?
DàChún

8

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

Đã giải quyết cho tôi bằng cách bỏ chọn "Chỉ sao chép khi cài đặt" trên Build Phase-> Embed Frameworks


1
Sẽ thật tuyệt khi biết điểm của hộp kiểm này nếu hệ thống không tin rằng "cài đặt gỡ lỗi" không phải là "cài đặt". Bất kể, nếu nó gây ra sự cố cho ứng dụng trên phần cứng thay vì cấm chạy ứng dụng với cảnh báo, thì đó là một lỗi Xcode gọn gàng khác
William Cerniuk

8

Đó là một lỗi thời gian chạy được gây ra bởi Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

Các lỗi Library not loadedvới @rpathchỉ ra rằng Dynamic Linkerkhông thể tìm thấy nhị phân.

  1. Kiểm tra xem khung động đã được thêm vào General -> Embedded Binaries

  2. Kiểm tra @rpaththiết lập giữa người tiêu dùng (ứng dụng) và nhà sản xuất (khung động):

    • Khung động:
      • Build Settings -> Dynamic Library Install Name
    • Ứng dụng:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

Liên kết động

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)được sử dụng bởi loadable bundle( Dynamic frameworknhư một công cụ phái sinh) khi dyldphát hành
Dynamic Library Install Name- đường dẫn đến tệp nhị phân (không phải .framework). Vâng, họ có cùng tên, nhưng MyFramework.frameworklà một packaged bundlevới MyFrameworktập tin nhị phân và các nguồn lực bên trong.
Con đường này vào thư mục có thể tuyệt đối hay tương đối (ví dụ như @executable_path, @loader_path, @rpath). Đường dẫn tương đối được ưa thích hơn vì nó được thay đổi cùng với một neo rất hữu ích khi bạn phân phối gói của mình dưới dạng một thư mục duy nhất

đường dẫn tuyệt đối - ví dụ Framework1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path - liên quan đến nhị phân mục nhập - Trường hợp sử dụng ví dụ Framework2
: nhúng a Dynamic frameworkvào một ứng dụng

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path - liên quan đến gói là chủ sở hữu của
trường hợp sử dụng nhị phân này: khung có khung nhúng - Framework3_1 với Framework3_2 bên trong

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath - Đường dẫn tìm kiếm Runpath

Ví dụ khung2

Trước đây chúng tôi phải thiết lập một Framework để làm việc với dyld. Nó không thuận tiện vì không thể sử dụng cùng một Framework với các cấu hình khác nhau

@rpath là một khái niệm ghép dựa trên các phần bên ngoài (Ứng dụng) và lồng nhau (Khung động):

  • Ứng dụng:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)- xác định danh sách các mẫu được thay thế bằng @rpath.
       @executable_path/../Frameworks
    • Đánh giá Build Phases -> Embed Frameworks -> Destination, Subpathđể được shire nơi chính xác khung nhúng được đặt
  • Khung động:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- điểm @rpathđược sử dụng cùng với đường dẫn gói cục bộ đến nhị phân
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

*../ - đi đến phần gốc của thư mục hiện tại

otool - công cụ hiển thị tập tin đối tượng

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool thay đổi tên cài đặt thư viện chia sẻ động bằng cách sử dụng -rpath

CocoaPodssử dụng use_frameworks![Giới thiệu] để điều chỉnh mộtDynamic Linker

[Từ vựng]


6

Gần đây đã gặp phải vấn đề này với việc nhập CoreNFC trên các điện thoại cũ hơn (ví dụ: iPhone 6) và Xcode (11.3.1). Tôi đã có thể làm cho nó hoạt động bằng cách

  1. Trong các dự án của bạn , chọn mục tiêu.
  2. Tab Goto chung trên đầu trang.
  3. Trong ' Khung, Thư viện và Nội dung được nhúng ', hãy thêm khung (đối với tôi, đó là CoreNFC). Lặp lại cho các mục tiêu khác.
  4. Nhấp vào Xây dựng giai đoạn trên đầu và mở rộng ' Liên kết nhị phân với thư viện '.
  5. Làm cho khung rắc rối tùy chọn (từ yêu cầu).

Điều này cho phép tôi biên dịch cho iPhone cũ hơn / mới hơn mà không thực hiện bất kỳ thay đổi mã nào. Tôi hy vọng điều này sẽ giúp khác.


1
CẢM ƠN BẠN. Làm cho nó tùy chọn là liên kết bị thiếu ...
fl034

không hoạt động, ứng dụng gặp sự cố và không có thông báo cho biết loại sự cố thay vì điểm dừng trên một số mã lắp ráp.
Newsonic

Tại sao điều này là cần thiết để làm cho tùy chọn?
rohitwtbs

5

Tôi gặp vấn đề tương tự. Tôi đã thử xây dựng dự án của mình bằng một chiếc iPhone mà tôi chưa từng sử dụng trước đây và tôi đã không thêm một khung công tác mới. Đối với tôi, dọn dẹp hoạt động tốt ( Shift + Command + K ). Có thể đó là vì tôi sử dụng beta 5 của Xcode 7 và iPhone 6 với iOS 9 Beta, nhưng nó đã hoạt động.


Và có thể cả Thư mục xây dựng sạch (CMD + Shift + Alt + K)
Grifas

4

Trong trường hợp của tôi, dự án của tôi được viết bởi object-c và trong thư viện có các tệp Swift. Vì vậy, tôi đã thay đổi "Luôn nhúng Thư viện tiêu chuẩn Swift" trong tab Cài đặt xây dựng của dự án thành và nó trở nên hoàn toàn ổn.


4

Đối với bất kỳ dự án hoặc dự án khung nào trong Xcode sử dụng nhóm, một cách dễ dàng để tránh thư viện động (dylb) không tải là đặt tệp pod của bạn thành mực ở chế độ tĩnh. Để làm như vậy, chỉ cần đảm bảo không viết dòng sau vào tệp pod của bạn.

use_frameworks!

Khi dòng đã bị xóa khỏi tệp mà bạn đã lưu, chỉ cần chạy biểu mẫu bảng điều khiển:

$ pod update

2

Nếu có nhóm phát triển Xóa ứng dụng của bạn khỏi cài đặt giả lập khỏi nhóm -> sạch -> chạy lại ...


2

Điều tương tự là khi tôi đã tạo một Sơ đồ cấu hình và xây dựng mới.

Vì vậy, giải pháp cho tôi là chạy

pod install

cho cấu hình mới được tạo này.


1

Sau khi thử tất cả các phương pháp có sẵn trên internet và thủ thuật thử và lỗi của riêng tôi 100 lần. Cuối cùng tôi đã có thể giải quyết nó. - Apeksha Sahu 6 phút trước
Goto iTunes trong Mac -> tài khoản -> Ủy quyền cho máy tính này - Apeksha Sahu 5 phút trước
bước thứ hai .... Nhà phát triển Goto trong cài đặt trong iPad và iPhone và reindex với số nhận dạng và xóa máy tính tin cậy mọi thứ. Nó hoạt động với tôi ........ ....... Sau khi cài đặt lại phiên bản Mac OSHigh seria 10.13.15 từ phiên bản Mac OS seirra beta mới nhất, để cài đặt lại Xcode phiên bản mới nhất, sau khi cập nhật tất cả các chứng chỉ. vân vân, vân vân ... nhiều phương pháp như bạn nghĩ tôi đã làm. -nhập mô tả hình ảnh ở đây


1

Thử với cờ thay đổi ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(trong các phiên bản xcode trước đó Embedded Content Contains Swift Code:) trong Cài đặt bản dựng từ KHÔNG thành CÓ.


1

Xcode 11

  1. Điều hướng đến cài đặt của mục tiêu của bạn và chọn Chung.
  2. Tìm kiếm "Khung, Thư viện và Nội dung được nhúng"
  3. Giữ "Không nhúng" và đảm bảo rằng tất cả các mục tiêu của bạn (nếu bạn có nhiều hơn một) chỉ đặt khung riêng của nó chứ không phải các mục tiêu khác.

1

Trong Xcode 11

Tôi đã phải đối mặt với cùng một vấn đề

Thay đổi "Không nhúng" trong Tab Chung > "Khung, Thư viện và Nội dung được nhúng" vẫn gây ra lỗi tương tự.

Điều đã giải quyết cho tôi là thêm Khung trong tab Giai đoạn xây dựng > Phần khung nhúng

- Cập nhật ---

Tôi đã quan sát thấy rằng trong các dự án được xây dựng trong các phiên bản trước của Phần khung nhúng Xcode không khả dụng khi chạy trong Xcode 11, Tìm các bước dưới đây để đạt được giải pháp:

1: Trước tiên cần thêm Giai đoạn sao chép tệp mới trong tab Xây dựng giai đoạn .

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

2: Thứ hai thay đổi tên của pha được thêm vào Nhúng khung nhập mô tả hình ảnh ở đây

3: Thay đổi đích đến Khung .

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

4: Thêm khung mà lỗi xảy ra.

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


1

Mặc dù tất cả mọi người đang nói để nhúng khung theo Binaries nhúng nhưng nó vẫn không hoạt động, bởi vì chúng tôi đang thiếu một bước quan trọng ở đây.

Dưới đây là hai bước đúng để thêm các nhị phân trong tab Binaries nhúng:

  1. Xóa khung làm việc đưa ra lỗi khỏi "Thư viện và khung liên kết" trong tab Chung.

  2. Bây giờ chỉ thêm khung bị loại bỏ trong tab Binaries nhúng và đó là tất cả những gì bạn cần làm.

Chạy nó trên thiết bị và giữ nụ cười đó;)


0
  1. Chuyển đến tệp trong xcode -> Cài đặt không gian làm việc
  2. Nhấp vào mũi tên bên cạnh xuất hiện / Người dùng / apple / Thư viện / Nhà phát triển / Xcode / DeruredData
  3. Chọn dữ liệu Đã tạo và di chuyển nó vào Thùng rác.
  4. Khá xcode và mở lại nó.
  5. Làm sạch dự án và chạy lại.

Các bước trên đã giải quyết ngay lập tức.


0

Giải pháp đơn giản là làm theo ảnh chụp màn hình này sau đó sự cố sẽ biến mất:

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

Lưu ý: Đây là Xcode 11,5


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.