Xcode 4 không thể định vị các tệp tiêu đề công khai từ sự phụ thuộc vào thư viện tĩnh


91

Tiêu đề thay thế để hỗ trợ tìm kiếm

  • Xcode không thể tìm thấy tiêu đề
  • Thiếu .h trong Xcode
  • Không tìm thấy tệp Xcode .h
  • không tìm thấy tệp vấn đề từ vựng hoặc tiền xử lý

Tôi đang làm việc trên một dự án ứng dụng iOS đến từ Xcode 3. Hiện tôi đã chuyển sang Xcode 4, dự án của tôi xây dựng một số thư viện tĩnh.

Các thư viện tĩnh đó cũng khai báo các tiêu đề công khai và các tiêu đề đó được sử dụng bởi mã ứng dụng. Trong Xcode 3.x, các tiêu đề đã được sao chép (như một giai đoạn xây dựng) vào public headers directory, sau đó trong dự án ứng dụng, tiêu đề public headers directoryđã được thêm vào headers search list.

Trong Xcode 4, thư mục xây dựng được chuyển đến ~/Library/Developer/Xcode/DerivedData/my-project.

Vấn đề là làm cách nào để tham chiếu vị trí mới này trong cài đặt tìm kiếm tiêu đề? Có vẻ như:

  • public headers directorylà liên quan đến DerivedDatathư mục, nhưng
  • headers search thư mục liên quan đến một cái gì đó khác (có thể là vị trí dự án)

Tôi nên thiết lập mục tiêu thư viện tĩnh để phát triển iOS trong Xcode 4 như thế nào để đảm bảo các tệp tiêu đề được cung cấp cho các máy khách sử dụng thư viện tĩnh khi cố gắng biên dịch dưới dạng phụ thuộc?


Có thể liên quan đến tên đường dẫn. Xin hãy kiểm tra bài viết này. [Thư viện tĩnh trong Xcode 4] [1] [1]: stackoverflow.com/questions/6074576/static-libraries-in-xcode-4/...
Diego Marafetti

Câu trả lời:


124

Mỗi giải pháp tôi đã thấy cho vấn đề này đều có vẻ không phù hợp (sao chép tiêu đề vào dự án của ứng dụng) hoặc quá đơn giản hóa đến mức chúng chỉ hoạt động trong các tình huống tầm thường.

Câu trả lời ngắn gọn

Thêm đường dẫn sau vào Đường dẫn Tìm kiếm Tiêu đề Người dùng của bạn

"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"

Tại sao điều này hoạt động?

Đầu tiên, chúng ta cần hiểu rõ vấn đề. Trong các trường hợp bình thường, có nghĩa là khi bạn Chạy, Kiểm tra, Hồ sơ hoặc Phân tích, Xcode sẽ xây dựng dự án của bạn và đưa đầu ra vào thư mục Xây dựng / Sản phẩm / Cấu hình / Sản phẩm, có sẵn thông qua macro $ BUILT_PRODUCTS_DIR .

Hầu hết các hướng dẫn về thư viện tĩnh đều khuyên bạn nên đặt Đường dẫn Thư mục Tiêu đề Công khai thành $ TARGET_NAME , có nghĩa là tệp lib của bạn trở thành $ BUILT_PRODUCTS_DIR /libTargetName.a và các tiêu đề của bạn được đưa vào $ BUILT_PRODUCTS_DIR / TargetName. Miễn là ứng dụng của bạn bao gồm $ BUILT_PRODUCTS_DIR trong đường dẫn tìm kiếm, thì quá trình nhập sẽ hoạt động trong 4 trường hợp được đưa ra ở trên. Tuy nhiên, điều này sẽ không hoạt động khi bạn cố gắng lưu trữ.

Lưu trữ hoạt động hơi khác một chút

Khi bạn lưu trữ một dự án, Xcode sử dụng một thư mục khác có tên ArchiveIntermediates. Trong thư mục đó, bạn sẽ tìm thấy / YourAppName / BuildProductsPath / Release-iphoneos /. Đây là thư mục mà $ BUILT_PRODUCTS_DIR trỏ đến khi bạn thực hiện lưu trữ. Nếu bạn nhìn vào đó, bạn sẽ thấy rằng có một liên kết tượng trưng đến tệp thư viện tĩnh đã xây dựng của bạn nhưng thư mục có tiêu đề bị thiếu.

Để tìm các tiêu đề (và tệp lib), bạn cần truy cập IntermediateBuildFilesPath / UninstalledProducts /. Hãy nhớ khi bạn được yêu cầu đặt Skip Install thành YES cho các thư viện tĩnh? Đây là hiệu ứng mà cài đặt có khi bạn tạo một kho lưu trữ.

Lưu ý bên: Nếu bạn không đặt nó để bỏ qua cài đặt, tiêu đề của bạn sẽ được đưa vào một vị trí khác và tệp lib sẽ được sao chép vào kho lưu trữ của bạn, ngăn bạn xuất tệp .ipa mà bạn có thể gửi lên App Store .

Sau rất nhiều lần tìm kiếm, tôi không thể tìm thấy macro nào tương ứng chính xác với thư mục UninstalledProducts, do đó cần phải tạo đường dẫn với "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"

Tóm lược

Đối với thư viện tĩnh của bạn, hãy đảm bảo rằng bạn bỏ qua cài đặt và các tiêu đề công khai của bạn được đặt vào $ TARGET_NAME.

Đối với ứng dụng của bạn, hãy đặt đường dẫn tìm kiếm tiêu đề người dùng của bạn thành "$ (BUILT_PRODUCTS_DIR)", hoạt động tốt cho các bản dựng thông thường và "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts", hoạt động cho các bản lưu trữ.


Điều này liên quan như thế nào đến thư mục DerivedData?
Richard Stelling

Các bản dựng thông thường đi tới: DerivedData / WorkspaceName-hash / Build / Products / Debug-iphoneos / TargetName.app --- Các bản dựng lưu trữ đi tới: DerivedData / WorkspaceName-hash / Build / Intermediates / ArchiveIntermediates / TargetName / BuildProductsPath / Release-iphoneos / TargetName.app
Colin

3
Đối với tôi, việc sử dụng "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts" với hộp kiểm đệ quy không hoạt động. Ngay sau khi tôi sử dụng "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / <nameOfStaticLibrary>" mà không có cờ đệ quy, nó đã hoạt động với tôi.
TPoschel

7
Lưu ý rằng $ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts của bạn thực sự là như vậy $(TARGET_BUILD_DIR). Ngay cả khi đang lưu trữ. ;)
Pascal

1
Đối với tôi trong Xcode 5: $ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / include / TÊN THƯ VIỆN Tôi đã không đặt thành CÓ: Luôn tìm kiếm đường dẫn người dùng.
xarly

84

Tôi đã gặp phải vấn đề tương tự khi phát triển thư viện tĩnh của riêng mình và mặc dù câu trả lời của Colin rất hữu ích, nhưng tôi phải sửa đổi nó một chút để hoạt động nhất quán và đơn giản khi cả chạy và lưu trữ các dự án trong Xcode 4 bằng Workspace.

Điều khác biệt về phương pháp của tôi là bạn có thể sử dụng một đường dẫn tiêu đề người dùng duy nhất cho tất cả các cấu hình bản dựng của mình.

Phương pháp của tôi như sau:

Tạo không gian làm việc

  1. Trong Xcode 4, đi tới Tệp, Mới, Không gian làm việc.
  2. Từ Finder, bạn có thể kéo các dự án .xcodeproj vào cho cả thư viện tĩnh bạn muốn sử dụng và ứng dụng mới bạn đang xây dựng có sử dụng thư viện. Xem Apple Docs để biết thêm thông tin về cách thiết lập Workspaces: https://developer.apple.com/library/content/featuredarticles/XcodeConcept/Concept-Workspace.html

Cài đặt dự án thư viện tĩnh

  1. Đảm bảo rằng tất cả các tiêu đề của thư viện tĩnh được đặt để sao chép thành "Công khai". Điều này được thực hiện trong cài đặt cho mục tiêu thư viện tĩnh> Xây dựng giai đoạn. Trong giai đoạn "Sao chép tiêu đề", hãy đảm bảo rằng tất cả các tiêu đề của bạn đều nằm trong phần "Công khai".
  2. Tiếp theo, chuyển đến Build Settings, tìm "Public Headers Folder Path" và nhập đường dẫn cho thư viện của bạn. Tôi chọn sử dụng cái này:

bao gồm / LibraryName

Tôi đã áp dụng điều này khi sử dụng với RestKit và thấy nó hoạt động tốt nhất với tất cả các thư viện tĩnh của tôi. Những gì điều này làm là yêu cầu Xcode sao chép tất cả các tiêu đề mà chúng tôi đã chuyển đến phần tiêu đề "Công khai" ở bước 1 vào thư mục mà chúng tôi chỉ định ở đây, nằm trong thư mục Dữ liệu gốc khi xây dựng. Giống như với RestKit, tôi thích sử dụng một thư mục "bao gồm" duy nhất để chứa mỗi thư viện tĩnh mà tôi đang sử dụng trong một dự án.

Tôi cũng không thích sử dụng macro ở đây vì nó sẽ cho phép chúng tôi sử dụng một đường dẫn tìm kiếm tiêu đề người dùng duy nhất sau này khi chúng tôi định cấu hình dự án bằng thư viện tĩnh.

  1. Tìm "Bỏ qua cài đặt" và đảm bảo cài đặt này được đặt thành CÓ.

Cài đặt cho Dự án Sử dụng Thư viện Tĩnh

  1. Thêm thư viện tĩnh làm khuôn khổ trong Build Phases> Link Binary With Libraries và thêm tệp libLibraryName.a cho bất kỳ thư viện tĩnh nào bạn muốn sử dụng.
  2. Tiếp theo, hãy đảm bảo dự án được thiết lập để tìm kiếm Đường dẫn Tìm kiếm Người dùng. Điều này được thực hiện trong Cài đặt bản dựng> Luôn tìm kiếm đường dẫn người dùng và đảm bảo rằng nó được đặt thành CÓ.
  3. Trong cùng một khu vực, hãy tìm Đường dẫn Tìm kiếm Tiêu đề Người dùng và thêm:

    "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / include"

Điều này yêu cầu Xcode tìm kiếm các thư viện tĩnh trong thư mục xây dựng trung gian mà Xcode tạo ra trong quá trình xây dựng. Tại đây, chúng tôi có thư mục "include" mà chúng tôi đang sử dụng cho các vị trí thư viện tĩnh mà chúng tôi thiết lập ở bước 2 cho cài đặt dự án thư viện tĩnh. Đây là bước quan trọng nhất trong việc lấy Xcode để tìm chính xác các thư viện tĩnh của bạn.

Định cấu hình không gian làm việc

Ở đây chúng tôi muốn định cấu hình không gian làm việc để nó sẽ xây dựng thư viện tĩnh khi chúng tôi xây dựng ứng dụng của mình. Điều này được thực hiện bằng cách chỉnh sửa lược đồ được sử dụng cho ứng dụng của chúng tôi.

  1. Đảm bảo rằng bạn đã chọn lược đồ sẽ tạo ứng dụng của bạn.
  2. Từ trình đơn thả xuống, chọn Chỉnh sửa sơ đồ.
  3. Chọn Xây dựng ở đầu danh sách ở bên trái. Thêm mục tiêu mới bằng cách nhấn + trên ngăn giữa.
  4. Bạn sẽ thấy thư viện tĩnh hiển thị cho thư viện mà bạn đang cố gắng liên kết. Chọn thư viện tĩnh iOS.
  5. Nhấp vào cả Chạy và Lưu trữ. Điều này cho phép lược đồ biên dịch các thư viện cho thư viện tĩnh bất cứ khi nào bạn xây dựng ứng dụng của mình.
  6. Kéo thư viện tĩnh lên trên mục tiêu ứng dụng của bạn. Điều này làm cho các thư viện tĩnh biên dịch trước mục tiêu ứng dụng của bạn.

Bắt đầu sử dụng thư viện

Bây giờ, bạn có thể nhập thư viện tĩnh của mình bằng cách sử dụng

import <LibraryName/LibraryName.h>

Phương pháp này giải quyết được rắc rối khi phải có các đường dẫn tiêu đề người dùng khác nhau cho các cấu hình khác nhau, vì vậy bạn sẽ không gặp vấn đề gì khi biên dịch cho các kho lưu trữ.

Tại sao điều này hoạt động?

Tất cả phụ thuộc vào con đường này:

"$(PROJECT_TEMP_DIR)/../UninstalledProducts/include"

Vì chúng tôi định cấu hình thư viện tĩnh của mình để sử dụng "Bỏ qua cài đặt", các tệp đã biên dịch được chuyển đến thư mục "UninstalledProjects" trong thư mục bản dựng tạm thời. Đường dẫn của chúng tôi ở đây cũng giải quyết đến thư mục "bao gồm" mà chúng tôi thiết lập cho thư viện tĩnh của mình và sử dụng cho đường dẫn tìm kiếm tiêu đề người dùng của chúng tôi. Cả hai làm việc cùng nhau cho phép Xcode biết nơi tìm thư viện của chúng tôi trong quá trình biên dịch. Vì thư mục xây dựng tạm thời này tồn tại cho cả cấu hình Gỡ lỗi và Phát hành, bạn chỉ cần một đường dẫn duy nhất cho Xcode để tìm kiếm các thư viện tĩnh.


3
Bạn thật tuyệt vời! Điều này thực sự hữu ích và nó hoạt động như bạn đã mô tả.
neevek

1
tuyệt vời. Tôi sẽ gửi hoa ở đâu :)
Ramesh

1
Sau khi thiết lập điều này, một số bạn có thể gặp phải " ...] bộ chọn không được công nhận được gửi đến lớp 0x ... ". Trong trường hợp bạn, hãy thử thêm lên này trong dự án của bạn Targets-> Project-> Build Settings-> Linking-> Flags Linker khác : -all_load
MkVal

Đảm bảo Đường dẫn Tìm kiếm Tiêu đề Người dùng nằm trong dấu ngoặc kép nếu chúng có khoảng trắng.
tôn trọngMã

Xcode 4.6.2 không ghi bất kỳ thứ gì vào "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / include" đối với tôi. Bất kỳ ý tưởng những gì tôi đang thiếu? Hay hành vi Xcode đã thay đổi một lần nữa?
c roald

16

Dự án Xcode 4 Không thể biên dịch thư viện tĩnh

Câu hỏi liên quan: “Không tìm thấy tệp sự cố từ vựng hoặc bộ xử lý trước” trong Xcode 4

Các lỗi có thể bao gồm; thiếu tệp tiêu đề, "vấn đề từ vựng hoặc bộ xử lý trước"

Các giải pháp:

  1. Kiểm tra "đường dẫn tiêu đề người dùng" có đúng không
  2. Đặt "Luôn tìm kiếm đường dẫn người dùng" thành CÓ
  3. Tạo một cuộc gọi nhóm "Tiêu đề lập chỉ mục" trong dự án của bạn và kéo tiêu đề vào nhóm này, KHÔNG thêm vào bất kỳ mục tiêu nào khi được nhắc.

11
Một bước khác dễ bị bỏ qua nhưng cực kỳ quan trọng: Đảm bảo rằng các đường dẫn tìm kiếm của bạn được đặt trong dấu ngoặc kép để thoát khỏi bất kỳ khoảng trống nào. Tôi luôn quên làm điều đó.
Brad

Cảm ơn @Brad, đây thực sự là một nhận xét rất quan trọng và hữu ích.
Julian D.

15

Đây là một chủ đề rất hữu ích. Khi tự nghiên cứu tình huống của mình, tôi thấy rằng Apple có một tài liệu dài 12 trang đề ngày tháng 9 năm 2012 với tiêu đề "Sử dụng Thư viện Tĩnh trong iOS." Đây là liên kết pdf: http://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf

Nó đơn giản hơn nhiều so với hầu hết các cuộc thảo luận trên Internet, và với một số mod nhỏ để giải thích cách cấu hình các thư viện bên ngoài mà tôi đang sử dụng, nó hoạt động tốt đối với tôi. Phần quan trọng nhất có lẽ là:

Nếu mục tiêu thư viện của bạn có giai đoạn xây dựng "Tiêu đề sao chép", bạn nên xóa nó; các giai đoạn xây dựng tiêu đề sao chép không hoạt động chính xác với các mục tiêu thư viện tĩnh khi thực hiện hành động “Lưu trữ” trong Xcode.

Các mục tiêu thư viện tĩnh mới được tạo bằng Xcode 4.4 trở lên sẽ đi kèm với giai đoạn Tệp Sao chép được cấu hình thích hợp cho tiêu đề, vì vậy bạn nên kiểm tra xem mình đã có chưa trước khi tạo. Nếu bạn không làm như vậy, hãy nhấn “Thêm giai đoạn xây dựng” ở cuối trình chỉnh sửa mục tiêu và chọn “Thêm tệp sao chép”. Tiết lộ giai đoạn xây dựng Tệp sao chép mới và đặt Đích thành “Danh mục sản phẩm”. Đặt Đường dẫn con để bao gồm / $ {PRODUCT_NAME}. Thao tác này sẽ sao chép tệp vào một thư mục được đặt tên theo thư viện của bạn (được lấy từ cài đặt bản dựng PRODUCT_NAME), bên trong một thư mục có tên bao gồm, bên trong thư mục sản phẩm đã xây dựng của bạn. Thư mục bao gồm bên trong thư mục sản phẩm xây dựng nằm trong đường dẫn tìm kiếm tiêu đề mặc định cho các ứng dụng, vì vậy đây là nơi thích hợp để đặt tệp tiêu đề.

Tôi chắc chắn rằng trong nhiều tình huống hiện tại, cách tiếp cận của Apple có thể không đủ. Tôi đăng bài này ở đây cho bất kỳ ai mới bắt đầu hành trình trên con đường vườn thư viện tĩnh - đây có thể là điểm khởi đầu tốt nhất cho các trường hợp đơn giản.


đối với những người theo liên kết trên .. hãy cẩn thận: bước yêu cầu bạn xóa các tệp mẫu giả khi bạn tạo dự án thư viện .. ĐỪNG XÓA tệp * .pch .. cuối cùng nó sẽ ám ảnh bạn + những điều trên lời khuyên không hoạt động với các danh mục .. mặc dù có một bản sửa lỗi cho điều đó (đã thấy nó ở đâu đó)
abbood

Cảm ơn bạn đã cung cấp liên kết đến một phương pháp tiếp cận chính thức của Apple để xây dựng thư viện tĩnh. Tôi đã bắt đầu bằng cách xây dựng thư viện tĩnh của mình bằng cách sử dụng phương pháp này , nhưng không thể Lưu trữ. @abbood - Sự cố khi xóa tệp pch được tạo là gì?
August

nếu bạn xóa các tập tin .pch .. dự án chỉ đơn giản là sẽ không biên dịch .. (với mục đích lưu trữ hay cách khác) ..
abbood

Nó không hoạt động với tôi. Khi tôi thử câu lệnh nhập với "" nó không hoạt động, tôi cần <>. Ngoài ra trong khi lưu trữ, nó không thể tìm thấy tiêu đề. Có ý kiến ​​gì không?
user1010819

4

http://developer.apple.com/library/ios/#technotes/iOSStaticLibraries/Articles/creating.html

Theo tài liệu của Apple:

Thư viện của bạn sẽ có một hoặc nhiều tệp tiêu đề mà các ứng dụng khách của thư viện đó cần nhập. Để định cấu hình tiêu đề nào được xuất cho máy khách, hãy chọn dự án thư viện của bạn để mở trình chỉnh sửa dự án, chọn mục tiêu thư viện để mở trình chỉnh sửa đích và chọn tab giai đoạn xây dựng. Nếu mục tiêu thư viện của bạn có giai đoạn xây dựng "Tiêu đề sao chép", bạn nên xóa nó; các giai đoạn xây dựng tiêu đề sao chép không hoạt động chính xác với các mục tiêu thư viện tĩnh khi thực hiện hành động “Lưu trữ” trong Xcode.


3

Hãy xem giải pháp của Jonah Wlliam (ở phần giữa) và mô hình GitHub (trong phần bình luận) để có cái nhìn sâu sắc. http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/


4
Mặc dù về mặt kỹ thuật điều này có thể trả lời câu hỏi, nhưng bạn nên đưa các phần thiết yếu của bài viết được liên kết vào câu trả lời của mình và cung cấp liên kết để tham khảo. Không làm được điều đó khiến câu trả lời có nguy cơ bị thối liên kết.
jscs

2

Thêm $ (OBJROOT) / UninstalledProducts / chính xácPathToHeaders vào Đường dẫn Tìm kiếm Tiêu đề.

Vì một số lý do mà hộp kiểm đệ quy không hoạt động đối với tôi và tôi phải thêm phần còn lại của đường dẫn đến nơi chứa các tiêu đề.

Trong Bộ điều hướng nhật ký trong Xcode (tab ở bên phải của bộ điều hướng điểm ngắt), bạn có thể xem lịch sử xây dựng. Nếu bạn chọn lỗi xây dựng thực tế, bạn có thể mở rộng chi tiết của nó để xem setenv PATH và kiểm tra để đảm bảo rằng đường dẫn đến tệp tiêu đề của bạn ở đó.


Lưu ý tốt về hộp kiểm đệ quy, vấn đề tương tự ở đây.
Codezy

Đúng, tôi cũng phải chỉ định một thư mục con cụ thể, việc kiểm tra đệ quy không hoạt động.
Oliver Pearmain

Tuy nhiên, tôi đã kết thúc bằng cách sử dụng đường dẫn này (đơn giản vì nó ngắn hơn) "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / SubProjectHeaders"
Oliver Pearmain

2

Trong trường hợp của tôi, không gian làm việc của tôi có một vài dự án thư viện tĩnh và một trong số chúng có sự phụ thuộc bao gồm các tệp tiêu đề với dự án kia. Vấn đề là với thứ tự xây dựng. Trong trang chỉnh sửa Lược đồ trong phần Xây dựng, tôi đã bỏ chọn tùy chọn song song hóa và sắp xếp thứ tự của các mục tiêu theo các phụ thuộc và nó được giải quyết theo vấn đề


1

Thêm đường dẫn sau vào Đường dẫn Tìm kiếm Tiêu đề Người dùng của bạn :

$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts

Điều này đã được xác minh!


1

Trước nguy cơ thể hiện tôi là một tên ngốc ... Tôi đã bị XCode từ chối tìm các tệp .h của tôi cả buổi chiều.

Rồi tôi nhận ra.

Bởi vì tôi đang sử dụng "XCode 4", tôi đã quyết định "một cách thông minh" để đặt tất cả các dự án của mình vào một thư mục con của một thư mục có tên là " XCode 4 project ".

Những khoảng trống trong tên thư mục đã làm xáo trộn XCode trong thời gian dài!

Đổi tên thư mục này thành " XCode_4_Projects " đã mang lại niềm vui (và bớt chửi thề) trong cuộc sống của tôi.

Nhắc tôi một lần nữa, những gì năm là thế này?

Có lẽ ai đó có thể nói với các nhà phát triển Apple ...


1

Không câu trả lời nào trong số này phù hợp với tôi. Đây là những gì đã làm. Thêm chính xác phần sau (sao chép và dán bao gồm cả dấu ngoặc kép) vào cài đặt xây dựng Đường dẫn tìm kiếm tiêu đề người dùng của bạn :

"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include/"

Lưu ý việc bổ sung thư mục con "/ include /" so với các câu trả lời khác. Như những người dùng khác đã chỉ ra, tùy chọn "đệ quy" dường như không có tác dụng gì, vì vậy bạn có thể bỏ qua nó.

Dự án của tôi hiện đã có thể lưu trữ thành công khi nhập tệp tiêu đề thư viện tĩnh ở dạng sau:

#import "LibraryName/HeaderFile.h"

Bạn không cần phải bật cài đặt Luôn tìm kiếm đường dẫn người dùng trừ khi bạn đang bao gồm tiêu đề thư viện tĩnh của mình với dấu ngoặc nhọn ( #import <LibraryName/HeaderFile.h>), nhưng bạn thực sự không nên làm theo cách đó nếu nó không phải là tiêu đề hệ thống / khung.


1

Không có câu trả lời nào ở trên phù hợp với tôi trên Xcode 7 nhưng chúng đã cho tôi một ý tưởng hay. Đối với những người đang gặp khó khăn trên Xcode 7, tôi đã khắc phục điều này bằng cách thêm phần sau vào Đường dẫn tìm kiếm tiêu đề người dùng (bao gồm dấu ngoặc kép)

"$(BUILT_PRODUCTS_DIR)/usr/local/include"

Thay đổi phần URL tương đối usr/local/includetheo những gì có trong cài đặt 'Đường dẫn thư mục tiêu đề công khai' của thư viện tĩnh


0

Đây là một vấn đề liên quan khiến tôi phải hỏi câu hỏi này vì vậy tôi đang bổ sung giải pháp của mình một cách nghiêm ngặt để làm tài liệu / nó có thể giúp tiết kiệm thêm một giờ đổ mồ hôi

Không tìm thấy tệp DropboxSDK.h

Sau nhiều ngày cố gắng biên dịch VES cho iOS, cuối cùng tôi đã gặp phải sự cố này. những DropboxSDK.hđã chắc chắn trong tầm với của search headerstôi thậm chí còn thêm nó vào framework headersđường dẫn tìm kiếm, includeD .htrực tiếp và đi đến tất cả các loại có độ dài tuyệt vời để thử và nhận được DropboxSDK.htìm thấy.

Giải pháp

EXPLICITY kéo DropboxSDK.frameworktệp vào Xcode Project Navigationvà đảm bảo Copy Files if neededđã được chọn. Đồng thời đảm bảo rằng mục tiêu của bạn được kiểm tra khi cần thiết.

Cảnh báo

Đặt vị trí khung rõ ràng trong build phaseskhông hoạt động đối với tôi. Tôi phải kéo .framework vào Xcode và đảm bảo các tệp được sao chép vào dự án của tôi.

# mbp2015 # xcode7 # ios9


0

Có nhiều cách phức tạp khác nhau để thực hiện việc này và một số giải pháp rất thông minh được đề xuất trong chủ đề này.

Vấn đề chính của tất cả các giải pháp này là nó làm giảm nghiêm trọng tính di động của thư viện của bạn.

  • Mỗi lần bạn cần bắt đầu một dự án mới bằng cách sử dụng thư viện của mình và lưu trữ nó cho iTunes, đó là một địa ngục cấu hình.
  • Mỗi khi bạn cần chia sẻ dự án của mình với nhóm hoặc khách hàng, dự án có thể bị hỏng vì bất kỳ lý do gì (bối cảnh, phiên bản Xcode, bất cứ điều gì, ..)

Cuối cùng, lựa chọn của tôi là sử dụng các khuôn khổ - luôn luôn - theo khuyến nghị của Apple (WWDC Videos).

Nó rất dễ dàng hơn và thực hiện cùng một công việc ở cuối!

Một giải pháp khá thanh lịch khác có vẻ hiệu quả là sử dụng Private Cocoapods. Cocoapods thực hiện tất cả các công việc cấu hình, sao chép tiêu đề, v.v.

Khung nền tảng đá!


1
Bạn đặt cái này ở đâu? simply use frameworks - always -
Neil Faulkner,

Nó không đặt ở bất cứ đâu. Nó chỉ đơn giản là một sự lựa chọn kiến ​​trúc. Các khung công tác là 'thư viện hiện đại' dễ liên kết và quản lý hơn nhiều. Tại thời điểm thông báo này, swift vẫn chưa cho phép xây dựng thư viện nhị phân.
Moose

0

Đây là những gì đã giải quyết vấn đề tương tự cho tôi.

Tôi có Mục tiêu ứng dụng và Mục tiêu mở rộng iMessage. Sau đó, tôi có 2 SDK (của riêng tôi), mà Mục tiêu ứng dụng liên kết với.

Vấn đề là: mục tiêu iMessage của tôi cũng đang sử dụng 2 SDK của tôi (các dự án riêng biệt), nhưng nó không liên kết chống lại chúng trong các giai đoạn Xây dựng -> Liên kết Nhị phân Với Thư viện. Tôi đã phải thêm 2 SDK của mình vào Mục tiêu iMessage ở đó, để khớp với mục tiêu Ứng dụng của tôi và bây giờ nó được lưu trữ.

Vì vậy, đạo lý của câu chuyện là: Nếu bạn có nhiều mục tiêu, chẳng hạn như tiện ích mở rộng, hãy đảm bảo rằng tất cả các mục tiêu của bạn đang liên kết với các thư viện mà chúng cần. Nó có thể Xây dựng và Triển khai tới Trình mô phỏng và Thiết bị, nhưng không thể Lưu trữ.


0

Cập nhật: Xcode 9

Các câu trả lời trên không hoạt động với tôi khi sử dụng Xcode 9, nhưng câu trả lời này hoạt động hoàn hảo đối với tôi. Tôi đã thêm vào $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"Đường dẫn Tìm kiếm Tiêu đề" của mình và Xcode đã liên kết tiêu đề của thư viện tĩnh của tôi mà không gặp vấn đề gì.


-18

Hãy tự giải quyết vấn đề và thực hiện việc này = tạo tài khoản người dùng mới trên máy Mac của bạn - mở dự án dưới tài khoản người dùng mới - mọi vấn đề đều biến mất. Tiết kiệm thời gian của bạn và giữ cho sự tỉnh táo của bạn. tất cả những câu trả lời mọt sách đó không giúp được gì !!

Chúc may mắn

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.