Convert to Current Swift Syntax Failed - “No such

2019-06-15 06:03发布

In Xcode 9, I am trying to do the automatic conversion to Swift 4. It fails with the following message:

enter image description here

Convert to Current Swift Syntax Failed
Please ensure that all selected targets build successfully with the currently configured Swift version before attempting a migration.

It's complaining of a missing module. But when I do a regular build there are no issues. Not sure if this is relevant, but the module (which Xcode is complaining is missing) was already converted to Swift 4 earlier (in it's own project).

Note: No Cocoapods / Carthage used here.

Note: Two solutions tried (and worked) but do not address the underlying issue.

  • One solution is to do the conversion manually (change Swift version to 4 in build setting and apply Fix-Its one by one until no more build errors).
  • Another solution is to disable the third party framework (comment out all code where it's used), do the auto-migration, and then re-enable the framework. This could get pretty difficult with bigger projects.

5条回答
在下西门庆
2楼-- · 2019-06-15 06:30

I also got this problem while converting my project to Swift 4.0. Looks like problem appears when you try to convert target which imports a framework which is already in Swift 4.0. At your screenshot you try to convert 'RecipeTextParser' which imports 'SovaTools' which is already Swift 4.0.

I found dirty, but working solution. You can use older(Swift 3.2) version of 'SovaTools' when converting. You should NOT check it's mark in target selection window of conversion tool. Then, when 'RecipeTextParser' will be successfully converted you can use Swift 4.0 'SovaTools' version again.

查看更多
Viruses.
3楼-- · 2019-06-15 06:31

Just update your pod and it will resolve the issue.

To update pod:

  • open terminal and go to your project directory
  • type pod update

This resolved my issue.

查看更多
等我变得足够好
4楼-- · 2019-06-15 06:43

I can't find any solution yet.

For now I fix manually setting Swift Language Version

enter image description here

After changing from 3.2 to 4.0 I compile and fix errors and warnings manually.
I'm waiting for a better solution!

查看更多
手持菜刀,她持情操
5楼-- · 2019-06-15 06:46

Xcode (Xcode 9) language migration feature is not as much accurate that it can migrate your complete code/project from one swift version to another with zero tolerance. It skips few code migration for us (developers). It may be bug or inaccuracy of tool. But you need to put some manual effort also, to completely migrate swift language version for your project/code.

Now, according to your snapshot, Xcode is showing and error for 'RecipeTextParser' framework. I think this is an external/third party framework. Another point to note, you've integrated this framework using CocoaPods:

Any one of following can be reason for failure of code migration:

  1. CocoaPods locks framework (files) for editing. So language migration process may not be able to migrate (or identify) code for external/thirdparty framework.
  2. In general terms, Framework is package of code files, so framework itself may not allow file/source code editing.

Suggestion as solution:

  1. Update your cocoa pods as well as all frameworks integrated using cocoa pods compatible to latest swift language version.
  2. If you've manually integrated/added external/third party frameworks, then you need to update/replace those also.

Some manual effort is required to completely migrate code between swift languages. I tried swift migration with above options and my all projects are now compatible with swift 4.

查看更多
可以哭但决不认输i
6楼-- · 2019-06-15 06:52

I got this error and in my case one of my Pods(the one Xcode was complaining about) was a Swift 4 target and the rest were Swift 3.2. Looking at the build logs it looks like Xcode built that framework in one location and was searching for it in another. When I reverted that Pod to an older version(that used Swift3.2) the problem went away. Obviously a Xcode bug. HTH

查看更多
登录 后发表回答