Xcode 8 Beta 3 Eski Swift'i kullan sorunu


201

Xcode 8 Beta 3'te bir Objective-C projem var. Güncellemeden bu yana, her oluşturmaya çalıştığımda aşağıdaki hatayı alıyorum:

Swift kullanan hedefler için “Eski Swift Dil Sürümünü Kullan” (SWIFT_VERSION) doğru yapılandırılması gerekir. Bir Swift sürümü seçmek için [Düzenle> Dönüştür> Geçerli Swift Sözdizimine…] menüsünü kullanın veya oluşturma ayarını doğrudan yapılandırmak için Oluşturma Ayarları düzenleyicisini kullanın.

Bununla karşılaşan var mı? Bir Objective-C projesi olduğundan Swift'i yapılandıracak bir yapı ayarı yoktur. Ayrıca proje bağımlılıklarının veya CocoaPod'ların Swift'i kullanmadığından emin oldum. Sahip olduğum tek çözüm Beta 2'yi kullanmak. Bu sorunu nasıl çözeceğime dair bir fikrin var mı?

Ayrıca OSX 10.12 Beta 2 çalıştırdığımı da belirtmeliyim.


Ben de bu sorunu yaşıyorum ...
rockdaswift

Yanıtlar:


364

CocoaPods kullanıyorsanız ve her yaptığınızda otomatik olarak düzeltilmesini pod installistiyorsanız, bu satırları Podfile'ınızın sonuna ekleyebilirsiniz:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

EDIT: CocoaPods v1.1.1 veya üstünü kullanırsanız bu sorun giderilmiştir. ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESAyarı ana proje hedeflerinizden kaldırmayı unutmayın .


24
Şimdilik kod tabanınızda 2.3 kullanmaya çalışıyorsanız 2.3, 3.0 Great solution yerine kullanın ! Bu etkin hale "Use Legacy Swift Language Version"için No (veya değiştirirseniz 2.3o en Yes). Bu seçeneğin yararı, bu pod installayarı otomatik olarak her ayarladığınızda! Muhteşem. Gördüğüm SWIFT_VERSIONayarlanmış olur Obj-C de projelerde. Herhangi bir olumsuz etkisi olmadığını varsayıyorum?
Herbal7ea

8
Bu harika, ama StackOverflow'da Ruby uzmanı olmadan binlerce ve milyonlarca projenin SOL olması oldukça rahatsız edici. SWIFT_VERSION Xcode ayarını her modülde ve Pod projesinde, Build Settings'i kullanarak manuel olarak 2.3 olarak değiştirdim ve işe yaramadı, ancak bu işe yaramadı. Anlamı gizli rahatsız edici sihir. Bundan nefret ediyorum.
BaseZen

5
Kelimenin tam anlamıyla bu konuda size sahne vermek için giriş yaptım
Dnaso

1
Grafikler (Swift'te), AfNetworking ve diğer bazı Obj-C bölmeleriyle bir Obj-C projem var. Pod dosyamda yukarıdaki komut dosyasını kullandım. Swift ile ilgili tüm hatalar / uyarılar kayboldu ancak şimdi projem AFNetwoking çerçevesini bulamıyor.
ibnetariq

1
@ Mr.Bista Onaylı çözüm stackoverflow.com/a/38597681/2854405 , Xcode ayarlarından çalışmasını sağlar. Ama bunu her yaptığınız her bir Pod repo ile yapmak zorunda kalabilirsiniz pod install / update. Bu çözüm işleri daha hızlı hale getirir. Ayrıca Cocoapods sürümünüzü şimdi güncelleyebilirsiniz: bu sorunu da çözmelidir.
Tulleb

119

Sadece düzeltmenin bir yolunu buldum.

Proje veya kitaplığın Derleme ayarlarına gidin ve "Derleme Hızlı Dil Sürümünü Kullan" Swift Derleyici Sürümü özniteliğini Belirtilmemiş'ten Evet veya HAYIR olarak ayarlayın.

resim açıklamasını buraya girin


13
Objective-C
projemde

Obj-C projenizde Swift proje kitaplıkları var mı?
rockdaswift

2
Hızlı ve kokoapodlar kullanıyorsanız, kokoodlardaki yukarıdaki komut bunu etkili bir şekilde yapar. Her seferinde bunu değiştirmek istemiyorsanız pod installyukarıdaki @Tulleb'in cevabını kullanmanızı tavsiye ederim.
Herbal7ea

Şimdi benim
hatam

1
Bu seçenek artık mevcut değil.
Hemang

33

Bu sorunu bir süredir görmezden geliyorum ve bu arada sadece diğer şeyler üzerinde çalışıyorum - sonunda sorunuma çözüm buldum.

Projem Objective-C olduğundan belki de kullandığım Podlardan birinin Swift kullandığını düşündüm, her Pod'u kontrol ettim ve hiçbiri yoktu.

Son çözüm, Veri> Yeni> NSManagedObjectSubclass menüsünde manuel olarak oluşturmama rağmen Temel Veri modelimin Swift'te kod üretecek şekilde ayarlanmış olmasıydı. Tek yapmam gereken onu Objective-C'ye geçirmekti.

ekran görüntüsü


1
Bunu nasıl buldun? Xcode bunun hakkında hiçbir şey söylemiyor. Beni kurtardın.
Ryan

2
Gerçekten benim çözümüm ve kurtarıcım. Teşekkürler! Tüm Uygulama objektif-c olduğunda Apple'ın Coredata modellerini otomatik olarak 'Swifty' haline getirmesi aptalca ....
Bob de Graaf

18

Bu sorun Xcode-8.1'de de görülebilir. Eklenti veya Widget gibi yeni Hedef eklediğimizde ve Üçüncü taraf kütüphanesi, kocopodların yardımıyla yeni hedefe entegre edildi. Pod kurulumundan sonra . Yukarıdaki ile aynı hatayla karşılaşabiliriz.

Her Kütüphane Derleme Ayarında Eski Swift Dili Sürümünü Kullan olarak değiştirin

Hayır .

resim açıklamasını buraya girin


Benim durumumda Eski Swift Dili Sürümünü Evet olarak ayarlamak, sorunu çözdü.
Jayprakash Dubey

Bu sorunu yaşayan her lib için Evet ya da Hayır olarak ayarladığınızdan emin olun .. benim durumumda
Çalışmadım

Bu benim için çalıştı. Lütfen aynı şeyi Test hedefi için de yaptığınızdan emin olun
zizutg

@zizutg: - Tüm hedefi kontrol etmeliyiz. Tekrar işaret ettiğiniz için teşekkürler.
Shrawan

9

Xcode 8 veya daha yenisini kullanıyorsanız

  1. Yapı Ayarları'na gidin
  2. Eski hızlı dil sürümünü kullan
  3. Evet - Swift 2.3
  4. Hayır - Swift 3.0 resim açıklamasını buraya girin

5

Pod dosyasının sonuna aşağıdaki kodu ekleyin.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end

4

Daha önce hızlı sürüm 2.3 kullandığım objektif-c ve swift kodu karışık olan bir proje üzerinde çalışıyorum ve 3 swift'e yükselttikten sonra projeyi oluşturamadım. Xcode, belirtilen hata mesajıyla şikayet etti.

Görünüşe göre, project.pbxproj dosyamda hala eski bazı Swift sürümleri belirtilmişti. Hızlı 3.0.1 belirtildi:

SWIFT_VERSION = 3.0.1;

Halbuki ben zaten 3.0.2 kurulu:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Sooo, project-pbxproj dosyasındaki Swift sürümünü şu şekilde değiştirerek düzelttim:

SWIFT_VERSION = 3.0;

Yama seviyesi sürüm belirleyicisinin çok spesifik olduğu anlaşılıyor.


4

Benim durumumda Sadece aşağıdaki şeyleri yaptım

Projeyi seçin Hedef => Yapıya Git ayarı => “Swift Dil Sürümü” ara = => Değer'e geçerli Swift sürümünü ver

Hepsi bu Sorunumu Çözdü

Bu Resmi Takip Et


4

Aynı hatayı aldım. "Eski Swift Dil Sürümünü Kullan" aramayı denedim, ancak bulunamadı. Ben Xcode 8.3.3 kullanıyorum Çok sörf yaptıktan ve çevresinde çalıştıktan sonra bu çözümü buldum ve bu benim için çalıştı.resim açıklamasını buraya girin

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)

3

projenizde veya herhangi bir hızlı 3. tarafın eski bir hızlı sürümünü kullanıyorsanız "Eski Swift Dil Sürümünü Kullan" ı "EVET" olarak ayarlayın. Projeniz geçerli hızlı sürüme güncellenirse "Hayır". hızlı sürümünüzü yapılandırmazsanız, her güncelleme ve yükleme işleminden sonra Pod çerçevesinin bunu belirtmesi gerekir.


2

Aslında "Legacy Swift" için bir arama yapmak zorunda kaldım, belirtilmemiş olandan "Evet" e değiştirebiliyorum. Sadece yukarıda anlatılan bölüme ilerlediğimde değiştiremedim. Umarım bu birisine yardım eder.


2

Projem Swift'te yazılıyor. İle aynı hatayı aldım fastlane. Olan şey Xcode'umun otomatik olarak güncellenmesi oldu, bu yüzden projemi Swift 3.0'a güncellemek zorunda kaldım. Bir ton hata var. Düzeltme ve hata ayıklama çok zaman alıyordu ve o anda buna değmezdi, bu yüzden Xcode'un eski bir sürümünü yüklemeye karar verdim. Kodumu 2.3'e çevirdim. O fastlane betazaman artık çalışmadı. Görünen o ki, Komut Satırı Aracını 7.3 olarak ayarlamam gerekiyordu. resim açıklamasını buraya girin


1

Aynı sorunu yaşıyordum ve aşağıdakileri yaparak çözdüm:

Proje> Oluşturma Ayarları'nda:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

Sonra Pod dosyamda:

config.build_settings['SWIFT_VERSION'] = '3.0'

Bu üç ayarı kullanmak tüm uyarıları kaldırdı ve doğru şekilde derlememe izin verdi.

Derlemek için en belirsiz ve gerçekten ilerleme kaydedilen, Podfile'daki SWIFT_VERSION değerini burada önerildiği gibi 3'ten 3.0'a değiştirmekti .


1

XCode 8'den itibaren, XCode 8 varsayılan hızlı sürüm olarak swift 3.x kullanmasına rağmen swift 2.3'ü kullanabilirsiniz. Hızlı 2.3'ü kullanmak için, Yapı Ayarı'ndan Eski Hızlı Dil Sürümü'nü YES olarak işaretleyin, ardından XCode bu proje hedefi için Swift 2.3'ü kullanır.


1

Karmaşık çözümleri denemeden önce, Cocoapods'da yeniyseniz ve bu sorunu yaşıyorsanız yapmanız gereken temel bir kontrol.

Şunları yapmanız gerekebilir:

  • Podfile'ınızı tekrar açın
  • Platform satırının '#' ile yorumlanmadığından emin olun. Sonunda şöyle bir şey olmalı:

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • Pod Dosyanızı kaydedin, Xcode'u kapatın ve pod installtekrar çalıştırın
  • Project.xcworkspace dosyanızı açın

Belki de sadece budur.

Değilse, yukarı çıkabilirsiniz ;-)


1

Ben xcode 8.3.2 güncelledikten sonra aynı sorunu vardı ama "Eski Swift dilini kullan" seçeneği gitmişti. Bu şimdi değiştirme seçeneği gibi görünüyor: Swift Lang Sürümü

Alamofire ve diğer libs ile bu düzeltme kullanılır ve tüm çalışır tamam.


1

Proje için Proje Oluşturma Ayarı'na gidin ve Hedef iki altında yapın.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

En son olarak değiştirin Swift 3.

Hata çözüldü.

Hata düzeltmenizi çözdüyse lütfen beğenin.


1

Xcode 9 beta sürümünde. Proje Ayarları, Yapı Ayarları'na gidin, Hızlı Dil Sürümü'nü arayın. Xcode 9'da Swift 3.2 veya Swift 4 kullanıp kullanmadığınızı belirtmelisiniz.


9.0b'de hem projeyi hem de hedefi Swift 4'e ayarlamanın hatayı üretmeye devam ettiği bir projem vardı, hem Swift 3.2'ye ayarlandı, hem de Swift 4'e geri ayarlamak artık iyi, bu yüzden her şeyi doğru yapabilir ve hala bir hata alıyorum.
green_knight

1

Eğer değiştirirseniz ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESiçin NOhala işin, bu xcode sorunu nedeniyle değil, senin sorunun. Aşağıdaki adımları uygulayın:

1. Uyarı hedefinde ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESolmak YESiçin özelliği değiştirin

2. sonra sol çubukta hızlı 3.0'ı değiştirmenizi öneren bir uyarı gösterecektir.

3. sonra tekrar değiştirin NO. Projeyi yeniden oluşturun, xcode sonunda yaptığınız değişikliği algılar NO!

Bu durumda sorun çözüldü!

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.