Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Xcode 9:无法在Swift 4.0中导入使用Swift 3.1编译的模块_Ios_Cocoapods_Facebook Login_Xcode9 Beta_Swift4 - Fatal编程技术网

Ios Xcode 9:无法在Swift 4.0中导入使用Swift 3.1编译的模块

Ios Xcode 9:无法在Swift 4.0中导入使用Swift 3.1编译的模块,ios,cocoapods,facebook-login,xcode9-beta,swift4,Ios,Cocoapods,Facebook Login,Xcode9 Beta,Swift4,在升级到Xcode 9之后,我尝试构建我的一个项目 我使用facebook登录pod。 FacebookLogin/LoginButton.swift中存在编译器错误 @testable import FacebookCore ❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0 在我的目标的构建设置中,Swift语言版本设置为Swift 3.2 我想我需要等待Facebook更新他们的pod?还是其他建议 谢谢 也

在升级到Xcode 9之后,我尝试构建我的一个项目

我使用facebook登录pod。 FacebookLogin/LoginButton.swift中存在编译器错误

@testable import FacebookCore
❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0
在我的目标的构建设置中,Swift语言版本设置为Swift 3.2

我想我需要等待Facebook更新他们的pod?还是其他建议


谢谢

也许你可以在建造目标之前清理它。
它对我来说工作得很好。

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的反馈进行编辑

我有

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'
在我的项目和导入FBSDKLoginKit中,清理目标后,我没有任何问题

由于您正在使用的pod在swift中,是一个测试版pod,因此您可能会在swift 4编译器中遇到一些问题,您应该暂时使用pod的objective-c版本,执行“清理构建文件夹”并重新启动Xcode 9为我清除了错误。此外,该错误并未阻止应用程序在我的设备或模拟器上运行

这对我很管用

1.在Xcode 8中清理项目


2.在Xcode 9中构建或运行项目,转到Xcode DerivedData目录,然后删除其中的所有文件并重新编译项目。这对我有用


默认的DerivedData目录是:~/Library/Developer/Xcode/DerivedData

我在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. `
1。CMD+SHIFT+K来清理构建
2.如果从Pod使用,请重新启动Xcode 9:

  • pod文件中
    comment facebook登录pod
  • 吊舱安装

  • pod文件中
    取消对facebook登录pod的注释
  • 吊舱安装

  • 再次运行您的项目

  • 更新:

    该解决方案也在Swift 5和Xcode 11中进行了测试和工作

    原件:

    我想补充一点,如果您使用迦太基在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
    

    在我的例子中,实际的pod引用了一个静态zip,其中包含针对swift3.1的预构建二进制文件。 因此,唯一的解决方案是使用xcode 9的源代码重建框架


    如果使用迦太基,打开终端

    carthage update --platform iOS --no-use-binaries
    
    pod update
    
    如果使用吊舱,打开终端,然后

    carthage update --platform iOS --no-use-binaries
    
    pod update
    
    (如果在pod中不工作,也可以在pod文件中更改SWIFT_版本,例如:

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

    之后

    打开Xcode并使用

    Command+Option+Shift+K
    

    我在Xcode 9 GM上遇到了同样的问题,这解决了我的问题:
    将其从项目中删除,并再次将其拖动到“嵌入式二进制文件”中。

    我在Xcode 9中清理了该项目,然后运行该应用程序,它就可以工作了

    清除生成文件夹

    Cmd + option + shift + K
    

    你可以试试看。对我来说不起作用,仍然在寻找另一个解决方案。仅供参考-这有点过于激进,因为它强制所有吊舱都使用Swift 4.0。如果吊舱符合Swift 3,您可以安全地跳到Swift 3.2。跳到4.0很可能会导致许多POD出现编译器问题。我在使用Algolia框架时也遇到了同样的错误,并使用carthage和Xcode 9命令工具构建它,效果很好!感谢我使用迅捷JSON。谢谢使用AlamofireHi@xaviPedrals为我工作,我需要你的帮助。。。我正在尝试运行该项目“”,但收到错误“Swift 4.2.1编译器无法导入使用Swift 3.1编译的模块:/Users/aliapple/Desktop/SingTestByAhtazaz/Pods/AudioKit/iOS/AudioKit.framework/Modules/AudioKit.swiftmodule/arm64.swiftmodule”。你能在这方面帮助我吗?Hi@Mr.Ahtazaz该项目是2年前的,所以它可能是用Swift 3制作和编译的,首先该项目应该更新为Swift 4或5,然后尝试运行carthage命令
    carthage update nameoflibrary--platform iOS--no use binaries
    来更新库,你应该没问题“清理生成文件夹“:要访问该选项,请打开“产品”菜单并使用选项键显示“清理生成文件夹”选项。请不要对多个问题给出相同的答案。发布一个好的答案,然后投票/标记以重复结束其他问题。如果问题不是重复的,请根据问题定制您的答案。请参阅@paper1111我在回答中解释了所有的内容,我使用的是迦太基,这是我的解决方案。迦太基更新版“我的框架”并没有削减它。我必须更新整个迦太基目录。花了很长时间,但成功了。这个解决方案对我也有效。为了确保在使用Command+Option+Shift+K清理构建文件夹后关闭并重新启动xcode。@SwiftDeveloper
    config.build\u设置
    部分到哪里去了?我有一个类似的问题,即在pod中引用AudioKit。但是,您的解决方案引用了“框架”中的build_frameworks.sh。请添加更多详细信息。我找不到这样的文件。请尝试将pod文件指向较新的版本。使用最新xcode 9生成的版本-/无需更改生成脚本。谢谢你的提示。我必须更新