Setiap solusi yang saya lihat untuk masalah ini tampak tidak elegan (menyalin header ke dalam proyek aplikasi) atau terlalu disederhanakan hingga hanya berfungsi dalam situasi sepele.
Jawaban singkatnya
Tambahkan jalur berikut ke Jalur Pencarian Header Pengguna Anda
"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Mengapa ini berhasil?
Pertama, kita perlu memahami masalahnya. Dalam keadaan normal, yaitu ketika Anda Menjalankan, Menguji, Membuat Profil, atau Menganalisis, Xcode membuat proyek Anda dan meletakkan hasilnya di direktori Build / Products / Configuration / Products, yang tersedia melalui makro $ BUILT_PRODUCTS_DIR .
Sebagian besar panduan tentang pustaka statis menyarankan untuk menyetel Jalur Folder Header Publik ke $ TARGET_NAME , yang berarti bahwa file lib Anda menjadi $ BUILT_PRODUCTS_DIR /libTargetName.a dan header Anda dimasukkan ke dalam $ BUILT_PRODUCTS_DIR / TargetName. Selama aplikasi Anda menyertakan $ BUILT_PRODUCTS_DIR di jalur penelusurannya, impor akan berfungsi dalam 4 situasi yang diberikan di atas. Namun, ini tidak akan berfungsi saat Anda mencoba mengarsipkan.
Cara kerja pengarsipan sedikit berbeda
Saat Anda mengarsipkan proyek, Xcode menggunakan folder berbeda yang disebut ArchiveIntermediates. Di dalam folder itu Anda akan menemukan / YourAppName / BuildProductsPath / Release-iphoneos /. Ini adalah folder yang $ BUILT_PRODUCTS_DIR tunjuk saat Anda membuat arsip. Jika Anda melihat di sana, Anda akan melihat bahwa ada symlink ke file library statis yang Anda buat, tetapi folder dengan header tidak ada.
Untuk menemukan header (dan file lib) Anda harus pergi ke IntermediateBuildFilesPath / UninstalledProducts /. Ingat ketika Anda diberitahu untuk menyetel Lewati Pemasangan ke YA untuk pustaka statis? Nah, inilah efek pengaturan ketika Anda membuat arsip.
Catatan tambahan: Jika Anda tidak mengaturnya untuk melewati penginstalan, header Anda akan dimasukkan ke lokasi lain dan file lib akan disalin ke arsip Anda, mencegah Anda mengekspor file .ipa yang dapat Anda kirimkan ke App Store .
Setelah banyak mencari, saya tidak dapat menemukan makro yang sesuai dengan folder UninstalledProducts secara persis, oleh karena itu perlu membangun jalur dengan "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Ringkasan
Untuk pustaka statis Anda, pastikan Anda melewati penginstalan dan header publik Anda ditempatkan di $ TARGET_NAME.
Untuk aplikasi Anda, setel jalur penelusuran header pengguna Anda ke "$ (BUILT_PRODUCTS_DIR)", yang berfungsi dengan baik untuk build biasa, dan "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts", yang berfungsi untuk build arsip.