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ữ.