ios - Xcode 9: الوحدة النمطية المترجمة مع Swift 3.1 لا يمكن استيرادها في Swift 4.0




cocoapods facebook-login (10)

goto xcode DerivedData directory ثم أزل كل الملفات بداخله وأعد ترجمة مشروعك. انها تعمل بالنسبة لي.

دليل DerivedData الافتراضي هو: ~ / Library / Developer / Xcode / DerivedData.

بعد التحديث إلى Xcode 9 ، حاولت إنشاء أحد مشاريعي.

يمكنني استخدام جراب FacebookLogin . لدي خطأ مترجم في FacebookLogin / LoginButton.swift

@testable import FacebookCoreModule compiled with Swift 3.1 cannot be imported in Swift 4.0

في إعدادات بناء هدفي ، يتم تعيين إصدار لغة Swift على Swift 3.2 .

أعتقد أنني بحاجة إلى انتظار Facebook لتحديث جرابهم؟ أو أي اقتراح آخر؟

شكر !


إذا كنت تستخدم قرطاج ، فتح المحطة و ؛

carthage update --platform iOS --no-use-binaries

في حالة استخدام Pod ، افتح الجهاز و

pod update

(أيضًا ، إذا لم تنجح في pod ، فيمكنك تغيير SWIFT_VERSION في podfile على سبيل المثال:

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

)

بعد؛

فتح Xcode والاستخدام ؛

Command+Option+Shift+K


إنه يعمل من أجلي.

1. تنظيف المشروع الخاص بك في Xcode 8

2. بناء أو تشغيل المشروع الخاص بك في Xcode 9


القيام "مجلد بنية نظيفة" وإعادة تشغيل Xcode 9 تنظيف الخطأ بالنسبة لي. كما لم يوقف الخطأ تشغيل التطبيق على جهازي أو جهاز المحاكاة.


تنظيف مجلد البناء

Cmd + option + shift + K

ربما يمكنك تنظيف الهدف قبل بنائه. انه يعمل بشكل جيد بالنسبة لي.


لدي

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

في مشروعي import FBSDKLoginKit ، بعد تنظيف الهدف لم يكن لدي أي مشكلة

نظرًا لأن السند الذي تستخدمه هو سريع وسريع بيتا ، فمن المحتمل أن تواجه بعض المشكلات في برنامج التحويل البرمجي لـ swift 4 ، يجب عليك استخدام الإصدار الموضوعي من السند في الوقت الحالي


واجهت نفس المشكلة على Xcode 9 Beta 3 ، والتي تشير إلى "Alamofire" وحاولت بعض الحلول المختلفة ، وأسهل الحلول التي وجدتها هي

1. CMD+SHIFT+K to clean the build
2. Restart Xcode 9 <-- make sure you do this step, that's critical. `

يأتي Xcode 9 مع برنامج التحويل البرمجي Swift 4 الذي يفهم كل من Swift 3.2 و Swift 4 ، بل إنه يتيح لك المزج والتطابق بين الإصدارين. لسوء الحظ ، الإصدارات الأخرى غير مدعومة.

حتى إذا قمت بتعيين لغتك إلى Swift 3.2 ، فإنه يستخدم برنامج التحويل البرمجي Swift 4.

إذا كنت تستخدم cocoapods ، يمكنك إضافة هذا إلى نهاية ملف pod لإجبار pods على استخدام Swift 3.2 أو 4.0:

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

بدلاً من ذلك ، يمكنك وضع الملفات من pod مباشرة في مشروعك مؤقتًا ، حتى يتم تحديث FacebookLogin على Swift 3.2 أو 4.

ملاحظة: تم التعديل بناءً على تعليقات Matt


تحديث:

تم اختبار الحل أيضًا والعمل في Swift 4.2 و Xcode 10.

أصلي:

أود أن أضيف أنه إذا كنت تستخدم Carthage في ترجمة وحدة نمطية في Swift 3.2 ، فيجب أن تذهب إلى المحطة الطرفية وتعمل:

sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer

لاستخدام أدوات سطر الأوامر Xcode 9 ، يمكنك تشغيل:

carthage update NameOfTheLibrary --platform iOS --no-use-binaries

سيؤدي ذلك إلى تجميع المكتبة باستخدام أدوات سطر الأوامر الحالية ، ويمكن أن يكون بطيئًا بعض الشيء ولكن الآن يجب إنشاء المشروع.

ملحوظة

للتراجع عن أدوات سطر الأوامر المستقرة Xcode واستخدامها ، ما عليك سوى تشغيل:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer




swift4