Xcode 4 tidak dapat menemukan file header publik dari ketergantungan perpustakaan statis

91

Judul alternatif untuk membantu pencarian

  • Xcode tidak dapat menemukan header
  • Hilang .h di Xcode
  • File Xcode .h tidak ditemukan
  • File masalah leksikal atau preprocessor tidak ditemukan

Saya sedang mengerjakan proyek aplikasi iOS yang berasal dari Xcode 3. Sekarang saya telah pindah ke Xcode 4. Proyek saya membangun sejumlah perpustakaan statis.

Library statis tersebut juga mendeklarasikan header publik dan header tersebut digunakan oleh kode aplikasi. Di Xcode 3.x header disalin (sebagai fase build) ke public headers directory, lalu dalam proyek aplikasi public headers directoryditambahkan ke headers search list.

Di bawah Xcode 4 direktori build dipindahkan ke ~/Library/Developer/Xcode/DerivedData/my-project .

Masalahnya adalah bagaimana cara mereferensikan lokasi baru ini di pengaturan pencarian tajuk? Tampaknya:

  • public headers directoryrelatif terhadap DerivedDatadirektori, tetapi
  • headers search direktori relatif terhadap sesuatu yang lain (mungkin lokasi proyek)

Bagaimana saya harus menyiapkan target perpustakaan statis untuk pengembangan iOS di Xcode 4 yang akan memastikan file header tersedia untuk klien yang menggunakan perpustakaan statis saat mencoba mengkompilasi sebagai ketergantungan?

Richard Stelling
sumber
Bisa terkait dengan nama jalur. Pl periksa posting ini. [Perpustakaan statis di Xcode 4] [1] [1]: stackoverflow.com/questions/6074576/static-libraries-in-xcode-4/…
Diego Marafetti

Jawaban:

124

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.

Colin
sumber
Bagaimana ini berhubungan dengan folder DerivedData?
Richard Stelling
Build reguler masuk ke: DerivedData / WorkspaceName-hash / Build / Products / Debug-iphoneos / TargetName.app --- Build arsip masuk ke: DerivedData / WorkspaceName-hash / Build / Intermediates / ArchiveIntermediates / TargetName / BuildProductsPath / Release-iphoneos / TargetName.app
Colin
3
Bagi saya, menggunakan "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts" dengan kotak centang rekursif tidak berfungsi. Segera setelah saya menggunakan "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / <nameOfStaticLibrary>" tanpa tanda rekursif, itu berhasil untuk saya.
TPoschel
7
Perhatikan bahwa $ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts Anda sebenarnya $(TARGET_BUILD_DIR). Bahkan saat mengarsipkan. ;)
Pascal
1
Bagi saya di Xcode 5: $ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / include / NAME OF LIBRARY Saya tidak menyetel ke YES: Selalu cari jalur pengguna.
xarly
85

Saya mengalami masalah yang sama ini saat mengembangkan perpustakaan statis saya sendiri dan meskipun jawaban Colin sangat membantu, saya harus sedikit memodifikasinya agar berfungsi secara konsisten dan hanya saat menjalankan dan mengarsipkan proyek di bawah Xcode 4 menggunakan Ruang Kerja.

Yang berbeda tentang metode saya adalah Anda dapat menggunakan satu jalur tajuk pengguna untuk semua konfigurasi build Anda.

Metode saya adalah sebagai berikut:

Buat Ruang Kerja

  1. Di bawah Xcode 4, buka File, New, Workspace.
  2. Dari Finder, Anda kemudian dapat menarik proyek .xcodeproj untuk pustaka statis yang ingin Anda gunakan, dan aplikasi baru yang Anda buat yang menggunakan pustaka tersebut. Lihat Apple Docs untuk info lebih lanjut tentang pengaturan Workspaces: https://developer.apple.com/library/content/featuredarticles/XcodeConcepts/Concept-Workspace.html

Pengaturan Proyek Perpustakaan Statis

  1. Pastikan semua header perpustakaan statis disetel untuk disalin ke "Publik". Ini dilakukan di bawah pengaturan untuk target perpustakaan statis> Build Phases. Pada fase "Salin Header", pastikan semua header Anda ada di bagian "Publik".
  2. Selanjutnya pergi ke Build Settings, temukan "Public Headers Folder Path" dan ketikkan path untuk perpustakaan Anda. Saya memilih untuk menggunakan ini:

sertakan / LibraryName

Saya telah mengadopsi ini dari penggunaan dengan RestKit dan menemukan itu bekerja paling baik dengan semua perpustakaan statis saya. Apa yang dilakukan ini adalah memberi tahu Xcode untuk menyalin semua tajuk yang kita pindahkan ke bagian tajuk "Publik" pada langkah 1 ke folder yang kita tentukan di sini yang berada di dalam folder Data Turunan saat membangun. Seperti RestKit, saya suka menggunakan satu folder "sertakan" untuk menampung setiap pustaka statis yang saya gunakan dalam sebuah proyek.

Saya juga tidak suka menggunakan makro di sini karena ini akan memungkinkan kita untuk menggunakan jalur pencarian tajuk pengguna nanti ketika kita mengonfigurasi proyek menggunakan pustaka statis.

  1. Temukan "Lewati Pemasangan" dan pastikan ini disetel ke YA.

Pengaturan untuk Proyek Menggunakan Perpustakaan Statis

  1. Tambahkan pustaka statis sebagai kerangka kerja di bawah Build Phases> Tautkan Biner Dengan Pustaka dan tambahkan file libLibraryName.a untuk pustaka statis apa pun yang ingin Anda gunakan.
  2. Selanjutnya, pastikan proyek disetel untuk mencari Jalur Pencarian Pengguna. Ini dilakukan di bawah Build Settings> Always Search User Paths dan pastikan disetel ke YES.
  3. Di area yang sama temukan Jalur Pencarian Header Pengguna dan tambahkan:

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

Ini memberi tahu Xcode untuk mencari pustaka statis di dalam folder build perantara yang dibuat Xcode selama proses build. Di sini, kami memiliki folder "termasuk" yang kami gunakan untuk lokasi perpustakaan statis kami yang kami siapkan pada langkah 2 untuk pengaturan proyek perpustakaan statis. Ini adalah langkah terpenting untuk mendapatkan Xcode agar dapat menemukan pustaka statis Anda dengan benar.

Konfigurasikan Ruang Kerja

Di sini kami ingin mengonfigurasi ruang kerja sehingga itu akan membangun perpustakaan statis saat kami membangun aplikasi kami. Ini dilakukan dengan mengedit skema yang digunakan untuk aplikasi kita.

  1. Pastikan Anda telah memilih skema yang akan membuat aplikasi Anda.
  2. Dari drop-down skema, pilih Edit Scheme.
  3. Pilih Bangun di bagian atas daftar di sebelah kiri. Tambahkan target baru dengan menekan + di panel tengah.
  4. Anda harus melihat pustaka statis muncul untuk pustaka yang Anda coba tautkan. Pilih pustaka statis iOS.
  5. Klik Run dan Archive. Ini memberi tahu skema untuk mengompilasi pustaka untuk pustaka statis setiap kali Anda membangun aplikasi.
  6. Seret pustaka statis di atas target aplikasi Anda. Ini membuat pustaka statis dikompilasi sebelum target aplikasi Anda.

Mulai Menggunakan Perpustakaan

Sekarang, Anda seharusnya dapat mengimpor pustaka statis Anda menggunakan

import <LibraryName/LibraryName.h>

Metode ini mengatasi kerumitan karena harus memiliki jalur tajuk pengguna yang berbeda untuk konfigurasi yang berbeda, jadi Anda seharusnya tidak memiliki masalah dalam menyusun arsip.

Mengapa ini berhasil?

Itu semua tergantung pada jalan ini:

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

Karena kita mengkonfigurasi pustaka statis kita untuk menggunakan "Skip Install", file yang telah dikompilasi dipindahkan ke folder "UninstalledProjects" dalam direktori build sementara. Jalur kami di sini juga menentukan folder "sertakan" yang kami siapkan untuk perpustakaan statis kami dan digunakan untuk jalur pencarian tajuk pengguna kami. Keduanya bekerja bersama memungkinkan Xcode mengetahui di mana menemukan perpustakaan kami selama proses kompilasi. Karena direktori build sementara ini ada untuk konfigurasi Debug dan Rilis, Anda hanya memerlukan satu jalur Xcode untuk mencari pustaka statis.

gdavis.dll
sumber
3
Anda luar biasa, bung! Ini sangat membantu, dan berfungsi seperti yang Anda jelaskan.
neevek
1
mengagumkan. Kemana saya harus mengirim bunga :)
Ramesh
1
Setelah mengatur ini, beberapa dari Anda mungkin menemukan " ...] pemilih tidak dikenal dikirim ke kelas 0x ... ". Jika Anda melakukannya, coba tambahkan ini di Target proyek Anda-> Proyek-> Pengaturan Bangun-> Menghubungkan-> Bendera Tautan
MkVal
Pastikan Jalur Pencarian Header Pengguna dalam tanda kutip jika mereka memiliki spasi.
respekTheCode
Xcode 4.6.2 tidak menulis apa pun ke "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / include" untuk saya. Tahu apa yang saya lewatkan? Atau apakah perilaku Xcode berubah lagi?
c roald
16

Proyek Xcode 4 Gagal untuk mengkompilasi perpustakaan statis

Pertanyaan terkait: "file masalah leksikal atau preprocessor tidak ditemukan" di Xcode 4

Kesalahan mungkin termasuk; file header hilang, "masalah leksikal atau preprocessor"

Solusi:

  1. Periksa apakah "jalur tajuk pengguna" sudah benar
  2. Setel "Selalu cari jalur pengguna" ke YA
  3. Buat panggilan grup "Header pengindeksan" dalam proyek Anda dan seret header ke grup ini, JANGAN tambahkan ke target apa pun saat diminta.
Richard Stelling
sumber
11
Langkah lain yang mudah diabaikan tetapi sangat penting: Pastikan jalur pencarian Anda dibungkus dengan tanda kutip ganda untuk menghindari spasi. Saya selalu lupa melakukan itu.
Brad
Terima kasih @Brad, ini memang ucapan yang sangat penting dan bermanfaat.
Julian D.
15

Ini adalah utas yang sangat membantu. Dalam meneliti situasi saya sendiri, saya menemukan bahwa Apple memiliki dokumen 12 halaman tertanggal September 2012 berjudul "Menggunakan Perpustakaan Statis di iOS." Berikut tautan pdfnya: http://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf

Ini jauh lebih sederhana daripada kebanyakan diskusi Internet, dan dengan beberapa mod kecil untuk menjelaskan bagaimana pustaka eksternal yang saya gunakan dikonfigurasi, ini bekerja dengan baik untuk saya. Bagian terpenting mungkin adalah:

Jika target perpustakaan Anda memiliki fase build "Salin Header", Anda harus menghapusnya; fase pembuatan header copy tidak bekerja dengan benar dengan target perpustakaan statis saat melakukan tindakan "Arsip" di Xcode.

Target pustaka statis baru yang dibuat dengan Xcode 4.4 atau lebih baru akan datang dengan fase Salin File yang dikonfigurasi dengan tepat untuk header, jadi Anda harus memeriksa untuk melihat apakah Anda sudah memilikinya sebelum membuatnya. Jika tidak, tekan "Add Build Phase" di bagian bawah editor target dan pilih "Add Copy Files". Mengungkapkan fase pembuatan File Salin baru dan menyetel Tujuan ke "Direktori Produk". Setel Sub jalur untuk menyertakan / $ {PRODUCT_NAME}. Ini akan menyalin file ke dalam folder yang dinamai pustaka Anda (diambil dari setelan build PRODUCT_NAME), di dalam folder bernama include, di dalam direktori produk yang Anda buat. Folder include di dalam direktori produk build berada di jalur pencarian header default untuk aplikasi, jadi ini adalah tempat yang tepat untuk meletakkan file header.

Saya yakin bahwa dalam banyak situasi yang ada, pendekatan Apple mungkin tidak cukup. Saya memposting ini di sini untuk siapa saja yang baru memulai perjalanan mereka di jalur taman perpustakaan statis - ini mungkin titik awal terbaik untuk kasus sederhana.

Michael J.
sumber
bagi mereka yang mengikuti link di atas .. berhati-hatilah: langkah yang meminta Anda untuk menghapus file template dummy saat Anda membuat proyek perpustakaan .. JANGAN HAPUS file * .pch .. itu akan menghantui Anda pada akhirnya + yang di atas saran tidak bekerja dengan kategori .. ada perbaikan untuk itu meskipun (melihatnya di suatu tempat)
abbood
Terima kasih telah memberikan tautan ke pendekatan resmi Apple untuk membangun perpustakaan statis. Saya memulai dengan membangun perpustakaan statis saya menggunakan pendekatan ini , tetapi tidak dapat Mengarsipkan. @abbood - Apa masalah dengan menghapus file pch yang dihasilkan?
augusto callejas
jika Anda menghapus file .pch .. proyek tidak akan bisa dikompilasi .. (untuk tujuan pengarsipan atau sebaliknya) ..
abbood
Tidak berhasil untuk saya.Ketika saya mencoba pernyataan impor dengan "" tidak berhasil, saya perlu <>. Selain itu, saat mengarsipkan, header tidak dapat ditemukan. Ada gagasan?
pengguna1010819
4

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

Menurut dokumentasi Apple:

Perpustakaan Anda akan memiliki satu atau beberapa file header yang perlu diimpor oleh klien perpustakaan tersebut. Untuk mengonfigurasi header mana yang diekspor ke klien, pilih project library Anda untuk membuka editor project, pilih target library untuk membuka editor target, dan pilih tab fase build. Jika target perpustakaan Anda memiliki fase build "Salin Header", Anda harus menghapusnya; fase pembuatan header copy tidak bekerja dengan benar dengan target perpustakaan statis saat melakukan tindakan "Arsip" di Xcode.

dmarnel
sumber
3

Lihatlah solusi Jonah Wlliam (tengah jalan ke bawah) & model GitHub (dalam komentar) untuk wawasan. http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

d1bru
sumber
4
Meskipun secara teknis ini mungkin menjawab pertanyaan, sebaiknya Anda menyertakan bagian penting dari artikel yang ditautkan dalam jawaban Anda, dan menyediakan tautan untuk referensi. Gagal melakukan hal itu membuat jawaban berisiko mengalami pembusukan tautan.
jscs
2

Tambahkan $ (OBJROOT) / UninstalledProducts / exactPathToHeaders ke Header Search Paths.

Untuk beberapa alasan kotak centang rekursif tidak berfungsi untuk saya dan saya harus menambahkan sisa jalur ke tempat tajuk berada.

Di bawah Log Navigator di Xcode (tab di sebelah kanan navigator break point) Anda dapat melihat riwayat pembuatan. Jika Anda memilih kegagalan build yang sebenarnya, Anda dapat memperluas detailnya untuk melihat setenv PATH dan memeriksa untuk memastikan jalur ke file header Anda ada di sana.

Collin
sumber
Catatan bagus di kotak centang rekursif, masalah yang sama di sini.
Codezy
Ya, saya harus menentukan sub-folder tertentu juga, memeriksa rekursif tidak berfungsi.
Oliver Pearmain
Saya akhirnya menggunakan jalur ini namun (hanya karena lebih pendek) "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / SubProjectHeaders"
Oliver Pearmain
2

Tidak ada jawaban di atas yang berhasil untuk saya di Xcode 7 tetapi mereka memberi saya ide yang bagus. Untuk orang-orang yang berjuang di Xcode 7, saya memperbaikinya dengan menambahkan yang berikut ke Jalur Pencarian Header Pengguna (termasuk tanda kutip)

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

Ubah bagian URL relatif usr/local/includesesuai dengan apa yang ada di pengaturan 'Jalur Folder Header Publik' pustaka statis

Evol Gate
sumber
2

Dalam kasus saya, ruang kerja saya memiliki beberapa proyek perpustakaan statis dan salah satunya memiliki ketergantungan termasuk file header dengan yang lain. Masalahnya adalah dengan tatanan bangunan. Di halaman edit Skema di bawah bagian Build, saya batal memilih opsi paralelisasi dan mengatur urutan target sesuai ketergantungan dan itu diselesaikan oleh masalah

Vamshi
sumber
1

Tambahkan jalur berikut ke Jalur Pencarian Header Pengguna Anda :

$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts

Ini diverifikasi!

yirenjun
sumber
1

Beresiko menunjukkan betapa bodohnya saya ... Saya menderita Xcode karena menolak menemukan file .h saya sepanjang sore.

Kemudian saya sadar.

Karena saya menggunakan "XCode 4", saya "dengan cerdas" memutuskan untuk meletakkan semua proyek saya di subfolder dari folder yang disebut " Proyek XCode 4 ".

Ruang-ruang di nama folder itu mengacaukan Xcode secara besar-besaran!

Mengganti nama folder ini menjadi " XCode_4_Projects " telah membawa kegembiraan (dan mengurangi umpatan) kembali ke dalam hidup saya.

Ingatkan saya lagi, tahun berapa ini?

Mungkin seseorang bisa memberi tahu pengembang Apple ...

Mike Gledhill
sumber
1

Tak satu pun dari jawaban ini berhasil untuk saya. Inilah yang dilakukannya. Tambahkan yang berikut ini persis (salin dan tempel termasuk tanda kutip ganda) ke setelan build User Header Search Paths Anda :

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

Perhatikan penambahan subdirektori "/ include /" dibandingkan dengan jawaban lain. Seperti yang ditunjukkan pengguna lain, opsi "rekursif" tampaknya tidak melakukan apa-apa, jadi Anda dapat mengabaikannya.

Proyek saya sekarang dapat berhasil mengarsipkan ketika mengimpor file header perpustakaan statis dalam bentuk berikut:

#import "LibraryName/HeaderFile.h"

Anda tidak perlu mengaktifkan pengaturan Always Search User Paths kecuali Anda menyertakan header perpustakaan statis Anda dengan tanda kurung siku ( #import <LibraryName/HeaderFile.h>), tetapi Anda seharusnya tidak melakukannya dengan cara itu jika itu bukan header sistem / kerangka kerja.

devios1
sumber
0

Ini adalah masalah terkait yang membawa saya ke pertanyaan ini, jadi saya menambahkan solusi saya hanya untuk dokumentasi / ini bisa menghemat waktu berjam-jam untuk berkeringat

File DropboxSDK.h tidak ditemukan

Setelah berhari-hari mencoba mendapatkan VES untuk dikompilasi untuk iOS saya akhirnya mengalami masalah ini. yang DropboxSDK.hjelas dalam jangkauan search headerssaya bahkan ditambahkan ke framework headerspath pencarian, included yang .hlangsung dan pergi ke segala macam keras untuk mencoba dan mendapatkan DropboxSDK.hditemukan.

Larutan

EXPLICITY seret DropboxSDK.frameworkfile ke Xcode Project Navigationdan pastikan Copy Files if neededdicentang. Pastikan juga target Anda diperiksa sesuai kebutuhan.

Peringatan

Menyetel lokasi kerangka kerja eksplisit build phasestidak berhasil untuk saya. Saya harus menyeret .framework ke Xcode dan memastikan file disalin ke proyek saya.

# mbp2015 # xcode7 # ios9

Jacksonkr
sumber
0

Ada berbagai cara kompleks untuk melakukan ini, dan beberapa solusi yang sangat cerdas diusulkan di utas ini.

Masalah utama dari semua solusi ini adalah sangat mengurangi portabilitas perpustakaan Anda.

  • Setiap kali Anda perlu memulai proyek baru menggunakan perpustakaan Anda dan mengarsipkannya untuk iTunes, itu adalah neraka konfigurasi.
  • Setiap kali Anda perlu membagikan proyek Anda dengan tim atau pelanggan Anda, itu dapat rusak karena alasan apa pun (konteks, versi Xcode, apa pun, ..)

Pilihan saya akhirnya hanya menggunakan kerangka kerja - selalu - seperti yang direkomendasikan oleh Apple (Video WWDC).

Ini sangat mudah dan melakukan pekerjaan yang sama pada akhirnya!

Solusi lain yang cukup elegan yang tampaknya berhasil adalah dengan menggunakan Cocoapods Pribadi. Cocoapods melakukan semua pekerjaan konfigurasi, salinan header dan sebagainya.

Kerangka batu!

Moose
sumber
1
Di mana Anda mengatur ini? simply use frameworks - always -
Neil Faulkner
Itu tidak diatur di mana pun. Ini hanyalah pilihan arsitektur. Kerangka kerja adalah 'perpustakaan modern' yang lebih mudah ditautkan dan dikelola. Pada saat pesan ini muncul, swift masih tidak memungkinkan untuk membangun pustaka biner.
Moose
0

Inilah yang memecahkan masalah yang sama untuk saya.

Saya memiliki Target Aplikasi, dan Target Ekstensi iMessage. Kemudian saya memiliki 2 SDK (milik saya), yang ditautkan oleh Target Aplikasi.

Masalahnya adalah: target iMessage saya juga menggunakan 2 SDK saya (proyek terpisah), tetapi tidak tertaut dengannya dalam Build Phases -> Link Binary With Libraries. Saya harus menambahkan 2 SDK saya ke iMessage Target di sana, agar sesuai dengan target App saya, dan sekarang diarsipkan.

Jadi inti dari cerita ini adalah: Jika Anda memiliki beberapa target, seperti ekstensi, pastikan bahwa semua target Anda terhubung dengan perpustakaan yang mereka butuhkan. Itu dapat Membangun dan Menyebarkan ke Simulator dan Perangkat, tetapi tidak dapat Mengarsipkan.

FranticRock
sumber
0

Perbarui: Xcode 9

Jawaban di atas tidak berfungsi untuk saya menggunakan Xcode 9, tetapi jawaban ini bekerja dengan sempurna untuk saya. Saya telah menambahkan $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/includeke "Jalur Pencarian Header" dan Xcode menautkan header pustaka statis saya tanpa masalah.

Mohammed Abdullatif
sumber
-18

Selamatkan diri Anda dari masalah dan lakukan ini = buat akun pengguna baru di Mac Anda - buka proyek di bawah akun pengguna baru - semua masalah hilang. Hemat waktu Anda dan jaga kewarasan Anda. semua balasan kutu buku itu tidak membantu !!

Semoga berhasil

Max
sumber