2015-03-11 15 views
13

NB: Bu, proje yapısıyla ilgili this question ile ilgilidir, ancak sorunu daha iyi bir şekilde çözmek için büyük ölçüde kullanım durumu kararını verdim.AFNetworking'i bir iOS Uygulaması ve CocoaPods aracılığıyla Ekleme için Çerçeve olarak nasıl eklenir?

Sorun

nasıl iOS uygulamasında ve CocoaPods yoluyla eşlik eden iOS Extension (, veya ) içinde ekleyebilirim?

Sorunlar Uzantıları kullanım için

  • , AFNetworking Bunun anlamı AFNetworking 2 versiyonları ihtiyacı var, #define AF_APP_EXTENSIONS ile inşa edilmesi gerekmektedir? Uzantı ve Uygulama için bir tane?

  • Çerçeveler, doğru yerlere oluşturulup kopyalanacak şekilde Pod dosyasını nasıl kurarım? use_frameworks!'daki belgeler biraz incedir.

+1

Gelecekte bu konuyla karşılaşan kişiler için: AFNetworking, yazının yazıldığı andan itibaren bunu en son sürümlerinde düzelttiği için, aşağıdaki çözümleri denemeden önce bölmeyi güncelleştirmeyi deneyin. – ftvs

cevap

13

Güncelleme:

Ritmik Fistman yeni pod yükleme yapılırken orijinal cevabım yöntem üzerine alır belirtildiği gibi.

Aelam

bu Github issue aşağıdaki yöntemi sağlanan:

sizin podfile Bu ekleyin. Hedef Adını

post_install do |installer_representation| 
    installer_representation.project.targets.each do |target| 
     if target.name == "Pods-YOU_EXTENSION_TARGET-AFNetworking" 
      target.build_configurations.each do |config| 
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'AF_APP_EXTENSIONS=1'] 
      end 
     end 
    end 
end 

Eski cevabı değiştirmeyi unutmayın:

1) pod 'AFNetworking' sizin podfile hem hedefler (kapsayıcı uygulama ve uzatma) için dahildir emin olun. benim durumumda

Örnek:

target 'ContainerAppTarget', :exclusive => true do 
    pod "SDKThatInternallyUsesAFNetworking" 
end 

target 'ExtensionTarget', :exclusive => true do 
    pod 'AFNetworking' 
end 

2) XCode, onun oluşturma seçeneklerini getirmek için hiyerarşi görünümü Pod tıklayın. Daha sonra yapı seçenekleri üzerinde, açılır menüde yapı seçeneklerini incelediğiniz hedefi seçin. Pods-{Extension Target Name}-AFNetworking arasından seçim yapın (pod yüklemesi ile otomatik olarak oluşturulmuş olmalıdır. Daha sonra Oluşturma Ayarları'nı seçin. Ardından Apple LLVM 6.0 - Dil altında, Prefix başlığının bir dosya adına sahip olduğunu doğrulayın. Bu durumda dosyamda Target Support Files/Pods-{Extension Target Name}-AFNetworking/Pods-{Extension Target Name}-AFNetworking-prefix.pch var. Dosya adı veya benzeri bir dosya ekleyin ve ekleyin.

3) Orada adlandırılan veya buraya eklediğiniz önek başlık dosyasına gidin. kapsayıcınızın uygulaması AFNetworking bir sürümüne işaret izin vermelidir

#define AF_APP_EXTENSIONS 

normalde inşa edilmiş ve bayrak seti ile inşa başka etmek üzere uzantı uygulaması: Neredeyse boş olacak, sonra da sonuna aşağıdaki satırı ekleyin. Yani kütüphanenin sadece bir versiyonu ama her biri hedeflerden birinde iki farklı şekilde inşa edildi.

+3

Bu pch dosyası, modifikasyonunuzu temizleyen bir pod kurulumu yaptığınızda her zaman yeniden oluşturulur. –

+0

Sen benim tanrım kahrolası kahramansın. – Mike

+0

Cocoapods yüklenirken bu sorunu aldım [!] SDKThatInternallyUsesAFNetworking ' için bir özellik bulamadığım için SDKThatInternallyUsesAFNetworking başka bir şeyle değiştirmem gerekiyordu? – Geet

9

Bu gönderiye yeni gelenler için işler biraz değişti.

Kafamı duvara çarptırarak epeyce zaman harcadım, umarım bu sizin bir kısmınızdan aynı kaderden kurtulacaktır.

Cocoapod'lar, pod başına yalnızca bir kitaplık oluşturacak şekilde değiştirildi, böylece AF_APP_EXTENSIONS makrosunu doğru bir şekilde ayarlamak için, aslında uzantınızın hedefini değil, AFNetworking hedefinde ayarlanması gerekir. (Bazı güzel günlük ifadelere)

Örneğin

:

post_install do |installer_representation| 
    installer_representation.pods_project.targets.each do |target| 
     puts "=== #{target.name}" 
     if target.name == "AFNetworking" 
      puts "Setting AFNetworking Macro AF_APP_EXTENSIONS so that it doesn't use UIApplication in extension." 
      target.build_configurations.each do |config| 
       puts "Setting AF_APP_EXTENSIONS macro in config: #{config}" 
       config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'AF_APP_EXTENSIONS=1'] 
      end 
     end 
    end 
end 

Ayrıca belirterek değer pods_project

Cocoapods installer_representation.pods_project.targets.each do |target| yılında project onaylamamıştır ve biraz pods_project

biri olarak değiştirildi Bunun alt tarafı, AFNetworking'in konteyner uygulamasında herhangi bir UIApplication API'sini kullanmamasıdır, ancak bu benim projemde bir sorun değildi.

Bu yardımcı olur umarım.

+0

Yeni gelen kişi. Bu yazıyla gelene kadar çözüm için her yeri aradım. Bu güncelleme için teşekkürler! – ZeMoon

+0

Sorun değil! Memnun kaldım! – wyzkid207

+0

Kafamı duvara çarptığında bile defalarca çalışsam olmazdı. Harika çalıştı, teşekkürler! –

İlgili konular