Xcode 4, genel başlık dosyalarını statik kitaplık bağımlılığından bulamıyor


91

Aramaya yardımcı olacak alternatif başlıklar

  • Xcode başlığı bulamıyor
  • Xcode'da .h eksik
  • Xcode .h dosyası bulunamadı
  • sözcük veya önişlemci sorun dosyası bulunamadı

Xcode 3'ten gelen bir iOS uygulama projesi üzerinde çalışıyorum. Şimdi Xcode 4'e geçtim projem bir dizi statik kitaplık oluşturuyor.

Bu statik kitaplıklar ayrıca genel başlıkları da bildirir ve bu başlıklar uygulama kodu tarafından kullanılır. Xcode 3.x (a yapı faz olarak) kopyalandı başlıkları public headers directory, uygulama projesinde public headers directoryilave edildi headers search list.

Xcode 4 altında, yapı dizini konumuna taşınır ~/Library/Developer/Xcode/DerivedData/my-project.

Sorun, üstbilgi arama ayarlarında bu yeni konuma nasıl başvurabilirim? Öyle görünüyor:

  • public headers directorygörelidir DerivedData, dizindeki ama
  • headers search dizin başka bir şeye bağlıdır (muhtemelen proje konumu)

Bağımlılık olarak derlemeye çalışırken statik kitaplığı kullanan istemciler için başlık dosyalarının erişilebilir olmasını sağlayacak Xcode 4'te iOS geliştirme için bir statik kitaplık hedefi nasıl kurmalıyım?


Yol isimleriyle ilişkili olabilir. Pl bu gönderiyi kontrol edin. [Xcode 4'teki statik kitaplıklar] [1] [1]: stackoverflow.com/questions/6074576/static-libraries-in-xcode-4/…
Diego Marafetti

Yanıtlar:


124

Bu soruna yönelik gördüğüm çözümlerin her biri ya uygunsuz göründü (başlıkları uygulamanın projesine kopyalamak) ya da yalnızca önemsiz durumlarda işe yarayacak kadar basitleştirildi.

Kısa cevap

Kullanıcı Başlığı Arama Yollarınıza aşağıdaki yolu ekleyin

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

Bu neden işe yarıyor?

Önce sorunu anlamamız gerekiyor. Normal koşullar altında, yani Çalıştırdığınızda, Test ettiğinizde, Profillediğinizde veya Analiz ettiğinizde, Xcode projenizi oluşturur ve çıktıyı $ BUILT_PRODUCTS_DIR makrosu aracılığıyla erişilebilen Build / Products / Configuration / Products dizinine koyar .

Statik kitaplıkları ile ilgili çoğu kılavuzları olarak ayarlanması önerilir Kamu Başlıkları Klasör Yolu için $ TARGET_NAME , sizin lib dosyası haline gelmesi anlamına gelir $ BUILT_PRODUCTS_DIR /libTargetName.a ve başlıkları konur $ BUILT_PRODUCTS_DIR / hedefadı. Uygulamanız arama yollarında $ BUILT_PRODUCTS_DIR içerdiği sürece, içe aktarmalar yukarıda verilen 4 durumda çalışacaktır. Ancak arşivlemeye çalıştığınızda bu çalışmayacaktır.

Arşivleme biraz farklı çalışır

Bir projeyi arşivlediğinizde Xcode, ArchiveIntermediates adlı farklı bir klasör kullanır. Bu klasör içinde / YourAppName / BuildProductsPath / Release-iphoneos / öğesini bulacaksınız. Bu, arşiv oluşturduğunuzda $ BUILT_PRODUCTS_DIR'ın işaret ettiği klasördür . Oraya bakarsanız, yerleşik statik kitaplık dosyanıza bir sembolik bağ olduğunu ancak başlıkları olan klasörün eksik olduğunu göreceksiniz.

Başlıkları (ve lib dosyasını) bulmak için IntermediateBuildFilesPath / UninstalledProducts / adresine gitmeniz gerekir. Statik kitaplıklar için Yüklemeyi Atla seçeneğini EVET olarak ayarlamanızın söylendiği zamanı hatırlıyor musunuz? Bu, bir arşiv oluşturduğunuzda ayarın sahip olduğu etkidir.

Ek not: Yüklemeyi atlayacak şekilde ayarlamazsanız, başlıklarınız başka bir konuma yerleştirilecek ve lib dosyası arşivinize kopyalanarak, App Store'a gönderebileceğiniz bir .ipa dosyasını dışa aktarmanızı engelleyecek şekilde kopyalanacaktır. .

Çok fazla aramadan sonra, UninstalledProducts klasörüne tam olarak karşılık gelen herhangi bir makro bulamadım, bu nedenle yolu "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts" ile oluşturmam gerekiyor.

Özet

Statik kitaplığınız için, yüklemeyi atladığınızdan ve herkese açık başlıklarınızın $ TARGET_NAME içine yerleştirildiğinden emin olun.

Uygulamanız için, kullanıcı başlığı arama yollarınızı normal derlemeler için iyi çalışan "$ (BUILT_PRODUCTS_DIR)" ve arşiv derlemeleri için çalışan "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts" olarak ayarlayın.


Bunun DerivedData klasörüyle ilişkisi nedir?
Richard Stelling

Normal derlemeler şu adrese gider: DerivedData / WorkspaceName-hash / Build / Products / Debug-iphoneos / TargetName.app --- Arşiv derlemeleri şu adrese gider: DerivedData / WorkspaceName-hash / Build / Intermediates / ArchiveIntermediates / TargetName / BuildProductsPath / Release-iphoneos / TargetName.app
Colin

3
Benim için yinelemeli onay kutusu ile "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts" kullanmak işe yaramadı. Özyinelemeli bayrağı olmadan "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / <nameOfStaticLibrary>" kullandığım anda, benim için çalıştı.
TPoschel

7
Senin o Not $ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts aslında $(TARGET_BUILD_DIR). Arşivlerken bile. ;)
Pascal

1
Xcode 5'te benim için: $ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / include / NAME OF LIBRARY EVET olarak ayarlamadım: Her zaman kullanıcı yollarını ara.
xarly

85

Kendi statik kitaplığımı geliştirirken aynı sorunla karşılaştım ve Colin'in cevabı çok yardımcı olmasına rağmen, Xcode 4 altında bir Çalışma Alanı kullanarak projeleri hem çalıştırırken hem de arşivlerken tutarlı ve basit bir şekilde çalışması için onu biraz değiştirmek zorunda kaldım.

Yöntemimin farkı, tüm derleme yapılandırmalarınız için tek bir kullanıcı başlığı yolu kullanabilmenizdir.

Yöntemim aşağıdaki gibidir:

Bir Çalışma Alanı Oluşturun

  1. Xcode 4'ün altında Dosya, Yeni, Çalışma Alanı'na gidin.
  2. Finder'dan, hem kullanmak istediğiniz statik kitaplık hem de kitaplığı kullanan oluşturduğunuz yeni uygulama için .xcodeproj projelerini sürükleyebilirsiniz. Çalışma Alanlarını kurma hakkında daha fazla bilgi için Apple Docs'a bakın: https://developer.apple.com/library/content/featuredarticles/XcodeConcepts/Concept-Workspace.html

Statik Kitaplık Proje Ayarları

  1. Tüm statik kitaplığın başlıklarının "Genel" olarak kopyalanacak şekilde ayarlandığından emin olun. Bu, statik kitaplık hedefi> Derleme Aşamaları ayarları altında yapılır. "Başlıkları Kopyala" aşamasında, tüm başlıklarınızın "Genel" bölümünde olduğundan emin olun.
  2. Ardından, Yapı Ayarları'na gidin, "Genel Başlıklar Klasörü Yolu" nu bulun ve kitaplığınız için bir yol yazın. Bunu kullanmayı seçiyorum:

include / LibraryName

Bunu RestKit ile kullanmaktan uyarladım ve tüm statik kitaplıklarımda en iyi şekilde çalıştığını gördüm. Bunun yaptığı şey, Xcode'a 1. adımda "Genel" başlıklar bölümüne taşıdığımız tüm başlıkları, derleme sırasında Türetilmiş Veriler klasöründe bulunan burada belirttiğimiz klasöre kopyalamasını söyler. RestKit'te olduğu gibi, bir projede kullandığım her statik kütüphaneyi içeren tek bir "include" klasörü kullanmayı seviyorum.

Burada makro kullanmayı da sevmiyorum çünkü daha sonra statik kitaplığı kullanarak projeyi yapılandırdığımızda tek bir kullanıcı başlığı arama yolu kullanmamıza izin verecek.

  1. "Yüklemeyi Atla" yı bulun ve bunun EVET olarak ayarlandığından emin olun.

Statik Kitaplığı Kullanan Proje Ayarları

  1. Statik kitaplığı, Derleme Aşamaları> Kitaplıklarla İkili Bağla altında bir çerçeve olarak ekleyin ve kullanmak istediğiniz statik kitaplık için libLibraryName.a dosyasını ekleyin.
  2. Ardından, projenin Kullanıcı Arama Yollarını arayacak şekilde ayarlandığından emin olun. Bu, Yapı Ayarları> Her Zaman Kullanıcı Yollarını Ara altında yapılır ve YES olarak ayarlandığından emin olun.
  3. Aynı alanda Kullanıcı Başlığı Arama Yollarını bulun ve ekleyin:

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

Bu, Xcode'a, oluşturma işlemi sırasında Xcode'un oluşturduğu ara yapı klasöründe statik kitaplıkları aramasını söyler. Burada statik kitaplık proje ayarları için 2. adımda kurduğumuz statik kitaplık konumlarımız için kullandığımız "include" klasörümüz var. Statik kitaplıklarınızı doğru bir şekilde bulmak için Xcode edinmenin en önemli adımı budur.

Çalışma Alanını Yapılandırın

Burada, çalışma alanını, uygulamamızı oluşturduğumuzda statik kitaplığı oluşturacak şekilde yapılandırmak istiyoruz. Bu, uygulamamız için kullanılan şemayı düzenleyerek yapılır.

  1. Uygulamanızı oluşturacak şemayı seçtiğinizden emin olun.
  2. Şema açılır menüsünden Şemayı Düzenle'yi seçin.
  3. Soldaki listenin en üstünde Oluştur'u seçin. Orta bölmedeki + düğmesine basarak yeni bir hedef ekleyin.
  4. Bağlamaya çalıştığınız kitaplık için statik kitaplığın göründüğünü görmelisiniz. İOS statik kitaplığını seçin.
  5. Çalıştır ve Arşivle'yi tıklayın. Bu, şemaya uygulamanızı her oluşturduğunuzda statik kitaplık için kitaplıkları derlemesini söyler.
  6. Statik kitaplığı uygulama hedefinizin üzerine sürükleyin. Bu, statik kitaplıkların uygulama hedefinizden önce derlenmesini sağlar.

Kitaplığı Kullanmaya Başlayın

Şimdi, statik kitaplığınızı kullanarak içe aktarabilmelisiniz.

import <LibraryName/LibraryName.h>

Bu yöntem, farklı konfigürasyonlar için farklı kullanıcı başlığı yollarına sahip olma zorluğunun üstesinden gelir, bu nedenle arşivler için derlemede sorun yaşamazsınız.

Bu neden işe yarıyor?

Hepsi bu yola bağlı:

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

Statik kitaplığımızı "Yüklemeyi Atla" seçeneğini kullanacak şekilde yapılandırdığımız için, derlenen dosyalar geçici derleme dizini içindeki "UninstalledProjects" klasörüne taşınır. Buradaki yolumuz ayrıca statik kitaplığımız için kurduğumuz ve kullanıcı başlığı arama yolumuz için kullandığımız "include" klasörünü de çözer. İkisinin birlikte çalışması, Xcode'un derleme işlemi sırasında kitaplığımızı nerede bulacağını bilmesini sağlar. Bu geçici derleme dizini hem Debug hem de Release konfigürasyonları için mevcut olduğundan, statik kitaplıkları aramak için Xcode için yalnızca tek bir yola ihtiyacınız vardır.


3
Harikasın adamım! Bu gerçekten yardımcı oluyor ve açıkladığınız gibi çalışıyor.
neevek

1
harika. Nereye çiçek göndereyim :)
Ramesh

1
Bunu ayarladıktan sonra, bazılarınız " ...] 0x ... sınıfına gönderilen tanınmayan seçici ile karşılaşabilir . Bunu yaparsanız, bunu projenizin Hedefler-> Proje-> Yapı Ayarları-> Bağlama-> Diğer Bağlayıcı Bayrakları'na eklemeyi
deneyin

Boşlukları varsa Kullanıcı Başlığı Arama Yollarının tırnak içinde olduğundan emin olun.
saygıTheCode

Xcode 4.6.2 benim için "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / include" alanına hiçbir şey yazmıyor. Ne kaçırdığım hakkında bir fikrin var mı? Veya Xcode davranışı tekrar mı değişti?
01'de c roald

16

Xcode 4 Projesi Statik bir kitaplık derleyemiyor

İlgili soru: Xcode 4'te "sözcük veya önişlemci sorun dosyası bulunamadı"

Hatalar şunları içerebilir; başlık dosyaları eksik, "sözcük veya ön işlemci sorunu"

Çözümler:

  1. "Kullanıcı başlığı yollarının" doğru olup olmadığını kontrol edin
  2. "Her zaman kullanıcı yollarını ara" yı EVET olarak ayarlayın
  3. Projenizde bir grup çağrısı "İndeksleme başlıkları" oluşturun ve başlıkları bu gruba sürükleyin, istendiğinde herhangi bir hedefe EKLEMEYİN .

11
Kolayca gözden kaçan ancak son derece önemli bir başka adım: Herhangi bir boşluktan kaçmak için arama yollarınızın çift tırnak içine alındığından emin olun. Bunu yapmayı hep unutuyorum.
Brad

Teşekkürler @Brad, bu gerçekten çok önemli ve faydalı bir açıklama.
Julian D.

15

Bu çok yardımcı bir konu oldu. Kendi durumumu araştırırken, Apple'ın Eylül 2012 tarihli "iOS'ta Statik Kitaplıkları Kullanma" başlıklı 12 sayfalık bir belgeye sahip olduğunu öğrendim. İşte pdf bağlantısı: http://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf

İnternet tartışmalarının çoğundan çok daha basit ve kullandığım harici kitaplıkların nasıl yapılandırıldığını açıklayan bazı küçük modlarla benim için iyi çalışıyor. En önemli kısım muhtemelen şudur:

Kitaplık hedefinizin bir "Başlıkları Kopyala" oluşturma aşaması varsa, onu silmelisiniz; üstbilgileri kopyala oluşturma aşamaları, Xcode'da "Arşivle" eylemini gerçekleştirirken statik kitaplık hedefleriyle doğru çalışmıyor.

Xcode 4.4 veya üstü ile oluşturulan yeni statik kitaplık hedefleri, başlıklar için uygun şekilde yapılandırılmış bir Dosya Kopyalama aşamasıyla birlikte gelir, bu nedenle bir tane oluşturmadan önce zaten sahip olup olmadığınızı kontrol etmelisiniz. Aksi takdirde, hedef düzenleyicinin altındaki "Yapı Aşaması Ekle" ye basın ve "Kopya Dosyaları Ekle" yi seçin. Yeni Dosya Kopyalama oluşturma aşamasını açıklayın ve Hedefi "Ürünler Dizini" olarak ayarlayın. Alt yolu / $ {PRODUCT_NAME} içerecek şekilde ayarlayın. Bu, dosyaları, yerleşik ürünler dizininizin içindeki include adlı bir klasörün içindeki kitaplığınızın adını taşıyan bir klasöre (PRODUCT_NAME oluşturma ayarından alınır) kopyalar. Bir yapı ürünleri dizini içindeki dahil etme klasörü, uygulamalar için varsayılan başlık arama yolundadır, bu nedenle burası, başlık dosyalarını koymak için uygun bir yerdir.

Eminim ki mevcut birçok durumda Apple'ın yaklaşımı yeterli olmayabilir. Statik kütüphane bahçesi yolunda yolculuklarına yeni başlayanlar için bunu buraya gönderiyorum - bu basit durumlar için en iyi başlangıç ​​noktası olabilir.


yukarıdaki bağlantıyı takip edenler için .. dikkat: kütüphane projesini oluşturduğunuzda sizden sahte şablon dosyalarını silmenizi isteyen adım .. * .pch dosyasını SİLMEYİN .. sonunda sizi rahatsız edecek + yukarıdakiler tavsiye kategorilerle çalışmıyor .. bunun için bir düzeltme var (bir yerde gördüm)
abbood

Statik kitaplıklar oluşturmaya yönelik resmi bir Apple yaklaşımına bağlantı sağladığınız için teşekkür ederiz. Statik kitaplığımı bu yaklaşımı kullanarak oluşturarak başladım ancak Arşivleyemedim. @abbood - Oluşturulan pch dosyasını silmeyle ilgili sorun nedir?
augusto callejas

.pch dosyasını silerseniz .. proje derlenmez .. (arşivleme amacıyla veya başka bir amaçla) ..
abbood

Benim için çalışmıyor. "" İle import deyimini denediğimde işe yaramıyor <> ihtiyacım var. Ayrıca arşivleme sırasında başlıkları bulamıyor. Herhangi bir fikir?
user1010819

4

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

Apple belgesine göre:

Kitaplığınız, o kitaplığın istemcilerinin içe aktarması gereken bir veya daha fazla başlık dosyasına sahip olacaktır. Hangi başlıkların istemcilere aktarılacağını yapılandırmak için, proje düzenleyicisini açmak üzere kitaplık projenizi seçin, hedef düzenleyiciyi açmak için kitaplık hedefini seçin ve derleme aşamaları sekmesini seçin. Kitaplık hedefinizin bir "Başlıkları Kopyala" oluşturma aşaması varsa, onu silmelisiniz; üstbilgileri kopyala oluşturma aşamaları, Xcode'da "Arşivle" eylemini gerçekleştirirken statik kitaplık hedefleriyle doğru çalışmıyor.



2

Ekle $ (OBJROOT) / UninstalledProducts / exactPathToHeaders için Başlık Arama Yolları.

Bazı nedenlerden dolayı özyinelemeli onay kutusu benim için çalışmadı ve yolun geri kalanını başlıkların bulunduğu yere eklemek zorunda kaldım.

Xcode'daki Günlük Gezgini'nin altında (kırılma noktaları gezgininin sağındaki sekme) yapı geçmişini görebilirsiniz. Gerçek derleme hatasını seçerseniz, setenv PATH'ini görmek için ayrıntılarını genişletebilir ve başlık dosyalarınızın yolunun orada olduğundan emin olabilirsiniz.


Özyinelemeli onay kutusu hakkında iyi not, burada da aynı sorun.
Codezy

Evet, belirli bir alt klasörü de belirtmem gerekiyordu, özyinelemeyi kontrol etmek işe yaramadı.
Oliver Pearmain

Ancak bu yolu kullandım (sadece daha kısa olduğu için) "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / SubProjectHeaders"
Oliver Pearmain

2

Yukarıdaki cevapların hiçbiri benim için Xcode 7'de işe yaramadı ama yine de bana iyi bir fikir verdiler. Xcode 7'de mücadele eden adamlar için, Kullanıcı Başlığı Arama Yollarına aşağıdakileri ekleyerek bunu düzelttim (tırnak işaretleri dahil)

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

İlgili URL bölümünü usr/local/include, statik kitaplığın 'Genel Üstbilgi Klasörü Yolu' ayarında bulunanlara göre değiştirin


2

Benim durumumda çalışma alanımda birkaç statik kitaplık projesi vardı ve bunlardan biri diğeriyle başlık dosyalarını içeren bağımlılığa sahip. Sorun, inşaat sırasındaydı. Build bölümünün altındaki Scheme edit sayfasında, paralelleştirme seçeneğindeki seçimi kaldırdım ve bağımlılıklara göre hedeflerin sırasını düzenledim ve problemle çözüldü


1

Kullanıcı Başlığı Arama Yollarınıza aşağıdaki yolu ekleyin :

$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts

Bu doğrulandı!


1

Ne kadar aptal olduğumu gösterme riskine rağmen ... XCode tüm öğleden sonra .h dosyalarımı bulmayı reddederek acı çekiyorum.

Sonra anladım.

"XCode 4" ü kullandığım için "akıllıca" tüm projelerimi " XCode 4 projeleri " adlı bir klasörün alt klasörlerine koymaya karar vermiştim .

Klasör adındaki bu boşluklar XCode'u büyük ölçüde karıştırdı!

Bu klasörü " XCode_4_Projects " olarak yeniden adlandırmak, hayatıma neşe (ve daha az küfür) getirdi.

Bana tekrar hatırlat , bu hangi yıl?

Belki birisi Apple geliştiricilerine söyleyebilir ...


1

Bu cevapların hiçbiri benim için işe yaramadı. İşte ne yaptı. Aşağıdakileri tam olarak ekleyin (çift tırnak işaretleri dahil kopyalayıp yapıştırın) Kullanıcı Başlığı Arama Yolları oluşturma ayarınıza:

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

Diğer yanıtlarla karşılaştırıldığında "/ include /" alt dizininin eklendiğine dikkat edin. Diğer kullanıcıların da belirttiği gibi, "özyinelemeli" seçeneği hiçbir şey yapmıyor, bu yüzden onu görmezden gelebilirsiniz.

Projem artık statik kitaplık başlık dosyalarını aşağıdaki biçimde içe aktarırken başarıyla arşivleyebiliyordu:

#import "LibraryName/HeaderFile.h"

Sen do not etkinleştirmeniz gerekir Always Arama Kullanıcı Yollarını Eğer açılı ayraçlar (ile statik kütüphane başlıklarını içeren sürece ayarı #import <LibraryName/HeaderFile.h>), ama bir sistem / çerçeve başlığı değilse eğer gerçekten bu şekilde zaten yapmamalıyız.


0

Bu, beni bu soruya yönlendiren ilgili bir sorun, bu yüzden çözümümü kesinlikle dokümantasyon için ekliyorum / başka bir ruh saatini terlemekten kurtarabilir

DropboxSDK.h dosyası bulunamadı

VES'i iOS için derlemeye çalıştıktan günler sonra sonunda bu sorunla karşılaştım. DropboxSDK.hulaşabilecekleri bir yerde kesinlikle search headersben bile onu eklenen framework headersarama yolunun, included .hdoğrudan ve denemek ve almak büyük çaba her türlü gitti DropboxSDK.hbulundu.

Çözüm

EXPLICITYDropboxSDK.framework dosyayı Xcode'lara sürükleyin ve işaretlendiğinden Project Navigationemin olun Copy Files if needed. Ayrıca hedefinizin gerektiği gibi kontrol edildiğinden emin olun.

Uyarı

Açık çerçeve konumunu ayarlamak build phasesbenim için işe yaramadı. .Framework'u Xcode'a sürüklemem ve dosyaların projeme kopyalandığından emin olmam gerekiyordu .

# mbp2015 # xcode7 # ios9


0

Bunu yapmanın çeşitli karmaşık yolları vardır ve bu başlıkta bazı çok akıllı çözümler önerilmiştir.

Tüm bu çözümlerin temel sorunu, kitaplık taşınabilirliğinizi ciddi şekilde azaltmasıdır.

  • Kitaplığınızı kullanarak yeni bir proje başlatmanız ve onu iTunes için arşivlemeniz gerektiğinde, bu bir yapılandırma cehennemi.
  • Projenizi ekibinizle veya müşterilerinizle her paylaşmanız gerektiğinde, herhangi bir nedenle (bağlam, Xcode sürümü, ne olursa olsun, ..)

Seçimim nihayetinde - her zaman - Apple tarafından önerildiği gibi çerçeveleri kullanmak oldu (WWDC Videoları).

Çok daha kolay ve sonunda aynı işi yapıyor!

İşe yarıyor gibi görünen oldukça zarif bir çözüm de Özel Cocoapods kullanmaktır. Cocoapods tüm yapılandırma işlerini, başlık kopyalarını vb. Yapar.

Çerçeveler rock!


1
Bunu nereye ayarlıyorsunuz? simply use frameworks - always -
Neil Faulkner

Hiçbir yere ayarlanmadı. Bu sadece mimari bir seçimdir. Çerçeveler, bağlanması ve yönetilmesi çok daha kolay olan 'modern kütüphanelerdir'. Bu mesaj sırasında, swift hala ikili kitaplıklar oluşturmaya izin vermiyor.
Moose

0

İşte benim için aynı sorunu çözen şey.

Bir Uygulama Hedefim ve bir iMessage Uzantı Hedefim var. Ardından, Uygulama Hedefinin bağlantı oluşturduğu 2 SDK'm vardı (kendime ait).

Sorun şuydu: iMessage hedefim de benim 2 SDK'mı kullanıyordu (ayrı projeler), ancak Yapı Aşamaları -> Kitaplıklarla İkili Bağlantı Kurma'da bunlarla bağlantı kurmuyordu. Uygulama hedefime uyması için 2 SDK'mı oradaki iMessage Target'a eklemek zorunda kaldım ve şimdi arşivliyor.

Öyleyse, hikayenin ahlaki şudur: Uzantılar gibi birden çok hedefiniz varsa, tüm hedeflerinizin ihtiyaç duydukları kitaplıklarla bağlantılı olduğundan emin olun. Simülatör ve Cihaza Derleyip Dağıtabildi, ancak Arşivleyemedi.


0

Güncelleme: Xcode 9

Yukarıdaki cevaplar Xcode 9 kullanarak benim için işe yaramadı, ancak bu cevap benim için mükemmel çalıştı. $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"Başlık Arama Yollarıma" ekledim ve Xcode, statik kitaplığımın başlığını sorunsuz bir şekilde bağladı.


-18

Kendinizi zahmetten kurtarın ve bunu yapın = Mac'inizde yeni kullanıcı hesabı oluşturun - projeyi yeni kullanıcı hesabının altında açın - tüm sorunlar ortadan kalkar. Zaman kazanın ve akıl sağlığınızı koruyun. tüm o inek cevapları yardımcı olmuyor !!

İyi şanslar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.