2014-07-23 21 views
9

Taban Why don't iOS framework dependencies need to be explicitly linked to a static libraryÇerçeveyi artık XCode projesine bağlamamız gerekmiyor mu? Bu soru üzerine

Ben seçilmiş cevabı okumak ve hala çok iyi anlamak Ben bir örnek projesini testi projesinde

Test Project on Github

yapılmış değil, ben her çerçeve çıkarmak Kütüphanelerle Bağlantı İkilileri ve Hem ana proje hem de statik kitaplık için (Gezinme dahil) dosya gezintisi. Çerçeve ve UIKit.framework da) temel olarak her iki proje de 0 çerçevesine bağlanır.

Sorular projesi, neden onun hala çalışıyor için Mapkit.framework referans olmadan, MapKit/MapKit.h dahil oluyor statik kütüphanesinde

  • nelerdir?
  • Ana projede UIKit.framework ve Foundation.framework'ı projeden kaldırıyorum, neden hala çalışıyor?
  • Şimdilik çalıştığı için daha sonra sorun olacak mı?

Yorumunuz için teşekkür ederiz.

P.S. 'un numaralı çalışmasında, simülatörde çalışabilirim ve ana projeyi herhangi bir hata olmadan arşivleyebilirim.

Düzenleme 25/07/2014 Ben üzerinde çalışıyorum gerçek uygulaması ile çalıştı

, aynı.

  • Foundation, UIKit, CoreData ve File Navigation'daki 10 farklı çerçeveyi vurguladım, hepsi de.
  • işaretini kaldırın Araçları Masası'ndaki hedef -> Hedef Üyelik
  • Yapı: Run, Şifre: beklendiği gibi hala çalışıyor

benim app Her işlevselliği geçirin. Bunu anlamadım.

cevap

25

Proje oluşturma ayarlarınızı kontrol edin. LLVM 5.1 - Dil - Modülleri'un altında 'Çerçeveleri Otomatik Olarak Bağla' seçeneğini görmelisiniz. Durumunuzda, varsayılan olarak 'YES' olarak ayarlanmış gibi görünüyor. Bu durumda

, bunun yerine derleyici bilmediği bir sınıf başvuruda zaman bir hata üretme, bu Çerçeve o sınıfı içeren anlamaya ve onu bağlarız. Kodunuzda, bağlantıyı tetikleyen MKMapView veya diğer MapKit sınıflarından biri olacaktır.

DÜZENLEME: İlgili 'What's New?' document den:

Oto Bağlama kod modüllerinin tarafından ithal çerçeveler için etkindir. bir kaynak dosya, modüllerini destekleyen bir çerçeveden bir başlık içerdiğinde, derleyici bu çerçeveye otomatik olarak bağlanmak için nesne dosyasında ek bilgi üretir. Sonuç olarak, çoğu örneğinde, modüllerini destekleyen bir çerçeve API'si kullandığınızda, hedefinizle bağlantı kurmak için çerçevelerinin ayrı bir listesini belirtmeniz gerekmez.

bakarak bir başka yolu derleyici çerçevesi uygun inşa edildiğinde @import için #import mutasyona kadar akıllı olmasıdır. Bütün sistem çerçeveleri olmuştur.

+0

Teşekkürler @Tommy, evet, YES. Eğer sorabilirsem, Bağlantı Çerçeveleri için otomatik olarak varsayılan değer YES, değil mi? Öyleyse, yeni bir proje oluşturduğumda, herhangi bir çerçeveye bağlanmam gerekmeyebilir mi? –

+2

Evet, şimdi varsayılan olarak 'Evet'. Ayrıca, eski bir projeyi açarak, özelliği önceleyen bir şey açtığınızda varsayılan olarak 'Evet' olarak görünüyor. Bu yüzden, bağlantı kurma adımında [düzgün yapılandırılmış] çerçeveleri açıkça listelemek için endişelenmenize gerek olmadığını düşünüyorum. Pedantically: Hala onlara bağlı olacaksınız, sadece derleyicinin kendisi için bunu çözebiliyor. – Tommy

+0

Açıklama için teşekkürler, kısa bir süre önce eklediğim ve LLVM değişiklik kaydını okumadığım yeni bir özellik olduğunu düşünüyorum. –

İlgili konular