Swift Version NativeScript

99封情书 提交于 2019-11-30 07:55:37

Just had these same errors and found out downgrading from cocoapods 1.6.0 to 1.5.3 fixed it for me.

    sudo gem uninstall cocoapods
    sudo gem install cocoapods -v 1.5.3

The problem here seems to be Toaster (2.0.4), which appears to have been developed for Swift 3.

I did this in order to resolve the issue:

  1. go to the main folder for the nativescript project

  2. In your bash shell, do:

    % export SWIFT_VERSION=3

  3. Then do your usual:

    % tns build ios --bundle

  4. Then open the project in Xcode:

    % cd platforms/ios

    % Open *.workspace

You'll get a warning about a build error in the pods project and may need to set your development team, but it should work.

The problem is with Cocoapods 1.6.x which have different behavior when it comes up to SWIFT_VERSION. Previously it was possible to set the SWIFT_VERSION in post_install hook of the Podfile, but now the pod install command fails before even getting to post_install. The best solution is to use Cocoapod which already has SWIFT_VERSION set, i.e. in case you face the error, try to contact the Pod author. Meanwhile, as a workaround, you can add a pre_install script in your <path to App_Resources/iOS/Podfile file with the following content:

pre_install do |installer|
    installer.analysis_result.specifications.each do |s|
        if s.name == 'Socket.IO-Client-Swift' || s.name == 'Starscream' || s.name == 'StarscreamSocketIO' || s.name == 'Toaster'
            s.swift_version = '4.2'
        end
    end
end

For each of the Pods you can set different Swift version based on their requirements.

I have it fixed with @K Brown's answer.

Was having these errors when running tns run ios --bundle for Socket.IO-Client-Swift, StarscreamSocketIO and Toaster when both v1.6.0 and v1.5.3 of Cocoapods installed:

- `<package name>` does not specify a Swift version and none of the targets 
(`<project name>`) integrating it have the `SWIFT_VERSION` attribute set. 
Please contact the author or set the `SWIFT_VERSION` attribute in at least one 
of the targets that integrate this pod. 

Below are the commands used:

sudo gem uninstall cocoapods

sudo gem install cocoapods -v 1.5.3

rm -Rf platforms

tns install

tns run ios --bundle

Here is the real fix ! You can't stick with Cocoapods 1.5.3 forever...

Downgrading to 1.5.3 isn't a proper workaround and will not be sustainable in the future. In fact, this error is due to a new behavior introduced in Cocoapods 1.6.0 version, which force developers to set a Swift version to their projects. The goal is in fact to make library developers specify a Swift version in their podspec, so that library users don't have to do this manually (thanks to post_install scripts for example). You can see my discussion about this with a Cocoapods maintainer here. I do agree that this behavior is a bit misleading, as we try to set the Swift version in post_install script but an error is returned before…

In fact, as I have been told by the maintainer, the correct fix to this issue is to set a Swift version at project level (and therefore not at Pod level). To do this, just add a new User Defined Setting in Build Settings, with key SWIFT_VERSION and value 4.0 (for example, as whatever value should work here if you also set the version at Pod level with post_install script).

Long story short, the fix is to add this key/value :

Note that as you're using NativeScript, you may want to set the Swift version by running command export SWIFT_VERSION=4 in your project folder, before building.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!